Merge "New hook ApiCheckCanExecute."
authorDaniel Kinzler <daniel.kinzler@wikimedia.de>
Wed, 5 Sep 2012 19:06:48 +0000 (19:06 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Wed, 5 Sep 2012 19:06:48 +0000 (19:06 +0000)
699 files changed:
.gitignore
.jshintignore
.jshintrc
RELEASE-NOTES-1.20
api.php
docs/hooks.txt
docs/magicword.txt
docs/memcached.txt
extensions/README
img_auth.php
includes/Article.php
includes/AuthPlugin.php
includes/AutoLoader.php
includes/CacheHelper.php
includes/Category.php
includes/CategoryViewer.php
includes/CryptRand.php
includes/DataUpdate.php
includes/DefaultSettings.php
includes/Defines.php
includes/EditPage.php
includes/Exception.php
includes/FeedUtils.php
includes/FileDeleteForm.php
includes/GlobalFunctions.php
includes/HTMLForm.php
includes/Html.php
includes/ImagePage.php
includes/Licenses.php
includes/Linker.php
includes/LinksUpdate.php
includes/LocalisationCache.php
includes/Message.php
includes/MessageBlobStore.php
includes/Metadata.php
includes/OutputPage.php
includes/ProtectionForm.php
includes/Revision.php
includes/Sanitizer.php
includes/Setup.php
includes/SiteStats.php
includes/Skin.php
includes/SkinLegacy.php
includes/SkinTemplate.php
includes/SpecialPage.php
includes/SqlDataUpdate.php
includes/StreamFile.php
includes/Timestamp.php [new file with mode: 0644]
includes/Title.php
includes/Uri.php [deleted file]
includes/User.php
includes/UserMailer.php
includes/WebStart.php
includes/WikiError.php
includes/WikiPage.php
includes/ZhConversion.php
includes/ZipDirectoryReader.php
includes/actions/InfoAction.php
includes/api/ApiEditPage.php
includes/api/ApiFormatBase.php
includes/api/ApiMain.php
includes/api/ApiParse.php
includes/api/ApiQueryAllUsers.php
includes/api/ApiQueryDuplicateFiles.php
includes/api/ApiQueryLogEvents.php
includes/api/ApiQueryProtectedTitles.php
includes/api/ApiQueryRecentChanges.php
includes/api/ApiQueryRevisions.php
includes/api/ApiQueryUserInfo.php
includes/api/ApiQueryUsers.php
includes/cache/MessageCache.php
includes/db/Database.php
includes/db/DatabaseIbm_db2.php
includes/db/DatabaseMssql.php
includes/db/DatabaseMysql.php
includes/db/DatabaseOracle.php
includes/db/DatabasePostgres.php
includes/db/DatabaseSqlite.php
includes/debug/Debug.php
includes/diff/DifferenceEngine.php
includes/filebackend/FSFileBackend.php
includes/filebackend/FileBackend.php
includes/filebackend/FileBackendMultiWrite.php
includes/filebackend/FileBackendStore.php
includes/filebackend/FileOp.php
includes/filebackend/SwiftFileBackend.php
includes/filebackend/TempFSFile.php
includes/filebackend/filejournal/DBFileJournal.php
includes/filerepo/FileRepo.php
includes/filerepo/file/File.php
includes/filerepo/file/LocalFile.php
includes/installer/DatabaseInstaller.php
includes/installer/DatabaseUpdater.php
includes/installer/Installer.php
includes/installer/MysqlUpdater.php
includes/installer/OracleUpdater.php
includes/installer/PostgresUpdater.php
includes/installer/SqliteUpdater.php
includes/installer/WebInstaller.php
includes/installer/WebInstallerOutput.php
includes/installer/WebInstallerPage.php
includes/job/DoubleRedirectJob.php
includes/job/Job.php
includes/job/RefreshLinksJob.php
includes/job/UploadFromUrlJob.php
includes/json/FormatJson.php
includes/libs/CSSJanus.php
includes/libs/GenericArrayObject.php
includes/logging/LogFormatter.php
includes/logging/LogPage.php
includes/media/Bitmap.php
includes/media/Bitmap_ClientOnly.php
includes/media/DjVu.php
includes/media/Exif.php
includes/media/FormatMetadata.php
includes/media/GIF.php
includes/media/ImageHandler.php
includes/media/MediaHandler.php
includes/media/MediaTransformOutput.php
includes/media/PNG.php
includes/media/SVG.php
includes/media/SVGMetadataExtractor.php
includes/media/XMP.php
includes/normal/UtfNormal.php
includes/objectcache/APCBagOStuff.php
includes/objectcache/BagOStuff.php
includes/objectcache/DBABagOStuff.php
includes/objectcache/ObjectCacheSessionHandler.php
includes/objectcache/RedisBagOStuff.php
includes/objectcache/XCacheBagOStuff.php
includes/parser/CacheTime.php
includes/parser/CoreParserFunctions.php
includes/parser/Parser.php
includes/parser/Parser_LinkHooks.php
includes/parser/Preprocessor_HipHop.hphp
includes/parser/StripState.php
includes/resourceloader/ResourceLoaderLanguageDataModule.php
includes/resourceloader/ResourceLoaderWikiModule.php
includes/specials/SpecialBlock.php
includes/specials/SpecialDeletedContributions.php
includes/specials/SpecialNewpages.php
includes/specials/SpecialRecentchanges.php
includes/specials/SpecialRecentchangeslinked.php
includes/specials/SpecialSearch.php
includes/specials/SpecialUndelete.php
includes/specials/SpecialUpload.php
includes/specials/SpecialUserlogin.php
includes/templates/Usercreate.php
includes/templates/Userlogin.php
includes/tidy.conf
includes/upload/UploadBase.php
includes/upload/UploadFromUrl.php
includes/zhtable/Makefile.py
includes/zhtable/toHK.manual
includes/zhtable/toTW.manual
index.php
languages/Language.php
languages/LanguageConverter.php
languages/classes/LanguageAm.php [deleted file]
languages/classes/LanguageAr.php
languages/classes/LanguageBe.php [deleted file]
languages/classes/LanguageBh.php [deleted file]
languages/classes/LanguageBs.php
languages/classes/LanguageCs.php [deleted file]
languages/classes/LanguageCu.php
languages/classes/LanguageCy.php [deleted file]
languages/classes/LanguageDsb.php
languages/classes/LanguageFr.php [deleted file]
languages/classes/LanguageGa.php
languages/classes/LanguageGan.php
languages/classes/LanguageGd.php [deleted file]
languages/classes/LanguageHe.php
languages/classes/LanguageIu.php
languages/classes/LanguageKk.php
languages/classes/LanguageKu.php
languages/classes/LanguageShi.php
languages/classes/LanguageSr.php
languages/classes/LanguageTg.php
languages/classes/LanguageUz.php
languages/classes/LanguageZh.php
languages/data/plurals-mediawiki.xml [new file with mode: 0644]
languages/data/plurals.xml [new file with mode: 0644]
languages/messages/MessagesAb.php
languages/messages/MessagesAf.php
languages/messages/MessagesAk.php
languages/messages/MessagesAln.php
languages/messages/MessagesAn.php
languages/messages/MessagesAr.php
languages/messages/MessagesArc.php
languages/messages/MessagesArz.php
languages/messages/MessagesAs.php
languages/messages/MessagesAst.php
languages/messages/MessagesAz.php
languages/messages/MessagesBa.php
languages/messages/MessagesBcl.php
languages/messages/MessagesBe.php
languages/messages/MessagesBe_tarask.php
languages/messages/MessagesBg.php
languages/messages/MessagesBr.php
languages/messages/MessagesBs.php
languages/messages/MessagesCa.php
languages/messages/MessagesCe.php
languages/messages/MessagesCkb.php
languages/messages/MessagesCs.php
languages/messages/MessagesCu.php
languages/messages/MessagesCy.php
languages/messages/MessagesDa.php
languages/messages/MessagesDe.php
languages/messages/MessagesDiq.php
languages/messages/MessagesDsb.php
languages/messages/MessagesEl.php
languages/messages/MessagesEn.php
languages/messages/MessagesEo.php
languages/messages/MessagesEs.php
languages/messages/MessagesEt.php
languages/messages/MessagesEu.php
languages/messages/MessagesFa.php
languages/messages/MessagesFi.php
languages/messages/MessagesFr.php
languages/messages/MessagesFrp.php
languages/messages/MessagesGa.php
languages/messages/MessagesGag.php
languages/messages/MessagesGan.php
languages/messages/MessagesGd.php
languages/messages/MessagesGl.php
languages/messages/MessagesGot.php
languages/messages/MessagesGsw.php
languages/messages/MessagesGu.php
languages/messages/MessagesHaw.php
languages/messages/MessagesHe.php
languages/messages/MessagesHif_latn.php
languages/messages/MessagesHr.php
languages/messages/MessagesHsb.php
languages/messages/MessagesHu.php
languages/messages/MessagesHy.php
languages/messages/MessagesIa.php
languages/messages/MessagesId.php
languages/messages/MessagesIg.php
languages/messages/MessagesIlo.php
languages/messages/MessagesIs.php
languages/messages/MessagesIt.php
languages/messages/MessagesJa.php
languages/messages/MessagesKa.php
languages/messages/MessagesKhw.php
languages/messages/MessagesKiu.php
languages/messages/MessagesKk_arab.php
languages/messages/MessagesKk_cyrl.php
languages/messages/MessagesKk_latn.php
languages/messages/MessagesKm.php
languages/messages/MessagesKo.php
languages/messages/MessagesKsh.php
languages/messages/MessagesKu_latn.php
languages/messages/MessagesKw.php
languages/messages/MessagesLa.php
languages/messages/MessagesLad.php
languages/messages/MessagesLb.php
languages/messages/MessagesLmo.php
languages/messages/MessagesLt.php
languages/messages/MessagesLzz.php
languages/messages/MessagesMg.php
languages/messages/MessagesMhr.php
languages/messages/MessagesMin.php
languages/messages/MessagesMk.php
languages/messages/MessagesMl.php
languages/messages/MessagesMr.php
languages/messages/MessagesMs.php
languages/messages/MessagesMt.php
languages/messages/MessagesMwl.php
languages/messages/MessagesMyv.php
languages/messages/MessagesMzn.php
languages/messages/MessagesNah.php
languages/messages/MessagesNb.php
languages/messages/MessagesNds.php
languages/messages/MessagesNds_nl.php
languages/messages/MessagesNl.php
languages/messages/MessagesNn.php
languages/messages/MessagesNso.php
languages/messages/MessagesOc.php
languages/messages/MessagesOr.php
languages/messages/MessagesOs.php
languages/messages/MessagesPa.php
languages/messages/MessagesPl.php
languages/messages/MessagesPms.php
languages/messages/MessagesPs.php
languages/messages/MessagesPt.php
languages/messages/MessagesPt_br.php
languages/messages/MessagesQqq.php
languages/messages/MessagesQu.php
languages/messages/MessagesRm.php
languages/messages/MessagesRo.php
languages/messages/MessagesRoa_tara.php
languages/messages/MessagesRu.php
languages/messages/MessagesRue.php
languages/messages/MessagesSa.php
languages/messages/MessagesSah.php
languages/messages/MessagesSd.php
languages/messages/MessagesSe.php
languages/messages/MessagesSh.php
languages/messages/MessagesSi.php
languages/messages/MessagesSk.php
languages/messages/MessagesSl.php
languages/messages/MessagesSq.php
languages/messages/MessagesSr_ec.php
languages/messages/MessagesSr_el.php
languages/messages/MessagesSrn.php
languages/messages/MessagesSv.php
languages/messages/MessagesSw.php
languages/messages/MessagesSzl.php
languages/messages/MessagesTa.php
languages/messages/MessagesTe.php
languages/messages/MessagesTet.php
languages/messages/MessagesTh.php
languages/messages/MessagesTl.php
languages/messages/MessagesTly.php
languages/messages/MessagesTpi.php
languages/messages/MessagesTr.php
languages/messages/MessagesTru.php
languages/messages/MessagesTt_cyrl.php
languages/messages/MessagesTt_latn.php
languages/messages/MessagesUk.php
languages/messages/MessagesUr.php
languages/messages/MessagesVec.php
languages/messages/MessagesVep.php
languages/messages/MessagesVi.php
languages/messages/MessagesVro.php
languages/messages/MessagesWa.php
languages/messages/MessagesYi.php
languages/messages/MessagesZh_hans.php
languages/messages/MessagesZh_hant.php
languages/utils/CLDRPluralRuleEvaluator.php [new file with mode: 0644]
load.php
maintenance/Maintenance.php
maintenance/archives/upgradeLogging.php
maintenance/attachLatest.php
maintenance/backup.inc
maintenance/backupTextPass.inc
maintenance/benchmarks/Benchmarker.php
maintenance/benchmarks/bench_HTTP_HTTPS.php
maintenance/benchmarks/bench_delete_truncate.php
maintenance/benchmarks/bench_if_switch.php
maintenance/benchmarks/bench_strtr_str_replace.php
maintenance/benchmarks/bench_utf8_title_check.php
maintenance/benchmarks/bench_wfIsWindows.php
maintenance/benchmarks/benchmarkHooks.php
maintenance/benchmarks/benchmarkPurge.php
maintenance/cdb.php
maintenance/changePassword.php
maintenance/checkAutoLoader.php
maintenance/checkBadRedirects.php
maintenance/checkImages.php
maintenance/checkSyntax.php
maintenance/checkUsernames.php
maintenance/cleanupAncientTables.php
maintenance/cleanupCaps.php
maintenance/cleanupImages.php
maintenance/cleanupPreferences.php
maintenance/cleanupRemovedModules.php
maintenance/cleanupSpam.php
maintenance/cleanupTable.inc
maintenance/cleanupTitles.php
maintenance/cleanupUploadStash.php
maintenance/cleanupWatchlist.php
maintenance/clear_interwiki_cache.php
maintenance/clear_stats.php
maintenance/commandLine.inc
maintenance/compareParsers.php
maintenance/convertLinks.php
maintenance/convertUserOptions.php
maintenance/copyFileBackend.php
maintenance/createAndPromote.php
maintenance/deleteArchivedFiles.php
maintenance/deleteArchivedRevisions.php
maintenance/deleteBatch.php
maintenance/deleteDefaultMessages.php
maintenance/deleteImageMemcached.php
maintenance/deleteOldRevisions.php
maintenance/deleteOrphanedRevisions.php
maintenance/deleteRevision.php
maintenance/deleteSelfExternals.php
maintenance/dumpBackup.php
maintenance/dumpIterator.php
maintenance/dumpLinks.php
maintenance/dumpSisterSites.php
maintenance/dumpTextPass.php
maintenance/dumpUploads.php
maintenance/edit.php
maintenance/eval.php
maintenance/fetchText.php
maintenance/fileOpPerfTest.php
maintenance/findHooks.php
maintenance/fixDoubleRedirects.php
maintenance/fixExtLinksProtocolRelative.php
maintenance/fixSlaveDesync.php
maintenance/fixTimestamps.php
maintenance/fixUserRegistration.php
maintenance/formatInstallDoc.php
maintenance/fuzz-tester.php
maintenance/generateSitemap.php
maintenance/getLagTimes.php
maintenance/getSlaveServer.php
maintenance/getText.php
maintenance/hiphop/make
maintenance/hiphop/run-server
maintenance/importDump.php
maintenance/importImages.php
maintenance/importSiteScripts.php
maintenance/importTextFile.php
maintenance/initEditCount.php
maintenance/initStats.php
maintenance/install.php
maintenance/jsparse.php
maintenance/lag.php
maintenance/language/alltrans.php
maintenance/language/checkDupeMessages.php
maintenance/language/checkExtensions.php
maintenance/language/checkLanguage.php
maintenance/language/countMessages.php
maintenance/language/date-formats.php
maintenance/language/digit2html.php
maintenance/language/dumpMessages.php
maintenance/language/generateCollationData.php
maintenance/language/generateNormalizerData.php
maintenance/language/langmemusage.php
maintenance/language/languages.inc
maintenance/language/messageTypes.inc
maintenance/language/messages.inc
maintenance/language/rebuildLanguage.php
maintenance/language/transstat.php
maintenance/language/validate.php
maintenance/language/writeMessagesArray.inc
maintenance/mcc.php
maintenance/mctest.php
maintenance/mergeMessageFileList.php
maintenance/migrateUserGroup.php
maintenance/minify.php
maintenance/moveBatch.php
maintenance/mwdocgen.php
maintenance/namespaceDupes.php
maintenance/nextJobDB.php
maintenance/nukeNS.php
maintenance/nukePage.php
maintenance/oracle/alterSharedConstraints.php
maintenance/orphans.php
maintenance/parse.php
maintenance/patchSql.php
maintenance/populateCategory.php
maintenance/populateImageSha1.php
maintenance/populateLogSearch.php
maintenance/populateLogUsertext.php
maintenance/populateParentId.php
maintenance/populateRevisionLength.php
maintenance/populateRevisionSha1.php
maintenance/preprocessDump.php
maintenance/preprocessorFuzzTest.php
maintenance/protect.php
maintenance/pruneFileCache.php
maintenance/purgeDeletedFiles.php
maintenance/purgeList.php
maintenance/purgeOldText.php
maintenance/purgeParserCache.php
maintenance/purgeStaleMemcachedText.php
maintenance/reassignEdits.php
maintenance/rebuildFileCache.php
maintenance/rebuildImages.php
maintenance/rebuildLocalisationCache.php
maintenance/rebuildall.php
maintenance/rebuildmessages.php
maintenance/rebuildrecentchanges.php
maintenance/rebuildtextindex.php
maintenance/refreshImageCount.php
maintenance/refreshImageMetadata.php
maintenance/refreshLinks.php
maintenance/removeUnusedAccounts.php
maintenance/renameDbPrefix.php
maintenance/renderDump.php
maintenance/resetUserTokens.php
maintenance/rollbackEdits.php
maintenance/runBatchedQuery.php
maintenance/runJobs.php
maintenance/showJobs.php
maintenance/showStats.php
maintenance/sql.php
maintenance/sqlite.inc
maintenance/sqlite.php
maintenance/stats.php
maintenance/storage/checkStorage.php
maintenance/storage/compressOld.php
maintenance/storage/dumpRev.php
maintenance/storage/fixBug20757.php
maintenance/storage/moveToExternal.php
maintenance/storage/orphanStats.php
maintenance/storage/recompressTracked.php
maintenance/storage/resolveStubs.php
maintenance/storage/storageTypeStats.php
maintenance/storage/testCompression.php
maintenance/storage/trackBlobs.php
maintenance/syncFileBackend.php
maintenance/undelete.php
maintenance/update.php
maintenance/updateArticleCount.php
maintenance/updateCollation.php
maintenance/updateDoubleWidthSearch.php
maintenance/updateRestrictions.php
maintenance/updateSearchIndex.php
maintenance/updateSpecialPages.php
maintenance/upgrade1_5.php
maintenance/userOptions.inc
maintenance/userOptions.php
maintenance/waitForSlave.php
mw-config/index.php
opensearch_desc.php
profileinfo.php
redirect.php
resources/Resources.php
resources/jquery.effects/jquery.effects.blind.js
resources/jquery.effects/jquery.effects.bounce.js
resources/jquery.effects/jquery.effects.clip.js
resources/jquery.effects/jquery.effects.core.js
resources/jquery.effects/jquery.effects.drop.js
resources/jquery.effects/jquery.effects.explode.js
resources/jquery.effects/jquery.effects.fade.js
resources/jquery.effects/jquery.effects.fold.js
resources/jquery.effects/jquery.effects.highlight.js
resources/jquery.effects/jquery.effects.pulsate.js
resources/jquery.effects/jquery.effects.scale.js
resources/jquery.effects/jquery.effects.shake.js
resources/jquery.effects/jquery.effects.slide.js
resources/jquery.effects/jquery.effects.transfer.js
resources/jquery.ui/jquery.ui.accordion.js
resources/jquery.ui/jquery.ui.autocomplete.js
resources/jquery.ui/jquery.ui.button.js
resources/jquery.ui/jquery.ui.core.js
resources/jquery.ui/jquery.ui.datepicker.js
resources/jquery.ui/jquery.ui.dialog.js
resources/jquery.ui/jquery.ui.draggable.js
resources/jquery.ui/jquery.ui.droppable.js
resources/jquery.ui/jquery.ui.mouse.js
resources/jquery.ui/jquery.ui.position.js
resources/jquery.ui/jquery.ui.progressbar.js
resources/jquery.ui/jquery.ui.resizable.js
resources/jquery.ui/jquery.ui.selectable.js
resources/jquery.ui/jquery.ui.slider.js
resources/jquery.ui/jquery.ui.sortable.js
resources/jquery.ui/jquery.ui.tabs.js
resources/jquery.ui/jquery.ui.widget.js
resources/jquery.ui/themes/default/jquery.ui.accordion.css
resources/jquery.ui/themes/default/jquery.ui.autocomplete.css
resources/jquery.ui/themes/default/jquery.ui.button.css
resources/jquery.ui/themes/default/jquery.ui.core.css
resources/jquery.ui/themes/default/jquery.ui.datepicker.css
resources/jquery.ui/themes/default/jquery.ui.dialog.css
resources/jquery.ui/themes/default/jquery.ui.progressbar.css
resources/jquery.ui/themes/default/jquery.ui.resizable.css
resources/jquery.ui/themes/default/jquery.ui.selectable.css
resources/jquery.ui/themes/default/jquery.ui.slider.css
resources/jquery.ui/themes/default/jquery.ui.tabs.css
resources/jquery.ui/themes/default/jquery.ui.theme.css
resources/jquery/jquery.arrowSteps.js
resources/jquery/jquery.autoEllipsis.js
resources/jquery/jquery.badge.css
resources/jquery/jquery.badge.js
resources/jquery/jquery.checkboxShiftClick.js
resources/jquery/jquery.client.js
resources/jquery/jquery.expandableField.js
resources/jquery/jquery.form.js
resources/jquery/jquery.highlightText.js
resources/jquery/jquery.jStorage.js [new file with mode: 0644]
resources/jquery/jquery.js
resources/jquery/jquery.messageBox.css [deleted file]
resources/jquery/jquery.messageBox.js [deleted file]
resources/jquery/jquery.mwExtension.js
resources/jquery/jquery.placeholder.js
resources/jquery/jquery.qunit.completenessTest.js
resources/jquery/jquery.qunit.css
resources/jquery/jquery.qunit.js
resources/jquery/jquery.tablesorter.js
resources/jquery/jquery.textSelection.js
resources/mediawiki.api/mediawiki.api.category.js
resources/mediawiki.api/mediawiki.api.edit.js
resources/mediawiki.api/mediawiki.api.js
resources/mediawiki.api/mediawiki.api.parse.js
resources/mediawiki.api/mediawiki.api.titleblacklist.js
resources/mediawiki.api/mediawiki.api.watch.js
resources/mediawiki.language/languages/ar.js [deleted file]
resources/mediawiki.language/languages/he.js
resources/mediawiki.language/languages/hi.js [deleted file]
resources/mediawiki.language/mediawiki.cldr.js [new file with mode: 0644]
resources/mediawiki.language/mediawiki.language.js
resources/mediawiki.libs/CLDRPluralRuleParser.js [new file with mode: 0644]
resources/mediawiki.page/mediawiki.page.watch.ajax.js
resources/mediawiki/mediawiki.Title.js
resources/mediawiki/mediawiki.debug.js
resources/mediawiki/mediawiki.js
resources/mediawiki/mediawiki.log.js
resources/mediawiki/mediawiki.notification.css [new file with mode: 0644]
resources/mediawiki/mediawiki.notification.js [new file with mode: 0644]
resources/mediawiki/mediawiki.notify.js [new file with mode: 0644]
resources/mediawiki/mediawiki.user.js
resources/mediawiki/mediawiki.util.js
serialized/serialize.php
skins/CologneBlue.php
skins/Modern.php
skins/MonoBook.php
skins/Nostalgia.php
skins/Simple.php
skins/Standard.php
skins/common/images/add.png
skins/common/images/ajax-loader.gif
skins/common/images/spinner.gif
skins/common/preview.js
skins/common/shared.css
skins/common/upload.js
skins/common/wikibits.js
skins/monobook/main.css
skins/vector/screen.css
tests/RunSeleniumTests.php
tests/TestsAutoLoader.php
tests/jasmine/spec_makers/makeJqueryMsgSpec.php
tests/parser/parserTests.txt
tests/parserTests.php
tests/phpunit/MediaWikiPHPUnitCommand.php
tests/phpunit/MediaWikiTestCase.php
tests/phpunit/bootstrap.php
tests/phpunit/data/media/exif-gps.jpg
tests/phpunit/data/xmp/gps.result.php [new file with mode: 0644]
tests/phpunit/data/xmp/gps.xmp [new file with mode: 0644]
tests/phpunit/includes/ExtraParserTest.php
tests/phpunit/includes/GlobalFunctions/GlobalTest.php
tests/phpunit/includes/HtmlTest.php
tests/phpunit/includes/LocalisationCacheTest.php [new file with mode: 0644]
tests/phpunit/includes/MockOutputPage.php [deleted file]
tests/phpunit/includes/RevisionStorageTest.php
tests/phpunit/includes/TemplateCategoriesTest.php
tests/phpunit/includes/TimestampTest.php [new file with mode: 0644]
tests/phpunit/includes/TitleTest.php
tests/phpunit/includes/UriTest.php [deleted file]
tests/phpunit/includes/ZipDirectoryReaderTest.php
tests/phpunit/includes/api/ApiEditPageTest.php [new file with mode: 0644]
tests/phpunit/includes/api/ApiTestCase.php
tests/phpunit/includes/api/RandomImageGenerator.php
tests/phpunit/includes/api/generateRandomImages.php
tests/phpunit/includes/db/DatabaseSQLTest.php
tests/phpunit/includes/db/TestORMRowTest.php
tests/phpunit/includes/debug/MWDebugTest.php
tests/phpunit/includes/filerepo/FileBackendTest.php
tests/phpunit/includes/filerepo/StoreBatchTest.php
tests/phpunit/includes/libs/GenericArrayObjectTest.php
tests/phpunit/includes/media/BitmapMetadataHandlerTest.php
tests/phpunit/includes/media/ExifRotationTest.php
tests/phpunit/includes/media/ExifTest.php
tests/phpunit/includes/media/FormatMetadataTest.php
tests/phpunit/includes/media/GIFMetadataExtractorTest.php
tests/phpunit/includes/media/GIFTest.php
tests/phpunit/includes/media/JpegMetadataExtractorTest.php
tests/phpunit/includes/media/JpegTest.php
tests/phpunit/includes/media/PNGMetadataExtractorTest.php
tests/phpunit/includes/media/PNGTest.php
tests/phpunit/includes/media/SVGMetadataExtractorTest.php
tests/phpunit/includes/media/TiffTest.php
tests/phpunit/includes/media/XMPTest.php
tests/phpunit/includes/parser/MediaWikiParserTest.php
tests/phpunit/includes/parser/PreprocessorTest.php
tests/phpunit/includes/specials/SpecialSearchTest.php
tests/phpunit/includes/upload/UploadStashTest.php
tests/phpunit/languages/LanguageHeTest.php
tests/phpunit/languages/LanguageSrTest.php
tests/phpunit/languages/LanguageUzTest.php
tests/phpunit/languages/utils/CLDRPluralRuleEvaluatorTest.php [new file with mode: 0644]
tests/phpunit/maintenance/backupPrefetchTest.php
tests/phpunit/maintenance/backupTextPassTest.php
tests/phpunit/maintenance/fetchTextTest.php
tests/phpunit/maintenance/getSlaveServerTest.php
tests/phpunit/phpunit.php
tests/phpunit/suites/UploadFromUrlTestSuite.php
tests/qunit/QUnitTestResources.php
tests/qunit/suites/resources/jquery/jquery.tablesorter.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.cldr.test.js [new file with mode: 0644]
tests/qunit/suites/resources/mediawiki/mediawiki.user.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.util.test.js
tests/selenium/installer/MediaWikiButtonsAvailabilityTestCase.php
tests/selenium/installer/MediaWikiDifferentDatabaseAccountTestCase.php
tests/selenium/installer/MediaWikiDifferntDatabasePrefixTestCase.php
tests/selenium/installer/MediaWikiErrorsConnectToDatabasePageTestCase.php
tests/selenium/installer/MediaWikiErrorsNamepageTestCase.php
tests/selenium/installer/MediaWikiHelpFieldHintTestCase.php
tests/selenium/installer/MediaWikiInstallationCommonFunction.php
tests/selenium/installer/MediaWikiInstallerTestSuite.php
tests/selenium/installer/MediaWikiMySQLDataBaseTestCase.php
tests/selenium/installer/MediaWikiMySQLiteDataBaseTestCase.php
tests/selenium/installer/MediaWikiOnAlreadyInstalledTestCase.php
tests/selenium/installer/MediaWikiRestartInstallationTestCase.php
tests/selenium/installer/MediaWikiRightFrameworkLinksTestCase.php
tests/selenium/installer/MediaWikiUpgradeExistingDatabaseTestCase.php
tests/selenium/installer/MediaWikiUserInterfaceTestCase.php
tests/selenium/suites/MediawikiCoreSmokeTestCase.php
tests/selenium/suites/MyContributionsTestCase.php
tests/selenium/suites/MyWatchListTestCase.php
thumb.php
thumb_handler.php

index e057d36..ff3ced3 100644 (file)
@@ -13,7 +13,7 @@ nbproject*
 project.index
 
 # MediaWiki install & usage
-cache/*.cdb
+cache
 images/[0-9a-f]
 images/archive
 images/deleted
index 9534f97..026eaaa 100644 (file)
@@ -8,6 +8,7 @@ resources/jquery/jquery.form.js
 resources/jquery/jquery.hoverIntent.js
 resources/jquery/jquery.js
 resources/jquery/jquery.json.js
+resources/jquery/jquery.jStorage.js
 resources/jquery/jquery.mockjax.js
 resources/jquery/jquery.qunit.js
 resources/jquery/jquery.validate.js
@@ -15,6 +16,6 @@ resources/jquery/jquery.xmldom.js
 resources/jquery.effects
 resources/jquery.tipsy
 resources/jquery.ui
-resources/mediawiki.libs/mediawiki.libs.jpegmeta.js
+resources/mediawiki.libs
 tests/jasmine/lib/jasmine-1.0.1/jasmine-html.js
 tests/jasmine/lib/jasmine-1.0.1/jasmine.js
index 4cf86b8..b86ceb5 100644 (file)
--- a/.jshintrc
+++ b/.jshintrc
@@ -26,5 +26,5 @@
        "jquery": true,
 
        "nomen": true,
-       "onevar": false
+       "onevar": true
 }
index ac456bf..a48b81c 100644 (file)
@@ -24,7 +24,7 @@ upgrade PHP if you have not done so prior to upgrading MediaWiki.
   This only affects installations which have $wgAllowCopyUploads set to true.
 * Removed f-prot support from $wgAntivirusSetup.
 * New variable $wgDBerrorLogTZ to provide dates in the error log in a
-  different timezone than the wiki timezone set by $wgLocalTimezone.
+  different timezone than the wiki timezone set by $wgLocaltimezone.
 * New variables $wgDBssl and $wgDBcompress to enable SSL and compression for database
   connections, if either are available for the selected DB type.
 
@@ -41,7 +41,7 @@ upgrade PHP if you have not done so prior to upgrading MediaWiki.
 * &useskin=default will now always display the default skin. Useful for users with a
   preference for the non-default skin to look at something using the default skin.
 * (bug 27619) Remove preference option to display broken links as link?
-* (bug 34896) Update jQuery JSON plugin to v2.3 (2011-09-17).
+* (bug 34896) jQuery JSON plugin upgraded to v2.3 (2011-09-17).
 * (bug 34302) Add CSS classes to email fields in user preferences.
 * Introduced $wgDebugDBTransactions to trace transaction status (currently PostgreSQL only).
 * (bug 23795) Add parser itself to ParserMakeImageParams hook.
@@ -65,9 +65,9 @@ upgrade PHP if you have not done so prior to upgrading MediaWiki.
 * (bug 35685) api.php URL and other entry point URLs are now listed on
   Special:Version
 * Edit notices can now be translated.
-* jQuery upgraded to 1.8.
-* jQuery UI upgraded to 1.8.22.
-* (bug 35705) QUnit upgraded from v1.2.0 to v1.8.0.
+* jQuery upgraded to 1.7.2
+* jQuery UI upgraded to 1.8.23.
+* QUnit upgraded from v1.2.0 to v1.10.0.
 * (bug 37604) jquery.cookie upgraded to 2011 version.
 * (bug 22887) Add warning and tracking category for preprocessor errors
 * (bug 31704) Allow selection of associated namespace on the watchlist
@@ -122,11 +122,26 @@ upgrade PHP if you have not done so prior to upgrading MediaWiki.
 * HTMLForm mutators can now be chained (they return $this)
 * A new message, "api-error-filetype-banned-type", is available for formatting
   API upload errors due to the file extension blacklist.
-* jsMessage: Redesigned in Vector/Monobook as floating bubble with auto-hide.
 * New hook 'ParserTestGlobals' allows to set globals before running parser tests.
 * Allow importing pages as subpage.
 * Add lang and hreflang attributes to language links on Login page.
 * (bug 22749) Create Special:MostInterwikis.
+* Show change tags when transclude Special:Recentchanges(linked) or Special:Newpages.
+* (bug 23226) Add |class= parameter to image links in order to add class(es) to HTML img tag.
+* (bug 39431) SVG animated status is now shown in long description
+* (bug 39376) jquery.form upgraded to 3.14.
+* SVG files will now show the actual width in the SVG's specified units
+  in the metadata box.
+* Added ResourceLoader module "jquery.jStorage".
+* (bug 39273) Added AJAX support for "Show changes" (diff) in LivePreview.
+* Added ResourceLoader module "jquery.badge".
+* mw.util.$content now points to the overall content area in the skin rather than just
+  page text content area. If you need the old behaviour please use $( '#mw-content-text').
+* jsMessage has been replaced with a floating bubble notification system complete
+  with auto-hide, multi-message support, and message replacement tags.
+* jquery.messageBox which appears to be unused by both core and extensions has
+  been removed.
+* (bug 34939) made link parsking insensitive ([HttP://])
 
 === Bug fixes in 1.20 ===
 * (bug 30245) Use the correct way to construct a log page title.
@@ -200,7 +215,7 @@ upgrade PHP if you have not done so prior to upgrading MediaWiki.
 * (bug 37331) ResourceLoader modules sometimes execute twice in Firefox
 * (bug 31644) GlobalUsage, CentralAuth and AbuseLog extensions should not use
   insecure links to foreign wikis in the WikiMap.
-* (bug 36073) Avoid duplicate element IDs on File pages
+* (bug 36073) Avoid duplicate element IDs on File pages.
 * (bug 25095) Special:Categories should also include the first relevant item
   when "from" is filled.
 * (bug 35526) jquery.tablesorter now uses a stable sort.
@@ -209,14 +224,25 @@ upgrade PHP if you have not done so prior to upgrading MediaWiki.
   are returned, like in previous versions.
 * (bug 36524) "Show" options on Special:RecentChanges and Special:RecentChangesLinked
   are now remembered between successive clicks.
-* (bug 26069) Page title is no longer "Error" for all error pages
+* (bug 26069) Page title is no longer "Error" for all error pages.
+* (bug 39297) Show warning if thumbnail of animated image will not be animated.
+* (bug 38249) Parser will throw an exception instead of outputting gibberish if
+  PCRE is compiled without support for unicode properties.
+* (bug 30390) Suggested file name on Special:Upload should not contain
+  illegal characters.
+* (bug 27111) Cascading foreign file repos now fetch shared descriptions properly.
+* EXIF below sea level GPS altitude data is now shown correctly.
+* (bug 39284) jquery.tablesorter should not consider "."" or "?"" to be a currency.
+* (bug 39273) "Show changes" should not be incorrectly displayed in the Live Preview state.
+* Made body-content lang attribute honor the variant language when it is set.
 
 === API changes in 1.20 ===
 * (bug 34316) Add ability to retrieve maximum upload size from MediaWiki API.
 * (bug 34313) MediaWiki API intro message about "HTML format" should mention
   the format parameter.
 * (bug 32384) Allow descending order for list=watchlistraw.
-* (bug 31883) Limit of bkusers of list=blocks and titles of action=query is not documented in API help.
+* (bug 31883) Limit of bkusers of list=blocks and titles of action=query is
+  not documented in API help.
 * (bug 32492) API now allows editing using pageid.
 * (bug 32497) API now allows changing of protection level using pageid.
 * (bug 32498) API now allows comparing pages using pageids.
@@ -245,7 +271,9 @@ upgrade PHP if you have not done so prior to upgrading MediaWiki.
 * Watchlist notification timestamp may be queried by page and may be updated via the API.
 * (bug 38904) prop=revisions&rvstart=... no longer blows up when continuing.
 * (bug 39032) ApiQuery generates help in constructor.
-* (bug 11142) Improve file extension blacklist error reporting in API upload
+* (bug 11142) Improve file extension blacklist error reporting in API upload.
+* (bug 39635) PostgreSQL LOCK IN SHARE MODE option is a syntax error.
+* (bug 36329) Accesskey tooltips for Firefox 14 on Mac should use "ctrl-option-" prefix.
 
 === Languages updated in 1.20 ===
 
@@ -279,6 +307,9 @@ changes to languages because of Bugzilla reports.
 * Deprecated mw.user.anonymous in favour of mw.user.isAnon.
 * Deprecated DatabaseBase functions newFromParams(), newFromType(), set(),
   quote_ident(), and escapeLike() were removed.
+* Use of __DIR__ instead of dirname( __FILE__ ).
+* OutputPage::wrapWikiMsg() no longer supports the 'options' parameter. It was
+  not used and complicated migration to Message class.
 
 == Compatibility ==
 
diff --git a/api.php b/api.php
index 9e1f5dd..7fae373 100644 (file)
--- a/api.php
+++ b/api.php
@@ -35,6 +35,7 @@ define( 'MW_API', true );
 
 // Bail if PHP is too low
 if ( !function_exists( 'version_compare' ) || version_compare( phpversion(), '5.3.2' ) < 0 ) {
+       // We need to use dirname( __FILE__ ) here cause __DIR__ is PHP5.3+
        require( dirname( __FILE__ ) . '/includes/PHPVersionError.php' );
        wfPHPVersionError( 'api.php' );
 }
@@ -43,7 +44,7 @@ if ( !function_exists( 'version_compare' ) || version_compare( phpversion(), '5.
 if ( isset( $_SERVER['MW_COMPILED'] ) ) {
        require ( 'core/includes/WebStart.php' );
 } else {
-       require ( dirname( __FILE__ ) . '/includes/WebStart.php' );
+       require ( __DIR__ . '/includes/WebStart.php' );
 }
 
 wfProfileIn( 'api.php' );
index 8243f78..5b78ed9 100644 (file)
@@ -404,6 +404,11 @@ 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)
 
+'ApiMain::onException': Called by ApiMain::executeActionWithErrorHandling()
+when an exception is thrown during API action execution.
+$apiMain: Calling ApiMain instance.
+$e: Exception object.
+
 '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.
@@ -770,11 +775,11 @@ $title: Title object for the title being linked to (may not be the same as
   $wgTitle, if the section is included from a template)
 $section: The designation of the section being pointed to, to be included in
   the link, like "&section=$section"
-$tooltip: The default tooltip.  Escape with htmlspecialchars() before using.
+$tooltip: The default tooltip.  Escape before using.
   By default, this is wrapped in the 'editsectionhint' message.
 &$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
+$lang: The language code to use for the link in the wfMessage function
 
 'EditFilter': Perform checks on an edit
 $editor: Edit form (see includes/EditPage.php)
@@ -875,7 +880,7 @@ $title: Title being linked to
 $section: Section to link to
 $link: Default link
 &$result: Result (alter this to override the generated links)
-$lang: The language code to use for the link in the wfMsg* functions
+$lang: The language code to use for the link in the wfMessage function
 
 'EmailConfirmed': When checking that the user's email address is "confirmed"
 $user: User being checked
@@ -1290,7 +1295,7 @@ $param: Associative Array with the following additional options:
  - lim Integer Limit of items to show, default is 50
  - conds Array Extra conditions for the query (e.g. "log_action != 'revision'")
  - showIfEmpty boolean Set to false if you don't want any output in case the loglist is empty if set to true (default), "No matching items in log" is displayed if loglist is empty
- - msgKey Array If you want a nice box with a message, set this to the key of the message. First element is the message key, additional optional elements are parameters for the key that are processed with wfMsgExt and option 'parse'
+ - msgKey Array If you want a nice box with a message, set this to the key of the message. First element is the message key, additional optional elements are parameters for the key that are processed with wfMessage()->params()->parseAsBlock()
  - offset Set to overwrite offset parameter in $wgRequest set to '' to unset offset
  - wrap String Wrap the message in html (usually something like "&lt;div ...>$1&lt;/div>").
  - flags Integer display flags (NO_ACTION_LINK,NO_EXTRA_USER_LINKS)
@@ -1599,7 +1604,7 @@ Return false and put the merged text into $text to override the default behavior
 'PreferencesGetLegend': Override the text used for the <legend> of a preferences section
 $form: the PreferencesForm object. This is a ContextSource as well
 $key: the section name
-&$legend: the legend text. Defaults to wfMsg( "prefs-$key" ) but may be overridden
+&$legend: the legend text. Defaults to wfMessage( "prefs-$key" )->text() but may be overridden
 
 'PrefixSearchBackend': Override the title prefix search used for OpenSearch and
 AJAX search suggestions. Put results into &$results outparam and return false.
index ceae026..1d9bf7d 100644 (file)
@@ -40,7 +40,7 @@ $magicWords['es'] = array(
 );
 ----
 
-$wgExtensionMessagesFiles['ExtensionNameMagic'] = dirname( __FILE__ ) . '/ExtensionName.i18n.magic.php';
+$wgExtensionMessagesFiles['ExtensionNameMagic'] = __DIR__ . '/ExtensionName.i18n.magic.php';
 $wgHooks['MagicWordwgVariableIDs'][] = 'wfAddCustomMagicWordID';
 $wgHooks['ParserGetVariableValueSwitch'][] = 'wfGetCustomMagicWordValue';
 
@@ -74,7 +74,7 @@ $magicWords['es'] = array(
 );
 ----
 
-$wgExtensionMessagesFiles['ExtensionNameMagic'] = dirname( __FILE__ ) . '/ExtensionName.i18n.magic.php';
+$wgExtensionMessagesFiles['ExtensionNameMagic'] = __DIR__ . '/ExtensionName.i18n.magic.php';
 $wgHooks['ParserFirstCallInit'][] = 'wfRegisterCustomMagicWord';
 
 function wfRegisterCustomMagicWord( &$parser ){
index f5384f9..3872edc 100644 (file)
@@ -138,7 +138,7 @@ Message Cache:
        key: $wgDBname:messages, $wgDBname:messages-hash, $wgDBname:messages-status
        ex: wikidb:messages, wikidb:messages-hash, wikidb:messages-status
        stores: an array where the keys are DB keys and the values are messages
-       set in: wfMsg(), Article::editUpdates() and Title::moveTo()
+       set in: wfMessage(), Article::editUpdates() and Title::moveTo()
        expriy: $wgMsgCacheExpiry
        cleared by: nothing
 
index 22f4710..66236e8 100644 (file)
@@ -21,10 +21,10 @@ 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: 
+The following code snippet lets you override the default path:
 
  $IP = getenv( 'MW_INSTALL_PATH' );
  if( $IP === false ) {
-       $IP = dirname( __FILE__ ) . '/../..';
+       $IP = __DIR__ . '/../..';
  }
  require_once( "$IP/maintenance/Maintenance.php" ); // a MediaWiki core file
index d712589..b3a3495 100644 (file)
@@ -43,7 +43,7 @@ define( 'MW_NO_OUTPUT_COMPRESSION', 1 );
 if ( isset( $_SERVER['MW_COMPILED'] ) ) {
        require ( 'core/includes/WebStart.php' );
 } else {
-       require ( dirname( __FILE__ ) . '/includes/WebStart.php' );
+       require ( __DIR__ . '/includes/WebStart.php' );
 }
 wfProfileIn( 'img_auth.php' );
 
@@ -148,13 +148,13 @@ function wfForbidden( $msg1, $msg2 ) {
        array_shift( $args );
        array_shift( $args );
 
-       $msgHdr = htmlspecialchars( wfMsg( $msg1 ) );
+       $msgHdr = wfMessage( $msg1 )->escaped();
        $detailMsgKey = $wgImgAuthDetails ? $msg2 : 'badaccess-group0';
-       $detailMsg = htmlspecialchars( wfMsg( $detailMsgKey, $args ) );
+       $detailMsg = wfMessage( $detailMsgKey, $args )->escaped();
 
        wfDebugLog( 'img_auth',
-               "wfForbidden Hdr:" . wfMsgExt( $msg1, array( 'language' => 'en' ) ). " Msg: ".
-               wfMsgExt( $msg2, array( 'language' => 'en' ), $args )
+               "wfForbidden Hdr:" . wfMessage( $msg1 )->inLanguage( 'en' )->text() . " Msg: ".
+               wfMessage( $msg2, $args )->inLanguage( 'en' )->text()
        );
 
        header( 'HTTP/1.0 403 Forbidden' );
index 5a8bbeb..a3fb747 100644 (file)
@@ -1532,11 +1532,10 @@ class Article extends Page {
                } else {
                        $outputPage->setPageTitle( wfMessage( 'cannotdelete-title', $this->getTitle()->getPrefixedText() ) );
                        if ( $error == '' ) {
-                               $errors = $status->getErrorsArray();
-                               $deleteLogPage = new LogPage( 'delete' );
-                               $outputPage->wrapWikiMsg( "<div class=\"error mw-error-cannotdelete\">\n$1\n</div>",
-                                       $errors[0]
+                               $outputPage->addWikiText(
+                                       "<div class=\"error mw-error-cannotdelete\">\n" . $status->getWikiText() . "\n</div>"
                                );
+                               $deleteLogPage = new LogPage( 'delete' );
                                $outputPage->addHTML( Xml::element( 'h2', null, $deleteLogPage->getName()->text() ) );
 
                                LogEventsList::showLogExtract(
index c7fcf93..2e42439 100644 (file)
@@ -176,6 +176,15 @@ class AuthPlugin {
                return true;
        }
 
+       /**
+        * Should MediaWiki store passwords in its local database?
+        *
+        * @return bool
+        */
+       public function allowSetLocalPassword() {
+               return true;
+       }
+
        /**
         * Set the given password in the authentication database.
         * As a special case, the password may be set to null to request
index 1b46c6a..706e1c8 100644 (file)
@@ -245,6 +245,7 @@ $wgAutoloadLocalClasses = array(
        'StubObject' => 'includes/StubObject.php',
        'StubUserLang' => 'includes/StubObject.php',
        'TablePager' => 'includes/Pager.php',
+       'MWTimestamp' => 'includes/Timestamp.php',
        'Title' => 'includes/Title.php',
        'TitleArray' => 'includes/TitleArray.php',
        'TitleArrayFromResult' => 'includes/TitleArray.php',
@@ -252,7 +253,6 @@ $wgAutoloadLocalClasses = array(
        'UnlistedSpecialPage' => 'includes/SpecialPage.php',
        'UploadSourceAdapter' => 'includes/Import.php',
        'UppercaseCollation' => 'includes/Collation.php',
-       'Uri' => 'includes/Uri.php',
        'User' => 'includes/User.php',
        'UserArray' => 'includes/UserArray.php',
        'UserArrayFromResult' => 'includes/UserArray.php',
@@ -1007,6 +1007,8 @@ $wgAutoloadLocalClasses = array(
        'FakeConverter' => 'languages/Language.php',
        'Language' => 'languages/Language.php',
        'LanguageConverter' => 'languages/LanguageConverter.php',
+       'CLDRPluralRuleEvaluator' => 'languages/utils/CLDRPluralRuleEvaluator.php',
+       'CLDRPluralRuleError' => 'languages/utils/CLDRPluralRuleEvaluator.php',
 
        # maintenance
        'ConvertLinks' => 'maintenance/convertLinks.php',
index 8199cb4..ac46fc4 100644 (file)
@@ -143,10 +143,18 @@ class CacheHelper implements ICacheHelper {
         * Function that gets called when initialization is done.
         *
         * @since 1.20
-        * @var function
+        * @var callable
         */
        protected $onInitHandler = false;
 
+       /**
+        * Elements to build a cache key with.
+        *
+        * @since 1.20
+        * @var array
+        */
+       protected $cacheKey = array();
+
        /**
         * Sets if the cache should be enabled or not.
         *
@@ -338,8 +346,13 @@ class CacheHelper implements ICacheHelper {
         * @since 1.20
         *
         * @return string
+        * @throws MWException
         */
        protected function getCacheKeyString() {
+               if ( $this->cacheKey === array() ) {
+                       throw new MWException( 'No cache key set, so cannot obtain or save the CacheHelper values.' );
+               }
+
                return call_user_func_array( 'wfMemcKey', $this->cacheKey );
        }
 
index d9ca234..b7b12e8 100644 (file)
@@ -297,8 +297,8 @@ class Category {
                        'IGNORE'
                );
 
-               $cond1 = $dbw->conditional( 'page_namespace=' . NS_CATEGORY, 1, 'NULL' );
-               $cond2 = $dbw->conditional( 'page_namespace=' . NS_FILE, 1, 'NULL' );
+               $cond1 = $dbw->conditional( array( 'page_namespace' => NS_CATEGORY ), 1, 'NULL' );
+               $cond2 = $dbw->conditional( array( 'page_namespace' => NS_FILE ), 1, 'NULL' );
                $result = $dbw->selectRow(
                        array( 'categorylinks', 'page' ),
                        array( 'pages' => 'COUNT(*)',
index 4e4f311..5f4aaea 100644 (file)
@@ -504,7 +504,7 @@ class CategoryViewer extends ContextSource {
                # Split into three columns
                $columns = array_chunk( $columns, ceil( count( $columns ) / 3 ), true /* preserve keys */ );
 
-               $ret = '<table width="100%"><tr valign="top">';
+               $ret = '<table width="100%"><tr style="vertical-align: top;">';
                $prevchar = null;
 
                foreach ( $columns as $column ) {
index bb80eeb..858eebf 100644 (file)
@@ -83,8 +83,8 @@ class MWCryptRand {
                $files[] = __FILE__;
 
                // We must also have a parent folder, and with the usual file structure, a grandparent
-               $files[] = dirname( __FILE__ );
-               $files[] = dirname( dirname( __FILE__ ) );
+               $files[] = __DIR__;
+               $files[] = dirname( __DIR__ );
 
                // The config file is likely the most often edited file we know should be around
                // so include its stat info into the state.
index 793d335..377b64c 100644 (file)
@@ -84,8 +84,8 @@ abstract class DataUpdate implements DeferrableUpdate {
                $exception = null;
 
                /**
-                * @var $update StorageUpdate
-                * @var $trans StorageUpdate
+                * @var $update DataUpdate
+                * @var $trans DataUpdate
                 */
 
                try {
index 20c97a0..c65d133 100644 (file)
@@ -385,7 +385,9 @@ $wgImgAuthPublicTest = true;
  *                      some remote repos.
  *   - thumbDir         The base thumbnail directory. Defaults to "<directory>/thumb".
  *   - thumbUrl         The base thumbnail URL. Defaults to "<url>/thumb".
- *
+ *   - isPrivate        Set this if measures should always be taken to keep the files private.
+ *                      One should not trust this to assure that the files are not web readable;
+ *                      the server configuration should be done manually depending on the backend.
  *
  * These settings describe a foreign MediaWiki installation. They are optional, and will be ignored
  * for local repositories:
@@ -397,7 +399,9 @@ $wgImgAuthPublicTest = true;
  *
  *   - 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.
+ *                       $wgFetchCommonsDescriptions.
+ *   - abbrvThreshold    File names over this size will use the short form of thumbnail names.
+ *                       Short thumbnail names only have the width, parameters, and the extension.
  *
  * ForeignDBRepo:
  *   - dbType, dbServer, dbUser, dbPassword, dbName, dbFlags
@@ -507,7 +511,7 @@ $wgSharedUploadDBprefix = '';
 $wgCacheSharedUploads = true;
 
 /**
- * Allow for upload to be copied from an URL. Requires Special:Upload?source=web
+ * Allow for upload to be copied from an URL.
  * The timeout for copy uploads is set by $wgHTTPTimeout.
  * You have to assign the user right 'upload_by_url' to a user group, to use this.
  */
@@ -521,6 +525,8 @@ $wgAllowAsyncCopyUploads = false;
 
 /**
  * A list of domains copy uploads can come from
+ *
+ * @since 1.20
  */
 $wgCopyUploadsDomains = array();
 
@@ -1445,7 +1451,7 @@ $wgDBerrorLog = false;
 
 /**
  * Timezone to use in the error log.
- * Defaults to the wiki timezone ($wgLocalTimezone).
+ * Defaults to the wiki timezone ($wgLocaltimezone).
  *
  * A list of useable timezones can found at:
  * http://php.net/manual/en/timezones.php
@@ -1692,6 +1698,8 @@ $wgSessionCacheType = CACHE_ANYTHING;
  * which are used when parsing certain text and interface messages.
  *
  * For available types see $wgMainCacheType.
+ *
+ * @since 1.20
  */
 $wgLanguageConverterCacheType = CACHE_ANYTHING;
 
@@ -2042,6 +2050,8 @@ $wgMaxSquidPurgeTitles = 400;
  * );
  * @endcode
  *
+ * @since 1.20
+ *
  * @see $wgHTCPMulticastTTL
  */
 $wgHTCPMulticastRouting = array();
@@ -2323,7 +2333,7 @@ $wgVariantArticlePath = false;
 $wgLoginLanguageSelector = false;
 
 /**
- * When translating messages with wfMessage(), it is not always clear what 
+ * When translating messages with wfMessage(), 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',
@@ -2626,6 +2636,18 @@ $wgBreakFrames = false;
  */
 $wgEditPageFrameOptions = 'DENY';
 
+/**
+ * Disallow framing of API pages directly, by setting the X-Frame-Options
+ * header. Since the API returns CSRF tokens, allowing the results to be
+ * framed can compromise your user's account security.
+ * Options are:
+ *   - 'DENY': Do not allow framing. This is recommended for most wikis.
+ *   - 'SAMEORIGIN': Allow framing by pages on the same domain.
+ *   - false: Allow all framing.
+ */
+
+$wgApiFrameOptions = 'DENY';
+
 /**
  * Disable output compression (enabled by default if zlib is available)
  */
@@ -2736,6 +2758,8 @@ $wgSend404Code = true;
  * The $wgShowRollbackEditCount variable is used to show how many edits will be
  * rollback. The numeric value of the varible are the limit up to are counted.
  * If the value is false or 0, the edits are not counted.
+ *
+ * @since 1.20
  */
 $wgShowRollbackEditCount = 10;
 
@@ -2758,7 +2782,7 @@ $wgShowRollbackEditCount = 10;
  *      'scripts' => 'myExtension.js',
  *      'styles' => 'myExtension.css',
  *      'dependencies' => array( 'jquery.cookie', 'jquery.tabIndex' ),
- *      'localBasePath' => dirname( __FILE__ ),
+ *      'localBasePath' => __DIR__,
  *      'remoteExtPath' => 'MyExtension',
  *   );
  * @endcode
@@ -4373,6 +4397,8 @@ $wgDebugComments = false;
 
 /**
  * Extensive database transaction state debugging
+ *
+ * @since 1.20
  */
 $wgDebugDBTransactions = false;
 
@@ -4890,6 +4916,8 @@ $wgUpgradeKey = false;
  * The value is the replacement for the key (it can contain $1, etc.)
  * %h will be replaced by the short SHA-1 (7 first chars) and %H by the
  * full SHA-1 of the HEAD revision.
+ *
+ * @since 1.20
  */
 $wgGitRepositoryViewers = array(
     'https://gerrit.wikimedia.org/r/p/(.*)' => 'https://gerrit.wikimedia.org/r/gitweb?p=$1;h=%H',
@@ -5210,7 +5238,7 @@ $wgExtensionFunctions = array();
  *
  * @par Example:
  * @code
- *    $wgExtensionMessagesFiles['ConfirmEdit'] = dirname(__FILE__).'/ConfirmEdit.i18n.php';
+ *    $wgExtensionMessagesFiles['ConfirmEdit'] = __DIR__.'/ConfirmEdit.i18n.php';
  * @endcode
  */
 $wgExtensionMessagesFiles = array();
@@ -5762,11 +5790,6 @@ $wgActions = array(
  */
 $wgDisabledActions = array();
 
-/**
- * Allow the "info" action, very inefficient at the moment
- */
-$wgAllowPageInfo = false;
-
 /** @} */ # end actions }
 
 /*************************************************************************//**
@@ -6194,6 +6217,8 @@ $wgDBtestpassword = '';
 
 /**
  * Whether the user must enter their password to change their e-mail address
+ *
+ * @since 1.20
  */
 $wgRequirePasswordforEmailChange = true;
 
index 55d9a7a..be9f981 100644 (file)
@@ -205,7 +205,7 @@ define( 'LIST_SET_PREPARED', 8);  // List of (?, ?, ?) for DatabaseIbm_db2
 /**
  * Unicode and normalisation related
  */
-require_once dirname(__FILE__).'/normal/UtfNormalDefines.php';
+require_once __DIR__.'/normal/UtfNormalDefines.php';
 
 /**@{
  * Hook support constants
index b958f17..f9bba19 100644 (file)
@@ -1886,10 +1886,6 @@ class EditPage {
 
                $wgOut->addHTML( $this->editFormTextAfterContent );
 
-               $wgOut->addWikiText( $this->getCopywarn() );
-
-               $wgOut->addHTML( $this->editFormTextAfterWarn );
-
                $this->showStandardInputs();
 
                $this->showFormAfterText();
@@ -2102,8 +2098,11 @@ class EditPage {
                                );
                        }
                }
+               # Add header copyright warning
+               $this->showHeaderCopyrightWarning();
        }
 
+
        /**
         * Standard summary input and label (wgSummary), abstracted so EditPage
         * subclasses may reorganize the form.
@@ -2399,6 +2398,18 @@ HTML
                $wgOut->addHTML( '<div id="wikiDiff">' . $difftext . '</div>' );
        }
 
+       /**
+        * Show the header copyright warning.
+        */
+       protected function showHeaderCopyrightWarning() {
+               $msg = 'editpage-head-copy-warn';
+               if ( !wfMessage( $msg )->isDisabled() ) {
+                       global $wgOut;
+                       $wgOut->wrapWikiMsg( "<div class='editpage-head-copywarn'>\n$1\n</div>",
+                               'editpage-head-copy-warn' );
+               }
+       }
+
        /**
         * Give a chance for site and per-namespace customizations of
         * terms of service summary link that might exist separately
@@ -2463,6 +2474,11 @@ HTML
                $checkboxes = $this->getCheckboxes( $tabindex,
                        array( 'minor' => $this->minoredit, 'watch' => $this->watchthis ) );
                $wgOut->addHTML( "<div class='editCheckboxes'>" . implode( $checkboxes, "\n" ) . "</div>\n" );
+
+               // Show copyright warning.
+               $wgOut->addWikiText( $this->getCopywarn() );
+               $wgOut->addHTML( $this->editFormTextAfterWarn );
+
                $wgOut->addHTML( "<div class='editButtons'>\n" );
                $wgOut->addHTML( implode( $this->getEditButtons( $tabindex ), "\n" ) . "\n" );
 
@@ -2474,7 +2490,8 @@ HTML
                $edithelp = '<a target="helpwindow" href="' . $edithelpurl . '">' .
                        wfMessage( 'edithelp' )->escaped() . '</a> ' .
                        wfMessage( 'newwindow' )->escaped();
-               $wgOut->addHTML( "      <span class='editHelp'>{$cancel}{$edithelp}</span>\n" );
+               $wgOut->addHTML( "      <span class='cancelLink'>{$cancel}</span>\n" );
+               $wgOut->addHTML( "      <span class='editHelp'>{$edithelp}</span>\n" );
                $wgOut->addHTML( "</div><!-- editButtons -->\n</div><!-- editOptions -->\n" );
        }
 
@@ -2614,14 +2631,14 @@ HTML
 
                if ( $this->mTriedSave && !$this->mTokenOk ) {
                        if ( $this->mTokenOkExceptSuffix ) {
-                               $note = wfMessage( 'token_suffix_mismatch' )->text();
+                               $note = wfMessage( 'token_suffix_mismatch' )->plain();
                        } else {
-                               $note = wfMessage( 'session_fail_preview' )->text();
+                               $note = wfMessage( 'session_fail_preview' )->plain();
                        }
                } elseif ( $this->incompleteForm ) {
-                       $note = wfMessage( 'edit_form_incomplete' )->text();
+                       $note = wfMessage( 'edit_form_incomplete' )->plain();
                } else {
-                       $note = wfMessage( 'previewnote' ) .
+                       $note = wfMessage( 'previewnote' )->plain() .
                                ' [[#' . self::EDITFORM_ID . '|' . $wgLang->getArrow() . ' ' . wfMessage( 'continue-editing' )->text() . ']]';
                }
 
index d5cf543..a131cca 100644 (file)
@@ -45,7 +45,7 @@ class MWException extends Exception {
        }
 
        /**
-        * Can the extension use wfMsg() to get i18n messages?
+        * Can the extension use the Message class/wfMessage to get i18n-ed messages?
         *
         * @return bool
         */
@@ -109,7 +109,7 @@ class MWException extends Exception {
                $args = array_slice( func_get_args(), 2 );
 
                if ( $this->useMessageCache() ) {
-                       return wfMsgNoTrans( $key, $args );
+                       return wfMessage( $key, $args )->plain();
                } else {
                        return wfMsgReplaceArgs( $fallback, $args );
                }
@@ -319,13 +319,11 @@ class ErrorPageError extends MWException {
        public $title, $msg, $params;
 
        /**
-        * @todo document
+        * Note: these arguments are keys into wfMessage(), not text!
         *
-        * Note: these arguments are keys into wfMsg(), not text!
-        *
-        * @param $title A title
-        * @param $msg String|Message . In string form, should be a message key
-        * @param $params Array Array to wfMsg()
+        * @param $title string|Message Message key (string) for page title, or a Message object
+        * @param $msg string|Message Message key (string) for error text, or a Message object
+        * @param $params array with parameters to wfMessage()
         */
        function __construct( $title, $msg, $params = null ) {
                $this->title = $title;
@@ -335,7 +333,7 @@ class ErrorPageError extends MWException {
                if( $msg instanceof Message ){
                        parent::__construct( $msg );
                } else {
-                       parent::__construct( wfMsg( $msg ) );
+                       parent::__construct( wfMessage( $msg )->text() );
                }
        }
 
@@ -356,10 +354,9 @@ class ErrorPageError extends MWException {
  * @ingroup Exception
  */
 class BadTitleError extends ErrorPageError {
-
        /**
-        * @param $msg string A message key (default: 'badtitletext')
-        * @param $params Array parameter to wfMsg()
+        * @param $msg string|Message A message key (default: 'badtitletext')
+        * @param $params Array parameter to wfMessage()
         */
        function __construct( $msg = 'badtitletext', $params = null ) {
                parent::__construct( 'badtitle', $msg, $params );
@@ -477,7 +474,7 @@ class UserBlockedError extends ErrorPageError {
 
                $reason = $block->mReason;
                if( $reason == '' ) {
-                       $reason = wfMsg( 'blockednoreason' );
+                       $reason = wfMessage( 'blockednoreason' )->text();
                }
 
                /* $ip returns who *is* being blocked, $intended contains who was meant to be blocked.
@@ -536,7 +533,7 @@ class UserNotLoggedIn extends ErrorPageError {
         *        Optional, default: 'exception-nologin-text'
         * @param $titleMsg A message key to set the page title.
         *        Optional, default: 'exception-nologin'
-        * @param $params Parameters to wfMsg().
+        * @param $params Parameters to wfMessage().
         *        Optiona, default: null
         */
        public function __construct(
index 16eba66..11b2675 100644 (file)
@@ -129,22 +129,22 @@ class FeedUtils {
                if( $oldid ) {
                        wfProfileIn( __METHOD__."-dodiff" );
 
-                       #$diffText = $de->getDiff( wfMsg( 'revisionasof',
+                       #$diffText = $de->getDiff( wfMessage( 'revisionasof',
                        #       $wgLang->timeanddate( $timestamp ),
                        #       $wgLang->date( $timestamp ),
-                       #       $wgLang->time( $timestamp ) ),
-                       #       wfMsg( 'currentrev' ) );
+                       #       $wgLang->time( $timestamp ) )->text(),
+                       #       wfMessage( 'currentrev' )->text() );
 
                        $diffText = '';
                        // Don't bother generating the diff if we won't be able to show it
                        if ( $wgFeedDiffCutoff > 0 ) {
                                $de = new DifferenceEngine( $title, $oldid, $newid );
                                $diffText = $de->getDiff(
-                                       wfMsg( 'previousrevision' ), // hack
-                                       wfMsg( 'revisionasof',
+                                       wfMessage( 'previousrevision' )->text(), // hack
+                                       wfMessage( 'revisionasof',
                                        $wgLang->timeanddate( $timestamp ),
                                        $wgLang->date( $timestamp ),
-                                       $wgLang->time( $timestamp ) ) );
+                                       $wgLang->time( $timestamp ) )->text() );
                        }
 
                        if ( $wgFeedDiffCutoff <= 0 || ( strlen( $diffText ) > $wgFeedDiffCutoff ) ) {
@@ -170,7 +170,7 @@ class FeedUtils {
                                // Omit large new page diffs, bug 29110
                                $diffText = self::getDiffLink( $title, $newid );
                        } else {
-                               $diffText = '<p><b>' . wfMsg( 'newpage' ) . '</b></p>' .
+                               $diffText = '<p><b>' . wfMessage( 'newpage' )->text() . '</b></p>' .
                                        '<div>' . nl2br( htmlspecialchars( $newtext ) ) . '</div>';
                        }
                }
@@ -196,7 +196,7 @@ class FeedUtils {
                $diffUrl = $title->getFullUrl( $queryParameters );
 
                $diffLink = Html::element( 'a', array( 'href' => $diffUrl ),
-                       wfMsgForContent( 'showdiff' ) );
+                       wfMessage( 'showdiff' )->inContentLanguage()->text() );
 
                return $diffLink;
        }
index 1f0c195..e75ad72 100644 (file)
@@ -101,7 +101,8 @@ class FileDeleteForm {
                                $reason = $deleteReason;
                        } elseif ( $deleteReason != '' ) {
                                // Entry from drop down menu + additional comment
-                               $reason = $deleteReasonList . wfMsgForContent( 'colon-separator' ) . $deleteReason;
+                               $reason = $deleteReasonList . wfMessage( 'colon-separator' )
+                                       ->inContentLanguage()->text() . $deleteReason;
                        } else {
                                $reason = $deleteReasonList;
                        }
@@ -156,9 +157,10 @@ class FileDeleteForm {
                        $status = $file->deleteOld( $oldimage, $reason, $suppress );
                        if( $status->ok ) {
                                // Need to do a log item
-                               $logComment = wfMsgForContent( 'deletedrevision', $oldimage );
+                               $logComment = wfMessage( 'deletedrevision', $oldimage )->inContentLanguage()->text();
                                if( trim( $reason ) != '' ) {
-                                       $logComment .= wfMsgForContent( 'colon-separator' ) . $reason;
+                                       $logComment .= wfMessage( 'colon-separator' )
+                                               ->inContentLanguage()->text() . $reason;
                                }
 
                                $logtype = $suppress ? 'suppress' : 'delete';
@@ -214,7 +216,7 @@ class FileDeleteForm {
                        $suppress = "<tr id=\"wpDeleteSuppressRow\">
                                        <td></td>
                                        <td class='mw-input'><strong>" .
-                                               Xml::checkLabel( wfMsg( 'revdelete-suppress' ),
+                                               Xml::checkLabel( wfMessage( 'revdelete-suppress' )->text(),
                                                        'wpSuppress', 'wpSuppress', false, array( 'tabindex' => '3' ) ) .
                                        "</strong></td>
                                </tr>";
@@ -226,23 +228,28 @@ class FileDeleteForm {
                $form = Xml::openElement( 'form', array( 'method' => 'post', 'action' => $this->getAction(),
                        'id' => 'mw-img-deleteconfirm' ) ) .
                        Xml::openElement( 'fieldset' ) .
-                       Xml::element( 'legend', null, wfMsg( 'filedelete-legend' ) ) .
+                       Xml::element( 'legend', null, wfMessage( 'filedelete-legend' )->text() ) .
                        Html::hidden( 'wpEditToken', $wgUser->getEditToken( $this->oldimage ) ) .
                        $this->prepareMessage( 'filedelete-intro' ) .
                        Xml::openElement( 'table', array( 'id' => 'mw-img-deleteconfirm-table' ) ) .
                        "<tr>
                                <td class='mw-label'>" .
-                                       Xml::label( wfMsg( 'filedelete-comment' ), 'wpDeleteReasonList' ) .
+                                       Xml::label( wfMessage( 'filedelete-comment' )->text(), 'wpDeleteReasonList' ) .
                                "</td>
                                <td class='mw-input'>" .
-                                       Xml::listDropDown( 'wpDeleteReasonList',
-                                               wfMsgForContent( 'filedelete-reason-dropdown' ),
-                                               wfMsgForContent( 'filedelete-reason-otherlist' ), '', 'wpReasonDropDown', 1 ) .
+                                       Xml::listDropDown(
+                                               'wpDeleteReasonList',
+                                               wfMessage( 'filedelete-reason-dropdown' )->inContentLanguage()->text(),
+                                               wfMessage( 'filedelete-reason-otherlist' )->inContentLanguage()->text(),
+                                               '',
+                                               'wpReasonDropDown',
+                                               1
+                                       ) .
                                "</td>
                        </tr>
                        <tr>
                                <td class='mw-label'>" .
-                                       Xml::label( wfMsg( 'filedelete-otherreason' ), 'wpReason' ) .
+                                       Xml::label( wfMessage( 'filedelete-otherreason' )->text(), 'wpReason' ) .
                                "</td>
                                <td class='mw-input'>" .
                                        Xml::input( 'wpReason', 60, $wgRequest->getText( 'wpReason' ),
@@ -255,7 +262,7 @@ class FileDeleteForm {
                        <tr>
                                <td></td>
                                <td class='mw-input'>" .
-                                       Xml::checkLabel( wfMsg( 'watchthis' ),
+                                       Xml::checkLabel( wfMessage( 'watchthis' )->text(),
                                                'wpWatch', 'wpWatch', $checkWatch, array( 'tabindex' => '3' ) ) .
                                "</td>
                        </tr>";
@@ -264,7 +271,7 @@ class FileDeleteForm {
                        <tr>
                                <td></td>
                                <td class='mw-submit'>" .
-                                       Xml::submitButton( wfMsg( 'filedelete-submit' ),
+                                       Xml::submitButton( wfMessage( 'filedelete-submit' )->text(),
                                                array( 'name' => 'mw-filedelete-submit', 'id' => 'mw-filedelete-submit', 'tabindex' => '4' ) ) .
                                "</td>
                        </tr>" .
@@ -276,7 +283,7 @@ class FileDeleteForm {
                                $title = Title::makeTitle( NS_MEDIAWIKI, 'Filedelete-reason-dropdown' );
                                $link = Linker::link(
                                        $title,
-                                       wfMsgHtml( 'filedelete-edit-reasonlist' ),
+                                       wfMessage( 'filedelete-edit-reasonlist' )->escaped(),
                                        array(),
                                        array( 'action' => 'edit' )
                                );
@@ -307,19 +314,17 @@ class FileDeleteForm {
        private function prepareMessage( $message ) {
                global $wgLang;
                if( $this->oldimage ) {
-                       return wfMsgExt(
+                       return wfMessage(
                                "{$message}-old", # To ensure grep will find them: 'filedelete-intro-old', 'filedelete-nofile-old', 'filedelete-success-old'
-                               'parse',
                                wfEscapeWikiText( $this->title->getText() ),
                                $wgLang->date( $this->getTimestamp(), true ),
                                $wgLang->time( $this->getTimestamp(), true ),
-                               wfExpandUrl( $this->file->getArchiveUrl( $this->oldimage ), PROTO_CURRENT ) );
+                               wfExpandUrl( $this->file->getArchiveUrl( $this->oldimage ), PROTO_CURRENT ) )->parseAsBlock();
                } else {
-                       return wfMsgExt(
+                       return wfMessage(
                                $message,
-                               'parse',
                                wfEscapeWikiText( $this->title->getText() )
-                       );
+                       )->parseAsBlock();
                }
        }
 
index 391d11d..98bc65f 100644 (file)
@@ -391,7 +391,7 @@ function wfArrayToCgi( $array1, $array2 = null, $prefix = '' ) {
 
        $cgi = '';
        foreach ( $array1 as $key => $value ) {
-               if ( $value !== false ) {
+               if ( !is_null($value) && $value !== false ) {
                        if ( $cgi != '' ) {
                                $cgi .= '&';
                        }
@@ -412,11 +412,8 @@ function wfArrayToCgi( $array1, $array2 = null, $prefix = '' ) {
                        } else {
                                if ( is_object( $value ) ) {
                                        $value = $value->__toString();
-                               } elseif( !is_null( $value ) ) {
-                                       $cgi .= urlencode( $key ) . '=' . urlencode( $value );
-                               } else {
-                                       $cgi .= urlencode( $key );
                                }
+                               $cgi .= urlencode( $key ) . '=' . urlencode( $value );
                        }
                }
        }
@@ -443,15 +440,14 @@ function wfCgiToArray( $query ) {
                        continue;
                }
                if ( strpos( $bit, '=' ) === false ) {
-                       // Pieces like &qwerty become 'qwerty' => null
-                       $key = urldecode( $bit );
-                       $value = null;
+                       // Pieces like &qwerty become 'qwerty' => '' (at least this is what php does)
+                       $key = $bit;
+                       $value = '';
                } else {
                        list( $key, $value ) = explode( '=', $bit );
-                       $key = urldecode( $key );
-                       $value = urldecode( $value );
                }
-
+               $key = urldecode( $key );
+               $value = urldecode( $value );
                if ( strpos( $key, '[' ) !== false ) {
                        $keys = array_reverse( explode( '[', $key ) );
                        $key = array_pop( $keys );
@@ -476,15 +472,23 @@ function wfCgiToArray( $query ) {
  * Append a query string to an existing URL, which may or may not already
  * have query string parameters already. If so, they will be combined.
  *
- * @deprecated in 1.20. Use Uri class.
  * @param $url String
  * @param $query Mixed: string or associative array
  * @return string
  */
 function wfAppendQuery( $url, $query ) {
-       $obj = new Uri( $url );
-       $obj->extendQuery( $query );
-       return $obj->toString();
+       if ( is_array( $query ) ) {
+               $query = wfArrayToCgi( $query );
+       }
+       if( $query != '' ) {
+               if( false === strpos( $url, '?' ) ) {
+                       $url .= '?';
+               } else {
+                       $url .= '&';
+               }
+               $url .= $query;
+       }
+       return $url;
 }
 
 /**
@@ -572,13 +576,49 @@ function wfExpandUrl( $url, $defaultProto = PROTO_CURRENT ) {
  * @todo Need to integrate this into wfExpandUrl (bug 32168)
  *
  * @since 1.19
- * @deprecated
  * @param $urlParts Array URL parts, as output from wfParseUrl
  * @return string URL assembled from its component parts
  */
 function wfAssembleUrl( $urlParts ) {
-       $obj = new Uri( $urlParts );
-       return $obj->toString();
+       $result = '';
+
+       if ( isset( $urlParts['delimiter'] ) ) {
+               if ( isset( $urlParts['scheme'] ) ) {
+                       $result .= $urlParts['scheme'];
+               }
+
+               $result .= $urlParts['delimiter'];
+       }
+
+       if ( isset( $urlParts['host'] ) ) {
+               if ( isset( $urlParts['user'] ) ) {
+                       $result .= $urlParts['user'];
+                       if ( isset( $urlParts['pass'] ) ) {
+                               $result .= ':' . $urlParts['pass'];
+                       }
+                       $result .= '@';
+               }
+
+               $result .= $urlParts['host'];
+
+               if ( isset( $urlParts['port'] ) ) {
+                       $result .= ':' . $urlParts['port'];
+               }
+       }
+
+       if ( isset( $urlParts['path'] ) ) {
+               $result .= $urlParts['path'];
+       }
+
+       if ( isset( $urlParts['query'] ) ) {
+               $result .= '?' . $urlParts['query'];
+       }
+
+       if ( isset( $urlParts['fragment'] ) ) {
+               $result .= '#' . $urlParts['fragment'];
+       }
+
+       return $result;
 }
 
 /**
@@ -725,13 +765,61 @@ function wfUrlProtocolsWithoutProtRel() {
  * 2) Handles protocols that don't use :// (e.g., mailto: and news: , as well as protocol-relative URLs) correctly
  * 3) Adds a "delimiter" element to the array, either '://', ':' or '//' (see (2))
  *
- * @deprecated
  * @param $url String: a URL to parse
  * @return Array: bits of the URL in an associative array, per PHP docs
  */
 function wfParseUrl( $url ) {
-       $obj = new Uri( $url );
-       return $obj->getComponents();
+       global $wgUrlProtocols; // Allow all protocols defined in DefaultSettings/LocalSettings.php
+
+       // Protocol-relative URLs are handled really badly by parse_url(). It's so bad that the easiest
+       // way to handle them is to just prepend 'http:' and strip the protocol out later
+       $wasRelative = substr( $url, 0, 2 ) == '//';
+       if ( $wasRelative ) {
+               $url = "http:$url";
+       }
+       wfSuppressWarnings();
+       $bits = parse_url( $url );
+       wfRestoreWarnings();
+       // parse_url() returns an array without scheme for some invalid URLs, e.g.
+       // parse_url("%0Ahttp://example.com") == array( 'host' => '%0Ahttp', 'path' => 'example.com' )
+       if ( !$bits || !isset( $bits['scheme'] ) ) {
+               return false;
+       }
+
+       // parse_url() incorrectly handles schemes case-sensitively. Convert it to lowercase.
+       $bits['scheme'] = strtolower( $bits['scheme'] );
+
+       // most of the protocols are followed by ://, but mailto: and sometimes news: not, check for it
+       if ( in_array( $bits['scheme'] . '://', $wgUrlProtocols ) ) {
+               $bits['delimiter'] = '://';
+       } elseif ( in_array( $bits['scheme'] . ':', $wgUrlProtocols ) ) {
+               $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'] ) ) {
+                       $bits['host'] = $bits['path'];
+                       $bits['path'] = '';
+               }
+       } else {
+               return false;
+       }
+
+       /* Provide an empty host for eg. file:/// urls (see bug 28627) */
+       if ( !isset( $bits['host'] ) ) {
+               $bits['host'] = '';
+
+               /* parse_url loses the third / for file:///c:/ urls (but not on variants) */
+               if ( substr( $bits['path'], 0, 1 ) !== '/' ) {
+                       $bits['path'] = '/' . $bits['path'];
+               }
+       }
+
+       // If the URL was protocol-relative, fix scheme and delimiter
+       if ( $wasRelative ) {
+               $bits['scheme'] = '';
+               $bits['delimiter'] = '//';
+       }
+       return $bits;
 }
 
 /**
@@ -847,10 +935,7 @@ function wfMatchesDomainList( $url, $domains ) {
  * @param $logonly Bool: set true to avoid appearing in HTML when $wgDebugComments is set
  */
 function wfDebug( $text, $logonly = false ) {
-       global $wgOut, $wgDebugLogFile, $wgDebugComments, $wgProfileOnly, $wgDebugRawPage;
-       global $wgDebugLogPrefix, $wgShowDebug;
-
-       static $cache = array(); // Cache of unoutputted messages
+       global $wgDebugLogFile, $wgProfileOnly, $wgDebugRawPage, $wgDebugLogPrefix;
 
        if ( !$wgDebugRawPage && wfIsDebugRawPage() ) {
                return;
@@ -861,15 +946,10 @@ function wfDebug( $text, $logonly = false ) {
                $text = preg_replace( '/[^\n]/', $timer . '\0', $text, 1 );
        }
 
-       if ( ( $wgDebugComments || $wgShowDebug ) && !$logonly ) {
-               $cache[] = $text;
-
-               if ( isset( $wgOut ) && is_object( $wgOut ) ) {
-                       // add the message and any cached messages to the output
-                       array_map( array( $wgOut, 'debug' ), $cache );
-                       $cache = array();
-               }
+       if ( !$logonly ) {
+               MWDebug::debugMsg( $text );
        }
+
        if ( wfRunHooks( 'Debug', array( $text, null /* no log group */ ) ) ) {
                if ( $wgDebugLogFile != '' && !$wgProfileOnly ) {
                        # Strip unprintables; they can switch terminal modes when binary data
@@ -879,8 +959,6 @@ function wfDebug( $text, $logonly = false ) {
                        wfErrorLog( $text, $wgDebugLogFile );
                }
        }
-
-       MWDebug::debugMsg( $text );
 }
 
 /**
@@ -1007,35 +1085,7 @@ function wfLogDBError( $text ) {
  * @return null
  */
 function wfDeprecated( $function, $version = false, $component = false, $callerOffset = 2 ) {
-       static $functionsWarned = array();
-
-       MWDebug::deprecated( $function, $version, $component );
-
-       if ( !isset( $functionsWarned[$function] ) ) {
-               $functionsWarned[$function] = true;
-
-               if ( $version ) {
-                       global $wgDeprecationReleaseLimit;
-
-                       if ( $wgDeprecationReleaseLimit && $component === false ) {
-                               # Strip -* off the end of $version so that branches can use the
-                               # format #.##-branchname to avoid issues if the branch is merged into
-                               # a version of MediaWiki later than what it was branched from
-                               $comparableVersion = preg_replace( '/-.*$/', '', $version );
-
-                               # If the comparableVersion is larger than our release limit then
-                               # skip the warning message for the deprecation
-                               if ( version_compare( $wgDeprecationReleaseLimit, $comparableVersion, '<' ) ) {
-                                       return;
-                               }
-                       }
-
-                       $component = $component === false ? 'MediaWiki' : $component;
-                       wfWarn( "Use of $function was deprecated in $component $version.", $callerOffset );
-               } else {
-                       wfWarn( "Use of $function is deprecated.", $callerOffset );
-               }
-       }
+       MWDebug::deprecated( $function, $version, $component, $callerOffset + 1 );
 }
 
 /**
@@ -1049,34 +1099,7 @@ function wfDeprecated( $function, $version = false, $component = false, $callerO
  *        is true
  */
 function wfWarn( $msg, $callerOffset = 1, $level = E_USER_NOTICE ) {
-       global $wgDevelopmentWarnings;
-
-       MWDebug::warning( $msg, $callerOffset + 2 );
-
-       $callers = wfDebugBacktrace();
-       if ( isset( $callers[$callerOffset + 1] ) ) {
-               $callerfunc = $callers[$callerOffset + 1];
-               $callerfile = $callers[$callerOffset];
-               if ( isset( $callerfile['file'] ) && isset( $callerfile['line'] ) ) {
-                       $file = $callerfile['file'] . ' at line ' . $callerfile['line'];
-               } else {
-                       $file = '(internal function)';
-               }
-               $func = '';
-               if ( isset( $callerfunc['class'] ) ) {
-                       $func .= $callerfunc['class'] . '::';
-               }
-               if ( isset( $callerfunc['function'] ) ) {
-                       $func .= $callerfunc['function'];
-               }
-               $msg .= " [Called from $func in $file]";
-       }
-
-       if ( $wgDevelopmentWarnings ) {
-               trigger_error( $msg, $level );
-       } else {
-               wfDebug( "$msg\n" );
-       }
+       MWDebug::warning( $msg, $callerOffset + 1, $level );
 }
 
 /**
@@ -1684,7 +1707,7 @@ function wfMsgExt( $key, $options ) {
  * looked up didn't exist but a XHTML string, this function checks for the
  * nonexistance of messages by checking the MessageCache::get() result directly.
  *
- * @deprecated since 1.18
+ * @deprecated since 1.18. Use Message::isDisabled().
  *
  * @param $key      String: the message key looked up
  * @return Boolean True if the message *doesn't* exist.
@@ -1859,16 +1882,15 @@ function wfBacktrace() {
  * wfGetCaller( 3 ) is the parent of that.
  *
  * @param $level Int
- * @return Bool|string
+ * @return string
  */
 function wfGetCaller( $level = 2 ) {
        $backtrace = wfDebugBacktrace( $level + 1 );
        if ( isset( $backtrace[$level] ) ) {
                return wfFormatStackFrame( $backtrace[$level] );
        } else {
-               $caller = 'unknown';
+               return 'unknown';
        }
-       return $caller;
 }
 
 /**
@@ -1892,7 +1914,7 @@ function wfGetAllCallers( $limit = 3 ) {
  * Return a string representation of frame
  *
  * @param $frame Array
- * @return Bool
+ * @return string
  */
 function wfFormatStackFrame( $frame ) {
        return isset( $frame['class'] ) ?
@@ -2308,11 +2330,7 @@ function wfSuppressWarnings( $end = false ) {
                }
        } else {
                if ( !$suppressCount ) {
-                       // E_DEPRECATED is undefined in PHP 5.2
-                       if( !defined( 'E_DEPRECATED' ) ) {
-                               define( 'E_DEPRECATED', 8192 );
-                       }
-                       $originalLevel = error_reporting( E_ALL & ~( E_WARNING | E_NOTICE | E_USER_WARNING | E_USER_NOTICE | E_DEPRECATED ) );
+                       $originalLevel = error_reporting( E_ALL & ~( E_WARNING | E_NOTICE | E_USER_WARNING | E_USER_NOTICE | E_DEPRECATED | E_USER_DEPRECATED ) );
                }
                ++$suppressCount;
        }
@@ -2386,6 +2404,7 @@ define( 'TS_ISO_8601_BASIC', 9 );
 /**
  * Get a timestamp string in one of various formats
  *
+ * @deprecated
  * @param $outputtype Mixed: A timestamp in one of the supported formats, the
  *                    function will autodetect which format is supplied and act
  *                    accordingly.
@@ -2393,118 +2412,8 @@ define( 'TS_ISO_8601_BASIC', 9 );
  * @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();
-       $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 ) ) {
-               # TS_EXIF
-       } 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 ) ) {
-               # TS_UNIX
-               $uts = $ts;
-               $strtime = "@$ts"; // http://php.net/manual/en/datetime.formats.compound.php
-       } 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
-               $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{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 ) ) {
-               # 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...
-               wfDebug("wfTimestamp() fed bogus time value: TYPE=$outputtype; VALUE=$ts\n");
-
-               return false;
-       }
-
-       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.' );
-       }
-
-       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;
-               }
-               $output = gmdate( $formats[$outputtype], $uts );
-       }
-
-       if ( ( $outputtype == TS_RFC2822 ) || ( $outputtype == TS_POSTGRES ) ) {
-               $output .= ' GMT';
-       }
-
-       return $output;
+       $timestamp = new MWTimestamp( $ts );
+       return $timestamp->getTimestamp( $outputtype );
 }
 
 /**
@@ -2607,7 +2516,7 @@ function wfMkdirParents( $dir, $mode = null, $caller = null ) {
        global $wgDirectoryMode;
 
        if ( FileBackend::isStoragePath( $dir ) ) { // sanity
-               throw new MWException( __FUNCTION__ . " given storage path `$dir`.");
+               throw new MWException( __FUNCTION__ . " given storage path '$dir'." );
        }
 
        if ( !is_null( $caller ) ) {
@@ -3590,13 +3499,20 @@ function wfQueriesMustScale() {
 /**
  * Get the path to a specified script file, respecting file
  * extensions; this is a wrapper around $wgScriptExtension etc.
+ * except for 'index' and 'load' which use $wgScript/$wgLoadScript
  *
  * @param $script String: script filename, sans extension
  * @return String
  */
 function wfScript( $script = 'index' ) {
-       global $wgScriptPath, $wgScriptExtension;
-       return "{$wgScriptPath}/{$script}{$wgScriptExtension}";
+       global $wgScriptPath, $wgScriptExtension, $wgScript, $wgLoadScript;
+       if ( $script === 'index' ) {
+               return $wgScript;
+       } else if ( $script === 'load' ) {
+               return $wgLoadScript;
+       } else {
+               return "{$wgScriptPath}/{$script}{$wgScriptExtension}";
+       }
 }
 
 /**
index ab12377..5c00b9f 100644 (file)
@@ -424,7 +424,7 @@ class HTMLForm extends ContextSource {
 
        /**
         * Set a message to display on a validation error.
-        * @param $msg Mixed String or Array of valid inputs to wfMsgExt()
+        * @param $msg Mixed String or Array of valid inputs to wfMessage()
         *       (so each entry can be either a String or Array)
         * @return HTMLForm $this for chaining calls (since 1.20)
         */
@@ -700,7 +700,7 @@ class HTMLForm extends ContextSource {
                                'input',
                                array(
                                        'type' => 'reset',
-                                       'value' => wfMsg( 'htmlform-reset' )
+                                       'value' => $this->msg( 'htmlform-reset' )->text()
                                )
                        ) . "\n";
                }
@@ -776,7 +776,7 @@ class HTMLForm extends ContextSource {
                        $errorstr .= Html::rawElement(
                                'li',
                                array(),
-                               wfMsgExt( $msg, array( 'parseinline' ), $error )
+                               wfMessage( $msg, $error )->parse()
                        );
                }
 
@@ -813,7 +813,7 @@ class HTMLForm extends ContextSource {
        function getSubmitText() {
                return $this->mSubmitText
                        ? $this->mSubmitText
-                       : wfMsg( 'htmlform-submit' );
+                       : $this->msg( 'htmlform-submit' )->text();
        }
 
        /**
@@ -1051,7 +1051,7 @@ class HTMLForm extends ContextSource {
         * @return String
         */
        public function getLegend( $key ) {
-               return wfMsg( "{$this->mMessagePrefix}-$key" );
+               return $this->msg( "{$this->mMessagePrefix}-$key" )->text();
        }
 
        /**
@@ -1100,6 +1100,28 @@ abstract class HTMLFormField {
         */
        abstract function getInputHTML( $value );
 
+       /**
+        * Get a translated interface message
+        *
+        * This is a wrapper arround $this->mParent->msg() if $this->mParent is set
+        * and wfMessage() otherwise.
+        *
+        * Parameters are the same as wfMessage().
+        *
+        * @return Message object
+        */
+       function msg() {
+               $args = func_get_args();
+
+               if ( $this->mParent ) {
+                       $callback = array( $this->mParent, 'msg' );
+               } else {
+                       $callback = 'wfMessage';
+               }
+
+               return call_user_func_array( $callback, $args );
+       }
+
        /**
         * Override this function to add specific validation checks on the
         * field input.  Don't forget to call parent::validate() to ensure
@@ -1110,7 +1132,7 @@ abstract class HTMLFormField {
         */
        function validate( $value, $alldata ) {
                if ( isset( $this->mParams['required'] ) && $this->mParams['required'] !== false && $value === '' ) {
-                       return wfMsgExt( 'htmlform-required', 'parseinline' );
+                       return $this->msg( 'htmlform-required' )->parse();
                }
 
                if ( isset( $this->mValidationCallback ) ) {
@@ -1170,7 +1192,7 @@ abstract class HTMLFormField {
                                $msgInfo = array();
                        }
 
-                       $this->mLabel = wfMsgExt( $msg, 'parseinline', $msgInfo );
+                       $this->mLabel = wfMessage( $msg, $msgInfo )->parse();
                } elseif ( isset( $params['label'] ) ) {
                        $this->mLabel = $params['label'];
                }
@@ -1371,13 +1393,13 @@ abstract class HTMLFormField {
                if ( isset( $this->mParams['help-messages'] ) ) {
                        foreach ( $this->mParams['help-messages'] as $name ) {
                                $helpMessage = (array)$name;
-                               $msg = wfMessage( array_shift( $helpMessage ), $helpMessage );
+                               $msg = $this->msg( array_shift( $helpMessage ), $helpMessage );
 
                                if ( $msg->exists() ) {
                                        if ( is_null( $helptext ) ) {
                                                $helptext = '';
                                        } else {
-                                               $helptext .= wfMessage( 'word-separator' )->escaped(); // some space
+                                               $helptext .= $this->msg( 'word-separator' )->escaped(); // some space
                                        }
                                        $helptext .= $msg->parse(); // Append message
                                }
@@ -1642,7 +1664,7 @@ class HTMLFloatField extends HTMLTextField {
                # http://dev.w3.org/html5/spec/common-microsyntaxes.html#real-numbers
                # with the addition that a leading '+' sign is ok.
                if ( !preg_match( '/^((\+|\-)?\d+(\.\d+)?(E(\+|\-)?\d+)?)?$/i', $value ) ) {
-                       return wfMsgExt( 'htmlform-float-invalid', 'parse' );
+                       return $this->msg( 'htmlform-float-invalid' )->parseAsBlock();
                }
 
                # The "int" part of these message names is rather confusing.
@@ -1651,7 +1673,7 @@ class HTMLFloatField extends HTMLTextField {
                        $min = $this->mParams['min'];
 
                        if ( $min > $value ) {
-                               return wfMsgExt( 'htmlform-int-toolow', 'parse', array( $min ) );
+                               return $this->msg( 'htmlform-int-toolow', $min )->parseAsBlock();
                        }
                }
 
@@ -1659,7 +1681,7 @@ class HTMLFloatField extends HTMLTextField {
                        $max = $this->mParams['max'];
 
                        if ( $max < $value ) {
-                               return wfMsgExt( 'htmlform-int-toohigh', 'parse', array( $max ) );
+                               return $this->msg( 'htmlform-int-toohigh', $max )->parseAsBlock();
                        }
                }
 
@@ -1686,7 +1708,7 @@ class HTMLIntField extends HTMLFloatField {
                # value to, eg, save in the DB, clean it up with intval().
                if ( !preg_match( '/^((\+|\-)?\d+)?$/', trim( $value ) )
                ) {
-                       return wfMsgExt( 'htmlform-int-invalid', 'parse' );
+                       return $this->msg( 'htmlform-int-invalid' )->parseAsBlock();
                }
 
                return true;
@@ -1770,7 +1792,7 @@ class HTMLSelectField extends HTMLFormField {
                if ( in_array( $value, $validOptions ) )
                        return true;
                else
-                       return wfMsgExt( 'htmlform-select-badoption', 'parseinline' );
+                       return $this->msg( 'htmlform-select-badoption' )->parse();
        }
 
        function getInputHTML( $value ) {
@@ -1808,7 +1830,9 @@ class HTMLSelectOrOtherField extends HTMLTextField {
 
        function __construct( $params ) {
                if ( !in_array( 'other', $params['options'], true ) ) {
-                       $msg = isset( $params['other'] ) ? $params['other'] : wfMsg( 'htmlform-selectorother-other' );
+                       $msg = isset( $params['other'] ) ?
+                               $params['other'] :
+                               wfMessage( 'htmlform-selectorother-other' )->text();
                        $params['options'][$msg] = 'other';
                }
 
@@ -1912,7 +1936,7 @@ class HTMLMultiSelectField extends HTMLFormField {
                if ( count( $validValues ) == count( $value ) ) {
                        return true;
                } else {
-                       return wfMsgExt( 'htmlform-select-badoption', 'parseinline' );
+                       return $this->msg( 'htmlform-select-badoption' )->parse();
                }
        }
 
@@ -2114,7 +2138,7 @@ class HTMLSelectAndOtherField extends HTMLSelectField {
                        } elseif ( $text == '' ) {
                                $final = $list;
                        } else {
-                               $final = $list . wfMsgForContent( 'colon-separator' ) . $text;
+                               $final = $list . $this->msg( 'colon-separator' )->inContentLanguage()->text() . $text;
                        }
 
                } else {
@@ -2123,7 +2147,7 @@ class HTMLSelectAndOtherField extends HTMLSelectField {
                        $list = 'other';
                        $text = $final;
                        foreach ( $this->mFlatOptions as $option ) {
-                               $match = $option . wfMsgForContent( 'colon-separator' );
+                               $match = $option . $this->msg( 'colon-separator' )->inContentLanguage()->text();
                                if ( strpos( $text, $match ) === 0 ) {
                                        $list = $option;
                                        $text = substr( $text, strlen( $match ) );
@@ -2151,7 +2175,7 @@ class HTMLSelectAndOtherField extends HTMLSelectField {
                }
 
                if ( isset( $this->mParams['required'] ) && $this->mParams['required'] !== false && $value[1] === '' ) {
-                       return wfMsgExt( 'htmlform-required', 'parseinline' );
+                       return $this->msg( 'htmlform-required' )->parse();
                }
 
                return true;
@@ -2180,7 +2204,7 @@ class HTMLRadioField extends HTMLFormField {
                if ( in_array( $value, $validOptions ) ) {
                        return true;
                } else {
-                       return wfMsgExt( 'htmlform-select-badoption', 'parseinline' );
+                       return $this->msg( 'htmlform-select-badoption' )->parse();
                }
        }
 
@@ -2390,11 +2414,11 @@ class HTMLEditTools extends HTMLFormField {
 
        protected function formatMsg() {
                if ( empty( $this->mParams['message'] ) ) {
-                       $msg = wfMessage( 'edittools' );
+                       $msg = $this->msg( 'edittools' );
                } else {
-                       $msg = wfMessage( $this->mParams['message'] );
+                       $msg = $this->msg( $this->mParams['message'] );
                        if ( $msg->isDisabled() ) {
-                               $msg = wfMessage( 'edittools' );
+                               $msg = $this->msg( 'edittools' );
                        }
                }
                $msg->inContentLanguage();
index 23fead7..d4d0203 100644 (file)
@@ -325,7 +325,11 @@ class Html {
 
                foreach ( $attribs as $attrib => $value ) {
                        $lcattrib = strtolower( $attrib );
-                       $value = strval( $value );
+                       if( is_array( $value ) ) {
+                               $value = implode( ' ', $value );
+                       } else {
+                               $value = strval( $value );
+                       }
 
                        # Simple checks using $attribDefaults
                        if ( isset( $attribDefaults[$element][$lcattrib] ) &&
index ab3e2e3..7bbd584 100644 (file)
@@ -94,10 +94,47 @@ class ImagePage extends Article {
        /**
         * Handler for action=render
         * Include body text only; none of the image extras
+        * However, also include the shared description text
+        * so that cascading ForeignAPIRepo's work.
+        *
+        * @note This uses a div with the class "mw-shared-image-desc"
+        *    as opposed to the id "mw-shared-image-desc" since the text
+        *    from here may be cascadingly transcluded to other shared
+        *    repos, and we want all ids to be unique. On normal
+        *    view, the outermost shared description will still have
+        *    the id.
+        *
+        * This also differs from normal view in that "shareddescriptionfollows"
+        * message is not shown. I was not sure if it was appropriate to
+        * add that message here.
         */
        public function render() {
-               $this->getContext()->getOutput()->setArticleBodyOnly( true );
-               parent::view();
+               $out = $this->getContext()->getOutput();
+                $this->loadFile();
+
+                $descText = $this->mPage->getFile()->getDescriptionText();
+
+               $out->setArticleBodyOnly( true );
+
+               if ( !$descText ) {
+                       // If no description text, just do standard action=render
+                       parent::view();
+               } else {
+                       if ( $this->mPage->getID() !== 0 ) {
+                               // Local description exists. We need to output both
+                               parent::view();
+                               $out->addHTML( '<div class="mw-shared-image-desc">' . $descText . "</div>\n" );
+                       } else {
+                               // We don't want to output both a "noarticletext" message and the shared
+                               // description, so don't call parent::view().
+                               $out->addHTML( '<div class="mw-shared-image-desc">' . $descText . "</div>\n" );
+                               // Since we did not call parent::view(), have to call some methods it
+                               // normally takes care of. (Not that it matters much since skin not displayed)
+                               $out->setArticleFlag( true );
+                               $out->setPageTitle( $this->getTitle()->getPrefixedText() );
+                               $this->mPage->doViewUpdates( $this->getContext()->getUser() );
+                       }
+               }
        }
 
        public function view() {
@@ -153,7 +190,7 @@ class ImagePage extends Article {
                if ( $this->mPage->getID() ) {
                        # NS_FILE is in the user language, but this section (the actual wikitext)
                        # should be in page content language
-                       $pageLang = $this->getTitle()->getPageLanguage();
+                       $pageLang = $this->getTitle()->getPageViewLanguage();
                        $out->addHTML( Xml::openElement( 'div', array( 'id' => 'mw-imagepage-content',
                                'lang' => $pageLang->getHtmlCode(), 'dir' => $pageLang->getDir(),
                                'class' => 'mw-content-'.$pageLang->getDir() ) ) );
@@ -172,7 +209,7 @@ class ImagePage extends Article {
                        if ( !$fol->isDisabled() ) {
                                $out->addWikiText( $fol->plain() );
                        }
-                       $out->addHTML( '<div id="shared-image-desc">' . $this->mExtraDescription . "</div>\n" );
+                       $out->addHTML( '<div id="shared-image-desc" class="mw-shared-image-desc">' . $this->mExtraDescription . "</div>\n" );
                }
 
                $this->closeShowImage();
@@ -181,7 +218,7 @@ class ImagePage extends Article {
 
                $out->addHTML( Xml::element( 'h2',
                        array( 'id' => 'filelinks' ),
-                       wfMsg( 'imagelinks' ) ) . "\n" );
+                       wfMessage( 'imagelinks' )->text() ) . "\n" );
                $this->imageDupes();
                # @todo FIXME: For some freaky reason, we can't redirect to foreign images.
                # Yet we return metadata about the target. Definitely an issue in the FileRepo
@@ -195,7 +232,10 @@ class ImagePage extends Article {
                }
 
                if ( $showmeta ) {
-                       $out->addHTML( Xml::element( 'h2', array( 'id' => 'metadata' ), wfMsg( 'metadata' ) ) . "\n" );
+                       $out->addHTML( Xml::element(
+                               'h2',
+                               array( 'id' => 'metadata' ),
+                               wfMessage( 'metadata' )->text() ) . "\n" );
                        $out->addWikiText( $this->makeMetadataTable( $formattedMetadata ) );
                        $out->addModules( array( 'mediawiki.action.view.metadata' ) );
                }
@@ -227,12 +267,12 @@ class ImagePage extends Article {
         */
        protected function showTOC( $metadata ) {
                $r = array(
-                       '<li><a href="#file">' . wfMsgHtml( 'file-anchor-link' ) . '</a></li>',
-                       '<li><a href="#filehistory">' . wfMsgHtml( 'filehist' ) . '</a></li>',
-                       '<li><a href="#filelinks">' . wfMsgHtml( 'imagelinks' ) . '</a></li>',
+                       '<li><a href="#file">' . wfMessage( 'file-anchor-link' )->escaped() . '</a></li>',
+                       '<li><a href="#filehistory">' . wfMessage( 'filehist' )->escaped() . '</a></li>',
+                       '<li><a href="#filelinks">' . wfMessage( 'imagelinks' )->escaped() . '</a></li>',
                );
                if ( $metadata ) {
-                       $r[] = '<li><a href="#metadata">' . wfMsgHtml( 'metadata' ) . '</a></li>';
+                       $r[] = '<li><a href="#metadata">' . wfMessage( 'metadata' )->escaped() . '</a></li>';
                }
 
                wfRunHooks( 'ImagePageShowTOC', array( $this, &$r ) );
@@ -250,7 +290,7 @@ class ImagePage extends Article {
         */
        protected function makeMetadataTable( $metadata ) {
                $r = "<div class=\"mw-imagepage-section-metadata\">";
-               $r .= wfMsgNoTrans( 'metadata-help' );
+               $r .= wfMessage( 'metadata-help' )->plain();
                $r .= "<table id=\"mw_metadata\" class=\"mw_metadata\">\n";
                foreach ( $metadata as $type => $stuff ) {
                        foreach ( $stuff as $v ) {
@@ -322,7 +362,7 @@ class ImagePage extends Article {
                        $height_orig = $this->displayImg->getHeight( $page );
                        $height = $height_orig;
 
-                       $longDesc = wfMsg( 'parentheses', $this->displayImg->getLongDesc() );
+                       $longDesc = wfMessage( 'parentheses', $this->displayImg->getLongDesc() )->text();
 
                        wfRunHooks( 'ImageOpenShowImageInlineBefore', array( &$this, &$out ) );
 
@@ -330,7 +370,7 @@ class ImagePage extends Article {
                                # image
 
                                # "Download high res version" link below the image
-                               # $msgsize = wfMsgHtml( 'file-info-size', $width_orig, $height_orig, Linker::formatSize( $this->displayImg->getSize() ), $mime );
+                               # $msgsize = wfMessage( 'file-info-size', $width_orig, $height_orig, Linker::formatSize( $this->displayImg->getSize() ), $mime )->escaped();
                                # We'll show a thumbnail of this image
                                if ( $width > $maxWidth || $height > $maxHeight ) {
                                        # Calculate the thumbnail size.
@@ -346,7 +386,7 @@ class ImagePage extends Article {
                                                # Note that $height <= $maxHeight now, but might not be identical
                                                # because of rounding.
                                        }
-                                       $msgbig = wfMsgHtml( 'show-big-image' );
+                                       $msgbig = wfMessage( 'show-big-image' )->escaped();
                                        if ( $this->displayImg->getRepo()->canTransformVia404() ) {
                                                $thumbSizes = $wgImageLimits;
                                        } else {
@@ -411,7 +451,7 @@ class ImagePage extends Article {
                                        $count = $this->displayImg->pageCount();
 
                                        if ( $page > 1 ) {
-                                               $label = $out->parse( wfMsg( 'imgmultipageprev' ), false );
+                                               $label = $out->parse( wfMessage( 'imgmultipageprev' )->text(), false );
                                                $link = Linker::linkKnown(
                                                        $this->getTitle(),
                                                        $label,
@@ -425,7 +465,7 @@ class ImagePage extends Article {
                                        }
 
                                        if ( $page < $count ) {
-                                               $label = wfMsg( 'imgmultipagenext' );
+                                               $label = wfMessage( 'imgmultipagenext' )->text();
                                                $link = Linker::linkKnown(
                                                        $this->getTitle(),
                                                        $label,
@@ -457,8 +497,8 @@ class ImagePage extends Article {
                                                '</td><td><div class="multipageimagenavbox">' .
                                                Xml::openElement( 'form', $formParams ) .
                                                Html::hidden( 'title', $this->getTitle()->getPrefixedDBkey() ) .
-                                               wfMsgExt( 'imgmultigoto', array( 'parseinline', 'replaceafter' ), $select ) .
-                                               Xml::submitButton( wfMsg( 'imgmultigo' ) ) .
+                                                       wfMessage( 'imgmultigoto' )->rawParams( $select )->parse() .
+                                               Xml::submitButton( wfMessage( 'imgmultigo' )->text() ) .
                                                Xml::closeElement( 'form' ) .
                                                "<hr />$thumb1\n$thumb2<br style=\"clear: both\" /></div></td></tr></table>"
                                        );
@@ -485,7 +525,7 @@ class ImagePage extends Article {
                                $medialink = "[[Media:$filename|$linktext]]";
 
                                if ( !$this->displayImg->isSafeFile() ) {
-                                       $warning = wfMsgNoTrans( 'mediawarning' );
+                                       $warning = wfMessage( 'mediawarning' )->plain();
                                        // dirmark is needed here to separate the file name, which
                                        // most likely ends in Latin characters, from the description,
                                        // which may begin with the file type. In RTL environment
@@ -507,6 +547,25 @@ EOT
                                }
                        }
 
+                       // Add cannot animate thumbnail warning
+                       if ( !$this->displayImg->canAnimateThumbIfAppropriate() ) {
+                               // Include the extension so wiki admins can
+                               // customize it on a per file-type basis
+                               // (aka say things like use format X instead).
+                               // additionally have a specific message for
+                               // file-no-thumb-animation-gif
+                               $ext = $this->displayImg->getExtension();
+                               $noAnimMesg = wfMessageFallback(
+                                       'file-no-thumb-animation-' . $ext,
+                                       'file-no-thumb-animation'
+                               )->plain();
+
+                               $out->addWikiText( <<<EOT
+<div class="mw-noanimatethumb">{$noAnimMesg}</div>
+EOT
+                               );
+                       }
+
                        if ( !$this->displayImg->isLocal() ) {
                                $this->printSharedImageText();
                        }
@@ -593,9 +652,9 @@ EOT
                $wrap = "<div class=\"sharedUploadNotice\">\n$1\n</div>\n";
                $repo = $this->mPage->getFile()->getRepo()->getDisplayName();
 
-               if ( $descUrl && $descText && wfMsgNoTrans( 'sharedupload-desc-here' ) !== '-'  ) {
+               if ( $descUrl && $descText && wfMessage( 'sharedupload-desc-here' )->plain() !== '-'  ) {
                        $out->wrapWikiMsg( $wrap, array( 'sharedupload-desc-here', $repo, $descUrl ) );
-               } elseif ( $descUrl && wfMsgNoTrans( 'sharedupload-desc-there' ) !== '-' ) {
+               } elseif ( $descUrl && wfMessage( 'sharedupload-desc-there' )->plain() !== '-' ) {
                        $out->wrapWikiMsg( $wrap, array( 'sharedupload-desc-there', $repo, $descUrl ) );
                } else {
                        $out->wrapWikiMsg( $wrap, array( 'sharedupload', $repo ), ''/*BACKCOMPAT*/ );
@@ -632,19 +691,22 @@ EOT
                }
 
                $out = $this->getContext()->getOutput();
-               $out->addHTML( "<br /><ul>\n" );
+               $out->addHTML( "<ul>\n" );
 
                # "Upload a new version of this file" link
-               if ( UploadBase::userCanReUpload( $this->getContext()->getUser(), $this->mPage->getFile()->name ) ) {
-                       $ulink = Linker::makeExternalLink( $this->getUploadUrl(), wfMsg( 'uploadnewversion-linktext' ) );
+               $canUpload = $this->getTitle()->userCan( 'upload', $this->getContext()->getUser() );
+               if ( $canUpload && UploadBase::userCanReUpload( $this->getContext()->getUser(), $this->mPage->getFile()->name ) ) {
+                       $ulink = Linker::makeExternalLink( $this->getUploadUrl(), wfMessage( 'uploadnewversion-linktext' )->text() );
                        $out->addHTML( "<li id=\"mw-imagepage-reupload-link\"><div class=\"plainlinks\">{$ulink}</div></li>\n" );
+               } else {
+                       $out->addHTML( "<li id=\"mw-imagepage-upload-disallowed\">" . $this->getContext()->msg( 'upload-disallowed-here' )->escaped() . "</li>\n" );
                }
 
                # External editing link
                if ( $wgUseExternalEditor ) {
                        $elink = Linker::linkKnown(
                                $this->getTitle(),
-                               wfMsgHtml( 'edit-externally' ),
+                               wfMessage( 'edit-externally' )->escaped(),
                                array(),
                                array(
                                        'action' => 'edit',
@@ -654,8 +716,8 @@ EOT
                        );
                        $out->addHTML(
                                '<li id="mw-imagepage-edit-external">' . $elink . ' <small>' .
-                               wfMsgExt( 'edit-externally-help', array( 'parseinline' ) ) .
-                               "</small></li>\n"
+                                       wfMessage( 'edit-externally-help' )->parse() .
+                                       "</small></li>\n"
                        );
                }
 
@@ -829,7 +891,7 @@ EOT
                        } else {
                                $link = Linker::makeExternalLink( $file->getDescriptionUrl(),
                                        $file->getTitle()->getPrefixedText() );
-                               $fromSrc = wfMsg( 'shared-repo-from', $file->getRepo()->getDisplayName() );
+                               $fromSrc = wfMessage( 'shared-repo-from', $file->getRepo()->getDisplayName() )->text();
                        }
                        $out->addHTML( "<li>{$link} {$fromSrc}</li>\n" );
                }
index 0cfb047..ba504a9 100644 (file)
@@ -120,7 +120,7 @@ class Licenses extends HTMLFormField {
                foreach ( $tagset as $key => $val )
                        if ( is_array( $val ) ) {
                                $this->html .= $this->outputOption(
-                                       $this->msg( $key ), '',
+                                       $key, '',
                                        array(
                                                'disabled' => 'disabled',
                                                'style' => 'color: GrayText', // for MSIE
@@ -130,7 +130,7 @@ class Licenses extends HTMLFormField {
                                $this->makeHtml( $val, $depth + 1 );
                        } else {
                                $this->html .= $this->outputOption(
-                                       $this->msg( $val->text ), $val->template,
+                                       $val->text, $val->template,
                                        array( 'title' => '{{' . $val->template . '}}' ),
                                        $depth
                                );
@@ -138,13 +138,15 @@ class Licenses extends HTMLFormField {
        }
 
        /**
-        * @param $text
+        * @param $message
         * @param $value
         * @param $attribs null
         * @param $depth int
         * @return string
         */
-       protected function outputOption( $text, $value, $attribs = null, $depth = 0 ) {
+       protected function outputOption( $message, $value, $attribs = null, $depth = 0 ) {
+               $msgObj = $this->msg( $message );
+               $text = $msgObj->exists() ? $msgObj->text() : $message;
                $attribs['value'] = $value;
                if ( $value === $this->selected )
                        $attribs['selected'] = 'selected';
@@ -152,15 +154,6 @@ class Licenses extends HTMLFormField {
                return str_repeat( "\t", $depth ) . Xml::element( 'option', $attribs, $val ) . "\n";
        }
 
-       /**
-        * @param $str string
-        * @return String
-        */
-       protected function msg( $str ) {
-               $msg = wfMessage( $str );
-               return $msg->exists() ? $msg->text() : $str;
-       }
-
        /**#@-*/
 
        /**
index 3a4f7c3..8e31a1c 100644 (file)
@@ -345,7 +345,7 @@ class Linker {
                } elseif ( in_array( 'known', $options ) ) {
                        $defaults['title'] = $target->getPrefixedText();
                } else {
-                       $defaults['title'] = wfMsg( 'red-link-title', $target->getPrefixedText() );
+                       $defaults['title'] = wfMessage( 'red-link-title', $target->getPrefixedText() )->text();
                }
 
                # Finally, merge the custom attribs with the default ones, and iterate
@@ -536,6 +536,7 @@ class Linker {
         *          valign          Vertical alignment (baseline, sub, super, top, text-top, middle,
         *                          bottom, text-bottom)
         *          alt             Alternate text for image (i.e. alt attribute). Plain text.
+        *          class           HTML for image classes. Plain text.
         *          caption         HTML for image caption.
         *          link-url        URL to link to
         *          link-title      Title object to link to
@@ -580,6 +581,9 @@ class Linker {
                if ( !isset( $fp['title'] ) ) {
                        $fp['title'] = '';
                }
+               if ( !isset( $fp['class'] ) ) {
+                       $fp['class'] = '';
+               }
 
                $prefix = $postfix = '';
 
@@ -663,8 +667,11 @@ class Linker {
                        $params = array(
                                'alt' => $fp['alt'],
                                'title' => $fp['title'],
-                               'valign' => isset( $fp['valign'] ) ? $fp['valign'] : false ,
-                               'img-class' => isset( $fp['border'] ) ? 'thumbborder' : false );
+                               'valign' => isset( $fp['valign'] ) ? $fp['valign'] : false,
+                               'img-class' => $fp['class'] );
+                       if ( isset( $fp['border'] ) ) {
+                               $params['img-class'] .= ( $params['img-class'] !== '' ) ? ' thumbborder' : 'thumbborder';
+                       }
                        $params = self::getImageLinkMTOParams( $fp, $query, $parser ) + $params;
 
                        $s = $thumb->toHtml( $params );
@@ -825,13 +832,14 @@ class Linker {
                        $s .= self::makeBrokenImageLinkObj( $title, $fp['title'], '', '', '', $time == true );
                        $zoomIcon = '';
                } elseif ( !$thumb ) {
-                       $s .= htmlspecialchars( wfMsg( 'thumbnail_error', '' ) );
+                       $s .= wfMessage( 'thumbnail_error', '' )->escaped();
                        $zoomIcon = '';
                } else {
                        $params = array(
                                'alt' => $fp['alt'],
                                'title' => $fp['title'],
-                               'img-class' => 'thumbimage' );
+                               'img-class' => ( isset( $fp['class'] ) && $fp['class'] !== '' ) ? $fp['class'] . ' thumbimage' : 'thumbimage'
+                       );
                        $params = self::getImageLinkMTOParams( $fp, $query ) + $params;
                        $s .= $thumb->toHtml( $params );
                        if ( isset( $fp['framed'] ) ) {
@@ -841,7 +849,7 @@ class Linker {
                                        Html::rawElement( 'a', array(
                                                'href' => $url,
                                                'class' => 'internal',
-                                               'title' => wfMsg( 'thumbnail-more' ) ),
+                                               'title' => wfMessage( 'thumbnail-more' )->text() ),
                                                Html::element( 'img', array(
                                                        'src' => $wgStylePath . '/common/images/magnify-clip' . ( $wgContLang->isRTL() ? '-rtl' : '' ) . '.png',
                                                        'width' => 15,
@@ -857,31 +865,31 @@ class Linker {
         * Make a "broken" link to an image
         *
         * @param $title Title object
-        * @param $html String: link label in htmlescaped text form
+        * @param $label String: link label (plain text)
         * @param $query String: query string
-        * @param $trail String: link trail (HTML fragment)
-        * @param $prefix String: link prefix (HTML fragment)
+        * @param $unused1 Unused parameter kept for b/c
+        * @param $unused2 Unused parameter kept for b/c
         * @param $time Boolean: a file of a certain timestamp was requested
         * @return String
         */
-       public static function makeBrokenImageLinkObj( $title, $html = '', $query = '', $trail = '', $prefix = '', $time = false ) {
+       public static function makeBrokenImageLinkObj( $title, $label = '', $query = '', $unused1 = '', $unused2 = '', $time = false ) {
                global $wgEnableUploads, $wgUploadMissingFileUrl, $wgUploadNavigationUrl;
                if ( ! $title instanceof Title ) {
-                       return "<!-- ERROR -->{$prefix}{$html}{$trail}";
+                       return "<!-- ERROR -->" . htmlspecialchars( $label );
                }
                wfProfileIn( __METHOD__ );
+               if ( $label == '' ) {
+                       $label = $title->getPrefixedText();
+               }
+               $encLabel = htmlspecialchars( $label );
                $currentExists = $time ? ( wfFindFile( $title ) != false ) : false;
 
-               list( $inside, $trail ) = self::splitTrail( $trail );
-               if ( $html == '' )
-                       $html = htmlspecialchars( $title->getPrefixedText() );
-
                if ( ( $wgUploadMissingFileUrl || $wgUploadNavigationUrl || $wgEnableUploads ) && !$currentExists ) {
                        $redir = RepoGroup::singleton()->getLocalRepo()->checkRedirect( $title );
 
                        if ( $redir ) {
                                wfProfileOut( __METHOD__ );
-                               return self::linkKnown( $title, "$prefix$html$inside", array(), wfCgiToArray( $query ) ) . $trail;
+                               return self::linkKnown( $title, $encLabel, array(), wfCgiToArray( $query ) );
                        }
 
                        $href = self::getUploadUrl( $title, $query );
@@ -889,10 +897,10 @@ class Linker {
                        wfProfileOut( __METHOD__ );
                        return '<a href="' . htmlspecialchars( $href ) . '" class="new" title="' .
                                htmlspecialchars( $title->getPrefixedText(), ENT_QUOTES ) . '">' .
-                               "$prefix$html$inside</a>$trail";
+                               $encLabel . '</a>';
                } else {
                        wfProfileOut( __METHOD__ );
-                       return self::linkKnown( $title, "$prefix$html$inside", array(), wfCgiToArray( $query ) ) . $trail;
+                       return self::linkKnown( $title, $encLabel, array(), wfCgiToArray( $query ) );
                }
        }
 
@@ -971,7 +979,7 @@ class Linker {
                        $key = strtolower( $name );
                }
 
-               return self::linkKnown( SpecialPage::getTitleFor( $name ) , wfMsg( $key ) );
+               return self::linkKnown( SpecialPage::getTitleFor( $name ) , wfMessage( $key )->text() );
        }
 
        /**
@@ -1063,7 +1071,7 @@ class Linker {
                        }
                        $contribsPage = SpecialPage::getTitleFor( 'Contributions', $userText );
 
-                       $items[] = self::link( $contribsPage, wfMsgHtml( 'contribslink' ), $attribs );
+                       $items[] = self::link( $contribsPage, wfMessage( 'contribslink' )->escaped(), $attribs );
                }
                if ( $blockable && $wgUser->isAllowed( 'block' ) ) {
                        $items[] = self::blockLink( $userId, $userText );
@@ -1104,7 +1112,7 @@ class Linker {
         */
        public static function userTalkLink( $userId, $userText ) {
                $userTalkPage = Title::makeTitle( NS_USER_TALK, $userText );
-               $userTalkLink = self::link( $userTalkPage, wfMsgHtml( 'talkpagelinktext' ) );
+               $userTalkLink = self::link( $userTalkPage, wfMessage( 'talkpagelinktext' )->escaped() );
                return $userTalkLink;
        }
 
@@ -1115,7 +1123,7 @@ class Linker {
         */
        public static function blockLink( $userId, $userText ) {
                $blockPage = SpecialPage::getTitleFor( 'Block', $userText );
-               $blockLink = self::link( $blockPage, wfMsgHtml( 'blocklink' ) );
+               $blockLink = self::link( $blockPage, wfMessage( 'blocklink' )->escaped() );
                return $blockLink;
        }
 
@@ -1126,7 +1134,7 @@ class Linker {
         */
        public static function emailLink( $userId, $userText ) {
                $emailPage = SpecialPage::getTitleFor( 'Emailuser', $userText );
-               $emailLink = self::link( $emailPage, wfMsgHtml( 'emaillink' ) );
+               $emailLink = self::link( $emailPage, wfMessage( 'emaillink' )->escaped() );
                return $emailLink;
        }
 
@@ -1138,12 +1146,12 @@ class Linker {
         */
        public static function revUserLink( $rev, $isPublic = false ) {
                if ( $rev->isDeleted( Revision::DELETED_USER ) && $isPublic ) {
-                       $link = wfMsgHtml( 'rev-deleted-user' );
+                       $link = wfMessage( 'rev-deleted-user' )->escaped();
                } elseif ( $rev->userCan( Revision::DELETED_USER ) ) {
                        $link = self::userLink( $rev->getUser( Revision::FOR_THIS_USER ),
                                $rev->getUserText( Revision::FOR_THIS_USER ) );
                } else {
-                       $link = wfMsgHtml( 'rev-deleted-user' );
+                       $link = wfMessage( 'rev-deleted-user' )->escaped();
                }
                if ( $rev->isDeleted( Revision::DELETED_USER ) ) {
                        return '<span class="history-deleted">' . $link . '</span>';
@@ -1159,7 +1167,7 @@ class Linker {
         */
        public static function revUserTools( $rev, $isPublic = false ) {
                if ( $rev->isDeleted( Revision::DELETED_USER ) && $isPublic ) {
-                       $link = wfMsgHtml( 'rev-deleted-user' );
+                       $link = wfMessage( 'rev-deleted-user' )->escaped();
                } elseif ( $rev->userCan( Revision::DELETED_USER ) ) {
                        $userId = $rev->getUser( Revision::FOR_THIS_USER );
                        $userText = $rev->getUserText( Revision::FOR_THIS_USER );
@@ -1167,7 +1175,7 @@ class Linker {
                                . wfMessage( 'word-separator' )->plain()
                                . self::userToolLinks( $userId, $userText );
                } else {
-                       $link = wfMsgHtml( 'rev-deleted-user' );
+                       $link = wfMessage( 'rev-deleted-user' )->escaped();
                }
                if ( $rev->isDeleted( Revision::DELETED_USER ) ) {
                        return ' <span class="history-deleted">' . $link . '</span>';
@@ -1281,11 +1289,11 @@ class Linker {
                        }
                        if ( $pre ) {
                                # written summary $presep autocomment (summary /* section */)
-                               $pre .= wfMsgExt( 'autocomment-prefix', array( 'escapenoentities', 'content' ) );
+                               $pre .= wfMessage( 'autocomment-prefix' )->inContentLanguage()->escaped();
                        }
                        if ( $post ) {
                                # autocomment $postsep written summary (/* section */ summary)
-                               $auto .= wfMsgExt( 'colon-separator', array( 'escapenoentities', 'content' ) );
+                               $auto .= wfMessage( 'colon-separator' )->inContentLanguage()->escaped();
                        }
                        $auto = '<span class="autocomment">' . $auto . '</span>';
                        $comment = $pre . $link . $wgLang->getDirMark() . '<span dir="auto">' . $auto . $post . '</span>';
@@ -1507,12 +1515,12 @@ class Linker {
                        return "";
                }
                if ( $rev->isDeleted( Revision::DELETED_COMMENT ) && $isPublic ) {
-                       $block = " <span class=\"comment\">" . wfMsgHtml( 'rev-deleted-comment' ) . "</span>";
+                       $block = " <span class=\"comment\">" . wfMessage( 'rev-deleted-comment' )->escaped() . "</span>";
                } elseif ( $rev->userCan( Revision::DELETED_COMMENT ) ) {
                        $block = self::commentBlock( $rev->getComment( Revision::FOR_THIS_USER ),
                                $rev->getTitle(), $local );
                } else {
-                       $block = " <span class=\"comment\">" . wfMsgHtml( 'rev-deleted-comment' ) . "</span>";
+                       $block = " <span class=\"comment\">" . wfMessage( 'rev-deleted-comment' )->escaped() . "</span>";
                }
                if ( $rev->isDeleted( Revision::DELETED_COMMENT ) ) {
                        return " <span class=\"history-deleted\">$block</span>";
@@ -1526,13 +1534,11 @@ class Linker {
         */
        public static function formatRevisionSize( $size ) {
                if ( $size == 0 ) {
-                       $stxt = wfMsgExt( 'historyempty', 'parsemag' );
+                       $stxt = wfMessage( 'historyempty' )->escaped();
                } else {
-                       global $wgLang;
-                       $stxt = wfMsgExt( 'nbytes', 'parsemag', $wgLang->formatNum( $size ) );
+                       $stxt = wfMessage( 'nbytes' )->numParams( $size )->escaped();
                        $stxt = wfMessage( 'parentheses' )->rawParams( $stxt )->escaped();
                }
-               $stxt = htmlspecialchars( $stxt );
                return "<span class=\"history-size\">$stxt</span>";
        }
 
@@ -1584,11 +1590,13 @@ class Linker {
         * Wraps the TOC in a table and provides the hide/collapse javascript.
         *
         * @param $toc String: html of the Table Of Contents
-        * @param $lang mixed: Language code for the toc title
+        * @param $lang String|Language|false: Language for the toc title, defaults to user language
         * @return String: full html of the TOC
         */
        public static function tocList( $toc, $lang = false ) {
-               $title = wfMsgExt( 'toc', array( 'language' => $lang, 'escape' ) );
+               $lang = wfGetLangObj( $lang );
+               $title = wfMessage( 'toc' )->inLanguage( $lang )->escaped();
+
                return
                   '<table id="toc" class="toc"><tr><td>'
                 . '<div id="toctitle"><h2>' . $title . "</h2></div>\n"
@@ -1803,11 +1811,14 @@ class Linker {
                        # Construct the HTML
                        $outText = '<div class="mw-templatesUsedExplanation">';
                        if ( $preview ) {
-                               $outText .= wfMsgExt( 'templatesusedpreview', array( 'parse' ), count( $templates ) );
+                               $outText .= wfMessage( 'templatesusedpreview' )->numParams( count( $templates ) )
+                                       ->parseAsBlock();
                        } elseif ( $section ) {
-                               $outText .= wfMsgExt( 'templatesusedsection', array( 'parse' ), count( $templates ) );
+                               $outText .= wfMessage( 'templatesusedsection' )->numParams( count( $templates ) )
+                                       ->parseAsBlock();
                        } else {
-                               $outText .= wfMsgExt( 'templatesused', array( 'parse' ), count( $templates ) );
+                               $outText .= wfMessage( 'templatesused' )->numParams( count( $templates ) )
+                                       ->parseAsBlock();
                        }
                        $outText .= "</div><ul>\n";
 
@@ -1815,23 +1826,23 @@ class Linker {
                        foreach ( $templates as $titleObj ) {
                                $r = $titleObj->getRestrictions( 'edit' );
                                if ( in_array( 'sysop', $r ) ) {
-                                       $protected = wfMsgExt( 'template-protected', array( 'parseinline' ) );
+                                       $protected = wfMessage( 'template-protected' )->parse();
                                } elseif ( in_array( 'autoconfirmed', $r ) ) {
-                                       $protected = wfMsgExt( 'template-semiprotected', array( 'parseinline' ) );
+                                       $protected = wfMessage( 'template-semiprotected' )->parse();
                                } else {
                                        $protected = '';
                                }
                                if ( $titleObj->quickUserCan( 'edit' ) ) {
                                        $editLink = self::link(
                                                $titleObj,
-                                               wfMsg( 'editlink' ),
+                                               wfMessage( 'editlink' )->text(),
                                                array(),
                                                array( 'action' => 'edit' )
                                        );
                                } else {
                                        $editLink = self::link(
                                                $titleObj,
-                                               wfMsg( 'viewsourcelink' ),
+                                               wfMessage( 'viewsourcelink' )->text(),
                                                array(),
                                                array( 'action' => 'edit' )
                                        );
@@ -1852,14 +1863,13 @@ class Linker {
         * @return String: HTML output
         */
        public static function formatHiddenCategories( $hiddencats ) {
-               global $wgLang;
                wfProfileIn( __METHOD__ );
 
                $outText = '';
                if ( count( $hiddencats ) > 0 ) {
                        # Construct the HTML
                        $outText = '<div class="mw-hiddenCategoriesExplanation">';
-                       $outText .= wfMsgExt( 'hiddencategories', array( 'parse' ), $wgLang->formatnum( count( $hiddencats ) ) );
+                       $outText .= wfMessage( 'hiddencategories' )->numParams( count( $hiddencats ) )->parseAsBlock();
                        $outText .= "</div><ul>\n";
 
                        foreach ( $hiddencats as $titleObj ) {
@@ -2019,7 +2029,8 @@ class Linker {
         */
        public static function revDeleteLink( $query = array(), $restricted = false, $delete = true ) {
                $sp = SpecialPage::getTitleFor( 'Revisiondelete' );
-               $html = $delete ? wfMsgHtml( 'rev-delundel' ) : wfMsgHtml( 'rev-showdeleted' );
+               $msgKey = $delete ? 'rev-delundel' : 'rev-showdeleted';
+               $html = wfMessage( $msgKey )->escaped();
                $tag = $restricted ? 'strong' : 'span';
                $link = self::link( $sp, $html, array(), $query, array( 'known', 'noclasses' ) );
                return Xml::tags( $tag, array( 'class' => 'mw-revdelundel-link' ), wfMessage( 'parentheses' )->rawParams( $link )->escaped() );
@@ -2034,8 +2045,10 @@ class Linker {
         * of appearance with CSS
         */
        public static function revDeleteLinkDisabled( $delete = true ) {
-               $html = $delete ? wfMsgHtml( 'rev-delundel' ) : wfMsgHtml( 'rev-showdeleted' );
-               return Xml::tags( 'span', array( 'class' => 'mw-revdelundel-link' ), wfMessage( 'parentheses' )->rawParams( $html )->escaped() );
+               $msgKey = $delete ? 'rev-delundel' : 'rev-showdeleted';
+               $html = wfMessage( $msgKey )->escaped();
+               $htmlParentheses = wfMessage( 'parentheses' )->rawParams( $html )->escaped();
+               return Xml::tags( 'span', array( 'class' => 'mw-revdelundel-link' ), $htmlParentheses );
        }
 
        /* Deprecated methods */
index 1d0bcf7..87db4d6 100644 (file)
@@ -51,7 +51,7 @@ class LinksUpdate extends SqlDataUpdate {
         * @param $recursive Boolean: queue jobs for recursive updates?
         */
        function __construct( $title, $parserOutput, $recursive = true ) {
-               parent::__construct( );
+               parent::__construct( false ); // no implicit transaction
 
                if ( !( $title instanceof Title ) ) {
                        throw new MWException( "The calling convention to LinksUpdate::LinksUpdate() has changed. " .
@@ -825,7 +825,7 @@ class LinksDeletionUpdate extends SqlDataUpdate {
         * @param $page WikiPage Page we are updating
         */
        function __construct( WikiPage $page ) {
-               parent::__construct( );
+               parent::__construct( false ); // no implicit transaction
 
                $this->mPage = $page;
        }
index 9ce26d0..d8e5d3a 100644 (file)
@@ -110,7 +110,7 @@ class LocalisationCache {
                'dateFormats', 'datePreferences', 'datePreferenceMigrationMap',
                'defaultDateFormat', 'extraUserToggles', 'specialPageAliases',
                'imageFiles', 'preloadedMessages', 'namespaceGenderAliases',
-               'digitGroupingPattern'
+               'digitGroupingPattern', 'pluralRules', 'compiledPluralRules',
        );
 
        /**
@@ -118,7 +118,7 @@ class LocalisationCache {
         * by a fallback sequence.
         */
        static public $mergeableMapKeys = array( 'messages', 'namespaceNames',
-               'dateFormats', 'imageFiles', 'preloadedMessages',
+               'dateFormats', 'imageFiles', 'preloadedMessages'
        );
 
        /**
@@ -154,6 +154,12 @@ class LocalisationCache {
         */
        static public $preloadedKeys = array( 'dateFormats', 'namespaceNames' );
 
+       /**
+        * Associative array of cached plural rules. The key is the language code,
+        * the value is an array of plural rules for that language.
+        */
+       var $pluralRules = null;
+
        var $mergeableKeys = null;
 
        /**
@@ -234,9 +240,9 @@ class LocalisationCache {
         */
        public function getItem( $code, $key ) {
                if ( !isset( $this->loadedItems[$code][$key] ) ) {
-                       wfProfileIn( __METHOD__.'-load' );
+                       wfProfileIn( __METHOD__ . '-load' );
                        $this->loadItem( $code, $key );
-                       wfProfileOut( __METHOD__.'-load' );
+                       wfProfileOut( __METHOD__ . '-load' );
                }
 
                if ( $key === 'fallback' && isset( $this->shallowFallbacks[$code] ) ) {
@@ -256,9 +262,9 @@ class LocalisationCache {
        public function getSubitem( $code, $key, $subkey ) {
                if ( !isset( $this->loadedSubitems[$code][$key][$subkey] ) &&
                         !isset( $this->loadedItems[$code][$key] ) ) {
-                       wfProfileIn( __METHOD__.'-load' );
+                       wfProfileIn( __METHOD__ . '-load' );
                        $this->loadSubitem( $code, $key, $subkey );
-                       wfProfileOut( __METHOD__.'-load' );
+                       wfProfileOut( __METHOD__ . '-load' );
                }
 
                if ( isset( $this->data[$code][$key][$subkey] ) ) {
@@ -367,7 +373,7 @@ class LocalisationCache {
         */
        public function isExpired( $code ) {
                if ( $this->forceRecache && !isset( $this->recachedLangs[$code] ) ) {
-                       wfDebug( __METHOD__."($code): forced reload\n" );
+                       wfDebug( __METHOD__ . "($code): forced reload\n" );
                        return true;
                }
 
@@ -376,7 +382,7 @@ class LocalisationCache {
                $preload = $this->store->get( $code, 'preload' );
                // Different keys may expire separately, at least in LCStore_Accel
                if ( $deps === null || $keys === null || $preload === null ) {
-                       wfDebug( __METHOD__."($code): cache missing, need to make one\n" );
+                       wfDebug( __METHOD__ . "($code): cache missing, need to make one\n" );
                        return true;
                }
 
@@ -386,7 +392,7 @@ class LocalisationCache {
                        // anymore (e.g. uninstalled extensions)
                        // When this happens, always expire the cache
                        if ( !$dep instanceof CacheDependency || $dep->isExpired() ) {
-                               wfDebug( __METHOD__."($code): cache for $code expired due to " .
+                               wfDebug( __METHOD__ . "($code): cache for $code expired due to " .
                                        get_class( $dep ) . "\n" );
                                return true;
                        }
@@ -481,9 +487,95 @@ class LocalisationCache {
                } elseif ( $_fileType == 'aliases' ) {
                        $data = compact( 'aliases' );
                } else {
-                       throw new MWException( __METHOD__.": Invalid file type: $_fileType" );
+                       throw new MWException( __METHOD__ . ": Invalid file type: $_fileType" );
+               }
+               return $data;
+       }
+
+       /**
+        * Get the compiled plural rules for a given language from the XML files.
+        * @since 1.20
+        */
+       public function getCompiledPluralRules( $code ) {
+               $rules = $this->getPluralRules( $code );
+               if ( $rules === null ) {
+                       return null;
+               }
+               try {
+                       $compiledRules = CLDRPluralRuleEvaluator::compile( $rules );
+               } catch( CLDRPluralRuleError $e ) {
+                       wfDebugLog( 'l10n', $e->getMessage() . "\n" );
+                       return array();
+               }
+               return $compiledRules;
+       }
+
+       /**
+        * Get the plural rules for a given language from the XML files.
+        * Cached.
+        * @since 1.20
+        */
+       public function getPluralRules( $code ) {
+               if ( $this->pluralRules === null ) {
+                       $cldrPlural = __DIR__ . "/../languages/data/plurals.xml";
+                       $mwPlural = __DIR__ . "/../languages/data/plurals-mediawiki.xml";
+                       // Load CLDR plural rules
+                       $this->loadPluralFile( $cldrPlural );
+                       if ( file_exists( $mwPlural ) ) {
+                               // Override or extend
+                               $this->loadPluralFile( $mwPlural );
+                       }
+               }
+               if ( !isset( $this->pluralRules[$code] ) ) {
+                       return null;
+               } else {
+                       return $this->pluralRules[$code];
+               }
+       }
+
+
+       /**
+        * Load a plural XML file with the given filename, compile the relevant
+        * rules, and save the compiled rules in a process-local cache.
+        */
+       protected function loadPluralFile( $fileName ) {
+               $doc = new DOMDocument;
+               $doc->load( $fileName );
+               $rulesets = $doc->getElementsByTagName( "pluralRules" );
+               foreach ( $rulesets as $ruleset ) {
+                       $codes = $ruleset->getAttribute( 'locales' );
+                       $rules = array();
+                       $ruleElements = $ruleset->getElementsByTagName( "pluralRule" );
+                       foreach ( $ruleElements as $elt ) {
+                               $rules[] = $elt->nodeValue;
+                       }
+                       foreach ( explode( ' ', $codes ) as $code ) {
+                               $this->pluralRules[$code] = $rules;
+                       }
+               }
+       }
+
+       /**
+        * Read the data from the source files for a given language, and register
+        * the relevant dependencies in the $deps array. If the localisation
+        * exists, the data array is returned, otherwise false is returned.
+        */
+       protected function readSourceFilesAndRegisterDeps( $code, &$deps ) {
+               $fileName = Language::getMessagesFileName( $code );
+               if ( !file_exists( $fileName ) ) {
+                       return false;
                }
 
+               $deps[] = new FileDependency( $fileName );
+               $data = $this->readPHPFile( $fileName, 'core' );
+
+               # Load CLDR plural rules for JavaScript
+               $data['pluralRules'] = $this->getPluralRules( $code );
+               # And for PHP
+               $data['compiledPluralRules'] = $this->getCompiledPluralRules( $code );
+
+               $deps['plurals'] = new FileDependency( __DIR__ . "/../languages/data/plurals.xml" );
+               $deps['plurals-mw'] = new FileDependency( __DIR__ . "/../languages/data/plurals-mediawiki.xml" );
                return $data;
        }
 
@@ -585,14 +677,12 @@ class LocalisationCache {
                $deps = array();
 
                # Load the primary localisation from the source file
-               $fileName = Language::getMessagesFileName( $code );
-               if ( !file_exists( $fileName ) ) {
-                       wfDebug( __METHOD__.": no localisation file for $code, using fallback to en\n" );
+               $data = $this->readSourceFilesAndRegisterDeps( $code, $deps );
+               if ( $data === false ) {
+                       wfDebug( __METHOD__ . ": no localisation file for $code, using fallback to en\n" );
                        $coreData['fallback'] = 'en';
                } else {
-                       $deps[] = new FileDependency( $fileName );
-                       $data = $this->readPHPFile( $fileName, 'core' );
-                       wfDebug( __METHOD__.": got localisation for $code from source\n" );
+                       wfDebug( __METHOD__ . ": got localisation for $code from source\n" );
 
                        # Merge primary localisation
                        foreach ( $data as $key => $value ) {
@@ -605,7 +695,6 @@ class LocalisationCache {
                if ( is_null( $coreData['fallback'] ) ) {
                        $coreData['fallback'] = $code === 'en' ? false : 'en';
                }
-
                if ( $coreData['fallback'] === false ) {
                        $coreData['fallbackSequence'] = array();
                } else {
@@ -621,15 +710,11 @@ class LocalisationCache {
                        foreach ( $coreData['fallbackSequence'] as $fbCode ) {
                                # Load the secondary localisation from the source file to
                                # avoid infinite cycles on cyclic fallbacks
-                               $fbFilename = Language::getMessagesFileName( $fbCode );
-
-                               if ( !file_exists( $fbFilename ) ) {
+                               $fbData = $this->readSourceFilesAndRegisterDeps( $fbCode, $deps );
+                               if ( $fbData === false ) {
                                        continue;
                                }
 
-                               $deps[] = new FileDependency( $fbFilename );
-                               $fbData = $this->readPHPFile( $fbFilename, 'core' );
-
                                foreach ( self::$allKeys as $key ) {
                                        if ( !isset( $fbData[$key] ) ) {
                                                continue;
@@ -654,7 +739,7 @@ class LocalisationCache {
                        $used = false;
 
                        foreach ( $data as $key => $item ) {
-                               if( $this->mergeExtensionItem( $codeSequence, $key, $allData[$key], $item ) ) {
+                               if ( $this->mergeExtensionItem( $codeSequence, $key, $allData[$key], $item ) ) {
                                        $used = true;
                                }
                        }
@@ -684,19 +769,26 @@ class LocalisationCache {
                        $page = str_replace( ' ', '_', $page );
                }
                # Decouple the reference to prevent accidental damage
-               unset($page);
+               unset( $page );
+
+               # If there were no plural rules, return an empty array
+               if ( $allData['pluralRules'] === null ) {
+                       $allData['pluralRules'] = array();
+               }
+               if ( $allData['compiledPluralRules'] === null ) {
+                       $allData['compiledPluralRules'] = array();
+               }
 
                # Set the list keys
                $allData['list'] = array();
                foreach ( self::$splitKeys as $key ) {
                        $allData['list'][$key] = array_keys( $allData[$key] );
                }
-
                # Run hooks
                wfRunHooks( 'LocalisationCacheRecache', array( $this, $code, &$allData ) );
 
                if ( is_null( $allData['namespaceNames'] ) ) {
-                       throw new MWException( __METHOD__.': Localisation data failed sanity check! ' .
+                       throw new MWException( __METHOD__ . ': Localisation data failed sanity check! ' .
                                'Check that your languages/messages/MessagesEn.php file is intact.' );
                }
 
@@ -924,7 +1016,7 @@ class LCStore_DB implements LCStore {
                }
 
                if ( !$code ) {
-                       throw new MWException( __METHOD__.": Invalid language \"$code\"" );
+                       throw new MWException( __METHOD__ . ": Invalid language \"$code\"" );
                }
 
                $this->dbw = wfGetDB( DB_MASTER );
@@ -968,7 +1060,7 @@ class LCStore_DB implements LCStore {
                }
 
                if ( is_null( $this->currentLang ) ) {
-                       throw new MWException( __CLASS__.': must call startWrite() before calling set()' );
+                       throw new MWException( __CLASS__ . ': must call startWrite() before calling set()' );
                }
 
                $this->batch[] = array(
@@ -1040,7 +1132,7 @@ class LCStore_CDB implements LCStore {
                }
 
                // Close reader to stop permission errors on write
-               if( !empty($this->readers[$code]) ) {
+               if ( !empty( $this->readers[$code] ) ) {
                        $this->readers[$code]->close();
                }
 
@@ -1058,14 +1150,14 @@ class LCStore_CDB implements LCStore {
 
        public function set( $key, $value ) {
                if ( is_null( $this->writer ) ) {
-                       throw new MWException( __CLASS__.': must call startWrite() before calling set()' );
+                       throw new MWException( __CLASS__ . ': must call startWrite() before calling set()' );
                }
                $this->writer->set( $key, serialize( $value ) );
        }
 
        protected function getFileName( $code ) {
                if ( !$code || strpos( $code, '/' ) !== false ) {
-                       throw new MWException( __METHOD__.": Invalid language \"$code\"" );
+                       throw new MWException( __METHOD__ . ": Invalid language \"$code\"" );
                }
                return "{$this->directory}/l10n_cache-$code.cdb";
        }
@@ -1181,8 +1273,9 @@ class LocalisationCache_BulkLoad extends LocalisationCache {
                while ( count( $this->data ) > $this->maxLoadedLangs && count( $this->mruLangs ) ) {
                        reset( $this->mruLangs );
                        $code = key( $this->mruLangs );
-                       wfDebug( __METHOD__.": unloading $code\n" );
+                       wfDebug( __METHOD__ . ": unloading $code\n" );
                        $this->unload( $code );
                }
        }
+
 }
index f559d30..776a52f 100644 (file)
@@ -209,6 +209,7 @@ class Message {
 
        /**
         * Constructor.
+        * @since 1.17
         * @param $key: message key, or array of message keys to try and use the first non-empty message for
         * @param $params Array message parameters
         * @return Message: $this
@@ -224,6 +225,7 @@ class Message {
         * 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.
+        * @since 1.17
         * @param $key String: message key
         * @param Varargs: parameters as Strings
         * @return Message: $this
@@ -238,6 +240,7 @@ class Message {
         * Factory function accepting multiple message keys and returning a message instance
         * for the first message which is non-empty. If all messages are empty then an
         * instance of the first message key is returned.
+        * @since 1.18
         * @param Varargs: message keys (or first arg as an array of all the message keys)
         * @return Message: $this
         */
@@ -257,6 +260,7 @@ class Message {
 
        /**
         * Adds parameters to the parameter list of this message.
+        * @since 1.17
         * @param Varargs: parameters as Strings, or a single argument that is an array of Strings
         * @return Message: $this
         */
@@ -275,6 +279,7 @@ class Message {
         * 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.
+        * @since 1.17
         * @param Varargs: raw parameters as Strings (or single argument that is an array of raw parameters)
         * @return Message: $this
         */
@@ -292,6 +297,7 @@ class Message {
        /**
         * Add parameters that are numeric and will be passed through
         * Language::formatNum before substitution
+        * @since 1.18
         * @param Varargs: numeric parameters (or single argument that is array of numeric parameters)
         * @return Message: $this
         */
@@ -308,7 +314,7 @@ class Message {
 
        /**
         * Set the language and the title from a context object
-        *
+        * @since 1.19
         * @param $context IContextSource
         * @return Message: $this
         */
@@ -378,6 +384,7 @@ class Message {
 
        /**
         * Enable or disable database use.
+        * @since 1.17
         * @param $value Boolean
         * @return Message: $this
         */
@@ -388,7 +395,7 @@ class Message {
 
        /**
         * Set the Title object to use as context when transforming the message
-        *
+        * @since 1.18
         * @param $title Title object
         * @return Message: $this
         */
@@ -399,6 +406,7 @@ class Message {
 
        /**
         * Returns the message parsed from wikitext to HTML.
+        * @since 1.17
         * @return String: HTML
         */
        public function toString() {
@@ -441,6 +449,7 @@ class Message {
         * Magic method implementation of the above (for PHP >= 5.2.0), so we can do, eg:
         *     $foo = Message::get($key);
         *     $string = "<abbr>$foo</abbr>";
+        * @since 1.18
         * @return String
         */
        public function __toString() {
@@ -449,6 +458,7 @@ class Message {
 
        /**
         * Fully parse the text from wikitext to HTML
+        * @since 1.17
         * @return String parsed HTML
         */
        public function parse() {
@@ -458,6 +468,7 @@ class Message {
 
        /**
         * Returns the message text. {{-transformation is done.
+        * @since 1.17
         * @return String: Unescaped message text.
         */
        public function text() {
@@ -467,6 +478,7 @@ class Message {
 
        /**
         * Returns the message text as-is, only parameters are subsituted.
+        * @since 1.17
         * @return String: Unescaped untransformed message text.
         */
        public function plain() {
@@ -476,6 +488,7 @@ class Message {
 
        /**
         * Returns the parsed message text which is always surrounded by a block element.
+        * @since 1.17
         * @return String: HTML
         */
        public function parseAsBlock() {
@@ -486,6 +499,7 @@ class Message {
        /**
         * Returns the message text. {{-transformation is done and the result
         * is escaped excluding any raw parameters.
+        * @since 1.17
         * @return String: Escaped message text.
         */
        public function escaped() {
@@ -495,6 +509,7 @@ class Message {
 
        /**
         * Check whether a message key has been defined currently.
+        * @since 1.17
         * @return Bool: true if it is and false if not.
         */
        public function exists() {
@@ -503,6 +518,7 @@ class Message {
 
        /**
         * Check whether a message does not exist, or is an empty string
+        * @since 1.18
         * @return Bool: true if is is and false if not
         * @todo FIXME: Merge with isDisabled()?
         */
@@ -513,6 +529,7 @@ class Message {
 
        /**
         * Check whether a message does not exist, is an empty string, or is "-"
+        * @since 1.18
         * @return Bool: true if is is and false if not
         */
        public function isDisabled() {
@@ -521,6 +538,7 @@ class Message {
        }
 
        /**
+        * @since 1.17
         * @param $value
         * @return array
         */
@@ -529,6 +547,7 @@ class Message {
        }
 
        /**
+        * @since 1.18
         * @param $value
         * @return array
         */
@@ -538,6 +557,7 @@ class Message {
 
        /**
         * Substitutes any paramaters into the message text.
+        * @since 1.17
         * @param $message String: the message text
         * @param $type String: either before or after
         * @return String
@@ -556,6 +576,7 @@ class Message {
 
        /**
         * Extracts the parameter type and preprocessed the value if needed.
+        * @since 1.18
         * @param $param String|Array: Parameter as defined in this class.
         * @return Tuple(type, value)
         * @throws MWException
@@ -576,6 +597,7 @@ class Message {
 
        /**
         * Wrapper for what ever method we use to parse wikitext.
+        * @since 1.17
         * @param $string String: Wikitext message contents
         * @return string Wikitext parsed into HTML
         */
@@ -585,6 +607,7 @@ class Message {
 
        /**
         * Wrapper for what ever method we use to {{-transform wikitext.
+        * @since 1.17
         * @param $string String: Wikitext message contents
         * @return string Wikitext with {{-constructs replaced with their values.
         */
@@ -594,7 +617,7 @@ class Message {
 
        /**
         * Wrapper for what ever method we use to get message contents
-        *
+        * @since 1.17
         * @return string
         */
        protected function fetchMessage() {
index 23955ae..34014e1 100644 (file)
@@ -299,7 +299,7 @@ class MessageBlobStore {
         */
        private static function reencodeBlob( $blob, $key, $lang ) {
                $decoded = FormatJson::decode( $blob, true );
-               $decoded[$key] = wfMsgExt( $key, array( 'language' => $lang ) );
+               $decoded[$key] = wfMessage( $key )->inLanguage( $lang )->plain();
 
                return FormatJson::encode( (object)$decoded );
        }
@@ -353,7 +353,7 @@ class MessageBlobStore {
                $messages = array();
 
                foreach ( $module->getMessages() as $key ) {
-                       $messages[$key] = wfMsgExt( $key, array( 'language' => $lang ) );
+                       $messages[$key] = wfMessage( $key )->inLanguage( $lang )->plain();
                }
 
                return FormatJson::encode( (object)$messages );
index 229856d..0ca1539 100644 (file)
@@ -60,7 +60,7 @@ abstract class RdfMetaData {
                global $wgLanguageCode, $wgSitename;
 
                $this->element( 'title', $this->mArticle->getTitle()->getText() );
-               $this->pageOrString( 'publisher', wfMsg( 'aboutpage' ), $wgSitename );
+               $this->pageOrString( 'publisher', wfMessage( 'aboutpage' )->text(), $wgSitename );
                $this->element( 'language', $wgLanguageCode );
                $this->element( 'type', 'Text' );
                $this->element( 'format', 'text/html' );
@@ -117,14 +117,18 @@ abstract class RdfMetaData {
 
        protected function person( $name, User $user ) {
                if( $user->isAnon() ){
-                       $this->element( $name, wfMsgExt( 'anonymous', array( 'parsemag' ), 1 ) );
+                       $this->element( $name, wfMessage( 'anonymous' )->numParams( 1 )->text() );
                } else {
                        $real = $user->getRealName();
                        if( $real ) {
                                $this->element( $name, $real );
                        } else {
                                $userName = $user->getName();
-                               $this->pageOrString( $name, $user->getUserPage(), wfMsgExt( 'siteuser', 'parsemag', $userName, $userName ) );
+                               $this->pageOrString(
+                                       $name,
+                                       $user->getUserPage(),
+                                       wfMessage( 'siteuser', $userName, $userName )->text()
+                               );
                        }
                }
        }
index e9e2b6f..b020a8e 100644 (file)
@@ -56,9 +56,9 @@ class OutputPage extends ContextSource {
        /**
         * Holds the debug lines that will be output as comments in page source if
         * $wgDebugComments is enabled. See also $wgShowDebug.
-        * TODO: make a getter method for this
+        * @deprecated since 1.20; use MWDebug class instead.
         */
-       public $mDebugtext = ''; // TODO: we might want to replace it by wfDebug() wfDebugLog()
+       public $mDebugtext = '';
 
        /// Should be private. Stores contents of "<title>" tag
        var $mHTMLtitle = '';
@@ -1314,15 +1314,6 @@ class OutputPage extends ContextSource {
                return $this->mBodytext;
        }
 
-       /**
-        * Add $text to the debug output
-        *
-        * @param $text String: debug text
-        */
-       public function debug( $text ) {
-               $this->mDebugtext .= $text;
-       }
-
        /**
         * Get/set the ParserOptions object to use for wikitext parsing
         *
@@ -2032,10 +2023,6 @@ class OutputPage extends ContextSource {
         *                   based on $pageTitle
         */
        public function prepareErrorPage( $pageTitle, $htmlTitle = false ) {
-               if ( $this->getTitle() ) {
-                       $this->mDebugtext .= 'Original title: ' . $this->getTitle()->getPrefixedText() . "\n";
-               }
-
                $this->setPageTitle( $pageTitle );
                if ( $htmlTitle !== false ) {
                        $this->setHTMLTitle( $htmlTitle );
@@ -3550,9 +3537,6 @@ $templates
         * message names, or arrays, in which case the first element is the message name,
         * and subsequent elements are the parameters to that message.
         *
-        * The special named parameter 'options' in a message specification array is passed
-        * through to the $options parameter of wfMsgExt().
-        *
         * Don't use this for messages that are not in users interface language.
         *
         * For example:
@@ -3578,14 +3562,17 @@ $templates
                                $args = $spec;
                                $name = array_shift( $args );
                                if ( isset( $args['options'] ) ) {
-                                       $options = $args['options'];
                                        unset( $args['options'] );
+                                       wfDeprecated(
+                                               'Adding "options" to ' . __METHOD__ . ' is no longer supported',
+                                               '1.20'
+                                       );
                                }
                        }  else {
                                $args = array();
                                $name = $spec;
                        }
-                       $s = str_replace( '$' . ( $n + 1 ), wfMsgExt( $name, $options, $args ), $s );
+                       $s = str_replace( '$' . ( $n + 1 ), $this->msg( $name, $args )->plain(), $s );
                }
                $this->addWikiText( $s );
        }
index caedb63..ce0e36b 100644 (file)
@@ -265,7 +265,7 @@ class ProtectionForm {
                $reasonstr = $this->mReasonSelection;
                if ( $reasonstr != 'other' && $this->mReason != '' ) {
                        // Entry from drop down menu + additional comment
-                       $reasonstr .= wfMsgForContent( 'colon-separator' ) . $this->mReason;
+                       $reasonstr .= wfMessage( 'colon-separator' )->text() . $this->mReason;
                } elseif ( $reasonstr == 'other' ) {
                        $reasonstr = $this->mReason;
                }
@@ -336,8 +336,14 @@ class ProtectionForm {
        function buildForm() {
                global $wgUser, $wgLang, $wgOut;
 
-               $mProtectreasonother = Xml::label( wfMsg( 'protectcomment' ), 'wpProtectReasonSelection' );
-               $mProtectreason = Xml::label( wfMsg( 'protect-otherreason' ), 'mwProtect-reason' );
+               $mProtectreasonother = Xml::label(
+                       wfMessage( 'protectcomment' )->text(),
+                       'wpProtectReasonSelection'
+               );
+               $mProtectreason = Xml::label(
+                       wfMessage( 'protect-otherreason' )->text(),
+                       'mwProtect-reason'
+               );
 
                $out = '';
                if( !$this->disabled ) {
@@ -348,7 +354,7 @@ class ProtectionForm {
                }
 
                $out .= Xml::openElement( 'fieldset' ) .
-                       Xml::element( 'legend', null, wfMsg( 'protect-legend' ) ) .
+                       Xml::element( 'legend', null, wfMessage( 'protect-legend' )->text() ) .
                        Xml::openElement( 'table', array( 'id' => 'mwProtectSet' ) ) .
                        Xml::openElement( 'tbody' );
 
@@ -362,16 +368,22 @@ class ProtectionForm {
                                "<tr><td>" . $this->buildSelector( $action, $selected ) . "</td></tr><tr><td>";
 
                        $reasonDropDown = Xml::listDropDown( 'wpProtectReasonSelection',
-                               wfMsgForContent( 'protect-dropdown' ),
-                               wfMsgForContent( 'protect-otherreason-op' ),
+                               wfMessage( 'protect-dropdown' )->inContentLanguage()->text(),
+                               wfMessage( 'protect-otherreason-op' )->inContentLanguage()->text(),
                                $this->mReasonSelection,
                                'mwProtect-reason', 4 );
-                       $scExpiryOptions = wfMsgForContent( 'protect-expiry-options' );
+                       $scExpiryOptions = wfMessage( 'protect-expiry-options' )->inContentLanguage()->text();
 
                        $showProtectOptions = ($scExpiryOptions !== '-' && !$this->disabled);
 
-                       $mProtectexpiry = Xml::label( wfMsg( 'protectexpiry' ), "mwProtectExpirySelection-$action" );
-                       $mProtectother = Xml::label( wfMsg( 'protect-othertime' ), "mwProtect-$action-expires" );
+                       $mProtectexpiry = Xml::label(
+                               wfMessage( 'protectexpiry' )->text(),
+                               "mwProtectExpirySelection-$action"
+                       );
+                       $mProtectother = Xml::label(
+                               wfMessage( 'protect-othertime' )->text(),
+                               "mwProtect-$action-expires"
+                       );
 
                        $expiryFormOptions = '';
                        if ( $this->mExistingExpiry[$action] && $this->mExistingExpiry[$action] != 'infinity' ) {
@@ -380,13 +392,16 @@ class ProtectionForm {
                                $t = $wgLang->time( $this->mExistingExpiry[$action], true );
                                $expiryFormOptions .=
                                        Xml::option(
-                                               wfMsg( 'protect-existing-expiry', $timestamp, $d, $t ),
+                                               wfMessage( 'protect-existing-expiry', $timestamp, $d, $t )->text(),
                                                'existing',
                                                $this->mExpirySelection[$action] == 'existing'
                                        ) . "\n";
                        }
 
-                       $expiryFormOptions .= Xml::option( wfMsg( 'protect-othertime-op' ), "othertime" ) . "\n";
+                       $expiryFormOptions .= Xml::option(
+                               wfMessage( 'protect-othertime-op' )->text(),
+                               "othertime"
+                       ) . "\n";
                        foreach( explode(',', $scExpiryOptions) as $option ) {
                                if ( strpos($option, ":") === false ) {
                                        $show = $value = $option;
@@ -444,8 +459,12 @@ class ProtectionForm {
                        $out .= '<tr>
                                        <td></td>
                                        <td class="mw-input">' .
-                                               Xml::checkLabel( wfMsg( 'protect-cascade' ), 'mwProtect-cascade', 'mwProtect-cascade',
-                                                       $this->mCascade, $this->disabledAttrib ) .
+                                               Xml::checkLabel(
+                                                       wfMessage( 'protect-cascade' )->text(),
+                                                       'mwProtect-cascade',
+                                                       'mwProtect-cascade',
+                                                       $this->mCascade, $this->disabledAttrib
+                                               ) .
                                        "</td>
                                </tr>\n";
                        $out .= Xml::closeElement( 'tbody' ) . Xml::closeElement( 'table' );
@@ -482,7 +501,7 @@ class ProtectionForm {
                                <tr>
                                        <td></td>
                                        <td class='mw-input'>" .
-                                               Xml::checkLabel( wfMsg( 'watchthis' ),
+                                               Xml::checkLabel( wfMessage( 'watchthis' )->text(),
                                                        'mwProtectWatch', 'mwProtectWatch',
                                                        $this->mTitle->userIsWatching() || $wgUser->getOption( 'watchdefault' ) ) .
                                        "</td>
@@ -492,7 +511,10 @@ class ProtectionForm {
                                <tr>
                                        <td></td>
                                        <td class='mw-submit'>" .
-                                               Xml::submitButton( wfMsg( 'confirm' ), array( 'id' => 'mw-Protect-submit' ) ) .
+                                               Xml::submitButton(
+                                                       wfMessage( 'confirm' )->text(),
+                                                       array( 'id' => 'mw-Protect-submit' )
+                                               ) .
                                        "</td>
                                </tr>\n";
                        $out .= Xml::closeElement( 'tbody' ) . Xml::closeElement( 'table' );
@@ -503,7 +525,7 @@ class ProtectionForm {
                        $title = Title::makeTitle( NS_MEDIAWIKI, 'Protect-dropdown' );
                        $link = Linker::link(
                                $title,
-                               wfMsgHtml( 'protect-edit-reasonlist' ),
+                               wfMessage( 'protect-edit-reasonlist' )->escaped(),
                                array(),
                                array( 'action' => 'edit' )
                        );
@@ -567,13 +589,13 @@ class ProtectionForm {
         */
        private function getOptionLabel( $permission ) {
                if( $permission == '' ) {
-                       return wfMsg( 'protect-default' );
+                       return wfMessage( 'protect-default' )->text();
                } else {
                        $msg = wfMessage( "protect-level-{$permission}" );
                        if( $msg->exists() ) {
                                return $msg->text();
                        }
-                       return wfMsg( 'protect-fallback', $permission );
+                       return wfMessage( 'protect-fallback', $permission )->text();
                }
        }
 
index e7ddf3c..9da031e 100644 (file)
@@ -319,7 +319,7 @@ class Revision implements IDBAccessObject {
                        self::selectUserFields()
                );
                $options = array( 'LIMIT' => 1 );
-               if ( $flags & self::READ_LOCKING ) {
+               if ( ( $flags & self::READ_LOCKING ) == self::READ_LOCKING ) {
                        $options[] = 'FOR UPDATE';
                }
                return $db->select(
index a0c77da..734c4ec 100644 (file)
@@ -1026,7 +1026,7 @@ class Sanitizer {
 
                # Stupid hack
                $encValue = preg_replace_callback(
-                       '/(' . wfUrlProtocols() . ')/',
+                       '/((?i)' . wfUrlProtocols() . ')/',
                        array( 'Sanitizer', 'armorLinksCallback' ),
                        $encValue );
                return $encValue;
index baf7b35..924c3c0 100644 (file)
@@ -332,9 +332,6 @@ if ( !$wgEnotifMinorEdits ) {
 foreach( $wgDisabledActions as $action ){
        $wgActions[$action] = false;
 }
-if( !$wgAllowPageInfo ){
-       $wgActions['info'] = false;
-}
 
 if ( !$wgHtml5Version && $wgHtml5 && $wgAllowRdfaAttributes ) {
        # see http://www.w3.org/TR/rdfa-in-html/#document-conformance
index 7f3f655..1c2c454 100644 (file)
@@ -347,8 +347,8 @@ class SiteStatsUpdate implements DeferrableUpdate {
                        array(
                                'rc_user != 0',
                                'rc_bot' => 0,
-                               "rc_log_type != 'newusers' OR rc_log_type IS NULL",
-                               "rc_timestamp >= '{$dbw->timestamp( wfTimestamp( TS_UNIX ) - $wgActiveUserDays*24*3600 )}'",
+                               'rc_log_type != ' . $dbr->addQuotes( 'newusers' ) . ' OR rc_log_type IS NULL',
+                               'rc_timestamp >= ' . $dbr->addQuotes( $dbr->timestamp( wfTimestamp( TS_UNIX ) - $wgActiveUserDays*24*3600 ) ),
                        ),
                        __METHOD__
                );
index 3db4cf9..968f215 100644 (file)
@@ -437,7 +437,7 @@ abstract class Skin extends ContextSource {
                if ( !empty( $allCats['normal'] ) ) {
                        $t = $embed . implode( "{$pop}{$embed}" , $allCats['normal'] ) . $pop;
 
-                       $msg = $this->msg( 'pagecategories', count( $allCats['normal'] ) )->escaped();
+                       $msg = $this->msg( 'pagecategories' )->numParams( count( $allCats['normal'] ) )->escaped();
                        $linkPage = wfMessage( 'pagecategorieslink' )->inContentLanguage()->text();
                        $s .= '<div id="mw-normal-catlinks" class="mw-normal-catlinks">' .
                                Linker::link( Title::newFromText( $linkPage ), $msg )
@@ -455,7 +455,7 @@ abstract class Skin extends ContextSource {
                        }
 
                        $s .= "<div id=\"mw-hidden-catlinks\" class=\"mw-hidden-catlinks$class\">" .
-                               $this->msg( 'hidden-categories', count( $allCats['hidden'] ) )->escaped() .
+                               $this->msg( 'hidden-categories' )->numParams( count( $allCats['hidden'] ) )->escaped() .
                                $colon . '<ul>' . $embed . implode( "{$pop}{$embed}" , $allCats['hidden'] ) . $pop . '</ul>' .
                                '</div>';
                }
@@ -568,71 +568,7 @@ abstract class Skin extends ContextSource {
         * @return String HTML containing debug data, if enabled (otherwise empty).
         */
        protected function generateDebugHTML() {
-               global $wgShowDebug;
-
-               $html = MWDebug::getDebugHTML( $this->getContext() );
-
-               if ( $wgShowDebug ) {
-                       $listInternals = $this->formatDebugHTML( $this->getOutput()->mDebugtext );
-                       $html .= "\n<hr />\n<strong>Debug data:</strong><ul id=\"mw-debug-html\">" .
-                               $listInternals . "</ul>\n";
-               }
-
-               return $html;
-       }
-
-       /**
-        * @param $debugText string
-        * @return string
-        */
-       private function formatDebugHTML( $debugText ) {
-               global $wgDebugTimestamps;
-
-               $lines = explode( "\n", $debugText );
-               $curIdent = 0;
-               $ret = '<li>';
-
-               foreach ( $lines as $line ) {
-                       $pre = '';
-                       if ( $wgDebugTimestamps ) {
-                               $matches = array();
-                               if ( preg_match( '/^(\d+\.\d+ {1,3}\d+.\dM\s{2})/', $line, $matches ) ) {
-                                       $pre = $matches[1];
-                                       $line = substr( $line, strlen( $pre ) );
-                               }
-                       }
-                       $display = ltrim( $line );
-                       $ident = strlen( $line ) - strlen( $display );
-                       $diff = $ident - $curIdent;
-
-                       $display = $pre . $display;
-                       if ( $display == '' ) {
-                               $display = "\xc2\xa0";
-                       }
-
-                       if ( !$ident && $diff < 0 && substr( $display, 0, 9 ) != 'Entering ' && substr( $display, 0, 8 ) != 'Exiting ' ) {
-                               $ident = $curIdent;
-                               $diff = 0;
-                               $display = '<span style="background:yellow;">' . htmlspecialchars( $display ) . '</span>';
-                       } else {
-                               $display = htmlspecialchars( $display );
-                       }
-
-                       if ( $diff < 0 ) {
-                               $ret .= str_repeat( "</li></ul>\n", -$diff ) . "</li><li>\n";
-                       } elseif ( $diff == 0 ) {
-                               $ret .= "</li><li>\n";
-                       } else {
-                               $ret .= str_repeat( "<ul><li>\n", $diff );
-                       }
-                       $ret .= "<tt>$display</tt>\n";
-
-                       $curIdent = $ident;
-               }
-
-               $ret .= str_repeat( '</li></ul>', $curIdent ) . '</li>';
-
-               return $ret;
+               return MWDebug::getHTMLDebugLog();
        }
 
        /**
@@ -899,7 +835,7 @@ abstract class Skin extends ContextSource {
         */
        function logoText( $align = '' ) {
                if ( $align != '' ) {
-                       $a = " align='{$align}'";
+                       $a = " style='float: {$align};'";
                } else {
                        $a = '';
                }
@@ -1103,7 +1039,7 @@ abstract class Skin extends ContextSource {
         * @return String
         */
        static function makeI18nUrl( $name, $urlaction = '' ) {
-               $title = Title::newFromText( wfMsgForContent( $name ) );
+               $title = Title::newFromText( wfMessage( $name )->inContentLanguage()->text() );
                self::checkTitle( $title, $name );
                return $title->getLocalURL( $urlaction );
        }
@@ -1127,7 +1063,7 @@ abstract class Skin extends ContextSource {
         * @return String URL
         */
        static function makeInternalOrExternalUrl( $name ) {
-               if ( preg_match( '/^(?:' . wfUrlProtocols() . ')/', $name ) ) {
+               if ( preg_match( '/^(?i:' . wfUrlProtocols() . ')/', $name ) ) {
                        return $name;
                } else {
                        return self::makeUrl( $name );
@@ -1235,7 +1171,7 @@ abstract class Skin extends ContextSource {
         * @param $message String
         */
        function addToSidebar( &$bar, $message ) {
-               $this->addToSidebarPlain( $bar, wfMsgForContentNoTrans( $message ) );
+               $this->addToSidebarPlain( $bar, wfMessage( $message )->inContentLanguage()->plain() );
        }
 
        /**
@@ -1291,7 +1227,7 @@ abstract class Skin extends ContextSource {
                                                $text = $line[1];
                                        }
 
-                                       if ( preg_match( '/^(?:' . wfUrlProtocols() . ')/', $link ) ) {
+                                       if ( preg_match( '/^(?i:' . wfUrlProtocols() . ')/', $link ) ) {
                                                $href = $link;
 
                                                // Parser::getExternalLinkAttribs won't work here because of the Namespace things
@@ -1352,18 +1288,19 @@ abstract class Skin extends ContextSource {
                $ntl = '';
 
                if ( count( $newtalks ) == 1 && $newtalks[0]['wiki'] === wfWikiID() ) {
-                       $userTalkTitle = $this->getUser()->getTalkPage();
+                       $uTalkTitle = $this->getUser()->getTalkPage();
 
-                       if ( !$userTalkTitle->equals( $out->getTitle() ) ) {
+                       if ( !$uTalkTitle->equals( $out->getTitle() ) ) {
                                $lastSeenRev = isset( $newtalks[0]['rev'] ) ? $newtalks[0]['rev'] : null;
                                $nofAuthors = 0;
                                if ( $lastSeenRev !== null ) {
                                        $plural = true; // Default if we have a last seen revision: if unknown, use plural
-                                       $latestRev = Revision::newFromTitle ($userTalkTitle);
+                                       $latestRev = Revision::newFromTitle( $uTalkTitle, false, Revision::READ_NORMAL );
                                        if ( $latestRev !== null ) {
-                                               // Singular if only 1 unseen revision, plural if several unseen revisions.\r
-                                               $plural = $latestRev->getParentId() !== $lastSeenRev->getId();\r
-                                               $nofAuthors = $userTalkTitle->countAuthorsBetween( $lastSeenRev, $latestRev, 10, 'include_new' );
+                                               // Singular if only 1 unseen revision, plural if several unseen revisions.
+                                               $plural = $latestRev->getParentId() !== $lastSeenRev->getId();
+                                               $nofAuthors = $uTalkTitle->countAuthorsBetween(
+                                                       $lastSeenRev, $latestRev, 10, 'include_new' );
                                        }
                                } else {
                                        // Singular if no revision -> diff link will show latest change only in any case
@@ -1374,14 +1311,14 @@ abstract class Skin extends ContextSource {
                                // the number of revisions or authors is not necessarily the same as the number of
                                // "messages".
                                $newMessagesLink = Linker::linkKnown(
-                                       $userTalkTitle,
+                                       $uTalkTitle,
                                        $this->msg( 'newmessageslinkplural' )->params( $plural )->escaped(),
                                        array(),
                                        array( 'redirect' => 'no' )
                                );
 
                                $newMessagesDiffLink = Linker::linkKnown(
-                                       $userTalkTitle,
+                                       $uTalkTitle,
                                        $this->msg( 'newmessagesdifflinkplural' )->params( $plural )->escaped(),
                                        array(),
                                        $lastSeenRev !== null
@@ -1547,13 +1484,17 @@ abstract class Skin extends ContextSource {
        public function doEditSectionLink( Title $nt, $section, $tooltip = null, $lang = false ) {
                // HTML generated here should probably have userlangattributes
                // added to it for LTR text on RTL pages
+
+               $lang = wfGetLangObj( $lang );
+
                $attribs = array();
                if ( !is_null( $tooltip ) ) {
                        # Bug 25462: undo double-escaping.
                        $tooltip = Sanitizer::decodeCharReferences( $tooltip );
-                       $attribs['title'] = wfMsgExt( 'editsectionhint', array( 'language' => $lang, 'parsemag', 'replaceafter' ), $tooltip );
+                       $attribs['title'] = wfMessage( 'editsectionhint' )->rawParams( $tooltip )
+                               ->inLanguage( $lang )->text();
                }
-               $link = Linker::link( $nt, wfMsgExt( 'editsection', array( 'language' => $lang ) ),
+               $link = Linker::link( $nt, wfMessage( 'editsection' )->inLanguage( $lang )->text(),
                        $attribs,
                        array( 'action' => 'edit', 'section' => $section ),
                        array( 'noclasses', 'known' )
@@ -1563,7 +1504,8 @@ abstract class Skin extends ContextSource {
                # we can rid of it someday.
                $attribs = '';
                if ( $tooltip ) {
-                       $attribs = wfMsgExt( 'editsectionhint', array( 'language' => $lang, 'parsemag', 'escape', 'replaceafter' ), $tooltip );
+                       $attribs = wfMessage( 'editsectionhint' )->rawParams( $tooltip )
+                               ->inLanguage( $lang )->escaped();
                        $attribs = " title=\"$attribs\"";
                }
                $result = null;
@@ -1573,13 +1515,15 @@ abstract class Skin extends ContextSource {
                        # run, and even add them to hook-provided text.  (This is the main
                        # reason that the EditSectionLink hook is deprecated in favor of
                        # DoEditSectionLink: it can't change the brackets or the span.)
-                       $result = wfMsgExt( 'editsection-brackets', array( 'escape', 'replaceafter', 'language' => $lang ), $result );
+                       $result = wfMessage( 'editsection-brackets' )->rawParams( $result )
+                               ->inLanguage( $lang )->escaped();
                        return "<span class=\"editsection\">$result</span>";
                }
 
                # Add the brackets and the span, and *then* run the nice new hook, with
                # clean and non-redundant arguments.
-               $result = wfMsgExt( 'editsection-brackets', array( 'escape', 'replaceafter', 'language' => $lang ), $link );
+               $result = wfMessage( 'editsection-brackets' )->rawParams( $link )
+                       ->inLanguage( $lang )->escaped();
                $result = "<span class=\"editsection\">$result</span>";
 
                wfRunHooks( 'DoEditSectionLink', array( $this, $nt, $section, $tooltip, &$result, $lang ) );
index 4a1c699..1ae1cb3 100644 (file)
@@ -123,18 +123,18 @@ class LegacyTemplate extends BaseTemplate {
                  "<table border='0' cellspacing='0' width='100%'>\n<tr>\n";
 
                if ( $this->getSkin()->qbSetting() == 0 ) {
-                       $s .= "<td class='top' align='left' valign='top' rowspan='{$rows}'>\n" .
+                       $s .= "<td class='top' style='text-align: left; vertical-align: top;' rowspan='{$rows}'>\n" .
                                $this->getSkin()->logoText( $wgLang->alignStart() ) . '</td>';
                }
 
                $l = $wgLang->alignStart();
-               $s .= "<td {$borderhack} align='$l' valign='top'>\n";
+               $s .= "<td {$borderhack} style='text-align: $l; vertical-align: top;'>\n";
 
                $s .= $this->topLinks();
                $s .= '<p class="subtitle">' . $this->pageTitleLinks() . "</p>\n";
 
                $r = $wgLang->alignEnd();
-               $s .= "</td>\n<td {$borderhack} valign='top' align='$r' nowrap='nowrap'>";
+               $s .= "</td>\n<td {$borderhack} style='text-align: $r; vertical-align: top;' nowrap='nowrap'>";
                $s .= $this->nameAndLogin();
                $s .= "\n<br />" . $this->searchForm() . '</td>';
 
@@ -182,12 +182,12 @@ class LegacyTemplate extends BaseTemplate {
                  . $this->getSkin()->escapeSearchLink() . "\">\n"
                  . '<input type="text" id="searchInput' . $this->searchboxes . '" name="search" size="19" value="'
                  . htmlspecialchars( substr( $search, 0, 256 ) ) . "\" />\n"
-                 . '<input type="submit" name="go" value="' . wfMsg( 'searcharticle' ) . '" />';
+                 . '<input type="submit" name="go" value="' . wfMessage( 'searcharticle' )->text() . '" />';
 
                if ( $wgUseTwoButtonsSearchForm ) {
-                       $s .= '&#160;<input type="submit" name="fulltext" value="' . wfMsg( 'searchbutton' ) . "\" />\n";
+                       $s .= '&#160;<input type="submit" name="fulltext" value="' . wfMessage( 'searchbutton' )->text() . "\" />\n";
                } else {
-                       $s .= ' <a href="' . $this->getSkin()->escapeSearchLink() . '" rel="search">' . wfMsg( 'powersearch-legend' ) . "</a>\n";
+                       $s .= ' <a href="' . $this->getSkin()->escapeSearchLink() . '" rel="search">' . wfMessage( 'powersearch-legend' )->text() . "</a>\n";
                }
 
                $s .= '</form>';
@@ -236,7 +236,7 @@ class LegacyTemplate extends BaseTemplate {
                }
 
                // @todo FIXME: Is using Language::pipeList impossible here? Do not quite understand the use of the newline
-               return implode( $s, wfMsgExt( 'pipe-separator', 'escapenoentities' ) . "\n" );
+               return implode( $s, wfMessage( 'pipe-separator' )->escaped() . "\n" );
        }
 
        /**
@@ -292,7 +292,7 @@ class LegacyTemplate extends BaseTemplate {
                if ( count( $s ) ) {
                        global $wgLang;
 
-                       $out = wfMsgExt( 'pipe-separator' , 'escapenoentities' );
+                       $out = wfMessage( 'pipe-separator' )->escaped();
                        $out .= $wgLang->pipeList( $s );
                }
 
@@ -301,7 +301,7 @@ class LegacyTemplate extends BaseTemplate {
 
        function bottomLinks() {
                global $wgOut, $wgUser;
-               $sep = wfMsgExt( 'pipe-separator', 'escapenoentities' ) . "\n";
+               $sep = wfMessage( 'pipe-separator' )->escaped() . "\n";
 
                $s = '';
                if ( $wgOut->isArticleRelated() ) {
@@ -373,7 +373,7 @@ class LegacyTemplate extends BaseTemplate {
                        return '';
                }
 
-               $s = wfMsg( 'otherlanguages' ) . wfMsg( 'colon-separator' );
+               $s = wfMessage( 'otherlanguages' )->text() . wfMessage( 'colon-separator' )->text();
                $first = true;
 
                if ( $wgLang->isRTL() ) {
@@ -382,7 +382,7 @@ class LegacyTemplate extends BaseTemplate {
 
                foreach ( $a as $l ) {
                        if ( !$first ) {
-                               $s .= wfMsgExt( 'pipe-separator', 'escapenoentities' );
+                               $s .= wfMessage( 'pipe-separator' )->escaped();
                        }
 
                        $first = false;
@@ -417,8 +417,9 @@ class LegacyTemplate extends BaseTemplate {
                                $obj->getTitle()->getPrefixedDBkey() );
                }
 
-               return Html::rawElement( 'form', array( 'id' => 'specialpages', 'method' => 'get',
-                       'action' => $wgScript ), $select->getHTML() . Xml::submitButton( wfMsg( 'go' ) ) );
+               return Html::rawElement( 'form',
+                       array( 'id' => 'specialpages', 'method' => 'get', 'action' => $wgScript ),
+                       $select->getHTML() . Xml::submitButton( wfMessage( 'go' )->text() ) );
        }
 
        function pageTitleLinks() {
@@ -459,8 +460,8 @@ class LegacyTemplate extends BaseTemplate {
 
                if ( 'history' == $action || isset( $diff ) || isset( $oldid ) ) {
                        $s[] .= Linker::linkKnown(
-                                       $title,
-                                       wfMsg( 'currentrev' )
+                               $title,
+                               wfMessage( 'currentrev' )->text()
                        );
                }
 
@@ -470,18 +471,18 @@ class LegacyTemplate extends BaseTemplate {
                        if ( !$title->equals( $wgUser->getTalkPage() ) ) {
                                $tl = Linker::linkKnown(
                                        $wgUser->getTalkPage(),
-                                       wfMsgHtml( 'newmessageslink' ),
+                                       wfMessage( 'newmessageslink' )->escaped(),
                                        array(),
                                        array( 'redirect' => 'no' )
                                );
 
                                $dl = Linker::linkKnown(
                                        $wgUser->getTalkPage(),
-                                       wfMsgHtml( 'newmessagesdifflink' ),
+                                       wfMessage( 'newmessagesdifflink' )->escaped(),
                                        array(),
                                        array( 'diff' => 'cur' )
                                );
-                               $s[] = '<strong>' . wfMsg( 'youhavenewmessages', $tl, $dl ) . '</strong>';
+                               $s[] = '<strong>' . wfMessage( 'youhavenewmessages', $tl, $dl )->text() . '</strong>';
                                # disable caching
                                $wgOut->setSquidMaxage( 0 );
                                $wgOut->enableClientCache( false );
@@ -514,7 +515,7 @@ class LegacyTemplate extends BaseTemplate {
 
                if ( $sub == '' ) {
                        global $wgExtraSubtitle;
-                       $sub = wfMsgExt( 'tagline', 'parsemag' ) . $wgExtraSubtitle;
+                       $sub = wfMessage( 'tagline' )->parse() . $wgExtraSubtitle;
                }
 
                $subpages = $this->getSkin()->subPageSubtitle();
@@ -532,14 +533,15 @@ class LegacyTemplate extends BaseTemplate {
                if ( !$wgOut->isPrintable() ) {
                        $printurl = htmlspecialchars( $this->getSkin()->getTitle()->getLocalUrl(
                                $wgRequest->appendQueryValue( 'printable', 'yes', true ) ) );
-                       $s[] = "<a href=\"$printurl\" rel=\"alternate\">" . wfMsg( 'printableversion' ) . '</a>';
+                       $s[] = "<a href=\"$printurl\" rel=\"alternate\">"
+                               . wfMessage( 'printableversion' )->text() . '</a>';
                }
 
                if ( $wgOut->isSyndicated() ) {
                        foreach ( $wgOut->getSyndicationLinks() as $format => $link ) {
                                $feedurl = htmlspecialchars( $link );
                                $s[] = "<a href=\"$feedurl\" rel=\"alternate\" type=\"application/{$format}+xml\""
-                                               . " class=\"feedlink\">" . wfMsgHtml( "feed-$format" ) . "</a>";
+                                               . " class=\"feedlink\">" . wfMessage( "feed-$format" )->escaped() . "</a>";
                        }
                }
                return $wgLang->pipeList( $s );
@@ -558,15 +560,15 @@ class LegacyTemplate extends BaseTemplate {
                global $wgOut;
 
                if ( !$wgOut->isArticleRelated() ) {
-                       $s = wfMsg( 'protectedpage' );
+                       $s = wfMessage( 'protectedpage' )->text();
                } else {
                        $title = $this->getSkin()->getTitle();
                        if ( $title->quickUserCan( 'edit' ) && $title->exists() ) {
-                               $t = wfMsg( 'editthispage' );
+                               $t = wfMessage( 'editthispage' )->text();
                        } elseif ( $title->quickUserCan( 'create' ) && !$title->exists() ) {
-                               $t = wfMsg( 'create-this-page' );
+                               $t = wfMessage( 'create-this-page' )->text();
                        } else {
-                               $t = wfMsg( 'viewsource' );
+                               $t = wfMessage( 'viewsource' )->text();
                        }
 
                        $s = Linker::linkKnown(
@@ -587,7 +589,7 @@ class LegacyTemplate extends BaseTemplate {
                $title = $this->getSkin()->getTitle();
 
                if ( $title->getArticleID() && ( !$diff ) && $wgUser->isAllowed( 'delete' ) ) {
-                       $t = wfMsg( 'deletethispage' );
+                       $t = wfMessage( 'deletethispage' )->text();
 
                        $s = Linker::linkKnown(
                                $title,
@@ -610,10 +612,10 @@ class LegacyTemplate extends BaseTemplate {
 
                if ( $title->getArticleID() && ( ! $diff ) && $wgUser->isAllowed( 'protect' ) ) {
                        if ( $title->isProtected() ) {
-                               $text = wfMsg( 'unprotectthispage' );
+                               $text = wfMessage( 'unprotectthispage' )->text();
                                $query = array( 'action' => 'unprotect' );
                        } else {
-                               $text = wfMsg( 'protectthispage' );
+                               $text = wfMessage( 'protectthispage' )->text();
                                $query = array( 'action' => 'protect' );
                        }
 
@@ -639,14 +641,14 @@ class LegacyTemplate extends BaseTemplate {
 
                if ( $wgOut->isArticleRelated() ) {
                        if ( $wgUser->isWatched( $title ) ) {
-                               $text = wfMsg( 'unwatchthispage' );
+                               $text = wfMessage( 'unwatchthispage' )->text();
                                $query = array(
                                        'action' => 'unwatch',
                                        'token' => UnwatchAction::getUnwatchToken( $title, $wgUser ),
                                );
                                $id = 'mw-unwatch-link' . $this->mWatchLinkNum;
                        } else {
-                               $text = wfMsg( 'watchthispage' );
+                               $text = wfMessage( 'watchthispage' )->text();
                                $query = array(
                                        'action' => 'watch',
                                        'token' => WatchAction::getWatchToken( $title, $wgUser ),
@@ -661,7 +663,7 @@ class LegacyTemplate extends BaseTemplate {
                                $query
                        );
                } else {
-                       $s = wfMsg( 'notanarticle' );
+                       $s = wfMessage( 'notanarticle' )->text();
                }
 
                return $s;
@@ -671,7 +673,7 @@ class LegacyTemplate extends BaseTemplate {
                if ( $this->getSkin()->getTitle()->quickUserCan( 'move' ) ) {
                        return Linker::linkKnown(
                                SpecialPage::getTitleFor( 'Movepage' ),
-                               wfMsg( 'movethispage' ),
+                               wfMessage( 'movethispage' )->text(),
                                array(),
                                array( 'target' => $this->getSkin()->getTitle()->getPrefixedDBkey() )
                        );
@@ -684,7 +686,7 @@ class LegacyTemplate extends BaseTemplate {
        function historyLink() {
                return Linker::link(
                        $this->getSkin()->getTitle(),
-                       wfMsgHtml( 'history' ),
+                       wfMessage( 'history' )->escaped(),
                        array( 'rel' => 'archives' ),
                        array( 'action' => 'history' )
                );
@@ -693,21 +695,21 @@ class LegacyTemplate extends BaseTemplate {
        function whatLinksHere() {
                return Linker::linkKnown(
                        SpecialPage::getTitleFor( 'Whatlinkshere', $this->getSkin()->getTitle()->getPrefixedDBkey() ),
-                       wfMsgHtml( 'whatlinkshere' )
+                       wfMessage( 'whatlinkshere' )->escaped()
                );
        }
 
        function userContribsLink() {
                return Linker::linkKnown(
                        SpecialPage::getTitleFor( 'Contributions', $this->getSkin()->getTitle()->getDBkey() ),
-                       wfMsgHtml( 'contributions' )
+                       wfMessage( 'contributions' )->escaped()
                );
        }
 
        function emailUserLink() {
                return Linker::linkKnown(
                        SpecialPage::getTitleFor( 'Emailuser', $this->getSkin()->getTitle()->getDBkey() ),
-                       wfMsgHtml( 'emailuser' )
+                       wfMessage( 'emailuser' )->escaped()
                );
        }
 
@@ -719,7 +721,7 @@ class LegacyTemplate extends BaseTemplate {
                } else {
                        return Linker::linkKnown(
                                SpecialPage::getTitleFor( 'Recentchangeslinked', $this->getSkin()->getTitle()->getPrefixedDBkey() ),
-                               wfMsgHtml( 'recentchangeslinked-toolbox' )
+                               wfMessage( 'recentchangeslinked-toolbox' )->escaped()
                        );
                }
        }
@@ -737,41 +739,41 @@ class LegacyTemplate extends BaseTemplate {
                        $link = $title->getSubjectPage();
                        switch( $link->getNamespace() ) {
                                case NS_MAIN:
-                                       $text = wfMsg( 'articlepage' );
+                                       $text = wfMessage( 'articlepage' );
                                        break;
                                case NS_USER:
-                                       $text = wfMsg( 'userpage' );
+                                       $text = wfMessage( 'userpage' );
                                        break;
                                case NS_PROJECT:
-                                       $text = wfMsg( 'projectpage' );
+                                       $text = wfMessage( 'projectpage' );
                                        break;
                                case NS_FILE:
-                                       $text = wfMsg( 'imagepage' );
+                                       $text = wfMessage( 'imagepage' );
                                        # Make link known if image exists, even if the desc. page doesn't.
                                        if ( wfFindFile( $link ) )
                                                $linkOptions[] = 'known';
                                        break;
                                case NS_MEDIAWIKI:
-                                       $text = wfMsg( 'mediawikipage' );
+                                       $text = wfMessage( 'mediawikipage' );
                                        break;
                                case NS_TEMPLATE:
-                                       $text = wfMsg( 'templatepage' );
+                                       $text = wfMessage( 'templatepage' );
                                        break;
                                case NS_HELP:
-                                       $text = wfMsg( 'viewhelppage' );
+                                       $text = wfMessage( 'viewhelppage' );
                                        break;
                                case NS_CATEGORY:
-                                       $text = wfMsg( 'categorypage' );
+                                       $text = wfMessage( 'categorypage' );
                                        break;
                                default:
-                                       $text = wfMsg( 'articlepage' );
+                                       $text = wfMessage( 'articlepage' );
                        }
                } else {
                        $link = $title->getTalkPage();
-                       $text = wfMsg( 'talkpage' );
+                       $text = wfMessage( 'talkpage' );
                }
 
-               $s = Linker::link( $link, $text, array(), array(), $linkOptions );
+               $s = Linker::link( $link, $text->text(), array(), array(), $linkOptions );
 
                return $s;
        }
@@ -793,7 +795,7 @@ class LegacyTemplate extends BaseTemplate {
 
                return Linker::linkKnown(
                        $title,
-                       wfMsg( 'postcomment' ),
+                       wfMessage( 'postcomment' )->text(),
                        array(),
                        array(
                                'action' => 'edit',
@@ -807,11 +809,13 @@ class LegacyTemplate extends BaseTemplate {
 
                if ( $wgUploadNavigationUrl ) {
                        # Using an empty class attribute to avoid automatic setting of "external" class
-                       return Linker::makeExternalLink( $wgUploadNavigationUrl, wfMsgHtml( 'upload' ), false, null, array( 'class' => '' ) );
+                       return Linker::makeExternalLink( $wgUploadNavigationUrl,
+                               wfMessage( 'upload' )->escaped(),
+                               false, null, array( 'class' => '' ) );
                } else {
                        return Linker::linkKnown(
                                SpecialPage::getTitleFor( 'Upload' ),
-                               wfMsgHtml( 'upload' )
+                               wfMessage( 'upload' )->escaped()
                        );
                }
        }
@@ -832,7 +836,7 @@ class LegacyTemplate extends BaseTemplate {
 
                                $ret .= "$name $talkLink";
                        } else {
-                               $ret .= wfMsg( 'notloggedin' );
+                               $ret .= wfMessage( 'notloggedin' )->text();
                        }
 
                        $query = array();
@@ -846,7 +850,7 @@ class LegacyTemplate extends BaseTemplate {
                                : 'login';
                        $ret .= "\n<br />" . Linker::link(
                                SpecialPage::getTitleFor( 'Userlogin' ),
-                               wfMsg( $loginlink ), array(), $query
+                               wfMessage( $loginlink )->text(), array(), $query
                        );
                } else {
                        $talkLink = Linker::link( $wgUser->getTalkPage(),
@@ -858,7 +862,7 @@ class LegacyTemplate extends BaseTemplate {
                        $ret .= " $talkLink<br />";
                        $ret .= $wgLang->pipeList( array(
                                Linker::link(
-                                       SpecialPage::getTitleFor( 'Userlogout' ), wfMsg( 'logout' ),
+                                       SpecialPage::getTitleFor( 'Userlogout' ), wfMessage( 'logout' )->text(),
                                        array(), array( 'returnto' => $returnTo->getPrefixedDBkey() )
                                ),
                                Linker::specialLink( 'Preferences' ),
@@ -868,8 +872,8 @@ class LegacyTemplate extends BaseTemplate {
                $ret = $wgLang->pipeList( array(
                        $ret,
                        Linker::link(
-                               Title::newFromText( wfMsgForContent( 'helppage' ) ),
-                               wfMsg( 'help' )
+                               Title::newFromText( wfMessage( 'helppage' )->inContentLanguage()->text() ),
+                               wfMessage( 'help' )->text()
                        ),
                ) );
 
index 92df4a3..7f433bc 100644 (file)
@@ -40,7 +40,7 @@ class MediaWiki_I18N {
                // Hack for i18n:attributes in PHPTAL 1.0.0 dev version as of 2004-10-23
                $value = preg_replace( '/^string:/', '', $value );
 
-               $value = wfMsg( $value );
+               $value = wfMessage( $value )->text();
                // interpolate variables
                $m = array();
                while( preg_match( '/\$([0-9]*?)/sm', $value, $m ) ) {
@@ -135,7 +135,6 @@ class SkinTemplate extends Skin {
                global $wgDisableCounters, $wgSitename, $wgLogo, $wgHideInterlanguageLinks;
                global $wgMaxCredits, $wgShowCreditsIfMax;
                global $wgPageShowWatchingUsers;
-               global $wgDebugComments;
                global $wgArticlePath, $wgScriptPath, $wgServer;
 
                wfProfileIn( __METHOD__ );
@@ -387,12 +386,6 @@ class SkinTemplate extends Skin {
                        }
                }
 
-               if ( $wgDebugComments ) {
-                       $tpl->setRef( 'debug', $out->mDebugtext );
-               } else {
-                       $tpl->set( 'debug', '' );
-               }
-
                $tpl->set( 'sitenotice', $this->getSiteNotice() );
                $tpl->set( 'bottomscripts', $this->bottomScripts() );
                $tpl->set( 'printfooter', $this->printSource() );
@@ -407,7 +400,7 @@ class SkinTemplate extends Skin {
                if ( !in_array( $title->getNamespace(), array( NS_SPECIAL, NS_FILE ) ) &&
                        in_array( $request->getVal( 'action', 'view' ), array( 'view', 'historysubmit' ) ) &&
                        ( $title->exists() || $title->getNamespace() == NS_MEDIAWIKI ) ) {
-                       $pageLang = $title->getPageLanguage();
+                       $pageLang = $title->getPageViewLanguage();
                        $realBodyAttribs['lang'] = $pageLang->getHtmlCode();
                        $realBodyAttribs['dir'] = $pageLang->getDir();
                        $realBodyAttribs['class'] = 'mw-content-'.$pageLang->getDir();
@@ -468,6 +461,7 @@ class SkinTemplate extends Skin {
                        $tpl->set( 'headscripts', $out->getHeadScripts() . $out->getHeadItems() );
                }
 
+               $tpl->set( 'debug', '' );
                $tpl->set( 'debughtml', $this->generateDebugHTML() );
                $tpl->set( 'reporttime', wfReportTime() );
 
@@ -563,7 +557,8 @@ class SkinTemplate extends Skin {
                                'text' => $this->username,
                                'href' => &$this->userpageUrlDetails['href'],
                                'class' => $this->userpageUrlDetails['exists'] ? false : 'new',
-                               'active' => ( $this->userpageUrlDetails['href'] == $pageurl )
+                               'active' => ( $this->userpageUrlDetails['href'] == $pageurl ),
+                               'dir' => 'auto'
                        );
                        $usertalkUrlDetails = $this->makeTalkUrlDetails( $this->userpage );
                        $personal_urls['mytalk'] = array(
@@ -628,6 +623,7 @@ class SkinTemplate extends Skin {
                        global $wgSecureLogin;
                        $proto = $wgSecureLogin ? PROTO_HTTPS : null;
 
+                       $login_id = $this->showIPinHeader() ? 'anonlogin' : 'login';
                        $login_url = array(
                                'text' => $this->msg( $loginlink )->text(),
                                'href' => self::makeSpecialUrl( 'Userlogin', $returnto, $proto ),
@@ -641,10 +637,6 @@ class SkinTemplate extends Skin {
                                'class' => $wgSecureLogin ? 'link-https' : ''
                        );
 
-                       if ( $this->getUser()->isAllowed( 'createaccount' ) && !$useCombinedLoginLink ) {
-                               $personal_urls['createaccount'] = $createaccount_url;
-                       }
-
                        if( $this->showIPinHeader() ) {
                                $href = &$this->userpageUrlDetails['href'];
                                $personal_urls['anonuserpage'] = array(
@@ -661,10 +653,13 @@ class SkinTemplate extends Skin {
                                        'class' => $usertalkUrlDetails['exists'] ? false : 'new',
                                        'active' => ( $pageurl == $href )
                                );
-                               $personal_urls['anonlogin'] = $login_url;
-                       } else {
-                               $personal_urls['login'] = $login_url;
                        }
+
+                       if ( $this->getUser()->isAllowed( 'createaccount' ) && !$useCombinedLoginLink ) {
+                               $personal_urls['createaccount'] = $createaccount_url;
+                       }
+
+                       $personal_urls[$login_id] = $login_url;
                }
 
                wfRunHooks( 'PersonalUrls', array( &$personal_urls, &$title ) );
@@ -1885,13 +1880,7 @@ abstract class BaseTemplate extends QuickTemplate {
        function printTrail() { ?>
 <?php $this->html( 'bottomscripts' ); /* JS call to runBodyOnloadHook */ ?>
 <?php $this->html( 'reporttime' ) ?>
-<?php if ( $this->data['debug'] ): ?>
-<!-- Debug output:
-<?php $this->text( 'debug' ); ?>
-
--->
-<?php endif;
+<?php echo MWDebug::getDebugHTML( $this->getSkin()->getContext() );
        }
 
 }
-
index e2932e1..2e5e02b 100644 (file)
@@ -351,7 +351,7 @@ class SpecialPage {
                        $this->mFunction = $function;
                }
                if ( $file === 'default' ) {
-                       $this->mFile = dirname( __FILE__ ) . "/specials/Special$name.php";
+                       $this->mFile = __DIR__ . "/specials/Special$name.php";
                } else {
                        $this->mFile = $file;
                }
index aeb9ba4..52c9be0 100644 (file)
@@ -36,11 +36,16 @@ abstract class SqlDataUpdate extends DataUpdate {
        protected $mOptions;       //!< SELECT options to be used (array)
 
        private   $mHasTransaction; //!< bool whether a transaction is open on this object (internal use only!)
+       protected $mUseTransaction; //!< bool whether this update should be wrapped in a transaction
 
        /**
         * Constructor
-       **/
-       public function __construct( ) {
+        *
+        * @param bool $withTransaction whether this update should be wrapped in a transaction (default: true).
+        *             A transaction is only started if no transaction is already in progress,
+        *             see beginTransaction() for details.
+        **/
+       public function __construct( $withTransaction = true ) {
                global $wgAntiLockFlags;
 
                parent::__construct( );
@@ -53,16 +58,22 @@ abstract class SqlDataUpdate extends DataUpdate {
 
                // @todo: get connection only when it's needed? make sure that doesn't break anything, especially transactions!
                $this->mDb = wfGetDB( DB_MASTER );
+
+               $this->mWithTransaction = $withTransaction;
                $this->mHasTransaction = false;
        }
 
        /**
-        * Begin a database transaction.
+        * Begin a database transaction, if $withTransaction was given as true in the constructor for this SqlDataUpdate.
         *
-        * Because nested transactions are not supportred by the Database class, this implementation
-        * checkes Database::trxLevel() and only opens a transaction if none is yet active.
+        * Because nested transactions are not supported by the Database class, this implementation
+        * checks Database::trxLevel() and only opens a transaction if none is already active.
         */
        public function beginTransaction() {
+               if ( !$this->mWithTransaction ) {
+                       return;
+               }
+
                // NOTE: nested transactions are not supported, only start a transaction if none is open
                if ( $this->mDb->trxLevel() === 0 ) {
                        $this->mDb->begin( get_class( $this ) . '::beginTransaction'  );
@@ -76,6 +87,7 @@ abstract class SqlDataUpdate extends DataUpdate {
        public function commitTransaction() {
                if ( $this->mHasTransaction ) {
                        $this->mDb->commit( get_class( $this ) . '::commitTransaction' );
+                       $this->mHasTransaction = false;
                }
        }
 
@@ -85,6 +97,7 @@ abstract class SqlDataUpdate extends DataUpdate {
        public function abortTransaction() {
                if ( $this->mHasTransaction ) {
                        $this->mDb->rollback( get_class( $this ) . '::abortTransaction' );
+                       $this->mHasTransaction = false;
                }
        }
 
index 6539e08..95c69a2 100644 (file)
@@ -31,7 +31,7 @@ class StreamFile {
         * Stream a file to the browser, adding all the headings and fun stuff.
         * Headers sent include: Content-type, Content-Length, Last-Modified,
         * and Content-Disposition.
-        * 
+        *
         * @param $fname string Full name and path of the file to stream
         * @param $headers array Any additional headers to send
         * @param $sendErrors bool Send error messages if errors occur (like 404)
@@ -40,6 +40,10 @@ class StreamFile {
        public static function stream( $fname, $headers = array(), $sendErrors = true ) {
                wfProfileIn( __METHOD__ );
 
+               if ( FileBackend::isStoragePath( $fname ) ) { // sanity
+                       throw new MWException( __FUNCTION__ . " given storage path '$fname'." );
+               }
+
                wfSuppressWarnings();
                $stat = stat( $fname );
                wfRestoreWarnings();
@@ -75,8 +79,6 @@ class StreamFile {
        public static function prepareForStream(
                $path, $info, $headers = array(), $sendErrors = true
        ) {
-               global $wgLanguageCode;
-
                if ( !is_array( $info ) ) {
                        if ( $sendErrors ) {
                                header( 'HTTP/1.0 404 Not Found' );
@@ -117,9 +119,6 @@ class StreamFile {
                        return false;
                }
 
-               header( "Content-Disposition: inline;filename*=utf-8'$wgLanguageCode'" .
-                       urlencode( basename( $path ) ) );
-
                // Send additional headers
                foreach ( $headers as $header ) {
                        header( $header );
@@ -142,7 +141,7 @@ class StreamFile {
 
        /**
         * Determine the file type of a file based on the path
-        * 
+        *
         * @param $filename string Storage path or file system path
         * @param $safe bool Whether to do retroactive upload blacklist checks
         * @return null|string
diff --git a/includes/Timestamp.php b/includes/Timestamp.php
new file mode 100644 (file)
index 0000000..16be775
--- /dev/null
@@ -0,0 +1,229 @@
+<?php
+/**
+ * Creation and parsing of MW-style timestamps.
+ *
+ * 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
+ * @since 1.20
+ * @author Tyler Romeo, 2012
+ */
+
+/**
+ * Library for creating and parsing MW-style timestamps. Based on the JS
+ * library that does the same thing.
+ *
+ * @since 1.20
+ */
+class MWTimestamp {
+       /**
+        * Standard gmdate() formats for the different timestamp types.
+        */
+       private 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',
+       );
+
+       /**
+        * Different units for human readable timestamps.
+        * @see MWTimestamp::getHumanTimestamp
+        */
+       private static $units = array(
+               "milliseconds" => 1,
+               "seconds" => 1000, // 1000 milliseconds per second
+               "minutes" => 60, // 60 seconds per minute
+               "hours" => 60, // 60 minutes per hour
+               "days" => 24 // 24 hours per day
+       );
+
+       /**
+        * The actual timestamp being wrapped. Either a DateTime
+        * object or a string with a Unix timestamp depending on
+        * PHP.
+        * @var string|DateTime
+        */
+       private $timestamp;
+
+       /**
+        * Make a new timestamp and set it to the specified time,
+        * or the current time if unspecified.
+        *
+        * @param $timestamp bool|string Timestamp to set, or false for current time
+        */
+       public function __construct( $timestamp = false ) {
+               $this->setTimestamp( $timestamp );
+       }
+
+       /**
+        * Set the timestamp to the specified time, or the current time if unspecified.
+        *
+        * Parse the given timestamp into either a DateTime object or a Unix timestamp,
+        * and then store it.
+        *
+        * @param $ts string|bool Timestamp to store, or false for now
+        * @throws TimestampException
+        */
+       public function setTimestamp( $ts = false ) {
+               $da = array();
+               $strtime = '';
+
+               if ( !$ts || $ts === "\0\0\0\0\0\0\0\0\0\0\0\0\0\0" ) { // 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 ) ) {
+                       # TS_EXIF
+               } 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 ) ) {
+                       # TS_UNIX
+                       $strtime = "@$ts"; // http://php.net/manual/en/datetime.formats.compound.php
+               } 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
+                       $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{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 ) ) {
+                       # 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 {
+                       throw new TimestampException( __METHOD__ . " : Invalid timestamp - $ts" );
+               }
+
+               if( !$strtime ) {
+                       $da = array_map( 'intval', $da );
+                       $da[0] = "%04d-%02d-%02dT%02d:%02d:%02d.00+00:00";
+                       $strtime = call_user_func_array( "sprintf", $da );
+               }
+
+               if( function_exists( "date_create" ) ) {
+                       try {
+                               $final = new DateTime( $strtime, new DateTimeZone( 'GMT' ) );
+                       } catch(Exception $e) {
+                               throw new TimestampException( __METHOD__ . 'Invalid timestamp format.' );
+                       }
+               } else {
+                       $final = strtotime( $strtime );
+               }
+
+               if( $final === false ) {
+                       throw new TimestampException( __METHOD__ . 'Invalid timestamp format.' );
+               }
+               $this->timestamp = $final;
+       }
+
+       /**
+        * Get the timestamp represented by this object in a certain form.
+        *
+        * Convert the internal timestamp to the specified format and then
+        * return it.
+        *
+        * @param $style int Constant Output format for timestamp
+        * @throws TimestampException
+        * @return string The formatted timestamp
+        */
+       public function getTimestamp( $style = TS_UNIX ) {
+               if( !isset( self::$formats[$style] ) ) {
+                       throw new TimestampException( __METHOD__ . ' : Illegal timestamp output type.' );
+               }
+
+               if( is_object( $this->timestamp  ) ) {
+                       // DateTime object was used, call DateTime::format.
+                       $output = $this->timestamp->format( self::$formats[$style] );
+               } elseif( TS_UNIX == $style ) {
+                       // Unix timestamp was used and is wanted, just return it.
+                       $output = $this->timestamp;
+               } else {
+                       // Unix timestamp was used, use gmdate().
+                       $output = gmdate( self::$formats[$style], $this->timestamp );
+               }
+
+               if ( ( $style == TS_RFC2822 ) || ( $style == TS_POSTGRES ) ) {
+                       $output .= ' GMT';
+               }
+
+               return $output;
+       }
+
+       /**
+        * Get the timestamp in a human-friendly relative format, e.g., "3 days ago".
+        *
+        * Determine the difference between the timestamp and the current time, and
+        * generate a readable timestamp by returning "<N> <units> ago", where the
+        * largest possible unit is used.
+        *
+        * @return string Formatted timestamp
+        */
+       public function getHumanTimestamp() {
+               $then = $this->getTimestamp( TS_UNIX );
+               $now = time();
+               $timeago = ($now - $then) * 1000;
+               $message = false;
+
+               foreach( self::$units as $unit => $factor ) {
+                       $next = $timeago / $factor;
+                       if( $next < 1 ) {
+                               break;
+                       } else {
+                               $timeago = $next;
+                               $message = array( $unit, floor( $timeago ) );
+                       }
+               }
+
+               if( $message ) {
+                       $initial = call_user_func_array( 'wfMessage', $message );
+                       return wfMessage( 'ago', $initial );
+               } else {
+                       return wfMessage( 'just-now' );
+               }
+       }
+
+       /**
+        * @return string
+        */
+       public function __toString() {
+               return $this->getTimestamp();
+       }
+}
+
+class TimestampException extends MWException {}
index b01c00b..f9c7bdf 100644 (file)
@@ -347,7 +347,7 @@ class Title {
         * @return Title the new object
         */
        public static function newMainPage() {
-               $title = Title::newFromText( wfMsgForContent( 'mainpage' ) );
+               $title = Title::newFromText( wfMessage( 'mainpage' )->inContentLanguage()->text() );
                // Don't give fatal errors if the message is broken
                if ( !$title ) {
                        $title = Title::newFromText( 'Main Page' );
@@ -1594,7 +1594,7 @@ class Title {
         *   queries by skipping checks for cascading protections and user blocks.
         * @param $ignoreErrors Array of Strings Set this to a list of message keys
         *   whose corresponding errors may be ignored.
-        * @return Array of arguments to wfMsg to explain permissions problems.
+        * @return Array of arguments to wfMessage to explain permissions problems.
         */
        public function getUserPermissionsErrors( $action, $user, $doExpensiveQueries = true, $ignoreErrors = array() ) {
                $errors = $this->getUserPermissionsErrorsInternal( $action, $user, $doExpensiveQueries );
@@ -1751,7 +1751,7 @@ class Title {
                # Check $wgNamespaceProtection for restricted namespaces
                if ( $this->isNamespaceProtected( $user ) ) {
                        $ns = $this->mNamespace == NS_MAIN ?
-                               wfMsg( 'nstab-main' ) : $this->getNsText();
+                               wfMessage( 'nstab-main' )->text() : $this->getNsText();
                        $errors[] = $this->mNamespace == NS_MEDIAWIKI ?
                                array( 'protectedinterface' ) : array( 'namespaceprotected',  $ns );
                }
@@ -1950,7 +1950,7 @@ class Title {
                        $id = $user->blockedBy();
                        $reason = $user->blockedFor();
                        if ( $reason == '' ) {
-                               $reason = wfMsg( 'blockednoreason' );
+                               $reason = wfMessage( 'blockednoreason' )->text();
                        }
                        $ip = $user->getRequest()->getIP();
 
@@ -2108,7 +2108,7 @@ class Title {
         * @param $user User to check
         * @param $doExpensiveQueries Bool Set this to false to avoid doing unnecessary queries.
         * @param $short Bool Set this to true to stop after the first permission error.
-        * @return Array of arrays of the arguments to wfMsg to explain permissions problems.
+        * @return Array of arrays of the arguments to wfMessage to explain permissions problems.
         */
        protected function getUserPermissionsErrorsInternal( $action, $user, $doExpensiveQueries = true, $short = false ) {
                wfProfileIn( __METHOD__ );
@@ -3546,9 +3546,13 @@ class Title {
                        );
                        # Update the protection log
                        $log = new LogPage( 'protect' );
-                       $comment = wfMsgForContent( 'prot_1movedto2', $this->getPrefixedText(), $nt->getPrefixedText() );
+                       $comment = wfMessage(
+                               'prot_1movedto2',
+                               $this->getPrefixedText(),
+                               $nt->getPrefixedText()
+                       )->inContentLanguage()->text();
                        if ( $reason ) {
-                               $comment .= wfMsgForContent( 'colon-separator' ) . $reason;
+                               $comment .= wfMessage( 'colon-separator' )->inContentLanguage()->text() . $reason;
                        }
                        // @todo FIXME: $params?
                        $log->addEntry( 'move_prot', $nt, $comment, array( $this->getPrefixedText() ) );
@@ -3606,7 +3610,7 @@ class Title {
                $formatter->setContext( RequestContext::newExtraneousContext( $this ) );
                $comment = $formatter->getPlainActionText();
                if ( $reason ) {
-                       $comment .= wfMsgForContent( 'colon-separator' ) . $reason;
+                       $comment .= wfMessage( 'colon-separator' )->inContentLanguage()->text() . $reason;
                }
                # Truncate for whole multibyte characters.
                $comment = $wgContLang->truncate( $comment, 255 );
@@ -3820,7 +3824,7 @@ class Title {
                        return false;
                }
                # Get the article text
-               $rev = Revision::newFromTitle( $nt );
+               $rev = Revision::newFromTitle( $nt, false, Revision::READ_LATEST );
                if( !is_object( $rev ) ){
                        return false;
                }
@@ -4113,11 +4117,11 @@ class Title {
                if ( in_array( 'include_old', $options ) ) {
                        $old_cmp = '>=';
                }
-               if ( in_array( 'include_new', $options ) ) {\r
-                       $new_cmp = '<=';\r
-               }\r
-               if ( in_array( 'include_both', $options ) ) {\r
-                       $old_cmp = '>=';\r
+               if ( in_array( 'include_new', $options ) ) {
+                       $new_cmp = '<=';
+               }
+               if ( in_array( 'include_both', $options ) ) {
+                       $old_cmp = '>=';
                        $new_cmp = '<=';
                }
                // No DB query needed if $old and $new are the same or successive revisions:
@@ -4128,7 +4132,7 @@ class Title {
                                return ( $old_cmp === '>' && $new_cmp === '<' ) ? 0 : 1;
                        }
                        return ( $old->getRawUserText() === $new->getRawUserText() ) ? 1 : 2;
-               }\r
+               }
                $dbr = wfGetDB( DB_SLAVE );
                $res = $dbr->select( 'revision', 'DISTINCT rev_user_text',
                        array(
@@ -4526,9 +4530,9 @@ class Title {
        }
 
        /**
-        * Get the language in which the content of this page is written.
-        * Defaults to $wgContLang, but in certain cases it can be e.g.
-        * $wgLang (such as special pages, which are in the user language).
+        * Get the language in which the content of this page is written in
+        * wikitext. Defaults to $wgContLang, but in certain cases it can be
+        * e.g. $wgLang (such as special pages, which are in the user language).
         *
         * @since 1.18
         * @return Language
@@ -4553,4 +4557,29 @@ class Title {
                wfRunHooks( 'PageContentLanguage', array( $this, &$pageLang, $wgLang ) );
                return wfGetLangObj( $pageLang );
        }
+
+       /**
+        * Get the language in which the content of this page is written when
+        * viewed by user. Defaults to $wgContLang, but in certain cases it can be
+        * e.g. $wgLang (such as special pages, which are in the user language).
+        *
+        * @since 1.20
+        * @return Language
+        */
+       public function getPageViewLanguage() {
+               $pageLang = $this->getPageLanguage();
+               // If this is nothing special (so the content is converted when viewed)
+               if ( !$this->isSpecialPage()
+                       && !$this->isCssOrJsPage() && !$this->isCssJsSubpage()
+                       && $this->getNamespace() !== NS_MEDIAWIKI
+               ) {
+                       // If the user chooses a variant, the content is actually
+                       // in a language whose code is the variant code.
+                       $variant = $pageLang->getPreferredVariant();
+                       if ( $pageLang->getCode() !== $variant ) {
+                               $pageLang = Language::factory( $variant );
+                       }
+               }
+               return $pageLang;
+       }
 }
diff --git a/includes/Uri.php b/includes/Uri.php
deleted file mode 100644 (file)
index f6cf06f..0000000
+++ /dev/null
@@ -1,335 +0,0 @@
-<?php
-/**
- * Class for simple URI parsing and manipulation.
- * Intended to simplify things that were using wfParseUrl and
- * had to do manual concatenation for various needs.
- * Built to match our JS mw.Uri in naming patterns.
- * @file
- * @author Daniel Friesen
- * @since 1.20
- */
-
-class Uri {
-
-       /**
-        * The parsed components of the URI
-        */
-       protected $components;
-
-       protected static $validComponents = array( 'scheme', 'delimiter', 'host', 'port', 'user', 'pass', 'path', 'query', 'fragment' );
-       protected static $componentAliases = array( 'protocol' => 'scheme', 'password' => 'pass' );
-
-       /**
-        * parse_url() work-alike, but non-broken.  Differences:
-        *
-        * 1) Does not raise warnings on bad URLs (just returns false)
-        * 2) Handles protocols that don't use :// (e.g., mailto: and news: , as well as protocol-relative URLs) correctly
-        * 3) Adds a "delimiter" element to the array, either '://', ':' or '//' (see (2))
-        *
-        * @param $url String: a URL to parse
-        * @return Array: bits of the URL in an associative array, per PHP docs
-        */
-       protected static function parseUri( $url ) {
-               global $wgUrlProtocols; // Allow all protocols defined in DefaultSettings/LocalSettings.php
-
-               // Protocol-relative URLs are handled really badly by parse_url(). It's so bad that the easiest
-               // way to handle them is to just prepend 'http:' and strip the protocol out later
-               $wasRelative = substr( $url, 0, 2 ) == '//';
-               if ( $wasRelative ) {
-                       $url = "http:$url";
-               }
-               wfSuppressWarnings();
-               $bits = parse_url( $url );
-               wfRestoreWarnings();
-               // parse_url() returns an array without scheme for some invalid URLs, e.g.
-               // parse_url("%0Ahttp://example.com") == array( 'host' => '%0Ahttp', 'path' => 'example.com' )
-               if ( !$bits ||
-                    !isset( $bits['scheme'] ) && strpos( $url, "://" ) !== false ) {
-                       wfDebug( __METHOD__ . ": Invalid URL: $url" );
-                       return false;
-               } else {
-                       $scheme = isset( $bits['scheme'] ) ? $bits['scheme'] : null;
-               }
-
-               // most of the protocols are followed by ://, but mailto: and sometimes news: not, check for it
-               if ( in_array( $scheme . '://', $wgUrlProtocols ) ) {
-                       $bits['delimiter'] = '://';
-               } elseif ( !is_null( $scheme ) && !in_array( $scheme . ':', $wgUrlProtocols ) ) {
-                       wfDebug( __METHOD__ . ": Invalid scheme in URL: $scheme" );
-                       return false;
-               } elseif( !is_null( $scheme ) ) {
-                       if( !in_array( $scheme . ':', $wgUrlProtocols ) ) {
-                               // For URLs that don't have a scheme, but do have a user:password, parse_url
-                               // detects the user as the scheme.
-                               unset( $bits['scheme'] );
-                               $bits['user'] = $scheme;
-                       } else {
-                               $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'] ) ) {
-                                       $bits['host'] = $bits['path'];
-                                       $bits['path'] = '';
-                               }
-                       }
-               }
-
-               /* Provide an empty host for eg. file:/// urls (see bug 28627) */
-               if ( !isset( $bits['host'] ) && $scheme == "file" ) {
-                       $bits['host'] = '';
-
-                       /* parse_url loses the third / for file:///c:/ urls (but not on variants) */
-                       if ( isset( $bits['path'] ) && substr( $bits['path'], 0, 1 ) !== '/' ) {
-                               $bits['path'] = '/' . $bits['path'];
-                       }
-               }
-
-               // If the URL was protocol-relative, fix scheme and delimiter
-               if ( $wasRelative ) {
-                       $bits['scheme'] = '';
-                       $bits['delimiter'] = '//';
-               }
-               return $bits;
-       }
-
-       /**
-        *
-        * @param $uri mixed URI string or array
-        */
-       public function __construct( $uri ) {
-               $this->components = array();
-               $this->setUri( $uri );
-       }
-
-       /**
-        * Set the Uri to the value of some other URI.
-        *
-        * @param $uri mixed URI string or array
-        */
-       public function setUri( $uri ) {
-               if ( is_string( $uri ) ) {
-                       $parsed = self::parseUri( $uri );
-                       if( $parsed === false ) {
-                               return false;
-                       }
-                       $this->setComponents( $parsed );
-               } elseif ( is_array( $uri ) ) {
-                       $this->setComponents( $uri );
-               } elseif ( $uri instanceof Uri ) {
-                       $this->setComponents( $uri->getComponents() );
-               } else {
-                       throw new MWException( __METHOD__ . ': $uri is not of a valid type.' );
-               }
-       }
-
-       /**
-        * Set the components of this array.
-        * Will output warnings when invalid components or aliases are found.
-        *
-        * @param $components Array The components to set on this Uri.
-        */
-       public function setComponents( array $components ) {
-               foreach ( $components as $name => $value ) {
-                       if ( isset( self::$componentAliases[$name] ) ) {
-                               $canonical = self::$componentAliases[$name];
-                               wfDebug( __METHOD__ . ": Converting alias $name to canonical $canonical." );
-                               $components[$canonical] = $value;
-                               unset( $components[$name] );
-                       } elseif ( !in_array( $name, self::$validComponents ) ) {
-                               throw new MWException( __METHOD__ . ": $name is not a valid component." );
-                       }
-               }
-
-               $this->components = $components;
-       }
-
-       /**
-        * Return the components for this Uri
-        * @return Array
-        */
-       public function getComponents() {
-               return $this->components;
-       }
-
-       /**
-        * Return the value of a specific component
-        *
-        * @param $name string The name of the component to return
-        * @param string|null
-        */
-       public function getComponent( $name ) {
-               if ( isset( self::$componentAliases[$name] ) ) {
-                       // Component is an alias. Get the actual name.
-                       $alias = $name;
-                       $name = self::$componentAliases[$name];
-                       wfDebug( __METHOD__ . ": Converting alias $alias to canonical $name." );
-               }
-
-               if( !in_array( $name, self::$validComponents ) ) {
-                       // Component is invalid
-                       throw new MWException( __METHOD__ . ": $name is not a valid component." );
-               } elseif( !empty( $this->components[$name] ) ) {
-                       // Component is valid and has a value.
-                       return $this->components[$name];
-               } else {
-                       // Component is empty
-                       return null;
-               }
-       }
-
-       /**
-        * Set a component for this Uri
-        * @param $name string The name of the component to set
-        * @param $value string|null The value to set
-        */
-       public function setComponent( $name, $value ) {
-               if ( isset( self::$componentAliases[$name] ) ) {
-                       $alias = $name;
-                       $name = self::$componentAliases[$name];
-                       wfDebug( __METHOD__ . ": Converting alias $alias to canonical $name." );
-               } elseif ( !in_array( $name, self::$validComponents ) ) {
-                       throw new MWException( __METHOD__ . ": $name is not a valid component." );
-               }
-               $this->components[$name] = $value;
-       }
-
-       public function getProtocol() { return $this->getComponent( 'scheme' ); }
-       public function getUser() { return $this->getComponent( 'user' ); }
-       public function getPassword() { return $this->getComponent( 'pass' ); }
-       public function getHost() { return $this->getComponent( 'host' ); }
-       public function getPort() { return $this->getComponent( 'port' ); }
-       public function getPath() { return $this->getComponent( 'path' ); }
-       public function getQueryString() { return $this->getComponent( 'query' ); }
-       public function getFragment() { return $this->getComponent( 'fragment' ); }
-
-       public function setProtocol( $scheme ) { $this->setComponent( 'scheme', $scheme ); }
-       public function setUser( $user ) { $this->setComponent( 'user', $user ); }
-       public function setPassword( $pass ) { $this->setComponent( 'pass', $pass ); }
-       public function setHost( $host ) { $this->setComponent( 'host', $host ); }
-       public function setPort( $port ) { $this->setComponent( 'port', $port ); }
-       public function setPath( $path ) { $this->setComponent( 'path', $path ); }
-       public function setFragment( $fragment ) { $this->setComponent( 'fragment', $fragment ); }
-
-       /**
-        * Gets the protocol-authority delimiter of a URI (:// or //).
-        * @return string|null
-        */
-       public function getDelimiter() {
-               $delimiter = $this->getComponent( 'delimiter' );
-               if ( $delimiter ) {
-                       // A specific delimiter is set, so return it.
-                       return $delimiter;
-               }
-               if ( $this->getAuthority() && $this->getProtocol() ) {
-                       // If the URI has a protocol and a body (i.e., some sort of host, etc.)
-                       // the default delimiter is "://", e.g., "http://test.com".
-                       return '://';
-               }
-               return null;
-       }
-
-       /**
-        * Gets query portion of a URI in array format.
-        * @return string
-        */
-       public function getQuery() {
-               return wfCgiToArray( $this->getQueryString() );
-       }
-
-       /**
-        * Gets query portion of a URI.
-        * @param string|array $query
-        */
-       public function setQuery( $query ) {
-               if ( is_array( $query ) ) {
-                       $query = wfArrayToCGI( $query );
-               }
-               $this->setComponent( 'query', $query );
-       }
-
-       /**
-        * Extend the query -- supply query parameters to override or add to ours
-        * @param Array|string $parameters query parameters to override or add
-        * @return Uri this URI object
-        */
-       public function extendQuery( $parameters ) {
-               if ( !is_array( $parameters ) ) {
-                       $parameters = wfCgiToArray( $parameters );
-               }
-
-               $query = $this->getQuery();
-               foreach( $parameters as $key => $value ) {
-                       $query[$key] = $value;
-               }
-
-               $this->setQuery( $query );
-               return $this;
-       }
-
-       /**
-        * Returns user and password portion of a URI.
-        * @return string
-        */
-       public function getUserInfo() {
-               $user = $this->getComponent( 'user' );
-               $pass = $this->getComponent( 'pass' );
-               return $pass ? "$user:$pass" : $user;
-       }
-
-       /**
-        * Gets host and port portion of a URI.
-        * @return string
-        */
-       public function getHostPort() {
-               $host = $this->getComponent( 'host' );
-               $port = $this->getComponent( 'port' );
-               return $port ? "$host:$port" : $host;
-       }
-
-       /**
-        * Returns the userInfo and host and port portion of the URI.
-        * In most real-world URLs, this is simply the hostname, but it is more general.
-        * @return string
-        */
-       public function getAuthority() {
-               $userinfo = $this->getUserInfo();
-               $hostinfo = $this->getHostPort();
-               return $userinfo ? "$userinfo@$hostinfo" : $hostinfo;
-       }
-
-       /**
-        * Returns everything after the authority section of the URI
-        * @return String
-        */
-       public function getRelativePath() {
-               $path = $this->getComponent( 'path' );
-               $query = $this->getComponent( 'query' );
-               $fragment = $this->getComponent( 'fragment' );
-
-               $retval = $path;
-               if( $query ) {
-                       $retval .= "?$query";
-               }
-               if( $fragment ) {
-                       $retval .= "#$fragment";
-               }
-               return $retval;
-       }
-
-       /**
-        * Gets the entire URI string. May not be precisely the same as input due to order of query arguments.
-        * @return String the URI string
-        */
-       public function toString() {
-               return $this->getComponent( 'scheme' ) . $this->getDelimiter() . $this->getAuthority() . $this->getRelativePath();
-       }
-
-       /**
-        * Gets the entire URI string. May not be precisely the same as input due to order of query arguments.
-        * @return String the URI string
-        */
-       public function __toString() {
-               return $this->toString();
-       }
-
-}
index f43844e..0a3db4c 100644 (file)
@@ -624,7 +624,7 @@ class User {
                // Certain names may be reserved for batch processes.
                foreach ( $reservedUsernames as $reserved ) {
                        if ( substr( $reserved, 0, 4 ) == 'msg:' ) {
-                               $reserved = wfMsgForContent( substr( $reserved, 4 ) );
+                               $reserved = wfMessage( substr( $reserved, 4 ) )->inContentLanguage()->text();
                        }
                        if ( $reserved == $name ) {
                                return false;
@@ -1305,13 +1305,13 @@ class User {
                        # Local list
                        if ( self::isLocallyBlockedProxy( $ip ) ) {
                                $block = new Block;
-                               $block->setBlocker( wfMsg( 'proxyblocker' ) );
-                               $block->mReason = wfMsg( 'proxyblockreason' );
+                               $block->setBlocker( wfMessage( 'proxyblocker' )->text() );
+                               $block->mReason = wfMessage( 'proxyblockreason' )->text();
                                $block->setTarget( $ip );
                        } elseif ( $this->isAnon() && $this->isDnsBlacklisted( $ip ) ) {
                                $block = new Block;
-                               $block->setBlocker( wfMsg( 'sorbs' ) );
-                               $block->mReason = wfMsg( 'sorbsreason' );
+                               $block->setBlocker( wfMessage( 'sorbs' )->text() );
+                               $block->mReason = wfMessage( 'sorbsreason' )->text();
                                $block->setTarget( $ip );
                        }
                }
@@ -2016,7 +2016,7 @@ class User {
 
                if( $str !== null ) {
                        if( !$wgAuth->allowPasswordChange() ) {
-                               throw new PasswordError( wfMsg( 'password-change-forbidden' ) );
+                               throw new PasswordError( wfMessage( 'password-change-forbidden' )->text() );
                        }
 
                        if( !$this->isValidPassword( $str ) ) {
@@ -2029,12 +2029,12 @@ class User {
                                        $message = $valid;
                                        $params = array( $wgMinimalPasswordLength );
                                }
-                               throw new PasswordError( wfMsgExt( $message, array( 'parsemag' ), $params ) );
+                               throw new PasswordError( wfMessage( $message, $params )->text() );
                        }
                }
 
                if( !$wgAuth->setPassword( $this, $str ) ) {
-                       throw new PasswordError( wfMsg( 'externaldberror' ) );
+                       throw new PasswordError( wfMessage( 'externaldberror' )->text() );
                }
 
                $this->setInternalPassword( $str );
@@ -2891,11 +2891,16 @@ class User {
         * @todo Only rarely do all these fields need to be set!
         */
        public function saveSettings() {
+               global $wgAuth;
+
                $this->load();
                if ( wfReadOnly() ) { return; }
                if ( 0 == $this->mId ) { return; }
 
                $this->mTouched = self::newTouchedTimestamp();
+               if ( !$wgAuth->allowSetLocalPassword() ) {
+                       $this->mPassword = '';
+               }
 
                $dbw = wfGetDB( DB_MASTER );
                $dbw->update( 'user',
@@ -3353,15 +3358,15 @@ class User {
                        $message = 'confirmemail_body_' . $type;
                }
 
-               return $this->sendMail( wfMsg( 'confirmemail_subject' ),
-                       wfMsg( $message,
+               return $this->sendMail( wfMessage( 'confirmemail_subject' )->text(),
+                       wfMessage( $message,
                                $this->getRequest()->getIP(),
                                $this->getName(),
                                $url,
                                $wgLang->timeanddate( $expiration, false ),
                                $invalidateURL,
                                $wgLang->date( $expiration, false ),
-                               $wgLang->time( $expiration, false ) ) );
+                               $wgLang->time( $expiration, false ) )->text() );
        }
 
        /**
@@ -4013,10 +4018,10 @@ class User {
                        $action = 'create2';
                        if ( $byEmail ) {
                                if ( $reason === '' ) {
-                                       $reason = wfMsgForContent( 'newuserlog-byemail' );
+                                       $reason = wfMessage( 'newuserlog-byemail' )->inContentLanguage()->text();
                                } else {
                                        $reason = $wgContLang->commaList( array(
-                                               $reason, wfMsgForContent( 'newuserlog-byemail' ) ) );
+                                               $reason, wfMessage( 'newuserlog-byemail' )->inContentLanguage()->text() ) );
                                }
                        }
                }
@@ -4185,8 +4190,8 @@ class User {
                /*
                if ( $wgMinimalPasswordLength > 1 ) {
                        $ret['pattern'] = '.{' . intval( $wgMinimalPasswordLength ) . ',}';
-                       $ret['title'] = wfMsgExt( 'passwordtooshort', 'parsemag',
-                               $wgMinimalPasswordLength );
+                       $ret['title'] = wfMessage( 'passwordtooshort' )
+                               ->numParams( $wgMinimalPasswordLength )->text();
                }
                */
 
index 36da6fb..01e7132 100644 (file)
@@ -623,32 +623,36 @@ class EmailNotification {
 
                if ( $this->oldid ) {
                        // Always show a link to the diff which triggered the mail. See bug 32210.
-                       $keys['$NEWPAGE'] = wfMsgForContent( 'enotif_lastdiff',
-                               $this->title->getCanonicalUrl( 'diff=next&oldid=' . $this->oldid ) );
+                       $keys['$NEWPAGE'] = wfMessage( 'enotif_lastdiff',
+                               $this->title->getCanonicalUrl( 'diff=next&oldid=' . $this->oldid ) )
+                               ->inContentLanguage()->text();
                        if ( !$wgEnotifImpersonal ) {
                                // For personal mail, also show a link to the diff of all changes
                                // since last visited.
-                               $keys['$NEWPAGE'] .= " \n" . wfMsgForContent( 'enotif_lastvisited',
-                                       $this->title->getCanonicalUrl( 'diff=0&oldid=' . $this->oldid ) );
+                               $keys['$NEWPAGE'] .= " \n" . wfMessage( 'enotif_lastvisited',
+                                       $this->title->getCanonicalUrl( 'diff=0&oldid=' . $this->oldid ) )
+                                       ->inContentLanguage()->text();
                        }
                        $keys['$OLDID']   = $this->oldid;
-                       $keys['$CHANGEDORCREATED'] = wfMsgForContent( 'changed' );
+                       $keys['$CHANGEDORCREATED'] = wfMessage( 'changed' )->inContentLanguage()->text();
                } else {
-                       $keys['$NEWPAGE'] = wfMsgForContent( 'enotif_newpagetext' );
+                       $keys['$NEWPAGE'] = wfMessage( 'enotif_newpagetext' )->inContentLanguage()->text();
                        # clear $OLDID placeholder in the message template
                        $keys['$OLDID']   = '';
-                       $keys['$CHANGEDORCREATED'] = wfMsgForContent( 'created' );
+                       $keys['$CHANGEDORCREATED'] = wfMessage( 'created' )->inContentLanguage()->text();
                }
 
                $keys['$PAGETITLE'] = $this->title->getPrefixedText();
                $keys['$PAGETITLE_URL'] = $this->title->getCanonicalUrl();
-               $keys['$PAGEMINOREDIT'] = $this->minorEdit ? wfMsgForContent( 'minoredit' ) : '';
+               $keys['$PAGEMINOREDIT'] = $this->minorEdit ?
+                       wfMessage( 'minoredit' )->inContentLanguage()->text() : '';
                $keys['$UNWATCHURL'] = $this->title->getCanonicalUrl( 'action=unwatch' );
 
                if ( $this->editor->isAnon() ) {
                        # real anon (user:xxx.xxx.xxx.xxx)
-                       $keys['$PAGEEDITOR'] = wfMsgForContent( 'enotif_anon_editor', $this->editor->getName() );
-                       $keys['$PAGEEDITOR_EMAIL'] = wfMsgForContent( 'noemailtitle' );
+                       $keys['$PAGEEDITOR'] = wfMessage( 'enotif_anon_editor', $this->editor->getName() )
+                               ->inContentLanguage()->text();
+                       $keys['$PAGEEDITOR_EMAIL'] = wfMessage( 'noemailtitle' )->inContentLanguage()->text();
                } else {
                        $keys['$PAGEEDITOR'] = $wgEnotifUseRealName ? $this->editor->getRealName() : $this->editor->getName();
                        $emailPage = SpecialPage::getSafeTitleFor( 'Emailuser', $this->editor->getName() );
@@ -662,12 +666,12 @@ class EmailNotification {
 
                # Now build message's subject and body
 
-               $subject = wfMsgExt( 'enotif_subject', 'content' );
+               $subject = wfMessage( 'enotif_subject' )->inContentLanguage()->plain();
                $subject = strtr( $subject, $keys );
                $subject = MessageCache::singleton()->transform( $subject, false, null, $this->title );
                $this->subject = strtr( $subject, $postTransformKeys );
 
-               $body = wfMsgExt( 'enotif_body', 'content' );
+               $body = wfMessage( 'enotif_body' )->inContentLanguage()->plain();
                $body = strtr( $body, $keys );
                $body = MessageCache::singleton()->transform( $body, false, null, $this->title );
                $this->body = wordwrap( strtr( $body, $postTransformKeys ), 72 );
@@ -769,7 +773,7 @@ class EmailNotification {
                                array( '$WATCHINGUSERNAME',
                                        '$PAGEEDITDATE',
                                        '$PAGEEDITTIME' ),
-                               array( wfMsgForContent( 'enotif_impersonal_salutation' ),
+                               array( wfMessage( 'enotif_impersonal_salutation' )->inContentLanguage()->text(),
                                        $wgContLang->date( $this->timestamp, false, false ),
                                        $wgContLang->time( $this->timestamp, false, false ) ),
                                $this->body );
index 17f8216..01c5eea 100644 (file)
@@ -81,7 +81,7 @@ define( 'MEDIAWIKI', true );
 # Full path to working directory.
 # Makes it possible to for example to have effective exclude path in apc.
 # Also doesn't break installations using symlinked includes, like
-# dirname( __FILE__ ) would do.
+# __DIR__ would do.
 $IP = getenv( 'MW_INSTALL_PATH' );
 if ( $IP === false ) {
        $IP = realpath( '.' );
index 7c167f6..4b0e68c 100644 (file)
@@ -134,12 +134,12 @@ class WikiXmlError extends WikiError {
        /** @return string */
        function getMessage() {
                // '$1 at line $2, col $3 (byte $4): $5',
-               return wfMsgHtml( 'xml-error-string',
+               return wfMessage( 'xml-error-string',
                        $this->mMessage,
                        $this->mLine,
                        $this->mColumn,
                        $this->mByte . $this->mContext,
-                       xml_error_string( $this->mXmlError ) );
+                       xml_error_string( $this->mXmlError ) )->escaped();
        }
 
        function _extractContext( $context, $offset ) {
index 5ec5819..1021767 100644 (file)
@@ -92,6 +92,7 @@ class WikiPage extends Page implements IDBAccessObject {
         * Create a WikiPage object of the appropriate class for the given title.
         *
         * @param $title Title
+        * @throws MWException
         * @return WikiPage object of the appropriate type
         */
        public static function factory( Title $title ) {
@@ -711,7 +712,7 @@ class WikiPage extends Page implements IDBAccessObject {
         * 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 $editInfo Object or false: object returned by prepareTextForEdit(),
+        * @param $editInfo Object|bool (false): object returned by prepareTextForEdit(),
         *        if false, the current database state will be used
         * @return Boolean
         */
@@ -1326,7 +1327,8 @@ class WikiPage extends Page implements IDBAccessObject {
 
                        if ( $section == 'new' ) {
                                # Inserting a new section
-                               $subject = $sectionTitle ? wfMsgForContent( 'newsectionheaderdefaultlevel', $sectionTitle ) . "\n\n" : '';
+                               $subject = $sectionTitle ? wfMessage( 'newsectionheaderdefaultlevel' )
+                                       ->rawParams( $sectionTitle )->inContentLanguage()->text() . "\n\n" : '';
                                if ( wfRunHooks( 'PlaceNewSection', array( $this, $oldtext, $subject, &$text ) ) ) {
                                        $text = strlen( trim( $oldtext ) ) > 0
                                                ? "{$oldtext}\n\n{$subject}{$text}"
@@ -1389,9 +1391,10 @@ class WikiPage extends Page implements IDBAccessObject {
         * edit-already-exists error will be returned. These two conditions are also possible with
         * auto-detection due to MediaWiki's performance-optimised locking strategy.
         *
-        * @param $baseRevId int the revision ID this edit was based off, if any
+        * @param bool|int $baseRevId int the revision ID this edit was based off, if any
         * @param $user User the user doing the edit
         *
+        * @throws MWException
         * @return Status object. Possible errors:
         *     edit-hook-aborted:       The ArticleSave hook aborted the edit but didn't set the fatal flag of $status
         *     edit-gone-missing:       In update mode, but the article didn't exist
@@ -1930,12 +1933,15 @@ class WikiPage extends Page implements IDBAccessObject {
                        if ( $restrictions != '' ) {
                                $protectDescription .= $wgContLang->getDirMark() . "[$action=$restrictions] (";
                                if ( $encodedExpiry[$action] != 'infinity' ) {
-                                       $protectDescription .= wfMsgForContent( 'protect-expiring',
+                                       $protectDescription .= wfMessage(
+                                               'protect-expiring',
                                                $wgContLang->timeanddate( $expiry[$action], false, false ) ,
                                                $wgContLang->date( $expiry[$action], false, false ) ,
-                                               $wgContLang->time( $expiry[$action], false, false ) );
+                                               $wgContLang->time( $expiry[$action], false, false )
+                                       )->inContentLanguage()->text();
                                } else {
-                                       $protectDescription .= wfMsgForContent( 'protect-expiry-indefinite' );
+                                       $protectDescription .= wfMessage( 'protect-expiry-indefinite' )
+                                               ->inContentLanguage()->text();
                                }
 
                                $protectDescription .= ') ';
@@ -1976,7 +1982,12 @@ class WikiPage extends Page implements IDBAccessObject {
                        }
 
                        # Prepare a null revision to be added to the history
-                       $editComment = $wgContLang->ucfirst( wfMsgForContent( $revCommentMsg, $this->mTitle->getPrefixedText() ) );
+                       $editComment = $wgContLang->ucfirst(
+                               wfMessage(
+                                       $revCommentMsg,
+                                       $this->mTitle->getPrefixedText()
+                               )->inContentLanguage()->text()
+                       );
                        if ( $reason ) {
                                $editComment .= ": $reason";
                        }
@@ -1984,7 +1995,9 @@ class WikiPage extends Page implements IDBAccessObject {
                                $editComment .= " ($protectDescription)";
                        }
                        if ( $cascade ) {
-                               $editComment .= ' [' . wfMsgForContent( 'protect-summary-cascade' ) . ']';
+                               // FIXME: Should use 'brackets' message.
+                               $editComment .= ' [' . wfMessage( 'protect-summary-cascade' )
+                                       ->inContentLanguage()->text() . ']';
                        }
 
                        # Insert a null revision
@@ -2051,6 +2064,7 @@ class WikiPage extends Page implements IDBAccessObject {
         * Take an array of page restrictions and flatten it to a string
         * suitable for insertion into the page_restrictions field.
         * @param $limit Array
+        * @throws MWException
         * @return String
         */
        protected static function flattenRestrictions( $limit ) {
@@ -2383,7 +2397,7 @@ class WikiPage extends Page implements IDBAccessObject {
                                array( /* WHERE */
                                        'rc_cur_id' => $current->getPage(),
                                        'rc_user_text' => $current->getUserText(),
-                                       "rc_timestamp > '{$s->rev_timestamp}'",
+                                       'rc_timestamp > ' . $dbw->addQuotes( $s->rev_timestamp ),
                                ), __METHOD__
                        );
                }
@@ -2392,9 +2406,9 @@ class WikiPage extends Page implements IDBAccessObject {
                $target = Revision::newFromId( $s->rev_id );
                if ( empty( $summary ) ) {
                        if ( $from == '' ) { // no public user name
-                               $summary = wfMsgForContent( 'revertpage-nouser' );
+                               $summary = wfMessage( 'revertpage-nouser' )->inContentLanguage()->text();
                        } else {
-                               $summary = wfMsgForContent( 'revertpage' );
+                               $summary = wfMessage( 'revertpage' )->inContentLanguage()->text();
                        }
                }
 
@@ -2406,6 +2420,9 @@ class WikiPage extends Page implements IDBAccessObject {
                );
                $summary = wfMsgReplaceArgs( $summary, $args );
 
+               # Truncate for whole multibyte characters.
+               $summary = $wgContLang->truncate( $summary, 255 );
+
                # Save
                $flags = EDIT_UPDATE;
 
@@ -2582,10 +2599,11 @@ class WikiPage extends Page implements IDBAccessObject {
                        $truncatedtext = $wgContLang->truncate(
                                str_replace( "\n", ' ', $newtext ),
                                max( 0, 255
-                                       - strlen( wfMsgForContent( 'autoredircomment' ) )
+                                       - strlen( wfMessage( 'autoredircomment' )->inContentLanguage()->text() )
                                        - strlen( $rt->getFullText() )
                                ) );
-                       return wfMsgForContent( 'autoredircomment', $rt->getFullText(), $truncatedtext );
+                       return wfMessage( 'autoredircomment', $rt->getFullText() )
+                               ->rawParams( $truncatedtext )->inContentLanguage()->text();
                }
 
                # New page autosummaries
@@ -2594,22 +2612,24 @@ class WikiPage extends Page implements IDBAccessObject {
 
                        $truncatedtext = $wgContLang->truncate(
                                str_replace( "\n", ' ', $newtext ),
-                               max( 0, 200 - strlen( wfMsgForContent( 'autosumm-new' ) ) ) );
+                               max( 0, 200 - strlen( wfMessage( 'autosumm-new' )->inContentLanguage()->text() ) ) );
 
-                       return wfMsgForContent( 'autosumm-new', $truncatedtext );
+                       return wfMessage( 'autosumm-new' )->rawParams( $truncatedtext )
+                               ->inContentLanguage()->text();
                }
 
                # Blanking autosummaries
                if ( $oldtext != '' && $newtext == '' ) {
-                       return wfMsgForContent( 'autosumm-blank' );
+                       return wfMessage( 'autosumm-blank' )->inContentLanguage()->text();
                } elseif ( strlen( $oldtext ) > 10 * strlen( $newtext ) && strlen( $newtext ) < 500 ) {
                        # Removing more than 90% of the article
 
                        $truncatedtext = $wgContLang->truncate(
                                $newtext,
-                               max( 0, 200 - strlen( wfMsgForContent( 'autosumm-replace' ) ) ) );
+                               max( 0, 200 - strlen( wfMessage( 'autosumm-replace' )->inContentLanguage()->text() ) ) );
 
-                       return wfMsgForContent( 'autosumm-replace', $truncatedtext );
+                       return wfMessage( 'autosumm-replace' )->rawParams( $truncatedtext )
+                               ->inContentLanguage()->text();
                }
 
                # If we reach this point, there's no applicable autosummary for our case, so our
@@ -2684,12 +2704,16 @@ class WikiPage extends Page implements IDBAccessObject {
                if ( $blank ) {
                        // The current revision is blank and the one before is also
                        // blank. It's just not our lucky day
-                       $reason = wfMsgForContent( 'exbeforeblank', '$1' );
+                       $reason = wfMessage( 'exbeforeblank', '$1' )->inContentLanguage()->text();
                } else {
                        if ( $onlyAuthor ) {
-                               $reason = wfMsgForContent( 'excontentauthor', '$1', $onlyAuthor );
+                               $reason = wfMessage(
+                                       'excontentauthor',
+                                       '$1',
+                                       $onlyAuthor
+                               )->inContentLanguage()->text();
                        } else {
-                               $reason = wfMsgForContent( 'excontent', '$1' );
+                               $reason = wfMessage( 'excontent', '$1' )->inContentLanguage()->text();
                        }
                }
 
@@ -2943,6 +2967,7 @@ class WikiPage extends Page implements IDBAccessObject {
 
        /**
         * @deprecated since 1.18
+        * @param $oldid int
         * @return bool
         */
        public function useParserCache( $oldid ) {
index b98f521..247b193 100644 (file)
@@ -15802,6 +15802,7 @@ $zh2TW = array(
 '彩线' => '綵線',
 '彩船' => '綵船',
 '彩衣' => '綵衣',
+'綫' => '線',
 '缉凶' => '緝凶',
 '緝兇' => '緝凶',
 '緝凶' => '緝凶',
@@ -15937,6 +15938,30 @@ $zh2TW = array(
 );
 
 $zh2HK = array(
+'505線' => '505綫',
+'505线' => '505綫',
+'507線' => '507綫',
+'507线' => '507綫',
+'610線' => '610綫',
+'610线' => '610綫',
+'614P線' => '614P綫',
+'614P线' => '614P綫',
+'614线' => '614綫',
+'614線' => '614綫',
+'615P線' => '615P綫',
+'615P线' => '615P綫',
+'615线' => '615綫',
+'615線' => '615綫',
+'705线' => '705綫',
+'705線' => '705綫',
+'706线' => '706綫',
+'706線' => '706綫',
+'751P線' => '751P綫',
+'751P线' => '751P綫',
+'751線' => '751綫',
+'751线' => '751綫',
+'761P线' => '761P綫',
+'761P線' => '761P綫',
 '“' => '「',
 '”' => '」',
 '‘' => '『',
@@ -16173,6 +16198,8 @@ $zh2HK = array(
 '動著者' => '動著者',
 '動著述' => '動著述',
 '動著錄' => '動著錄',
+'北环线' => '北環綫',
+'北環線' => '北環綫',
 '医院里' => '医院裏',
 '波札那' => '博茨瓦納',
 '珍妮弗·卡普里亚蒂' => '卡佩雅蒂',
@@ -16420,6 +16447,8 @@ $zh2HK = array(
 '寫著者' => '寫著者',
 '寫著述' => '寫著述',
 '寫著錄' => '寫著錄',
+'将军澳线' => '將軍澳綫',
+'將軍澳線' => '將軍澳綫',
 '专辑里' => '專輯裏',
 '專輯裡' => '專輯裏',
 '尋著' => '尋着',
@@ -16950,6 +16979,10 @@ $zh2HK = array(
 '本著錄' => '本著錄',
 '村子里' => '村子裏',
 '村子裡' => '村子裏',
+'东涌线' => '東涌綫',
+'東涌線' => '東涌綫',
+'東鐵線' => '東鐵綫',
+'东铁线' => '東鐵綫',
 '枕著' => '枕着',
 '枕著作' => '枕著作',
 '枕著名' => '枕著名',
@@ -16983,6 +17016,8 @@ $zh2HK = array(
 '樂著錄' => '樂著錄',
 '寶獅' => '標致',
 '標誌著' => '標誌着',
+'機場快線' => '機場快綫',
+'机场快线' => '機場快綫',
 '機器人' => '機械人',
 '机器人' => '機械人',
 '历史里' => '歷史裏',
@@ -17015,8 +17050,12 @@ $zh2HK = array(
 '沉著者' => '沉著者',
 '沉著述' => '沉著述',
 '沉著錄' => '沉著錄',
+'沙中线' => '沙中綫',
+'沙中線' => '沙中綫',
 '沙地阿拉伯' => '沙特阿拉伯',
 '沙烏地阿拉伯' => '沙特阿拉伯',
+'沙田至中環線' => '沙田至中環綫',
+'沙田至中环线' => '沙田至中環綫',
 '马拉特·萨芬' => '沙芬',
 '沿著' => '沿着',
 '沿著作' => '沿著作',
@@ -17074,6 +17113,8 @@ $zh2HK = array(
 '涼著錄' => '涼著錄',
 '深淵裡' => '深淵裏',
 '深渊里' => '深渊裏',
+'港岛线' => '港島綫',
+'港島線' => '港島綫',
 '渴著' => '渴着',
 '渴著作' => '渴著作',
 '渴著名' => '渴著名',
@@ -17114,6 +17155,14 @@ $zh2HK = array(
 '潤著者' => '潤著者',
 '潤著述' => '潤著述',
 '潤著錄' => '潤著錄',
+'無線劇集' => '無綫劇集',
+'无线剧集' => '無綫劇集',
+'無線收費' => '無綫收費',
+'无线收费' => '無綫收費',
+'无线节目' => '無綫節目',
+'無線節目' => '無綫節目',
+'无线电视' => '無綫電視',
+'無線電視' => '無綫電視',
 '菸' => '煙',
 '照著' => '照着',
 '照著作' => '照著作',
@@ -17547,6 +17596,8 @@ $zh2HK = array(
 '苦著錄' => '苦著錄',
 '苦里' => '苦裏',
 '苦裡' => '苦裏',
+'荃湾线' => '荃灣綫',
+'荃灣線' => '荃灣綫',
 '莫三比克' => '莫桑比克',
 '賴索托' => '萊索托',
 '馬自達' => '萬事得',
@@ -17630,6 +17681,8 @@ $zh2HK = array(
 '裹著者' => '裹著者',
 '裹著述' => '裹著述',
 '裹著錄' => '裹著錄',
+'西铁线' => '西鐵綫',
+'西鐵線' => '西鐵綫',
 '見著' => '見着',
 '見著作' => '見著作',
 '見著名' => '見著名',
@@ -17638,6 +17691,8 @@ $zh2HK = array(
 '見著者' => '見著者',
 '見著述' => '見著述',
 '見著錄' => '見著錄',
+'觀塘線' => '觀塘綫',
+'观塘线' => '觀塘綫',
 '記著' => '記着',
 '記著作' => '記著作',
 '記著名' => '記著名',
@@ -17821,6 +17876,8 @@ $zh2HK = array(
 '辦著錄' => '辦著錄',
 '近角聪信' => '近角聰信',
 '近角聰信' => '近角聰信',
+'迪士尼线' => '迪士尼綫',
+'迪士尼線' => '迪士尼綫',
 '迫著' => '迫着',
 '追著' => '追着',
 '追著作' => '追著作',
@@ -18080,6 +18137,8 @@ $zh2HK = array(
 '馬爾地夫' => '馬爾代夫',
 '馬利共和國' => '馬里共和國',
 '土豆' => '馬鈴薯',
+'馬鞍山線' => '馬鞍山綫',
+'马鞍山线' => '馬鞍山綫',
 '駕著' => '駕着',
 '駕著作' => '駕著作',
 '駕著名' => '駕著名',
@@ -18456,4 +18515,4 @@ $zh2SG = array(
 '笨豬跳' => '绑紧跳',
 '蹦极跳' => '绑紧跳',
 '笑星' => '谐星',
-);
+);
\ No newline at end of file
index 5b96b40..0e84583 100644 (file)
@@ -696,10 +696,10 @@ class ZipDirectoryReader {
  * Internal exception class. Will be caught by private code.
  */
 class ZipDirectoryReaderError extends Exception {
-       var $code;
+       var $errorCode;
 
        function __construct( $code ) {
-               $this->code = $code;
+               $this->errorCode = $code;
                parent::__construct( "ZipDirectoryReader error: $code" );
        }
 
@@ -707,6 +707,6 @@ class ZipDirectoryReaderError extends Exception {
         * @return mixed
         */
        function getErrorCode() {
-               return $this->code;
+               return $this->errorCode;
        }
 }
index 26a6e47..6c21306 100644 (file)
@@ -84,6 +84,11 @@ class InfoAction extends FormlessAction {
                $content = '';
                $table = '';
 
+               // Header
+               if ( !$this->msg( 'pageinfo-header' )->isDisabled() ) {
+                       $content .= $this->msg( 'pageinfo-header ' )->parse();
+               }
+
                // Basic information
                $content = $this->addHeader( $content, $this->msg( 'pageinfo-header-basic' )->text() );
 
@@ -186,7 +191,9 @@ class InfoAction extends FormlessAction {
                        }
 
                        $table = $this->addRow( $table,
-                               $this->msg( 'pageinfo-restriction', $restrictionType )->parse(), $message
+                               $this->msg( 'pageinfo-restriction',
+                                       $this->msg( "restriction-$restrictionType" )->plain()
+                               )->parse(), $message
                        );
                }
 
@@ -302,6 +309,11 @@ class InfoAction extends FormlessAction {
                        $content = $this->addTable( $content, $table );
                }
 
+               // Footer
+               if ( !$this->msg( 'pageinfo-footer' )->isDisabled() ) {
+                       $content .= $this->msg( 'pageinfo-footer' )->parse();
+               }
+
                return $content;
        }
 
index 3be4b00..0963fe7 100644 (file)
@@ -60,7 +60,11 @@ class ApiEditPage extends ApiBase {
                        if ( $titleObj->isRedirect() ) {
                                $oldTitle = $titleObj;
 
-                               $titles = Title::newFromRedirectArray( Revision::newFromTitle( $oldTitle )->getText( Revision::FOR_THIS_USER ) );
+                               $titles = Title::newFromRedirectArray(
+                                       Revision::newFromTitle(
+                                               $oldTitle, false, Revision::READ_LATEST
+                                       )->getText( Revision::FOR_THIS_USER )
+                               );
                                // array_shift( $titles );
 
                                $redirValues = array();
@@ -182,7 +186,7 @@ class ApiEditPage extends ApiBase {
                if ( !is_null( $params['summary'] ) ) {
                        $requestArray['wpSummary'] = $params['summary'];
                }
-               
+
                if ( !is_null( $params['sectiontitle'] ) ) {
                        $requestArray['wpSectionTitle'] = $params['sectiontitle'];
                }
index a8d69f5..8ad9b8c 100644 (file)
@@ -143,6 +143,12 @@ abstract class ApiFormatBase extends ApiBase {
 
                $this->getMain()->getRequest()->response()->header( "Content-Type: $mime; charset=utf-8" );
 
+               //Set X-Frame-Options API results (bug 39180)
+               global $wgApiFrameOptions;
+               if ( $wgApiFrameOptions ) {
+                       $this->getMain()->getRequest()->response()->header( "X-Frame-Options: $wgApiFrameOptions" );
+               }
+
                if ( $isHtml ) {
 ?>
 <!DOCTYPE HTML>
@@ -265,7 +271,7 @@ See the <a href='https://www.mediawiki.org/wiki/API'>complete documentation</a>,
                // identify URLs
                $protos = wfUrlProtocolsWithoutProtRel();
                // This regex hacks around bug 13218 (&quot; included in the URL)
-               $text = preg_replace( "#(($protos).*?)(&quot;)?([ \\'\"<>\n]|&lt;|&gt;|&quot;)#", '<a href="\\1">\\1</a>\\3\\4', $text );
+               $text = preg_replace( "#(((?i)$protos).*?)(&quot;)?([ \\'\"<>\n]|&lt;|&gt;|&quot;)#", '<a href="\\1">\\1</a>\\3\\4', $text );
                // identify requests to api.php
                $text = preg_replace( "#api\\.php\\?[^ <\n\t]+#", '<a href="\\0">\\0</a>', $text );
                if ( $this->mHelp ) {
index 3dadb42..35febd9 100644 (file)
@@ -368,6 +368,9 @@ class ApiMain extends ApiBase {
                try {
                        $this->executeAction();
                } catch ( Exception $e ) {
+                       // Allow extra cleanup and logging
+                       wfRunHooks( 'ApiMain::onException', array( $this, $e ) );
+
                        // Log it
                        if ( !( $e instanceof UsageException ) ) {
                                wfDebugLog( 'exception', $e->getLogMessage() );
index 8aac2f4..c63ae8a 100644 (file)
@@ -425,7 +425,7 @@ class ApiParse extends ApiBase {
                                $text == '' ? $l : $text );
                }
 
-               $s .= implode( htmlspecialchars( wfMsgExt( 'pipe-separator', 'escapenoentities' ) ), $langs );
+               $s .= implode( wfMessage( 'pipe-separator' )->escaped(), $langs );
 
                if ( $wgContLang->isRTL() ) {
                        $s = Html::rawElement( 'span', array( 'dir' => "LTR" ), $s );
index 1325662..7f50cba 100644 (file)
@@ -252,7 +252,7 @@ class ApiQueryAllUsers extends ApiQueryBase {
                        if ( $fld_groups ) {
                                if ( !isset( $lastUserData['groups'] ) ) {
                                        if ( $lastUserObj ) {
-                                               $lastUserData['groups'] = ApiQueryUsers::getAutoGroups( $lastUserObj );
+                                               $lastUserData['groups'] = $lastUserObj->getAutomaticGroups();
                                        } else {
                                                // This should not normally happen
                                                $lastUserData['groups'] = array();
@@ -267,7 +267,7 @@ class ApiQueryAllUsers extends ApiQueryBase {
                        }
 
                        if ( $fld_implicitgroups && !isset( $lastUserData['implicitgroups'] ) && $lastUserObj ) {
-                               $lastUserData['implicitgroups'] = ApiQueryUsers::getAutoGroups( $lastUserObj );
+                               $lastUserData['implicitgroups'] = $lastUserObj->getAutomaticGroups();
                                $result->setIndexedTagName( $lastUserData['implicitgroups'], 'g' );
                        }
                        if ( $fld_rights ) {
index a4efc4c..8f0fd3b 100644 (file)
@@ -118,8 +118,8 @@ class ApiQueryDuplicateFiles extends ApiQueryGeneratorBase {
                        }
                        foreach ( $dupFiles as $dupFile ) {
                                $dupName = $dupFile->getName();
-                               if( $image == $dupName ) {
-                                       continue; //ignore the file itself
+                               if( $image == $dupName && $dupFile->isLocal() ) {
+                                       continue; //ignore the local file itself
                                }
                                if( $skipUntilThisDup !== false && $dupName < $skipUntilThisDup ) {
                                        continue; //skip to pos after the image from continue param
@@ -140,6 +140,9 @@ class ApiQueryDuplicateFiles extends ApiQueryGeneratorBase {
                                                'user' => $dupFile->getUser( 'text' ),
                                                'timestamp' => wfTimestamp( TS_ISO_8601, $dupFile->getTimestamp() )
                                        );
+                                       if( !$dupFile->isLocal() ) {
+                                               $r['shared'] = '';
+                                       }
                                        $fit = $this->addPageSubItem( $pageId, $r );
                                        if ( !$fit ) {
                                                $this->setContinueEnumParameter( 'continue', $image . '|' . $dupName );
@@ -191,7 +194,8 @@ class ApiQueryDuplicateFiles extends ApiQueryGeneratorBase {
                        '' => array(
                                'name' => 'string',
                                'user' => 'string',
-                               'timestamp' => 'timestamp'
+                               'timestamp' => 'timestamp',
+                               'shared' => 'boolean',
                        )
                );
        }
index bc514b3..f2fd425 100644 (file)
@@ -359,7 +359,7 @@ class ApiQueryLogEvents extends ApiQueryBase {
 
        public function getCacheMode( $params ) {
                if ( !is_null( $params['prop'] ) && in_array( 'parsedcomment', $params['prop'] ) ) {
-                       // formatComment() calls wfMsg() among other things
+                       // formatComment() calls wfMessage() among other things
                        return 'anon-public-user-private';
                } else {
                        return 'public';
index 5e270e0..14aed28 100644 (file)
@@ -139,7 +139,7 @@ class ApiQueryProtectedTitles extends ApiQueryGeneratorBase {
 
        public function getCacheMode( $params ) {
                if ( !is_null( $params['prop'] ) && in_array( 'parsedcomment', $params['prop'] ) ) {
-                       // formatComment() calls wfMsg() among other things
+                       // formatComment() calls wfMessage() among other things
                        return 'anon-public-user-private';
                } else {
                        return 'public';
index 7bb6bc5..7ae4f37 100644 (file)
@@ -503,7 +503,7 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
                        return 'private';
                }
                if ( !is_null( $params['prop'] ) && in_array( 'parsedcomment', $params['prop'] ) ) {
-                       // formatComment() calls wfMsg() among other things
+                       // formatComment() calls wfMessage() among other things
                        return 'anon-public-user-private';
                }
                return 'public';
index 18a6cd4..b89a8ea 100644 (file)
@@ -548,7 +548,7 @@ class ApiQueryRevisions extends ApiQueryBase {
                        return 'private';
                }
                if ( !is_null( $params['prop'] ) && in_array( 'parsedcomment', $params['prop'] ) ) {
-                       // formatComment() calls wfMsg() among other things
+                       // formatComment() calls wfMessage() among other things
                        return 'anon-public-user-private';
                }
                return 'public';
index d211918..6690665 100644 (file)
@@ -76,14 +76,12 @@ class ApiQueryUserInfo extends ApiQueryBase {
                }
 
                if ( isset( $this->prop['groups'] ) ) {
-                       $autolist = ApiQueryUsers::getAutoGroups( $user );
-
-                       $vals['groups'] = array_merge( $autolist, $user->getGroups() );
+                       $vals['groups'] = $user->getEffectiveGroups();
                        $result->setIndexedTagName( $vals['groups'], 'g' );     // even if empty
                }
 
                if ( isset( $this->prop['implicitgroups'] ) ) {
-                       $vals['implicitgroups'] = ApiQueryUsers::getAutoGroups( $user );
+                       $vals['implicitgroups'] = $user->getAutomaticGroups();
                        $result->setIndexedTagName( $vals['implicitgroups'], 'g' );     // even if empty
                }
 
index 855e270..bf438d1 100644 (file)
@@ -138,7 +138,7 @@ class ApiQueryUsers extends ApiQueryBase {
 
                                if ( isset( $this->prop['groups'] ) ) {
                                        if ( !isset( $data[$name]['groups'] ) ) {
-                                               $data[$name]['groups'] = self::getAutoGroups( $user );
+                                               $data[$name]['groups'] = $user->getAutomaticGroups();
                                        }
 
                                        if ( !is_null( $row->ug_group ) ) {
@@ -148,7 +148,7 @@ class ApiQueryUsers extends ApiQueryBase {
                                }
 
                                if ( isset( $this->prop['implicitgroups'] ) && !isset( $data[$name]['implicitgroups'] ) ) {
-                                       $data[$name]['implicitgroups'] =  self::getAutoGroups( $user );
+                                       $data[$name]['implicitgroups'] =  $user->getAutomaticGroups();
                                }
 
                                if ( isset( $this->prop['rights'] ) ) {
@@ -249,20 +249,15 @@ class ApiQueryUsers extends ApiQueryBase {
 
        /**
        * Gets all the groups that a user is automatically a member of (implicit groups)
+       *
+       * @deprecated since 1.20; call User::getAutomaticGroups() directly.
        * @param $user User
        * @return array
        */
        public static function getAutoGroups( $user ) {
-               // FIXME this logic is duplicated from User::getEffectiveGroups(), centralize this
-               $groups = array();
-               $groups[] = '*';
+               wfDeprecated( __METHOD__, '1.20' );
 
-               if ( !$user->isAnon() ) {
-                       $groups[] = 'user';
-                       $groups = array_merge( $groups, Autopromote::getAutopromoteGroups( $user ) );
-               }
-
-               return $groups;
+               return $user->getAutomaticGroups();
        }
 
        public function getCacheMode( $params ) {
index 24f32d6..b854a2e 100644 (file)
@@ -766,7 +766,9 @@ class MessageCache {
                }
 
                # Try loading it from the database
-               $revision = Revision::newFromTitle( Title::makeTitle( NS_MEDIAWIKI, $title ) );
+               $revision = Revision::newFromTitle(
+                       Title::makeTitle( NS_MEDIAWIKI, $title ), false, Revision::READ_LATEST
+               );
                if ( $revision ) {
                        $message = $revision->getText();
                        if ($message === false) {
index 61061b2..a46f33d 100644 (file)
@@ -225,12 +225,12 @@ abstract class DatabaseBase implements DatabaseType {
 
        protected $mServer, $mUser, $mPassword, $mDBname;
 
-       /**
-        * @var DatabaseBase
-        */
        protected $mConn = null;
        protected $mOpened = false;
 
+       /** @var Array */
+       protected $trxIdleCallbacks = array();
+
        protected $mTablePrefix;
        protected $mFlags;
        protected $mTrxLevel = 0;
@@ -1103,7 +1103,10 @@ abstract class DatabaseBase implements DatabaseType {
                }
 
                if ( isset( $options['HAVING'] ) ) {
-                       $preLimitTail .= " HAVING {$options['HAVING']}";
+                       $having = is_array( $options['HAVING'] )
+                               ? $this->makeList( $options['HAVING'], LIST_AND )
+                               : $options['HAVING'];
+                       $preLimitTail .= " HAVING {$having}";
                }
 
                if ( isset( $options['ORDER BY'] ) ) {
@@ -1264,7 +1267,9 @@ abstract class DatabaseBase implements DatabaseType {
         *   - GROUP BY: May be either an SQL fragment string naming a field or
         *     expression to group by, or an array of such SQL fragments.
         *
-        *   - HAVING: A string containing a HAVING clause.
+        *   - HAVING: May be either an string containing a HAVING clause or an array of
+        *     conditions building the HAVING clause. If an array is given, the conditions
+        *     constructed from each element are combined with AND.
         *
         *   - ORDER BY: May be either an SQL fragment giving a field name or
         *     expression to order by, or an array of such SQL fragments.
@@ -2621,12 +2626,15 @@ abstract class DatabaseBase implements DatabaseType {
         * Returns an SQL expression for a simple conditional.  This doesn't need
         * to be overridden unless CASE isn't supported in your DBMS.
         *
-        * @param $cond String: SQL expression which will result in a boolean value
+        * @param $cond string|array SQL expression which will result in a boolean value
         * @param $trueVal String: SQL expression to return if true
         * @param $falseVal String: SQL expression to return if false
         * @return String: SQL fragment
         */
        public function conditional( $cond, $trueVal, $falseVal ) {
+               if ( is_array( $cond ) ) {
+                       $cond = $this->makeList( $cond, LIST_AND );
+               }
                return " (CASE WHEN $cond THEN $trueVal ELSE $falseVal END) ";
        }
 
@@ -2822,12 +2830,62 @@ abstract class DatabaseBase implements DatabaseType {
                }
        }
 
+       /**
+        * Run an anonymous function as soon as there is no transaction pending.
+        * If there is a transaction and it is rolled back, then the callback is cancelled.
+        * Callbacks must commit any transactions that they begin.
+        *
+        * This is useful for updates to different systems or separate transactions are needed.
+        *
+        * @param Closure $callback
+        * @return void
+        */
+       final public function onTransactionIdle( Closure $callback ) {
+               if ( $this->mTrxLevel ) {
+                       $this->trxIdleCallbacks[] = $callback;
+               } else {
+                       $callback();
+               }
+       }
+
+       /**
+        * Actually run the "on transaction idle" callbacks
+        */
+       protected function runOnTransactionIdleCallbacks() {
+               $e = null; // last exception
+               do { // callbacks may add callbacks :)
+                       $callbacks = $this->trxIdleCallbacks;
+                       $this->trxIdleCallbacks = array(); // recursion guard
+                       foreach ( $callbacks as $callback ) {
+                               try {
+                                       $callback();
+                               } catch ( Exception $e ) {}
+                       }
+               } while ( count( $this->trxIdleCallbacks ) );
+
+               if ( $e instanceof Exception ) {
+                       throw $e; // re-throw any last exception
+               }
+       }
+
        /**
         * Begin a transaction
         *
         * @param $fname string
         */
-       public function begin( $fname = 'DatabaseBase::begin' ) {
+       final public function begin( $fname = 'DatabaseBase::begin' ) {
+               if ( $this->mTrxLevel ) { // implicit commit
+                       $this->doCommit( $fname );
+                       $this->runOnTransactionIdleCallbacks();
+               }
+               $this->doBegin( $fname );
+       }
+
+       /**
+        * @see DatabaseBase::begin()
+        * @param type $fname
+        */
+       protected function doBegin( $fname ) {
                $this->query( 'BEGIN', $fname );
                $this->mTrxLevel = 1;
        }
@@ -2837,7 +2895,16 @@ abstract class DatabaseBase implements DatabaseType {
         *
         * @param $fname string
         */
-       public function commit( $fname = 'DatabaseBase::commit' ) {
+       final public function commit( $fname = 'DatabaseBase::commit' ) {
+               $this->doCommit( $fname );
+               $this->runOnTransactionIdleCallbacks();
+       }
+
+       /**
+        * @see DatabaseBase::commit()
+        * @param type $fname
+        */
+       protected function doCommit( $fname ) {
                if ( $this->mTrxLevel ) {
                        $this->query( 'COMMIT', $fname );
                        $this->mTrxLevel = 0;
@@ -2850,7 +2917,16 @@ abstract class DatabaseBase implements DatabaseType {
         *
         * @param $fname string
         */
-       public function rollback( $fname = 'DatabaseBase::rollback' ) {
+       final public function rollback( $fname = 'DatabaseBase::rollback' ) {
+               $this->doRollback( $fname );
+               $this->trxIdleCallbacks = array(); // cancel
+       }
+
+       /**
+        * @see DatabaseBase::rollback()
+        * @param type $fname
+        */
+       protected function doRollback( $fname ) {
                if ( $this->mTrxLevel ) {
                        $this->query( 'ROLLBACK', $fname, true );
                        $this->mTrxLevel = 0;
index 80220af..f1f6dfc 100644 (file)
@@ -807,7 +807,7 @@ class DatabaseIbm_db2 extends DatabaseBase {
        /**
         * Start a transaction (mandatory)
         */
-       public function begin( $fname = 'DatabaseIbm_db2::begin' ) {
+       protected function doBegin( $fname = 'DatabaseIbm_db2::begin' ) {
                // BEGIN is implicit for DB2
                // However, it requires that AutoCommit be off.
 
@@ -823,7 +823,7 @@ class DatabaseIbm_db2 extends DatabaseBase {
         * End a transaction
         * Must have a preceding begin()
         */
-       public function commit( $fname = 'DatabaseIbm_db2::commit' ) {
+       protected function doCommit( $fname = 'DatabaseIbm_db2::commit' ) {
                db2_commit( $this->mConn );
 
                // Some MediaWiki code is still transaction-less (?).
@@ -837,7 +837,7 @@ class DatabaseIbm_db2 extends DatabaseBase {
        /**
         * Cancel a transaction
         */
-       public function rollback( $fname = 'DatabaseIbm_db2::rollback' ) {
+       protected function doRollback( $fname = 'DatabaseIbm_db2::rollback' ) {
                db2_rollback( $this->mConn );
                // turn auto-commit back on
                // not sure if this is appropriate
index 3846e96..914ab40 100644 (file)
@@ -694,7 +694,7 @@ class DatabaseMssql extends DatabaseBase {
        /**
         * Begin a transaction, committing any previously open transaction
         */
-       function begin( $fname = 'DatabaseMssql::begin' ) {
+       protected function doBegin( $fname = 'DatabaseMssql::begin' ) {
                sqlsrv_begin_transaction( $this->mConn );
                $this->mTrxLevel = 1;
        }
@@ -702,7 +702,7 @@ class DatabaseMssql extends DatabaseBase {
        /**
         * End a transaction
         */
-       function commit( $fname = 'DatabaseMssql::commit' ) {
+       protected function doCommit( $fname = 'DatabaseMssql::commit' ) {
                sqlsrv_commit( $this->mConn );
                $this->mTrxLevel = 0;
        }
@@ -711,7 +711,7 @@ class DatabaseMssql extends DatabaseBase {
         * Rollback a transaction.
         * No-op on non-transactional databases.
         */
-       function rollback( $fname = 'DatabaseMssql::rollback' ) {
+       protected function doRollback( $fname = 'DatabaseMssql::rollback' ) {
                sqlsrv_rollback( $this->mConn );
                $this->mTrxLevel = 0;
        }
index 4b34310..7f389da 100644 (file)
@@ -59,7 +59,7 @@ class DatabaseMysql extends DatabaseBase {
         * @throws DBConnectionError
         */
        function open( $server, $user, $password, $dbName ) {
-               global $wgAllDBsAreLocalhost;
+               global $wgAllDBsAreLocalhost, $wgDBmysql5, $wgSQLMode;
                wfProfileIn( __METHOD__ );
 
                # Load mysql.so if we don't have it
@@ -91,7 +91,7 @@ class DatabaseMysql extends DatabaseBase {
                        $connFlags |= MYSQL_CLIENT_COMPRESS;
                }
 
-               wfProfileIn("dbconnect-$server");
+               wfProfileIn( "dbconnect-$server" );
 
                # The kernel's default SYN retransmission period is far too slow for us,
                # so we use a short timeout plus a manual retry. Retrying means that a small
@@ -118,60 +118,54 @@ class DatabaseMysql extends DatabaseBase {
                                #wfLogDBError("Connect loop error $iplus of $max ($server): " . mysql_errno() . " - " . mysql_error()."\n");
                        #}
                }
-               $phpError = $this->restoreErrorHandler();
+               $error = $this->restoreErrorHandler();
+
+               wfProfileOut( "dbconnect-$server" );
+
                # Always log connection errors
                if ( !$this->mConn ) {
-                       $error = $phpError;
                        if ( !$error ) {
                                $error = $this->lastError();
                        }
                        wfLogDBError( "Error connecting to {$this->mServer}: $error\n" );
-                       wfDebug( "DB connection error\n" );
-                       wfDebug( "Server: $server, User: $user, Password: " .
+                       wfDebug( "DB connection error\n" .
+                               "Server: $server, User: $user, Password: " .
                                substr( $password, 0, 3 ) . "..., error: " . $error . "\n" );
-               }
 
-               wfProfileOut("dbconnect-$server");
+                       wfProfileOut( __METHOD__ );
+                       $this->reportConnectionError( $error );
+               }
 
-               if ( $dbName != '' && $this->mConn !== false ) {
+               if ( $dbName != '' ) {
                        wfSuppressWarnings();
                        $success = mysql_select_db( $dbName, $this->mConn );
                        wfRestoreWarnings();
                        if ( !$success ) {
-                               $error = "Error selecting database $dbName on server {$this->mServer} " .
-                                       "from client host " . wfHostname() . "\n";
-                               wfLogDBError(" Error selecting database $dbName on server {$this->mServer} \n");
-                               wfDebug( $error );
-                       }
-               } else {
-                       # Delay USE query
-                       $success = (bool)$this->mConn;
-               }
+                               wfLogDBError( "Error selecting database $dbName on server {$this->mServer}\n" );
+                               wfDebug( "Error selecting database $dbName on server {$this->mServer} " .
+                                       "from client host " . wfHostname() . "\n" );
 
-               if ( $success ) {
-                       // Tell the server we're communicating with it in UTF-8.
-                       // This may engage various charset conversions.
-                       global $wgDBmysql5;
-                       if( $wgDBmysql5 ) {
-                               $this->query( 'SET NAMES utf8', __METHOD__ );
-                       } else {
-                               $this->query( 'SET NAMES binary', __METHOD__ );
-                       }
-                       // Set SQL mode, default is turning them all off, can be overridden or skipped with null
-                       global $wgSQLMode;
-                       if ( is_string( $wgSQLMode ) ) {
-                               $mode = $this->addQuotes( $wgSQLMode );
-                               $this->query( "SET sql_mode = $mode", __METHOD__ );
+                               wfProfileOut( __METHOD__ );
+                               $this->reportConnectionError( "Error selecting database $dbName" );
                        }
+               }
 
-                       // Turn off strict mode if it is on
+               // Tell the server we're communicating with it in UTF-8.
+               // This may engage various charset conversions.
+               if( $wgDBmysql5 ) {
+                       $this->query( 'SET NAMES utf8', __METHOD__ );
                } else {
-                       $this->reportConnectionError( $phpError );
+                       $this->query( 'SET NAMES binary', __METHOD__ );
+               }
+               // Set SQL mode, default is turning them all off, can be overridden or skipped with null
+               if ( is_string( $wgSQLMode ) ) {
+                       $mode = $this->addQuotes( $wgSQLMode );
+                       $this->query( "SET sql_mode = $mode", __METHOD__ );
                }
 
-               $this->mOpened = $success;
+               $this->mOpened = true;
                wfProfileOut( __METHOD__ );
-               return $success;
+               return true;
        }
 
        /**
@@ -209,7 +203,13 @@ class DatabaseMysql extends DatabaseBase {
                wfSuppressWarnings();
                $row = mysql_fetch_object( $res );
                wfRestoreWarnings();
-               if( $this->lastErrno() ) {
+
+               $errno = $this->lastErrno();
+               // Unfortunately, mysql_fetch_object does not reset the last errno.
+               // Only check for CR_SERVER_LOST and CR_UNKNOWN_ERROR, as
+               // these are the only errors mysql_fetch_object can cause.
+               // See http://dev.mysql.com/doc/refman/5.0/es/mysql-fetch-row.html.
+               if( $errno == 2000 || $errno == 2013 ) {
                        throw new DBUnexpectedError( $this, 'Error in fetchObject(): ' . htmlspecialchars( $this->lastError() ) );
                }
                return $row;
@@ -227,7 +227,13 @@ class DatabaseMysql extends DatabaseBase {
                wfSuppressWarnings();
                $row = mysql_fetch_array( $res );
                wfRestoreWarnings();
-               if ( $this->lastErrno() ) {
+
+               $errno = $this->lastErrno();
+               // Unfortunately, mysql_fetch_array does not reset the last errno.
+               // Only check for CR_SERVER_LOST and CR_UNKNOWN_ERROR, as
+               // these are the only errors mysql_fetch_object can cause.
+               // See http://dev.mysql.com/doc/refman/5.0/es/mysql-fetch-row.html.
+               if( $errno == 2000 || $errno == 2013 ) {
                        throw new DBUnexpectedError( $this, 'Error in fetchRow(): ' . htmlspecialchars( $this->lastError() ) );
                }
                return $row;
index cf3e45d..7d8884f 100644 (file)
@@ -955,12 +955,12 @@ class DatabaseOracle extends DatabaseBase {
                return $this->fieldInfoMulti ($table, $field);
        }
 
-       function begin( $fname = 'DatabaseOracle::begin' ) {
+       protected function doBegin( $fname = 'DatabaseOracle::begin' ) {
                $this->mTrxLevel = 1;
                $this->doQuery( 'SET CONSTRAINTS ALL DEFERRED' );
        }
 
-       function commit( $fname = 'DatabaseOracle::commit' ) {
+       protected function doCommit( $fname = 'DatabaseOracle::commit' ) {
                if ( $this->mTrxLevel ) {
                        $ret = oci_commit( $this->mConn );
                        if ( !$ret ) {
@@ -971,7 +971,7 @@ class DatabaseOracle extends DatabaseBase {
                }
        }
 
-       function rollback( $fname = 'DatabaseOracle::rollback' ) {
+       protected function doRollback( $fname = 'DatabaseOracle::rollback' ) {
                if ( $this->mTrxLevel ) {
                        oci_rollback( $this->mConn );
                        $this->mTrxLevel = 0;
index 8f8f5e8..457bf38 100644 (file)
@@ -1406,9 +1406,6 @@ SQL;
                if ( isset( $noKeyOptions['FOR UPDATE'] ) ) {
                        $postLimitTail .= ' FOR UPDATE';
                }
-               if ( isset( $noKeyOptions['LOCK IN SHARE MODE'] ) ) {
-                       $postLimitTail .= ' LOCK IN SHARE MODE';
-               }
                if ( isset( $noKeyOptions['DISTINCT'] ) || isset( $noKeyOptions['DISTINCTROW'] ) ) {
                        $startOpts .= 'DISTINCT';
                }
index cb3da1e..f1e553d 100644 (file)
@@ -645,7 +645,7 @@ class DatabaseSqlite extends DatabaseBase {
                return false;
        }
 
-       function begin( $fname = '' ) {
+       protected function doBegin( $fname = '' ) {
                if ( $this->mTrxLevel == 1 ) {
                        $this->commit( __METHOD__ );
                }
@@ -653,7 +653,7 @@ class DatabaseSqlite extends DatabaseBase {
                $this->mTrxLevel = 1;
        }
 
-       function commit( $fname = '' ) {
+       protected function doCommit( $fname = '' ) {
                if ( $this->mTrxLevel == 0 ) {
                        return;
                }
@@ -661,7 +661,7 @@ class DatabaseSqlite extends DatabaseBase {
                $this->mTrxLevel = 0;
        }
 
-       function rollback( $fname = '' ) {
+       protected function doRollback( $fname = '' ) {
                if ( $this->mTrxLevel == 0 ) {
                        return;
                }
index 1ad25ae..d02bcf5 100644 (file)
@@ -133,70 +133,156 @@ class MWDebug {
         * Adds a warning entry to the log
         *
         * @since 1.19
-        * @param $msg
-        * @param int $callerOffset
+        * @param $msg string
+        * @param $callerOffset int
         * @return mixed
         */
-       public static function warning( $msg, $callerOffset = 1 ) {
-               if ( !self::$enabled ) {
-                       return;
-               }
+       public static function warning( $msg, $callerOffset = 1, $level = E_USER_NOTICE ) {
+               $callerDescription = self::getCallerDescription( $callerOffset );
 
-               // Check to see if there was already a deprecation notice, so not to
-               // get a duplicate warning
-               $logCount = count( self::$log );
-               $caller = wfGetCaller( $callerOffset + 1 );
-               if ( $logCount ) {
-                       $lastLog = self::$log[ $logCount - 1 ];
-                       if ( $lastLog['type'] == 'deprecated' && $lastLog['caller'] == $caller ) {
-                               return;
-                       }
-               }
+               self::sendWarning( $msg, $callerDescription, $level );
 
-               self::$log[] = array(
-                       'msg' => htmlspecialchars( $msg ),
-                       'type' => 'warn',
-                       'caller' => $caller,
-               );
+               if ( self::$enabled ) {
+                       self::$log[] = array(
+                               'msg' => htmlspecialchars( $msg ),
+                               'type' => 'warn',
+                               'caller' => $callerDescription['func'],
+                       );
+               }
        }
 
        /**
-        * Adds a depreciation entry to the log, along with a backtrace
+        * Show a warning that $function is deprecated.
+        * This will send it to the following locations:
+        * - Debug toolbar, with one item per function and caller, if $wgDebugToolbar
+        *   is set to true.
+        * - PHP's error log, with level E_USER_DEPRECATED, if $wgDevelopmentWarnings
+        *   is set to true.
+        * - MediaWiki's debug log, if $wgDevelopmentWarnings is set to false.
         *
         * @since 1.19
-        * @param $function
-        * @param $version
-        * @param $component
+        * @param $function string: Function that is deprecated.
+        * @param $version string|bool: Version in which the function was deprecated.
+        * @param $component string|bool: Component to which the function belongs.
+        *     If false, it is assumbed the function is in MediaWiki core.
+        * @param $callerOffset integer: How far up the callstack is the original
+        *    caller. 2 = function that called the function that called
+        *    MWDebug::deprecated() (Added in 1.20).
         * @return mixed
         */
-       public static function deprecated( $function, $version, $component ) {
-               if ( !self::$enabled ) {
-                       return;
-               }
+       public static function deprecated( $function, $version = false, $component = false, $callerOffset = 2 ) {
+               $callerDescription = self::getCallerDescription( $callerOffset );
+               $callerFunc = $callerDescription['func'];
 
-               // Chain: This function -> wfDeprecated -> deprecatedFunction -> caller
-               $caller = wfGetCaller( 4 );
+               $sendToLog = true;
 
                // Check to see if there already was a warning about this function
-               $functionString = "$function-$caller";
-               if ( in_array( $functionString, self::$deprecationWarnings ) ) {
+               if ( isset( self::$deprecationWarnings[$function][$callerFunc] ) ) {
                        return;
+               } elseif ( isset( self::$deprecationWarnings[$function] ) ) {
+                       if ( self::$enabled ) {
+                               $sendToLog = false;
+                       } else {
+                               return;
+                       }
                }
 
-               $version = $version === false ? '(unknown version)' : $version;
-               $component = $component === false ? 'MediaWiki' : $component;
-               $msg = htmlspecialchars( "Use of function $function was deprecated in $component $version" );
-               $msg .= Html::rawElement( 'div', array( 'class' => 'mw-debug-backtrace' ),
-                       Html::element( 'span', array(), 'Backtrace:' )
-                        . wfBacktrace()
-               );
+               self::$deprecationWarnings[$function][$callerFunc] = true;
 
-               self::$deprecationWarnings[] = $functionString;
-               self::$log[] = array(
-                       'msg' => $msg,
-                       'type' => 'deprecated',
-                       'caller' => $caller,
-               );
+               if ( $version ) {
+                       global $wgDeprecationReleaseLimit;
+                       if ( $wgDeprecationReleaseLimit && $component === false ) {
+                               # Strip -* off the end of $version so that branches can use the
+                               # format #.##-branchname to avoid issues if the branch is merged into
+                               # a version of MediaWiki later than what it was branched from
+                               $comparableVersion = preg_replace( '/-.*$/', '', $version );
+
+                               # If the comparableVersion is larger than our release limit then
+                               # skip the warning message for the deprecation
+                               if ( version_compare( $wgDeprecationReleaseLimit, $comparableVersion, '<' ) ) {
+                                       $sendToLog = false;
+                               }
+                       }
+
+                       $component = $component === false ? 'MediaWiki' : $component;
+                       $msg = "Use of $function was deprecated in $component $version.";
+               } else {
+                       $msg = "Use of $function is deprecated.";
+               }
+
+               if ( $sendToLog ) {
+                       self::sendWarning( $msg, $callerDescription, E_USER_DEPRECATED );
+               }
+
+               if ( self::$enabled ) {
+                       $logMsg = htmlspecialchars( $msg ) .
+                               Html::rawElement( 'div', array( 'class' => 'mw-debug-backtrace' ),
+                                       Html::element( 'span', array(), 'Backtrace:' ) . wfBacktrace()
+                               );
+
+                       self::$log[] = array(
+                               'msg' => $logMsg,
+                               'type' => 'deprecated',
+                               'caller' => $callerFunc,
+                       );
+               }
+       }
+
+       /**
+        * Get an array describing the calling function at a specified offset.
+        *
+        * @param $callerOffset integer: How far up the callstack is the original
+        *    caller. 0 = function that called getCallerDescription()
+        * @return array with two keys: 'file' and 'func'
+        */
+       private static function getCallerDescription( $callerOffset ) {
+               $callers = wfDebugBacktrace();
+
+               if ( isset( $callers[$callerOffset] ) ) {
+                       $callerfile = $callers[$callerOffset];
+                       if ( isset( $callerfile['file'] ) && isset( $callerfile['line'] ) ) {
+                               $file = $callerfile['file'] . ' at line ' . $callerfile['line'];
+                       } else {
+                               $file = '(internal function)';
+                       }
+               } else {
+                       $file = '(unknown location)';
+               }
+
+               if ( isset( $callers[$callerOffset + 1] ) ) {
+                       $callerfunc = $callers[$callerOffset + 1];
+                       $func = '';
+                       if ( isset( $callerfunc['class'] ) ) {
+                               $func .= $callerfunc['class'] . '::';
+                       }
+                       if ( isset( $callerfunc['function'] ) ) {
+                               $func .= $callerfunc['function'];
+                       }
+               } else {
+                       $func = 'unknown';
+               }
+
+               return array( 'file' => $file, 'func' => $func );
+       }
+
+       /**
+        * Send a warning either to the debug log or by triggering an user PHP
+        * error depending on $wgDevelopmentWarnings.
+        *
+        * @param $msg string Message to send
+        * @param $caller array caller description get from getCallerDescription()
+        * @param $level error level to use if $wgDevelopmentWarnings is true
+        */
+       private static function sendWarning( $msg, $caller, $level ) {
+               global $wgDevelopmentWarnings;
+
+               $msg .= ' [Called from ' . $caller['func'] . ' in ' . $caller['file'] . ']';
+
+               if ( $wgDevelopmentWarnings ) {
+                       trigger_error( $msg, $level );
+               } else {
+                       wfDebug( "$msg\n" );
+               }
        }
 
        /**
@@ -207,11 +293,11 @@ class MWDebug {
         * @param $str string
         */
        public static function debugMsg( $str ) {
-               if ( !self::$enabled ) {
-                       return;
-               }
+               global $wgDebugComments, $wgShowDebug;
 
-               self::$debug[] = trim( $str );
+               if ( self::$enabled || $wgDebugComments || $wgShowDebug ) {
+                       self::$debug[] = rtrim( $str );
+               }
        }
 
        /**
@@ -283,22 +369,91 @@ class MWDebug {
         * @return string
         */
        public static function getDebugHTML( IContextSource $context ) {
-               if ( !self::$enabled ) {
+               global $wgDebugComments;
+
+               $html = '';
+
+               if ( self::$enabled ) {
+                       MWDebug::log( 'MWDebug output complete' );
+                       $debugInfo = self::getDebugInfo( $context );
+
+                       // Cannot use OutputPage::addJsConfigVars because those are already outputted
+                       // by the time this method is called.
+                       $html = Html::inlineScript(
+                               ResourceLoader::makeLoaderConditionalScript(
+                                       ResourceLoader::makeConfigSetScript( array( 'debugInfo' => $debugInfo ) )
+                               )
+                       );
+               }
+
+               if ( $wgDebugComments ) {
+                       $html .= "<!-- Debug output:\n" .
+                               htmlspecialchars( implode( "\n", self::$debug ) ) .
+                               "\n\n-->";
+               }
+
+               return $html;
+       }
+
+       /**
+        * Generate debug log in HTML for displaying at the bottom of the main
+        * content area.
+        * If $wgShowDebug is false, an empty string is always returned.
+        *
+        * @since 1.20
+        * @return string HTML fragment
+        */
+       public static function getHTMLDebugLog() {
+               global $wgDebugTimestamps, $wgShowDebug;
+
+               if ( !$wgShowDebug ) {
                        return '';
                }
 
-               MWDebug::log( 'MWDebug output complete' );
-               $debugInfo = self::getDebugInfo( $context );
+               $curIdent = 0;
+               $ret = "\n<hr />\n<strong>Debug data:</strong><ul id=\"mw-debug-html\">\n<li>";
 
-               // Cannot use OutputPage::addJsConfigVars because those are already outputted
-               // by the time this method is called.
-               $html = Html::inlineScript(
-                       ResourceLoader::makeLoaderConditionalScript(
-                               ResourceLoader::makeConfigSetScript( array( 'debugInfo' => $debugInfo ) )
-                       )
-               );
+               foreach ( self::$debug as $line ) {
+                       $pre = '';
+                       if ( $wgDebugTimestamps ) {
+                               $matches = array();
+                               if ( preg_match( '/^(\d+\.\d+ {1,3}\d+.\dM\s{2})/', $line, $matches ) ) {
+                                       $pre = $matches[1];
+                                       $line = substr( $line, strlen( $pre ) );
+                               }
+                       }
+                       $display = ltrim( $line );
+                       $ident = strlen( $line ) - strlen( $display );
+                       $diff = $ident - $curIdent;
 
-               return $html;
+                       $display = $pre . $display;
+                       if ( $display == '' ) {
+                               $display = "\xc2\xa0";
+                       }
+
+                       if ( !$ident && $diff < 0 && substr( $display, 0, 9 ) != 'Entering ' && substr( $display, 0, 8 ) != 'Exiting ' ) {
+                               $ident = $curIdent;
+                               $diff = 0;
+                               $display = '<span style="background:yellow;">' . nl2br( htmlspecialchars( $display ) ) . '</span>';
+                       } else {
+                               $display = nl2br( htmlspecialchars( $display ) );
+                       }
+
+                       if ( $diff < 0 ) {
+                               $ret .= str_repeat( "</li></ul>\n", -$diff ) . "</li><li>\n";
+                       } elseif ( $diff == 0 ) {
+                               $ret .= "</li><li>\n";
+                       } else {
+                               $ret .= str_repeat( "<ul><li>\n", $diff );
+                       }
+                       $ret .= "<tt>$display</tt>\n";
+
+                       $curIdent = $ident;
+               }
+
+               $ret .= str_repeat( '</li></ul>', $curIdent ) . "</li>\n</ul>\n";
+
+               return $ret;
        }
 
        /**
index d9092da..3846473 100644 (file)
@@ -917,7 +917,7 @@ class DifferenceEngine extends ContextSource {
 
                if ( !$diff && !$otitle ) {
                        $header .= "
-                       <tr valign='top'>
+                       <tr style='vertical-align: top;'>
                        <td class='diff-ntitle'>{$ntitle}</td>
                        </tr>";
                        $multiColspan = 1;
@@ -935,17 +935,17 @@ class DifferenceEngine extends ContextSource {
                                $multiColspan = 2;
                        }
                        $header .= "
-                       <tr valign='top'>
+                       <tr style='vertical-align: top;'>
                        <td colspan='$colspan' class='diff-otitle'>{$otitle}</td>
                        <td colspan='$colspan' class='diff-ntitle'>{$ntitle}</td>
                        </tr>";
                }
 
                if ( $multi != '' ) {
-                       $header .= "<tr><td colspan='{$multiColspan}' align='center' class='diff-multi'>{$multi}</td></tr>";
+                       $header .= "<tr><td colspan='{$multiColspan}' style='text-align: center;' class='diff-multi'>{$multi}</td></tr>";
                }
                if ( $notice != '' ) {
-                       $header .= "<tr><td colspan='{$multiColspan}' align='center'>{$notice}</td></tr>";
+                       $header .= "<tr><td colspan='{$multiColspan}' style='text-align: center;'>{$notice}</td></tr>";
                }
 
                return $header . $diff . "</table>";
index c953d77..9349534 100644 (file)
@@ -43,6 +43,8 @@ class FSFileBackend extends FileBackendStore {
        /** @var Array Map of container names to root paths */
        protected $containerPaths = array(); // for custom container paths
        protected $fileMode; // integer; file permission mode
+       protected $fileOwner; // string; required OS username to own files
+       protected $currentUser; // string; OS username running this script
 
        protected $hadWarningErrors = array();
 
@@ -71,9 +73,12 @@ class FSFileBackend extends FileBackendStore {
                        }
                }
 
-               $this->fileMode = isset( $config['fileMode'] )
-                       ? $config['fileMode']
-                       : 0644;
+               $this->fileMode = isset( $config['fileMode'] ) ? $config['fileMode'] : 0644;
+               if ( isset( $config['fileOwner'] ) && function_exists( 'posix_getuid' ) ) {
+                       $this->fileOwner = $config['fileOwner'];
+                       $info = posix_getpwuid( posix_getuid() );
+                       $this->currentUser = $info['name']; // cache this, assuming it doesn't change
+               }
        }
 
        /**
@@ -164,6 +169,11 @@ class FSFileBackend extends FileBackendStore {
                        $ok = is_dir( $parentDir ) && is_writable( $parentDir );
                }
 
+               if ( $this->fileOwner !== null && $this->currentUser !== $this->fileOwner ) {
+                       $ok = false;
+                       trigger_error( __METHOD__ . ": PHP process owner is not '{$this->fileOwner}'." );
+               }
+
                return $ok;
        }
 
@@ -675,7 +685,7 @@ class FSFileBackend extends FileBackendStore {
 
                // Create a new temporary file with the same extension...
                $ext = FileBackend::extensionFromPath( $params['src'] );
-               $tmpFile = TempFSFile::factory( wfBaseName( $source ) . '_', $ext );
+               $tmpFile = TempFSFile::factory( 'localcopy_', $ext );
                if ( !$tmpFile ) {
                        return null;
                }
index 4b707fc..e59a13b 100644 (file)
@@ -39,8 +39,7 @@
  * All "storage paths" are of the format "mwstore://<backend>/<container>/<path>".
  * The "<path>" portion is a relative path that uses UNIX file system (FS)
  * notation, though any particular backend may not actually be using a local
- * filesystem.
- * Therefore, the relative paths are only virtual.
+ * filesystem. Therefore, the relative paths are only virtual.
  *
  * Backend contents are stored under wiki-specific container names by default.
  * For legacy reasons, this has no effect for the FS backend class, and per-wiki
@@ -171,7 +170,8 @@ abstract class FileBackend {
         *         'dst'                 => <storage path>,
         *         'content'             => <string of new file contents>,
         *         'overwrite'           => <boolean>,
-        *         'overwriteSame'       => <boolean>
+        *         'overwriteSame'       => <boolean>,
+        *         'disposition'         => <Content-Disposition header value>
         *     );
         * @endcode
         *
@@ -182,7 +182,8 @@ abstract class FileBackend {
         *         'src'                 => <file system path>,
         *         'dst'                 => <storage path>,
         *         'overwrite'           => <boolean>,
-        *         'overwriteSame'       => <boolean>
+        *         'overwriteSame'       => <boolean>,
+        *         'disposition'         => <Content-Disposition header value>
         *     )
         * @endcode
         *
@@ -193,7 +194,8 @@ abstract class FileBackend {
         *         'src'                 => <storage path>,
         *         'dst'                 => <storage path>,
         *         'overwrite'           => <boolean>,
-        *         'overwriteSame'       => <boolean>
+        *         'overwriteSame'       => <boolean>,
+        *         'disposition'         => <Content-Disposition header value>
         *     )
         * @endcode
         *
@@ -204,7 +206,8 @@ abstract class FileBackend {
         *         'src'                 => <storage path>,
         *         'dst'                 => <storage path>,
         *         'overwrite'           => <boolean>,
-        *         'overwriteSame'       => <boolean>
+        *         'overwriteSame'       => <boolean>,
+        *         'disposition'         => <Content-Disposition header value>
         *     )
         * @endcode
         *
@@ -231,6 +234,10 @@ abstract class FileBackend {
         *   - overwriteSame       : An error will not be given if a file already
         *                           exists at the destination that has the same
         *                           contents as the new contents to be written there.
+        *   - disposition         : When supplied, the backend will add a Content-Disposition
+        *                           header when GETs/HEADs of the destination file are made.
+        *                           Backends that don't support file metadata will ignore this.
+        *                           See http://tools.ietf.org/html/rfc6266 (since 1.20).
         *
         * $opts is an associative of boolean flags, including:
         *   - force               : Operation precondition errors no longer trigger an abort.
@@ -242,6 +249,9 @@ abstract class FileBackend {
         *   - allowStale          : Don't require the latest available data.
         *                           This can increase performance for non-critical writes.
         *                           This has no effect unless the 'force' flag is set.
+        *   - preserveCache       : Don't clear the process cache before checking files.
+        *                           This should only be used if all entries in the process
+        *                           cache were added after the files were already locked.
         *   - nonJournaled        : Don't log this operation batch in the file journal.
         *                           This limits the ability of recovery scripts.
         *   - parallelize         : Try to do operations in parallel when possible.
@@ -397,7 +407,8 @@ abstract class FileBackend {
         *     array(
         *         'op'                  => 'create',
         *         'dst'                 => <storage path>,
-        *         'content'             => <string of new file contents>
+        *         'content'             => <string of new file contents>,
+        *         'disposition'         => <Content-Disposition header value>
         *     )
         * @endcode
         * b) Copy a file system file into storage
@@ -405,7 +416,8 @@ abstract class FileBackend {
         *     array(
         *         'op'                  => 'store',
         *         'src'                 => <file system path>,
-        *         'dst'                 => <storage path>
+        *         'dst'                 => <storage path>,
+        *         'disposition'         => <Content-Disposition header value>
         *     )
         * @endcode
         * c) Copy a file within storage
@@ -413,7 +425,8 @@ abstract class FileBackend {
         *     array(
         *         'op'                  => 'copy',
         *         'src'                 => <storage path>,
-        *         'dst'                 => <storage path>
+        *         'dst'                 => <storage path>,
+        *         'disposition'         => <Content-Disposition header value>
         *     )
         * @endcode
         * d) Move a file within storage
@@ -421,7 +434,8 @@ abstract class FileBackend {
         *     array(
         *         'op'                  => 'move',
         *         'src'                 => <storage path>,
-        *         'dst'                 => <storage path>
+        *         'dst'                 => <storage path>,
+        *         'disposition'         => <Content-Disposition header value>
         *     )
         * @endcode
         * e) Delete a file within storage
@@ -442,6 +456,10 @@ abstract class FileBackend {
         * @par Boolean flags for operations (operation-specific):
         *   - ignoreMissingSource : The operation will simply succeed and do
         *                           nothing if the source file does not exist.
+        *   - disposition         : When supplied, the backend will add a Content-Disposition
+        *                           header when GETs/HEADs of the destination file are made.
+        *                           Backends that don't support file metadata will ignore this.
+        *                           See http://tools.ietf.org/html/rfc6266 (since 1.20).
         *
         * $opts is an associative of boolean flags, including:
         *   - bypassReadOnly      : Allow writes in read-only mode (since 1.20)
@@ -899,7 +917,16 @@ abstract class FileBackend {
        }
 
        /**
-        * Invalidate any in-process file existence and property cache.
+        * Preload persistent file stat and property cache into in-process cache.
+        * This should be used when stat calls will be made on a known list of a many files.
+        *
+        * @param $paths Array Storage paths
+        * @return void
+        */
+       public function preloadCache( array $paths ) {}
+
+       /**
+        * Invalidate any in-process file stat and property cache.
         * If $paths is given, then only the cache for those files will be cleared.
         *
         * @param $paths Array Storage paths (optional)
@@ -1077,6 +1104,20 @@ abstract class FileBackend {
                return ( self::normalizeContainerPath( $path ) !== null );
        }
 
+       /**
+        * Build a Content-Disposition header value per RFC 6266
+        *
+        * @param $type string One of (attachment, inline)
+        * @param $filename string Suggested file name (should not contain slashes)
+        * @return string
+        * @since 1.20
+        */
+       final public static function makeContentDisposition( $type, $filename ) {
+               $type = strtolower( $type );
+               $type = in_array( $type, array( 'inline', 'attachment' ) ) ? $type : 'inline';
+               return "$type; filename*=UTF-8''" . rawurlencode( basename( $filename ) );
+       }
+
        /**
         * Validate and normalize a relative storage path.
         * Null is returned if the path involves directory traversal.
index f4a7eac..9efa0db 100644 (file)
@@ -43,7 +43,10 @@ class FileBackendMultiWrite extends FileBackend {
        /** @var Array Prioritized list of FileBackendStore objects */
        protected $backends = array(); // array of (backend index => backends)
        protected $masterIndex = -1; // integer; index of master backend
-       protected $syncChecks = 0; // integer bitfield
+       protected $syncChecks = 0; // integer; bitfield
+       /** @var Array */
+       protected $noPushDirConts = array();
+       protected $noPushQuickOps = false; // boolean
 
        /* Possible internal backend consistency checks */
        const CHECK_SIZE = 1;
@@ -55,18 +58,21 @@ class FileBackendMultiWrite extends FileBackend {
         * Locking, journaling, and read-only checks are handled by the proxy backend.
         *
         * Additional $config params include:
-        *   - backends   : Array of backend config and multi-backend settings.
-        *                  Each value is the config used in the constructor of a
-        *                  FileBackendStore class, but with these additional settings:
-        *                    - class         : The name of the backend class
-        *                    - isMultiMaster : This must be set for one backend.
-        *                    - template:     : If given a backend name, this will use
-        *                                      the config of that backend as a template.
-        *                                      Values specified here take precedence.
-        *   - syncChecks : Integer bitfield of internal backend sync checks to perform.
-        *                  Possible bits include the FileBackendMultiWrite::CHECK_* constants.
-        *                  There are constants for SIZE, TIME, and SHA1.
-        *                  The checks are done before allowing any file operations.
+        *   - backends       : Array of backend config and multi-backend settings.
+        *                      Each value is the config used in the constructor of a
+        *                          FileBackendStore class, but with these additional settings:
+        *                        - class         : The name of the backend class
+        *                        - isMultiMaster : This must be set for one backend.
+        *                        - template:     : If given a backend name, this will use
+        *                                          the config of that backend as a template.
+        *                                          Values specified here take precedence.
+        *   - syncChecks     : Integer bitfield of internal backend sync checks to perform.
+        *                      Possible bits include the FileBackendMultiWrite::CHECK_* constants.
+        *                      There are constants for SIZE, TIME, and SHA1.
+        *                      The checks are done before allowing any file operations.
+        *   - noPushQuickOps : (hack) Only apply doQuickOperations() to the master backend.
+        *   - noPushDirConts : (hack) Only apply directory functions to the master backend.
+        *
         * @param $config Array
         * @throws MWException
         */
@@ -75,6 +81,12 @@ class FileBackendMultiWrite extends FileBackend {
                $this->syncChecks = isset( $config['syncChecks'] )
                        ? $config['syncChecks']
                        : self::CHECK_SIZE;
+               $this->noPushQuickOps = isset( $config['noPushQuickOps'] )
+                       ? $config['noPushQuickOps']
+                       : false;
+               $this->noPushDirConts = isset( $config['noPushDirConts'] )
+                       ? $config['noPushDirConts']
+                       : array();
                // Construct backends here rather than via registration
                // to keep these backends hidden from outside the proxy.
                $namesUsed = array();
@@ -139,6 +151,7 @@ class FileBackendMultiWrite extends FileBackend {
                }
                // Clear any cache entries (after locks acquired)
                $this->clearCache();
+               $opts['preserveCache'] = true; // only locked files are cached
                // Do a consistency check to see if the backends agree
                $status->merge( $this->consistencyCheck( $this->fileStoragePathsForOps( $ops ) ) );
                if ( !$status->isOK() ) {
@@ -147,11 +160,14 @@ class FileBackendMultiWrite extends FileBackend {
                // Actually attempt the operation batch on the master backend...
                $masterStatus = $mbe->doOperations( $realOps, $opts );
                $status->merge( $masterStatus );
-               // Propagate the operations to the clone backends...
-               foreach ( $this->backends as $index => $backend ) {
-                       if ( $index !== $this->masterIndex ) { // not done already
-                               $realOps = $this->substOpBatchPaths( $ops, $backend );
-                               $status->merge( $backend->doOperations( $realOps, $opts ) );
+               // Propagate the operations to the clone backends if there were no fatal errors.
+               // If $ops only had one operation, this might avoid backend inconsistencies.
+               if ( !count( $masterStatus->getErrorsArray() ) ) {
+                       foreach ( $this->backends as $index => $backend ) {
+                               if ( $index !== $this->masterIndex ) { // not done already
+                                       $realOps = $this->substOpBatchPaths( $ops, $backend );
+                                       $status->merge( $backend->doOperations( $realOps, $opts ) );
+                               }
                        }
                }
                // Make 'success', 'successCount', and 'failCount' fields reflect
@@ -368,10 +384,12 @@ class FileBackendMultiWrite extends FileBackend {
                $masterStatus = $this->backends[$this->masterIndex]->doQuickOperations( $realOps );
                $status->merge( $masterStatus );
                // Propagate the operations to the clone backends...
-               foreach ( $this->backends as $index => $backend ) {
-                       if ( $index !== $this->masterIndex ) { // not done already
-                               $realOps = $this->substOpBatchPaths( $ops, $backend );
-                               $status->merge( $backend->doQuickOperations( $realOps ) );
+               if ( !$this->noPushQuickOps ) {
+                       foreach ( $this->backends as $index => $backend ) {
+                               if ( $index !== $this->masterIndex ) { // not done already
+                                       $realOps = $this->substOpBatchPaths( $ops, $backend );
+                                       $status->merge( $backend->doQuickOperations( $realOps ) );
+                               }
                        }
                }
                // Make 'success', 'successCount', and 'failCount' fields reflect
@@ -383,15 +401,27 @@ class FileBackendMultiWrite extends FileBackend {
                return $status;
        }
 
+       /**
+        * @param $path string Storage path
+        * @return bool Path container should have dir changes pushed to all backends
+        */
+       protected function replicateContainerDirChanges( $path ) {
+               list( $b, $shortCont, $r ) = self::splitStoragePath( $path );
+               return !in_array( $shortCont, $this->noPushDirConts );
+       }
+
        /**
         * @see FileBackend::doPrepare()
         * @return Status
         */
        protected function doPrepare( array $params ) {
                $status = Status::newGood();
-               foreach ( $this->backends as $backend ) {
-                       $realParams = $this->substOpPaths( $params, $backend );
-                       $status->merge( $backend->doPrepare( $realParams ) );
+               $replicate = $this->replicateContainerDirChanges( $params['dir'] );
+               foreach ( $this->backends as $index => $backend ) {
+                       if ( $replicate || $index == $this->masterIndex ) {
+                               $realParams = $this->substOpPaths( $params, $backend );
+                               $status->merge( $backend->doPrepare( $realParams ) );
+                       }
                }
                return $status;
        }
@@ -403,9 +433,12 @@ class FileBackendMultiWrite extends FileBackend {
         */
        protected function doSecure( array $params ) {
                $status = Status::newGood();
-               foreach ( $this->backends as $backend ) {
-                       $realParams = $this->substOpPaths( $params, $backend );
-                       $status->merge( $backend->doSecure( $realParams ) );
+               $replicate = $this->replicateContainerDirChanges( $params['dir'] );
+               foreach ( $this->backends as $index => $backend ) {
+                       if ( $replicate || $index == $this->masterIndex ) {
+                               $realParams = $this->substOpPaths( $params, $backend );
+                               $status->merge( $backend->doSecure( $realParams ) );
+                       }
                }
                return $status;
        }
@@ -417,9 +450,12 @@ class FileBackendMultiWrite extends FileBackend {
         */
        protected function doPublish( array $params ) {
                $status = Status::newGood();
-               foreach ( $this->backends as $backend ) {
-                       $realParams = $this->substOpPaths( $params, $backend );
-                       $status->merge( $backend->doPublish( $realParams ) );
+               $replicate = $this->replicateContainerDirChanges( $params['dir'] );
+               foreach ( $this->backends as $index => $backend ) {
+                       if ( $replicate || $index == $this->masterIndex ) {
+                               $realParams = $this->substOpPaths( $params, $backend );
+                               $status->merge( $backend->doPublish( $realParams ) );
+                       }
                }
                return $status;
        }
@@ -431,9 +467,12 @@ class FileBackendMultiWrite extends FileBackend {
         */
        protected function doClean( array $params ) {
                $status = Status::newGood();
-               foreach ( $this->backends as $backend ) {
-                       $realParams = $this->substOpPaths( $params, $backend );
-                       $status->merge( $backend->doClean( $realParams ) );
+               $replicate = $this->replicateContainerDirChanges( $params['dir'] );
+               foreach ( $this->backends as $index => $backend ) {
+                       if ( $replicate || $index == $this->masterIndex ) {
+                               $realParams = $this->substOpPaths( $params, $backend );
+                               $status->merge( $backend->doClean( $realParams ) );
+                       }
                }
                return $status;
        }
index 852a653..5771560 100644 (file)
@@ -89,6 +89,7 @@ abstract class FileBackendStore extends FileBackend {
         *   - content       : the raw file contents
         *   - dst           : destination storage path
         *   - overwrite     : overwrite any file that exists at the destination
+        *   - disposition   : Content-Disposition header value for the destination
         *   - async         : Status will be returned immediately if supported.
         *                     If the status is OK, then its value field will be
         *                     set to a FileBackendStoreOpHandle object.
@@ -105,7 +106,9 @@ abstract class FileBackendStore extends FileBackend {
                } else {
                        $status = $this->doCreateInternal( $params );
                        $this->clearCache( array( $params['dst'] ) );
-                       $this->deleteFileCache( $params['dst'] ); // persistent cache
+                       if ( !empty( $params['overwrite'] ) ) { // file possibly mutated
+                               $this->deleteFileCache( $params['dst'] ); // persistent cache
+                       }
                }
                wfProfileOut( __METHOD__ . '-' . $this->name );
                wfProfileOut( __METHOD__ );
@@ -125,6 +128,7 @@ abstract class FileBackendStore extends FileBackend {
         *   - src           : source path on disk
         *   - dst           : destination storage path
         *   - overwrite     : overwrite any file that exists at the destination
+        *   - disposition   : Content-Disposition header value for the destination
         *   - async         : Status will be returned immediately if supported.
         *                     If the status is OK, then its value field will be
         *                     set to a FileBackendStoreOpHandle object.
@@ -141,7 +145,9 @@ abstract class FileBackendStore extends FileBackend {
                } else {
                        $status = $this->doStoreInternal( $params );
                        $this->clearCache( array( $params['dst'] ) );
-                       $this->deleteFileCache( $params['dst'] ); // persistent cache
+                       if ( !empty( $params['overwrite'] ) ) { // file possibly mutated
+                               $this->deleteFileCache( $params['dst'] ); // persistent cache
+                       }
                }
                wfProfileOut( __METHOD__ . '-' . $this->name );
                wfProfileOut( __METHOD__ );
@@ -161,6 +167,7 @@ abstract class FileBackendStore extends FileBackend {
         *   - src           : source storage path
         *   - dst           : destination storage path
         *   - overwrite     : overwrite any file that exists at the destination
+        *   - disposition   : Content-Disposition header value for the destination
         *   - async         : Status will be returned immediately if supported.
         *                     If the status is OK, then its value field will be
         *                     set to a FileBackendStoreOpHandle object.
@@ -173,7 +180,9 @@ abstract class FileBackendStore extends FileBackend {
                wfProfileIn( __METHOD__ . '-' . $this->name );
                $status = $this->doCopyInternal( $params );
                $this->clearCache( array( $params['dst'] ) );
-               $this->deleteFileCache( $params['dst'] ); // persistent cache
+               if ( !empty( $params['overwrite'] ) ) { // file possibly mutated
+                       $this->deleteFileCache( $params['dst'] ); // persistent cache
+               }
                wfProfileOut( __METHOD__ . '-' . $this->name );
                wfProfileOut( __METHOD__ );
                return $status;
@@ -222,6 +231,7 @@ abstract class FileBackendStore extends FileBackend {
         *   - src           : source storage path
         *   - dst           : destination storage path
         *   - overwrite     : overwrite any file that exists at the destination
+        *   - disposition   : Content-Disposition header value for the destination
         *   - async         : Status will be returned immediately if supported.
         *                     If the status is OK, then its value field will be
         *                     set to a FileBackendStoreOpHandle object.
@@ -235,7 +245,9 @@ abstract class FileBackendStore extends FileBackend {
                $status = $this->doMoveInternal( $params );
                $this->clearCache( array( $params['src'], $params['dst'] ) );
                $this->deleteFileCache( $params['src'] ); // persistent cache
-               $this->deleteFileCache( $params['dst'] ); // persistent cache
+               if ( !empty( $params['overwrite'] ) ) { // file possibly mutated
+                       $this->deleteFileCache( $params['dst'] ); // persistent cache
+               }
                wfProfileOut( __METHOD__ . '-' . $this->name );
                wfProfileOut( __METHOD__ );
                return $status;
@@ -989,7 +1001,9 @@ abstract class FileBackendStore extends FileBackend {
                }
 
                // Clear any file cache entries (after locks acquired)
-               $this->clearCache();
+               if ( empty( $opts['preserveCache'] ) ) {
+                       $this->clearCache();
+               }
 
                // Load from the persistent file and container caches
                $this->primeFileCache( $performOps );
@@ -1106,6 +1120,20 @@ abstract class FileBackendStore extends FileBackend {
                return array();
        }
 
+       /**
+        * @see FileBackend::preloadCache()
+        */
+       final public function preloadCache( array $paths ) {
+               $fullConts = array(); // full container names
+               foreach ( $paths as $path ) {
+                       list( $fullCont, $r, $s ) = $this->resolveStoragePath( $path );
+                       $fullConts[] = $fullCont;
+               }
+               // Load from the persistent file and container caches
+               $this->primeContainerCache( $fullConts );
+               $this->primeFileCache( $paths );
+       }
+
        /**
         * @see FileBackend::clearCache()
         */
@@ -1444,7 +1472,9 @@ abstract class FileBackendStore extends FileBackend {
        }
 
        /**
-        * Set the cached stat info for a file path
+        * Set the cached stat info for a file path.
+        * Negatives (404s) are not cached. By not caching negatives, we can skip cache
+        * salting for the case when a file is created at a path were there was none before.
         *
         * @param $path string Storage path
         * @param $val mixed Information to cache
index fa87c3a..7c43c48 100644 (file)
@@ -431,18 +431,15 @@ abstract class FileOp {
 
 /**
  * Store a file into the backend from a file on the file system.
- * Parameters similar to FileBackendStore::storeInternal(), which include:
- *   - src           : source path on file system
- *   - dst           : destination storage path
- *   - overwrite     : do nothing and pass if an identical file exists at destination
- *   - overwriteSame : override any existing file at destination
+ * Parameters for this operation are outlined in FileBackend::doOperations().
  */
 class StoreFileOp extends FileOp {
        /**
         * @return array
         */
        protected function allowedParams() {
-               return array( array( 'src', 'dst' ), array( 'overwrite', 'overwriteSame' ) );
+               return array( array( 'src', 'dst' ),
+                       array( 'overwrite', 'overwriteSame', 'disposition' ) );
        }
 
        /**
@@ -508,15 +505,12 @@ class StoreFileOp extends FileOp {
 
 /**
  * Create a file in the backend with the given content.
- * Parameters similar to FileBackendStore::createInternal(), which include:
- *   - content       : the raw file contents
- *   - dst           : destination storage path
- *   - overwrite     : do nothing and pass if an identical file exists at destination
- *   - overwriteSame : override any existing file at destination
+ * Parameters for this operation are outlined in FileBackend::doOperations().
  */
 class CreateFileOp extends FileOp {
        protected function allowedParams() {
-               return array( array( 'content', 'dst' ), array( 'overwrite', 'overwriteSame' ) );
+               return array( array( 'content', 'dst' ),
+                       array( 'overwrite', 'overwriteSame', 'disposition' ) );
        }
 
        protected function doPrecheck( array &$predicates ) {
@@ -571,18 +565,15 @@ class CreateFileOp extends FileOp {
 
 /**
  * Copy a file from one storage path to another in the backend.
- * Parameters similar to FileBackendStore::copyInternal(), which include:
- *   - src           : source storage path
- *   - dst           : destination storage path
- *   - overwrite     : do nothing and pass if an identical file exists at destination
- *   - overwriteSame : override any existing file at destination
+ * Parameters for this operation are outlined in FileBackend::doOperations().
  */
 class CopyFileOp extends FileOp {
        /**
         * @return array
         */
        protected function allowedParams() {
-               return array( array( 'src', 'dst' ), array( 'overwrite', 'overwriteSame' ) );
+               return array( array( 'src', 'dst' ),
+                       array( 'overwrite', 'overwriteSame', 'disposition' ) );
        }
 
        /**
@@ -642,18 +633,15 @@ class CopyFileOp extends FileOp {
 
 /**
  * Move a file from one storage path to another in the backend.
- * Parameters similar to FileBackendStore::moveInternal(), which include:
- *   - src           : source storage path
- *   - dst           : destination storage path
- *   - overwrite     : do nothing and pass if an identical file exists at destination
- *   - overwriteSame : override any existing file at destination
+ * Parameters for this operation are outlined in FileBackend::doOperations().
  */
 class MoveFileOp extends FileOp {
        /**
         * @return array
         */
        protected function allowedParams() {
-               return array( array( 'src', 'dst' ), array( 'overwrite', 'overwriteSame' ) );
+               return array( array( 'src', 'dst' ),
+                       array( 'overwrite', 'overwriteSame', 'disposition' ) );
        }
 
        /**
@@ -719,9 +707,7 @@ class MoveFileOp extends FileOp {
 
 /**
  * Delete a file at the given storage path from the backend.
- * Parameters similar to FileBackendStore::deleteInternal(), which include:
- *   - src                 : source storage path
- *   - ignoreMissingSource : don't return an error if the file does not exist
+ * Parameters for this operation are outlined in FileBackend::doOperations().
  */
 class DeleteFileOp extends FileOp {
        /**
index f54f666..88727e4 100644 (file)
@@ -111,7 +111,7 @@ class SwiftFileBackend extends FileBackendStore {
                        : false;
                $this->swiftCDNExpiry = isset( $config['swiftCDNExpiry'] )
                        ? $config['swiftCDNExpiry']
-                       : 3600; // hour
+                       : 12*3600; // 12 hours is safe (tokens last 24 hours per http://docs.openstack.org)
                $this->swiftCDNPurgable = isset( $config['swiftCDNPurgable'] )
                        ? $config['swiftCDNPurgable']
                        : true;
@@ -210,13 +210,21 @@ class SwiftFileBackend extends FileBackendStore {
                        if ( !strlen( $obj->content_type ) ) { // special case
                                $obj->content_type = 'unknown/unknown';
                        }
+                       // Set the Content-Disposition header if requested
+                       if ( isset( $params['disposition'] ) ) {
+                               $obj->headers['Content-Disposition'] = $params['disposition'];
+                       }
                        if ( !empty( $params['async'] ) ) { // deferred
-                               $handle = $obj->write_async( $params['content'] );
-                               $status->value = new SwiftFileOpHandle( $this, $params, 'Create', $handle );
-                               $status->value->affectedObjects[] = $obj;
+                               $op = $obj->write_async( $params['content'] );
+                               $status->value = new SwiftFileOpHandle( $this, $params, 'Create', $op );
+                               if ( !empty( $params['overwrite'] ) ) { // file possibly mutated
+                                       $status->value->affectedObjects[] = $obj;
+                               }
                        } else { // actually write the object in Swift
                                $obj->write( $params['content'] );
-                               $this->purgeCDNCache( array( $obj ) );
+                               if ( !empty( $params['overwrite'] ) ) { // file possibly mutated
+                                       $this->purgeCDNCache( array( $obj ) );
+                               }
                        }
                } catch ( CDNNotEnabledException $e ) {
                        // CDN not enabled; nothing to see here
@@ -292,6 +300,10 @@ class SwiftFileBackend extends FileBackendStore {
                        if ( !strlen( $obj->content_type ) ) { // special case
                                $obj->content_type = 'unknown/unknown';
                        }
+                       // Set the Content-Disposition header if requested
+                       if ( isset( $params['disposition'] ) ) {
+                               $obj->headers['Content-Disposition'] = $params['disposition'];
+                       }
                        if ( !empty( $params['async'] ) ) { // deferred
                                wfSuppressWarnings();
                                $fp = fopen( $params['src'], 'rb' );
@@ -299,14 +311,18 @@ class SwiftFileBackend extends FileBackendStore {
                                if ( !$fp ) {
                                        $status->fatal( 'backend-fail-copy', $params['src'], $params['dst'] );
                                } else {
-                                       $handle = $obj->write_async( $fp, filesize( $params['src'] ), true );
-                                       $status->value = new SwiftFileOpHandle( $this, $params, 'Store', $handle );
+                                       $op = $obj->write_async( $fp, filesize( $params['src'] ), true );
+                                       $status->value = new SwiftFileOpHandle( $this, $params, 'Store', $op );
                                        $status->value->resourcesToClose[] = $fp;
-                                       $status->value->affectedObjects[] = $obj;
+                                       if ( !empty( $params['overwrite'] ) ) { // file possibly mutated
+                                               $status->value->affectedObjects[] = $obj;
+                                       }
                                }
                        } else { // actually write the object in Swift
                                $obj->load_from_filename( $params['src'], true ); // calls $obj->write()
-                               $this->purgeCDNCache( array( $obj ) );
+                               if ( !empty( $params['overwrite'] ) ) { // file possibly mutated
+                                       $this->purgeCDNCache( array( $obj ) );
+                               }
                        }
                } catch ( CDNNotEnabledException $e ) {
                        // CDN not enabled; nothing to see here
@@ -374,13 +390,21 @@ class SwiftFileBackend extends FileBackendStore {
                // (b) Actually copy the file to the destination
                try {
                        $dstObj = new CF_Object( $dContObj, $dstRel, false, false ); // skip HEAD
+                       $hdrs = array(); // source file headers to override with new values
+                       if ( isset( $params['disposition'] ) ) {
+                               $hdrs['Content-Disposition'] = $params['disposition'];
+                       }
                        if ( !empty( $params['async'] ) ) { // deferred
-                               $handle = $sContObj->copy_object_to_async( $srcRel, $dContObj, $dstRel );
-                               $status->value = new SwiftFileOpHandle( $this, $params, 'Copy', $handle );
-                               $status->value->affectedObjects[] = $dstObj;
+                               $op = $sContObj->copy_object_to_async( $srcRel, $dContObj, $dstRel, null, $hdrs );
+                               $status->value = new SwiftFileOpHandle( $this, $params, 'Copy', $op );
+                               if ( !empty( $params['overwrite'] ) ) { // file possibly mutated
+                                       $status->value->affectedObjects[] = $dstObj;
+                               }
                        } else { // actually write the object in Swift
-                               $sContObj->copy_object_to( $srcRel, $dContObj, $dstRel );
-                               $this->purgeCDNCache( array( $dstObj ) );
+                               $sContObj->copy_object_to( $srcRel, $dContObj, $dstRel, null, $hdrs );
+                               if ( !empty( $params['overwrite'] ) ) { // file possibly mutated
+                                       $this->purgeCDNCache( array( $dstObj ) );
+                               }
                        }
                } catch ( CDNNotEnabledException $e ) {
                        // CDN not enabled; nothing to see here
@@ -445,14 +469,23 @@ class SwiftFileBackend extends FileBackendStore {
                try {
                        $srcObj = new CF_Object( $sContObj, $srcRel, false, false ); // skip HEAD
                        $dstObj = new CF_Object( $dContObj, $dstRel, false, false ); // skip HEAD
+                       $hdrs = array(); // source file headers to override with new values
+                       if ( isset( $params['disposition'] ) ) {
+                               $hdrs['Content-Disposition'] = $params['disposition'];
+                       }
                        if ( !empty( $params['async'] ) ) { // deferred
-                               $handle = $sContObj->move_object_to_async( $srcRel, $dContObj, $dstRel );
-                               $status->value = new SwiftFileOpHandle( $this, $params, 'Move', $handle );
+                               $op = $sContObj->move_object_to_async( $srcRel, $dContObj, $dstRel, null, $hdrs );
+                               $status->value = new SwiftFileOpHandle( $this, $params, 'Move', $op );
                                $status->value->affectedObjects[] = $srcObj;
-                               $status->value->affectedObjects[] = $dstObj;
+                               if ( !empty( $params['overwrite'] ) ) { // file possibly mutated
+                                       $status->value->affectedObjects[] = $dstObj;
+                               }
                        } else { // actually write the object in Swift
-                               $sContObj->move_object_to( $srcRel, $dContObj, $dstRel );
-                               $this->purgeCDNCache( array( $srcObj, $dstObj ) );
+                               $sContObj->move_object_to( $srcRel, $dContObj, $dstRel, null, $hdrs );
+                               $this->purgeCDNCache( array( $srcObj ) );
+                               if ( !empty( $params['overwrite'] ) ) { // file possibly mutated
+                                       $this->purgeCDNCache( array( $dstObj ) );
+                               }
                        }
                } catch ( CDNNotEnabledException $e ) {
                        // CDN not enabled; nothing to see here
@@ -493,8 +526,8 @@ class SwiftFileBackend extends FileBackendStore {
                        $sContObj = $this->getContainer( $srcCont );
                        $srcObj = new CF_Object( $sContObj, $srcRel, false, false ); // skip HEAD
                        if ( !empty( $params['async'] ) ) { // deferred
-                               $handle = $sContObj->delete_object_async( $srcRel );
-                               $status->value = new SwiftFileOpHandle( $this, $params, 'Delete', $handle );
+                               $op = $sContObj->delete_object_async( $srcRel );
+                               $status->value = new SwiftFileOpHandle( $this, $params, 'Delete', $op );
                                $status->value->affectedObjects[] = $srcObj;
                        } else { // actually write the object in Swift
                                $sContObj->delete_object( $srcRel );
@@ -852,13 +885,13 @@ class SwiftFileBackend extends FileBackendStore {
                                                // See function "create_container_table" in common/db.py.
                                                // If a directory is not "greater" than the last one,
                                                // then it was already listed by the calling iterator.
-                                               if ( $objectDir > $lastDir ) {
+                                               if ( strcmp( $objectDir, $lastDir ) > 0 ) {
                                                        $pDir = $objectDir;
                                                        do { // add dir and all its parent dirs
                                                                $dirs[] = "{$pDir}/";
                                                                $pDir = $this->getParentDir( $pDir );
                                                        } while ( $pDir !== false // sanity
-                                                               && $pDir > $lastDir // not done already
+                                                               && strcmp( $pDir, $lastDir ) > 0 // not done already
                                                                && strlen( $pDir ) > strlen( $dir ) // within $dir
                                                        );
                                                }
@@ -989,11 +1022,8 @@ class SwiftFileBackend extends FileBackendStore {
                        return null;
                }
 
-               # Check the recursion guard to avoid loops when filling metadata
-               if ( empty( $params['nostat'] ) && !$this->fileExists( $params ) ) {
-                       return null;
-               }
-
+               // Blindly create a tmp file and stream to it, catching any exception if the file does
+               // not exist. Also, doing a stat here will cause infinite loops when filling metadata.
                $tmpFile = null;
                try {
                        $sContObj = $this->getContainer( $srcCont );
@@ -1001,7 +1031,7 @@ class SwiftFileBackend extends FileBackendStore {
                        // Get source file extension
                        $ext = FileBackend::extensionFromPath( $srcRel );
                        // Create a new temporary file...
-                       $tmpFile = TempFSFile::factory( wfBaseName( $srcRel ) . '_', $ext );
+                       $tmpFile = TempFSFile::factory( 'localcopy_', $ext );
                        if ( $tmpFile ) {
                                $handle = fopen( $tmpFile->getPath(), 'wb' );
                                if ( $handle ) {
@@ -1013,6 +1043,8 @@ class SwiftFileBackend extends FileBackendStore {
                        }
                } catch ( NoSuchContainerException $e ) {
                        $tmpFile = null;
+               } catch ( NoSuchObjectException $e ) {
+                       $tmpFile = null;
                } catch ( CloudFilesException $e ) { // some other exception?
                        $tmpFile = null;
                        $this->handleException( $e, null, __METHOD__, $params );
@@ -1297,6 +1329,9 @@ class SwiftFileBackend extends FileBackendStore {
                if ( $e->getMessage() ) {
                        trigger_error( "$func: " . $e->getMessage(), E_USER_WARNING );
                }
+               if ( $e instanceof InvalidResponseException ) { // possibly a stale token
+                       $this->srvCache->delete( $this->getCredsCacheKey( $this->auth->username ) );
+               }
                wfDebugLog( 'SwiftBackend',
                        get_class( $e ) . " in '{$func}' (given '" . FormatJson::encode( $params ) . "')" .
                        ( $e->getMessage() ? ": {$e->getMessage()}" : "" )
index ed6bf2f..b738898 100644 (file)
@@ -43,7 +43,7 @@ class TempFSFile extends FSFile {
         */
        public static function factory( $prefix, $extension = '' ) {
                wfProfileIn( __METHOD__ );
-               $base = wfTempDir() . '/' . $prefix . dechex( mt_rand( 0, 99999999 ) );
+               $base = wfTempDir() . '/' . $prefix . wfRandomString( 12 );
                $ext = ( $extension != '' ) ? ".{$extension}" : "";
                for ( $attempt = 1; true; $attempt++ ) {
                        $path = "{$base}-{$attempt}{$ext}";
index 8fa4c6f..f6268c2 100644 (file)
@@ -27,6 +27,9 @@
  * @since 1.20
  */
 class DBFileJournal extends FileJournal {
+       /** @var DatabaseBase */
+       protected $dbw;
+
        protected $wiki = false; // string; wiki DB name
 
        /**
@@ -71,9 +74,7 @@ class DBFileJournal extends FileJournal {
                }
 
                try {
-                       $dbw->begin();
                        $dbw->insert( 'filejournal', $data, __METHOD__ );
-                       $dbw->commit();
                } catch ( DBError $e ) {
                        $status->fatal( 'filejournal-fail-dbquery', $this->backend );
                        return $status;
@@ -125,12 +126,10 @@ class DBFileJournal extends FileJournal {
                $dbw = $this->getMasterDB();
                $dbCutoff = $dbw->timestamp( time() - 86400 * $this->ttlDays );
 
-               $dbw->begin();
                $dbw->delete( 'filejournal',
                        array( 'fj_timestamp < ' . $dbw->addQuotes( $dbCutoff ) ),
                        __METHOD__
                );
-               $dbw->commit();
 
                return $status;
        }
@@ -142,7 +141,12 @@ class DBFileJournal extends FileJournal {
         * @throws DBError
         */
        protected function getMasterDB() {
-               $lb = wfGetLBFactory()->newMainLB();
-               return $lb->getConnection( DB_MASTER, array(), $this->wiki );
+               if ( !$this->dbw ) {
+                       // Get a separate connection in autocommit mode
+                       $lb = wfGetLBFactory()->newMainLB();
+                       $this->dbw = $lb->getConnection( DB_MASTER, array(), $this->wiki );
+                       $this->dbw->clearFlag( DBO_TRX );
+               }
+               return $this->dbw;
        }
 }
index 1563a58..30d6825 100644 (file)
@@ -51,6 +51,7 @@ class FileRepo {
        var $pathDisclosureProtection = 'simple'; // 'paranoid'
        var $descriptionCacheExpiry, $url, $thumbUrl;
        var $hashLevels, $deletedHashLevels;
+       protected $abbrvThreshold;
 
        /**
         * Factory functions for creating new files
@@ -113,10 +114,12 @@ class FileRepo {
                        ? $info['deletedHashLevels']
                        : $this->hashLevels;
                $this->transformVia404 = !empty( $info['transformVia404'] );
-               $this->zones = isset( $info['zones'] )
-                       ? $info['zones']
-                       : array();
+               $this->abbrvThreshold = isset( $info['abbrvThreshold'] )
+                       ? $info['abbrvThreshold']
+                       : 255;
+               $this->isPrivate = !empty( $info['isPrivate'] );
                // Give defaults for the basic zones...
+               $this->zones = isset( $info['zones'] ) ? $info['zones'] : array();
                foreach ( array( 'public', 'thumb', 'temp', 'deleted' ) as $zone ) {
                        if ( !isset( $this->zones[$zone]['container'] ) ) {
                                $this->zones[$zone]['container'] = "{$this->name}-{$zone}";
@@ -840,10 +843,11 @@ class FileRepo {
         *
         * @param $src string File system path
         * @param $dst string Virtual URL or storage path
+        * @param $disposition string|null Content-Disposition if given and supported
         * @return FileRepoStatus
         */
-       final public function quickImport( $src, $dst ) {
-               return $this->quickImportBatch( array( array( $src, $dst ) ) );
+       final public function quickImport( $src, $dst, $disposition = null ) {
+               return $this->quickImportBatch( array( array( $src, $dst, $disposition ) ) );
        }
 
        /**
@@ -879,7 +883,9 @@ class FileRepo {
         * This function can be used to write to otherwise read-only foreign repos.
         * This is intended for copying generated thumbnails into the repo.
         *
-        * @param $pairs Array List of tuples (file system path, virtual URL or storage path)
+        * When "dispositions" are given they are used as Content-Disposition if supported.
+        *
+        * @param $pairs Array List of tuples (file system path, virtual URL/storage path, disposition)
         * @return FileRepoStatus
         */
        public function quickImportBatch( array $pairs ) {
@@ -889,9 +895,10 @@ class FileRepo {
                        list ( $src, $dst ) = $pair;
                        $dst = $this->resolveToStoragePath( $dst );
                        $operations[] = array(
-                               'op'        => 'store',
-                               'src'       => $src,
-                               'dst'       => $dst
+                               'op'          => 'store',
+                               'src'         => $src,
+                               'dst'         => $dst,
+                               'disposition' => isset( $pair[2] ) ? $pair[2] : null
                        );
                        $status->merge( $this->initDirectory( dirname( $dst ) ) );
                }
@@ -936,19 +943,38 @@ class FileRepo {
        public function storeTemp( $originalName, $srcPath ) {
                $this->assertWritableRepo(); // fail out if read-only
 
-               $date      = gmdate( "YmdHis" );
-               $hashPath  = $this->getHashPath( $originalName );
-               $dstRel    = "{$hashPath}{$date}!{$originalName}";
-               $dstUrlRel = $hashPath . $date . '!' . rawurlencode( $originalName );
+               $date       = gmdate( "YmdHis" );
+               $hashPath   = $this->getHashPath( $originalName );
+               $dstRel     = "{$hashPath}{$date}!{$originalName}";
+               $dstUrlRel  = $hashPath . $date . '!' . rawurlencode( $originalName );
+               $virtualUrl = $this->getVirtualUrl( 'temp' )  . '/' . $dstUrlRel;
 
-               $result = $this->store( $srcPath, 'temp', $dstRel, self::SKIP_LOCKING );
-               $result->value = $this->getVirtualUrl( 'temp' ) . '/' . $dstUrlRel;
+               $result = $this->quickImport( $srcPath, $virtualUrl );
+               $result->value = $virtualUrl;
 
                return $result;
        }
 
        /**
-        * Concatenate a list of files into a target file location.
+        * Remove a temporary file or mark it for garbage collection
+        *
+        * @param $virtualUrl String: the virtual URL returned by FileRepo::storeTemp()
+        * @return Boolean: true on success, false on failure
+        */
+       public function freeTemp( $virtualUrl ) {
+               $this->assertWritableRepo(); // fail out if read-only
+
+               $temp = $this->getVirtualUrl( 'temp' );
+               if ( substr( $virtualUrl, 0, strlen( $temp ) ) != $temp ) {
+                       wfDebug( __METHOD__.": Invalid temp virtual URL\n" );
+                       return false;
+               }
+
+               return $this->quickPurge( $virtualUrl )->isOK();
+       }
+
+       /**
+        * Concatenate a list of temporary files into a target file location.
         *
         * @param $srcPaths Array Ordered list of source virtual URLs/storage paths
         * @param $dstPath String Target file system path
@@ -962,14 +988,10 @@ class FileRepo {
                $status = $this->newGood();
 
                $sources = array();
-               $deleteOperations = array(); // post-concatenate ops
                foreach ( $srcPaths as $srcPath ) {
                        // Resolve source to a storage path if virtual
                        $source = $this->resolveToStoragePath( $srcPath );
                        $sources[] = $source; // chunk to merge
-                       if ( $flags & self::DELETE_SOURCE ) {
-                               $deleteOperations[] = array( 'op' => 'delete', 'src' => $source );
-                       }
                }
 
                // Concatenate the chunks into one FS file
@@ -980,36 +1002,16 @@ class FileRepo {
                }
 
                // Delete the sources if required
-               if ( $deleteOperations ) {
-                       $opts = array( 'force' => true );
-                       $status->merge( $this->backend->doOperations( $deleteOperations, $opts ) );
+               if ( $flags & self::DELETE_SOURCE ) {
+                       $status->merge( $this->quickPurgeBatch( $srcPaths ) );
                }
 
-               // Make sure status is OK, despite any $deleteOperations fatals
+               // Make sure status is OK, despite any quickPurgeBatch() fatals
                $status->setResult( true );
 
                return $status;
        }
 
-       /**
-        * Remove a temporary file or mark it for garbage collection
-        *
-        * @param $virtualUrl String: the virtual URL returned by FileRepo::storeTemp()
-        * @return Boolean: true on success, false on failure
-        */
-       public function freeTemp( $virtualUrl ) {
-               $this->assertWritableRepo(); // fail out if read-only
-
-               $temp = "mwrepo://{$this->name}/temp";
-               if ( substr( $virtualUrl, 0, strlen( $temp ) ) != $temp ) {
-                       wfDebug( __METHOD__.": Invalid temp virtual URL\n" );
-                       return false;
-               }
-               $path = $this->resolveVirtualUrl( $virtualUrl );
-
-               return $this->cleanupBatch( array( $path ), self::SKIP_LOCKING )->isOK();
-       }
-
        /**
         * Copy or move a file either from a storage path, virtual URL,
         * or FS path, into this repository at the specified destination location.
@@ -1163,7 +1165,7 @@ class FileRepo {
                list( $b, $container, $r ) = FileBackend::splitStoragePath( $path );
 
                $params = array( 'dir' => $path );
-               if ( $container === $this->zones['deleted']['container'] ) {
+               if ( $this->isPrivate || $container === $this->zones['deleted']['container'] ) {
                        # Take all available measures to prevent web accessibility of new deleted
                        # directories, in case the user has not configured offline storage
                        $params = array( 'noAccess' => true, 'noListing' => true ) + $params;
@@ -1555,6 +1557,21 @@ class FileRepo {
                return wfMessageFallback( 'shared-repo-name-' . $this->name, 'shared-repo' )->text();
        }
 
+       /**
+        * Get the portion of the file that contains the origin file name.
+        * If that name is too long, then the name "thumbnail.<ext>" will be given.
+        *
+        * @param $name string
+        * @return string
+        */
+       public function nameForThumb( $name ) {
+               if ( strlen( $name ) > $this->abbrvThreshold ) {
+                       $ext  = FileBackend::extensionFromPath( $name );
+                       $name = ( $ext == '' ) ? 'thumbnail' : "thumbnail.$ext";
+               }
+               return $name;
+       }
+
        /**
         * Returns true if this the local file repository.
         *
index 133a956..3b0ea14 100644 (file)
@@ -464,6 +464,39 @@ abstract class File {
                }
        }
 
+       /**
+        * Will the thumbnail be animated if one would expect it to be.
+        *
+        * Currently used to add a warning to the image description page
+        *
+        * @return bool false if the main image is both animated
+        *   and the thumbnail is not. In all other cases must return
+        *   true. If image is not renderable whatsoever, should
+        *   return true.
+        */
+       public function canAnimateThumbIfAppropriate() {
+               $handler = $this->getHandler();
+               if ( !$handler ) {
+                       // We cannot handle image whatsoever, thus
+                       // one would not expect it to be animated
+                       // so true.
+                       return true;
+               } else {
+                       if ( $this->allowInlineDisplay()
+                               && $handler->isAnimatedImage( $this )
+                               && !$handler->canAnimateThumbnail( $this )
+                       ) {
+                               // Image is animated, but thumbnail isn't.
+                               // This is unexpected to the user.
+                               return false;
+                       } else {
+                               // Image is not animated, so one would
+                               // not expect thumb to be
+                               return true;
+                       }
+               }
+       }
+
        /**
         * Get handler-specific metadata
         * Overridden by LocalFile, UnregisteredLocalFile
@@ -734,7 +767,8 @@ abstract class File {
         * @return string
         */
        function thumbName( $params ) {
-               return $this->generateThumbName( $this->getName(), $params );
+               $name = $this->repo ? $this->repo->nameForThumb( $this->getName() ) : $this->getName();
+               return $this->generateThumbName( $name, $params );
        }
 
        /**
@@ -909,7 +943,8 @@ abstract class File {
                                }
                        } elseif ( $this->repo && $thumb->hasFile() && !$thumb->fileIsSource() ) {
                                // Copy the thumbnail from the file system into storage...
-                               $status = $this->repo->quickImport( $tmpThumbPath, $thumbPath );
+                               $disposition = $this->getThumbDisposition( $thumbName );
+                               $status = $this->repo->quickImport( $tmpThumbPath, $thumbPath, $disposition );
                                if ( $status->isOK() ) {
                                        $thumb->setStoragePath( $thumbPath );
                                } else {
@@ -933,6 +968,19 @@ abstract class File {
                return is_object( $thumb ) ? $thumb : false;
        }
 
+       /**
+        * @param $thumbName string Thumbnail name
+        * @return string Content-Disposition header value
+        */
+       function getThumbDisposition( $thumbName ) {
+               $fileName = $this->name; // file name to suggest
+               $thumbExt = FileBackend::extensionFromPath( $thumbName );
+               if ( $thumbExt != '' && $thumbExt !== $this->getExtension() ) {
+                       $fileName .= ".$thumbExt";
+               }
+               return FileBackend::makeContentDisposition( 'inline', $fileName );
+       }
+
        /**
         * Hook into transform() to allow migration of thumbnail files
         * STUB
@@ -965,7 +1013,8 @@ abstract class File {
                        $path = '/common/images/icons/' . $icon;
                        $filepath = $wgStyleDirectory . $path;
                        if ( file_exists( $filepath ) ) { // always FS
-                               return new ThumbnailImage( $this, $wgStylePath . $path, 120, 120 );
+                               $params = array( 'width' => 120, 'height' => 120 );
+                               return new ThumbnailImage( $this, $wgStylePath . $path, false, $params );
                        }
                }
                return null;
index e849c8e..75b9d45 100644 (file)
@@ -1151,7 +1151,7 @@ class LocalFile extends File {
                # Add the log entry
                $log = new LogPage( 'upload' );
                $action = $reupload ? 'overwrite' : 'upload';
-               $log->addEntry( $action, $descTitle, $comment, array(), $user );
+               $logId = $log->addEntry( $action, $descTitle, $comment, array(), $user );
 
                wfProfileIn( __METHOD__ . '-edit' );
                if ( $descTitle->exists() ) {
@@ -1169,6 +1169,8 @@ class LocalFile extends File {
                                wfRunHooks( 'NewRevisionFromEditComplete', array( $wikiPage, $nullRevision, $latest, $user ) );
                                $wikiPage->updateRevisionOn( $dbw, $nullRevision );
                        }
+                       $dbw->update( 'logging', array( 'log_page' => $descTitle->getArticleID() ), array( 'log_id' => $logId ), __METHOD__ );
+
                        # Invalidate the cache for the description page
                        $descTitle->invalidateCache();
                        $descTitle->purgeSquid();
@@ -1176,7 +1178,11 @@ class LocalFile extends File {
                        # 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.
-                       $wikiPage->doEdit( $pageText, $comment, EDIT_NEW | EDIT_SUPPRESS_RC, false, $user );
+                       $status = $wikiPage->doEdit( $pageText, $comment, EDIT_NEW | EDIT_SUPPRESS_RC, false, $user );
+
+                       if ( isset( $status->value['revision'] ) ) {
+                               $dbw->update( 'logging', array( 'log_page' => $status->value['revision']->getPage() ), array( 'log_id' => $logId ), __METHOD__ );
+                       }
                }
                wfProfileOut( __METHOD__ . '-edit' );
 
index 0beedfa..de59b2d 100644 (file)
@@ -334,7 +334,7 @@ abstract class DatabaseInstaller {
         * @return String
         */
        public function getReadableName() {
-               return wfMsg( 'config-type-' . $this->getName() );
+               return wfMessage( 'config-type-' . $this->getName() )->text();
        }
 
        /**
@@ -509,7 +509,7 @@ abstract class DatabaseInstaller {
        public function getInstallUserBox() {
                return
                        Html::openElement( 'fieldset' ) .
-                       Html::element( 'legend', array(), wfMsg( 'config-db-install-account' ) ) .
+                       Html::element( 'legend', array(), wfMessage( 'config-db-install-account' )->text() ) .
                        $this->getTextBox( '_InstallUser', 'config-db-username', array( 'dir' => 'ltr' ), $this->parent->getHelpBox( 'config-db-install-username' ) ) .
                        $this->getPasswordBox( '_InstallPassword', 'config-db-password', array( 'dir' => 'ltr' ), $this->parent->getHelpBox( 'config-db-install-password' ) ) .
                        Html::closeElement( 'fieldset' );
@@ -534,7 +534,7 @@ abstract class DatabaseInstaller {
        public function getWebUserBox( $noCreateMsg = false ) {
                $wrapperStyle = $this->getVar( '_SameAccount' ) ? 'display: none' : '';
                $s = Html::openElement( 'fieldset' ) .
-                       Html::element( 'legend', array(), wfMsg( 'config-db-web-account' ) ) .
+                       Html::element( 'legend', array(), wfMessage( 'config-db-web-account' )->text() ) .
                        $this->getCheckBox(
                                '_SameAccount', 'config-db-web-account-same',
                                array( 'class' => 'hideShowRadio', 'rel' => 'dbOtherAccount' )
@@ -544,7 +544,7 @@ abstract class DatabaseInstaller {
                        $this->getPasswordBox( 'wgDBpassword', 'config-db-password' ) .
                        $this->parent->getHelpBox( 'config-db-web-help' );
                if ( $noCreateMsg ) {
-                       $s .= $this->parent->getWarningBox( wfMsgNoTrans( $noCreateMsg ) );
+                       $s .= $this->parent->getWarningBox( wfMessage( $noCreateMsg )->plain() );
                } else {
                        $s .= $this->getCheckBox( '_CreateDBAccount', 'config-db-web-create' );
                }
index 6483c4e..ff0a99e 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Deployment
  */
 
-require_once( dirname(__FILE__) . '/../../maintenance/Maintenance.php' );
+require_once( __DIR__ . '/../../maintenance/Maintenance.php' );
 
 /**
  * Class for handling database updates. Roughly based off of updaters.inc, with
@@ -253,9 +253,9 @@ abstract class DatabaseUpdater {
 
        /**
         * Add a maintenance script to be run after the database updates are complete.
-        * 
+        *
         * @since 1.19
-        * 
+        *
         * @param $class string Name of a Maintenance subclass
         */
        public function addPostDatabaseUpdateMaintenance( $class ) {
@@ -273,7 +273,7 @@ abstract class DatabaseUpdater {
 
        /**
         * @since 1.17
-        * 
+        *
         * @return array
         */
        public function getPostDatabaseUpdateMaintenance() {
@@ -463,13 +463,20 @@ abstract class DatabaseUpdater {
         * Applies a SQL patch
         * @param $path String Path to the patch file
         * @param $isFullPath Boolean Whether to treat $path as a relative or not
+        * @param $msg String Description of the patch
         */
-       protected function applyPatch( $path, $isFullPath = false ) {
-               if ( $isFullPath ) {
-                       $this->db->sourceFile( $path );
-               } else {
-                       $this->db->sourceFile( $this->db->patchPath( $path ) );
+       protected function applyPatch( $path, $isFullPath = false, $msg = null ) {
+               if ( $msg === null ) {
+                       $msg = "Applying $path patch";
+               }
+
+               if ( !$isFullPath ) {
+                       $path = $this->db->patchPath( $path );
                }
+
+               $this->output( "$msg ..." );
+               $this->db->sourceFile( $path );
+               $this->output( "done.\n" );
        }
 
        /**
@@ -482,9 +489,7 @@ abstract class DatabaseUpdater {
                if ( $this->db->tableExists( $name, __METHOD__ ) ) {
                        $this->output( "...$name table already exists.\n" );
                } else {
-                       $this->output( "Creating $name table..." );
-                       $this->applyPatch( $patch, $fullpath );
-                       $this->output( "done.\n" );
+                       $this->applyPatch( $patch, $fullpath, "Creating $name table" );
                }
        }
 
@@ -501,9 +506,7 @@ abstract class DatabaseUpdater {
                } elseif ( $this->db->fieldExists( $table, $field, __METHOD__ ) ) {
                        $this->output( "...have $field field in $table table.\n" );
                } else {
-                       $this->output( "Adding $field field to table $table..." );
-                       $this->applyPatch( $patch, $fullpath );
-                       $this->output( "done.\n" );
+                       $this->applyPatch( $patch, $fullpath, "Adding $field field to table $table" );
                }
        }
 
@@ -518,9 +521,7 @@ abstract class DatabaseUpdater {
                if ( $this->db->indexExists( $table, $index, __METHOD__ ) ) {
                        $this->output( "...index $index already set on $table table.\n" );
                } else {
-                       $this->output( "Adding index $index to table $table... " );
-                       $this->applyPatch( $patch, $fullpath );
-                       $this->output( "done.\n" );
+                       $this->applyPatch( $patch, $fullpath, "Adding index $index to table $table" );
                }
        }
 
@@ -534,9 +535,7 @@ abstract class DatabaseUpdater {
         */
        protected function dropField( $table, $field, $patch, $fullpath = false ) {
                if ( $this->db->fieldExists( $table, $field, __METHOD__ ) ) {
-                       $this->output( "Table $table contains $field field. Dropping... " );
-                       $this->applyPatch( $patch, $fullpath );
-                       $this->output( "done.\n" );
+                       $this->applyPatch( $patch, $fullpath, "Table $table contains $field field. Dropping" );
                } else {
                        $this->output( "...$table table does not contain $field field.\n" );
                }
@@ -552,24 +551,35 @@ abstract class DatabaseUpdater {
         */
        protected function dropIndex( $table, $index, $patch, $fullpath = false ) {
                if ( $this->db->indexExists( $table, $index, __METHOD__ ) ) {
-                       $this->output( "Dropping $index index from table $table... " );
-                       $this->applyPatch( $patch, $fullpath );
-                       $this->output( "done.\n" );
+                       $this->applyPatch( $patch, $fullpath, "Dropping $index index from table $table" );
                } else {
                        $this->output( "...$index key doesn't exist.\n" );
                }
        }
 
        /**
+        * If the specified table exists, drop it, or execute the
+        * patch if one is provided.
+        *
+        * Public @since 1.20
+        *
         * @param $table string
-        * @param $patch string
+        * @param $patch string|false
         * @param $fullpath bool
         */
-       protected function dropTable( $table, $patch, $fullpath = false ) {
+       public function dropTable( $table, $patch = false, $fullpath = false ) {
                if ( $this->db->tableExists( $table, __METHOD__ ) ) {
-                       $this->output( "Dropping table $table... " );
-                       $this->applyPatch( $patch, $fullpath );
-                       $this->output( "done.\n" );
+                       $msg = "Dropping table $table";
+
+                       if ( $patch === false ) {
+                               $this->output( "$msg ..." );
+                               $this->db->dropTable( $table, __METHOD__ );
+                               $this->output( "done.\n" );
+                       }
+                       else {
+                               $this->applyPatch( $patch, $fullpath, $msg );
+                       }
+
                } else {
                        $this->output( "...$table doesn't exist.\n" );
                }
@@ -592,10 +602,8 @@ abstract class DatabaseUpdater {
                } elseif( $this->updateRowExists( $updateKey ) ) {
                        $this->output( "...$field in table $table already modified by patch $patch.\n" );
                } else {
-                       $this->output( "Modifying $field field of table $table..." );
-                       $this->applyPatch( $patch, $fullpath );
+                       $this->applyPatch( $patch, $fullpath, "Modifying $field field of table $table" );
                        $this->insertUpdateRow( $updateKey );
-                       $this->output( "done.\n" );
                }
        }
 
@@ -688,9 +696,7 @@ abstract class DatabaseUpdater {
                        return;
                }
 
-               $this->output( "Converting tc_time from UNIX epoch to MediaWiki timestamp... " );
-               $this->applyPatch( 'patch-tc-timestamp.sql' );
-               $this->output( "done.\n" );
+               $this->applyPatch( 'patch-tc-timestamp.sql', false, "Converting tc_time from UNIX epoch to MediaWiki timestamp" );
        }
 
        /**
index d87f294..ac5dbd7 100644 (file)
@@ -308,7 +308,7 @@ abstract class Installer {
 
        /**
         * UI interface for displaying a short message
-        * The parameters are like parameters to wfMsg().
+        * The parameters are like parameters to wfMessage().
         * 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.
         * @param $msg
@@ -339,7 +339,7 @@ abstract class Installer {
 
                // Load the installer's i18n file.
                $wgExtensionMessagesFiles['MediawikiInstaller'] =
-                       dirname( __FILE__ ) . '/Installer.i18n.php';
+                       __DIR__ . '/Installer.i18n.php';
 
                // Having a user with id = 0 safeguards us from DB access via User::loadOptions().
                $wgUser = User::newFromId( 0 );
@@ -645,7 +645,7 @@ abstract class Installer {
                $allNames = array();
 
                foreach ( self::getDBTypes() as $name ) {
-                       $allNames[] = wfMsg( "config-type-$name" );
+                       $allNames[] = wfMessage( "config-type-$name" )->text();
                }
 
                // cache initially available databases to make sure that everything will be displayed correctly
@@ -788,6 +788,10 @@ abstract class Installer {
 
        /**
         * Environment check for the PCRE module.
+        *
+        * @note If this check were to fail, the parser would
+        *   probably throw an exception before the result
+        *   of this check is shown to the user.
         * @return bool
         */
        protected function envCheckPCRE() {
@@ -797,8 +801,13 @@ abstract class Installer {
                }
                wfSuppressWarnings();
                $regexd = preg_replace( '/[\x{0430}-\x{04FF}]/iu', '', '-АБВГД-' );
+               // Need to check for \p support too, as PCRE can be compiled
+               // with utf8 support, but not unicode property support.
+               // check that \p{Zs} (space separators) matches
+               // U+3000 (Ideographic space)
+               $regexprop = preg_replace( '/\p{Zs}/u', '', "-\xE3\x80\x80-" );
                wfRestoreWarnings();
-               if ( $regexd != '--' ) {
+               if ( $regexd != '--' || $regexprop != '--' ) {
                        $this->showError( 'config-pcre-no-utf8' );
                        return false;
                }
@@ -926,7 +935,7 @@ abstract class Installer {
         */
        protected function envCheckPath() {
                global $IP;
-               $IP = dirname( dirname( dirname( __FILE__ ) ) );
+               $IP = dirname( dirname( __DIR__ ) );
                $this->setVar( 'IP', $IP );
 
                $this->showMessage( 'config-using-uri', $this->getVar( 'wgServer' ), $this->getVar( 'wgScriptPath' ) );
@@ -1585,12 +1594,13 @@ abstract class Installer {
                $status = Status::newGood();
                try {
                        $page = WikiPage::factory( Title::newMainPage() );
-                       $page->doEdit( wfMsgForContent( 'mainpagetext' ) . "\n\n" .
-                                                       wfMsgForContent( 'mainpagedocfooter' ),
-                                                       '',
-                                                       EDIT_NEW,
-                                                       false,
-                                                       User::newFromName( 'MediaWiki default' ) );
+                       $page->doEdit( wfMessage( 'mainpagetext' )->inContentLanguage()->text() . "\n\n" .
+                                       wfMessage( 'mainpagedocfooter' )->inContentLanguage()->text(),
+                                       '',
+                                       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() );
index e453b01..d93dba6 100644 (file)
@@ -232,9 +232,7 @@ class MysqlUpdater extends DatabaseUpdater {
                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" );
+                       $this->applyPatch( $patchFile, false, "Fixing $field encoding on $table table" );
                }
        }
 
@@ -271,12 +269,8 @@ class MysqlUpdater extends DatabaseUpdater {
                        return;
                }
 
-               $this->output( 'Creating interwiki table...' );
-               $this->applyPatch( 'patch-interwiki.sql' );
-               $this->output( "done.\n" );
-               $this->output( 'Adding default interwiki definitions...' );
-               $this->applyPatch( "$IP/maintenance/interwiki.sql", true );
-               $this->output( "done.\n" );
+               $this->applyPatch( 'patch-interwiki.sql', false, 'Creating interwiki table' );
+               $this->applyPatch( "$IP/maintenance/interwiki.sql", true, 'Adding default interwiki definitions' );
        }
 
        /**
@@ -292,9 +286,7 @@ class MysqlUpdater extends DatabaseUpdater {
                        return;
                }
 
-               $this->output( "Updating indexes to 20031107..." );
-               $this->applyPatch( 'patch-indexes.sql', true );
-               $this->output( "done.\n" );
+               $this->applyPatch( 'patch-indexes.sql', true, "Updating indexes to 20031107" );
        }
 
        protected function doOldLinksUpdate() {
@@ -309,10 +301,9 @@ class MysqlUpdater extends DatabaseUpdater {
                        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" );
+               if( $this->applyPatch( 'patch-fix-il_from.sql', false, "Fixing ancient broken imagelinks table." ) ) {
+                       $this->output("NOTE: you will have to run maintenance/refreshLinks.php after this." );
+               }
        }
 
        /**
@@ -534,9 +525,7 @@ class MysqlUpdater extends DatabaseUpdater {
                        return;
                }
 
-               $this->output( "Converting links and brokenlinks tables to pagelinks... " );
-               $this->applyPatch( 'patch-pagelinks.sql' );
-               $this->output( "done.\n" );
+               $this->applyPatch( 'patch-pagelinks.sql', false, "Converting links and brokenlinks tables to pagelinks" );
 
                global $wgContLang;
                foreach ( MWNamespace::getCanonicalNamespaces() as $ns => $name ) {
@@ -572,9 +561,7 @@ class MysqlUpdater extends DatabaseUpdater {
                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" );
+               $this->applyPatch( 'patch-user_nameindex.sql', false, "Adding unique index on user_name" );
        }
 
        protected function doUserGroupsUpdate() {
@@ -587,9 +574,7 @@ class MysqlUpdater extends DatabaseUpdater {
                                $this->db->query( "ALTER TABLE $oldug RENAME TO $newug", __METHOD__ );
                                $this->output( "done.\n" );
 
-                               $this->output( "Re-adding fresh user_groups table... " );
-                               $this->applyPatch( 'patch-user_groups.sql' );
-                               $this->output( "done.\n" );
+                               $this->applyPatch( 'patch-user_groups.sql', false, "Re-adding fresh user_groups table" );
 
                                $this->output( "***\n" );
                                $this->output( "*** WARNING: You will need to manually fix up user permissions in the user_groups\n" );
@@ -601,15 +586,11 @@ class MysqlUpdater extends DatabaseUpdater {
                        return;
                }
 
-               $this->output( "Adding user_groups table... " );
-               $this->applyPatch( 'patch-user_groups.sql' );
-               $this->output( "done.\n" );
+               $this->applyPatch( 'patch-user_groups.sql', false, "Adding user_groups table" );
 
                if ( !$this->db->tableExists( 'user_rights', __METHOD__ ) ) {
                        if ( $this->db->fieldExists( 'user', 'user_rights', __METHOD__ ) ) {
-                               $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( "done.\n" );
+                               $this->db->applyPatch( 'patch-user_rights.sql', false, "Upgrading from a 1.3 or older database? Breaking out user_rights for conversion" );
                        } 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" );
@@ -651,9 +632,7 @@ class MysqlUpdater extends DatabaseUpdater {
                        return;
                }
 
-               $this->output( "Making wl_notificationtimestamp nullable... " );
-               $this->applyPatch( 'patch-watchlist-null.sql' );
-               $this->output( "done.\n" );
+               $this->applyPatch( 'patch-watchlist-null.sql', false, "Making wl_notificationtimestamp nullable" );
        }
 
        /**
@@ -679,8 +658,8 @@ class MysqlUpdater extends DatabaseUpdater {
                        return;
                }
 
-               $this->output( "Creating templatelinks table...\n" );
-               $this->applyPatch( 'patch-templatelinks.sql' );
+               $this->applyPatch( 'patch-templatelinks.sql', false, "Creating templatelinks table" );
+
                $this->output( "Populating...\n" );
                if ( wfGetLB()->getServerCount() > 1 ) {
                        // Slow, replication-friendly update
@@ -721,8 +700,7 @@ class MysqlUpdater extends DatabaseUpdater {
                        !$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" );
+                       $this->applyPatch( 'patch-backlinkindexes.sql', false, "Updating backlinking indices" );
                }
        }
 
@@ -737,9 +715,8 @@ class MysqlUpdater extends DatabaseUpdater {
                        return;
                }
 
-               $this->output( "Creating page_restrictions table..." );
-               $this->applyPatch( 'patch-page_restrictions.sql' );
-               $this->applyPatch( 'patch-page_restrictions_sortkey.sql' );
+               $this->applyPatch( 'patch-page_restrictions.sql', false, "Creating page_restrictions table (1/2)" );
+               $this->applyPatch( 'patch-page_restrictions_sortkey.sql', false, "Creating page_restrictions table (2/2)" );
                $this->output( "done.\n" );
 
                $this->output( "Migrating old restrictions to new table...\n" );
@@ -749,8 +726,7 @@ class MysqlUpdater extends DatabaseUpdater {
 
        protected function doCategorylinksIndicesUpdate() {
                if ( !$this->indexHasField( 'categorylinks', 'cl_sortkey', 'cl_from' ) ) {
-                       $this->applyPatch( 'patch-categorylinksindex.sql' );
-                       $this->output( "...categorylinks indices updated\n" );
+                       $this->applyPatch( 'patch-categorylinksindex.sql', false, "Updating categorylinks Indices" );
                }
        }
 
@@ -789,18 +765,14 @@ class MysqlUpdater extends DatabaseUpdater {
                } elseif ( $this->db->fieldExists( 'profiling', 'pf_memory', __METHOD__ ) ) {
                        $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" );
+                       $this->applyPatch( 'patch-profiling-memory.sql', false, "Adding pf_memory field to table profiling" );
                }
        }
 
        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" );
+                       $this->applyPatch( 'patch-filearchive-user-index.sql', false, "Updating filearchive indices" );
                }
        }
 
@@ -811,9 +783,7 @@ class MysqlUpdater extends DatabaseUpdater {
                        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" );
+               $this->applyPatch( 'patch-pl-tl-il-unique.sql', false, "Making pl_namespace, tl_namespace and il_to indices UNIQUE" );
        }
 
        protected function renameEuWikiId() {
@@ -822,9 +792,7 @@ class MysqlUpdater extends DatabaseUpdater {
                        return;
                }
 
-               $this->output( "Renaming eu_wiki_id -> eu_local_id... " );
-               $this->applyPatch( 'patch-eu_local_id.sql' );
-               $this->output( "done.\n" );
+               $this->applyPatch( 'patch-eu_local_id.sql', false, "Renaming eu_wiki_id -> eu_local_id" );
        }
 
        protected function doUpdateMimeMinorField() {
@@ -833,9 +801,7 @@ class MysqlUpdater extends DatabaseUpdater {
                        return;
                }
 
-               $this->output( "Altering all *_mime_minor fields to 100 bytes in size ... " );
-               $this->applyPatch( 'patch-mime_minor_length.sql' );
-               $this->output( "done.\n" );
+               $this->applyPatch( 'patch-mime_minor_length.sql', false, "Altering all *_mime_minor fields to 100 bytes in size" );
        }
 
        protected function doClFieldsUpdate() {
@@ -844,9 +810,7 @@ class MysqlUpdater extends DatabaseUpdater {
                        return;
                }
 
-               $this->output( 'Updating categorylinks (again)...' );
-               $this->applyPatch( 'patch-categorylinks-better-collation2.sql' );
-               $this->output( "done.\n" );
+               $this->applyPatch( 'patch-categorylinks-better-collation2.sql', false, 'Updating categorylinks (again)' );
        }
 
        protected function doLangLinksLengthUpdate() {
@@ -855,9 +819,7 @@ class MysqlUpdater extends DatabaseUpdater {
                $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" );
+                       $this->applyPatch( 'patch-langlinks-ll_lang-20.sql', false, 'Updating length of ll_lang in langlinks' );
                } else {
                        $this->output( "...ll_lang is up-to-date.\n" );
                }
@@ -870,8 +832,6 @@ class MysqlUpdater extends DatabaseUpdater {
                        return;
                }
 
-               $this->output( "Making user_last_timestamp nullable... " );
-               $this->applyPatch( 'patch-user-newtalk-timestamp-null.sql' );
-               $this->output( "done.\n" );
+               $this->applyPatch( 'patch-user-newtalk-timestamp-null.sql', false, "Making user_last_timestamp nullable" );
        }
 }
index 8a93b45..a741f26 100644 (file)
@@ -83,40 +83,32 @@ class OracleUpdater extends DatabaseUpdater {
         * Oracle inserts NULL, so namespace fields should have a default value
         */
        protected function doNamespaceDefaults() {
-               $this->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" );
+               $this->applyPatch( 'patch_namespace_defaults.sql', false, "Altering namespace fields with default value" );
        }
 
        /**
         * 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" );
+               $this->applyPatch( 'patch_fk_rename_deferred.sql', false, "Altering foreign keys ... " );
        }
 
        /**
         * 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" );
+               $this->applyPatch( 'patch_create_17_functions.sql', false, "Recreating functions" );
        }
 
        /**
@@ -124,14 +116,11 @@ class OracleUpdater extends DatabaseUpdater {
         * 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( '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" );
+               $this->applyPatch( 'patch_16_17_schema_changes.sql', false, "Updating schema to 17" );
        }
 
        /**
@@ -160,24 +149,19 @@ class OracleUpdater extends DatabaseUpdater {
         * converted to NULL in Oracle
         */
        protected function doRemoveNotNullEmptyDefaults() {
-               $this->output( "Removing not null empty constraints ... " );
                $meta = $this->db->fieldInfo( 'categorylinks' , 'cl_sortkey_prefix' );
                if ( $meta->isNullable() ) {
-                       $this->output( "constraints seem to be removed\n" );
                        return;
                }
-               $this->applyPatch( 'patch_remove_not_null_empty_defs.sql', false );
-               $this->output( "ok\n" );
+               $this->applyPatch( 'patch_remove_not_null_empty_defs.sql', false, "Removing not null empty constraints" );
        }
+
        protected function doRemoveNotNullEmptyDefaults2() {
-               $this->output( "Removing not null empty constraints ... " );
                $meta = $this->db->fieldInfo( 'ipblocks' , 'ipb_by_text' );
                if ( $meta->isNullable() ) {
-                       $this->output( "constraints seem to be removed\n" );
                        return;
                }
-               $this->applyPatch( 'patch_remove_not_null_empty_defs2.sql', false );
-               $this->output( "ok\n" );
+               $this->applyPatch( 'patch_remove_not_null_empty_defs2.sql', false, "Removing not null empty constraints" );
        }
 
        /**
@@ -185,17 +169,13 @@ class OracleUpdater extends DatabaseUpdater {
         * cascading taken in account in the deleting function
         */
        protected function doRecentchangesFK2Cascade() {
-               $this->output( "Altering RECENTCHANGES_FK2 ... " );
-
                $meta = $this->db->query( 'SELECT 1 FROM all_constraints WHERE owner = \''.strtoupper($this->db->getDBname()).'\' AND constraint_name = \''.$this->db->tablePrefix().'RECENTCHANGES_FK2\' AND delete_rule = \'CASCADE\'' );
                $row = $meta->fetchRow();
                if ( $row ) {
-                       $this->output( "FK up to date\n" );
                        return;
                }
 
-               $this->applyPatch( 'patch_recentchanges_fk2_cascade.sql', false );
-               $this->output( "ok\n" );
+               $this->applyPatch( 'patch_recentchanges_fk2_cascade.sql', false, "Altering RECENTCHANGES_FK2" );
        }
 
        /**
@@ -219,9 +199,7 @@ class OracleUpdater extends DatabaseUpdater {
         * rebuilding of the function that duplicates tables for tests
         */
        protected function doRebuildDuplicateFunction() {
-               $this->output( "Rebuilding duplicate function ... " );
-               $this->applyPatch( 'patch_rebuild_dupfunc.sql', false );
-               $this->output( "ok\n" );
+               $this->applyPatch( 'patch_rebuild_dupfunc.sql', false, "Rebuilding duplicate function" );
        }
 
        /**
index 9aa1a13..499a2d6 100644 (file)
@@ -613,11 +613,11 @@ END;
                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->output( "Creating index '$index' on table '$table'\n" );
                                $this->db->query( "CREATE INDEX $index ON $table $type" );
                        } else {
-                               $this->applyPatch( $type, true );
+                               $this->applyPatch( $type, true, "Creating index '$index' on table '$table'" );
                        }
                }
        }
@@ -647,7 +647,6 @@ END;
 
        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' );
@@ -656,7 +655,7 @@ END;
                                $this->output( "Dropping rule 'archive_delete'\n" );
                                $this->db->query( 'DROP RULE archive_delete ON archive' );
                        }
-                       $this->applyPatch( 'patch-remove-archive2.sql' );
+                       $this->applyPatch( 'patch-remove-archive2.sql', false, "Converting 'archive2' back to normal archive table" );
                } else {
                        $this->output( "...obsolete table 'archive2' does not exist\n" );
                }
@@ -691,8 +690,7 @@ END;
 
        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' );
+                       $this->applyPatch( 'patch-page_deleted.sql', false, "Adding function and trigger 'page_deleted' to table 'page'" );
                } else {
                        $this->output( "...table 'page' has 'page_deleted' trigger\n" );
                }
@@ -727,35 +725,30 @@ END;
                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' );
+                       $this->applyPatch( 'patch-revision_rev_user_fkey.sql', false, "Changing constraint 'revision_rev_user_fkey' to ON DELETE RESTRICT" );
                }
        }
 
        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' );
+                       $this->applyPatch( 'patch-rename-iwl_prefix.sql', false, "Replacing index 'iwl_prefix' with 'iwl_prefix_from_title'" );
                }
        }
 
        protected function addInterwikiType() {
-               $this->output( "Refreshing add_interwiki()...\n" );
-               $this->applyPatch( 'patch-add_interwiki.sql' );
+               $this->applyPatch( 'patch-add_interwiki.sql', false, "Refreshing add_interwiki()" );
        }
 
        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->output( "Refreshing ts2_page_title()...\n" );
-               $this->applyPatch( 'patch-ts2pagetitle.sql' );
+               $this->applyPatch( 'patch-ts2pagetitle.sql', false, "Refreshing ts2_page_title()" );
 
                # 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->output( "Rewriting tsearch2 triggers...\n" );
-                       $this->applyPatch( 'patch-tsearch2funcs.sql' );
+                       $this->applyPatch( 'patch-tsearch2funcs.sql', false, "Rewriting tsearch2 triggers" );
                }
        }
 }
index 8146274..9ba9eab 100644 (file)
@@ -101,22 +101,16 @@ class SqliteUpdater extends DatabaseUpdater {
                        $this->output( "...have initial indexes\n" );
                        return;
                }
-               $this->output( "Adding initial indexes..." );
-               $this->applyPatch( 'initial-indexes.sql' );
-               $this->output( "done\n" );
+               $this->applyPatch( 'initial-indexes.sql', false, "Adding initial indexes" );
        }
 
        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" );
+                       $this->applyPatch( 'searchindex-no-fts.sql', false, 'PHP is missing FTS3 support, downgrading tables' );
                } elseif ( !$fts3tTable && $module == 'FTS3' ) {
-                       $this->output( '...adding FTS3 search capabilities...' );
-                       $this->applyPatch( 'searchindex-fts3.sql' );
-                       $this->output( "done\n" );
+                       $this->applyPatch( 'searchindex-fts3.sql', false, "Adding FTS3 search capabilities" );
                } else {
                        $this->output( "...fulltext search table appears to be in order.\n" );
                }
index 4f31195..0d5ea57 100644 (file)
@@ -362,14 +362,14 @@ class WebInstaller extends Installer {
                        $url = $m[1];
                }
                return md5( serialize( array(
-                       'local path' => dirname( dirname( __FILE__ ) ),
+                       'local path' => dirname( __DIR__ ),
                        'url' => $url,
                        'version' => $GLOBALS['wgVersion']
                ) ) );
        }
 
        /**
-        * Show an error message in a box. Parameters are like wfMsg().
+        * Show an error message in a box. Parameters are like wfMessage().
         * @param $msg
         */
        public function showError( $msg /*...*/ ) {
@@ -540,7 +540,7 @@ class WebInstaller extends Installer {
                $s .= $this->getPageListItem( 'Restart', true, $currentPageName );
                $s .= "</ul></div>\n"; // end list pane
                $s .= Html::element( 'h2', array(),
-                               wfMsg( 'config-page-' . strtolower( $currentPageName ) ) );
+                       wfMessage( 'config-page-' . strtolower( $currentPageName ) )->text() );
 
                $this->output->addHTMLNoFlush( $s );
        }
@@ -556,7 +556,7 @@ class WebInstaller extends Installer {
         */
        private function getPageListItem( $pageName, $enabled, $currentPageName ) {
                $s = "<li class=\"config-page-list-item\">";
-               $name = wfMsg( 'config-page-' . strtolower( $pageName ) );
+               $name = wfMessage( 'config-page-' . strtolower( $pageName ) )->text();
 
                if ( $enabled ) {
                        $query = array( 'page' => $pageName );
@@ -609,7 +609,7 @@ class WebInstaller extends Installer {
        /**
         * Get HTML for an error box with an icon.
         *
-        * @param $text String: wikitext, get this with wfMsgNoTrans()
+        * @param $text String: wikitext, get this with wfMessage()->plain()
         *
         * @return string
         */
@@ -620,7 +620,7 @@ class WebInstaller extends Installer {
        /**
         * Get HTML for a warning box with an icon.
         *
-        * @param $text String: wikitext, get this with wfMsgNoTrans()
+        * @param $text String: wikitext, get this with wfMessage()->plain()
         *
         * @return string
         */
@@ -631,7 +631,7 @@ class WebInstaller extends Installer {
        /**
         * Get HTML for an info box with an icon.
         *
-        * @param $text String: wikitext, get this with wfMsgNoTrans()
+        * @param $text String: wikitext, get this with wfMessage()->plain()
         * @param $icon String: icon name, file in skins/common/images
         * @param $class String: additional class name to add to the wrapper div
         *
@@ -640,13 +640,13 @@ class WebInstaller extends Installer {
        public function getInfoBox( $text, $icon = false, $class = false ) {
                $text = $this->parse( $text, true );
                $icon = ( $icon == false ) ? '../skins/common/images/info-32.png' : '../skins/common/images/'.$icon;
-               $alt = wfMsg( 'config-information' );
+               $alt = wfMessage( 'config-information' )->text();
                return Html::infoBox( $text, $icon, $alt, $class, false );
        }
 
        /**
         * Get small text indented help for a preceding form field.
-        * Parameters like wfMsg().
+        * Parameters like wfMessage().
         *
         * @param $msg
         * @return string
@@ -659,14 +659,15 @@ class WebInstaller extends Installer {
                $html = $this->parse( $text, true );
 
                return "<div class=\"mw-help-field-container\">\n" .
-                       "<span class=\"mw-help-field-hint\">" . wfMsgHtml( 'config-help' ) . "</span>\n" .
+                       "<span class=\"mw-help-field-hint\">" . wfMessage( 'config-help' )->escaped() .
+                       "</span>\n" .
                        "<span class=\"mw-help-field-data\">" . $html . "</span>\n" .
                        "</div>\n";
        }
 
        /**
         * Output a help box.
-        * @param $msg String key for wfMsg()
+        * @param $msg String key for wfMessage()
         */
        public function showHelpBox( $msg /*, ... */ ) {
                $args = func_get_args();
@@ -713,7 +714,7 @@ class WebInstaller extends Installer {
                if ( strval( $msg ) == '' ) {
                        $labelText = '&#160;';
                } else {
-                       $labelText = wfMsgHtml( $msg );
+                       $labelText = wfMessage( $msg )->escaped();
                }
 
                $attributes = array( 'class' => 'config-label' );
@@ -893,7 +894,7 @@ class WebInstaller extends Installer {
                if( isset( $params['rawtext'] ) ) {
                        $labelText = $params['rawtext'];
                } else {
-                       $labelText = $this->parse( wfMsg( $params['label'] ) );
+                       $labelText = $this->parse( wfMessage( $params['label'] )->text() );
                }
 
                return
@@ -969,7 +970,7 @@ class WebInstaller extends Installer {
                                Xml::radio( $params['controlName'], $value, $checked, $itemAttribs ) .
                                '&#160;' .
                                Xml::tags( 'label', array( 'for' => $id ), $this->parse(
-                                       wfMsgNoTrans( $params['itemLabelPrefix'] . strtolower( $value ) )
+                                       wfMessage( $params['itemLabelPrefix'] . strtolower( $value ) )->plain()
                                ) ) .
                                "</li>\n";
                }
@@ -1077,7 +1078,7 @@ class WebInstaller extends Installer {
                ) );
                $anchor = Html::rawElement( 'a',
                        array( 'href' => $this->getURL( array( 'localsettings' => 1 ) ) ),
-                       $img . ' ' . wfMsgHtml( 'config-download-localsettings' ) );
+                       $img . ' ' . wfMessage( 'config-download-localsettings' )->escaped() );
                return Html::rawElement( 'div', array( 'class' => 'config-download-link' ), $anchor );
        }
 
index 84d115b..e440c6b 100644 (file)
@@ -108,7 +108,7 @@ class WebInstallerOutput {
         * @return String
         */
        public function getCSS( $dir ) {
-               $skinDir = dirname( dirname( dirname( __FILE__ ) ) ) . '/skins';
+               $skinDir = dirname( dirname( __DIR__ ) ) . '/skins';
 
                // All these files will be concatenated in sequence and loaded
                // as one file.
@@ -273,7 +273,7 @@ class WebInstallerOutput {
        </div>
        <div class="portal"><div class="body">
 <?php
-       echo $this->parent->parse( wfMsgNoTrans( 'config-sidebar' ), true );
+       echo $this->parent->parse( wfMessage( 'config-sidebar' )->plain(), true );
 ?>
        </div></div>
 </div>
@@ -301,7 +301,7 @@ class WebInstallerOutput {
 
        public function outputTitle() {
                global $wgVersion;
-               echo htmlspecialchars( wfMsg( 'config-title', $wgVersion ) );
+               echo wfMessage( 'config-title', $wgVersion )->escaped();
        }
 
        public function getJQuery() {
index 917a59a..a193afb 100644 (file)
@@ -84,13 +84,13 @@ abstract class WebInstallerPage {
 
                if ( $continue ) {
                        // Fake submit button for enter keypress (bug 26267)
-                       $s .= Xml::submitButton( wfMsg( "config-$continue" ),
+                       $s .= Xml::submitButton( wfMessage( "config-$continue" )->text(),
                                array( 'name' => "enter-$continue", 'style' =>
                                        'visibility:hidden;overflow:hidden;width:1px;margin:0' ) ) . "\n";
                }
 
                if ( $back ) {
-                       $s .= Xml::submitButton( wfMsg( "config-$back" ),
+                       $s .= Xml::submitButton( wfMessage( "config-$back" )->text(),
                                array(
                                        'name' => "submit-$back",
                                        'tabindex' => $this->parent->nextTabIndex()
@@ -98,7 +98,7 @@ abstract class WebInstallerPage {
                }
 
                if ( $continue ) {
-                       $s .= Xml::submitButton( wfMsg( "config-$continue" ),
+                       $s .= Xml::submitButton( wfMessage( "config-$continue" )->text(),
                                array(
                                        'name' => "submit-$continue",
                                        'tabindex' => $this->parent->nextTabIndex(),
@@ -133,7 +133,7 @@ abstract class WebInstallerPage {
         * @return string
         */
        protected function getFieldsetStart( $legend ) {
-               return "\n<fieldset><legend>" . wfMsgHtml( $legend ) . "</legend>\n";
+               return "\n<fieldset><legend>" . wfMessage( $legend )->escaped() . "</legend>\n";
        }
 
        /**
@@ -295,8 +295,8 @@ class WebInstaller_ExistingWiki extends WebInstallerPage {
                        }
                        $this->startForm();
                        $this->addHTML( $this->parent->getInfoBox(
-                               wfMsgNoTrans( 'config-upgrade-key-missing',
-                                       "<pre dir=\"ltr\">\$wgUpgradeKey = '" . $this->getVar( 'wgUpgradeKey' ) . "';</pre>" )
+                               wfMessage( 'config-upgrade-key-missing', "<pre dir=\"ltr\">\$wgUpgradeKey = '" .
+                                       $this->getVar( 'wgUpgradeKey' ) . "';</pre>" )->plain()
                        ) );
                        $this->endForm( 'continue' );
                        return 'output';
@@ -333,7 +333,7 @@ class WebInstaller_ExistingWiki extends WebInstallerPage {
        protected function showKeyForm() {
                $this->startForm();
                $this->addHTML(
-                       $this->parent->getInfoBox( wfMsgNoTrans( 'config-localsettings-upgrade' ) ).
+                       $this->parent->getInfoBox( wfMessage( 'config-localsettings-upgrade' )->plain() ).
                        '<br />' .
                        $this->parent->getTextBox( array(
                                'var' => 'wgUpgradeKey',
@@ -410,13 +410,13 @@ class WebInstaller_Welcome extends WebInstallerPage {
                                return 'continue';
                        }
                }
-               $this->parent->output->addWikiText( wfMsgNoTrans( 'config-welcome' ) );
+               $this->parent->output->addWikiText( wfMessage( 'config-welcome' )->plain() );
                $status = $this->parent->doEnvironmentChecks();
                if ( $status->isGood() ) {
                        $this->parent->output->addHTML( '<span class="success-message">' .
-                               wfMsgHtml( 'config-env-good' ) . '</span>' );
-                       $this->parent->output->addWikiText( wfMsgNoTrans( 'config-copyright',
-                               SpecialVersion::getCopyrightAndAuthorList() ) );
+                               wfMessage( 'config-env-good' )->escaped() . '</span>' );
+                       $this->parent->output->addWikiText( wfMessage( 'config-copyright',
+                               SpecialVersion::getCopyrightAndAuthorList() )->plain() );
                        $this->startForm();
                        $this->endForm();
                } else {
@@ -454,10 +454,10 @@ class WebInstaller_DBConnect extends WebInstallerPage {
                $dbSupport = '';
                foreach( $this->parent->getDBTypes() as $type ) {
                        $link = DatabaseBase::factory( $type )->getSoftwareLink();
-                       $dbSupport .= wfMsgNoTrans( "config-support-$type", $link ) . "\n";
+                       $dbSupport .= wfMessage( "config-support-$type", $link )->plain() . "\n";
                }
                $this->addHTML( $this->parent->getInfoBox(
-                       wfMsg( 'config-support-info', trim( $dbSupport ) ) ) );
+                       wfMessage( 'config-support-info', trim( $dbSupport ) )->text() ) );
 
                foreach ( $this->parent->getVar( '_CompiledDBs' ) as $type ) {
                        $installer = $this->parent->getDBInstaller( $type );
@@ -476,7 +476,7 @@ class WebInstaller_DBConnect extends WebInstallerPage {
                        $settings .=
                                Html::openElement( 'div', array( 'id' => 'DB_wrapper_' . $type,
                                                'class' => 'dbWrapper' ) ) .
-                               Html::element( 'h3', array(), wfMsg( 'config-header-' . $type ) ) .
+                               Html::element( 'h3', array(), wfMessage( 'config-header-' . $type )->text() ) .
                                $installer->getConnectForm() .
                                "</div>\n";
                }
@@ -555,7 +555,7 @@ class WebInstaller_Upgrade extends WebInstallerPage {
 
                $this->startForm();
                $this->addHTML( $this->parent->getInfoBox(
-                       wfMsgNoTrans( 'config-can-upgrade', $GLOBALS['wgVersion'] ) ) );
+                       wfMessage( 'config-can-upgrade', $GLOBALS['wgVersion'] )->plain() ) );
                $this->endForm();
        }
 
@@ -570,11 +570,11 @@ class WebInstaller_Upgrade extends WebInstallerPage {
                $this->parent->disableLinkPopups();
                $this->addHTML(
                        $this->parent->getInfoBox(
-                               wfMsgNoTrans( $msg,
+                               wfMessage( $msg,
                                        $this->getVar( 'wgServer' ) .
                                                $this->getVar( 'wgScriptPath' ) . '/index' .
                                                $this->getVar( 'wgScriptExtension' )
-                               ), 'tick-32.png'
+                               )->plain(), 'tick-32.png'
                        )
                );
                $this->parent->restoreLinkPopups();
@@ -635,7 +635,10 @@ class WebInstaller_Name extends WebInstallerPage {
                // 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->setVar(
+                       'wgMetaNamespace',
+                       wfMessage( 'config-ns-other-default' )->inContentLanguage()->text()
+               );
 
                $this->addHTML(
                        $this->parent->getTextBox( array(
@@ -683,7 +686,7 @@ class WebInstaller_Name extends WebInstallerPage {
                                'help' => $this->parent->getHelpBox( 'config-subscribe-help' )
                        ) ) .
                        $this->getFieldSetEnd() .
-                       $this->parent->getInfoBox( wfMsg( 'config-almost-done' ) ) .
+                       $this->parent->getInfoBox( wfMessage( 'config-almost-done' )->text() ) .
                        $this->parent->getRadioSet( array(
                                'var' => '_SkipOptional',
                                'itemLabelPrefix' => 'config-optional-',
@@ -721,7 +724,7 @@ class WebInstaller_Name extends WebInstallerPage {
                        $name = preg_replace( '/__+/', '_', $name );
                        $name = ucfirst( trim( $name, '_' ) );
                } elseif ( $nsType == 'generic' ) {
-                       $name = wfMsg( 'config-ns-generic' );
+                       $name = wfMessage( 'config-ns-generic' )->text();
                } else { // other
                        $name = $this->getVar( 'wgMetaNamespace' );
                }
@@ -833,7 +836,7 @@ class WebInstaller_Options extends WebInstallerPage {
                                'itemLabelPrefix' => 'config-profile-',
                                'values' => array_keys( $this->parent->rightsProfiles ),
                        ) ) .
-                       $this->parent->getInfoBox( wfMsgNoTrans( 'config-profile-help' ) ) .
+                       $this->parent->getInfoBox( wfMessage( 'config-profile-help' )->plain() ) .
 
                        # Licensing
                        $this->parent->getRadioSet( array(
@@ -1046,7 +1049,7 @@ class WebInstaller_Options extends WebInstallerPage {
                                        'href' => $this->getCCPartnerUrl(),
                                        'onclick' => $expandJs,
                                ),
-                               wfMsg( 'config-cc-again' )
+                               wfMessage( 'config-cc-again' )->text()
                        ) .
                        "</p>\n" .
                        "<script type=\"text/javascript\">\n" .
@@ -1092,7 +1095,7 @@ class WebInstaller_Options extends WebInstallerPage {
                        if ( isset( $entry['text'] ) ) {
                                $this->setVar( 'wgRightsText', $entry['text'] );
                        } else {
-                               $this->setVar( 'wgRightsText', wfMsg( 'config-license-' . $code ) );
+                               $this->setVar( 'wgRightsText', wfMessage( 'config-license-' . $code )->text() );
                        }
                        $this->setVar( 'wgRightsUrl', $entry['url'] );
                        $this->setVar( 'wgRightsIcon', $entry['icon'] );
@@ -1165,14 +1168,14 @@ class WebInstaller_Install extends WebInstallerPage {
                        $this->endForm( $continue, $back );
                } else {
                        $this->startForm();
-                       $this->addHTML( $this->parent->getInfoBox( wfMsgNoTrans( 'config-install-begin' ) ) );
+                       $this->addHTML( $this->parent->getInfoBox( wfMessage( 'config-install-begin' )->plain() ) );
                        $this->endForm();
                }
                return true;
        }
 
        public function startStage( $step ) {
-               $this->addHTML( "<li>" . wfMsgHtml( "config-install-$step" ) . wfMsg( 'ellipsis') );
+               $this->addHTML( "<li>" . wfMessage( "config-install-$step" )->escaped() . wfMessage( 'ellipsis')->escaped() );
                if ( $step == 'extension-tables' ) {
                        $this->startLiveBox();
                }
@@ -1187,7 +1190,7 @@ class WebInstaller_Install extends WebInstallerPage {
                        $this->endLiveBox();
                }
                $msg = $status->isOk() ? 'config-install-step-done' : 'config-install-step-failed';
-               $html = wfMsgHtml( 'word-separator' ) . wfMsgHtml( $msg );
+               $html = wfMessage( 'word-separator' )->escaped() . wfMessage( $msg )->escaped();
                if ( !$status->isOk() ) {
                        $html = "<span class=\"error\">$html</span>";
                }
@@ -1219,13 +1222,13 @@ class WebInstaller_Complete extends WebInstallerPage {
                $this->parent->disableLinkPopups();
                $this->addHTML(
                        $this->parent->getInfoBox(
-                               wfMsgNoTrans( 'config-install-done',
+                               wfMessage( 'config-install-done',
                                        $lsUrl,
                                        $this->getVar( 'wgServer' ) .
                                                $this->getVar( 'wgScriptPath' ) . '/index' .
                                                $this->getVar( 'wgScriptExtension' ),
                                        '<downloadlink/>'
-                               ), 'tick-32.png'
+                               )->plain(), 'tick-32.png'
                        )
                );
                $this->parent->restoreLinkPopups();
@@ -1246,7 +1249,7 @@ class WebInstaller_Restart extends WebInstallerPage {
                }
 
                $this->startForm();
-               $s = $this->parent->getWarningBox( wfMsgNoTrans( 'config-help-restart' ) );
+               $s = $this->parent->getWarningBox( wfMessage( 'config-help-restart' )->plain() );
                $this->addHTML( $s );
                $this->endForm( 'restart' );
        }
@@ -1266,9 +1269,9 @@ abstract class WebInstaller_Document extends WebInstallerPage {
        }
 
        public function getFileContents() {
-               $file = dirname( __FILE__ ) . '/../../' . $this->getFileName();
+               $file = __DIR__ . '/../../' . $this->getFileName();
                if( ! file_exists( $file ) ) {
-                       return wfMsgNoTrans( 'config-nofile', $file );
+                       return wfMessage( 'config-nofile', $file )->plain();
                }
                return file_get_contents( $file );
        }
index 5b86a90..08af997 100644 (file)
@@ -89,7 +89,7 @@ class DoubleRedirectJob extends Job {
                        return false;
                }
 
-               $targetRev = Revision::newFromTitle( $this->title );
+               $targetRev = Revision::newFromTitle( $this->title, false, Revision::READ_LATEST );
                if ( !$targetRev ) {
                        wfDebug( __METHOD__.": target redirect already deleted, ignoring\n" );
                        return true;
index d7c9563..45f0570 100644 (file)
@@ -153,7 +153,6 @@ abstract class Job {
                $dbw = wfGetDB( DB_MASTER );
                $dbw->delete( 'job', array( 'job_id' => $row->job_id ), __METHOD__ );
                $affected = $dbw->affectedRows();
-               $dbw->commit( __METHOD__ );
 
                if ( !$affected ) {
                        // Failed, someone else beat us to it
@@ -177,7 +176,6 @@ abstract class Job {
                        // Delete the random row
                        $dbw->delete( 'job', array( 'job_id' => $row->job_id ), __METHOD__ );
                        $affected = $dbw->affectedRows();
-                       $dbw->commit( __METHOD__ );
 
                        if ( !$affected ) {
                                // Random job gone before we exclusively deleted it
index 6b8dede..b23951c 100644 (file)
@@ -55,7 +55,7 @@ class RefreshLinksJob extends Job {
                        wfGetLB()->waitFor( $this->params['masterPos'] );
                }
 
-               $revision = Revision::newFromTitle( $this->title, 0, Revision::READ_NORMAL );
+               $revision = Revision::newFromTitle( $this->title, false, Revision::READ_NORMAL );
                if ( !$revision ) {
                        $this->error = 'refreshLinks: Article not found "' .
                                $this->title->getPrefixedDBkey() . '"';
@@ -185,7 +185,7 @@ class RefreshLinksJob2 extends Job {
                        }
                        # Re-parse each page that transcludes this page and update their tracking links...
                        foreach ( $titles as $title ) {
-                               $revision = Revision::newFromTitle( $title, 0, Revision::READ_NORMAL );
+                               $revision = Revision::newFromTitle( $title, false, Revision::READ_NORMAL );
                                if ( !$revision ) {
                                        $this->error = 'refreshLinks: Article not found "' .
                                                $title->getPrefixedDBkey() . '"';
index 55ccc27..e06f68e 100644 (file)
@@ -82,10 +82,10 @@ class UploadFromUrlJob extends Job {
 
                                if ( $this->params['leaveMessage'] ) {
                                        $this->user->leaveUserMessage(
-                                               wfMsg( 'upload-warning-subj' ),
-                                               wfMsg( 'upload-warning-msg',
+                                               wfMessage( 'upload-warning-subj' )->text(),
+                                               wfMessage( 'upload-warning-msg',
                                                        $key,
-                                                       $this->params['url'] )
+                                                       $this->params['url'] )->text()
                                        );
                                } else {
                                        wfSetupSession( $this->params['sessionId'] );
@@ -119,17 +119,17 @@ class UploadFromUrlJob extends Job {
        protected function leaveMessage( $status ) {
                if ( $this->params['leaveMessage'] ) {
                        if ( $status->isGood() ) {
-                               $this->user->leaveUserMessage( wfMsg( 'upload-success-subj' ),
-                                       wfMsg( 'upload-success-msg',
+                               $this->user->leaveUserMessage( wfMessage( 'upload-success-subj' )->text(),
+                                       wfMessage( 'upload-success-msg',
                                                $this->upload->getTitle()->getText(),
                                                $this->params['url']
-                                       ) );
+                                       )->text() );
                        } else {
-                               $this->user->leaveUserMessage( wfMsg( 'upload-failure-subj' ),
-                                       wfMsg( 'upload-failure-msg',
+                               $this->user->leaveUserMessage( wfMessage( 'upload-failure-subj' )->text(),
+                                       wfMessage( 'upload-failure-msg',
                                                $status->getWikiText(),
                                                $this->params['url']
-                                       ) );
+                                       )->text() );
                        }
                } else {
                        wfSetupSession( $this->params['sessionId'] );
index aa60fbd..f67700c 100644 (file)
@@ -20,7 +20,7 @@
  * @file
  */
 
-require_once dirname( __FILE__ ) . '/Services_JSON.php';
+require_once __DIR__ . '/Services_JSON.php';
 
 /**
  * JSON formatter wrapper class
index e6672b4..4ebbc49 100644 (file)
@@ -268,10 +268,17 @@ class CSSJanus {
         * @return string
         */
        private static function fixBackgroundPosition( $css ) {
-               $css = preg_replace_callback( self::$patterns['bg_horizontal_percentage'],
+               $replaced = preg_replace_callback( self::$patterns['bg_horizontal_percentage'],
                        array( 'self', 'calculateNewBackgroundPosition' ), $css );
-               $css = preg_replace_callback( self::$patterns['bg_horizontal_percentage_x'],
+               if ( $replaced !== null ) {
+                       // Check for null; sometimes preg_replace_callback() returns null here for some weird reason
+                       $css = $replaced;
+               }
+               $replaced = preg_replace_callback( self::$patterns['bg_horizontal_percentage_x'],
                        array( 'self', 'calculateNewBackgroundPosition' ), $css );
+               if ( $replaced !== null ) {
+                       $css = $replaced;
+               }
 
                return $css;
        }
index d4cc525..b4b9d61 100644 (file)
@@ -142,11 +142,11 @@ abstract class GenericArrayObject extends ArrayObject {
         * @param mixed $index
         * @param mixed $value
         *
-        * @throws Exception
+        * @throws InvalidArgumentException
         */
        protected function setElement( $index, $value ) {
                if ( !$this->hasValidType( $value ) ) {
-                       throw new Exception(
+                       throw new InvalidArgumentException(
                                'Can only add ' . $this->getObjectType() . ' implementing objects to ' . get_called_class() . '.'
                        );
                }
index 8d2219a..7586bb6 100644 (file)
@@ -171,7 +171,7 @@ class LogFormatter {
                        if ( $actionComment == '' ) {
                                $actionComment = $comment;
                        } else {
-                               $actionComment .= wfMsgForContent( 'colon-separator' ) . $comment;
+                               $actionComment .= wfMessage( 'colon-separator' )->inContentLanguage()->text() . $comment;
                        }
                }
 
@@ -191,7 +191,6 @@ class LogFormatter {
                $entry = $this->entry;
                $parameters = $entry->getParameters();
                // @see LogPage::actionText()
-               $msgOpts = array( 'parsemag', 'escape', 'replaceafter', 'content' );
                // Text of title the action is aimed at.
                $target = $entry->getTarget()->getPrefixedText() ;
                $text = null;
@@ -200,11 +199,13 @@ class LogFormatter {
                                switch( $entry->getSubtype() ) {
                                        case 'move':
                                                $movesource =  $parameters['4::target'];
-                                               $text = wfMsgExt( '1movedto2', $msgOpts, $target, $movesource );
+                                               $text = wfMessage( '1movedto2' )
+                                                       ->rawParams( $target, $movesource )->inContentLanguage()->escaped();
                                                break;
                                        case 'move_redir':
                                                $movesource =  $parameters['4::target'];
-                                               $text = wfMsgExt( '1movedto2_redir', $msgOpts, $target, $movesource );
+                                               $text = wfMessage( '1movedto2_redir' )
+                                                       ->rawParams( $target, $movesource )->inContentLanguage()->escaped();
                                                break;
                                        case 'move-noredirect':
                                                break;
@@ -216,10 +217,12 @@ class LogFormatter {
                        case 'delete':
                                switch( $entry->getSubtype() ) {
                                        case 'delete':
-                                               $text = wfMsgExt( 'deletedarticle', $msgOpts, $target );
+                                               $text = wfMessage( 'deletedarticle' )
+                                                       ->rawParams( $target )->inContentLanguage()->escaped();
                                                break;
                                        case 'restore':
-                                               $text = wfMsgExt( 'undeletedarticle', $msgOpts, $target );
+                                               $text = wfMessage( 'undeletedarticle' )
+                                                       ->rawParams( $target )->inContentLanguage()->escaped();
                                                break;
                                        //case 'revision': // Revision deletion
                                        //case 'event': // Log deletion
@@ -233,8 +236,10 @@ class LogFormatter {
                                // Create a diff link to the patrolled revision
                                if ( $entry->getSubtype() === 'patrol' ) {
                                        $diffLink = htmlspecialchars(
-                                               wfMsgForContent( 'patrol-log-diff', $parameters['4::curid'] ) );
-                                       $text = wfMsgForContent( 'patrol-log-line', $diffLink, "[[$target]]", "" );
+                                               wfMessage( 'patrol-log-diff', $parameters['4::curid'] )
+                                                       ->inContentLanguage()->text() );
+                                       $text = wfMessage( 'patrol-log-line', $diffLink, "[[$target]]", "" )
+                                               ->inContentLanguage()->text();
                                } else {
                                        // broken??
                                }
@@ -243,14 +248,17 @@ class LogFormatter {
                        case 'protect':
                                switch( $entry->getSubtype() ) {
                                case 'protect':
-                                       $text = wfMsgExt( 'protectedarticle', $msgOpts, $target . ' ' . $parameters[0] );
-                                               break;
+                                       $text = wfMessage( 'protectedarticle' )
+                                               ->rawParams( $target . ' ' . $parameters[0] )->inContentLanguage()->escaped();
+                                       break;
                                case 'unprotect':
-                                       $text = wfMsgExt( 'unprotectedarticle', $msgOpts, $target );
-                                               break;
+                                       $text = wfMessage( 'unprotectedarticle' )
+                                               ->rawParams( $target )->inContentLanguage()->escaped();
+                                       break;
                                case 'modify':
-                                       $text = wfMsgExt( 'modifiedarticleprotection', $msgOpts, $target . ' ' . $parameters[0] );
-                                               break;
+                                       $text = wfMessage( 'modifiedarticleprotection' )
+                                               ->rawParams( $target . ' ' . $parameters[0] )->inContentLanguage()->escaped();
+                                       break;
                                }
                                break;
 
@@ -258,13 +266,16 @@ class LogFormatter {
                                switch( $entry->getSubtype() ) {
                                        case 'newusers':
                                        case 'create':
-                                               $text = wfMsgExt( 'newuserlog-create-entry', $msgOpts /* no params */ );
+                                               $text = wfMessage( 'newuserlog-create-entry' )
+                                                       ->inContentLanguage()->escaped();
                                                break;
                                        case 'create2':
-                                               $text = wfMsgExt( 'newuserlog-create2-entry', $msgOpts, $target );
+                                               $text = wfMessage( 'newuserlog-create2-entry' )
+                                                       ->rawParams( $target )->inContentLanguage()->escaped();
                                                break;
                                        case 'autocreate':
-                                               $text = wfMsgExt( 'newuserlog-autocreate-entry', $msgOpts /* no params */ );
+                                               $text = wfMessage( 'newuserlog-autocreate-entry' )
+                                                       ->inContentLanguage()->escaped();
                                                break;
                                }
                                break;
@@ -272,10 +283,12 @@ class LogFormatter {
                        case 'upload':
                                switch( $entry->getSubtype() ) {
                                        case 'upload':
-                                               $text = wfMsgExt( 'uploadedimage', $msgOpts, $target );
+                                               $text = wfMessage( 'uploadedimage' )
+                                                       ->rawParams( $target )->inContentLanguage()->escaped();
                                                break;
                                        case 'overwrite':
-                                               $text = wfMsgExt( 'overwroteimage', $msgOpts, $target );
+                                               $text = wfMessage( 'overwroteimage' )
+                                                       ->rawParams( $target )->inContentLanguage()->escaped();
                                                break;
                                }
                                break;
index 2521ae8..d96a5ea 100644 (file)
@@ -133,7 +133,8 @@ class LogPage {
                        if ( $rcComment == '' ) {
                                $rcComment = $this->comment;
                        } else {
-                               $rcComment .= wfMsgForContent( 'colon-separator' ) . $this->comment;
+                               $rcComment .= wfMessage( 'colon-separator' )->inContentLanguage()->text() .
+                                       $this->comment;
                        }
                }
 
@@ -152,7 +153,8 @@ class LogPage {
                        if ( $rcComment == '' ) {
                                $rcComment = $this->comment;
                        } else {
-                               $rcComment .= wfMsgForContent( 'colon-separator' ) . $this->comment;
+                               $rcComment .= wfMessage( 'colon-separator' )->inContentLanguage()->text() .
+                                       $this->comment;
                        }
                }
 
@@ -197,7 +199,7 @@ class LogPage {
                global $wgLogNames;
 
                if( isset( $wgLogNames[$type] ) ) {
-                       return str_replace( '_', ' ', wfMsg( $wgLogNames[$type] ) );
+                       return str_replace( '_', ' ', wfMessage( $wgLogNames[$type] )->text() );
                } else {
                        // Bogus log types? Perhaps an extension was removed.
                        return $type;
@@ -214,7 +216,7 @@ class LogPage {
         */
        public static function logHeader( $type ) {
                global $wgLogHeaders;
-               return wfMsgExt( $wgLogHeaders[$type], array( 'parseinline' ) );
+               return wfMessage( $wgLogHeaders[$type] )->parse();
        }
 
        /**
@@ -247,12 +249,12 @@ class LogPage {
 
                if( isset( $wgLogActions[$key] ) ) {
                        if( is_null( $title ) ) {
-                               $rv = wfMsgExt( $wgLogActions[$key], array( 'parsemag', 'escape', 'language' => $langObj ) );
+                               $rv = wfMessage( $wgLogActions[$key] )->inLanguage( $langObj )->escaped();
                        } else {
                                $titleLink = self::getTitleLink( $type, $langObjOrNull, $title, $params );
 
                                if( preg_match( '/^rights\/(rights|autopromote)/', $key ) ) {
-                                       $rightsnone = wfMsgExt( 'rightsnone', array( 'parsemag', 'language' => $langObj ) );
+                                       $rightsnone = wfMessage( 'rightsnone' )->inLanguage( $langObj )->text();
 
                                        if( $skin ) {
                                                $username = $title->getText();
@@ -275,7 +277,7 @@ class LogPage {
                                }
 
                                if( count( $params ) == 0 ) {
-                                       $rv = wfMsgExt( $wgLogActions[$key], array( 'parsemag', 'escape', 'replaceafter', 'language' => $langObj ), $titleLink );
+                                       $rv = wfMessage( $wgLogActions[$key] )->rawParams( $titleLink )->inLanguage( $langObj )->escaped();
                                } else {
                                        $details = '';
                                        array_unshift( $params, $titleLink );
@@ -302,11 +304,11 @@ class LogPage {
 
                                                // Cascading flag...
                                                if( $params[2] ) {
-                                                       $details .= ' [' . wfMsgExt( 'protect-summary-cascade', array( 'parsemag', 'language' => $langObj ) ) . ']';
+                                                       $details .= ' [' . wfMessage( 'protect-summary-cascade' )->inLanguage( $langObj )->text() . ']';
                                                }
                                        }
 
-                                       $rv = wfMsgExt( $wgLogActions[$key], array( 'parsemag', 'escape', 'replaceafter', 'language' => $langObj ), $params ) . $details;
+                                       $rv = wfMessage( $wgLogActions[$key] )->rawParams( $params )->inLanguage( $langObj )->escaped() . $details;
                                }
                        }
                } else {
@@ -442,7 +444,7 @@ class LogPage {
         * @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 $params Array: parameters passed later to wfMessage function
         * @param $doer User object: the user doing the action
         *
         * @return int log_id of the inserted log entry
index 0f30c6f..99ac854 100644 (file)
@@ -167,8 +167,11 @@ class BitmapHandler extends ImageHandler {
 
                if ( $flags & self::TRANSFORM_LATER ) {
                        wfDebug( __METHOD__ . ": Transforming later per flags.\n" );
-                       return new ThumbnailImage( $image, $dstUrl, $scalerParams['clientWidth'],
-                               $scalerParams['clientHeight'], false );
+                       $params = array(
+                               'width' => $scalerParams['clientWidth'],
+                               'height' => $scalerParams['clientHeight']
+                       );
+                       return new ThumbnailImage( $image, $dstUrl, false, $params );
                }
 
                # Try to make a target path for the thumbnail
@@ -220,8 +223,11 @@ class BitmapHandler extends ImageHandler {
                } elseif ( $mto ) {
                        return $mto;
                } else {
-                       return new ThumbnailImage( $image, $dstUrl, $scalerParams['clientWidth'],
-                               $scalerParams['clientHeight'], $dstPath );
+                       $params = array(
+                               'width' => $scalerParams['clientWidth'],
+                               'height' => $scalerParams['clientHeight']
+                       );
+                       return new ThumbnailImage( $image, $dstUrl, $dstPath, $params );
                }
        }
 
@@ -258,14 +264,17 @@ class BitmapHandler extends ImageHandler {
         * client side
         *
         * @param $image File File associated with this thumbnail
-        * @param $params array Array with scaler params
+        * @param $scalerParams array Array with scaler params
         * @return ThumbnailImage
         *
         * @todo fixme: no rotation support
         */
-       protected function getClientScalingThumbnailImage( $image, $params ) {
-               return new ThumbnailImage( $image, $image->getURL(),
-                       $params['clientWidth'], $params['clientHeight'], null );
+       protected function getClientScalingThumbnailImage( $image, $scalerParams ) {
+               $params = array(
+                       'width' => $scalerParams['clientWidth'],
+                       'height' => $scalerParams['clientHeight']
+               );
+               return new ThumbnailImage( $image, $image->getURL(), null, $params );
        }
 
        /**
@@ -524,7 +533,7 @@ class BitmapHandler extends ImageHandler {
                if ( !isset( $typemap[$params['mimeType']] ) ) {
                        $err = 'Image type not supported';
                        wfDebug( "$err\n" );
-                       $errMsg = wfMsg( 'thumbnail_image-type' );
+                       $errMsg = wfMessage( 'thumbnail_image-type' )->text();
                        return $this->getMediaTransformError( $params, $errMsg );
                }
                list( $loader, $colorStyle, $saveType ) = $typemap[$params['mimeType']];
@@ -532,14 +541,14 @@ class BitmapHandler extends ImageHandler {
                if ( !function_exists( $loader ) ) {
                        $err = "Incomplete GD library configuration: missing function $loader";
                        wfDebug( "$err\n" );
-                       $errMsg = wfMsg( 'thumbnail_gd-library', $loader );
+                       $errMsg = wfMessage( 'thumbnail_gd-library', $loader )->text();
                        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'] );
+                       $errMsg = wfMessage( 'thumbnail_image-missing', $params['srcPath'] )->text();
                        return $this->getMediaTransformError( $params, $errMsg );
                }
 
index 8cb5138..63af255 100644 (file)
@@ -52,7 +52,6 @@ class BitmapHandler_ClientOnly extends BitmapHandler {
                if ( !$this->normaliseParams( $image, $params ) ) {
                        return new TransformParameterError( $params );
                }
-               return new ThumbnailImage( $image, $image->getURL(), $params['width'], 
-                       $params['height'], $image->getLocalRefPath() );
+               return new ThumbnailImage( $image, $image->getURL(), $image->getLocalRefPath(), $params );
        }
 }
index 7ee93a1..84672e0 100644 (file)
@@ -138,7 +138,7 @@ class DjVuHandler extends ImageHandler {
                        $width = isset( $params['width'] ) ? $params['width'] : 0;
                        $height = isset( $params['height'] ) ? $params['height'] : 0;
                        return new MediaTransformError( 'thumbnail_error', $width, $height,
-                               wfMsg( 'djvu_no_xml' ) );
+                               wfMessage( 'djvu_no_xml' )->text() );
                }
 
                if ( !$this->normaliseParams( $image, $params ) ) {
@@ -148,15 +148,30 @@ class DjVuHandler extends ImageHandler {
                $height = $params['height'];
                $page = $params['page'];
                if ( $page > $this->pageCount( $image ) ) {
-                       return new MediaTransformError( 'thumbnail_error', $width, $height, wfMsg( 'djvu_page_error' ) );
+                       return new MediaTransformError(
+                               'thumbnail_error',
+                               $width,
+                               $height,
+                               wfMessage( 'djvu_page_error' )->text()
+                       );
                }
 
                if ( $flags & self::TRANSFORM_LATER ) {
-                       return new ThumbnailImage( $image, $dstUrl, $width, $height, $dstPath, $page );
+                       $params = array(
+                               'width' => $width,
+                               'height' => $height,
+                               'page' => $page
+                       );
+                       return new ThumbnailImage( $image, $dstUrl, $dstPath, $params );
                }
 
                if ( !wfMkdirParents( dirname( $dstPath ), null, __METHOD__ ) ) {
-                       return new MediaTransformError( 'thumbnail_error', $width, $height, wfMsg( 'thumbnail_dest_directory' ) );
+                       return new MediaTransformError(
+                               'thumbnail_error',
+                               $width,
+                               $height,
+                               wfMessage( 'thumbnail_dest_directory' )->text()
+                       );
                }
 
                $srcPath = $image->getLocalRefPath();
@@ -182,7 +197,12 @@ class DjVuHandler extends ImageHandler {
                                        wfHostname(), $retval, trim($err), $cmd ) );
                        return new MediaTransformError( 'thumbnail_error', $width, $height, $err );
                } else {
-                       return new ThumbnailImage( $image, $dstUrl, $width, $height, $dstPath, $page );
+                       $params = array(
+                               'width' => $width,
+                               'height' => $height,
+                               'page' => $page
+                       );
+                       return new ThumbnailImage( $image, $dstUrl, $dstPath, $params );
                }
        }
 
index f5dc020..784a601 100644 (file)
@@ -370,6 +370,12 @@ class Exif {
                $this->exifGPStoNumber( 'GPSDestLongitude' );
 
                if ( isset( $this->mFilteredExifData['GPSAltitude'] ) && isset( $this->mFilteredExifData['GPSAltitudeRef'] ) ) {
+
+                       // We know altitude data is a <num>/<denom> from the validation functions ran earlier.
+                       // But multiplying such a string by -1 doesn't work well, so convert.
+                       list( $num, $denom ) = explode( '/', $this->mFilteredExifData['GPSAltitude'] );
+                       $this->mFilteredExifData['GPSAltitude'] = $num / $denom;
+
                        if ( $this->mFilteredExifData['GPSAltitudeRef'] === "\1" ) {
                                $this->mFilteredExifData['GPSAltitude'] *= - 1;
                        }
index 0ae9a05..6914402 100644 (file)
@@ -100,7 +100,7 @@ class FormatMetadata {
                                ) {
                                        continue;
                                }
-                               $tags[$tag] = intval( $h[0] / $h[1] )
+                               $tags[$tag] = str_pad( intval( $h[0] / $h[1] ), 2, '0', STR_PAD_LEFT )
                                        . ':' . str_pad( intval( $m[0] / $m[1] ), 2, '0', STR_PAD_LEFT )
                                        . ':' . str_pad( intval( $s[0] / $s[1] ), 2, '0', STR_PAD_LEFT );
 
@@ -233,7 +233,7 @@ class FormatMetadata {
                                case 'dc-date':
                                case 'DateTimeMetadata':
                                        if ( $val == '0000:00:00 00:00:00' || $val == '    :  :     :  :  ' ) {
-                                               $val = wfMsg( 'exif-unknowndate' );
+                                               $val = wfMessage( 'exif-unknowndate' )->text();
                                        } elseif ( preg_match( '/^(?:\d{4}):(?:\d\d):(?:\d\d) (?:\d\d):(?:\d\d):(?:\d\d)$/D', $val ) ) {
                                                // Full date.
                                                $time = wfTimestamp( TS_MW, $val );
@@ -591,7 +591,7 @@ class FormatMetadata {
                                case 'Software':
                                        if ( is_array( $val ) ) {
                                                //if its a software, version array.
-                                               $val = wfMsg( 'exif-software-version-value', $val[0], $val[1] );
+                                               $val = wfMessage( 'exif-software-version-value', $val[0], $val[1] )->text();
                                        } else {
                                                $val = self::msg( $tag, '', $val );
                                        }
@@ -599,8 +599,8 @@ class FormatMetadata {
 
                                case 'ExposureTime':
                                        // Show the pretty fraction as well as decimal version
-                                       $val = wfMsg( 'exif-exposuretime-format',
-                                               self::formatFraction( $val ), self::formatNum( $val ) );
+                                       $val = wfMessage( 'exif-exposuretime-format',
+                                               self::formatFraction( $val ), self::formatNum( $val ) )->text();
                                        break;
                                case 'ISOSpeedRatings':
                                        // If its = 65535 that means its at the
@@ -613,13 +613,13 @@ class FormatMetadata {
                                        }
                                        break;
                                case 'FNumber':
-                                       $val = wfMsg( 'exif-fnumber-format',
-                                               self::formatNum( $val ) );
+                                       $val = wfMessage( 'exif-fnumber-format',
+                                               self::formatNum( $val ) )->text();
                                        break;
 
                                case 'FocalLength': case 'FocalLengthIn35mmFilm':
-                                       $val = wfMsg( 'exif-focallength-format',
-                                               self::formatNum( $val ) );
+                                       $val = wfMessage( 'exif-focallength-format',
+                                               self::formatNum( $val ) )->text();
                                        break;
 
                                case 'MaxApertureValue':
@@ -633,10 +633,10 @@ class FormatMetadata {
                                        if ( is_numeric( $val ) ) {
                                                $fNumber = pow( 2, $val / 2 );
                                                if ( $fNumber !== false ) {
-                                                       $val = wfMsg( 'exif-maxaperturevalue-value',
+                                                       $val = wfMessage( 'exif-maxaperturevalue-value',
                                                                self::formatNum( $val ),
                                                                self::formatNum( $fNumber, 2 )
-                                                       );
+                                                       )->text();
                                                }
                                        }
                                        break;
@@ -696,7 +696,7 @@ class FormatMetadata {
                                case 'PixelYDimension':
                                case 'ImageWidth':
                                case 'ImageLength':
-                                       $val = self::formatNum( $val ) . ' ' . wfMsg( 'unit-pixel' );
+                                       $val = self::formatNum( $val ) . ' ' . wfMessage( 'unit-pixel' )->text();
                                        break;
 
                                // Do not transform fields with pure text.
@@ -958,12 +958,12 @@ class FormatMetadata {
 
                if ( $lang === false ) {
                        if ( $noHtml ) {
-                               return wfMsg( 'metadata-langitem-default',
-                                       $wrappedValue ) . "\n\n";
+                               return wfMessage( 'metadata-langitem-default',
+                                       $wrappedValue )->text() . "\n\n";
                        } /* else */
                        return '<li class="mw-metadata-lang-default">'
-                               . wfMsg( 'metadata-langitem-default',
-                                       $wrappedValue )
+                               . wfMessage( 'metadata-langitem-default',
+                                       $wrappedValue )->text()
                                . "</li>\n";
                }
 
@@ -981,8 +981,8 @@ class FormatMetadata {
                // else we have a language specified
 
                if ( $noHtml ) {
-                       return '*' . wfMsg( 'metadata-langitem',
-                               $wrappedValue, $langName, $lang );
+                       return '*' . wfMessage( 'metadata-langitem',
+                               $wrappedValue, $langName, $lang )->text();
                } /* else: */
 
                $item = '<li class="mw-metadata-lang-code-'
@@ -991,8 +991,8 @@ class FormatMetadata {
                        $item .= ' mw-metadata-lang-default';
                }
                $item .= '" lang="' . $lang . '">';
-               $item .= wfMsg( 'metadata-langitem',
-                       $wrappedValue, $langName, $lang );
+               $item .= wfMessage( 'metadata-langitem',
+                       $wrappedValue, $langName, $lang )->text();
                $item .= "</li>\n";
                return $item;
        }
@@ -1006,14 +1006,14 @@ class FormatMetadata {
         * @param $val String: the value of the tag
         * @param $arg String: an argument to pass ($1)
         * @param $arg2 String: a 2nd argument to pass ($2)
-        * @return string A wfMsg of "exif-$tag-$val" in lower case
+        * @return string A wfMessage of "exif-$tag-$val" in lower case
         */
        static function msg( $tag, $val, $arg = null, $arg2 = null ) {
                global $wgContLang;
 
                if ($val === '')
                        $val = 'value';
-               return wfMsg( $wgContLang->lc( "exif-$tag-$val" ), $arg, $arg2 );
+               return wfMessage( $wgContLang->lc( "exif-$tag-$val" ), $arg, $arg2 )->text();
        }
 
        /**
@@ -1214,7 +1214,7 @@ class FormatMetadata {
                $min = self::formatNum( $min );
                $sec = self::formatNum( $sec );
 
-               return wfMsg( 'exif-coordinate-format', $deg, $min, $sec, $ref, $coord );
+               return wfMessage( 'exif-coordinate-format', $deg, $min, $sec, $ref, $coord )->text();
        }
 
        /**
@@ -1335,9 +1335,9 @@ class FormatMetadata {
                                        . htmlspecialchars( $vals['CiUrlWork'] )
                                        . '</span>';
                        }
-                       return wfMsg( 'exif-contact-value', $email, $url,
+                       return wfMessage( 'exif-contact-value', $email, $url,
                                $street, $city, $region, $postal, $country,
-                               $tel );
+                               $tel )->text();
                }
        }
 }
index 028fbb0..84b9b8c 100644 (file)
@@ -93,6 +93,17 @@ class GIFHandler extends BitmapHandler {
                return false;
        }
 
+       /**
+        * We cannot animate thumbnails that are bigger than a particular size
+        * @param File $file
+        * @return bool
+        */
+       function canAnimateThumbnail( $file ) {
+               global $wgMaxAnimatedGifArea;
+               $answer = $this->getImageArea( $file ) <= $wgMaxAnimatedGifArea;
+               return $answer;
+       }
+
        function getMetadataType( $image ) {
                return 'parsed-gif';
        }
index 69f51be..6175907 100644 (file)
@@ -189,11 +189,9 @@ abstract class ImageHandler extends MediaHandler {
                        return false;
                }
                $url = $script . '&' . wfArrayToCGI( $this->getScriptParams( $params ) );
-               $page = isset( $params['page'] ) ? $params['page'] : false;
 
                if( $image->mustRender() || $params['width'] < $image->getWidth() ) {
-                       return new ThumbnailImage( $image,
-                               $url, $params['width'], $params['height'], false, $page );
+                       return new ThumbnailImage( $image, $url, false, $params );
                }
        }
 
@@ -204,10 +202,6 @@ abstract class ImageHandler extends MediaHandler {
                return $gis;
        }
 
-       function isAnimatedImage( $image ) {
-               return false;
-       }
-
        /**
         * @param $file File
         * @return string
index e883b7f..965099f 100644 (file)
@@ -269,6 +269,19 @@ abstract class MediaHandler {
         * @return bool
         */
        function isVectorized( $file ) { return false; }
+       /**
+        * The material is an image, and is animated.
+        * In particular, video material need not return true.
+        * @note Before 1.20, this was a method of ImageHandler only
+        * @return bool
+        */
+       function isAnimatedImage( $file ) { return false; }
+       /**
+        * If the material is animated, we can animate the thumbnail
+        * @since 1.20
+        * @return bool If material is not animated, handler may return any value.
+        */
+       function canAnimateThumbnail( $file ) { return true; }
        /**
         * False if the handler is disabled for all files
         * @return bool
@@ -372,7 +385,7 @@ abstract class MediaHandler {
         */
        function visibleMetadataFields() {
                $fields = array();
-               $lines = explode( "\n", wfMsgForContent( 'metadata-fields' ) );
+               $lines = explode( "\n", wfMessage( 'metadata-fields' )->inContentLanguage()->text() );
                foreach( $lines as $line ) {
                        $matches = array();
                        if( preg_match( '/^\\*\s*(.*?)\s*$/', $line, $matches ) ) {
index 00d12bb..773824c 100644 (file)
@@ -157,7 +157,14 @@ abstract class MediaTransformOutput {
         * @return Bool success
         */
        public function streamFile( $headers = array() ) {
-               return $this->path && StreamFile::stream( $this->getLocalCopyPath(), $headers );
+               if ( !$this->path ) {
+                       return false;
+               } elseif ( FileBackend::isStoragePath( $this->path ) ) {
+                       $be = $this->file->getRepo()->getBackend();
+                       return $be->streamFile( array( 'src' => $this->path, 'headers' => $headers ) )->isOK();
+               } else { // FS-file
+                       return StreamFile::stream( $this->getLocalCopyPath(), $headers );
+               }
        }
 
        /**
@@ -207,25 +214,46 @@ class ThumbnailImage extends MediaTransformOutput {
         * Get a thumbnail object from a file and parameters.
         * If $path is set to null, the output file is treated as a source copy.
         * If $path is set to false, no output file will be created.
+        * $parameters should include, as a minimum, (file) 'width' and 'height'.
+        * It may also include a 'page' parameter for multipage files.
         *
         * @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|bool|null: filesystem path to the thumb
-        * @param $page Integer: page number, for multipage files
+        * @param $parameters Array: Associative array of parameters
         * @private
         */
-       function __construct( $file, $url, $width, $height, $path = false, $page = false ) {
+       function __construct( $file, $url, $path = false, $parameters = array() ) {
+               # Previous parameters:
+               #   $file, $url, $width, $height, $path = false, $page = false
+
+               if( is_array( $parameters ) ){
+                       $defaults = array(
+                               'page' => false
+                       );
+                       $actualParams = $parameters + $defaults;
+               } else {
+                       # Using old format, should convert. Later a warning could be added here.
+                       $numArgs = func_num_args();
+                       $actualParams = array(
+                               'width' => $path,
+                               'height' => $parameters,
+                               'page' => ( $numArgs > 5 ) ? func_get_arg( 5 ) : false
+                       );
+                       $path = ( $numArgs > 4 ) ? func_get_arg( 4 ) : false;
+               }
+
                $this->file = $file;
                $this->url = $url;
+               $this->path = $path;
+
                # 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;
+               $this->width = round( $actualParams['width'] );
+               $this->height = round( $actualParams['height'] );
+
+               $this->page = $actualParams['page'];
        }
 
        /**
@@ -359,6 +387,6 @@ class TransformParameterError extends MediaTransformError {
                parent::__construct( 'thumbnail_error',
                        max( isset( $params['width']  ) ? $params['width']  : 0, 120 ),
                        max( isset( $params['height'] ) ? $params['height'] : 0, 120 ),
-                       wfMsg( 'thumbnail_invalid_params' ) );
+                       wfMessage( 'thumbnail_invalid_params' )->text() );
        }
 }
index 8289cd4..1b329e5 100644 (file)
@@ -80,6 +80,14 @@ class PNGHandler extends BitmapHandler {
                }
                return false;
        }
+       /**
+        * We do not support making APNG thumbnails, so always false
+        * @param $image File
+        * @return bool false
+        */
+       function canAnimateThumbnail( $image ) {
+               return false;
+       }
        
        function getMetadataType( $image ) {
                return 'parsed-png';
index 9846c71..55fa554 100644 (file)
@@ -63,6 +63,13 @@ class SvgHandler extends ImageHandler {
                return false;
        }
 
+       /**
+        * We do not support making animated svg thumbnails
+        */
+       function canAnimateThumb( $file ) {
+               return false;
+       }
+
        /**
         * @param $image File
         * @param  $params
@@ -110,18 +117,18 @@ class SvgHandler extends ImageHandler {
                $physicalHeight = $params['physicalHeight'];
 
                if ( $flags & self::TRANSFORM_LATER ) {
-                       return new ThumbnailImage( $image, $dstUrl, $clientWidth, $clientHeight, $dstPath );
+                       return new ThumbnailImage( $image, $dstUrl, $dstPath, $params );
                }
 
                if ( !wfMkdirParents( dirname( $dstPath ), null, __METHOD__ ) ) {
                        return new MediaTransformError( 'thumbnail_error', $clientWidth, $clientHeight,
-                               wfMsg( 'thumbnail_dest_directory' ) );
+                               wfMessage( 'thumbnail_dest_directory' )->text() );
                }
 
                $srcPath = $image->getLocalRefPath();
                $status = $this->rasterize( $srcPath, $dstPath, $physicalWidth, $physicalHeight );
                if( $status === true ) {
-                       return new ThumbnailImage( $image, $dstUrl, $clientWidth, $clientHeight, $dstPath );
+                       return new ThumbnailImage( $image, $dstUrl, $dstPath, $params );
                } else {
                        return $status; // MediaTransformError
                }
@@ -214,15 +221,30 @@ class SvgHandler extends ImageHandler {
        }
 
        /**
+        * Subtitle for the image. Different from the base
+        * class so it can be denoted that SVG's have
+        * a "nominal" resolution, and not a fixed one,
+        * as well as so animation can be denoted.
+        *
         * @param $file File
         * @return string
         */
        function getLongDesc( $file ) {
                global $wgLang;
-               return wfMsgExt( 'svg-long-desc', 'parseinline',
-                       $wgLang->formatNum( $file->getWidth() ),
-                       $wgLang->formatNum( $file->getHeight() ),
-                       $wgLang->formatSize( $file->getSize() ) );
+               $size = $wgLang->formatSize( $file->getSize() );
+
+               if ( $this->isAnimatedImage( $file ) ) {
+                       $msg = wfMessage( 'svg-long-desc-animated' );
+               } else {
+                       $msg = wfMessage( 'svg-long-desc' );
+               }
+
+               $msg->numParams(
+                       $file->getWidth(),
+                       $file->getHeight()
+               );
+               $msg->Params( $size );
+               return $msg->parse();
        }
 
        function getMetadata( $file, $filename ) {
@@ -253,11 +275,19 @@ class SvgHandler extends ImageHandler {
        }
 
        function isMetadataValid( $image, $metadata ) {
-               return $this->unpackMetadata( $metadata ) !== false;
+               $meta = $this->unpackMetadata( $metadata );
+               if ( $meta === false ) {
+                       return self::METADATA_BAD;
+               }
+               if ( !isset( $meta['originalWidth'] ) ) {
+                       // Old but compatible
+                       return self::METADATA_COMPATIBLE;
+               }
+               return self::METADATA_GOOD;
        }
 
        function visibleMetadataFields() {
-               $fields = array( 'title', 'description', 'animated' );
+               $fields = array( 'objectname', 'imagedescription' );
                return $fields;
        }
 
@@ -278,8 +308,6 @@ class SvgHandler extends ImageHandler {
                if ( !$metadata ) {
                        return false;
                }
-               unset( $metadata['version'] );
-               unset( $metadata['metadata'] ); /* non-formatted XML */
 
                /* TODO: add a formatter
                $format = new FormatSVG( $metadata );
@@ -290,9 +318,10 @@ class SvgHandler extends ImageHandler {
                $visibleFields = $this->visibleMetadataFields();
 
                // Rename fields to be compatible with exif, so that
-               // the labels for these fields work.
-               $conversion = array( 'width' => 'imagewidth',
-                       'height' => 'imagelength',
+               // the labels for these fields work and reuse existing messages.
+               $conversion = array(
+                       'originalwidth' => 'imagewidth',
+                       'originalheight' => 'imagelength',
                        'description' => 'imagedescription',
                        'title' => 'objectname',
                );
@@ -300,6 +329,9 @@ class SvgHandler extends ImageHandler {
                        $tag = strtolower( $name );
                        if ( isset( $conversion[$tag] ) ) {
                                $tag = $conversion[$tag];
+                       } else {
+                               // Do not output other metadata not in list
+                               continue;
                        }
                        self::addMeta( $result,
                                in_array( $tag, $visibleFields ) ? 'visible' : 'collapsed',
index 83f531c..851fe42 100644 (file)
@@ -83,6 +83,12 @@ class SVGReader {
                $this->metadata['width'] = self::DEFAULT_WIDTH;
                $this->metadata['height'] = self::DEFAULT_HEIGHT;
 
+               // The size in the units specified by the SVG file
+               // (for the metadata box)
+               // Per the SVG spec, if unspecified, default to '100%'
+               $this->metadata['originalWidth'] = '100%';
+               $this->metadata['originalHeight'] = '100%';
+
                // 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.
@@ -90,6 +96,8 @@ class SVGReader {
                try {
                        $this->read();
                } catch( Exception $e ) {
+                       // Note, if this happens, the width/height will be taken to be 0x0.
+                       // Should we consider it the default 512x512 instead?
                        wfRestoreWarnings();
                        throw $e;
                }
@@ -139,6 +147,11 @@ class SVGReader {
                                $this->readField( $tag, 'description' );
                        } elseif ( $isSVG && $tag == 'metadata' && $type == XmlReader::ELEMENT ) {
                                $this->readXml( $tag, 'metadata' );
+                       } elseif ( $isSVG && $tag == 'script' ) {
+                               // We normally do not allow scripted svgs.
+                               // However its possible to configure MW to let them
+                               // in, and such files should be considered animated.
+                               $this->metadata['animated'] = true;
                        } elseif ( $tag !== '#text' ) {
                                $this->debug( "Unhandled top-level XML tag $tag" );
 
@@ -219,6 +232,11 @@ class SVGReader {
                                break;
                        } elseif ( $this->reader->namespaceURI == self::NS_SVG && $this->reader->nodeType == XmlReader::ELEMENT ) {
                                switch( $this->reader->localName ) {
+                                       case 'script':
+                                               // Normally we disallow files with
+                                               // <script>, but its possible
+                                               // to configure MW to disable
+                                               // such checks.
                                        case 'animate':
                                        case 'set':
                                        case 'animateMotion':
@@ -278,9 +296,11 @@ class SVGReader {
                }
                if( $this->reader->getAttribute('width') ) {
                        $width = $this->scaleSVGUnit( $this->reader->getAttribute('width'), $defaultWidth );
+                       $this->metadata['originalWidth'] = $this->reader->getAttribute( 'width' );
                }
                if( $this->reader->getAttribute('height') ) {
                        $height = $this->scaleSVGUnit( $this->reader->getAttribute('height'), $defaultHeight );
+                       $this->metadata['originalHeight'] = $this->reader->getAttribute( 'height' );
                }
 
                if( !isset( $width ) && !isset( $height ) ) {
index 75fdd96..36660b3 100644 (file)
@@ -213,10 +213,16 @@ class XMPReader {
                unset( $data['xmp-special'] );
 
                // Convert GPSAltitude to negative if below sea level.
-               if ( isset( $data['xmp-exif']['GPSAltitudeRef'] ) ) {
-                       if ( $data['xmp-exif']['GPSAltitudeRef'] == '1'
-                               && isset( $data['xmp-exif']['GPSAltitude'] )
-                       ) {
+               if ( isset( $data['xmp-exif']['GPSAltitudeRef'] )
+                       && isset( $data['xmp-exif']['GPSAltitude'] )
+               ) {
+
+                       // Must convert to a real before multiplying by -1
+                       // XMPValidate guarantees there will always be a '/' in this value.
+                       list( $nom, $denom ) = explode( '/', $data['xmp-exif']['GPSAltitude'] );
+                       $data['xmp-exif']['GPSAltitude'] = $nom / $denom;
+
+                       if ( $data['xmp-exif']['GPSAltitudeRef'] == '1' ) {
                                $data['xmp-exif']['GPSAltitude'] *= -1;
                        }
                        unset( $data['xmp-exif']['GPSAltitudeRef'] );
index 2b400e5..08f85bd 100644 (file)
@@ -190,7 +190,7 @@ class UtfNormal {
         */
        static function loadData() {
                if( !isset( self::$utfCombiningClass ) ) {
-                       require_once( dirname(__FILE__) . '/UtfNormalData.inc' );
+                       require_once( __DIR__ . '/UtfNormalData.inc' );
                }
        }
 
index 5a7729b..1a0de21 100644 (file)
@@ -27,7 +27,6 @@
  * @ingroup Cache
  */
 class APCBagOStuff extends BagOStuff {
-
        /**
         * @param $key string
         * @return mixed
@@ -36,7 +35,11 @@ class APCBagOStuff extends BagOStuff {
                $val = apc_fetch( $key );
 
                if ( is_string( $val ) ) {
-                       $val = unserialize( $val );
+                       if ( $this->isInteger( $val ) ) {
+                               $val = intval( $val );
+                       } else {
+                               $val = unserialize( $val );
+                       }
                }
 
                return $val;
@@ -49,7 +52,11 @@ class APCBagOStuff extends BagOStuff {
         * @return bool
         */
        public function set( $key, $value, $exptime = 0 ) {
-               apc_store( $key, serialize( $value ), $exptime );
+               if ( !$this->isInteger( $value ) ) {
+                       $value = serialize( $value );
+               }
+
+               apc_store( $key, $value, $exptime );
 
                return true;
        }
@@ -65,6 +72,14 @@ class APCBagOStuff extends BagOStuff {
                return true;
        }
 
+       public function incr( $key, $value = 1 ) {
+               return apc_inc( $key, $value );
+       }
+
+       public function decr( $key, $value = 1 ) {
+               return apc_dec( $key, $value );
+       }
+
        /**
         * @return Array
         */
@@ -80,4 +95,3 @@ class APCBagOStuff extends BagOStuff {
                return $keys;
        }
 }
-
index fcc3aa9..57029a8 100644 (file)
@@ -164,10 +164,11 @@ abstract class BagOStuff {
        }
 
        /**
+        * Increase stored value of $key by $value while preserving its TTL
         * @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
-        * @return bool success
+        * @return integer
         */
        public function incr( $key, $value = 1 ) {
                if ( !$this->lock( $key ) ) {
@@ -186,9 +187,10 @@ abstract class BagOStuff {
        }
 
        /**
+        * Decrease stored value of $key by $value while preserving its TTL
         * @param $key String
         * @param $value Integer
-        * @return bool success
+        * @return integer
         */
        public function decr( $key, $value = 1 ) {
                return $this->incr( $key, - $value );
@@ -235,4 +237,14 @@ abstract class BagOStuff {
                        return $exptime;
                }
        }
+
+       /**
+        * Check if a value is an integer
+        *
+        * @param $value mixed
+        * @return bool
+        */
+       protected function isInteger( $value ) {
+               return ( is_int( $value ) || ctype_digit( $value ) );
+       }
 }
index 8483d7e..264aed7 100644 (file)
@@ -45,8 +45,7 @@ class DBABagOStuff extends BagOStuff {
                        $params['dir'] = wfTempDir();
                }
 
-               $this->mFile = $params['dir']."/mw-cache-" . wfWikiID();
-               $this->mFile .= '.db';
+               $this->mFile = $params['dir'] . '/mw-cache-' . wfWikiID() . '.db';
                wfDebug( __CLASS__ . ": using cache file {$this->mFile}\n" );
                $this->mHandler = $wgDBAhandler;
        }
@@ -58,7 +57,7 @@ class DBABagOStuff extends BagOStuff {
         *
         * @return string
         */
-       function encode( $value, $expiry ) {
+       protected function encode( $value, $expiry ) {
                # Convert to absolute time
                $expiry = $this->convertExpiry( $expiry );
 
@@ -69,7 +68,7 @@ class DBABagOStuff extends BagOStuff {
         * @param $blob string
         * @return array list containing value first and expiry second
         */
-       function decode( $blob ) {
+       protected function decode( $blob ) {
                if ( !is_string( $blob ) ) {
                        return array( null, 0 );
                } else {
@@ -83,7 +82,7 @@ class DBABagOStuff extends BagOStuff {
        /**
         * @return resource
         */
-       function getReader() {
+       protected function getReader() {
                if ( file_exists( $this->mFile ) ) {
                        $handle = dba_open( $this->mFile, 'rl', $this->mHandler );
                } else {
@@ -100,7 +99,7 @@ class DBABagOStuff extends BagOStuff {
        /**
         * @return resource
         */
-       function getWriter() {
+       protected function getWriter() {
                $handle = dba_open( $this->mFile, 'cl', $this->mHandler );
 
                if ( !$handle ) {
@@ -114,7 +113,7 @@ class DBABagOStuff extends BagOStuff {
         * @param $key string
         * @return mixed|null|string
         */
-       function get( $key ) {
+       public function get( $key ) {
                wfProfileIn( __METHOD__ );
                wfDebug( __METHOD__ . "($key)\n" );
 
@@ -149,7 +148,7 @@ class DBABagOStuff extends BagOStuff {
         * @param $exptime int
         * @return bool
         */
-       function set( $key, $value, $exptime = 0 ) {
+       public function set( $key, $value, $exptime = 0 ) {
                wfProfileIn( __METHOD__ );
                wfDebug( __METHOD__ . "($key)\n" );
 
@@ -173,7 +172,7 @@ class DBABagOStuff extends BagOStuff {
         * @param $time int
         * @return bool
         */
-       function delete( $key, $time = 0 ) {
+       public function delete( $key, $time = 0 ) {
                wfProfileIn( __METHOD__ );
                wfDebug( __METHOD__ . "($key)\n" );
 
@@ -196,7 +195,7 @@ class DBABagOStuff extends BagOStuff {
         * @param $exptime int
         * @return bool
         */
-       function add( $key, $value, $exptime = 0 ) {
+       public function add( $key, $value, $exptime = 0 ) {
                wfProfileIn( __METHOD__ );
 
                $blob = $this->encode( $value, $exptime );
@@ -214,7 +213,7 @@ class DBABagOStuff extends BagOStuff {
                if ( !$ret ) {
                        list( $value, $expiry ) = $this->decode( dba_fetch( $key, $handle ) );
 
-                       if ( $expiry < time() ) {
+                       if ( $expiry && $expiry < time() ) {
                                # Yes expired, delete and try again
                                dba_delete( $key, $handle );
                                $ret = dba_insert( $key, $blob, $handle );
@@ -229,8 +228,43 @@ class DBABagOStuff extends BagOStuff {
        }
 
        /**
-        * @return Array
+        * @param $key string
+        * @param $step integer
+        * @return integer|bool
         */
+       public function incr( $key, $step = 1 ) {
+               wfProfileIn( __METHOD__ );
+
+               $handle = $this->getWriter();
+
+               if ( !$handle ) {
+                       wfProfileOut( __METHOD__ );
+                       return false;
+               }
+
+               list( $value, $expiry ) = $this->decode( dba_fetch( $key, $handle ) );
+               if ( !is_null( $value ) ) {
+                       if ( $expiry && $expiry < time() ) {
+                               # Key is expired, delete it
+                               dba_delete( $key, $handle );
+                               wfDebug( __METHOD__ . ": $key expired\n" );
+                               $value = null;
+                       } else {
+                               $value += $step;
+                               $blob = $this->encode( $value, $expiry );
+
+                               $ret = dba_replace( $key, $blob, $handle );
+                               $value = $ret ? $value : null;
+                       }
+               }
+
+               dba_close( $handle );
+
+               wfProfileOut( __METHOD__ );
+
+               return is_null( $value ) ? false : (int)$value;
+       }
+
        function keys() {
                $reader = $this->getReader();
                $k1 = dba_firstkey( $reader );
@@ -250,4 +284,3 @@ class DBABagOStuff extends BagOStuff {
                return $result;
        }
 }
-
index e6c6881..f55da94 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/*
+/**
  * Session storage in object cache.
  *
  * This program is free software; you can redistribute it and/or modify
  * @file
  * @ingroup Cache
  */
+
+/**
+ * Session storage in object cache.
+ * Used if $wgSessionsInObjectCache is true.
+ *
+ * @ingroup Cache
+ */
 class ObjectCacheSessionHandler {
        /**
         * Install a session handler for the current web request
@@ -129,7 +136,7 @@ class ObjectCacheSessionHandler {
        }
 
        /**
-        * Shutdown function. See the comment inside ObjectCacheSessionHandler::install 
+        * Shutdown function. See the comment inside ObjectCacheSessionHandler::install
         * for rationale.
         */
        static function handleShutdown() {
index 67a3337..c5966cd 100644 (file)
@@ -1,4 +1,25 @@
 <?php
+/**
+ * Object caching using Redis (http://redis.io/).
+ *
+ * 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
+ */
+
 
 class RedisBagOStuff extends BagOStuff {
        protected $connectTimeout, $persistent, $password, $automaticFailover;
@@ -9,16 +30,16 @@ class RedisBagOStuff extends BagOStuff {
        protected $servers;
 
        /**
-        * A cache of Redis objects, representing connections to Redis servers. 
+        * A cache of Redis objects, representing connections to Redis servers.
         * The key is the server name.
         */
        protected $conns = array();
 
        /**
-        * An array listing "dead" servers which have had a connection error in 
-        * the past. Servers are marked dead for a limited period of time, to 
+        * An array listing "dead" servers which have had a connection error in
+        * the past. Servers are marked dead for a limited period of time, to
         * avoid excessive overhead from repeated connection timeouts. The key in
-        * the array is the server name, the value is the UNIX timestamp at which 
+        * the array is the server name, the value is the UNIX timestamp at which
         * the server is resurrected.
         */
        protected $deadServers = array();
@@ -26,9 +47,9 @@ class RedisBagOStuff extends BagOStuff {
        /**
         * Construct a RedisBagOStuff object. Parameters are:
         *
-        *   - servers: An array of server names. A server name may be a hostname, 
+        *   - servers: An array of server names. A server name may be a hostname,
         *     a hostname/port combination or the absolute path of a UNIX socket.
-        *     If a hostname is specified but no port, the standard port number 
+        *     If a hostname is specified but no port, the standard port number
         *     6379 will be used. Required.
         *
         *   - connectTimeout: The timeout for new connections, in seconds. Optional,
@@ -37,16 +58,16 @@ class RedisBagOStuff extends BagOStuff {
         *   - persistent: Set this to true to allow connections to persist across
         *     multiple web requests. False by default.
         *
-        *   - password: The authentication password, will be sent to Redis in 
+        *   - password: The authentication password, will be sent to Redis in
         *     clear text. Optional, if it is unspecified, no AUTH command will be
         *     sent.
         *
         *   - automaticFailover: If this is false, then each key will be mapped to
         *     a single server, and if that server is down, any requests for that key
         *     will fail. If this is true, a connection failure will cause the client
-        *     to immediately try the next server in the list (as determined by a 
-        *     consistent hashing algorithm). True by default. This has the 
-        *     potential to create consistency issues if a server is slow enough to 
+        *     to immediately try the next server in the list (as determined by a
+        *     consistent hashing algorithm). True by default. This has the
+        *     potential to create consistency issues if a server is slow enough to
         *     flap, for example if it is in swap death.
         */
        function __construct( $params ) {
@@ -56,7 +77,7 @@ class RedisBagOStuff extends BagOStuff {
                }
 
                $this->servers = $params['servers'];
-               $this->connectTimeout = isset( $params['connectTimeout'] ) 
+               $this->connectTimeout = isset( $params['connectTimeout'] )
                        ? $params['connectTimeout'] : 1;
                $this->persistent = !empty( $params['persistent'] );
                if ( isset( $params['password'] ) ) {
@@ -106,7 +127,7 @@ class RedisBagOStuff extends BagOStuff {
                        $result = false;
                        $this->handleException( $server, $e );
                }
-               
+
                $this->logRequest( 'set', $key, $server, $result );
                wfProfileOut( __METHOD__ );
                return $result;
@@ -196,7 +217,7 @@ class RedisBagOStuff extends BagOStuff {
        }
 
        /**
-        * Non-atomic implementation of replace(). Could perhaps be done atomically 
+        * Non-atomic implementation of replace(). Could perhaps be done atomically
         * with WATCH or scripting, but this function is rarely used.
         */
        public function replace( $key, $value, $expiry = 0 ) {
@@ -222,19 +243,19 @@ class RedisBagOStuff extends BagOStuff {
                        $result = false;
                        $this->handleException( $server, $e );
                }
-                       
+
                $this->logRequest( 'replace', $key, $server, $result );
                wfProfileOut( __METHOD__ );
                return $result;
        }
 
        /**
-        * Non-atomic implementation of incr(). 
+        * Non-atomic implementation of incr().
         *
-        * Probably all callers actually want incr() to atomically initialise 
-        * values to zero if they don't exist, as provided by the Redis INCR 
-        * command. But we are constrained by the memcached-like interface to 
-        * return null in that case. Once the key exists, further increments are 
+        * Probably all callers actually want incr() to atomically initialise
+        * values to zero if they don't exist, as provided by the Redis INCR
+        * command. But we are constrained by the memcached-like interface to
+        * return null in that case. Once the key exists, further increments are
         * atomic.
         */
        public function incr( $key, $value = 1 ) {
@@ -254,7 +275,7 @@ class RedisBagOStuff extends BagOStuff {
                        $result = false;
                        $this->handleException( $server, $e );
                }
-                       
+
                $this->logRequest( 'incr', $key, $server, $result );
                wfProfileOut( __METHOD__ );
                return $result;
@@ -317,7 +338,7 @@ class RedisBagOStuff extends BagOStuff {
 
                if ( substr( $server, 0, 1 ) === '/' ) {
                        // UNIX domain socket
-                       // These are required by the redis extension to start with a slash, but 
+                       // These are required by the redis extension to start with a slash, but
                        // we still need to set the port to a special value to make it work.
                        $host = $server;
                        $port = 0;
@@ -372,8 +393,8 @@ class RedisBagOStuff extends BagOStuff {
 
        /**
         * The redis extension throws an exception in response to various read, write
-        * and protocol errors. Sometimes it also closes the connection, sometimes 
-        * not. The safest response for us is to explicitly destroy the connection 
+        * and protocol errors. Sometimes it also closes the connection, sometimes
+        * not. The safest response for us is to explicitly destroy the connection
         * object and let it be reopened during the next request.
         */
        protected function handleException( $server, $e ) {
@@ -385,7 +406,7 @@ class RedisBagOStuff extends BagOStuff {
         * Send information about a single request to the debug log
         */
        public function logRequest( $method, $key, $server, $result ) {
-               $this->debug( "$method $key on $server: " . 
+               $this->debug( "$method $key on $server: " .
                        ( $result === false ? "failure" : "success" ) );
        }
 }
index 08f52b7..6c88289 100644 (file)
@@ -38,7 +38,11 @@ class XCacheBagOStuff extends BagOStuff {
                $val = xcache_get( $key );
 
                if ( is_string( $val ) ) {
-                       $val = unserialize( $val );
+                       if ( $this->isInteger( $val ) ) {
+                               $val = intval( $val );
+                       } else {
+                               $val = unserialize( $val );
+                       }
                }
 
                return $val;
@@ -53,7 +57,11 @@ class XCacheBagOStuff extends BagOStuff {
         * @return bool
         */
        public function set( $key, $value, $expire = 0 ) {
-               xcache_set( $key, serialize( $value ), $expire );
+               if ( !$this->isInteger( $value ) ) {
+                       $value = serialize( $value );
+               }
+
+               xcache_set( $key, $value, $expire );
                return true;
        }
 
@@ -68,5 +76,12 @@ class XCacheBagOStuff extends BagOStuff {
                xcache_unset( $key );
                return true;
        }
-}
 
+       public function incr( $key, $value = 1 ) {
+               return xcache_inc( $key, $value );
+       }
+
+       public function decr( $key, $value = 1 ) {
+               return xcache_dec( $key, $value );
+       }
+}
index e42c464..881dded 100644 (file)
@@ -1,7 +1,6 @@
 <?php
-
 /**
- * @todo document
+ * Parser cache specific expiry check.
  *
  * 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
  * @file
  * @ingroup Parser
  */
+
+/**
+ * Parser cache specific expiry check.
+ *
+ * @ingroup Parser
+ */
 class CacheTime {
 
        var     $mVersion = Parser::VERSION,  # Compatibility check
@@ -124,4 +129,4 @@ class CacheTime {
                        version_compare( $this->mVersion, Parser::VERSION, "lt" );
        }
 
-}
\ No newline at end of file
+}
index 8db5ac9..8917b6d 100644 (file)
@@ -342,6 +342,7 @@ class CoreParserFunctions {
        static function plural( $parser, $text = '' ) {
                $forms = array_slice( func_get_args(), 2 );
                $text = $parser->getFunctionLang()->parseFormattedNumber( $text );
+               settype( $text, ctype_digit( $text ) ? 'int' : 'float' );
                return $parser->getFunctionLang()->convertPlural( $text, $forms );
        }
 
@@ -660,7 +661,7 @@ class CoreParserFunctions {
                if( isset( $cache[$page] ) ) {
                        $length = $cache[$page];
                } elseif( $parser->incrementExpensiveFunctionCount() ) {
-                       $rev = Revision::newFromTitle( $title );
+                       $rev = Revision::newFromTitle( $title, false, Revision::READ_NORMAL );
                        $id = $rev ? $rev->getPage() : 0;
                        $length = $cache[$page] = $rev ? $rev->getSize() : 0;
 
@@ -747,7 +748,7 @@ class CoreParserFunctions {
                        $title = SpecialPage::getTitleFor( $page, $subpage );
                        return $title->getPrefixedText();
                } else {
-                       return wfMsgForContent( 'nosuchspecialpage' );
+                       return wfMessage( 'nosuchspecialpage' )->inContentLanguage()->text();
                }
        }
 
@@ -782,9 +783,7 @@ class CoreParserFunctions {
                        return '';
                } else {
                        return( '<span class="error">' .
-                               wfMsgForContent( 'duplicate-defaultsort',
-                                                htmlspecialchars( $old ),
-                                                htmlspecialchars( $text ) ) .
+                               wfMessage( 'duplicate-defaultsort', $old, $text )->inContentLanguage()->escaped() .
                                '</span>' );
                }
        }
@@ -844,7 +843,7 @@ class CoreParserFunctions {
                $stripList = $parser->getStripList();
                if ( !in_array( $tagName, $stripList ) ) {
                        return '<span class="error">' .
-                               wfMsgForContent( 'unknown_extension_tag', $tagName ) .
+                               wfMessage( 'unknown_extension_tag', $tagName )->inContentLanguage()->text() .
                                '</span>';
                }
 
index b351290..de55de0 100644 (file)
@@ -207,7 +207,7 @@ class Parser {
        public function __construct( $conf = array() ) {
                $this->mConf = $conf;
                $this->mUrlProtocols = wfUrlProtocols();
-               $this->mExtLinkBracketedRegex = '/\[((' . $this->mUrlProtocols . ')'.
+               $this->mExtLinkBracketedRegex = '/\[(((?i)' . $this->mUrlProtocols . ')'.
                        self::EXT_LINK_URL_CLASS.'+)\p{Zs}*([^\]\\x00-\\x08\\x0a-\\x1F]*?)\]/Su';
                if ( isset( $conf['preprocessorClass'] ) ) {
                        $this->mPreprocessorClass = $conf['preprocessorClass'];
@@ -1187,7 +1187,7 @@ class Parser {
                        '!(?:                           # Start cases
                                (<a[ \t\r\n>].*?</a>) |     # m[1]: Skip link text
                                (<.*?>) |                   # m[2]: Skip stuff inside HTML elements' . "
-                               (\\b(?:$prots)$urlChar+) |  # m[3]: Free external links" . '
+                               (\\b(?i:$prots)$urlChar+) |  # m[3]: Free external links" . '
                                (?:RFC|PMID)\s+([0-9]+) |   # m[4]: RFC or PMID, capture number
                                ISBN\s+(\b                  # m[5]: ISBN, capture number
                                        (?: 97[89] [\ \-]? )?   # optional 13-digit ISBN prefix
@@ -1230,7 +1230,7 @@ class Parser {
                                throw new MWException( __METHOD__.': unrecognised match type "' .
                                        substr( $m[0], 0, 20 ) . '"' );
                        }
-                       $url = wfMsgForContent( $urlmsg, $id );
+                       $url = wfMessage( $urlmsg, $id )->inContentLanguage()->text();
                        return Linker::makeExternalLink( $url, "{$keyword} {$id}", true, $CssClass );
                } elseif ( isset( $m[5] ) && $m[5] !== '' ) {
                        # ISBN
@@ -1522,6 +1522,9 @@ class Parser {
                wfProfileIn( __METHOD__ );
 
                $bits = preg_split( $this->mExtLinkBracketedRegex, $text, -1, PREG_SPLIT_DELIM_CAPTURE );
+               if ( $bits === false ) {
+                       throw new MWException( "PCRE needs to be compiled with --enable-unicode-properties in order for MediaWiki to function" );
+               }
                $s = array_shift( $bits );
 
                $i = 0;
@@ -1684,7 +1687,7 @@ class Parser {
                }
                if ( !$text && $this->mOptions->getEnableImageWhitelist()
                         && preg_match( self::EXT_IMAGE_REGEX, $url ) ) {
-                       $whitelist = explode( "\n", wfMsgForContent( 'external_image_whitelist' ) );
+                       $whitelist = explode( "\n", wfMessage( 'external_image_whitelist' )->inContentLanguage()->text() );
                        foreach ( $whitelist as $entry ) {
                                # Sanitize the regex fragment, make it case-insensitive, ignore blank entries/comments
                                if ( strpos( $entry, '#' ) === 0 || $entry === '' ) {
@@ -1749,7 +1752,7 @@ class Parser {
                if ( $useLinkPrefixExtension ) {
                        # Match the end of a line for a word that's not followed by whitespace,
                        # e.g. in the case of 'The Arab al[[Razi]]', 'al' will be matched
-                       $e2 = wfMsgForContent( 'linkprefix' );
+                       $e2 = wfMessage( 'linkprefix' )->inContentLanguage()->text();
                }
 
                if ( is_null( $this->mTitle ) ) {
@@ -1850,7 +1853,7 @@ class Parser {
                        # Don't allow internal links to pages containing
                        # PROTO: where PROTO is a valid URL protocol; these
                        # should be external links.
-                       if ( preg_match( '/^(?:' . $this->mUrlProtocols . ')/', $m[1] ) ) {
+                       if ( preg_match( '/^(?i:' . $this->mUrlProtocols . ')/', $m[1] ) ) {
                                $s .= $prefix . '[[' . $line ;
                                wfProfileOut( __METHOD__."-misc" );
                                continue;
@@ -2087,7 +2090,7 @@ class Parser {
         * @return String: less-or-more HTML with NOPARSE bits
         */
        function armorLinks( $text ) {
-               return preg_replace( '/\b(' . $this->mUrlProtocols . ')/',
+               return preg_replace( '/\b((?i)' . $this->mUrlProtocols . ')/',
                        "{$this->mUniqPrefix}NOPARSE$1", $text );
        }
 
@@ -3083,9 +3086,10 @@ class Parser {
         * @param $max int|null Maximum allowed, when an explicit limit has been
         *       exceeded, provide the values (optional)
         */
-       function limitationWarn( $limitationType, $current = null, $max = null) {
+       function limitationWarn( $limitationType, $current = '', $max = '' ) {
                # does no harm if $current and $max are present but are unnecessary for the message
-               $warning = wfMsgExt( "$limitationType-warning", array( 'parsemag', 'escape' ), $current, $max );
+               $warning = wfMessage( "$limitationType-warning" )->numParams( $current, $max )
+                       ->inContentLanguage()->escaped();
                $this->mOutput->addWarning( $warning );
                $this->addTrackingCategory( "$limitationType-category" );
        }
@@ -3290,7 +3294,8 @@ class Parser {
                                if ( $frame->depth >= $limit ) {
                                        $found = true;
                                        $text = '<span class="error">'
-                                               . wfMsgForContent( 'parser-template-recursion-depth-warning', $limit )
+                                               . wfMessage( 'parser-template-recursion-depth-warning' )
+                                                       ->numParams( $limit )->inContentLanguage()->text()
                                                . '</span>';
                                }
                        }
@@ -3370,7 +3375,9 @@ class Parser {
                        # This has to be done after redirect resolution to avoid infinite loops via redirects
                        if ( !$frame->loopCheck( $title ) ) {
                                $found = true;
-                               $text = '<span class="error">' . wfMsgForContent( 'parser-template-loop-warning', $titleText ) . '</span>';
+                               $text = '<span class="error">'
+                                       . wfMessage( 'parser-template-loop-warning', $titleText )->inContentLanguage()->text()
+                                       . '</span>';
                                wfDebug( __METHOD__.": template loop broken at '$titleText'\n" );
                        }
                        wfProfileOut( __METHOD__ . '-loadtpl' );
@@ -3558,7 +3565,7 @@ class Parser {
                        # Get the revision
                        $rev = $id
                                ? Revision::newFromId( $id )
-                               : Revision::newFromTitle( $title, 0, Revision::READ_NORMAL );
+                               : Revision::newFromTitle( $title, false, Revision::READ_NORMAL );
                        $rev_id = $rev ? $rev->getId() : 0;
                        # If there is no current revision, there is no page
                        if ( $id === false && !$rev ) {
@@ -3660,13 +3667,13 @@ class Parser {
                global $wgEnableScaryTranscluding;
 
                if ( !$wgEnableScaryTranscluding ) {
-                       return wfMsgForContent('scarytranscludedisabled');
+                       return wfMessage('scarytranscludedisabled')->inContentLanguage()->text();
                }
 
                $url = $title->getFullUrl( "action=$action" );
 
                if ( strlen( $url ) > 255 ) {
-                       return wfMsgForContent( 'scarytranscludetoolong' );
+                       return wfMessage( 'scarytranscludetoolong' )->inContentLanguage()->text();
                }
                return $this->fetchScaryTemplateMaybeFromCache( $url );
        }
@@ -3687,7 +3694,7 @@ class Parser {
 
                $text = Http::get( $url );
                if ( !$text ) {
-                       return wfMsgForContent( 'scarytranscludefailed', $url );
+                       return wfMessage( 'scarytranscludefailed', $url )->inContentLanguage()->text();
                }
 
                $dbw = wfGetDB( DB_MASTER );
@@ -4412,7 +4419,7 @@ class Parser {
                $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-
+               # which may corrupt this parser instance via its wfMessage()->text() call-
 
                # Signatures
                $sigText = $this->getUserSig( $user );
@@ -4955,7 +4962,7 @@ class Parser {
                                'vertAlign' => array( 'baseline', 'sub', 'super', 'top', 'text-top', 'middle',
                                        'bottom', 'text-bottom' ),
                                'frame' => array( 'thumbnail', 'manualthumb', 'framed', 'frameless',
-                                       'upright', 'border', 'link', 'alt' ),
+                                       'upright', 'border', 'link', 'alt', 'class' ),
                        );
                        static $internalParamMap;
                        if ( !$internalParamMap ) {
@@ -5005,6 +5012,7 @@ class Parser {
                #  * upright    reduce width for upright images, rounded to full __0 px
                #  * border     draw a 1px border around the image
                #  * alt        Text for HTML alt attribute (defaults to empty)
+               #  * class      Set a class for img node
                #  * link       Set the target of the image link. Can be external, interwiki, or local
                # vertical-align values (no % or length right now):
                #  * baseline
@@ -5073,6 +5081,7 @@ class Parser {
                                                switch( $paramName ) {
                                                case 'manualthumb':
                                                case 'alt':
+                                               case 'class':
                                                        # @todo FIXME: Possibly check validity here for
                                                        # manualthumb? downstream behavior seems odd with
                                                        # missing manual thumbs.
@@ -5086,8 +5095,8 @@ class Parser {
                                                                $paramName = 'no-link';
                                                                $value = true;
                                                                $validated = true;
-                                                       } elseif ( preg_match( "/^$prots/", $value ) ) {
-                                                               if ( preg_match( "/^($prots)$chars+$/u", $value, $m ) ) {
+                                                       } elseif ( preg_match( "/^(?i)$prots/", $value ) ) {
+                                                               if ( preg_match( "/^((?i)$prots)$chars+$/u", $value, $m ) ) {
                                                                        $paramName = 'link-url';
                                                                        $this->mOutput->addExternalLink( $value );
                                                                        if ( $this->mOptions->getExternalLinkTarget() ) {
@@ -5613,7 +5622,7 @@ class Parser {
                # @todo 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( '/\[(?:' . $this->mUrlProtocols . ')([^ ]+?) ([^[]+)\]/', '$2', $text );
+               $text = preg_replace( '/\[(?i:' . $this->mUrlProtocols . ')([^ ]+?) ([^[]+)\]/', '$2', $text );
 
                # Parse wikitext quotes (italics & bold)
                $text = $this->doQuotes( $text );
index 9555bdb..6bcc324 100644 (file)
@@ -226,7 +226,7 @@ class Parser_LinkHooks extends Parser {
                # Don't allow internal links to pages containing
                # PROTO: where PROTO is a valid URL protocol; these
                # should be external links.
-               if( preg_match('/^\b(?:' . wfUrlProtocols() . ')/', $titleText) ) {
+               if( preg_match('/^\b(?i:' . wfUrlProtocols() . ')/', $titleText) ) {
                        wfProfileOut( __METHOD__ );
                        return $wt;
                }
index 2593b58..8b71a1b 100644 (file)
@@ -51,7 +51,7 @@ class Preprocessor_HipHop implements Preprocessor {
         * @param $args array
         * @return PPCustomFrame_HipHop
         */
-       function newCustomFrame( array $args ) {
+       function newCustomFrame( $args ) {
                return new PPCustomFrame_HipHop( $this, $args );
        }
 
@@ -109,7 +109,7 @@ class Preprocessor_HipHop implements Preprocessor {
         * @throws MWException
         * @return PPNode_HipHop_Tree
         */
-       function preprocessToObj( string $text, int $flags = 0 ) {
+       function preprocessToObj( $text, $flags = 0 ) {
                wfProfileIn( __METHOD__ );
 
                // Check cache.
@@ -1066,11 +1066,12 @@ class PPFrame_HipHop implements PPFrame {
         *
         * @param $args PPNode_HipHop_Array|array|bool
         * @param $title Title|bool
+        * @param $indexOffset A number subtracted from the index attributes of the arguments
         *
         * @throws MWException
         * @return PPTemplateFrame_HipHop
         */
-       function newChild( $args = false, $title = false ) {
+       function newChild( $args = false, $title = false, $indexOffset = 0 ) {
                $namedArgs = array();
                $numberedArgs = array();
                if ( $title === false ) {
index b08aa14..ad95d5f 100644 (file)
@@ -134,11 +134,14 @@ class StripState {
                $marker = $m[1];
                if ( isset( $this->data[$this->tempType][$marker] ) ) {
                        if ( isset( $this->circularRefGuard[$marker] ) ) {
-                               return '<span class="error">' . wfMsgForContent( 'parser-unstrip-loop-warning' ) . '</span>';
+                               return '<span class="error">'
+                                       . wfMessage( 'parser-unstrip-loop-warning' )->inContentLanguage()->text()
+                                       . '</span>';
                        }
                        if ( $this->recursionLevel >= self::UNSTRIP_RECURSION_LIMIT ) {
                                return '<span class="error">' . 
-                                       wfMsgForContent( 'parser-unstrip-recursion-limit', self::UNSTRIP_RECURSION_LIMIT ) . 
+                                       wfMessage( 'parser-unstrip-recursion-limit' )
+                                               ->numParams( self::UNSTRIP_RECURSION_LIMIT )->inContentLanguage()->text() .
                                        '</span>';
                        }
                        $this->circularRefGuard[$marker] = true;
index a36aaec..c916c4a 100644 (file)
@@ -29,7 +29,7 @@ class ResourceLoaderLanguageDataModule extends ResourceLoaderModule {
 
        protected $language;
        /**
-        * Get the grammer forms for the site content language.
+        * Get the grammar forms for the site content language.
         *
         * @return array
         */
@@ -37,6 +37,15 @@ class ResourceLoaderLanguageDataModule extends ResourceLoaderModule {
                return $this->language->getGrammarForms();
        }
 
+       /**
+        * Get the plural forms for the site content language.
+        *
+        * @return array
+        */
+       protected function getPluralRules() {
+               return $this->language->getPluralRules();
+       }
+
        /**
         * Get the digit transform table for the content language
         * Seperator transform table also required here to convert
@@ -61,17 +70,19 @@ class ResourceLoaderLanguageDataModule extends ResourceLoaderModule {
         * @return array
         */
        protected function getData() {
-               return array( 'grammarForms' => $this->getSiteLangGrammarForms(),
-                               'digitTransformTable' => $this->getDigitTransformTable()
-                       );
+               return array(
+                       'digitTransformTable' => $this->getDigitTransformTable(),
+                       'grammarForms' => $this->getSiteLangGrammarForms(),
+                       'pluralRules' => $this->getPluralRules(),
+               );
        }
 
        /**
         * @param $context ResourceLoaderContext
-        * @return string: Javascript code
+        * @return string: JavaScript code
         */
        public function getScript( ResourceLoaderContext $context ) {
-               $this->language = Language::factory( $context ->getLanguage() );
+               $this->language = Language::factory( $context->getLanguage() );
                return Xml::encodeJsCall( 'mw.language.setData', array(
                        $this->language->getCode(),
                        $this->getData()
index 9dd6939..623a269 100644 (file)
@@ -77,7 +77,7 @@ abstract class ResourceLoaderWikiModule extends ResourceLoaderModule {
                if ( !$title->isCssJsSubpage() && !$title->isCssOrJsPage() ) {
                        return null;
                }
-               $revision = Revision::newFromTitle( $title );
+               $revision = Revision::newFromTitle( $title, false, Revision::READ_NORMAL );
                if ( !$revision ) {
                        return null;
                }
@@ -182,7 +182,7 @@ abstract class ResourceLoaderWikiModule extends ResourceLoaderModule {
                        // We're dealing with a subclass that doesn't have a DB
                        return array();
                }
-               
+
                $hash = $context->getHash();
                if ( isset( $this->titleMtimes[$hash] ) ) {
                        return $this->titleMtimes[$hash];
index b6484ce..1d6656a 100644 (file)
@@ -106,9 +106,9 @@ class SpecialBlock extends FormSpecialPage {
                $form->setSubmitTextMsg( $msg );
 
                # Don't need to do anything if the form has been posted
-               if( !$this->getRequest()->wasPosted() && $this->preErrors ){
+               if ( !$this->getRequest()->wasPosted() && $this->preErrors ) {
                        $s = HTMLForm::formatErrors( $this->preErrors );
-                       if( $s ){
+                       if ( $s ) {
                                $form->addHeaderText( Html::rawElement(
                                                'div',
                                                array( 'class' => 'error' ),
@@ -122,7 +122,7 @@ class SpecialBlock extends FormSpecialPage {
         * Get the HTMLForm descriptor array for the block form
         * @return Array
         */
-       protected function getFormFields(){
+       protected function getFormFields() {
                global $wgBlockAllowsUTEdit;
 
                $user = $this->getUser();
@@ -158,14 +158,14 @@ class SpecialBlock extends FormSpecialPage {
                        ),
                );
 
-               if( self::canBlockEmail( $user ) ) {
+               if ( self::canBlockEmail( $user ) ) {
                        $a['DisableEmail'] = array(
                                'type' => 'check',
                                'label-message' => 'ipbemailban',
                        );
                }
 
-               if( $wgBlockAllowsUTEdit ){
+               if ( $wgBlockAllowsUTEdit ) {
                        $a['DisableUTEdit'] = array(
                                'type' => 'check',
                                'label-message' => 'ipb-disableusertalk',
@@ -180,7 +180,7 @@ class SpecialBlock extends FormSpecialPage {
                );
 
                # Allow some users to hide name from block log, blocklist and listusers
-               if( $user->isAllowed( 'hideuser' ) ) {
+               if ( $user->isAllowed( 'hideuser' ) ) {
                        $a['HideUser'] = array(
                                'type' => 'check',
                                'label-message' => 'ipbhidename',
@@ -189,7 +189,7 @@ class SpecialBlock extends FormSpecialPage {
                }
 
                # Watchlist their user page? (Only if user is logged in)
-               if( $user->isLoggedIn() ) {
+               if ( $user->isLoggedIn() ) {
                        $a['Watch'] = array(
                                'type' => 'check',
                                'label-message' => 'ipbwatchuser',
@@ -228,7 +228,7 @@ class SpecialBlock extends FormSpecialPage {
         * @return Bool whether fields were altered (that is, whether the target is
         *     already blocked)
         */
-       protected function maybeAlterFormDefaults( &$fields ){
+       protected function maybeAlterFormDefaults( &$fields ) {
                # This will be overwritten by request data
                $fields['Target']['default'] = (string)$this->target;
 
@@ -237,7 +237,7 @@ class SpecialBlock extends FormSpecialPage {
 
                $block = Block::newFromTarget( $this->target );
 
-               if( $block instanceof Block && !$block->mAuto # The block exists and isn't an autoblock
+               if ( $block instanceof Block && !$block->mAuto # The block exists and isn't an autoblock
                        && ( $this->type != Block::TYPE_RANGE # The block isn't a rangeblock
                          || $block->getTarget() == $this->target ) # or if it is, the range is what we're about to block
                        )
@@ -246,21 +246,27 @@ class SpecialBlock extends FormSpecialPage {
                        $fields['CreateAccount']['default'] = $block->prevents( 'createaccount' );
                        $fields['AutoBlock']['default'] = $block->isAutoblocking();
 
-                       if( isset( $fields['DisableEmail'] ) ){
+                       if ( isset( $fields['DisableEmail'] ) ) {
                                $fields['DisableEmail']['default'] = $block->prevents( 'sendemail' );
                        }
 
-                       if( isset( $fields['HideUser'] ) ){
+                       if ( isset( $fields['HideUser'] ) ) {
                                $fields['HideUser']['default'] = $block->mHideName;
                        }
 
-                       if( isset( $fields['DisableUTEdit'] ) ){
+                       if ( isset( $fields['DisableUTEdit'] ) ) {
                                $fields['DisableUTEdit']['default'] = $block->prevents( 'editownusertalk' );
                        }
 
-                       $fields['Reason']['default'] = $block->mReason;
+                       // If the username was hidden (ipb_deleted == 1), don't show the reason
+                       // unless this user also has rights to hideuser: Bug 35839
+                       if ( !$block->mHideName || $this->getUser()->isAllowed( 'hideuser' ) ) {
+                               $fields['Reason']['default'] = $block->mReason;
+                       } else {
+                               $fields['Reason']['default'] = '';
+                       }
 
-                       if( $this->getRequest()->wasPosted() ){
+                       if ( $this->getRequest()->wasPosted() ) {
                                # Ok, so we got a POST submission asking us to reblock a user.  So show the
                                # confirm checkbox; the user will only see it if they haven't previously
                                $fields['Confirm']['type'] = 'check';
@@ -271,7 +277,7 @@ class SpecialBlock extends FormSpecialPage {
                                $fields['Confirm']['default'] = 1;
                        }
 
-                       if( $block->mExpiry == 'infinity' ) {
+                       if ( $block->mExpiry == 'infinity' ) {
                                $fields['Expiry']['default'] = 'infinite';
                        } else {
                                $fields['Expiry']['default'] = wfTimestamp( TS_RFC2822, $block->mExpiry );
@@ -282,14 +288,14 @@ class SpecialBlock extends FormSpecialPage {
                }
 
                # We always need confirmation to do HideUser
-               if( $this->requestedHideUser ){
+               if ( $this->requestedHideUser ) {
                        $fields['Confirm']['type'] = 'check';
                        unset( $fields['Confirm']['default'] );
                        $this->preErrors[] = 'ipb-confirmhideuser';
                }
 
                # Or if the user is trying to block themselves
-               if( (string)$this->target === $this->getUser()->getName() ){
+               if ( (string)$this->target === $this->getUser()->getName() ) {
                        $fields['Confirm']['type'] = 'check';
                        unset( $fields['Confirm']['default'] );
                        $this->preErrors[] = 'ipb-blockingself';
@@ -300,17 +306,17 @@ class SpecialBlock extends FormSpecialPage {
         * Add header elements like block log entries, etc.
         * @return String
         */
-       protected function preText(){
+       protected function preText() {
                $this->getOutput()->addModules( 'mediawiki.special.block' );
 
                $text = $this->msg( 'blockiptext' )->parse();
 
                $otherBlockMessages = array();
-               if( $this->target !== null ) {
+               if ( $this->target !== null ) {
                        # Get other blocks, i.e. from GlobalBlocking or TorBlock extension
                        wfRunHooks( 'OtherBlockLogLink', array( &$otherBlockMessages, $this->target ) );
 
-                       if( count( $otherBlockMessages ) ) {
+                       if ( count( $otherBlockMessages ) ) {
                                $s = Html::rawElement(
                                        'h2',
                                        array(),
@@ -319,7 +325,7 @@ class SpecialBlock extends FormSpecialPage {
 
                                $list = '';
 
-                               foreach( $otherBlockMessages as $link ) {
+                               foreach ( $otherBlockMessages as $link ) {
                                        $list .= Html::rawElement( 'li', array(), $link ) . "\n";
                                }
 
@@ -340,11 +346,11 @@ class SpecialBlock extends FormSpecialPage {
         * Add footer elements to the form
         * @return string
         */
-       protected function postText(){
+       protected function postText() {
                $links = array();
 
                # Link to the user's contributions, if applicable
-               if( $this->target instanceof User ){
+               if ( $this->target instanceof User ) {
                        $contribsPage = SpecialPage::getTitleFor( 'Contributions', $this->target->getName() );
                        $links[] = Linker::link(
                                $contribsPage,
@@ -353,7 +359,7 @@ class SpecialBlock extends FormSpecialPage {
                }
 
                # Link to unblock the specified user, or to a blank unblock form
-               if( $this->target instanceof User ) {
+               if ( $this->target instanceof User ) {
                        $message = $this->msg( 'ipb-unblock-addr', wfEscapeWikiText( $this->target->getName() ) )->parse();
                        $list = SpecialPage::getTitleFor( 'Unblock', $this->target->getName() );
                } else {
@@ -387,7 +393,7 @@ class SpecialBlock extends FormSpecialPage {
                );
 
                $userTitle = self::getTargetUserTitle( $this->target );
-               if( $userTitle ){
+               if ( $userTitle ) {
                        # Get relevant extracts from the block and suppression logs, if possible
                        $out = '';
 
@@ -405,7 +411,7 @@ class SpecialBlock extends FormSpecialPage {
                        $text .= $out;
 
                        # Add suppression block entries if allowed
-                       if( $user->isAllowed( 'suppressionlog' ) ) {
+                       if ( $user->isAllowed( 'suppressionlog' ) ) {
                                LogEventsList::showLogExtract(
                                        $out,
                                        'suppress',
@@ -433,7 +439,7 @@ class SpecialBlock extends FormSpecialPage {
         * @return Title|null
         */
        protected static function getTargetUserTitle( $target ) {
-               if( $target instanceof User ) {
+               if ( $target instanceof User ) {
                        return $target->getUserPage();
                } elseif ( IP::isIPAddress( $target ) ) {
                        return Title::makeTitleSafe( NS_USER, $target );
@@ -449,18 +455,18 @@ class SpecialBlock extends FormSpecialPage {
         * @param $request WebRequest optionally try and get data from a request too
         * @return array( User|string|null, Block::TYPE_ constant|null )
         */
-       public static function getTargetAndType( $par, WebRequest $request = null ){
+       public static function getTargetAndType( $par, WebRequest $request = null ) {
                $i = 0;
                $target = null;
 
-               while( true ){
-                       switch( $i++ ){
+               while( true ) {
+                       switch( $i++ ) {
                                case 0:
                                        # The HTMLForm will check wpTarget first and only if it doesn't get
                                        # a value use the default, which will be generated from the options
                                        # below; so this has to have a higher precedence here than $par, or
                                        # we could end up with different values in $this->target and the HTMLForm!
-                                       if( $request instanceof WebRequest ){
+                                       if ( $request instanceof WebRequest ) {
                                                $target = $request->getText( 'wpTarget', null );
                                        }
                                        break;
@@ -468,13 +474,13 @@ class SpecialBlock extends FormSpecialPage {
                                        $target = $par;
                                        break;
                                case 2:
-                                       if( $request instanceof WebRequest ){
+                                       if ( $request instanceof WebRequest ) {
                                                $target = $request->getText( 'ip', null );
                                        }
                                        break;
                                case 3:
                                        # B/C @since 1.18
-                                       if( $request instanceof WebRequest ){
+                                       if ( $request instanceof WebRequest ) {
                                                $target = $request->getText( 'wpBlockAddress', null );
                                        }
                                        break;
@@ -484,7 +490,7 @@ class SpecialBlock extends FormSpecialPage {
 
                        list( $target, $type ) = Block::parseTarget( $target );
 
-                       if( $type !== null ){
+                       if ( $type !== null ) {
                                return array( $target, $type );
                        }
                }
@@ -505,9 +511,9 @@ class SpecialBlock extends FormSpecialPage {
 
                list( $target, $type ) = self::getTargetAndType( $value );
 
-               if( $type == Block::TYPE_USER ){
+               if ( $type == Block::TYPE_USER ) {
                        # TODO: why do we not have a User->exists() method?
-                       if( !$target->getId() ){
+                       if ( !$target->getId() ) {
                                return $form->msg( 'nosuchusershort',
                                        wfEscapeWikiText( $target->getName() ) );
                        }
@@ -517,31 +523,31 @@ class SpecialBlock extends FormSpecialPage {
                                return $form->msg( 'badaccess', $status );
                        }
 
-               } elseif( $type == Block::TYPE_RANGE ){
+               } elseif ( $type == Block::TYPE_RANGE ) {
                        list( $ip, $range ) = explode( '/', $target, 2 );
 
-                       if( ( IP::isIPv4( $ip ) && $wgBlockCIDRLimit['IPv4'] == 32 )
+                       if ( ( IP::isIPv4( $ip ) && $wgBlockCIDRLimit['IPv4'] == 32 )
                                || ( IP::isIPv6( $ip ) && $wgBlockCIDRLimit['IPv6'] == 128 ) )
                        {
                                # Range block effectively disabled
                                return $form->msg( 'range_block_disabled' );
                        }
 
-                       if( ( IP::isIPv4( $ip ) && $range > 32 )
+                       if ( ( IP::isIPv4( $ip ) && $range > 32 )
                                || ( IP::isIPv6( $ip ) && $range > 128 ) )
                        {
                                # Dodgy range
                                return $form->msg( 'ip_range_invalid' );
                        }
 
-                       if( IP::isIPv4( $ip ) && $range < $wgBlockCIDRLimit['IPv4'] ) {
+                       if ( IP::isIPv4( $ip ) && $range < $wgBlockCIDRLimit['IPv4'] ) {
                                return $form->msg( 'ip_range_toolarge', $wgBlockCIDRLimit['IPv4'] );
                        }
 
-                       if( IP::isIPv6( $ip ) && $range < $wgBlockCIDRLimit['IPv6'] ) {
+                       if ( IP::isIPv6( $ip ) && $range < $wgBlockCIDRLimit['IPv6'] ) {
                                return $form->msg( 'ip_range_toolarge', $wgBlockCIDRLimit['IPv6'] );
                        }
-               } elseif( $type == Block::TYPE_IP ){
+               } elseif ( $type == Block::TYPE_IP ) {
                        # All is well
                } else {
                        return $form->msg( 'badipaddress' );
@@ -566,7 +572,7 @@ class SpecialBlock extends FormSpecialPage {
         * @param  $context IContextSource
         * @return Bool|String
         */
-       public static function processForm( array $data, IContextSource $context ){
+       public static function processForm( array $data, IContextSource $context ) {
                global $wgBlockAllowsUTEdit;
 
                $performer = $context->getUser();
@@ -579,7 +585,7 @@ class SpecialBlock extends FormSpecialPage {
                $data['Confirm'] = !in_array( $data['Confirm'], array( '', '0', null, false ), true );
 
                list( $target, $type ) = self::getTargetAndType( $data['Target'] );
-               if( $type == Block::TYPE_USER ){
+               if ( $type == Block::TYPE_USER ) {
                        $user = $target;
                        $target = $user->getName();
                        $userId = $user->getId();
@@ -591,14 +597,14 @@ class SpecialBlock extends FormSpecialPage {
                        # since both $data['PreviousTarget'] and $target are normalized
                        # but $data['target'] gets overriden by (non-normalized) request variable
                        # from previous request.
-                       if( $target === $performer->getName() &&
+                       if ( $target === $performer->getName() &&
                                ( $data['PreviousTarget'] !== $target || !$data['Confirm'] ) )
                        {
                                return array( 'ipb-blockingself' );
                        }
-               } elseif( $type == Block::TYPE_RANGE ){
+               } elseif ( $type == Block::TYPE_RANGE ) {
                        $userId = 0;
-               } elseif( $type == Block::TYPE_IP ){
+               } elseif ( $type == Block::TYPE_IP ) {
                        $target = $target->getName();
                        $userId = 0;
                } else {
@@ -606,24 +612,24 @@ class SpecialBlock extends FormSpecialPage {
                        return array( 'badipaddress' );
                }
 
-               if( ( strlen( $data['Expiry'] ) == 0) || ( strlen( $data['Expiry'] ) > 50 )
+               if ( ( strlen( $data['Expiry'] ) == 0) || ( strlen( $data['Expiry'] ) > 50 )
                        || !self::parseExpiryInput( $data['Expiry'] ) )
                {
                        return array( 'ipb_expiry_invalid' );
                }
 
-               if( !isset( $data['DisableEmail'] ) ){
+               if ( !isset( $data['DisableEmail'] ) ) {
                        $data['DisableEmail'] = false;
                }
 
                # If the user has done the form 'properly', they won't even have been given the
                # option to suppress-block unless they have the 'hideuser' permission
-               if( !isset( $data['HideUser'] ) ){
+               if ( !isset( $data['HideUser'] ) ) {
                        $data['HideUser'] = false;
                }
 
-               if( $data['HideUser'] ) {
-                       if( !$performer->isAllowed('hideuser') ){
+               if ( $data['HideUser'] ) {
+                       if ( !$performer->isAllowed('hideuser') ) {
                                # this codepath is unreachable except by a malicious user spoofing forms,
                                # or by race conditions (user has oversight and sysop, loads block form,
                                # and is de-oversighted before submission); so need to fail completely
@@ -632,16 +638,16 @@ class SpecialBlock extends FormSpecialPage {
                        }
 
                        # Recheck params here...
-                       if( $type != Block::TYPE_USER ) {
+                       if ( $type != Block::TYPE_USER ) {
                                $data['HideUser'] = false; # IP users should not be hidden
-                       } elseif( !in_array( $data['Expiry'], array( 'infinite', 'infinity', 'indefinite' ) ) ) {
+                       } elseif ( !in_array( $data['Expiry'], array( 'infinite', 'infinity', 'indefinite' ) ) ) {
                                # Bad expiry.
                                return array( 'ipb_expiry_temp' );
-                       } elseif( $user->getEditCount() > self::HIDEUSER_CONTRIBLIMIT ) {
+                       } elseif ( $user->getEditCount() > self::HIDEUSER_CONTRIBLIMIT ) {
                                # Typically, the user should have a handful of edits.
                                # Disallow hiding users with many edits for performance.
                                return array( 'ipb_hide_invalid' );
-                       } elseif( !$data['Confirm'] ){
+                       } elseif ( !$data['Confirm'] ) {
                                return array( 'ipb-confirmhideuser' );
                        }
                }
@@ -659,15 +665,15 @@ class SpecialBlock extends FormSpecialPage {
                $block->isAutoblocking( $data['AutoBlock'] );
                $block->mHideName = $data['HideUser'];
 
-               if( !wfRunHooks( 'BlockIp', array( &$block, &$performer ) ) ) {
+               if ( !wfRunHooks( 'BlockIp', array( &$block, &$performer ) ) ) {
                        return array( 'hookaborted' );
                }
 
                # Try to insert block. Is there a conflicting block?
                $status = $block->insert();
-               if( !$status ) {
+               if ( !$status ) {
                        # Show form unless the user is already aware of this...
-                       if( !$data['Confirm'] || ( array_key_exists( 'PreviousTarget', $data )
+                       if ( !$data['Confirm'] || ( array_key_exists( 'PreviousTarget', $data )
                                && $data['PreviousTarget'] !== $target ) )
                        {
                                return array( array( 'ipb_already_blocked', $block->getTarget() ) );
@@ -677,13 +683,13 @@ class SpecialBlock extends FormSpecialPage {
                                # be sure the user is blocked by now it should work for our purposes
                                $currentBlock = Block::newFromTarget( $target );
 
-                               if( $block->equals( $currentBlock ) ) {
+                               if ( $block->equals( $currentBlock ) ) {
                                        return array( array( 'ipb_already_blocked', $block->getTarget() ) );
                                }
 
                                # If the name was hidden and the blocking user cannot hide
                                # names, then don't allow any block changes...
-                               if( $currentBlock->mHideName && !$performer->isAllowed( 'hideuser' ) ) {
+                               if ( $currentBlock->mHideName && !$performer->isAllowed( 'hideuser' ) ) {
                                        return array( 'cant-see-hidden-user' );
                                }
 
@@ -692,12 +698,12 @@ class SpecialBlock extends FormSpecialPage {
                                $logaction = 'reblock';
 
                                # Unset _deleted fields if requested
-                               if( $currentBlock->mHideName && !$data['HideUser'] ) {
+                               if ( $currentBlock->mHideName && !$data['HideUser'] ) {
                                        RevisionDeleteUser::unsuppressUserName( $target, $userId );
                                }
 
                                # If hiding/unhiding a name, this should go in the private logs
-                               if( (bool)$currentBlock->mHideName ){
+                               if ( (bool)$currentBlock->mHideName ) {
                                        $data['HideUser'] = true;
                                }
                        }
@@ -708,12 +714,12 @@ class SpecialBlock extends FormSpecialPage {
                wfRunHooks( 'BlockIpComplete', array( $block, $performer ) );
 
                # Set *_deleted fields if requested
-               if( $data['HideUser'] ) {
+               if ( $data['HideUser'] ) {
                        RevisionDeleteUser::suppressUserName( $target, $userId );
                }
 
                # Can't watch a rangeblock
-               if( $type != Block::TYPE_RANGE && $data['Watch'] ) {
+               if ( $type != Block::TYPE_RANGE && $data['Watch'] ) {
                        $performer->addWatch( Title::makeTitle( NS_USER, $target ) );
                }
 
@@ -751,18 +757,18 @@ class SpecialBlock extends FormSpecialPage {
         *     the wiki's content language
         * @return Array
         */
-       public static function getSuggestedDurations( $lang = null ){
+       public static function getSuggestedDurations( $lang = null ) {
                $a = array();
                $msg = $lang === null
                        ? wfMessage( 'ipboptions' )->inContentLanguage()->text()
                        : wfMessage( 'ipboptions' )->inLanguage( $lang )->text();
 
-               if( $msg == '-' ){
+               if ( $msg == '-' ) {
                        return array();
                }
 
-               foreach( explode( ',', $msg ) as $option ) {
-                       if( strpos( $option, ':' ) === false ){
+               foreach ( explode( ',', $msg ) as $option ) {
+                       if ( strpos( $option, ':' ) === false ) {
                                $option = "$option:$option";
                        }
 
@@ -781,7 +787,7 @@ class SpecialBlock extends FormSpecialPage {
         */
        public static function parseExpiryInput( $expiry ) {
                static $infinity;
-               if( $infinity == null ){
+               if ( $infinity == null ) {
                        $infinity = wfGetDB( DB_SLAVE )->getInfinity();
                }
 
@@ -826,8 +832,8 @@ class SpecialBlock extends FormSpecialPage {
                        $user = User::newFromName( $user );
                }
 
-               if( $performer->isBlocked() ){
-                       if( $user instanceof User && $user->getId() == $performer->getId() ) {
+               if ( $performer->isBlocked() ) {
+                       if ( $user instanceof User && $user->getId() == $performer->getId() ) {
                                # User is trying to unblock themselves
                                if ( $performer->isAllowed( 'unblockself' ) ) {
                                        return true;
@@ -851,40 +857,41 @@ class SpecialBlock extends FormSpecialPage {
         * reader for this block, to provide more information in the logs
         * @param $data Array from HTMLForm data
         * @param $type Block::TYPE_ constant (USER, RANGE, or IP)
-        * @return array
+        * @return string
         */
        protected static function blockLogFlags( array $data, $type ) {
                global $wgBlockAllowsUTEdit;
                $flags = array();
 
-               # when blocking a user the option 'anononly' is not available/has no effect -> do not write this into log
-               if( !$data['HardBlock'] && $type != Block::TYPE_USER ){
+               # when blocking a user the option 'anononly' is not available/has no effect
+               # -> do not write this into log
+               if ( !$data['HardBlock'] && $type != Block::TYPE_USER ) {
                        // For grepping: message block-log-flags-anononly
                        $flags[] = 'anononly';
                }
 
-               if( $data['CreateAccount'] ){
+               if ( $data['CreateAccount'] ) {
                        // For grepping: message block-log-flags-nocreate
                        $flags[] = 'nocreate';
                }
 
                # Same as anononly, this is not displayed when blocking an IP address
-               if( !$data['AutoBlock'] && $type == Block::TYPE_USER ){
+               if ( !$data['AutoBlock'] && $type == Block::TYPE_USER ) {
                        // For grepping: message block-log-flags-noautoblock
                        $flags[] = 'noautoblock';
                }
 
-               if( $data['DisableEmail'] ){
+               if ( $data['DisableEmail'] ) {
                        // For grepping: message block-log-flags-noemail
                        $flags[] = 'noemail';
                }
 
-               if( $wgBlockAllowsUTEdit && $data['DisableUTEdit'] ){
+               if ( $wgBlockAllowsUTEdit && $data['DisableUTEdit'] ) {
                        // For grepping: message block-log-flags-nousertalk
                        $flags[] = 'nousertalk';
                }
 
-               if( $data['HideUser'] ){
+               if ( $data['HideUser'] ) {
                        // For grepping: message block-log-flags-hiddenname
                        $flags[] = 'hiddenname';
                }
index ff2a901..991e7a2 100644 (file)
@@ -94,17 +94,17 @@ class DeletedContribsPager extends IndexPager {
                if ( isset( $this->mNavigationBar ) ) {
                        return $this->mNavigationBar;
                }
-               $lang = $this->getLanguage();
-               $fmtLimit = $lang->formatNum( $this->mLimit );
+
                $linkTexts = array(
-                       'prev' => $this->msg( 'pager-newer-n', $fmtLimit )->escaped(),
-                       'next' => $this->msg( 'pager-older-n', $fmtLimit )->escaped(),
+                       'prev' => $this->msg( 'pager-newer-n' )->numParams( $this->mLimit )->escaped(),
+                       'next' => $this->msg( 'pager-older-n' )->numParams( $this->mLimit )->escaped(),
                        'first' => $this->msg( 'histlast' )->escaped(),
                        'last' => $this->msg( 'histfirst' )->escaped()
                );
 
                $pagingLinks = $this->getPagingLinks( $linkTexts );
                $limitLinks = $this->getLimitLinks();
+               $lang = $this->getLanguage();
                $limits = $lang->pipeList( $limitLinks );
 
                $this->mNavigationBar = "(" . $lang->pipeList( array( $pagingLinks['first'], $pagingLinks['last'] ) ) . ") " .
index 19ea171..8e15d55 100644 (file)
@@ -360,8 +360,8 @@ class SpecialNewpages extends IncludableSpecialPage {
                        $classes[] = 'mw-newpages-zero-byte-page';
                }
 
-               # Tags, if any. check for including due to bug 23293
-               if ( !$this->including() ) {
+               # Tags, if any.
+               if( isset( $result->ts_tags ) ) {
                        list( $tagDisplay, $newClasses ) = ChangeTags::formatSummaryRow( $result->ts_tags, 'newpages' );
                        $classes = array_merge( $classes, $newClasses );
                } else {
@@ -530,7 +530,7 @@ class NewPagesPager extends ReverseChronologicalPager {
                $fields = array(
                        'rc_namespace', 'rc_title', 'rc_cur_id', 'rc_user', 'rc_user_text',
                        'rc_comment', 'rc_timestamp', 'rc_patrolled','rc_id', 'rc_deleted',
-                       'length' => 'page_len', 'rev_id' => 'page_latest', 'ts_tags', 'rc_this_oldid',
+                       'length' => 'page_len', 'rev_id' => 'page_latest', 'rc_this_oldid',
                        'page_namespace', 'page_title'
                );
                $join_conds = array( 'page' => array( 'INNER JOIN', 'page_id=rc_cur_id' ) );
@@ -546,13 +546,10 @@ class NewPagesPager extends ReverseChronologicalPager {
                        'join_conds' => $join_conds
                );
 
-               // Empty array for fields, it'll be set by us anyway.
-               $fields = array();
-
                // Modify query for tags
                ChangeTags::modifyDisplayQuery(
                        $info['tables'],
-                       $fields,
+                       $info['fields'],
                        $info['conds'],
                        $info['join_conds'],
                        $info['options'],
index ec8f93b..2bd8b0a 100644 (file)
@@ -396,14 +396,15 @@ class SpecialRecentChanges extends IncludableSpecialPage {
                        $fields[] = 'page_latest';
                        $join_conds['page'] = array('LEFT JOIN', 'rc_cur_id=page_id');
                }
-               if ( !$this->including() ) {
-                       // Tag stuff.
-                       // Doesn't work when transcluding. See bug 23293
-                       ChangeTags::modifyDisplayQuery(
-                               $tables, $fields, $conds, $join_conds, $query_options,
-                               $opts['tagfilter']
-                       );
-               }
+               // Tag stuff.
+               ChangeTags::modifyDisplayQuery(
+                       $tables,
+                       $fields,
+                       $conds,
+                       $join_conds,
+                       $query_options,
+                       $opts['tagfilter']
+               );
 
                if ( !wfRunHooks( 'SpecialRecentChangesQuery',
                        array( &$conds, &$tables, &$join_conds, $opts, &$query_options, &$fields ) ) )
index 9010e10..862736d 100644 (file)
@@ -110,10 +110,14 @@ 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']
+               );
 
                if ( !wfRunHooks( 'SpecialRecentChangesQuery', array( &$conds, &$tables, &$join_conds, $opts, &$query_options, &$select ) ) ) {
                        return false;
index 3344436..85365f5 100644 (file)
@@ -667,10 +667,10 @@ class SpecialSearch extends SpecialPage {
                                        return "<li>" .
                                                '<table class="searchResultImage">' .
                                                '<tr>' .
-                                               '<td width="120" align="center" valign="top">' .
+                                               '<td width="120" style="text-align: center; vertical-align: top;">' .
                                                $thumb->toHtml( array( 'desc-link' => true ) ) .
                                                '</td>' .
-                                               '<td valign="top">' .
+                                               '<td style="vertical-align: top;">' .
                                                $link .
                                                $extract .
                                                "<div class='mw-search-result-data'>{$score}{$desc} - {$date}{$related}</div>" .
index b1555c6..6dde6b9 100644 (file)
@@ -120,7 +120,7 @@ class PageArchive {
                        ),
                        array( 'ar_namespace' => $this->title->getNamespace(),
                                   'ar_title' => $this->title->getDBkey() ),
-                       'PageArchive::listRevisions',
+                       __METHOD__,
                        array( 'ORDER BY' => 'ar_timestamp DESC' ) );
                $ret = $dbr->resultObject( $res );
                return $ret;
@@ -308,7 +308,9 @@ class PageArchive {
                $dbr = wfGetDB( DB_SLAVE );
                $n = $dbr->selectField( 'archive', 'COUNT(ar_title)',
                        array( 'ar_namespace' => $this->title->getNamespace(),
-                                  'ar_title' => $this->title->getDBkey() ) );
+                                  'ar_title' => $this->title->getDBkey() ),
+                       __METHOD__
+               );
                return ( $n > 0 );
        }
 
@@ -327,7 +329,7 @@ class PageArchive {
         * on success, false on failure
         */
        function undelete( $timestamps, $comment = '', $fileVersions = array(), $unsuppress = false, User $user = null ) {
-               global $wgContLang, $wgUser;
+               global $wgUser;
 
                // If both the set of text revisions and file revisions are empty,
                // restore everything. Otherwise, just restore the requested items.
@@ -912,10 +914,10 @@ class SpecialUndelete extends SpecialPage {
                        "<col class='diff-marker' />" .
                        "<col class='diff-content' />" .
                        "<tr>" .
-                               "<td colspan='2' width='50%' align='center' class='diff-otitle'>" .
+                               "<td colspan='2' width='50%' style='text-align: center' class='diff-otitle'>" .
                                $this->diffHeader( $previousRev, 'o' ) .
                                "</td>\n" .
-                               "<td colspan='2' width='50%' align='center' class='diff-ntitle'>" .
+                               "<td colspan='2' width='50%' style='text-align: center' class='diff-ntitle'>" .
                                $this->diffHeader( $currentRev, 'n' ) .
                                "</td>\n" .
                        "</tr>" .
index d1a9b16..43ea345 100644 (file)
@@ -702,21 +702,18 @@ class SpecialUpload extends SpecialPage {
         * @return string
         */
        public static function getDupeWarning( $dupes ) {
-               global $wgOut;
-               if( $dupes ) {
-                       $msg = '<gallery>';
-                       foreach( $dupes as $file ) {
-                               $title = $file->getTitle();
-                               $msg .= $title->getPrefixedText() .
-                                       '|' . $title->getText() . "\n";
-                       }
-                       $msg .= '</gallery>';
-                       return '<li>' .
-                               wfMessage( 'file-exists-duplicate' )->numParams( count( $dupes ) )->parse() .
-                               $wgOut->parse( $msg ) . "</li>\n";
-               } else {
+               if ( !$dupes ) {
                        return '';
                }
+
+               $gallery = new ImageGallery;
+               $gallery->setShowBytes( false );
+               foreach( $dupes as $file ) {
+                       $gallery->add( $file->getTitle() );
+               }
+               return '<li>' .
+                       wfMessage( 'file-exists-duplicate' )->numParams( count( $dupes ) )->parse() .
+                       $gallery->toHtml() . "</li>\n";
        }
 
 }
index 19af852..c101897 100644 (file)
@@ -74,7 +74,7 @@ class LoginForm extends SpecialPage {
         * Loader
         */
        function load() {
-               global $wgAuth, $wgHiddenPrefs, $wgEnableEmail, $wgRedirectOnLogin;
+               global $wgAuth, $wgHiddenPrefs, $wgEnableEmail;
 
                if ( $this->mLoaded ) {
                        return;
@@ -105,14 +105,8 @@ class LoginForm extends SpecialPage {
                $this->mLanguage = $request->getText( 'uselang' );
                $this->mSkipCookieCheck = $request->getCheck( 'wpSkipCookieCheck' );
                $this->mToken = ( $this->mType == 'signup' ) ? $request->getVal( 'wpCreateaccountToken' ) : $request->getVal( 'wpLoginToken' );
-
-               if ( $wgRedirectOnLogin ) {
-                       $this->mReturnTo = $wgRedirectOnLogin;
-                       $this->mReturnToQuery = '';
-               } else {
-                       $this->mReturnTo = $request->getVal( 'returnto', '' );
-                       $this->mReturnToQuery = $request->getVal( 'returntoquery', '' );
-               }
+               $this->mReturnTo = $request->getVal( 'returnto', '' );
+               $this->mReturnToQuery = $request->getVal( 'returntoquery', '' );
 
                if( $wgEnableEmail ) {
                        $this->mEmail = $request->getText( 'wpEmail' );
@@ -207,7 +201,7 @@ class LoginForm extends SpecialPage {
                        $this->mainLoginForm( $this->msg( 'mailerror', $result->getWikiText() )->text() );
                } else {
                        $out->addWikiMsg( 'accmailtext', $u->getName(), $u->getEmail() );
-                       $out->returnToMain( false );
+                       $this->executeReturnTo( 'success' );
                }
        }
 
@@ -266,7 +260,7 @@ class LoginForm extends SpecialPage {
                        # Confirm that the account was created
                        $out->setPageTitle( $this->msg( 'accountcreated' ) );
                        $out->addWikiMsg( 'accountcreatedtext', $u->getName() );
-                       $out->returnToMain( false, $this->getTitle() );
+                       $out->addReturnTo( $this->getTitle() );
                        wfRunHooks( 'AddNewAccount', array( $u, false ) );
                        $u->addNewUserLogEntry( false, $this->mReason );
                }
@@ -866,16 +860,7 @@ class LoginForm extends SpecialPage {
                if( $injected_html !== '' ) {
                        $this->displaySuccessfulLogin( 'loginsuccess', $injected_html );
                } else {
-                       $titleObj = Title::newFromText( $this->mReturnTo );
-                       if ( !$titleObj instanceof Title ) {
-                               $titleObj = Title::newMainPage();
-                       }
-                       $redirectUrl = $titleObj->getFullURL( $this->mReturnToQuery );
-                       global $wgSecureLogin;
-                       if( $wgSecureLogin && !$this->mStickHTTPS ) {
-                               $redirectUrl = preg_replace( '/^https:/', 'http:', $redirectUrl );
-                       }
-                       $this->getOutput()->redirect( $redirectUrl );
+                       $this->executeReturnTo( 'successredirect' );
                }
        }
 
@@ -917,11 +902,7 @@ class LoginForm extends SpecialPage {
 
                $out->addHTML( $injected_html );
 
-               if ( $this->mReturnTo !== '' ) {
-                       $out->returnToMain( null, $this->mReturnTo, $this->mReturnToQuery );
-               } else {
-                       $out->returnToMain( null );
-               }
+               $this->executeReturnTo( 'success' );
        }
 
        /**
@@ -955,7 +936,42 @@ class LoginForm extends SpecialPage {
                        $block->getByName()
                );
 
-               $out->returnToMain( false );
+               $this->executeReturnTo( 'error' );
+       }
+
+       /**
+        * Add a "return to" link or redirect to it.
+        *
+        * @param $type string, one of the following:
+        *    - error: display a return to link ignoring $wgRedirectOnLogin
+        *    - success: display a return to link using $wgRedirectOnLogin if needed
+        *    - successredirect: send an HTTP redirect using $wgRedirectOnLogin if needed
+        */
+       private function executeReturnTo( $type ) {
+               global $wgRedirectOnLogin, $wgSecureLogin;
+
+               if ( $type != 'error' && $wgRedirectOnLogin !== null ) {
+                       $returnTo = $wgRedirectOnLogin;
+                       $returnToQuery = array();
+               } else {
+                       $returnTo = $this->mReturnTo;
+                       $returnToQuery = wfCgiToArray( $this->mReturnToQuery );
+               }
+
+               $returnToTitle = Title::newFromText( $returnTo );
+               if ( !$returnToTitle ) {
+                       $returnToTitle = Title::newMainPage();
+               }
+
+               if ( $type == 'successredirect' ) {
+                       $redirectUrl = $returnToTitle->getFullURL( $returnToQuery );
+                       if( $wgSecureLogin && !$this->mStickHTTPS ) {
+                               $redirectUrl = preg_replace( '/^https:/', 'http:', $redirectUrl );
+                       }
+                       $this->getOutput()->redirect( $redirectUrl );
+               } else {
+                       $this->getOutput()->addReturnTo( $returnToTitle, $returnToQuery );
+               }
        }
 
        /**
index b22c144..98727f1 100644 (file)
@@ -169,9 +169,10 @@ class UsercreateTemplate extends QuickTemplate {
                        <td></td>
                        <td class="mw-input">
                                <?php
-                               global $wgCookieExpiration, $wgLang;
+                               global $wgCookieExpiration;
+                               $expirationDays = ceil( $wgCookieExpiration / ( 3600 * 24 ) );
                                echo Xml::checkLabel(
-                                       wfMsgExt( 'remembermypassword', 'parsemag', $wgLang->formatNum( ceil( $wgCookieExpiration / ( 3600 * 24 ) ) ) ),
+                                       wfMessage( 'remembermypassword' )->numParams( $expirationDays )->text(),
                                        'wpRemember',
                                        'wpRemember',
                                        $this->data['remember'],
index 5a2c633..a3f6a38 100644 (file)
@@ -108,9 +108,10 @@ class UserloginTemplate extends QuickTemplate {
                        <td></td>
                        <td class="mw-input">
                                <?php
-                               global $wgCookieExpiration, $wgLang;
+                               global $wgCookieExpiration;
+                               $expirationDays = ceil( $wgCookieExpiration / ( 3600 * 24 ) );
                                echo Xml::checkLabel(
-                                       wfMsgExt( 'remembermypassword', 'parsemag', $wgLang->formatNum( ceil( $wgCookieExpiration / ( 3600 * 24 ) ) ) ),
+                                       wfMessage( 'remembermypassword' )->numParams( $expirationDays )->text(),
                                        'wpRemember',
                                        'wpRemember',
                                        $this->data['remember'],
@@ -126,7 +127,7 @@ class UserloginTemplate extends QuickTemplate {
                        <td class="mw-input">
                        <?php
                        echo Xml::checkLabel(
-                               wfMsg( 'securelogin-stick-https' ),
+                               wfMessage( 'securelogin-stick-https' )->text(),
                                'wpStickHTTPS',
                                'wpStickHTTPS',
                                $this->data['stickHTTPS'],
@@ -140,7 +141,7 @@ class UserloginTemplate extends QuickTemplate {
                        <td></td>
                        <td class="mw-submit">
                                <?php
-               echo Html::input( 'wpLoginAttempt', wfMsg( 'login' ), 'submit', array(
+               echo Html::input( 'wpLoginAttempt', wfMessage( 'login' )->text(), 'submit', array(
                        'id' => 'wpLoginAttempt',
                        'tabindex' => '9'
                ) );
@@ -153,10 +154,14 @@ class UserloginTemplate extends QuickTemplate {
                                );
                        } elseif( $this->data['resetlink'] === null ) {
                                echo '&#160;';
-                               echo Html::input( 'wpMailmypassword', wfMsg( 'mailmypassword' ), 'submit', array(
-                                       'id' => 'wpMailmypassword',
-                                       'tabindex' => '10'
-                               ) );
+                               echo Html::input(
+                                       'wpMailmypassword',
+                                       wfMessage( 'mailmypassword' )->text(),
+                                       'submit', array(
+                                               'id' => 'wpMailmypassword',
+                                               'tabindex' => '10'
+                                       )
+                               );
                        }
                } ?>
 
index 479083e..aa333fc 100644 (file)
@@ -16,4 +16,4 @@ quiet: yes
 quote-nbsp: yes
 fix-backslash: no
 fix-uri: no
-new-inline-tags: video,audio,source,track
+new-inline-tags: video,audio,source,track,bdi
index 6ef3be2..d40b53d 100644 (file)
@@ -1227,7 +1227,7 @@ abstract class UploadBase {
 
                        if ( $wgAntivirusRequired ) {
                                wfProfileOut( __METHOD__ );
-                               return wfMsg( 'virus-scanfailed', array( $exitCode ) );
+                               return wfMessage( 'virus-scanfailed', array( $exitCode ) )->text();
                        } else {
                                wfProfileOut( __METHOD__ );
                                return null;
index fdd2b1a..c11d719 100644 (file)
@@ -70,14 +70,13 @@ class UploadFromUrl extends UploadBase {
                if ( !count( $wgCopyUploadsDomains ) ) {
                        return true;
                }
-               $uri = new Uri( $url );
-               $parsedDomain = $uri->getHost();
-               if ( $parsedDomain === null ) {
+               $parsedUrl = wfParseUrl( $url );
+               if ( !$parsedUrl ) {
                        return false;
                }
                $valid = false;
                foreach( $wgCopyUploadsDomains as $domain ) {
-                       if ( $parsedDomain === $domain ) {
+                       if ( $parsedUrl['host'] === $domain ) {
                                $valid = true;
                                break;
                        }
index 2bb53ab..fd603ce 100755 (executable)
@@ -31,7 +31,7 @@ def unichr3( *args ):
 
 # DEFINE
 UNIHAN_VER = '5.2.0'
-SF_MIRROR = 'cdnetworks-kr-2'
+SF_MIRROR = 'dfn'
 SCIM_TABLES_VER = '0.5.10'
 SCIM_PINYIN_VER = '0.5.91'
 LIBTABE_VER = '0.2.3'
@@ -370,7 +370,7 @@ $zh2Hant = array(\n'''
         +  PHPArray( toCN ) \
         +  '\n);\n\n$zh2SG = array(\n' \
         +  PHPArray( toSG ) \
-        +  '\n);'
+        +  '\n);\n'
     
     f = open( os.path.join( '..', 'ZhConversion.php' ), 'wb', encoding = 'utf8' )
     print ('Writing ZhConversion.php ... ')
index 2ebb750..1f7fe7d 100644 (file)
 分布于      分佈於
 分布於      分佈於
 想象 想像
+無線電視   無綫電視
+无线电视   無綫電視
+無線收費   無綫收費
+无线收费   無綫收費
+無線節目   無綫節目
+无线节目   無綫節目
+無線劇集   無綫劇集
+无线剧集   無綫劇集
+東鐵線      東鐵綫
+东铁线      東鐵綫
+觀塘線      觀塘綫
+观塘线      觀塘綫
+荃灣線      荃灣綫
+荃湾线      荃灣綫
+港島線      港島綫
+港岛线      港島綫
+東涌線      東涌綫
+东涌线      東涌綫
+將軍澳線   將軍澳綫
+将军澳线   將軍澳綫
+西鐵線      西鐵綫
+西铁线      西鐵綫
+馬鞍山線   馬鞍山綫
+马鞍山线   馬鞍山綫
+迪士尼線   迪士尼綫
+迪士尼线   迪士尼綫
+沙田至中環線     沙田至中環綫
+沙田至中环线     沙田至中環綫
+沙中線      沙中綫
+沙中线      沙中綫
+北環線      北環綫
+北环线      北環綫
+機場快線   機場快綫
+机场快线   機場快綫
+505線 505綫
+505线 505綫
+507線 507綫
+507线 507綫
+610線 610綫
+610线 610綫
+614線 614綫
+614线 614綫
+614P線        614P綫
+614P线        614P綫
+615線 615綫
+615线 615綫
+615P線        615P綫
+615P线        615P綫
+705線 705綫
+705线 705綫
+706線 706綫
+706线 706綫
+751線 751綫
+751线 751綫
+751P線        751P綫
+751P线        751P綫
+761P線        761P綫
+761P线        761P綫
index 35b6268..1a14e99 100644 (file)
 想象 想像
 锎    鉲
 信道 信道
+綫    線
index 2010878..0e9676d 100644 (file)
--- a/index.php
+++ b/index.php
@@ -41,6 +41,7 @@
 # PHP 4. Setup.php and ObjectCache.php have structures invalid in PHP 5.0 and
 # 5.1, respectively.
 if ( !function_exists( 'version_compare' ) || version_compare( phpversion(), '5.3.2' ) < 0 ) {
+       // We need to use dirname( __FILE__ ) here cause __DIR__ is PHP5.3+
        require( dirname( __FILE__ ) . '/includes/PHPVersionError.php' );
        wfPHPVersionError( 'index.php' );
 }
@@ -51,7 +52,7 @@ if ( !function_exists( 'version_compare' ) || version_compare( phpversion(), '5.
 if ( isset( $_SERVER['MW_COMPILED'] ) ) {
        require ( 'phase3/includes/WebStart.php' );
 } else {
-       require ( dirname( __FILE__ ) . '/includes/WebStart.php' );
+       require ( __DIR__ . '/includes/WebStart.php' );
 }
 
 $mediaWiki = new MediaWiki();
index 06f4073..1edca80 100644 (file)
@@ -32,7 +32,7 @@ if ( !defined( 'MEDIAWIKI' ) ) {
 
 # Read language names
 global $wgLanguageNames;
-require_once( dirname( __FILE__ ) . '/Names.php' );
+require_once( __DIR__ . '/Names.php' );
 
 if ( function_exists( 'mb_strtoupper' ) ) {
        mb_internal_encoding( 'UTF-8' );
@@ -266,9 +266,9 @@ class Language {
         */
        public static function isValidBuiltInCode( $code ) {
 
-               if( !is_string($code) ) {
+               if ( !is_string( $code ) ) {
                        $type = gettype( $code );
-                       if( $type === 'object' ) {
+                       if ( $type === 'object' ) {
                                $addmsg = " of class " . get_class( $code );
                        } else {
                                $addmsg = '';
@@ -742,7 +742,7 @@ class Language {
 
                $names = array();
 
-               if( $inLanguage ) {
+               if ( $inLanguage ) {
                        # TODO: also include when $inLanguage is null, when this code is more efficient
                        wfRunHooks( 'LanguageGetTranslatedLanguageNames', array( &$names, $inLanguage ) );
                }
@@ -762,11 +762,11 @@ class Language {
 
                $returnMw = array();
                $coreCodes = array_keys( $mwNames );
-               foreach( $coreCodes as $coreCode ) {
+               foreach ( $coreCodes as $coreCode ) {
                        $returnMw[$coreCode] = $names[$coreCode];
                }
 
-               if( $include === 'mwfile' ) {
+               if ( $include === 'mwfile' ) {
                        $namesMwFile = array();
                        # We do this using a foreach over the codes instead of a directory
                        # loop so that messages files in extensions will work correctly.
@@ -3032,10 +3032,7 @@ class Language {
         */
        function commaList( array $list ) {
                return implode(
-                       wfMsgExt(
-                               'comma-separator',
-                               array( 'parsemag', 'escapenoentities', 'language' => $this )
-                       ),
+                       wfMessage( 'comma-separator' )->inLanguage( $this )->escaped(),
                        $list
                );
        }
@@ -3048,10 +3045,7 @@ class Language {
         */
        function semicolonList( array $list ) {
                return implode(
-                       wfMsgExt(
-                               'semicolon-separator',
-                               array( 'parsemag', 'escapenoentities', 'language' => $this )
-                       ),
+                       wfMessage( 'semicolon-separator' )->inLanguage( $this )->escaped(),
                        $list
                );
        }
@@ -3063,10 +3057,7 @@ class Language {
         */
        function pipeList( array $list ) {
                return implode(
-                       wfMsgExt(
-                               'pipe-separator',
-                               array( 'escapenoentities', 'language' => $this )
-                       ),
+                       wfMessage( 'pipe-separator' )->inLanguage( $this )->escaped(),
                        $list
                );
        }
@@ -3091,7 +3082,7 @@ class Language {
        function truncate( $string, $length, $ellipsis = '...', $adjustLength = true ) {
                # Use the localized ellipsis character
                if ( $ellipsis == '...' ) {
-                       $ellipsis = wfMsgExt( 'ellipsis', array( 'escapenoentities', 'language' => $this ) );
+                       $ellipsis = wfMessage( 'ellipsis' )->inLanguage( $this )->escaped();
                }
                # Check if there is no need to truncate
                if ( $length == 0 ) {
@@ -3189,7 +3180,7 @@ class Language {
        function truncateHtml( $text, $length, $ellipsis = '...' ) {
                # Use the localized ellipsis character
                if ( $ellipsis == '...' ) {
-                       $ellipsis = wfMsgExt( 'ellipsis', array( 'escapenoentities', 'language' => $this ) );
+                       $ellipsis = wfMessage( 'ellipsis' )->inLanguage( $this )->escaped();
                }
                # Check if there is clearly no need to truncate
                if ( $length <= 0 ) {
@@ -3418,9 +3409,9 @@ class Language {
                if ( !count( $forms ) ) {
                        return '';
                }
-               $forms = $this->preConvertPlural( $forms, 2 );
-
-               return ( $count == 1 ) ? $forms[0] : $forms[1];
+               $pluralForm = $this->getPluralForm( $count );
+               $pluralForm = min( $pluralForm, count( $forms ) - 1 );
+               return $forms[$pluralForm];
        }
 
        /**
@@ -4116,7 +4107,7 @@ class Language {
                $dirmark = ( $oppositedm ? $this->getDirMark( true ) : '' ) .
                        $this->getDirMark();
                $details = $details ? $dirmark . $this->getMessageFromDB( 'word-separator' ) .
-                       wfMsgExt( 'parentheses', array( 'escape', 'replaceafter', 'language' => $this ), $details ) : '';
+                       wfMessage( 'parentheses' )->rawParams( $details )->inLanguage( $this )->escaped() : '';
                return $page . $details;
        }
 
@@ -4189,4 +4180,34 @@ class Language {
        public function getConvRuleTitle() {
                return $this->mConverter->getConvRuleTitle();
        }
+
+       /**
+        * Get the compiled plural rules for the language
+        * @since 1.20
+        * @return array Associative array with plural form, and plural rule as key-value pairs
+        */
+       public function getCompiledPluralRules() {
+               return self::$dataCache->getItem( strtolower( $this->mCode ), 'compiledPluralRules' );
+       }
+
+       /**
+        * Get the plural rules for the language
+        * @since 1.20
+        * @return array Associative array with plural form, and plural rule as key-value pairs
+        */
+       public function getPluralRules() {
+               return self::$dataCache->getItem( strtolower( $this->mCode ), 'pluralRules' );
+       }
+
+       /**
+        * Find the plural form matching to the given number
+        * It return the form index.
+        * @return int The index of the plural form
+        */
+       private function getPluralForm( $number ) {
+               $pluralRules = $this->getCompiledPluralRules();
+               $form = CLDRPluralRuleEvaluator::evaluateCompiled( $number, $pluralRules );
+               return $form;
+       }
+
 }
index cbd5d9a..8b7d6cb 100644 (file)
@@ -295,7 +295,7 @@ class LanguageConverter {
                        // We record these fallback variants, and process
                        // them later.
                        $fallbacks = $this->getVariantFallbacks( $language );
-                       if ( is_string( $fallbacks ) ) {
+                       if ( is_string( $fallbacks ) && $fallbacks !== $this->mMainLanguageCode ) {
                                $fallbackLanguages[] = $fallbacks;
                        } elseif ( is_array( $fallbacks ) ) {
                                $fallbackLanguages =
diff --git a/languages/classes/LanguageAm.php b/languages/classes/LanguageAm.php
deleted file mode 100644 (file)
index 4c39c26..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-<?php
-/**
- * Amharic (አማርኛ) specific code.
- *
- * 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 Language
- */
-
-/**
- * Amharic (አማርኛ)
- *
- * @ingroup Language
- */
-class LanguageAm extends Language {
-       /**
-        * Use singular form for zero
-        *
-        * @param $count int
-        * @param $forms array
-        *
-        * @return string
-        */
-       function convertPlural( $count, $forms ) {
-               if ( !count( $forms ) ) { return ''; }
-               $forms = $this->preConvertPlural( $forms, 2 );
-
-               return ( $count <= 1 ) ? $forms[0] : $forms[1];
-       }
-}
index cc6b85c..553ff07 100644 (file)
  */
 class LanguageAr extends Language {
 
-       /**
-        * @param $count int
-        * @param $forms array
-        * @return string
-        */
-       function convertPlural( $count, $forms ) {
-               if ( !count( $forms ) ) { return ''; }
-               $forms = $this->preConvertPlural( $forms, 6 );
-
-               if ( $count == 0 ) {
-                       $index = 0;
-               } elseif ( $count == 1 ) {
-                       $index = 1;
-               } elseif ( $count == 2 ) {
-                       $index = 2;
-               } elseif ( $count % 100 >= 3 && $count % 100 <= 10 ) {
-                       $index = 3;
-               } elseif ( $count % 100 >= 11 && $count % 100 <= 99 ) {
-                       $index = 4;
-               } else {
-                       $index = 5;
-               }
-               return $forms[$index];
-       }
-
        /**
         * Temporary hack for bug 9413: replace Arabic presentation forms with their
         * standard equivalents.
diff --git a/languages/classes/LanguageBe.php b/languages/classes/LanguageBe.php
deleted file mode 100644 (file)
index b5b5966..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-<?php
-/**
- * Belarusian normative (Беларуская мова) specific code.
- *
- * 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 Ævar Arnfjörð Bjarmason <avarab@gmail.com>
- * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License
- * @license http://www.gnu.org/copyleft/fdl.html GNU Free Documentation License
- * @ingroup Language
- */
-
-/**
- * Belarusian normative (Беларуская мова)
- *
- * This is still the version from Be-x-old, only duplicated for consistency of
- * plural and grammar functions. If there are errors please send a patch.
- *
- * @ingroup Language
- * @see http://be.wikipedia.org/wiki/Talk:LanguageBe.php
- */
-class LanguageBe extends Language {
-
-       /**
-        * @param $count int
-        * @param $forms array
-        *
-        * @return string
-        */
-       function convertPlural( $count, $forms ) {
-               if ( !count( $forms ) ) { return ''; }
-               // @todo FIXME: CLDR defines 4 plural forms instead of 3
-               //        http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html
-               $forms = $this->preConvertPlural( $forms, 3 );
-
-               if ( $count > 10 && floor( ( $count % 100 ) / 10 ) == 1 ) {
-                       return $forms[2];
-               } else {
-                       switch ( $count % 10 ) {
-                               case 1:  return $forms[0];
-                               case 2:
-                               case 3:
-                               case 4:  return $forms[1];
-                               default: return $forms[2];
-                       }
-               }
-       }
-}
diff --git a/languages/classes/LanguageBh.php b/languages/classes/LanguageBh.php
deleted file mode 100644 (file)
index 0eaf2ff..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-<?php
-/**
- * Bihari (भोजपुरी) specific code.
- *
- * 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 Language
- */
-
-/**
- * Bihari (भोजपुरी)
- *
- * @ingroup Language
- */
-class LanguageBh extends Language {
-       /**
-        * Use singular form for zero
-        *
-        * @param $count int
-        * @param $forms array
-        *
-        * @return string
-        */
-       function convertPlural( $count, $forms ) {
-               if ( !count( $forms ) ) { return ''; }
-               $forms = $this->preConvertPlural( $forms, 2 );
-
-               return ( $count <= 1 ) ? $forms[0] : $forms[1];
-       }
-}
index 0929641..3da7711 100644 (file)
  */
 class LanguageBs extends Language {
 
-       /**
-        * @param $count int
-        * @param $forms array
-        * @return string
-        */
-       function convertPlural( $count, $forms ) {
-               if ( !count( $forms ) ) { return ''; }
-               $forms = $this->preConvertPlural( $forms, 3 );
-
-               // @todo FIXME: CLDR defines 4 plural forms instead of 3. Plural for decimals is missing.
-               //        http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html
-               if ( $count > 10 && floor( ( $count % 100 ) / 10 ) == 1 ) {
-                       return $forms[2];
-               } else {
-                       switch ( $count % 10 ) {
-                               case 1:  return $forms[0];
-                               case 2:
-                               case 3:
-                               case 4:  return $forms[1];
-                               default: return $forms[2];
-                       }
-               }
-       }
 
        /**
         * Convert from the nominative form of a noun to some other case
diff --git a/languages/classes/LanguageCs.php b/languages/classes/LanguageCs.php
deleted file mode 100644 (file)
index 49c4756..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-<?php
-/**
- * Czech (čeština [subst.], český [adj.], česky [adv.]) specific code.
- *
- * 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 Language
- */
-
-/**
- * Czech (čeština [subst.], český [adj.], česky [adv.])
- *
- * @ingroup Language
- */
-class LanguageCs extends Language {
-
-       /**
-        * Plural transformations
-        * Invoked by putting
-        * {{plural:count|form1|form2-4|form0,5+}} for two forms plurals
-        * {{plural:count|form1|form0,2+}} for single form plurals
-        * in a message
-        * @param $count int
-        * @param $forms array
-        * @return string
-        */
-       function convertPlural( $count, $forms ) {
-               if ( !count( $forms ) ) { return ''; }
-               $forms = $this->preConvertPlural( $forms, 3 );
-
-               switch ( $count ) {
-                       case 1:
-                               return $forms[0];
-                       case 2:
-                       case 3:
-                       case 4:
-                               return $forms[1];
-                       default:
-                               return $forms[2];
-               }
-       }
-}
index bfa95cf..2016a43 100644 (file)
@@ -20,7 +20,7 @@
  * @file
  * @ingroup Language
  */
+
 /**
  * Old Church Slavonic (Ѩзыкъ словѣньскъ)
  *
diff --git a/languages/classes/LanguageCy.php b/languages/classes/LanguageCy.php
deleted file mode 100644 (file)
index 9c28279..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-<?php
-/**
- * Welsh (Cymraeg) specific code.
- *
- * 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 Niklas Laxström
- * @ingroup Language
- */
-
-/**
- * Welsh (Cymraeg)
- *
- * @ingroup Language
- */
-class LanguageCy extends Language {
-
-       /**
-        * @param $count int
-        * @param $forms array
-        * @return string
-        */
-       function convertPlural( $count, $forms ) {
-               if ( !count( $forms ) ) { return ''; }
-
-               $forms = $this->preConvertPlural( $forms, 6 );
-               $count = abs( $count );
-               if ( $count >= 0 && $count <= 3 ) {
-                       return $forms[$count];
-               } elseif ( $count == 6 ) {
-                       return $forms[4];
-               } else {
-                       return $forms[5];
-               }
-       }
-}
index b8ed7fc..975157f 100644 (file)
@@ -54,21 +54,4 @@ class LanguageDsb extends Language {
                return $word; # this will return the original value for 'nominatiw' (nominativ) and all undefined case values
        }
 
-       /**
-        * @param $count int
-        * @param $forms array
-        * @return string
-        */
-       function convertPlural( $count, $forms ) {
-               if ( !count( $forms ) ) { return ''; }
-               $forms = $this->preConvertPlural( $forms, 4 );
-
-               switch ( abs( $count ) % 100 ) {
-                       case 1:  return $forms[0]; // singular
-                       case 2:  return $forms[1]; // dual
-                       case 3:
-                       case 4:  return $forms[2]; // plural
-                       default: return $forms[3]; // pluralgen
-               }
-       }
 }
diff --git a/languages/classes/LanguageFr.php b/languages/classes/LanguageFr.php
deleted file mode 100644 (file)
index edbe1fb..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-<?php
-/**
- * French (Français) specific code.
- *
- * 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 Language
- */
-
-/**
- * French (Français)
- *
- * @ingroup Language
- */
-class LanguageFr extends Language {
-       /**
-        * Use singular form for zero (see bug 7309)
-        *
-        * @param $count int
-        * @param $forms array
-        *
-        * @return string
-        */
-       function convertPlural( $count, $forms ) {
-               if ( !count( $forms ) ) { return ''; }
-               $forms = $this->preConvertPlural( $forms, 2 );
-
-               return ( $count <= 1 ) ? $forms[0] : $forms[1];
-       }
-}
index cb9fa04..2f58384 100644 (file)
@@ -64,24 +64,4 @@ class LanguageGa extends Language {
                return $word;
        }
 
-       /**
-        * @param $count int
-        * @param $forms array
-        * @return string
-        */
-       function convertPlural( $count, $forms ) {
-               if ( !count( $forms ) ) { return ''; }
-
-               // plural forms per http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html#ga
-               $forms = $this->preConvertPlural( $forms, 3 );
-
-               if ( $count == 1 ) {
-                       $index = 0;
-               } elseif ( $count == 2 ) {
-                       $index = 1;
-               } else {
-                       $index = 2;
-               }
-               return $forms[$index];
-       }
 }
index 4fd41cf..14fe928 100644 (file)
@@ -21,8 +21,8 @@
  * @ingroup Language
  */
 
-require_once( dirname( __FILE__ ) . '/../LanguageConverter.php' );
-require_once( dirname( __FILE__ ) . '/LanguageZh.php' );
+require_once( __DIR__ . '/../LanguageConverter.php' );
+require_once( __DIR__ . '/LanguageZh.php' );
 
 /**
  * @ingroup Language
@@ -58,7 +58,7 @@ class GanConverter extends LanguageConverter {
        }
 
        function loadDefaultTables() {
-               require( dirname( __FILE__ ) . "/../../includes/ZhConversion.php" );
+               require( __DIR__ . "/../../includes/ZhConversion.php" );
                $this->mTables = array(
                        'gan-hans' => new ReplacementArray( $zh2Hans ),
                        'gan-hant' => new ReplacementArray( $zh2Hant ),
diff --git a/languages/classes/LanguageGd.php b/languages/classes/LanguageGd.php
deleted file mode 100644 (file)
index f042b02..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-<?php
-/**
- * Scots Gaelic (Gàidhlig) specific code.
- *
- * 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 Raimond Spekking
- * @author Niklas Laxström
- * @ingroup Language
- */
-
-/**
- * Scots Gaelic (Gàidhlig)
- *
- * @ingroup Language
- */
-class LanguageGd extends Language {
-
-       /**
-        * Plural form transformations
-        * Based on this discussion: http://translatewiki.net/wiki/Thread:Support/New_plural_rules_for_Scots_Gaelic_(gd)
-        *
-        * $forms[0] - 1
-        * $forms[1] - 2
-        * $forms[2] - 11
-        * $forms[3] - 12
-        * $forms[4] - 3-10, 13-19
-        * $forms[5] - 0, 20, rest
-        *
-        * @param $count int
-        * @param $forms array
-        *
-        * @return string
-        */
-       function convertPlural( $count, $forms ) {
-               if ( !count( $forms ) ) { return ''; }
-               $forms = $this->preConvertPlural( $forms, 6 );
-
-               $count = abs( $count );
-               if ( $count == 1 ) {
-                       return $forms[0];
-               } elseif ( $count == 2 ) {
-                       return $forms[1];
-               } elseif ( $count == 11 ) {
-                       return $forms[2];
-               } elseif ( $count == 12 ) {
-                       return $forms[3];
-               } elseif ( ($count >= 3 && $count <= 10) || ($count >= 13 && $count <= 19) ) {
-                       return $forms[4];
-               } else {
-                       return $forms[5];
-               }
-       }
-}
index 22be1de..48c0c05 100644 (file)
@@ -68,23 +68,4 @@ class LanguageHe extends Language {
                return $word;
        }
 
-       /**
-        * Gets a number and uses the suited form of the word.
-        *
-        * @param $count Integer: the number of items
-        * @param $forms Array with 3 items: the three plural forms
-        * @return String: the suited form of word
-        */
-       function convertPlural( $count, $forms ) {
-               if ( !count( $forms ) ) { return ''; }
-               $forms = $this->preConvertPlural( $forms, 3 );
-
-               if ( $count == 1 ) {
-                       return $forms[0]; // Singular
-               } elseif ( $count == 2 ) {
-                       return $forms[2]; // Dual or plural if dual is not provided (filled in preConvertPlural)
-               } else {
-                       return $forms[1]; // Plural
-               }
-       }
 }
index 090d626..9bac5d7 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Language
  */
 
-require_once( dirname( __FILE__ ) . '/../LanguageConverter.php' );
+require_once( __DIR__ . '/../LanguageConverter.php' );
 
 /**
  * Conversion script between Latin and Syllabics for Inuktitut.
index 7eb0b6c..d3d487f 100644 (file)
@@ -21,8 +21,8 @@
  * @ingroup Language
  */
 
-require_once( dirname( __FILE__ ) . '/../LanguageConverter.php' );
-require_once( dirname( __FILE__ ) . '/LanguageKk_cyrl.php' );
+require_once( __DIR__ . '/../LanguageConverter.php' );
+require_once( __DIR__ . '/LanguageKk_cyrl.php' );
 
 define( 'KK_C_UC', 'АӘБВГҒДЕЁЖЗИЙКҚЛМНҢОӨПРСТУҰҮФХҺЦЧШЩЪЫІЬЭЮЯ' ); # Kazakh Cyrillic uppercase
 define( 'KK_C_LC', 'аәбвгғдеёжзийкқлмнңоөпрстуұүфхһцчшщъыіьэюя' ); # Kazakh Cyrillic lowercase
@@ -62,7 +62,7 @@ class KkConverter extends LanguageConverter {
        }
 
        function loadDefaultTables() {
-               // require( dirname(__FILE__)."/../../includes/KkConversion.php" );
+               // require( __DIR__."/../../includes/KkConversion.php" );
                // Placeholder for future implementing. Remove variables declarations
                // after generating KkConversion.php
                $kk2Cyrl = array();
@@ -443,20 +443,6 @@ class LanguageKk extends LanguageKk_cyrl {
                $wgHooks['ArticleSaveComplete'][] = $this->mConverter;
        }
 
-       /**
-        * Work around for right-to-left direction support in kk-arab and kk-cn
-        *
-        * @return bool
-        */
-       function isRTL() {
-               $variant = $this->getPreferredVariant();
-               if ( $variant == 'kk-arab' || $variant == 'kk-cn' ) {
-                       return true;
-               } else {
-                       return parent::isRTL();
-               }
-       }
-
        /**
         * It fixes issue with ucfirst for transforming 'i' to 'İ'
         *
index 18c8564..02ec648 100644 (file)
@@ -21,8 +21,8 @@
  * @ingroup Language
  */
 
-require_once( dirname( __FILE__ ) . '/../LanguageConverter.php' );
-require_once( dirname( __FILE__ ) . '/LanguageKu_ku.php' );
+require_once( __DIR__ . '/../LanguageConverter.php' );
+require_once( __DIR__ . '/LanguageKu_ku.php' );
 
 /**
  * Kurdish converter routines
index ab34440..27c5d64 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Language
  */
 
-require_once( dirname( __FILE__ ) . '/../LanguageConverter.php' );
+require_once( __DIR__ . '/../LanguageConverter.php' );
 
 /**
  * Conversion script between Latin and Tifinagh for Tachelhit.
index 26d6853..4b799f2 100644 (file)
@@ -21,9 +21,9 @@
  * @ingroup Language
  */
 
-require_once( dirname( __FILE__ ) . '/../LanguageConverter.php' );
-require_once( dirname( __FILE__ ) . '/LanguageSr_ec.php' );
-require_once( dirname( __FILE__ ) . '/LanguageSr_el.php' );
+require_once( __DIR__ . '/../LanguageConverter.php' );
+require_once( __DIR__ . '/LanguageSr_ec.php' );
+require_once( __DIR__ . '/LanguageSr_el.php' );
 
 /**
  * There are two levels of conversion for Serbian: the script level
index 90d5761..3ec1476 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Language
  */
 
-require_once( dirname( __FILE__ ) . '/../LanguageConverter.php' );
+require_once( __DIR__ . '/../LanguageConverter.php' );
 
 /**
  * Converts Tajiki to latin orthography
index e0f45cd..bd69e30 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Language
  */
 
-require_once( dirname( __FILE__ ) . '/../LanguageConverter.php' );
+require_once( __DIR__ . '/../LanguageConverter.php' );
 
 /**
  * @ingroup Language
index 96eea7c..63f90fd 100644 (file)
@@ -21,8 +21,8 @@
  * @ingroup Language
  */
 
-require_once( dirname( __FILE__ ) . '/../LanguageConverter.php' );
-require_once( dirname( __FILE__ ) . '/LanguageZh_hans.php' );
+require_once( __DIR__ . '/../LanguageConverter.php' );
+require_once( __DIR__ . '/LanguageZh_hans.php' );
 
 /**
  * @ingroup Language
@@ -64,7 +64,7 @@ class ZhConverter extends LanguageConverter {
        }
 
        function loadDefaultTables() {
-               require( dirname( __FILE__ ) . "/../../includes/ZhConversion.php" );
+               require( __DIR__ . "/../../includes/ZhConversion.php" );
                $this->mTables = array(
                        'zh-hans' => new ReplacementArray( $zh2Hans ),
                        'zh-hant' => new ReplacementArray( $zh2Hant ),
diff --git a/languages/data/plurals-mediawiki.xml b/languages/data/plurals-mediawiki.xml
new file mode 100644 (file)
index 0000000..54f23dc
--- /dev/null
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE supplementalData SYSTEM "../../common/dtd/ldmlSupplemental.dtd">
+<supplementalData>
+       <plurals>
+               <pluralRules locales="he">
+                       <pluralRule count="one">n is 1</pluralRule>
+                       <pluralRule count="two">n is 2</pluralRule>
+               </pluralRules>
+               <pluralRules locales="dsb">
+                       <pluralRule count="one">n mod 100 is 1</pluralRule>
+                       <pluralRule count="two">n mod 100 is 2</pluralRule>
+                       <pluralRule count="few">n mod 100 in 3..4</pluralRule>
+               </pluralRules>
+               <pluralRules locales="cu">
+                       <pluralRule count="one">n mod 10 is 1</pluralRule>
+                       <pluralRule count="two">n mod 10 is 2</pluralRule>
+                       <pluralRule count="few">n mod 10 in 3..4</pluralRule>
+               </pluralRules>
+               <!-- Plural form transformations
+               Based on this discussion: http://translatewiki.net/wiki/Thread:Support/New_plural_rules_for_Scots_Gaelic_(gd)
+               $forms[0] - 1
+               $forms[1] - 2
+               $forms[2] - 11
+               $forms[3] - 12
+               $forms[4] - 3-10, 13-19
+               $forms[5] - 0, 20, rest -->
+               <pluralRules locales="gd">
+                       <pluralRule count="one">n is 1</pluralRule>
+                       <pluralRule count="two">n is 2</pluralRule>
+                       <pluralRule count="elevan">n is 11</pluralRule>
+                       <pluralRule count="twelve">n is 12</pluralRule>
+                       <pluralRule count="few">n in 3..10 or n in 13..19</pluralRule>
+               </pluralRules>
+       </plurals>
+</supplementalData>
diff --git a/languages/data/plurals.xml b/languages/data/plurals.xml
new file mode 100644 (file)
index 0000000..8432df4
--- /dev/null
@@ -0,0 +1,114 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE supplementalData SYSTEM "../../common/dtd/ldmlSupplemental.dtd">
+<supplementalData>
+    <version number="$Revision: 6155 $"/>
+    <generation date="$Date: 2011-09-21 23:51:12 +0530 (ബു, 21 സെപ് 2011) $"/>
+    <plurals>
+        <!-- if locale is known to have no plurals, there are no rules -->
+        <pluralRules locales="az bm bo dz fa id ig ii hu ja jv ka kde kea km kn ko lo ms my sah ses sg th to tr vi wo yo zh"/>
+        <pluralRules locales="ar">
+            <pluralRule count="zero">n is 0</pluralRule>
+            <pluralRule count="one">n is 1</pluralRule>
+            <pluralRule count="two">n is 2</pluralRule>
+            <pluralRule count="few">n mod 100 in 3..10</pluralRule>
+            <pluralRule count="many">n mod 100 in 11..99</pluralRule>
+        </pluralRules>
+        <pluralRules locales="asa af bem bez bg bn brx ca cgg chr da de dv ee el en eo es et eu fi fo fur fy gl gsw gu ha haw he is it jmc kaj kcg kk kl ksb ku lb lg mas ml mn mr nah nb nd ne nl nn no nr ny nyn om or pa pap ps pt rof rm rwk saq seh sn so sq ss ssy st sv sw syr ta te teo tig tk tn ts ur wae ve vun xh xog zu">
+            <pluralRule count="one">n is 1</pluralRule>
+        </pluralRules>
+        <pluralRules locales="ak am bh fil tl guw hi ln mg nso ti wa">
+            <pluralRule count="one">n in 0..1</pluralRule>
+        </pluralRules>
+        <pluralRules locales="ff fr kab">
+            <pluralRule count="one">n within 0..2 and n is not 2</pluralRule>
+        </pluralRules>
+        <pluralRules locales="lv">
+            <pluralRule count="zero">n is 0</pluralRule>
+            <pluralRule count="one">n mod 10 is 1 and n mod 100 is not 11</pluralRule>
+        </pluralRules>
+        <pluralRules locales="iu kw naq se sma smi smj smn sms">
+            <pluralRule count="one">n is 1</pluralRule>
+            <pluralRule count="two">n is 2</pluralRule>
+        </pluralRules>
+        <pluralRules locales="ga"> <!-- http://unicode.org/cldr/trac/ticket/3915 -->
+            <pluralRule count="one">n is 1</pluralRule>
+            <pluralRule count="two">n is 2</pluralRule>
+            <pluralRule count="few">n in 3..6</pluralRule>
+            <pluralRule count="many">n in 7..10</pluralRule>
+        </pluralRules>
+        <pluralRules locales="ro mo">
+            <pluralRule count="one">n is 1</pluralRule>
+            <pluralRule count="few">n is 0 OR n is not 1 AND n mod 100 in 1..19</pluralRule>
+        </pluralRules>
+        <pluralRules locales="lt">
+            <pluralRule count="one">n mod 10 is 1 and n mod 100 not in 11..19</pluralRule>
+            <pluralRule count="few">n mod 10 in 2..9 and n mod 100 not in 11..19</pluralRule>
+        </pluralRules>
+        <pluralRules locales="be bs hr ru sh sr uk">
+            <pluralRule count="one">n mod 10 is 1 and n mod 100 is not 11</pluralRule>
+            <pluralRule count="few">n mod 10 in 2..4 and n mod 100 not in 12..14</pluralRule>
+            <pluralRule count="many">n mod 10 is 0 or n mod 10 in 5..9 or n mod 100 in 11..14</pluralRule>
+            <!-- others are fractions -->
+        </pluralRules>
+        <pluralRules locales="cs sk">
+            <pluralRule count="one">n is 1</pluralRule>
+            <pluralRule count="few">n in 2..4</pluralRule>
+        </pluralRules>
+        <pluralRules locales="pl">
+            <pluralRule count="one">n is 1</pluralRule>
+            <pluralRule count="few">n mod 10 in 2..4 and n mod 100 not in 12..14</pluralRule>
+            <pluralRule count="many">n is not 1 and n mod 10 in 0..1 or n mod 10 in 5..9 or n mod 100 in 12..14</pluralRule>
+            <!-- others are fractions -->
+            <!-- and n mod 100 not in 22..24 from Tamplin -->
+        </pluralRules>
+        <pluralRules locales="sl">
+            <pluralRule count="one">n mod 100 is 1</pluralRule>
+            <pluralRule count="two">n mod 100 is 2</pluralRule>
+            <pluralRule count="few">n mod 100 in 3..4</pluralRule>
+        </pluralRules>
+        <pluralRules locales="mt"> <!-- from Tamplin's data -->
+            <pluralRule count="one">n is 1</pluralRule>
+            <pluralRule count="few">n is 0 or n mod 100 in 2..10</pluralRule>
+            <pluralRule count="many">n mod 100 in 11..19</pluralRule>
+        </pluralRules>
+        <pluralRules locales="mk"> <!-- from Tamplin's data -->
+            <pluralRule count="one">n mod 10 is 1 and n is not 11</pluralRule>
+        </pluralRules>
+        <pluralRules locales="cy"> <!-- from http://www.saltcymru.org/wordpress/?p=99&lang=en -->
+            <pluralRule count="zero">n is 0</pluralRule>
+            <pluralRule count="one">n is 1</pluralRule>
+            <pluralRule count="two">n is 2</pluralRule>
+            <pluralRule count="few">n is 3</pluralRule>
+            <pluralRule count="many">n is 6</pluralRule>
+        </pluralRules>
+        <pluralRules locales="lag">
+            <pluralRule count="zero">n is 0</pluralRule>
+            <pluralRule count="one">n within 0..2 and n is not 0 and n is not 2</pluralRule>
+        </pluralRules>
+        <pluralRules locales="shi">
+            <pluralRule count="one">n within 0..1</pluralRule>
+            <pluralRule count="few">n in 2..10</pluralRule>
+        </pluralRules>
+        <pluralRules locales="br"> <!-- from http://unicode.org/cldr/trac/ticket/2886 -->
+            <pluralRule count="one">n mod 10 is 1 and n mod 100 not in 11,71,91</pluralRule>
+            <pluralRule count="two">n mod 10 is 2 and n mod 100 not in 12,72,92</pluralRule>
+            <pluralRule count="few">n mod 10 in 3..4,9 and n mod 100 not in 10..19,70..79,90..99</pluralRule>
+            <pluralRule count="many">n mod 1000000 is 0 and n is not 0</pluralRule>
+        </pluralRules>
+        <pluralRules locales="ksh">
+            <pluralRule count="zero">n is 0</pluralRule>
+            <pluralRule count="one">n is 1</pluralRule>
+        </pluralRules>
+        <pluralRules locales="tzm">
+            <pluralRule count="one">n in 0..1 or n in 11..99</pluralRule>
+        </pluralRules>
+        <pluralRules locales="gv">
+            <pluralRule count="one">n mod 10 in 1..2 or n mod 20 is 0</pluralRule>
+        </pluralRules>
+        <pluralRules locales="gd">
+            <pluralRule count="one">n in 1,11</pluralRule>
+            <pluralRule count="two">n in 2,12</pluralRule>
+            <pluralRule count="few">n in 3..10,13..19</pluralRule>
+        </pluralRules>
+    </plurals>
+</supplementalData>
index d177278..c6be096 100644 (file)
@@ -74,9 +74,9 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'language'                => array( '0', '#АБЫЗШӘА:', '#ЯЗЫК:', '#LANGUAGE:' ),
-       'special'                 => array( '0', 'цастәи', 'служебная', 'special' ),
-       'index'                   => array( '1', '__АИНДЕКС__', '__ИНДЕКС__', '__INDEX__' ),
+       'language'                  => array( '0', '#АБЫЗШӘА:', '#ЯЗЫК:', '#LANGUAGE:' ),
+       'special'                   => array( '0', 'цастәи', 'служебная', 'special' ),
+       'index'                     => array( '1', '__АИНДЕКС__', '__ИНДЕКС__', '__INDEX__' ),
 );
 
 $messages = array(
index fbb4d25..3756dfd 100644 (file)
@@ -48,65 +48,65 @@ $namespaceAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#AANSTUUR', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__GEENIO__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__GEENGALERY__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__DWINGIO__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__IO__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__GEENNUWEAFDELING__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '__GEENOPSKRIF__', '__NOHEADER__' ),
-       'currentmonth'            => array( '1', 'HUIDIGEMAAND', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', 'HUIDIGEMAAND1', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', 'HUIDIGEMAANDNAAM', 'CURRENTMONTHNAME' ),
-       'currentmonthabbrev'      => array( '1', 'HUIDIGEMAANDAFK', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'HUIDIGEDAG', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'HUIDIGEDAG2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'HUIDIGEDAGNAAM', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'HUIDIGEJAAR', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'HUIDIGETYD', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'HUIDIGEUUR', 'CURRENTHOUR' ),
-       'numberofpages'           => array( '1', 'AANTALBLADSYE', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'AANTALARTIKELS', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'AANTALLêERS', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'AANTALGEBRUIKERS', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'AANTALAKTIEWEGEBRUIKERS', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'AANTALWYSIGINGS', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'AANTALKEERGESIEN', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'BLADSYNAAM', 'PAGENAME' ),
-       'namespace'               => array( '1', 'NAAMSPASIE', 'NAMESPACE' ),
-       'talkspace'               => array( '1', 'BESPREKINGSBLADSY', 'TALKSPACE' ),
-       'fullpagename'            => array( '1', 'VOLBLADSYNAAM', 'FULLPAGENAME' ),
-       'img_thumbnail'           => array( '1', 'duimnael', 'thumbnail', 'thumb' ),
-       'img_right'               => array( '1', 'regs', 'right' ),
-       'img_left'                => array( '1', 'links', 'left' ),
-       'img_none'                => array( '1', 'geen', 'none' ),
-       'img_center'              => array( '1', 'senter', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'omraam', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', 'raamloos', 'frameless' ),
-       'img_border'              => array( '1', 'raam', 'border' ),
-       'img_top'                 => array( '1', 'bo', 'top' ),
-       'img_text_top'            => array( '1', 'teks-bo', 'text-top' ),
-       'img_middle'              => array( '1', 'middel', 'middle' ),
-       'img_bottom'              => array( '1', 'onder', 'bottom' ),
-       'img_text_bottom'         => array( '1', 'teks-onder', 'text-bottom' ),
-       'img_link'                => array( '1', 'skakel=$1', 'link=$1' ),
-       'sitename'                => array( '1', 'WERFNAAM', 'SITENAME' ),
-       'server'                  => array( '0', 'BEDIENER', 'SERVER' ),
-       'servername'              => array( '0', 'BEDIENERNAAM', 'SERVERNAME' ),
-       'gender'                  => array( '0', 'GESLAG:', 'GENDER:' ),
-       'localweek'               => array( '1', 'HUIDIGEWEEK', 'LOCALWEEK' ),
-       'plural'                  => array( '0', 'MEERVOUD', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'VOLURL', 'FULLURL:' ),
-       'displaytitle'            => array( '1', 'VERTOONTITEL', 'DISPLAYTITLE' ),
-       'currentversion'          => array( '1', 'HUIDIGEWEERGAWE', 'CURRENTVERSION' ),
-       'language'                => array( '0', '#TAAL:', '#LANGUAGE:' ),
-       'special'                 => array( '0', 'spesiaal', 'special' ),
-       'filepath'                => array( '0', 'LêERPAD:', 'FILEPATH:' ),
-       'tag'                     => array( '0', 'etiket', 'tag' ),
-       'pagesize'                => array( '1', 'BLADSYGROOTTE', 'PAGESIZE' ),
-       'index'                   => array( '1', '__INDEKS__', '__INDEX__' ),
-       'noindex'                 => array( '1', '__GEENINDEKS__', '__NOINDEX__' ),
-       'url_path'                => array( '0', 'PAD', 'PATH' ),
+       'redirect'                  => array( '0', '#AANSTUUR', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__GEENIO__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__GEENGALERY__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__DWINGIO__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__IO__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__GEENNUWEAFDELING__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '__GEENOPSKRIF__', '__NOHEADER__' ),
+       'currentmonth'              => array( '1', 'HUIDIGEMAAND', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'HUIDIGEMAAND1', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'HUIDIGEMAANDNAAM', 'CURRENTMONTHNAME' ),
+       'currentmonthabbrev'        => array( '1', 'HUIDIGEMAANDAFK', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'HUIDIGEDAG', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'HUIDIGEDAG2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'HUIDIGEDAGNAAM', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'HUIDIGEJAAR', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'HUIDIGETYD', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'HUIDIGEUUR', 'CURRENTHOUR' ),
+       'numberofpages'             => array( '1', 'AANTALBLADSYE', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'AANTALARTIKELS', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'AANTALLêERS', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'AANTALGEBRUIKERS', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'AANTALAKTIEWEGEBRUIKERS', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'AANTALWYSIGINGS', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'AANTALKEERGESIEN', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'BLADSYNAAM', 'PAGENAME' ),
+       'namespace'                 => array( '1', 'NAAMSPASIE', 'NAMESPACE' ),
+       'talkspace'                 => array( '1', 'BESPREKINGSBLADSY', 'TALKSPACE' ),
+       'fullpagename'              => array( '1', 'VOLBLADSYNAAM', 'FULLPAGENAME' ),
+       'img_thumbnail'             => array( '1', 'duimnael', 'thumbnail', 'thumb' ),
+       'img_right'                 => array( '1', 'regs', 'right' ),
+       'img_left'                  => array( '1', 'links', 'left' ),
+       'img_none'                  => array( '1', 'geen', 'none' ),
+       'img_center'                => array( '1', 'senter', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'omraam', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'raamloos', 'frameless' ),
+       'img_border'                => array( '1', 'raam', 'border' ),
+       'img_top'                   => array( '1', 'bo', 'top' ),
+       'img_text_top'              => array( '1', 'teks-bo', 'text-top' ),
+       'img_middle'                => array( '1', 'middel', 'middle' ),
+       'img_bottom'                => array( '1', 'onder', 'bottom' ),
+       'img_text_bottom'           => array( '1', 'teks-onder', 'text-bottom' ),
+       'img_link'                  => array( '1', 'skakel=$1', 'link=$1' ),
+       'sitename'                  => array( '1', 'WERFNAAM', 'SITENAME' ),
+       'server'                    => array( '0', 'BEDIENER', 'SERVER' ),
+       'servername'                => array( '0', 'BEDIENERNAAM', 'SERVERNAME' ),
+       'gender'                    => array( '0', 'GESLAG:', 'GENDER:' ),
+       'localweek'                 => array( '1', 'HUIDIGEWEEK', 'LOCALWEEK' ),
+       'plural'                    => array( '0', 'MEERVOUD', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'VOLURL', 'FULLURL:' ),
+       'displaytitle'              => array( '1', 'VERTOONTITEL', 'DISPLAYTITLE' ),
+       'currentversion'            => array( '1', 'HUIDIGEWEERGAWE', 'CURRENTVERSION' ),
+       'language'                  => array( '0', '#TAAL:', '#LANGUAGE:' ),
+       'special'                   => array( '0', 'spesiaal', 'special' ),
+       'filepath'                  => array( '0', 'LêERPAD:', 'FILEPATH:' ),
+       'tag'                       => array( '0', 'etiket', 'tag' ),
+       'pagesize'                  => array( '1', 'BLADSYGROOTTE', 'PAGESIZE' ),
+       'index'                     => array( '1', '__INDEKS__', '__INDEX__' ),
+       'noindex'                   => array( '1', '__GEENINDEKS__', '__NOINDEX__' ),
+       'url_path'                  => array( '0', 'PAD', 'PATH' ),
 );
 
 $specialPageAliases = array(
@@ -526,12 +526,12 @@ Dit kan ook dui op 'n fout in die sagteware van {{SITENAME}}.",
 # General errors
 'error' => 'Fout',
 'databaseerror' => 'Databasisfout',
-'dberrortext' => 'Sintaksisfout in databasisnavraag.
+'dberrortext' => 'Daar was \'n sintaksisfout in die databasisnavraag.
 Dit kan moontlik dui op \'n fout in die sagteware.
 Die laaste navraag was:
-<blockquote><tt>$1</tt></blockquote>
-vanuit funksie "<tt>$2</tt>".
-Databasis gee foutboodskap "<tt>$3: $4</tt>".',
+<blockquote><code>$1</code></blockquote>
+vanuit funksie "<code>$2</code>".
+Databasis gee foutboodskap "<samp>$3: $4</samp>".',
 'dberrortextcl' => 'Sintaksisfout in databasisnavraag.
 Die laaste navraag was:
 "$1"
@@ -880,7 +880,6 @@ Die laaste inskrywing in die blokkeerlogboek word hieronder vertoon:',
 * '''Firefox / Safari:''' hou ''Shift'' en kliek ''Reload'', of druk ''Ctrl-F5'' of ''Ctrl-R'' (''⌘-R'' op 'n Mac)
 * '''Google Chrome:''' druk ''Ctrl-Shift-R'' (''⌘-Shift-R'' op 'n Mac)
 * '''Internet Explorer:''' hou ''Ctrl'' en kliek ''Refresh'', of druk ''Ctrl-F5''
-* '''Konqueror:''' kliek ''Reload'' of druk ''F5''
 * '''Opera:''' maak die kas skoon by ''Tools → Preferences''",
 'usercssyoucanpreview' => "'''Wenk:''' Gebruik die \"{{int:showpreview}}\"-knoppie om u nuwe CSS te toets voor u dit stoor.",
 'userjsyoucanpreview' => "'''Wenk:''' Gebruik die \"{{int:showpreview}}\"-knoppie om u nuwe JS te toets voor u dit stoor.",
@@ -2976,11 +2975,11 @@ Hierdie situasie was waarskynlik deur 'n skakel na 'n eksterne webtuiste op ons
 
 # Info page
 'pageinfo-title' => 'Inligting oor "$1"',
-'pageinfo-header-edits' => 'Wysigings',
+'pageinfo-header-edits' => 'Wysigingsgeskiedenis',
 'pageinfo-views' => 'Aantal kere gewys',
 'pageinfo-watchers' => 'Aantal dophouers',
-'pageinfo-edits' => 'Aantal wysigings',
-'pageinfo-authors' => 'Aantal verskillende outeurs',
+'pageinfo-edits' => 'Totale aantal wysigings',
+'pageinfo-authors' => 'Totale aantal verskillende outeurs',
 
 # Skin names
 'skinname-standard' => 'Standaard',
index 0c96ecb..f59821a 100644 (file)
  * @author Paa.kwesi
  */
 
+$namespaceNames = array(
+       NS_MEDIA            => 'Medya',
+       NS_SPECIAL          => 'Spesial',
+       NS_TALK             => 'Nkɔmbɔ',
+       NS_USER             => 'User',
+       NS_USER_TALK        => 'User_nkɔmbɔ',
+       NS_PROJECT_TALK     => '$1_nkɔmbɔ',
+       NS_FILE             => 'Fayl',
+       NS_FILE_TALK        => 'Fayl_nkɔmbɔ',
+       NS_MEDIAWIKI        => 'MediaWiki',
+       NS_MEDIAWIKI_TALK   => 'MediaWiki_nkɔmbɔ',
+       NS_TEMPLATE         => 'Şablon',
+       NS_TEMPLATE_TALK    => 'Şablon_nkɔmbɔ',
+       NS_HELP             => 'Help',
+       NS_HELP_TALK        => 'Help_nkɔmbɔ',
+       NS_CATEGORY         => 'Kategori',
+       NS_CATEGORY_TALK    => 'Kategori_nkɔmbɔ',
+);
+
 $messages = array(
 # User preference toggles
 'tog-underline'             => 'Twa lenk nyina ase:',
index 688a179..9a1f89d 100644 (file)
@@ -54,16 +54,16 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'currentmonth'            => array( '1', 'MUEJIAKTUAL', 'MUEJIAKTUAL2', 'MUAJIMOMENTAL', 'MUAJIMOMENTAL2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', 'MUEJIAKTUAL1', 'MUAJIMOMENTAL1', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', 'EMNIMUEJITAKTUAL', 'EMRIIMUAJITMOMENTAL', 'CURRENTMONTHNAME' ),
-       'currenttime'             => array( '1', 'KOHATASH', 'KOHATANI', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'ORATASH', 'ORATANI', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'MUEJILOKAL', 'MUAJILOKAL', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'img_center'              => array( '1', 'qendër', 'qendrore', 'qëndër', 'qëndrore', 'center', 'centre' ),
-       'img_baseline'            => array( '1', 'vijabazë', 'linjabazë', 'baseline' ),
-       'servername'              => array( '0', 'EMNISERVERIT', 'EMRIISERVERIT', 'SERVERNAME' ),
-       'currentweek'             => array( '1', 'JAVAAKTUALE', 'JAVAMOMENTALE', 'CURRENTWEEK' ),
+       'currentmonth'              => array( '1', 'MUEJIAKTUAL', 'MUEJIAKTUAL2', 'MUAJIMOMENTAL', 'MUAJIMOMENTAL2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'MUEJIAKTUAL1', 'MUAJIMOMENTAL1', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'EMNIMUEJITAKTUAL', 'EMRIIMUAJITMOMENTAL', 'CURRENTMONTHNAME' ),
+       'currenttime'               => array( '1', 'KOHATASH', 'KOHATANI', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'ORATASH', 'ORATANI', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'MUEJILOKAL', 'MUAJILOKAL', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'img_center'                => array( '1', 'qendër', 'qendrore', 'qëndër', 'qëndrore', 'center', 'centre' ),
+       'img_baseline'              => array( '1', 'vijabazë', 'linjabazë', 'baseline' ),
+       'servername'                => array( '0', 'EMNISERVERIT', 'EMRIISERVERIT', 'SERVERNAME' ),
+       'currentweek'               => array( '1', 'JAVAAKTUALE', 'JAVAMOMENTALE', 'CURRENTWEEK' ),
 );
 
 $messages = array(
index ad39818..293616c 100644 (file)
@@ -47,16 +47,16 @@ $namespaceAliases = array(
 $namespaceGenderAliases = array();
 
 $magicWords = array(
-       'redirect'                => array( '0', '#ENDRECERA', '#REENDRECERA', '#REDIRECCIÓN', '#REDIRECCION', '#REDIRECT' ),
-       'namespace'               => array( '1', 'ESPACIODENOMBRES', 'ESPACIODENOMBRE', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'ESPACIODENOMBRESE', 'ESPACIODENOMBREC', 'NAMESPACEE' ),
-       'img_right'               => array( '1', 'dreita', 'derecha', 'dcha', 'der', 'right' ),
-       'img_left'                => array( '1', 'cucha', 'zurda', 'izquierda', 'izda', 'izq', 'left' ),
-       'ns'                      => array( '0', 'EN:', 'EDN:', 'NS:' ),
-       'displaytitle'            => array( '1', 'TÍTOL', 'MOSTRARTÍTULO', 'MOSTRARTITULO', 'DISPLAYTITLE' ),
-       'currentversion'          => array( '1', 'BERSIÓNAUTUAL', 'BERSIONAUTUAL', 'REVISIÓNACTUAL', 'VERSIONACTUAL', 'VERSIÓNACTUAL', 'CURRENTVERSION' ),
-       'language'                => array( '0', '#LUENGA:', '#IDIOMA:', '#LANGUAGE:' ),
-       'special'                 => array( '0', 'especial', 'espezial', 'special' ),
+       'redirect'                  => array( '0', '#ENDRECERA', '#REENDRECERA', '#REDIRECCIÓN', '#REDIRECCION', '#REDIRECT' ),
+       'namespace'                 => array( '1', 'ESPACIODENOMBRES', 'ESPACIODENOMBRE', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'ESPACIODENOMBRESE', 'ESPACIODENOMBREC', 'NAMESPACEE' ),
+       'img_right'                 => array( '1', 'dreita', 'derecha', 'dcha', 'der', 'right' ),
+       'img_left'                  => array( '1', 'cucha', 'zurda', 'izquierda', 'izda', 'izq', 'left' ),
+       'ns'                        => array( '0', 'EN:', 'EDN:', 'NS:' ),
+       'displaytitle'              => array( '1', 'TÍTOL', 'MOSTRARTÍTULO', 'MOSTRARTITULO', 'DISPLAYTITLE' ),
+       'currentversion'            => array( '1', 'BERSIÓNAUTUAL', 'BERSIONAUTUAL', 'REVISIÓNACTUAL', 'VERSIONACTUAL', 'VERSIÓNACTUAL', 'CURRENTVERSION' ),
+       'language'                  => array( '0', '#LUENGA:', '#IDIOMA:', '#LANGUAGE:' ),
+       'special'                   => array( '0', 'especial', 'espezial', 'special' ),
 );
 
 $specialPageAliases = array(
index 0632537..b85ee8c 100644 (file)
@@ -187,158 +187,166 @@ $namespaceGenderAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#تحويل', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__لافهرس__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__لامعرض__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__لصق_فهرس__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__فهرس__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__لاتحريرقسم__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '__لاعنوان__', '__NOHEADER__' ),
-       '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' ),
-       'currentdayname'          => array( '1', 'اسم_اليوم_الحالي', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'عام_حالي', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'وقت_حالي', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'ساعة_حالية', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'شهر_محلي', 'شهر_محلي2', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', 'شهر_محلي1', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'اسم_الشهر_المحلي', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'اسم_الشهر_المحلي_المولد', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'اختصار_الشهر_المحلي', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'يوم_محلي', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'يوم_محلي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' ),
-       'numberofusers'           => array( '1', 'عدد_المستخدمين', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'عدد_المستخدمين_النشطين', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'عدد_التعديلات', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'عدد_المشاهدات', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'اسم_الصفحة', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'عنوان_الصفحة', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'نطاق', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'عنوان_نطاق', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'نطاق_النقاش', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'عنوان_النقاش', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'نطاق_الموضوع', 'نطاق_المقالة', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'عنوان_نطاق_الموضوع', 'عنوان_نطاق_المقالة', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'اسم_الصفحة_الكامل', 'اسم_صفحة_كامل', 'اسم_كامل', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'عنوان_الصفحة_الكامل', 'عنوان_صفحة_كامل', 'عنوان_كامل', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'اسم_الصفحة_الفرعي', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'عنوان_الصفحة_الفرعي', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'اسم_الصفحة_الأساسي', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'عنوان_الصفحة_الأساسي', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'اسم_صفحة_النقاش', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'عنوان_صفحة_النقاش', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'اسم_صفحة_الموضوع', 'اسم_صفحة_المقالة', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       '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' ),
-       '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', 'صفحة=$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' ),
-       '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', 'اسم_الموقع', 'SITENAME' ),
-       'ns'                      => array( '0', 'نط:', 'NS:' ),
-       '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__' ),
-       '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:' ),
-       'fullurl'                 => array( '0', 'عنوان_كامل:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'مسار_كامل:', 'FULLURLE:' ),
-       'canonicalurl'            => array( '0', 'عنوان_قاعدة:', 'CANONICALURL:' ),
-       'canonicalurle'           => array( '0', 'مسار_قاعدة:', 'CANONICALURLE:' ),
-       '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', 'نسخة_حالية', '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:' ),
-       '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:' ),
-       '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__' ),
-       'numberingroup'           => array( '1', 'عدد_في_المجموعة', 'عدد_في_مجموعة', 'NUMBERINGROUP', 'NUMINGROUP' ),
-       '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' ),
-       'defaultsort_noerror'     => array( '0', 'لاخطأ', 'noerror' ),
-       'defaultsort_noreplace'   => array( '0', 'لاتستبدل', 'noreplace' ),
+       'redirect'                  => array( '0', '#تحويل', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__لافهرس__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__لامعرض__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__لصق_فهرس__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__فهرس__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__لاتحريرقسم__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '__لاعنوان__', '__NOHEADER__' ),
+       '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' ),
+       'currentdayname'            => array( '1', 'اسم_اليوم_الحالي', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'عام_حالي', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'وقت_حالي', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'ساعة_حالية', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'شهر_محلي', 'شهر_محلي2', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'شهر_محلي1', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'اسم_الشهر_المحلي', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'اسم_الشهر_المحلي_المولد', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'اختصار_الشهر_المحلي', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'يوم_محلي', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'يوم_محلي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' ),
+       'numberofusers'             => array( '1', 'عدد_المستخدمين', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'عدد_المستخدمين_النشطين', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'عدد_التعديلات', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'عدد_المشاهدات', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'اسم_الصفحة', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'عنوان_الصفحة', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'نطاق', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'عنوان_نطاق', 'NAMESPACEE' ),
+       'namespacenumber'           => array( '1', 'عدد_نطاق', 'NAMESPACENUMBER' ),
+       'talkspace'                 => array( '1', 'نطاق_النقاش', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'عنوان_النقاش', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'نطاق_الموضوع', 'نطاق_المقالة', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'عنوان_نطاق_الموضوع', 'عنوان_نطاق_المقالة', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'اسم_الصفحة_الكامل', 'اسم_صفحة_كامل', 'اسم_كامل', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'عنوان_الصفحة_الكامل', 'عنوان_صفحة_كامل', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'اسم_الصفحة_الفرعي', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'عنوان_الصفحة_الفرعي', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'اسم_الصفحة_الأساسي', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'عنوان_الصفحة_الأساسي', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'اسم_صفحة_النقاش', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'عنوان_صفحة_النقاش', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'اسم_صفحة_الموضوع', 'اسم_صفحة_المقالة', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       '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' ),
+       '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', 'صفحة=$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' ),
+       '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' ),
+       'img_class'                 => array( '1', 'رتبة=$1', 'class=$1' ),
+       'int'                       => array( '0', 'محتوى:', 'INT:' ),
+       'sitename'                  => array( '1', 'اسم_الموقع', 'SITENAME' ),
+       'ns'                        => array( '0', 'نط:', 'NS:' ),
+       'nse'                       => array( '0', 'نطم:', 'NSE:' ),
+       'localurl'                  => array( '0', 'مسار_محلي:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'عنوان_المسار_المحلي:', 'LOCALURLE:' ),
+       'articlepath'               => array( '0', 'مسار_المقالة', 'ARTICLEPATH' ),
+       'pageid'                    => array( '0', 'رقم_صفحة', 'PAGEID' ),
+       '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' ),
+       '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:' ),
+       'fullurl'                   => array( '0', 'عنوان_كامل:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'مسار_كامل:', 'FULLURLE:' ),
+       'canonicalurl'              => array( '0', 'عنوان_قاعدة:', 'CANONICALURL:' ),
+       'canonicalurle'             => array( '0', 'مسار_قاعدة:', 'CANONICALURLE:' ),
+       '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', 'نسخة_حالية', '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:' ),
+       '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' ),
+       'speciale'                  => array( '0', 'عنوان_خاص', 'speciale' ),
+       '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__' ),
+       'numberingroup'             => array( '1', 'عدد_في_المجموعة', 'عدد_في_مجموعة', 'NUMBERINGROUP', 'NUMINGROUP' ),
+       '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' ),
+       'defaultsort_noerror'       => array( '0', 'لاخطأ', 'noerror' ),
+       'defaultsort_noreplace'     => array( '0', 'لاتستبدل', 'noreplace' ),
+       'pagesincategory_all'       => array( '0', 'كل', 'all' ),
+       'pagesincategory_pages'     => array( '0', 'صفحات', 'pages' ),
+       'pagesincategory_subcats'   => array( '0', 'تصنيفات_فرعية', 'subcats' ),
+       'pagesincategory_files'     => array( '0', 'ملفات', 'files' ),
 );
 
 $specialPageAliases = array(
@@ -388,6 +396,7 @@ $specialPageAliases = array(
        'MIMEsearch'                => array( 'بحث_ميم' ),
        'Mostcategories'            => array( 'الأكثر_تصنيفا' ),
        'Mostimages'                => array( 'أكثر_الملفات_وصلا', 'أكثر_الملفات', 'أكثر_الصور' ),
+       'Mostinterwikis'            => array( 'الأكثر_إنترويكي' ),
        'Mostlinked'                => array( 'أكثر_الصفحات_وصلا', 'الأكثر_وصلا' ),
        'Mostlinkedcategories'      => array( 'أكثر_التصنيفات_وصلا', 'أكثر_التصنيفات_استخداما' ),
        'Mostlinkedtemplates'       => array( 'أكثر_القوالب_وصلا', 'أكثر_القوالب_استخداما' ),
@@ -780,12 +789,12 @@ $1',
 # General errors
 'error' => 'خطأ',
 'databaseerror' => 'خطأ في قاعدة البيانات',
-'dberrortext' => 'حدث Ø®Ø·Ø£ Ù\81Ù\8a ØµÙ\8aغة Ø§ستعلام قاعدة البيانات.
-ربما يكون هذا عيب بالبرنامج.
-آخر Ø§Ø³ØªØ¹Ù\84اÙ\85 Ø·Ù\84ب Ù\85Ù\86 Ù\82اعدة Ø§Ù\84بÙ\8aاÙ\86ات Ù\83اÙ\86:
+'dberrortext' => 'حدث Ø®Ø·Ø£ Ù\81Ù\8a ØµÙ\8aغة Ø£ستعلام قاعدة البيانات.
+قد يدل هذا الخطأ على عيب في البرنامج.
+آخر Ø£Ø³ØªØ¹Ù\84اÙ\85 ØªÙ\85 Ø·Ù\84بÙ\87 Ù\85Ù\86 Ù\82اعدة Ø§Ù\84بÙ\8aاÙ\86ات Ù\83اÙ\86 :
 <blockquote><tt>$1</tt></blockquote>
 من داخل الدالة "<tt>$2</tt>".
£Ø±Ø¬Ø¹Øª Ù\82اعدة Ø§Ù\84بÙ\8aاÙ\86ات Ø§Ù\84خطأ "<tt>$3: $4</tt>".',
­Ø¯Ø¯Øª Ù\82اعدة Ø§Ù\84بÙ\8aاÙ\86ات Ø§Ù\84خطأ  "<tt>$3: $4</tt>".',
 'dberrortextcl' => 'حدث خطأ في صيغة استعلام قاعدة البيانات.
 آخر استعلام طلب من قاعدة البيانات كان:
 "$1"
@@ -916,7 +925,7 @@ $2',
 تأكد من أن ملفات تعريف الارتباط (الكوكيز) مفعلة عندك، ثم أعد تحميل الصفحة وحاول مرة أخرى.',
 'noname' => 'لم تحدد اسم مستخدم صحيح.',
 'loginsuccesstitle' => 'تم الدخول بشكل صحيح',
-'loginsuccess' => "'''لقد قمت بتسجيل الدخول ل{{SITENAME}} باسم \"\$1\".'''",
+'loginsuccess' => "'''لقد سجلت الدخول ل{{SITENAME}} باسم \"\$1\".'''",
 'nosuchuser' => 'لا يوجد مستخدم بالاسم "$1".
 أسماء المستخدمين حساسة لحالة الحروف.
 تأكد من إملاء الاسم، أو [[Special:UserLogin/signup|قم بإنشاء حساب جديد]].',
@@ -1143,8 +1152,8 @@ $2
 'userpage-userdoesnotexist-view' => 'حساب المستخدم "$1" غير مسجل.',
 'blocked-notice-logextract' => 'هذا المستخدم ممنوع حاليا.
 آخر مدخلة في سجل المنع موفرة بالأسفل كمرجع:',
-'clearyourcache' => "'''ملاحظة:''' بعد الحفظ, أنت ربما تحتاج إلى إفراغ كاش متصفحك لرؤية التغييرات.
-* '''فيرفكس / سفاري:''' اضغط ''Shift'' أثناء ضغط ''Reload'', أو اضغط أيا من ''Ctrl-F5'' أو ''Ctrl-R'' (''⌘-R'' على ماك)
+'clearyourcache' => "'''ملاحظة:''' بعد الحفظ، قد تحتاج إلى إفراغ كاش متصفحك لرؤية التغييرات.
+* '''فايرفوكس / سفاري:''' اضغط ''Shift'' أثناء ضغط ''Reload''، أو اضغط أيا من ''Ctrl-F5'' أو ''Ctrl-R'' (''⌘-R'' على ماك)
 * '''جوجل كروم:''' اضغط ''Ctrl-Shift-R'' (''⌘-Shift-R'' على ماك)
 * '''إنترنت إكسبلورر:''' اضغط ''Ctrl'' أثناء ضغط ''Refresh''، أو اضغط ''Ctrl-F5''
 * '''كنكرر:''' اضغط ''Reload'' أو اضغط ''F5''
@@ -1275,7 +1284,7 @@ $2
 
 # "Undo" feature
 'undo-success' => 'يمكن استرجاع التعديل.
-من فضلك تحقق من المقارنة بالأسفل للتأكد من أن هذا هو ما تريد أن تفعله، وبعد ذلك احفظ التغييرات بالأسفل للانتهاء من استرجاع التعديل.',
+تحقق من المقارنة بالأسفل للتأكد من أن هذا هو ما تريد أن تفعله، ثم احفظ التغييرات بالأسفل للانتهاء من استرجاع التعديل.',
 'undo-failure' => 'لم يمكن استرجاع التعديل بسبب تعديلات متعارضة تمت على الصفحة.',
 'undo-norev' => 'فشل في الرجوع عن التعديل حيث أنه غير موجود أو تم حذفه.',
 'undo-summary' => 'الرجوع عن التعديل $1 بواسطة [[Special:Contributions/$2|$2]] ([[User talk:$2|نقاش]])',
@@ -1760,7 +1769,7 @@ $1",
 'right-noratelimit' => 'غير متأثر بحدود المعدل',
 'right-import' => 'استيراد الصفحات من ويكيات أخرى',
 'right-importupload' => 'استيراد الصفحات من ملف مرفوع',
-'right-patrol' => 'اÙ\84تعÙ\84Ù\8aÙ\85 Ø¹Ù\84Ù\89 ØªØ¹Ø¯Ù\8aÙ\84ات Ø§Ù\84آخرÙ\8aÙ\86 Ù\83مراجعة',
+'right-patrol' => 'تعÙ\84Ù\8aÙ\85 ØªØ¹Ø¯Ù\8aÙ\84ات Ø§Ù\84آخرÙ\8aÙ\86 Ø¨Ø¹Ù\84اÙ\85Ø© Ø§Ù\84مراجعة',
 'right-autopatrol' => 'علم تعديلات المستخدم مراجعة تلقائيا',
 'right-patrolmarks' => 'رؤية علامات المراجعة في أحدث التغييرات',
 'right-unwatchedpages' => 'رؤية قائمة بالصفحات غير المراقبة',
@@ -1807,7 +1816,7 @@ $1",
 'action-rollback' => 'استرجاع تعديلات آخر مستخدم عدل صفحة معينة سريعا',
 'action-import' => 'استيراد هذه الصفحة من ويكي آخر',
 'action-importupload' => 'استيراد هذه الصفحة من ملف مرفوع',
-'action-patrol' => 'اÙ\84تعÙ\84Ù\8aÙ\85 Ø¹Ù\84Ù\89 ØªØ¹Ø¯Ù\8aÙ\84ات Ø§Ù\84آخرÙ\8aÙ\86 Ù\83مراجعة',
+'action-patrol' => 'تعÙ\84Ù\8aÙ\85 ØªØ¹Ø¯Ù\8aÙ\84ات Ø§Ù\84آخرÙ\8aÙ\86 Ø¨Ø¹Ù\84اÙ\85Ø© Ø§Ù\84مراجعة',
 'action-autopatrol' => 'جعل تعديلك معلم عليه كمراجع',
 'action-unwatchedpages' => 'رؤية قائمة الصفحات غير المراقبة',
 'action-mergehistory' => 'دمج تاريخ هذه الصفحة',
@@ -2177,6 +2186,7 @@ $1',
 'shared-repo' => 'مستودع مشترك',
 'shared-repo-name-wikimediacommons' => 'ويكيميديا كومنز',
 'filepage.css' => '/* CSS المعروض هنا سيضمن في صفحات وصف الملفات، أيضا على الويكيات الأجنبية */',
+'upload-disallowed-here' => 'لأسف لا يمكنك تعديل هذه الصورة.',
 
 # File reversion
 'filerevert' => 'استرجع $1',
@@ -2285,6 +2295,7 @@ $1',
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|بايت|بايت}}',
 'ncategories' => '$1 {{PLURAL:$1|تصنيف واحد|تصنيفان|تصنيفات|تصنيف|تصنيفا}}',
+'ninterwikis' => '$1 {{PLURAL:$1|interwiki|interwikis}}',
 'nlinks' => '{{PLURAL:$1|لا وصلات|وصلة واحدة|وصلتان|$1 وصلات|$1 وصلة}}',
 'nmembers' => '{{PLURAL:$1|لا أعضاء|عضو واحد|عضوان|$1 أعضاء|$1 عضوا|$1 عضو}}',
 'nrevisions' => '{{PLURAL:$1|لا مراجعات|مراجعة واحدة|مراجعتان|$1 مراجعات|$1 مراجعة}}',
@@ -2313,6 +2324,7 @@ $1',
 'mostlinkedtemplates' => 'أكثر القوالب وصلا',
 'mostcategories' => 'أكثر الصفحات تصنيفا',
 'mostimages' => 'أكثر الملفات ارتباطا',
+'mostinterwikis' => 'الصفحات التي تحتوي على أغلب وصلات الإنترويكي',
 'mostrevisions' => 'أكثر الصفحات تعديلا',
 'prefixindex' => 'كل الصفحات بالبادئة',
 'prefixindex-namespace' => 'كل الصفحات مع بادئة ($1 مساحة الأسم)',
@@ -2460,6 +2472,8 @@ $1',
 'mailnologin' => 'لا يوجد عنوان للإرسال',
 'mailnologintext' => 'يجب أن تقوم [[Special:UserLogin|بتسجيل الدخول]] وإدخال بريد إلكتروني صالح في صفحة [[Special:Preferences|التفضيلات]] لتتمكن من إرسال الرسائل لمستخدمين آخرين.',
 'emailuser' => 'إرسال رسالة لهذا المستخدم',
+'emailuser-title-target' => 'راسل بالبريد الإلكتروني هذا  {{GENDER:$1| المستخدم}}',
+'emailuser-title-notarget' => 'مراسلة المستخدم',
 'emailpage' => 'إرسال رسالة للمستخدم',
 'emailpagetext' => 'يمكنك استخدام الاستمارة بالأسفل لإرسال رسالة بريد إلكتروني إلى هذا المستخدم.
 سيظهر عنوان البريد الإلكتروني الذي أدخلته في [[Special:Preferences|تفضيلاتك]] كعنوان المرسل في البريد الإلكتروني، كي يستطيع المتلقي الرد عليك مباشرة.',
@@ -3302,11 +3316,34 @@ $1',
 
 # Info page
 'pageinfo-title' => 'المعلومات ل"$1"',
+'pageinfo-header-basic' => 'المعلومات الأساسية',
 'pageinfo-header-edits' => 'التعديلات',
+'pageinfo-header-restrictions' => 'حماية الصفحة',
+'pageinfo-header-properties' => 'خصائص الصفحة',
+'pageinfo-display-title' => 'عرض العنوان',
+'pageinfo-default-sort' => 'مفتاح الترتيب الافتراضي',
+'pageinfo-length' => 'حجم الصفحة (بالبايت)',
+'pageinfo-article-id' => 'معرف الصفحة (ID)',
+'pageinfo-robot-policy' => 'الصفة في محرك البحث',
+'pageinfo-robot-index' => 'قابلة للفهرسة',
+'pageinfo-robot-noindex' => 'غير قابلة للفهرسة',
 'pageinfo-views' => 'عدد المشاهدات',
 'pageinfo-watchers' => 'عدد المراقبين',
+'pageinfo-redirects-name' => 'التوجيهات نحو هذه الصفحة',
+'pageinfo-subpages-name' => 'الصفحات الفرعية لهذه الصفحة',
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|إعادة توجيه|إعادة توجيهات}}; $3 {{PLURAL:$3|غير إعادة توجيه|غير إعادة التوجيهات}})',
+'pageinfo-firstuser' => 'منشئ الصفحة',
+'pageinfo-firsttime' => 'تاريخ إنشاء الصفحة',
+'pageinfo-lastuser' => 'آخر محرر',
+'pageinfo-lasttime' => 'تاريخ آخر تعديل',
 'pageinfo-edits' => 'عدد التعديلات',
 'pageinfo-authors' => 'عدد المؤلفين المختلفين',
+'pageinfo-recent-edits' => 'عدد التعديلات الأخيرة (خلال  $1 يوم/أيام)',
+'pageinfo-recent-authors' => 'عدد المؤلفين المختلفين الأخيرين',
+'pageinfo-restriction' => 'حماية الصفحة (<code>$1</code>)',
+'pageinfo-magic-words' => 'السحرية {{PLURAL:$1|الكلمة|الكلمات}} ($1)',
+'pageinfo-hidden-categories' => 'مخفية {{PLURAL:$1|فئة|فئات}} ($1)',
+'pageinfo-templates' => 'متضمنة {{PLURAL:$1|قالب|قوالب}} ($1)',
 
 # Skin names
 'skinname-standard' => 'كلاسيك',
@@ -3320,15 +3357,15 @@ $1',
 'skinname-vector' => 'فكتور',
 
 # Patrolling
-'markaspatrolleddiff' => 'علم كمراجعة',
-'markaspatrolledtext' => 'علم على هذه الصفحة كمراجعة',
-'markedaspatrolled' => 'تÙ\85 Ø§Ù\84تعÙ\84Ù\8aÙ\85 Ù\83مراجعة',
-'markedaspatrolledtext' => 'اÙ\84Ù\85راجعة Ø§Ù\84Ù\85ختارة Ù\85Ù\86 [[:$1]] ØªÙ\85 Ø§Ù\84تعÙ\84Ù\8aÙ\85 Ø¹Ù\84Ù\8aÙ\87ا Ù\83مراجعة.',
+'markaspatrolleddiff' => 'علم بعلامة المراجعة',
+'markaspatrolledtext' => 'علم هذه الصفحة بعلامة المراجعة',
+'markedaspatrolled' => 'عÙ\84Ù\85ت Ø¨Ø¹Ù\84اÙ\85Ø© Ø§Ù\84مراجعة',
+'markedaspatrolledtext' => 'اÙ\84Ù\85راجعة Ø§Ù\84Ù\85ختارة Ù\85Ù\86 [[:$1]] Ø¹Ù\84Ù\85ت Ø¨Ø¹Ù\84اÙ\85Ø© Ø§Ù\84مراجعة.',
 'rcpatroldisabled' => 'مراجعة أحدث التغييرات معطلة',
 'rcpatroldisabledtext' => 'خاصية مراجعة أحدث التغييرات معطلة حاليا',
 'markedaspatrollederror' => 'لا يمكن التعليم بالمراجعة',
 'markedaspatrollederrortext' => 'يجب عليك اختيار المراجعة التي تريد أن تشير أنها مراجعة',
-'markedaspatrollederror-noautopatrol' => 'Ù\85Ù\86 ØºÙ\8aر Ø§Ù\84Ù\85سÙ\85Ù\88Ø­ Ù\84Ù\83 Ø§Ù\84تعÙ\84Ù\8aÙ\85 Ø¹Ù\84Ù\89 ØªØºÙ\8aÙ\8aراتÙ\83 Ø§Ù\84شخصÙ\8aØ© Ù\83مراجعة.',
+'markedaspatrollederror-noautopatrol' => 'Ù\84ا Ù\8aجÙ\88ز Ù\84Ù\83 ØªØ¹Ù\84Ù\8aÙ\85 ØªØºÙ\8aÙ\8aراتÙ\83 Ø§Ù\84شخصÙ\8aØ© Ø¨Ø¹Ù\84اÙ\85Ø© Ø§Ù\84مراجعة.',
 
 # Patrol log
 'patrol-log-page' => 'سجل الخفر',
@@ -3360,6 +3397,7 @@ $1',
 'file-info-size-pages' => '$1 × $2 بكسل, حجم الملف  : $3 ، نوع الملف : $4 ، $5 {{PLURAL:$5| صفحة | صفحات}}',
 'file-nohires' => 'لا توجد دقة أعلى متوفرة.',
 'svg-long-desc' => 'ملف SVG، أبعاده $1 × $2 بكسل، حجم الملف: $3',
+'svg-long-desc-animated' => 'ملف SVG متحرك، بمقاسات  $1  ×  $2  بكسل، حجم الملف: $3',
 'show-big-image' => 'دقة كاملة',
 'show-big-image-preview' => 'حجم هذه المعاينة: $1.',
 'show-big-image-other' => '{{PLURAL:$2||البعد الآخر|البعدان الآخران|الأبعاد الأخرى}}: $1.',
@@ -3369,6 +3407,8 @@ $1',
 'file-info-png-looped' => 'ملفوف',
 'file-info-png-repeat' => 'عرضت {{PLURAL:$1||مرة واحدة|مرتين|$1 مرات|$1 مرة}}',
 'file-info-png-frames' => '{{PLURAL:$1||إطار واحد|إطاران|$1 إطارات|$1 إطارًا|$1 إطار}}',
+'file-no-thumb-animation' => "'' 'ملاحظة: نظراً للقيود التقنية، فإن الصورة المصغرة لهذا الملف ستكون غير متحركة. '''",
+'file-no-thumb-animation-gif' => "'' 'ملاحظة: نظراً للقيود التقنية، فإن الصورة المصغرة لهذا الملف GIF عالي الدقة ستكون غير متحركة. '''",
 
 # Special:NewFiles
 'newimages' => 'معرض الملفات الجديدة',
index d020c8e..147d19a 100644 (file)
@@ -78,30 +78,30 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#ܨܘܝܒܐ', '#REDIRECT' ),
-       'numberofpages'           => array( '1', 'ܡܢܝܢܐ_ܕܦܐܬܬ̈ܐ', 'NUMBEROFPAGES' ),
-       '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_center'              => array( '1', 'ܡܨܥܐ', 'center', 'centre' ),
-       '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' ),
+       'redirect'                  => array( '0', '#ܨܘܝܒܐ', '#REDIRECT' ),
+       'numberofpages'             => array( '1', 'ܡܢܝܢܐ_ܕܦܐܬܬ̈ܐ', 'NUMBEROFPAGES' ),
+       '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_center'                => array( '1', 'ܡܨܥܐ', 'center', 'centre' ),
+       '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' ),
 );
 
 $messages = array(
@@ -825,6 +825,7 @@ $1',
 'newsectionsummary' => '/* $1 */ ܡܢܬܐ ܚܕܬܐ',
 'rc-enhanced-expand' => 'ܚܘܝ ܐܪ̈ܝܟܬܐ (ܒܥܐ ܠܟ JavaScript)',
 'rc-enhanced-hide' => 'ܛܫܝ ܐܪ̈ܝܟܬܐ',
+'rc-old-title' => 'ܐܬܒܪܝ ܫܪܫܐܝܬ ܐܝܟ "$1"',
 
 # Recent changes linked
 'recentchangeslinked' => 'ܫܘܚܠܦ̈ܐ ܕ̈ܡܝܐ',
@@ -1135,6 +1136,7 @@ $1',
 'mywatchlist' => 'ܪ̈ܗܝܬܝ',
 'watchlistfor2' => 'ܕ $1 $2',
 'nowatchlist' => 'ܠܝܬ ܠܟ ܡܕܡ ܒܪ̈ܗܝܬܐ ܕܝܠܟ',
+'watchlistanontext' => '$1 ܠܚܙܝܐ ܐܘ ܫܚܠܦܬܐ ܕܦܐܬܬ̈ܐ ܒܪ̈ܗܝܬܟ.',
 'watchnologin' => 'ܠܝܬܝܟ ܥܠܝܠܐ',
 'watchnologintext' => 'ܐܠܨܐ ܕܬܗܘܐ [[Special:UserLogin|ܥܠܝܠܐ]] ܠܫܚܠܦܬܐ ܕܪ̈ܗܝܬܟ.',
 'addwatch' => 'ܐܘܣܦ ܥܠ ܪ̈ܗܝܬܝ',
index 8fe762b..142b79f 100644 (file)
@@ -59,153 +59,153 @@ $namespaceAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#تحويل', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__لافهرس__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__لامعرض__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__لصق_فهرس__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__فهرس__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__لاتحريرقسم__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '__لاعنوان__', '__NOHEADER__' ),
-       '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', 'يوم_حالي2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'اسم_اليوم_الحالى', 'اسم_اليوم_الحالي', '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', 'اسم_الشهر_المحلى', 'اسم_شهر_محلى', 'اسم_الشهر_المحلي', 'اسم_شهر_محلي', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'اسم_الشهر_المحلى_المولد', 'اسم_شهر_محلى_مولد', 'اسم_الشهر_المحلي_المولد', 'اسم_شهر_محلي_مولد', 'LOCALMONTHNAMEGEN' ),
-       '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' ),
-       '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' ),
-       'pagename'                => array( '1', 'اسم_الصفحة', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'عنوان_الصفحة', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'نطاق', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'عنوان_نطاق', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'نطاق_النقاش', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'عنوان_النقاش', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'نطاق_الموضوع', 'نطاق_المقالة', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'عنوان_نطاق_الموضوع', 'عنوان_نطاق_المقالة', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'اسم_الصفحة_الكامل', 'اسم_صفحة_كامل', 'اسم_كامل', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'عنوان_الصفحة_الكامل', 'عنوان_صفحة_كامل', 'عنوان_كامل', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'اسم_الصفحة_الفرعي', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'عنوان_الصفحة_الفرعى', 'عنوان_الصفحة_الفرعي', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'اسم_الصفحة_الأساسى', 'اسم_الصفحة_الأساسي', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'عنوان_الصفحة_الأساسى', 'عنوان_الصفحة_الأساسي', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'اسم_صفحة_النقاش', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'عنوان_صفحة_النقاش', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'اسم_صفحة_الموضوع', 'اسم_صفحة_المقالة', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       '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' ),
-       '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', 'صفحة=$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' ),
-       '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', 'رابط=$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', 'نطم:', '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:' ),
-       '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', 'رقم_المراجعة', '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:' ),
-       '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' ),
-       '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:' ),
-       '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:' ),
-       '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__' ),
-       'numberingroup'           => array( '1', 'عدد_فى_المجموعة', 'عدد_فى_مجموعة', 'عدد_في_المجموعة', 'عدد_في_مجموعة', 'NUMBERINGROUP', 'NUMINGROUP' ),
-       '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' ),
+       'redirect'                  => array( '0', '#تحويل', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__لافهرس__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__لامعرض__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__لصق_فهرس__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__فهرس__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__لاتحريرقسم__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '__لاعنوان__', '__NOHEADER__' ),
+       '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', 'يوم_حالي2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'اسم_اليوم_الحالى', 'اسم_اليوم_الحالي', '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', 'اسم_الشهر_المحلى', 'اسم_شهر_محلى', 'اسم_الشهر_المحلي', 'اسم_شهر_محلي', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'اسم_الشهر_المحلى_المولد', 'اسم_شهر_محلى_مولد', 'اسم_الشهر_المحلي_المولد', 'اسم_شهر_محلي_مولد', 'LOCALMONTHNAMEGEN' ),
+       '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' ),
+       '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' ),
+       'pagename'                  => array( '1', 'اسم_الصفحة', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'عنوان_الصفحة', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'نطاق', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'عنوان_نطاق', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'نطاق_النقاش', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'عنوان_النقاش', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'نطاق_الموضوع', 'نطاق_المقالة', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'عنوان_نطاق_الموضوع', 'عنوان_نطاق_المقالة', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'اسم_الصفحة_الكامل', 'اسم_صفحة_كامل', 'اسم_كامل', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'عنوان_الصفحة_الكامل', 'عنوان_صفحة_كامل', 'عنوان_كامل', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'اسم_الصفحة_الفرعي', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'عنوان_الصفحة_الفرعى', 'عنوان_الصفحة_الفرعي', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'اسم_الصفحة_الأساسى', 'اسم_الصفحة_الأساسي', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'عنوان_الصفحة_الأساسى', 'عنوان_الصفحة_الأساسي', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'اسم_صفحة_النقاش', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'عنوان_صفحة_النقاش', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'اسم_صفحة_الموضوع', 'اسم_صفحة_المقالة', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       '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' ),
+       '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', 'صفحة=$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' ),
+       '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', 'رابط=$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', 'نطم:', '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:' ),
+       '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', 'رقم_المراجعة', '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:' ),
+       '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' ),
+       '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:' ),
+       '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:' ),
+       '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__' ),
+       'numberingroup'             => array( '1', 'عدد_فى_المجموعة', 'عدد_فى_مجموعة', 'عدد_في_المجموعة', 'عدد_في_مجموعة', 'NUMBERINGROUP', 'NUMINGROUP' ),
+       '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(
@@ -706,6 +706,7 @@ $2',
 'createaccount' => 'افتح حساب',
 'gotaccount' => "عندك حساب؟ '''$1'''.",
 'gotaccountlink' => 'دخول',
+'userlogin-resetlink' => 'نسيت تفاصيل الدخول؟',
 'createaccountmail' => 'بـ الايميل',
 'createaccountreason' => 'السبب:',
 'badretype' => 'كلمتين السر اللى  كتبتهم مش  زى بعضهم',
@@ -903,8 +904,8 @@ $2',
 افتكر أن ملفات ال.css و ال.js بتستخدم حروف صغيرة فى العنوان ، مثلا {{ns:user}}:Foo/vector.css و مش {{ns:user}}:Foo/Vector.css.",
 'updated' => '(متحدثة)',
 'note' => "'''ملحوظه:'''",
-'previewnote' => "''' دى بروفه للصفحه بس،
-ولسه ما تسييفتش!'''",
+'previewnote' => "'''دى بروفه للصفحه بس.'''
+ولسه ما تسييفتش! ،",
 'previewconflict' => 'البروفة دى بتبينلك فوق إزاى ح يكون شكل النص لو انت دوست على حفظ',
 'session_fail_preview' => "'''ما قدرناش  نحفظ التعديلات اللى قمت بيها نتيجة لضياع بيانات  الجلسه.
 الرجاء المحاولة مرة تانيه.
@@ -1172,7 +1173,7 @@ $1",
 'mergelogpagetext' => 'فى تحت لستة بأحدث عمليات الدمج لتاريخ صفحة فى التانية.',
 
 # Diffs
-'history-title' => 'تاريخ تعديل "$1"',
+'history-title' => ' «$1»: تاريخ التعديل',
 'difference-multipage' => '(الفرق بين الصفحتين)',
 'lineno' => 'سطر $1:',
 'compareselectedversions' => 'قارن بين النسختين المختارتين',
@@ -1351,8 +1352,8 @@ $1",
 'email' => 'الإيميل',
 'prefs-help-realname' => 'الاسم الحقيقى اختيارى.
 لو إخترت تكتبه, حيستعمل بس علشان شغلك يتنسب لإسمك.',
-'prefs-help-email' => 'اÙ\84Ø¥Ù\8aÙ\85Ù\8aÙ\84 Ø§Ø®ØªÙ\8aارÙ\89, Ø¨Ø³ Ù\84ازÙ\85 Ø¹Ù\84شاÙ\86 Ù\84Ù\88 Ù\86سÙ\8aت Ø§Ù\84پاسÙ\88Ù\88رد.
-ممكن بردو تختار انك تخلّى اليوزرات تبعتلك إيميل من صفحة اليوزر او المناقشه بتاعتك من غير ما تبقى شخصيتك معروفه.',
+'prefs-help-email' => 'عÙ\86Ù\88اÙ\86 Ø§Ù\84Ù\84Ø¥Ù\8aÙ\85Ù\8aÙ\84 Ø§Ø®ØªÙ\8aارÙ\89 Ø\8c Ø¨Ø³ Ù\84ازÙ\85 Ø¹Ù\84شاÙ\86 Ù\84Ù\88 Ù\86سÙ\8aت Ø§Ù\84پاسÙ\88Ù\88رد..',
+'prefs-help-email-others' => 'ممكن بردو تختار انك تخلّى اليوزرات تبعتلك إيميل من صفحة اليوزر او المناقشه بتاعتك من غير ما تبقى شخصيتك معروفه.',
 'prefs-help-email-required' => 'عنوان الإيميل مطلوب.',
 'prefs-info' => 'معلومات اساسيه',
 'prefs-i18n' => 'التدويل',
@@ -2077,6 +2078,7 @@ PICT # misc.
 # Watchlist
 'watchlist' => 'لستة الصفحات اللى باراقبها',
 'mywatchlist' => 'لستة  الصفح اللى باراقبها',
+'watchlistfor2' => 'لليوزر $1 ($2)',
 'nowatchlist' => 'مافيش حاجة فى لستة مراقبتك.',
 'watchlistanontext' => 'لو سمحت $1 لعرض أو تعديل الصفحات فى لستة مراقبتك.',
 'watchnologin' => 'مش متسجل',
@@ -2338,6 +2340,7 @@ $1',
 'sp-contributions-newbies-title' => 'مساهمات  اليوزر للحسابات الجديدة',
 'sp-contributions-blocklog' => 'سجل المنع',
 'sp-contributions-deleted' => 'تعديلات اليوزر الممسوحه',
+'sp-contributions-uploads' => 'مرفوعات',
 'sp-contributions-logs' => 'السجلات',
 'sp-contributions-talk' => 'مناقشه',
 'sp-contributions-userrights' => 'ادارة حقوق اليوزر',
@@ -2345,6 +2348,7 @@ $1',
 آخر عمليه منع في السجل موجوده تحت كمرجع:',
 'sp-contributions-search' => 'دور على مساهمات',
 'sp-contributions-username' => 'عنوان أيبى أو اسم يوزر:',
+'sp-contributions-toponly' => 'اظهر اختير تعديل  بس',
 'sp-contributions-submit' => 'تدوير',
 
 # What links here
@@ -2738,6 +2742,7 @@ $1',
 'tooltip-upload' => 'ابتدى التحميل',
 'tooltip-rollback' => "\"'''ترجيع'''\" بيرجع بدوسه واحده التعديل (التعديلات) فى الصفحه دى لاخر واحد عدل الصفحه.",
 'tooltip-undo' => '"رجوع" بترجع  التعديل دا وبتفتح استمارة التعديل فى شكل البروفة. بتسمح بإضافة سبب فى الملخص.',
+'tooltip-summary' => 'اكتب ملخص قصير',
 
 # Stylesheets
 'common.css' => '/* الأنماط المتراصة CSS المعروضة هنا ستؤثر على كل الواجهات */',
@@ -2875,7 +2880,8 @@ $1',
 إذا كان الملف اتعدل عن حالته الأصلية، فبعض التفاصيل مش ها تعبر عن الملف المعدل.',
 'metadata-expand' => 'عرض التفاصيل الاضافيه',
 'metadata-collapse' => 'تخبية التفاصيل الاضافيه',
-'metadata-fields' => 'حقول معطيات الميتا EXIF الموجوده فى الرساله دى هاتتعرض فى صفحة الصوره لما يكون جدول معطيات الميتا مضغوط. الحقول التانيه هاتكون مخفيه افتراضيا.
+'metadata-fields' => 'معطيات الميتا الموجوده فى الرساله دى هاتتعرض فى صفحة الصوره لما يكون جدول معطيات الميتا مضغوط.
+المعطيات التانيه هاتكون مخفيه .
 * make
 * model
 * datetimeoriginal
index fea431a..2e86ea2 100644 (file)
@@ -30,8 +30,8 @@ $namespaceNames = array(
        NS_PROJECT_TALK     => '$1_বাৰ্তা',
        NS_FILE             => 'চিত্ৰ',
        NS_FILE_TALK        => 'চিত্ৰ_বাৰ্তা',
-       NS_MEDIAWIKI        => 'মà§\87ডিয়াৱিকি',
-       NS_MEDIAWIKI_TALK   => 'মà§\87ডিয়াৱিà¦\95ি_বাৰà§\8dতা',
+       NS_MEDIAWIKI        => 'মিডিয়াৱিকি',
+       NS_MEDIAWIKI_TALK   => 'মিডিয়াৱিà¦\95ি_à¦\86লà§\8bà¦\9aনা',
        NS_TEMPLATE         => 'সাঁচ',
        NS_TEMPLATE_TALK    => 'সাঁচ_বাৰ্তা',
        NS_HELP             => 'সহায়',
@@ -53,6 +53,8 @@ $namespaceAliases = array(
        'चित्र_वार्ता' => NS_FILE_TALK,
        'চিত্র' => NS_FILE,
        'চিত্র বার্তা' => NS_FILE_TALK,
+       'মেডিয়াৱিকি' => NS_MEDIAWIKI,
+       'মেডিয়াৱিকি_বাৰ্তা' => NS_MEDIAWIKI_TALK,
        'MediaWiki বার্তা' => NS_MEDIAWIKI_TALK,
        'साँचा' => NS_TEMPLATE,
        'साँचा_वार्ता' => NS_TEMPLATE_TALK,
@@ -65,35 +67,104 @@ $namespaceAliases = array(
 );
 
 $specialPageAliases = array(
+       'Activeusers'               => array( 'সক্ৰিয়_সদস্যসকল' ),
+       'Allmessages'               => array( 'সকলোবোৰ_বাৰ্তা' ),
        'Allpages'                  => array( 'সকলোবোৰ_পৃষ্ঠা' ),
-       'Contributions'             => array( 'অৱদানবোৰ' ),
+       'Ancientpages'              => array( 'পুৰণি_পৃষ্ঠা' ),
+       'Badtitle'                  => array( 'ভুল_শিৰোনাম' ),
+       'Blankpage'                 => array( 'উকা_পৃষ্ঠা' ),
+       'Block'                     => array( 'অৱৰোধ', 'আই_পি_অৱৰোধ', 'সদস্য_অৱৰোধ' ),
+       'Blockme'                   => array( 'মোক_অৱৰোধ_কৰক' ),
+       'Booksources'               => array( 'গ্ৰন্থৰ_উত্স' ),
+       'BrokenRedirects'           => array( 'ভঙা_পূণঃনিৰ্দেশনাসমূহ' ),
+       'Categories'                => array( 'শ্ৰেণীসমূহ' ),
+       'ChangeEmail'               => array( 'ইমেইল_সলনি_কৰক' ),
+       'ChangePassword'            => array( 'গুপ্তশব্দ_সলনি_কৰক', 'গুপ্তশব্দ_সলনি' ),
+       'ComparePages'              => array( 'তুলনা_কৰক' ),
+       'Confirmemail'              => array( 'ইমেইল_নিশ্চিত_কৰক' ),
+       'Contributions'             => array( 'বৰঙনিসমূহ', 'বৰঙনিদাতাসকল', 'বৰঙনি' ),
        'CreateAccount'             => array( 'সদস্যভুক্তি' ),
+       'DeletedContributions'      => array( 'বিলোপ_কৰা_বৰঙনিসমূহ' ),
+       'Disambiguations'           => array( 'দ্ব্যৰ্থতা_দূৰীকৰণসমূহ' ),
+       'DoubleRedirects'           => array( 'দ্বি_পুণঃনিৰ্দেশনাসমূহ' ),
+       'EditWatchlist'             => array( 'লক্ষ্যতালিকা_সম্পাদনা_কৰক' ),
+       'Emailuser'                 => array( 'সদস্যলৈ_ই-মেইল_পঠিয়াওক' ),
+       'Export'                    => array( 'ৰপ্তানি' ),
+       'Fewestrevisions'           => array( 'নূন্যতম_সংস্কৰণসমূহ' ),
+       'FileDuplicateSearch'       => array( 'প্ৰতিলিপি_সনিবিষ্ট_নথি_অনুসন্ধান' ),
+       'Filepath'                  => array( 'ফাইলৰ_পথ' ),
+       'Import'                    => array( 'আমদানি' ),
+       'Invalidateemail'           => array( 'অবৈধ_ই-মেইল' ),
+       'JavaScriptTest'            => array( 'জাভাস্ক্ৰীপ্ত_পৰীক্ষা' ),
+       'BlockList'                 => array( 'অৱৰোধৰ_তালিকা' ),
+       'LinkSearch'                => array( 'সংযোগ_সন্ধান' ),
+       'Listadmins'                => array( 'প্ৰশাসকৰ_তালিকা' ),
+       'Listbots'                  => array( 'বটৰ_তালিকা' ),
        'Listfiles'                 => array( 'চিত্ৰ-তালিকা' ),
        'Listgrouprights'           => array( 'গোটৰ_অধিকাৰসমূহ' ),
+       'Listredirects'             => array( 'পুণঃনিৰ্দেশনাসমূহৰ_তালিকা' ),
        'Listusers'                 => array( 'সদস্য-তালিকা' ),
+       'Lockdb'                    => array( 'তথ্যকোষ_বন্ধ_কৰক' ),
+       'Log'                       => array( 'অভিলেখ', 'অভিলেখসমূহ' ),
        'Lonelypages'               => array( 'অকলশৰীয়া_পৃষ্ঠা' ),
-       'Mycontributions'           => array( 'মোৰ_অৱদান' ),
+       'Longpages'                 => array( 'দীঘলীয়া_পৃষ্ঠাসমূহ' ),
+       'MergeHistory'              => array( 'একত্ৰীকৰণ_ইতিহাস' ),
+       'MIMEsearch'                => array( 'MIME_অনুসন্ধান' ),
+       'Movepage'                  => array( 'পৃষ্ঠা_স্থানান্তৰ' ),
+       'Mycontributions'           => array( 'মোৰ_বৰঙনি' ),
        'Mypage'                    => array( 'মোৰ_পৃষ্ঠা' ),
        'Mytalk'                    => array( 'মোৰ_কথোপকথন' ),
+       'Myuploads'                 => array( 'মোৰ_আপল’ডসমূহ' ),
        'Newimages'                 => array( 'নতুন_চিত্ৰ' ),
+       'Newpages'                  => array( 'পৰৱৰ্তী_পৃষ্ঠা' ),
+       'PasswordReset'             => array( 'গুপ্তশব্দ_ঘূৰাই_আনক' ),
+       'PermanentLink'             => array( 'স্থায়ী_সংযোগ' ),
        'Popularpages'              => array( 'জনপ্ৰিয়_পৃষ্ঠাসমূহ' ),
        'Preferences'               => array( 'পচন্দ' ),
+       'Protectedpages'            => array( 'সুৰক্ষিত_পৃষ্ঠাসমূহ' ),
+       'Protectedtitles'           => array( 'সুৰক্ষিত_শিৰোনামসমূহ' ),
        'Randompage'                => array( 'আকস্মিক' ),
-       'Recentchanges'             => array( 'শেহতীয়া_কাম' ),
-       'Specialpages'              => array( 'বিশেষ_পৃষ্ঠাবোৰ' ),
+       'Randomredirect'            => array( 'আকস্মিক_পুণঃনিৰ্দেশনা' ),
+       'Recentchanges'             => array( 'শেহতীয়া_সালসলনি' ),
+       'Recentchangeslinked'       => array( 'সম্পৰ্কিত_সালসলনিসমূহ' ),
+       'Revisiondelete'            => array( 'সংস্কৰণ_বিলোপ' ),
+       'RevisionMove'              => array( 'সংস্কৰণ_স্থানান্তৰ' ),
+       'Search'                    => array( 'সন্ধান' ),
+       'Shortpages'                => array( 'চমু_পৃষ্ঠা' ),
+       'Specialpages'              => array( 'বিশেষ_পৃষ্ঠাসমূহ' ),
        'Statistics'                => array( 'পৰিসংখ্যা' ),
+       'Tags'                      => array( 'টেগসমূহ' ),
+       'Unblock'                   => array( 'অৱৰোধ_বাৰণ' ),
        'Uncategorizedcategories'   => array( 'অবিন্যস্ত_শ্ৰেণীসমূহ' ),
-       'Uncategorizedimages'       => array( 'à¦\85বিনà§\8dযসà§\8dত_à¦\9aিতà§\8dৰবà§\8bৰ' ),
+       'Uncategorizedimages'       => array( 'à¦\85বিনà§\8dযসà§\8dত_à¦\9aিতà§\8dৰসমà§\82হ' ),
        'Uncategorizedpages'        => array( 'অবিন্যস্ত_পৃষ্ঠাসমূহ' ),
-       'Uncategorizedtemplates'    => array( 'অবিন্যস্ত_সাঁচবোৰ' ),
+       'Uncategorizedtemplates'    => array( 'অবিন্যস্ত_সাঁচসমূহ' ),
+       'Undelete'                  => array( 'বিলোপ_ঘূৰাই_আনক' ),
+       'Unlockdb'                  => array( 'তথ্যকোষ_খোলক' ),
        'Unusedcategories'          => array( 'অব্যৱহৃত_শ্ৰেণীসমূহ' ),
-       'Unusedimages'              => array( 'অব্যৱহৃত_চিত্ৰবোৰ' ),
-       'Upload'                    => array( 'বোজাই' ),
-       'Userlogin'                 => array( 'সদস্যৰ_প্ৰবেশ' ),
+       'Unusedimages'              => array( 'অব্যৱহৃত_চিত্ৰসমূহ' ),
+       'Unusedtemplates'           => array( 'অব্যৱহৃত_সাঁচসমূহ' ),
+       'Unwatchedpages'            => array( 'লক্ষ্য_নৰখা_পৃষ্ঠাসমূহ' ),
+       'Upload'                    => array( 'আপল’ড', 'বোজাই' ),
+       'Userlogin'                 => array( 'সদস্যৰ_প্ৰৱেশ' ),
        'Userlogout'                => array( 'সদস্যৰ_প্ৰস্থান' ),
+       'Userrights'                => array( 'সদস্যৰ_অধিকাৰ', 'প্ৰশাসক_সৃষ্টি', 'বট_সৃষ্টি' ),
+       'Version'                   => array( 'সংস্কৰণ' ),
        'Wantedcategories'          => array( 'আকাংক্ষিত_শ্ৰেণীসমূহ' ),
-       'Wantedpages'               => array( 'আকাংক্ষিত_পৃষ্ঠাসমূহ' ),
+       'Wantedfiles'               => array( 'কাম্য_ফাইলসমূহ' ),
+       'Wantedpages'               => array( 'কাম্য_পৃষ্ঠাসমূহ', 'ভগা_সংযোগসমূহ' ),
+       'Wantedtemplates'           => array( 'কাম্য_সাঁচসমূহ' ),
        'Watchlist'                 => array( 'লক্ষ্যতালিকা' ),
+       'Whatlinkshere'             => array( 'পৃষ্ঠালৈ_থকা_সংযোগসমূহ' ),
+       'Withoutinterwiki'          => array( 'আন্তঃৱিকিবিহীন' ),
+);
+
+$magicWords = array(
+       'redirect'                  => array( '0', 'পুণঃনিৰ্দেশ', '#REDIRECT' ),
+       'special'                   => array( '0', 'বিশেষ', 'special' ),
+       'hiddencat'                 => array( '1', '__গোপন_শ্ৰেণী__', '__HIDDENCAT__' ),
+       'pagesize'                  => array( '1', 'পৃষ্ঠাৰ_আকাৰ', 'PAGESIZE' ),
+       'index'                     => array( '1', '__সূচী__', '__INDEX__' ),
 );
 
 $digitTransformTable = array(
index 20630b6..44d6dee 100644 (file)
@@ -1778,6 +1778,7 @@ Seique quieras camudar la descripción de la so [páxina de descripción de fich
 '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 */",
+'upload-disallowed-here' => 'Por desgracia nun pues sobrescribir esta imaxe.',
 
 # File reversion
 'filerevert' => 'Revertir $1',
@@ -2061,7 +2062,9 @@ Pue haber [[{{MediaWiki:Listgrouprights-helppage}}|información adicional]] toca
 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 corréu a esti usuariu',
-'emailpage' => "Corréu d'usuariu",
+'emailuser-title-target' => 'Unviar un corréu electrónicu a {{GENDER:$1|esti usuariu|esta usuaria}}',
+'emailuser-title-notarget' => 'Unviar un corréu electrónicu a un usuariu',
+'emailpage' => 'Envigar un corréu electrónicu a un 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:",
@@ -2890,11 +2893,34 @@ Probablemente tea causao por un enllaz a un sitiu esternu de la llista prieta.',
 
 # Info page
 'pageinfo-title' => 'Información sobro "$1"',
-'pageinfo-header-edits' => 'Ediciones',
+'pageinfo-header-basic' => 'Información básica',
+'pageinfo-header-edits' => "Historial d'ediciones",
+'pageinfo-header-restrictions' => 'Proteición de páxina',
+'pageinfo-header-properties' => 'Propiedaes de la páxina',
+'pageinfo-display-title' => 'Amosar el títulu',
+'pageinfo-default-sort' => "Clave d'ordenación predeterminada",
+'pageinfo-length' => 'Llonxitú de la páxina (en bytes)',
+'pageinfo-article-id' => 'ID de la páxina',
+'pageinfo-robot-policy' => 'Estáu del motor de gueta',
+'pageinfo-robot-index' => 'Pue ser índiz',
+'pageinfo-robot-noindex' => 'Nun pue ser índiz',
 'pageinfo-views' => 'Númberu de visites',
-'pageinfo-watchers' => 'Númberu de vixilantes',
-'pageinfo-edits' => "Númberu d'ediciones",
-'pageinfo-authors' => "Númberu d'autores distintos",
+'pageinfo-watchers' => 'Númberu de vixilantes de la páxina',
+'pageinfo-redirects-name' => 'Redireiciones a esta páxina',
+'pageinfo-subpages-name' => "Subpáxines d'esta páxina",
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|redireición|redireiciones}}; $3 {{PLURAL:$3|non-redireición|non-redireiciones}})',
+'pageinfo-firstuser' => 'Creador de la páxina',
+'pageinfo-firsttime' => 'Data de creación de la páxina',
+'pageinfo-lastuser' => 'Caberu editor',
+'pageinfo-lasttime' => 'Data de la cabera edición',
+'pageinfo-edits' => "Númberu total d'ediciones",
+'pageinfo-authors' => "Númberu total d'autores distintos",
+'pageinfo-recent-edits' => "Númberu d'ediciones recientes (nos caberos $1)",
+'pageinfo-recent-authors' => "Númberu d'autores distintos recientes",
+'pageinfo-restriction' => 'Proteición de la páxina (<code>{{lcfirst:$1}}</code>)',
+'pageinfo-magic-words' => '{{PLURAL:$1|Pallabra máxica|Pallabres máxiques}} ($1)',
+'pageinfo-hidden-categories' => '{{PLURAL:$1|Categoría anubrida|Categoríes anubríes}} ($1)',
+'pageinfo-templates' => '{{PLURAL:$1|Plantía incluída|Plantíes incluíes}} ($1)',
 
 # Skin names
 'skinname-standard' => 'Clásicu',
@@ -2945,6 +2971,7 @@ Al executalu pues comprometer el to sistema.",
 'file-info-size-pages' => '$1 × $2 pixels, tamañu del ficheru: $3, triba MIME: $4, $5 {{PLURAL:$5|páxina|páxines}}',
 'file-nohires' => 'Nun ta disponible con mayor resolución.',
 'svg-long-desc' => 'ficheru SVG, $1 × $2 píxels nominales, tamañu de ficheru: $3',
+'svg-long-desc-animated' => 'Ficheru SVG animáu; nominalmente de $1 × $2 pixels; tamañu del ficheru: $3',
 'show-big-image' => 'Resolución completa',
 'show-big-image-preview' => "Tamañu d'esta previsualización: $1.",
 'show-big-image-other' => '{{PLURAL:$2|Otra resolución|Otres resoluciones}}: $1.',
@@ -2954,6 +2981,8 @@ Al executalu pues comprometer el to sistema.",
 '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}}',
+'file-no-thumb-animation' => "'''Nota: pola mor de llímites téunicos, les miniatures d'esti ficheru nun tan animaes.'''",
+'file-no-thumb-animation-gif' => "'''Nota: pola mor de llímites téunicos, les miniatures d'imaxes GIF d'alta resolución como esta nun tan animaes.'''",
 
 # Special:NewFiles
 'newimages' => "Galería d'imáxenes nueves",
index 6ad1280..0ff447d 100644 (file)
@@ -68,9 +68,9 @@ $specialPageAliases = 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__' ),
+       '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( ',' => '.', '.' => ',' );
index 3ec45e1..77b913b 100644 (file)
@@ -37,19 +37,20 @@ $namespaceNames = array(
        NS_TEMPLATE_TALK    => 'Ҡалып_буйынса_фекерләшеү',
        NS_HELP             => 'Белешмә',
        NS_HELP_TALK        => 'Белешмә_буйынса_фекерләшеү',
-       NS_CATEGORY         => 'ТөÑ\80көм',
-       NS_CATEGORY_TALK    => 'ТөÑ\80көм_буйынса_фекерләшеү',
+       NS_CATEGORY         => 'Ð\9aаÑ\82егоÑ\80иÑ\8f',
+       NS_CATEGORY_TALK    => 'Ð\9aаÑ\82егоÑ\80иÑ\8f_буйынса_фекерләшеү',
 );
 
 $namespaceAliases = array(
-       'Фекер_алышыу' => NS_TALK,
+       'Фекер_алышыу'                => NS_TALK,
        'Ҡатнашыусы_м-н_фекер_алышыу' => NS_USER_TALK,
-       '$1_б-са_фекер_алышыу' => NS_PROJECT_TALK,
-       'Рәсем_б-са_фекер_алышыу' => NS_FILE_TALK,
+       '$1_б-са_фекер_алышыу'        => NS_PROJECT_TALK,
+       'Рәсем_б-са_фекер_алышыу'     => NS_FILE_TALK,
        'MediaWiki_б-са_фекер_алышыу' => NS_MEDIAWIKI_TALK,
-       'Ҡалып_б-са_фекер_алышыу' => NS_TEMPLATE_TALK,
-       'Белешмә_б-са_фекер_алышыу' => NS_HELP_TALK,
-       'Категория' => NS_CATEGORY,
+       'Ҡалып_б-са_фекер_алышыу'     => NS_TEMPLATE_TALK,
+       'Белешмә_б-са_фекер_алышыу'   => NS_HELP_TALK,
+       'Төркөм'                      => NS_CATEGORY,
+       'Төркөм_буйынса_фекерләшеү'   => NS_CATEGORY_TALK,
        'Категория_б-са_фекер_алышыу' => NS_CATEGORY_TALK,
 );
 
index 9a40ea3..f106772 100644 (file)
@@ -34,59 +34,59 @@ $namespaceNames = array(
 );
 
 $magicWords = array(
-       'currentmonth'            => array( '1', 'BULANNGONYAN', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonthname'        => array( '1', 'NGARANBULANNGONYAN', 'CURRENTMONTHNAME' ),
-       'currentday'              => array( '1', 'ALDAWNGONYAN', 'CURRENTDAY' ),
-       'currentyear'             => array( '1', 'TAONNGONYAN', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'PANAHONNGONYAN', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'ORASNGONYAN', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'LOKALBULAN', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonthname'          => array( '1', 'NGARANLOKALBULAN', 'LOCALMONTHNAME' ),
-       'localday'                => array( '1', 'LOKALALDAW', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'LOKALALDAW2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'NGARANLOKALALDAW', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'LOKALTAON', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'LOKALPANAHON', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'LOKALORAS', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'NUMEROKANPAHINA', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'NUMEROKANARTIKULO', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'NUMEROKANDOKUMENTO', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'NUMEROKANPARAGAMIT', 'NUMBEROFUSERS' ),
-       'numberofedits'           => array( '1', 'NUMEROKANLIGWAT', 'NUMBEROFEDITS' ),
-       'pagename'                => array( '1', 'NGARANKANPAHINA', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'KAGNGARANKANPAHINA', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'NGARANESPASYO', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'KAGNGARANESPASYO', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'OLAYESPASYO', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'KAGOLAYESPASYO', 'TALKSPACEE' ),
-       'fullpagename'            => array( '1', 'TODONGNGARANKANPAHINA', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'KAGNGARANKANTODONGNGARANKANPAHINA', 'FULLPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'NGARANKANPAHINANINOLAY', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'KAGNGARANKANPAHINANINOLAY', 'TALKPAGENAMEE' ),
-       'msg'                     => array( '0', 'MSH', 'MSG:' ),
-       'img_right'               => array( '1', 'too', 'right' ),
-       'img_left'                => array( '1', 'wala', 'left' ),
-       'img_none'                => array( '1', 'mayò', 'none' ),
-       'img_center'              => array( '1', 'sentro', 'tangâ', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'nakakawadro', 'kwadro', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', 'daing kwadro', 'frameless' ),
-       'img_page'                => array( '1', 'pahina=$1', 'pahina $1', 'page=$1', 'page $1' ),
-       'localurl'                => array( '0', 'LOKALURL', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'LOKALURLE', 'LOCALURLE:' ),
-       'currentweek'             => array( '1', 'SEMANANGONYAN', 'CURRENTWEEK' ),
-       'localweek'               => array( '1', 'LOKALSEMANA', 'LOCALWEEK' ),
-       'plural'                  => array( '0', 'DAKOL:', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'TODONGURL:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'TODONGURLE:', 'FULLURLE:' ),
-       'language'                => array( '0', '#TATARAMON', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', 'TATARAMONKANLAOG', 'TATARAMONLAOG', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'numberofadmins'          => array( '1', 'NUMEROKANTAGAMATO', 'NUMBEROFADMINS' ),
-       'padleft'                 => array( '0', 'PADWALA', 'PADLEFT' ),
-       'padright'                => array( '0', 'PADTOO', 'PADRIGHT' ),
-       'filepath'                => array( '0', 'FILEDALAN', 'FILEPATH:' ),
-       'hiddencat'               => array( '1', '__NAKATAGONGKAT__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'PAHINASAKATEGORYA', 'PAHINASAKAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'PAHINASOKOL', 'PAGESIZE' ),
+       'currentmonth'              => array( '1', 'BULANNGONYAN', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonthname'          => array( '1', 'NGARANBULANNGONYAN', 'CURRENTMONTHNAME' ),
+       'currentday'                => array( '1', 'ALDAWNGONYAN', 'CURRENTDAY' ),
+       'currentyear'               => array( '1', 'TAONNGONYAN', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'PANAHONNGONYAN', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'ORASNGONYAN', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'LOKALBULAN', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonthname'            => array( '1', 'NGARANLOKALBULAN', 'LOCALMONTHNAME' ),
+       'localday'                  => array( '1', 'LOKALALDAW', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'LOKALALDAW2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'NGARANLOKALALDAW', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'LOKALTAON', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'LOKALPANAHON', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'LOKALORAS', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'NUMEROKANPAHINA', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'NUMEROKANARTIKULO', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'NUMEROKANDOKUMENTO', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'NUMEROKANPARAGAMIT', 'NUMBEROFUSERS' ),
+       'numberofedits'             => array( '1', 'NUMEROKANLIGWAT', 'NUMBEROFEDITS' ),
+       'pagename'                  => array( '1', 'NGARANKANPAHINA', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'KAGNGARANKANPAHINA', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'NGARANESPASYO', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'KAGNGARANESPASYO', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'OLAYESPASYO', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'KAGOLAYESPASYO', 'TALKSPACEE' ),
+       'fullpagename'              => array( '1', 'TODONGNGARANKANPAHINA', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'KAGNGARANKANTODONGNGARANKANPAHINA', 'FULLPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'NGARANKANPAHINANINOLAY', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'KAGNGARANKANPAHINANINOLAY', 'TALKPAGENAMEE' ),
+       'msg'                       => array( '0', 'MSH', 'MSG:' ),
+       'img_right'                 => array( '1', 'too', 'right' ),
+       'img_left'                  => array( '1', 'wala', 'left' ),
+       'img_none'                  => array( '1', 'mayò', 'none' ),
+       'img_center'                => array( '1', 'sentro', 'tangâ', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'nakakawadro', 'kwadro', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'daing kwadro', 'frameless' ),
+       'img_page'                  => array( '1', 'pahina=$1', 'pahina $1', 'page=$1', 'page $1' ),
+       'localurl'                  => array( '0', 'LOKALURL', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'LOKALURLE', 'LOCALURLE:' ),
+       'currentweek'               => array( '1', 'SEMANANGONYAN', 'CURRENTWEEK' ),
+       'localweek'                 => array( '1', 'LOKALSEMANA', 'LOCALWEEK' ),
+       'plural'                    => array( '0', 'DAKOL:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'TODONGURL:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'TODONGURLE:', 'FULLURLE:' ),
+       'language'                  => array( '0', '#TATARAMON', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'TATARAMONKANLAOG', 'TATARAMONLAOG', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'numberofadmins'            => array( '1', 'NUMEROKANTAGAMATO', 'NUMBEROFADMINS' ),
+       'padleft'                   => array( '0', 'PADWALA', 'PADLEFT' ),
+       'padright'                  => array( '0', 'PADTOO', 'PADRIGHT' ),
+       'filepath'                  => array( '0', 'FILEDALAN', 'FILEPATH:' ),
+       'hiddencat'                 => array( '1', '__NAKATAGONGKAT__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'PAHINASAKATEGORYA', 'PAHINASAKAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'PAHINASOKOL', 'PAGESIZE' ),
 );
 
 $specialPageAliases = array(
@@ -110,22 +110,23 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Paganaha an paghihirá kan seksyon sa paagi kan patoong pagpindot sa mga titulo kan seksyon (minakaipo nin JavaScript)',
 'tog-showtoc' => 'Ihayag an taytayan nin mga laog (para sa mga pahinang igwang sobra sa 3 pamayohan)',
 'tog-rememberpassword' => 'Giromdoma an sakong paglaóg sa kilyaw (browser) na ini (para sa maximum na $1 {{PLURAL:$1|aldaw|mga aldaw}})',
-'tog-watchcreations' => 'Idagdag sa mga pahina na ako an nagmukna sa sakong bantay-listahan',
-'tog-watchdefault' => 'Idagdag an mga pahina na ako an nagliwat sa sakong bantay-listahan',
-'tog-watchmoves' => 'Idagdag an mga pahina na ako an nagbalyo sa sakong bantay-listahan',
-'tog-watchdeletion' => 'Idagdag an mga pahina na ako an nagpura sa sakong bantay-listahan',
+'tog-watchcreations' => 'Idagdag an mga pahina na ako an nagmukna asin an mga sagunson na ako an nagkarga sa sakong bantay-listahan',
+'tog-watchdefault' => 'Idagdag an mga pahina asin mga sagunson na ako an nagliwat sa sakong bantay-listahan',
+'tog-watchmoves' => 'Idagdag an mga pahina asin mga sagunson na ako an nagbalyo sa sakong bantay-listahan',
+'tog-watchdeletion' => 'Idagdag an mga pahina asin mga sagunson na ako an nagpura sa sakong bantay-listahan',
 'tog-minordefault' => 'Markahán gabos na saradit na pagliwat sa paaging panugmad',
 'tog-previewontop' => 'Ipahilíng an patànaw bàgo an kahon nin paghirá',
 'tog-previewonfirst' => 'Ipahilíng an patànaw sa enot na paghirá',
 'tog-nocache' => 'Pundoha an pagsaray nin mga pahina sa kilyaw (browser)',
-'tog-enotifwatchlistpages' => 'E-koreohan ako kunsoarin an sarong pahina sa sakong bantay-listahan (watchlist) pinagribayan',
+'tog-enotifwatchlistpages' => 'E-suratan mo ako kunsoarin an sarong pahina o sagunson na yaon sa sakong bantay-listahan pinagliwat',
 'tog-enotifusertalkpages' => 'E-koreohan ako pag pigribáyan an pahina kan sakóng olay',
-'tog-enotifminoredits' => 'E-koreohan man giraray ako para sa saradit na paghirá kan mga pahina',
+'tog-enotifminoredits' => 'E-suratan man ako para sa saraditon na mga pagliwat kan mga pahina asin mga sagunson',
 'tog-enotifrevealaddr' => 'Ibuyágyag an sakong e-koreong address sa pan-abisong mga e-koreo',
 'tog-shownumberswatching' => 'Ihayag an numero kan nagbabantay na mga parágamit',
 'tog-oldsig' => 'Tugmadong pirma',
 'tog-fancysig' => 'Trataron an pirma na wiki-teksto (mayo nin awtomatikong kilyaw)',
-'tog-externaleditor' => 'Gamíta nguna an panluwas na editor (para sa mga eksperto sana, minakaipo nin espesyal na mga panuytoy (settings) sa saimong kompyuter.',
+'tog-externaleditor' => 'Gamiton an pirmihan na panluwas na editor (para sa mga eksperto sana, minakaipo nin espesyal na mga panuytoy sa saimong kompyuter.
+[//www.mediawiki.org/wiki/Manual:External_editors Mga dagdag na impormasyon.])',
 'tog-externaldiff' => 'Gamíta an panluwas na diff nguna (para sa mga eksperto sana, minakaipo nin espesyal na mga panuytoy (settings) sa saimong kompyuter.
 [//www.mediawiki.org/wiki/Manual:External_editors Kadagdagang impormasyon.])',
 'tog-showjumplinks' => 'Paganaha an "luksó sa" kilyaw nin kalangkayan',
@@ -359,6 +360,10 @@ $1',
 'youhavenewmessages' => 'Igwa ka nin $1 ($2).',
 'newmessageslink' => 'mga bàgong mensahe',
 'newmessagesdifflink' => 'huring pagbàgo',
+'youhavenewmessagesfromusers' => 'Ika igwa nin $1 gikan sa {{PLURAL:$3|ibang paragamit|$3 mga paragamit}} ($2).',
+'youhavenewmessagesmanyusers' => 'Ika igwa nin $1 gikan sa kadakol na mga paragamit ($2).',
+'newmessageslinkplural' => '{{PLURAL:$1|sarong bagong mensahe|bagong mga mensahe}}',
+'newmessagesdifflinkplural' => 'huring {{PLURAL:$1|kaliwatan|mga kaliwatan}}',
 'youhavenewmessagesmulti' => 'Igwa ka nin mga bàgong mensahe sa $1',
 'editsection' => 'liwatón',
 'editold' => 'Liwatón',
@@ -411,12 +416,12 @@ Pwede mong mahiling an lista nin mga marhay na pahina sa [[Special:SpecialPages|
 # General errors
 'error' => 'Salâ',
 'databaseerror' => 'Salâ sa base nin datos',
-'dberrortext' => 'Sarong datos-sarayan na may napasalang sintaks an nangyari.
-Ini puwedeng minapanungod nin sarong kubol (bug) sa software.
+'dberrortext' => 'May kahaputan sa datos-sarayan sa napasalang sintaks an nangyari.
+Ini puwedeng minapanungod nin sarong kubol na yaon sa kasungatan .
 An pinakahuring pagprubar sa datos-sarayan naghahapot nin:
 <blockquote><tt>$1</tt></blockquote>
-hale sa laog kan punksyon na "<tt>$2</tt>".
-An datos-sarayan nagbalik nin sala na "<tt>$3: $4</tt>".',
+gikan sa laog kan punksyon na "<tt>$2</tt>".
+An pinagbalik na kasalaan sa datos-sarayan "<tt>$3: $4</tt>".',
 'dberrortextcl' => 'Sarong datos-sarayan na may napasalang sintaks an nangyari.
 An pinakahuring pagprubar sa datos-sarayan naghahapot nin:
 "$1"
@@ -428,11 +433,11 @@ An datos-sarayan nagbalik nin sala na "<tt>$3: $4</tt>".',
 'readonlytext' => 'Sarado mùna an base nin datos sa mga bàgong entrada asin iba pang mga pagribay, pwede gayod sa rutinang pagmantenir kan base nin datos, despues, mabalik na ini sa normal.
 
 Ini an eksplikasyon kan tagamató na nagkandado kaini: $1',
-'missing-article' => 'An datos-sarayan dae nakanagbo kan teksto nin sarong pahina na dapat kuta nang managboan, pinagngaran na "$1" S2.
+'missing-article' => 'An datos-sarayan dae nakanagbo nin teksto kan sarong pahina na dapat kuta nang managboan, pinagngaran na "$1" $2.
 
-Ini pirmeng pinagkakausa sa paagi nin pagsusunod nin sarong lumang diff o historiyang kilyawan na yaon sa sarong pahinang pinagpura na.
+Ini pirmeng pinagkakausa sa paagi nin pagsusunod nin sarong lumaon na diff o historiyang kasugpunan na yaon sa sarong pahinang pinagpura na.
 
-Kun iyo ini an kaso, ika nakanagbo nin sarong kubol (bug) sa software.
+Kun bako ini an kaso, ika nakanagbo nin sarong kubol sa kasungatan.
 Pakireport tabi ini sa [[Special:ListUsers/sysop|administrador]], na naka-antabay sa kilyawan.',
 'missingarticle-rev' => '(pagbàgo#: $1)',
 'missingarticle-diff' => '(Kaibhán: $1, $2)',
@@ -511,6 +516,7 @@ Dae ka man tabi malingaw na ribayan an saimong [[Special:Preferences|{{SITENAME}
 'remembermypassword' => 'Giromdoma an sakong paglaog sa kilyaw (browser) na ini (para sa maksimum na $1 {{PLURAL:$1|aldaw|mga aldaw}})',
 'securelogin-stick-https' => 'Magpirmeng konektado sa HTTPS matapos kang maglaog',
 'yourdomainname' => 'An saimong kasakupan:',
+'password-change-forbidden' => 'Ika dae makapagliwat nin sekretong panlaog sa wiking ini.',
 'externaldberror' => 'Igwa gayod sala sa arinman kan patunay sa datos-sarayan o ika dae pinagtugutan na bâgohon an saimong panluwas na panindog.',
 'login' => 'Maglaog',
 'nav-login-createaccount' => 'Maglaog / magmukna nin panindog',
@@ -715,7 +721,7 @@ Ika dae makakagamit kan 'e-koreo kaining paragamit' na panuytuyan laen lang na m
 An saimong presenteng IP address iyo $3, asin an kubkob ID iyo #$5.
 Pakibale na lang tabi an gabos na mga detalye sa itaas sa anuman na mga kahaputan na saimong himoon.",
 'autoblockedtext' => 'An saimong IP address awtomatikong pinagkubkob nin huli ta ini pinaggamit kan ibang paragamit, na pinagkubkob ni $1.
-An rason na ipinagtao iyo:
+An rason na ipinagtao iyo na:
 
 :\'\'$2\'\'
 
@@ -723,12 +729,12 @@ An rason na ipinagtao iyo:
 * Pagpasó kan pagkubkob: $6
 * Katuyuhan kan parakubkob: $7
 
-Puwede mong kontakon si $1 o saro sa [[{{MediaWiki:Grouppage-sysop}}|mga administrador] tanganing pag-orolayan an kubkob.
+Puwede mong kontakon si $1 o saro sa [[{{MediaWiki:Grouppage-sysop}}|mga administrador]] tanganing pag-orolayan an kubkob.
 
 Patanid tabi dae mo puwedeng gamiton an "e-koreo kaining paragamit" estima laen lang kun ika igwa nin sarong balidong e-koreo address na rehistrado sa saimong [[Special:Preferences|paragamit na mga kabotan]] asin ika dae pinagkubkob para sa paggamit kaini.
 
 An saimong presenteng IP address iyo an $3, asin and Kubkob ID iyo an #$5.
-Pakibale tabi an gabos na mga detalye sa itaas sa anuman na mga kahaputan na saimong himoon.',
+Pakibale tabi an gabos na mga detalye sa itaas sa arinman na mga kahaputan na saimong himoon.',
 'blockednoreason' => 'mayong itinaong rason',
 'whitelistedittext' => 'Kaipuhan mong $1 tangarig makahirá nin mga páhina.',
 'confirmedittext' => "Kaipuhan mong kompirmaron an saimong ''e''-surat. Ipwesto tabî asin patunayan an saimong ''e''-surat sa [[Special:Preferences|mga kabôtan kan parágamit]].",
@@ -758,17 +764,20 @@ o [{{fullurl:{{FULLPAGENAME}}|action=edit}} liwaton ining pahina]</span>.',
 'noarticletext-nopermission' => 'Mayo tabi sa presente nin teksto sa pahinang ini.
 Ika mapuwedeng [[Special:Search/{{PAGENAME}}|maghanap para sa titulo kan pahinang ini]] sa iba pang mga pahina,
 o <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} maghanap sa magkasurundong mga talaan]</span>.',
+'missing-revision' => 'An rebisyon #$1 kan pahina pinagngaranan na "{{PAGENAME}}" bakong eksistido.
+
+Ini pirmihan na pinagkakausa sa paagi nin pagsusunod nin luwas na petsang historiya nin kasugpunan pasiring sa sarong pahinang pinagpura na.
+An mga detalye matatagboan sa [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} pinagpura na talaan].',
 'userpage-userdoesnotexist' => 'Paragamit na panindog "$1" bako tabing rehistrado.
 Paki-tsek kun ika magustong magmukna/magliwat kaining pahina.',
 'userpage-userdoesnotexist-view' => 'Paragamit na panindog "$1" bako tabing rehistrado.',
 'blocked-notice-logextract' => 'Ining paragamit sa presente nakakubkob.
 An pinakahuring entrada kan pagkubkob nakahaya sa ibaba bilang reperensiya:',
-'clearyourcache' => "'''Note:''' Matapos maitagama, ika mapuwedeng makaluktos sa tagoan kan saimong kilyaw tanganing mahiling an mga naribayan.
-* '''Firefox / Safari:''' Pauntok na duon sa ''Shift'' habang pinipindot an ''Ikarga otro'', o pinduton as maski arin sa ''Ctrl-F5'' o ''Ctrl-R'' (''⌘-R'' para sa Mac)
+'clearyourcache' => "'''Antabay:''' Matapos maitagama, ika mapuwedeng magsalimbaw sa sarayan kan saimong kilyaw tanganing hilingon an mga naribayan.
+* '''Firefox / Safari:''' Pauntok na duon ''Shift'' habang pig-klik an ''Ikarga otro'', o pinduton an maski arin ''Ctrl-F5'' o ''Ctrl-R'' (''⌘-R'' para sa Mac)
 * '''Google Chrome:''' Pinduton ''Ctrl-Shift-R'' (''⌘-Shift-R'' para sa Mac)
-* '''Internet Explorer:''' Pauntok na duon sa ''Ctrl'' habang pinipindot an ''Ipresko otro'', o pinduton an ''Ctrl-F5''
-* '''Konqueror:''' Ipindot an ''Ikarga otro'' o pinduton an ''F5''
-* '''Opera:''' Linigan an tagoan sa ''Tools → Mga Kabotan''",
+* '''Internet Explorer:''' Pauntok na duon ''Ctrl'' habang pig-klik an ''Ipresko otro'', o pinduton ''Ctrl-F5''
+* '''Opera:''' Linigan an sarayan sa ''Mga Kagamitan → Mga Kabotan''",
 'usercssyoucanpreview' => "'''Tip:''' Gamita an \"{{int:showpreview}}\" na pindutan tanganing prubaran an saimong baguhong CSS bago ipagtagama.",
 'userjsyoucanpreview' => "'''Tip:''' Gamita an \"{{int:showpreview}}\" na pindutan tanganing prubaran an saimong baguhong JavaScript bago ipagtagama.",
 'usercsspreview' => "'''Giromdoma baya na ika nagtatanaw pa sana kan saimong paragamit sa CSS.'''
@@ -884,12 +893,13 @@ Ining mga argumento tabi pinagharali na.",
 'expansion-depth-exceeded-warning' => 'An pahina nagsobra sa panrarom na kalakbangan',
 'parser-unstrip-loop-warning' => 'Panul-ot na kaluktusan namansayan',
 'parser-unstrip-recursion-limit' => 'Panul-ot na rekusyong kasagkodan nagsobra ($1)',
+'converter-manual-rule-error' => 'Kasalaan detektado sa manwal na konbersyon kan pinapasunod sa lengguwahe',
 
 # "Undo" feature
 'undo-success' => 'Pwedeng bawion an paghirá. Sosogon tabì an pagkakaiba sa babâ tangarig maberipikár kun ini an boot mong gibohon, dangan itagama an mga pagbabàgo sa babâ tangarig tapuson an pagbawì sa paghirá.',
 'undo-failure' => 'Dai napogol an paghirá ta igwa pang ibang paghirá sa tahaw na nagkokomplikto.',
 'undo-norev' => 'An pagliwat dae tabi magigibo nin huli ta ini bakong eksistido o pinagpura na.',
-'undo-summary' => 'Ibalik tabi an pinagbabago $1 sa paagi [[Special:Contributions/$2|$2]] ([[Paragamit na Olay:$2|olay]])',
+'undo-summary' => 'Dae idagos an rebisyon $1 sa [[Special:Contributions/$2|$2]] ([[User talk:$2|olay]])',
 
 # Account creation failure
 'cantcreateaccounttitle' => 'Dai makagibo nin account',
@@ -934,7 +944,7 @@ Probaran tabì an [[Special:Search|pighahanap sa wiki]] para sa mga pahinang dap
 'rev-deleted-comment' => '(pagliwat na sumaryo pinaghale)',
 'rev-deleted-user' => '(hinalì an parágamit)',
 'rev-deleted-event' => '(talaan kan aksyon pinaghale)',
-'rev-deleted-user-contribs' => 'Paragamit na ngaran o IP address pinaghale - an pigliwat pinagtago gikan sa mga kontribusyon]',
+'rev-deleted-user-contribs' => '[Ngaran nin paragamit o IP address pinaghale - an pigliwat pinagtago gikan sa mga kontribusyon]',
 'rev-deleted-text-permission' => "An pinagbago tabi kaining pahina '''pinagpura'''.
 An mga detalye mananagboan sa [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} talaan kan pinagpura].",
 'rev-deleted-text-unhide' => "An pagbabago tabi kaining pahina '''pinagpura'''.
@@ -953,9 +963,9 @@ Mga detalye puwedeng managboan sa [{{fullurl:{{#Special:Log}}/delete|page={{FULL
 'rev-deleted-unhide-diff' => "Saro sa mga pagbabago kaining diff '''pinagpura'''.
 Mga detalye mapuwedeng managboan sa [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} talaan kan pinuraan].
 Ika mapuwede pa [$1 magtanaw kaining diff] kun ika nagmawot na magpadagos.",
-'rev-suppressed-unhide-diff' => "Saro sa mga pagbabago kaining diff '''pinaglubog'''.
-Mga detalye mapuwedeng managboan sa [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} talaan kan pinaglubog].
-Ika mapuwede pa man na [$1 matanaw ining diff] kun ika mawot na magdagos.",
+'rev-suppressed-unhide-diff' => "Saro sa mga rebisyon kaining diff '''pinaglubog'''.
+Mga detalye mapuwedeng managboan sa [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} pinaglubog na talaan].
+Ika mapuwede man na [$1 tanawon ining diff] kun ika mawot na magpadagos.",
 'rev-deleted-diff-view' => "Saro sa mga pinagbago kaining diff '''pinagpura'''.
 Ika makakapagtanaw kaining diff; mga detalye puwedeng mananagboan sa [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} talaan kan pinuraan].",
 'rev-suppressed-diff-view' => "Saro sa mga pinagbago kaining diff '''pinaglubog'''.
@@ -1039,9 +1049,9 @@ Himoon mong segurado na ining pagbabago makapagtala nin historikal na kapadagusa
 'mergehistory-from' => 'Gikanang pahina:',
 'mergehistory-into' => 'Destinasyong pahina:',
 'mergehistory-list' => 'Puwedeng maitiripon na historiya kan pagliwat',
-'mergehistory-merge' => 'An mga minasunod na mga pagbabago sa [[:$1]] mapuwedeng pagtiriponon na magin [[:$2]].
-Gamita an radyong pindutan sa kolum tanganing tiriponon sana an mga pagbabagong pinagmukna asin bago pa man an pinaghahayag na oras.
-Tandaan na an paggagamit kan nabigasyong kilyawan makakapaglapat giraray kaining kolum.',
+'mergehistory-merge' => 'An mga minasunod na mga rebisyon kan [[:$1]] mapuwedeng pagkasararoon na magin [[:$2]].
+Gamita an radyong pindutan sa kolum tanganing sararoon sana an mga rebisyon na pinagmukna sa asin bago pa man an pinagsambit na oras.
+Tandaan na an paggagamit kan nabigasyong nin mga kasurugponan makakapagliwat kaining kolum.',
 'mergehistory-go' => 'Ipahayag an mapuwedeng matiripon na mga pagliwat',
 'mergehistory-submit' => 'Tiripona an mga pagbabago',
 'mergehistory-empty' => 'Mayong mga pagbabago na puwedeng mapagtiripon.',
@@ -1073,6 +1083,10 @@ Tandaan na an paggagamit kan nabigasyong kilyawan makakapaglapat giraray kaining
 'editundo' => 'isulít',
 'diff-multi' => '({{PLURAL:$1|Saro intermediate na pagbabago|$1 mga intermediate na mga pagbabago}} by {{PLURAL:$2|sarong paragamit|$2 mga paragamit}} dae pinaghahayag)',
 'diff-multi-manyusers' => '({{PLURAL:$1|Sarong intermediate na pagbabago|$1 mga intermediate na mga pagbabago}} na sobra sa $2 {{PLURAL:$2|paragamit|mga paragamit}} dae pinaghahayag)',
+'difference-missing-revision' => '{{PLURAL:$2|sarong rebisyon|$2 mga rebisyon}} kaining diperensiya ($1) {{PLURAL:$2|na iyo an|kaidto na iyo an}} dae nanagboan.
+
+Ini pirmihan na pinagkakausa sa paagi nin pagsusunod nin luwas sa petsang diff na kasugponan pasiring sa sarong pahina na pinagpura na.
+An mga detalye mapuwedeng matatagboan sa [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} talaan kan pinagpuraan].',
 
 # Search results
 'searchresults' => 'Resulta kan paghánap',
@@ -1087,21 +1101,56 @@ Tandaan na an paggagamit kan nabigasyong kilyawan makakapaglapat giraray kaining
 'notextmatches' => 'Mayong ángay na teksto nin páhina',
 'prevn' => 'dating {{PLURAL:$1|$1}}',
 'nextn' => 'sunód na {{PLURAL:$1|$1}}',
+'prevn-title' => 'Dati $1 {{PLURAL:$1|resulta|mga resulta}}',
+'nextn-title' => 'Sunod $1  {{PLURAL:$1|resulta|mga resulta}}',
+'shown-title' => 'Ipahiling $1  {{PLURAL:$1|resulta|mga resulta}} sa kada pahina',
 'viewprevnext' => 'Hilingón ($1 {{int:pipe-separator}} $2) ($3)',
+'searchmenu-legend' => 'Opsyon sa paghahanap',
+'searchmenu-exists' => "'''Igwa nin sarong pahina na pinagngaranan na \"[[:\$1]]\" sa wiking ini.'''",
+'searchmenu-new' => "'''Muknaon an pahina \"[[:\$1]]\" sa wiking ini!'''",
 'searchhelp-url' => 'Help:Mga laog',
+'searchmenu-prefix' => '[[Special:PrefixIndex/$1|Kilyawon an mga pahina sa paagi kainin enotang panigmit]]',
+'searchprofile-articles' => 'Mga pahina nin laog',
+'searchprofile-project' => 'Mga pahina nin Tabang asin Proyekto',
+'searchprofile-images' => 'Multimidya',
 'searchprofile-everything' => 'Gabós',
+'searchprofile-advanced' => 'Adbansiyado',
 'searchprofile-articles-tooltip' => 'Hanapon sa $1',
+'searchprofile-project-tooltip' => 'Maghanap sa $1',
+'searchprofile-images-tooltip' => 'Maghanap nin mga sagunson',
+'searchprofile-everything-tooltip' => 'Maghanap nin gabos na laog (kabali an mga pahina nin olay)',
+'searchprofile-advanced-tooltip' => 'Maghanap nin pankustombreng espasyong-ngaran',
 'search-result-size' => '$1 ({{PLURAL:$2|1 tatarámon|$2 mga tatarámon}})',
+'search-result-category-size' => '{{PLURAL:$1|1 miyembro|$1 mga miyembro}} ({{PLURAL:$2|1 subkategorya|$2 mga subkategorya}}, {{PLURAL:$3|1 sagunson|$3 mga sagunson}})',
+'search-result-score' => 'Relebansiya: $1%',
+'search-redirect' => '(Panukdong otro $1)',
+'search-section' => '(Seksyon $1)',
 'search-suggest' => 'Boót mo iyó: $1',
+'search-interwiki-caption' => 'Tugang na mga proyekto',
+'search-interwiki-default' => '$1 na mga resulta:',
 'search-interwiki-more' => '(dakol pa)',
 'search-mwsuggest-enabled' => 'igwang mga suhestyon',
 'search-mwsuggest-disabled' => 'mayong suhestyon',
+'search-relatedarticle' => 'Kauyon',
+'mwsuggest-disable' => 'Pundohon an AJAX na mga suhestiyon',
+'searcheverything-enable' => 'Maghanap sa gabos na mga espasyong-ngaran',
+'searchrelated' => 'kauyon',
 'searchall' => 'gabós',
 'showingresults' => "Pigpapahiling sa babâ sagkod sa {{PLURAL:$1|'''1''' resulta|'''$1''' mga resulta}} poon sa #'''$2'''.",
 'showingresultsnum' => "Pigpapahiling sa babâ {{PLURAL:$3|'''1''' resulta|'''$3''' mga resulta}} poon sa #'''$2'''.",
-'nonefound' => "'''Pagiromdom''': An mga prakasong paghanap pirmeng kawsa kan paghanap kan mga tataramon na komún arog kan \"may\" asin \"sa\", huli ta an mga ini dai nakaíndise, o sa pagpili kan sobra sa sarong tataramon (an mga páhina sana na igwá kan gabos na pighahanap na tataramon an maipapahiling sa resulta).",
-'powersearch' => 'Pinaoróg na paghánap',
+'showingresultsheader' => "{{PLURAL:$5|Resulta '''$1''' kan '''$3'''|Mga Resulta '''$1 - $2''' kan '''$3'''}} para sa '''$4'''",
+'nonefound' => "'''Notang Antabay''': An ibang espasyong-ngaran sana an pirmihang pinaghahanap.
+Prubaran na panigmitan an saimong kahaputan nin ''all:'' sa paghanap kan gabos na laog (kabali an mga pahina nin olay, mga templato, etc), o gamiton an pinagmawot na espasyong ngaran bilang enotang panigmit.",
+'search-nonefound' => 'Mayo nin mga resulta na panampok sa kahaputan.',
+'powersearch' => 'Adbansiyadong paghahanap',
+'powersearch-legend' => 'Adbansiyadong paghahanap',
+'powersearch-ns' => 'Maghanap sa mga espasyong-ngaran:',
+'powersearch-redir' => 'Listahan kan mga panukdong otro',
 'powersearch-field' => 'Hanápon an',
+'powersearch-togglelabel' => 'Pamili:',
+'powersearch-toggleall' => 'Gabos',
+'powersearch-togglenone' => 'Wara',
+'search-external' => 'Panluwas na paghahanap',
 'searchdisabled' => 'Pigpopogolan mûna an paghanap sa {{SITENAME}}. Mientras tanto, pwede ka man maghanap sa Google. Giromdomon tabî na an mga indise kan laog ninda sa {{SITENAME}} pwede ser na lumâ na.',
 
 # Quickbar
@@ -1111,37 +1160,57 @@ Tandaan na an paggagamit kan nabigasyong kilyawan makakapaglapat giraray kaining
 'qbsettings-fixedright' => 'Nakatakód sa tûo',
 'qbsettings-floatingleft' => 'Naglálatáw sa walá',
 'qbsettings-floatingright' => 'Naglálatáw sa tûo',
+'qbsettings-directionality' => 'Nakadukot, minadepende sa skrip panukdoan kan saimong lengguwahe',
 
 # Preferences page
 'preferences' => 'Mga kabòtan',
 'mypreferences' => 'Mga kabòtan ko',
 'prefs-edits' => 'Bilang kan mga hirá:',
 'prefsnologin' => 'Dai nakalaog',
-'prefsnologintext' => 'Ika dapat si [[Special:UserLogin|nakalaog]] para makapwesto nin mga kabôtan nin parágamit.',
+'prefsnologintext' => 'Ika dapat na magin <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} nakalaog na]</span> tanganing tuytuyon an mga kabotan nin paragamit.',
 'changepassword' => 'Ribayan an sekretong panlaog',
 'prefs-skin' => "''Skin''",
 'skin-preview' => 'Tânawon',
 'datedefault' => 'Mayong kabôtan',
+'prefs-beta' => 'Mga posturang yaon sa beta',
 'prefs-datetime' => 'Petsa asin oras',
+'prefs-labs' => 'Mga posturang yaon sa Labs',
+'prefs-user-pages' => 'Paragamit na mga pahina',
 'prefs-personal' => 'Pambisto nin parágamit',
 'prefs-rc' => 'Mga kaaagi pa sanang pagribay',
 'prefs-watchlist' => 'Pigbabantayan',
-'prefs-watchlist-days' => 'Máximong número nin mga aldaw na ipapahiling sa lista nin mga pigbabantayan:',
+'prefs-watchlist-days' => 'Mga aldaw na ipahiling sa batay-listahan:',
+'prefs-watchlist-days-max' => 'Maksimum $1 {{PLURAL:$1|aldaw|mga aldaw}}',
 'prefs-watchlist-edits' => 'Máximong número nin pagbabâgo na ipapahiling sa pinadakulang lista nin pigbabantayan:',
+'prefs-watchlist-edits-max' => 'Maksimum na numero: 1000',
+'prefs-watchlist-token' => 'Token sa Bantay-listahan:',
 'prefs-misc' => 'Lain',
+'prefs-resetpass' => 'Liwaton an sekretong panlaog',
+'prefs-changeemail' => 'Liwaton an e-surat na adres',
+'prefs-setemail' => 'Tuytuyon an e-surat na adres',
+'prefs-email' => 'E-surat na mga pagpipilian',
+'prefs-rendering' => 'Hitsurahon',
 'saveprefs' => 'Itagama',
-'resetprefs' => 'Ipwesto giraray',
+'resetprefs' => 'Linigan an dae naitagamang mga kaliwatan',
+'restoreprefs' => 'Ibalik an gabos na pirmihang mga panuytoy',
 'prefs-editing' => 'Pighihira',
+'prefs-edit-boxsize' => 'Sukol kan bintana sa pagliwat.',
 'rows' => 'Mga hilera:',
 'columns' => 'Mga taytay:',
 'searchresultshead' => 'Hanápon',
 'resultsperpage' => 'Mga tamà kada pahina:',
 'stub-threshold' => 'Kasagkoran kan <a href="#" class="stub">takod kan tambô</a> pigpopormato:',
+'stub-threshold-disabled' => 'Pinagpundo',
 'recentchangesdays' => 'Mga aldáw na ipapahilíng sa mga nakakaági pa sanáng pagbabàgó:',
-'recentchangescount' => 'Bilang nin mga paghirá na ipapahilíng sa mga nakakaági pa sanáng pagbabàgó:',
+'recentchangesdays-max' => 'Maksimum $1 {{PLURAL:$1|aldaw|mga aldaw}}',
+'recentchangescount' => 'Numero kan mga pagliliwat na ipapahiling na pirmihan:',
+'prefs-help-recentchangescount' => 'Kabali kaini an dae pa nahaloy na mga kaliwatan, mga historiyang pahina, asin mga talaan.',
+'prefs-help-watchlist-token' => 'An pagpapano sa parteng ini nin sarong sekretong susi magbubuswang nin RSS feed para sa saimong bantay-listahan.
+Siisay man na nakakaaram kan suri sa parteng ini makakabasa kan saimong bantay-listahan, kaya magpili nin sarong seguradong halaga.
+Uya an halaga sa random na pagbuswang na puwede mong magamit: $1',
 'savedprefs' => 'Itinagama na an mga kabôtan mo.',
-'timezonelegend' => 'Zona nin oras',
-'localtime' => 'Lokal na oras',
+'timezonelegend' => 'Pan-oras na sona:',
+'localtime' => 'Panlokal na oras:',
 'timezoneuseserverdefault' => 'Gamita an panugmad sa wiki ($1)',
 'timezoneuseoffset' => 'Iba pa (ihayag an pambawi)',
 'timezoneoffset' => 'Bawia¹:',
@@ -1169,22 +1238,38 @@ Tandaan na an paggagamit kan nabigasyong kilyawan makakapaglapat giraray kaining
 'prefs-reset-intro' => 'Ika makakagamit kaining pahina tanganing ilapat giraray an saimong mga kabotan sa panugmad kan sayt.
 Ini dae tabi matitingkog.',
 'prefs-emailconfirm-label' => 'Kumpirmasyon sa E-koreo',
+'prefs-textboxsize' => 'Sukol kan bintana sa pagliliwat',
 'youremail' => 'E-koreo:',
 'username' => 'Pangaran kan parágamit:',
 'uid' => 'ID kan parágamit:',
 'prefs-memberingroups' => 'Miembro kan {{PLURAL:$1|grupo|grupos}}:',
+'prefs-registration' => 'Rehistrasyong oras:',
 'yourrealname' => 'Totoong pangaran:',
 'yourlanguage' => 'Tataramon:',
-'yourvariant' => 'Bariante:',
-'yournick' => 'Gahâ:',
+'yourvariant' => 'Panlaog na lengguwaheng kairibanhan:',
+'prefs-help-variant' => 'Saimong pinagpiling kairibanhan o ortograpiya tanganing ipahiling an laog kaining mga pahina sa wiking ini.',
+'yournick' => 'Panibagong pirma:',
+'prefs-help-signature' => 'Mga komentaryo sa mga pahina nin olay dapat pirmado nin "<nowiki>~~~~</nowiki>" na pagriribayon na magin saimong pirma asin sarong panimbreng oras.',
 'badsig' => 'Dai pwede an bâgong pirmang ini; isúsog an mga HTML na takód.',
-'badsiglength' => 'Halabâon an gahâ; kaipuhan dai mababà sa $1 na mga karakter.',
+'badsiglength' => 'An saimong pirma grabe kahalabaon.
+Ini dapat dae magsobra sa $1 {{PLURAL:$1|karakter|mga karakter}} an laba.',
+'yourgender' => 'Pagkatawo:',
+'gender-unknown' => 'Dae nakasambit',
 'gender-male' => 'Lalaki',
 'gender-female' => 'Babai',
+'prefs-help-gender' => 'Opsyonal: Ginagamit para sa pagkatawong pag-apod sa paagi nin kasungatan.
+Ining impormasyon magigin pampubliko.',
 'email' => 'E-koreo',
 'prefs-help-realname' => 'Opsyonal an totoong pangaran asin kun itatao mo ini, gagamiton ini yangarig an mga sinurat mo maatribuir saimo.',
-'prefs-help-email' => 'Opsyonal an e-koreo, alagad pwede ka na masosog kan iba sa paagi kan saimong pahina o pahina nin olay na dai kinakaipuhan na ipabisto an identidad mo.',
+'prefs-help-email' => 'An e-surat na adres sarong opsyonal, alagad ini kinakaipohan para sa pagtuytoy otro kan sekretong panlaog, kun ika malingaw kan saimong sekretong panlaog.',
+'prefs-help-email-others' => 'Ika kan man pumili na magtugot sa iba na makontak ka sa e-surat sa paagi nin sarong kasugponan na yaon sa saimong pahina nin paragamit o olay.
+An saimong e-surat na adres dae ipagbuyagyag kunsoarin na an ibang paragamit makontak saimo.',
 'prefs-help-email-required' => 'Kaipuhan an e-koreo.',
+'prefs-info' => 'Panuntong na impormasyon',
+'prefs-i18n' => 'Internasyonalisasyon',
+'prefs-signature' => 'Pirma',
+'prefs-dateformat' => 'Pampetsang pormat',
+'prefs-timeoffset' => 'Pan-oras na tapal',
 'prefs-advancedrc' => 'Pangenot na mga pagpipilian',
 'prefs-advancedrendering' => 'Abantidong mga pagpipilian',
 'prefs-advancedsearchoptions' => 'Abantidong mga pagpipilian',
@@ -2529,7 +2614,7 @@ Please visit [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] and
 'import-invalid-interwiki' => 'Dae makakapag-importa gikan sa pinagsambit na wiki.',
 'import-error-edit' => 'An pahina "$1" bakong importado nin huli ta ika dae tinutugutan na magliliwat kaini.',
 'import-error-create' => 'An pahina "$1" bakong importado nin huli ta ika dae tinutugutan na magmumukna kaini.',
-'import-error-interwiki' => 'An pahina "$!" bakong importado nin huli ta an ngaran kaini reserbado para sa panluwas na kasugponan (interwiki).',
+'import-error-interwiki' => 'An pahina "$1" bakong importado nin huli ta an ngaran kaini reserbado para sa panluwas na kasugponan (interwiki).',
 'import-error-special' => 'An pahina "$1" bakong importado nin huli ta ini kabali sa espesyal an espasyong-ngaran na dae nagtutugot nin mga pahina.',
 'import-error-invalid' => 'An pahina "$1" bakong importado nin huli ta an ngaran kaini imbalido.',
 'import-options-wrong' => 'Salang {{PLURAL:$2|pagpipilian|mga pagpipilian}}: <nowiki>$1</nowiki>',
@@ -2659,7 +2744,10 @@ Ini hurot na pinagkausa nin sarong sugpunan pasiring sa sarong pinagbawal na pan
 
 # Info page
 'pageinfo-title' => 'Impormasyon para sa "$1"',
-'pageinfo-header-edits' => 'Mga pagliliwat',
+'pageinfo-header-basic' => 'Panuntungang impormasyon',
+'pageinfo-header-edits' => 'Pagliwat na historiya',
+'pageinfo-header-restrictions' => 'Pampahinang proteksyon',
+'pageinfo-header-properties' => 'Pampahinang propriyedades',
 'pageinfo-views' => 'Numero kan mga patanaw',
 'pageinfo-watchers' => 'Numero kan mga parabantay',
 'pageinfo-edits' => 'Numero kan mga pagliliwat',
@@ -2807,94 +2895,402 @@ An mga iba pagtatagoon sa paagi nin pirmehan.
 'exif-contrast' => 'Kontraste',
 'exif-imageuniqueid' => 'Unikong ID kan ladawan',
 'exif-gpstrack' => 'Direksyon kan paghirô',
+'exif-gpsimgdirectionref' => 'Reperensiya para sa direksyon kan imahe',
 'exif-gpsimgdirection' => 'Direksyon kan ladáwan',
+'exif-gpsmapdatum' => 'Heodetikong surbey an datos na pinaggamit',
+'exif-gpsdestlatituderef' => 'Reperensiya para sa panlatitud na destinasyon',
+'exif-gpsdestlatitude' => 'Panlatitud na destinasyon',
+'exif-gpsdestlongituderef' => 'Reperensiya para sa panlongitud na destination',
+'exif-gpsdestlongitude' => 'Panlongitud na destinasyon',
+'exif-gpsdestbearingref' => 'Reperensiya para sa pandireksyon na destinasyon',
+'exif-gpsdestbearing' => 'Pandireksyon na destinasyon',
+'exif-gpsdestdistanceref' => 'Reperensiya para sa pandistansiya na destinasyon',
 'exif-gpsdestdistance' => 'Distansya sa destinasyon',
+'exif-gpsprocessingmethod' => 'Ngaran kan GPS na pamprosesong kapaagihan',
+'exif-gpsareainformation' => 'Ngaran nin lugar kan GPS',
+'exif-gpsdatestamp' => 'Petsa kan GPS',
+'exif-gpsdifferential' => 'Diperensiyal na koreksyon kan GPS',
+'exif-jpegfilecomment' => 'Komentaryo sa JPEG na sagunson',
+'exif-keywords' => 'Mga Susing taramon',
+'exif-worldregioncreated' => 'Rehiyon kan kinaban na pinagkuanan kan litrato',
+'exif-countrycreated' => 'Nasyon na pinagkuanan kan litrato',
+'exif-countrycodecreated' => 'Koda para sa nasyon na pinagkuanan kan litrato',
+'exif-provinceorstatecreated' => 'Probinsiya o estado na pinagkuanan kan litratro',
+'exif-citycreated' => 'Siyudad na pinagkuanan kan litrato',
+'exif-sublocationcreated' => 'Sublokasyon kan siyudad na pinagkuanan kan litrato',
+'exif-worldregiondest' => 'Rehiyon kan kinaban pinapahiling',
+'exif-countrydest' => 'Nasyon ipinapahiling',
+'exif-countrycodedest' => 'Koda para sa nasyon na ipinahiling',
+'exif-provinceorstatedest' => 'Probinsiya o estadong ipinapahiling',
+'exif-citydest' => 'Siyudad ipinahiling',
+'exif-sublocationdest' => '
+Sublokas kan siyudad na ipinahiling',
+'exif-objectname' => 'Halipot na titulo',
+'exif-specialinstructions' => 'Espesyal na mga instruksyon',
+'exif-headline' => 'Pamayuhang-linya',
+'exif-credit' => 'Pautang/Tagapagtao',
+'exif-source' => 'Pinaggikanan',
+'exif-editstatus' => 'Editoryal na kamugtakan kan imahe',
+'exif-urgency' => 'Kahidalian',
+'exif-fixtureidentifier' => 'Ngaran kan agwerto',
+'exif-locationdest' => 'Lokasyon pinagbiklad',
+'exif-locationdestcode' => 'Koda kan lokasyon pinagbiklad',
+'exif-objectcycle' => 'Oras kan aldaw na an midya pinagtuyuhan',
+'exif-contact' => 'Impormasyon kan kontak',
+'exif-writer' => 'Parasurat',
+'exif-languagecode' => 'Lengguwahe',
+'exif-iimversion' => 'IIM bersyon',
+'exif-iimcategory' => 'Kategoriya',
+'exif-iimsupplementalcategory' => 'Pansuplementong mga kategoriya',
+'exif-datetimeexpires' => 'Dae gamiton pagkatapos',
+'exif-datetimereleased' => 'Pinaluwas kan',
+'exif-originaltransmissionref' => 'Orihinal na transmisyon sa koda nin lokasyon',
+'exif-identifier' => 'Tagapagpamidbid',
+'exif-lens' => 'Lenteng pinaggamit',
+'exif-serialnumber' => 'Seryal na numero kan kamera',
+'exif-cameraownername' => 'Kagsadire kan kamera',
+'exif-label' => 'Tatak',
+'exif-datetimemetadata' => 'Petsa kan metadata na huring pinagbago',
+'exif-nickname' => 'Impormal na ngaran kan imahe',
+'exif-rating' => 'Kamarkahan (luwas sa lima)',
+'exif-rightscertificate' => 'Sertipiko kan manihamento nin mga karapatan',
+'exif-copyrighted' => 'Estado sa karapatan nin panurat',
+'exif-copyrightowner' => 'Kagsadire sa karapatan nin panurat',
+'exif-usageterms' => 'Mga Terminong Ginagamit',
+'exif-webstatement' => 'Online na testamento sa karapatan nin panurat',
+'exif-originaldocumentid' => 'Unikong ID kan orihinal na dokumento',
+'exif-licenseurl' => 'Kilyawan para sa lisensiya nin karapatan sa panurat',
+'exif-morepermissionsurl' => 'Alternatibong impormasyon sa paglilisensiya',
+'exif-attributionurl' => 'Kunsoarin gagamiton otro ining gibo, pakisugpon sa',
+'exif-preferredattributionname' => 'Kunsoarin gagamiton otro ining gibo, sabihon tabi an kredito',
+'exif-pngfilecomment' => 'Komentaryo sa PNG na sagunson',
+'exif-disclaimer' => 'Pagpapasimuya',
+'exif-contentwarning' => 'Patanid kan laog',
+'exif-giffilecomment' => 'Komentary sa GIF na sagunson',
+'exif-intellectualgenre' => 'Tipo kan Aytem',
+'exif-subjectnewscode' => 'Koda kan subheto',
+'exif-scenecode' => 'IPTC pan-eksenang koda',
+'exif-event' => 'Panyayaring pinagbiklad',
+'exif-organisationinimage' => 'Organisasyon pinagbiklad',
+'exif-personinimage' => 'Persona pinagbiklad',
+'exif-originalimageheight' => 'Langkaw kan imahe bago ini pinagkrap',
+'exif-originalimagewidth' => 'Lakbang kan imahe bago ini pinagkrap',
+
+# EXIF attributes
+'exif-compression-1' => 'Pinaghalugaan',
+'exif-compression-2' => 'CCITT Grupong 3 1-Dimensyonal na pagbabago ni Huffman nagdadalagan nin halawig na pag-enkod',
+'exif-compression-3' => 'CCITT Grupong 3 pinag-enkod sa fax',
+'exif-compression-4' => 'CCITT Grupong 3 pinag-enkod sa fax',
+
+'exif-copyrighted-true' => 'Nakatagamang karapatan sa panurat',
+'exif-copyrighted-false' => 'Pampublikong Kinasakupan',
 
 'exif-unknowndate' => 'Daí aram an petsa',
 
+'exif-orientation-1' => 'Normalon',
+'exif-orientation-2' => 'Pahigdang pinagbuklat',
+'exif-orientation-3' => 'Pinag-ikot nin 180 grado',
+'exif-orientation-4' => 'Patindog na pinagbuklot',
+'exif-orientation-5' => 'Pinag-ikot nin 90 grade asin patindog na pinagbuklat',
+'exif-orientation-6' => 'Pinag-ikot nin 90 grado sa CCW',
+'exif-orientation-7' => 'Pinag-ikot nin 90 grade CW asin patindog na pinagbuklat',
+'exif-orientation-8' => 'Pinag-ikot nin 90 grado sa CW',
+
+'exif-planarconfiguration-1' => 'Patingi na pormat',
+'exif-planarconfiguration-2' => 'Planar na pormat',
+
+'exif-colorspace-65535' => 'Bakong kalibrado',
+
 'exif-componentsconfiguration-0' => 'mayô man ini',
 
+'exif-exposureprogram-0' => 'Mayong pinagkahulugan',
+'exif-exposureprogram-1' => 'Manwal',
+'exif-exposureprogram-2' => 'Normal na programa',
+'exif-exposureprogram-3' => 'Apertoryong Prayoridad',
+'exif-exposureprogram-4' => 'Panseradong Prayoridad',
+'exif-exposureprogram-5' => 'Pangmuknaon na programa (minapabor sa hararomon na kinasakupan)',
+'exif-exposureprogram-6' => 'Pamprogramang Aksyon (minauyon sa mabilison pampundong buklos)',
+'exif-exposureprogram-7' => 'Modong patindog (para haranihang mga litrato na igwang kalikudan na luwas sa pokus)',
+'exif-exposureprogram-8' => 'Modong pahigda ( para sa pahigdang mga litrato na igwang kalikudan na nakapokus)',
+
 'exif-subjectdistance-value' => '$1 metros',
 
 'exif-meteringmode-0' => 'Dai aram',
+'exif-meteringmode-1' => 'Kagtahawan',
+'exif-meteringmode-2' => 'Sentrong pinaggabatan na kagtahawan',
+'exif-meteringmode-3' => 'Kaghilngan',
+'exif-meteringmode-4' => 'Pandakol na kaghilngan',
+'exif-meteringmode-5' => 'Pangarugan',
+'exif-meteringmode-6' => 'Parsyal',
 'exif-meteringmode-255' => 'Iba pa',
 
+'exif-lightsource-0' => 'Bakong bistado',
+'exif-lightsource-1' => 'Maliwanagong aldaw',
+'exif-lightsource-2' => 'Kalaadan',
+'exif-lightsource-3' => 'Tungsten (mainitong liwanag)',
 'exif-lightsource-4' => 'Kitkilát',
 'exif-lightsource-9' => 'Magayón na panahón',
+'exif-lightsource-10' => 'Mapanginurong panahon',
+'exif-lightsource-11' => 'Lindong',
+'exif-lightsource-12' => 'Pan-agang kalaadan (D 5700 - 7100K)',
+'exif-lightsource-13' => 'Pan-agang mapution na kalaadan (N 4600 - 5400K)',
+'exif-lightsource-14' => 'Malipotong mapution na kalaadan (W 3900 - 4500K)',
+'exif-lightsource-15' => 'Maputiong kalaadan (WW 3200 - 3700K)',
+'exif-lightsource-17' => 'Estandarteng Laad A',
+'exif-lightsource-18' => 'Estandarteng Laad B',
+'exif-lightsource-19' => 'Estandarteng Laad C',
+'exif-lightsource-24' => 'ISO estudyong tungsten',
 'exif-lightsource-255' => 'Mga ibang ginikanan nin ilaw',
 
+# Flash modes
+'exif-flash-fired-0' => 'An flash dae nagsindi',
+'exif-flash-fired-1' => 'An flash nagsindi',
+'exif-flash-return-0' => 'mayong estrobo sa pambalik na punksyon sa deteksyon',
+'exif-flash-return-2' => 'estrobong pambalik liwanag bakong detektado',
+'exif-flash-return-3' => 'estrobong pambalik na liwanag detektado',
+'exif-flash-mode-1' => 'kompulsaryong flash nagsindi',
+'exif-flash-mode-2' => 'kompulsaryong flash pinupugulan',
+'exif-flash-mode-3' => 'automatikong modo',
+'exif-flash-function-1' => 'Mayong naggaganang flash',
+'exif-flash-redeye-1' => 'mapulang-mata modong pambawas',
+
 'exif-focalplaneresolutionunit-2' => 'pulgada',
 
+'exif-sensingmethod-1' => 'Mayong pakahulugan',
+'exif-sensingmethod-2' => 'Tagahimate kan solong pinyero nin pankolor sa erya',
+'exif-sensingmethod-3' => 'Tagahimate kan panduwahang pinyero nin pankolor sa erya',
+'exif-sensingmethod-4' => 'Tagahimate kan pantolohang pinyero nin pankolor sa erya',
+'exif-sensingmethod-5' => 'Tagahimate kan pasurunod na pankolor sa erya',
+'exif-sensingmethod-7' => 'Pantolohang linya na tagahimate',
+'exif-sensingmethod-8' => 'Pankolor na pasurunod kan panlinyang tagahimate',
+
+'exif-filesource-3' => 'Nakauntok na kamerang digital',
+
 'exif-scenetype-1' => 'Direktong naretratong ladawan',
 
+'exif-customrendered-0' => 'Normal na proseso',
+'exif-customrendered-1' => 'Pambagong proseso',
+
+'exif-exposuremode-0' => 'Awto na pamburiyas',
+'exif-exposuremode-1' => 'Manwal na pamburiyas',
+'exif-exposuremode-2' => 'Awto na pankorda',
+
+'exif-whitebalance-0' => 'Awto pambalanse kan puti',
+'exif-whitebalance-1' => 'Manwal na pambalanse kan puti',
+
+'exif-scenecapturetype-0' => 'Estandarte',
+'exif-scenecapturetype-1' => 'Pahigda',
 'exif-scenecapturetype-2' => 'Retrato',
 'exif-scenecapturetype-3' => 'Eksenang banggi',
 
+'exif-gaincontrol-0' => 'Mayo',
+'exif-gaincontrol-1' => 'Hababaong pampalangkaw',
+'exif-gaincontrol-2' => 'Paitaas na pampalangkaw',
+'exif-gaincontrol-3' => 'Hababaong pampababa',
+'exif-gaincontrol-4' => 'Paitaas na pampababa',
+
+'exif-contrast-0' => 'Normal',
+'exif-contrast-1' => 'Malumoy',
+'exif-contrast-2' => 'Matagas',
+
+'exif-saturation-0' => 'Normal',
+'exif-saturation-1' => 'Hababaon na satyurasyon',
+'exif-saturation-2' => 'Halangkawon na satyurasyon',
+
+'exif-sharpness-0' => 'Normal',
+'exif-sharpness-1' => 'Malumoy',
+'exif-sharpness-2' => 'Matagas',
+
+'exif-subjectdistancerange-0' => 'Bakong bisto',
+'exif-subjectdistancerange-1' => 'Makro',
+'exif-subjectdistancerange-2' => 'Haranihon pagtanaw',
+'exif-subjectdistancerange-3' => 'Harayoong pagtanaw',
+
+# Pseudotags used for GPSLatitudeRef and GPSDestLatitudeRef
+'exif-gpslatitude-n' => 'Norteng kasalungaan',
+'exif-gpslatitude-s' => 'Sur na kasalungaan',
+
+# Pseudotags used for GPSLongitudeRef and GPSDestLongitudeRef
+'exif-gpslongitude-e' => 'Esteng kahalungaan',
+'exif-gpslongitude-w' => 'Westeng kahalungaan',
+
+# Pseudotags used for GPSAltitudeRef
+'exif-gpsaltitude-above-sealevel' => '$1 {{PLURAL:$1|metro|metros}} ibabaw sa kaabtangan nin dagat',
+'exif-gpsaltitude-below-sealevel' => '$1 {{PLURAL:$1|metro|metros}} ibaba sa kaabtangan nin dagat',
+
+'exif-gpsstatus-a' => 'Kasukolan yaon sa progreso',
+'exif-gpsstatus-v' => 'Kasukolan yaon sa panlaog na operabilidad',
+
+'exif-gpsmeasuremode-2' => 'Duwahang dimensyon na kasukolan',
+'exif-gpsmeasuremode-3' => 'Pantolohang dimensyon na kasukolan',
+
 # Pseudotags used for GPSSpeedRef
 'exif-gpsspeed-k' => 'Kilometros kada oras',
 'exif-gpsspeed-m' => 'Milya kada oras',
+'exif-gpsspeed-n' => 'kanukso',
+
+# Pseudotags used for GPSDestDistanceRef
+'exif-gpsdestdistance-k' => 'kilometros',
+'exif-gpsdestdistance-m' => 'Milyas',
+'exif-gpsdestdistance-n' => 'Milya nautikal',
+
+'exif-gpsdop-excellent' => 'Ekselente ($1)',
+'exif-gpsdop-good' => 'Marahayon ($1)',
+'exif-gpsdop-moderate' => 'Moderato ($1)',
+'exif-gpsdop-fair' => 'Marahay-rahay ($1)',
+'exif-gpsdop-poor' => 'Maluyahon ($1)',
+
+'exif-objectcycle-a' => 'Pan-aga sana',
+'exif-objectcycle-p' => 'Panbanggi sana',
+'exif-objectcycle-b' => 'Pareho sa pagka-aga asin pagkabanggi',
 
 # Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef
 'exif-gpsdirection-t' => 'Tunay na direksyon',
 'exif-gpsdirection-m' => 'Direksyón nin batobalani',
 
+'exif-ycbcrpositioning-1' => 'Pinagpatahaw',
+'exif-ycbcrpositioning-2' => 'Katampad-sityo',
+
+'exif-dc-contributor' => 'Mga Tagapag-ambag',
+'exif-dc-coverage' => 'Espasyal o temporal tungkos kan midya',
+'exif-dc-date' => 'Petsa (s)',
+'exif-dc-publisher' => 'Publikador',
+'exif-dc-relation' => 'Kaampad na midya',
+'exif-dc-rights' => 'Mga karapatan',
+'exif-dc-source' => 'Ginikanang midya',
+'exif-dc-type' => 'Tipo kan midya',
+
+'exif-rating-rejected' => 'Dinihado',
+
+'exif-isospeedratings-overflow' => 'Halangkawon kesa 65535',
+
+'exif-iimcategory-ace' => 'Mga arte, kultura asin kasalingayan',
+'exif-iimcategory-clj' => 'Krimen asin ley',
+'exif-iimcategory-dis' => 'Mga destroso asin aksidente',
+'exif-iimcategory-fin' => 'Ekonomiya asin negosyo',
+'exif-iimcategory-edu' => 'Edukasyon',
+'exif-iimcategory-evn' => 'Kapalibutan',
+'exif-iimcategory-hth' => 'Salud',
+'exif-iimcategory-hum' => 'Pantawong interes',
+'exif-iimcategory-lab' => 'Trabaho',
+'exif-iimcategory-pol' => 'Mga Pulitika',
+'exif-iimcategory-rel' => 'Relihiyon asin paniniwala',
+'exif-iimcategory-sci' => 'Siyensiya asin teknolohiya',
+'exif-iimcategory-soi' => 'Mga pansosyal na mga isyu',
+'exif-iimcategory-spo' => 'Mga Pakawat',
+'exif-iimcategory-war' => 'Giyera, iriwal asin daeng-kahingaloan',
+'exif-iimcategory-wea' => 'Panahon',
+
+'exif-urgency-normal' => 'Normalon ($1)',
+'exif-urgency-low' => 'Hababaon ($1)',
+'exif-urgency-high' => 'Halangkawon ($1)',
+'exif-urgency-other' => 'Prayoridad na pakahulugan nin paragamit ($1)',
+
 # External editor support
 'edit-externally' => 'Hirahón an file gamit an panluwas na aplikasyon',
-'edit-externally-help' => 'Hilingón an  [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] para sa iba pang mga impormasyon.',
+'edit-externally-help' => '(Hilngon an [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] para sa kadagdagang impormasyon)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'gabos',
 'namespacesall' => 'gabós',
 'monthsall' => 'gabos',
+'limitall' => 'gabos',
 
 # E-mail address confirmation
 'confirmemail' => "Kompirmaron an ''e''-surat",
 'confirmemail_noemail' => "Mayô kang pigkaag na marhay na ''e''-surat sa saimong [[Special:Preferences|mga kabôtan nin parágamit]].",
-'confirmemail_text' => "Kaipuhan an pag-''validate'' kan saimong e-koreo bago ka makagamit nin ''features'' na e-koreo. Pindoton an butones sa babâ tangarig magpadara nin kompirmasyon sa saimong e-koreo. An surat igwang takod na may koda; ikarga an takod sa browser para makompirmar na valido an saimong e-koreo.",
+'confirmemail_text' => '{{SITENAME}} minakaipo na balidaron an saimong e-surat na adres bago mo gagamiton an mga estima kan e-surat.
+Aktibaron an tipahan sa ibaba tanganing ipadara an pankumpirmang surat sa saimong adres.
+An surat igwa nin sarong kasugpunan na kinaagan nin sarong koda;
+ikarga an kasugpunan sa saimong kilyaw tanganing makumpirma na an saimong e-surat na adres balido.',
 'confirmemail_pending' => "May pigpadara nang kompirmasyon sa ''e''-surat mo; kun kagigibo mo pa sana kan saimong ''account'', maghalat ka nin mga dikit na minutos bago ka maghagad giraray nin bâgong ''code''.",
 'confirmemail_send' => 'Magpadará nin kompirmasyon',
 'confirmemail_sent' => "Napadará na an kompirmasyon sa ''e''-surat.",
 'confirmemail_oncreate' => "May pigpadara nang kompirmasyon sa saimong ''e''-surat.
 Dai man kaipuhan ini para makalaog, pero kaipuhan mong itao ini bago
 ka makagamit nin ''features'' na basado sa ''e''-surat sa wiki.",
-'confirmemail_sendfailed' => "Dai napadará an kompirmasyon kan ''e''-surat. Seguradohon tabî kun igwang sala.
+'confirmemail_sendfailed' => '{{SITENAME}} dae nakapadara kan saimong pankumpirmang surat.
+Pakihiling tabi sa saimong e-surat na adress para sa imbalidong mga karakter.
 
-Pigbalik: $1",
+Paradarang surat pinagbalik: $1',
 'confirmemail_invalid' => 'Salâ an kódigo nin konpirmasyon. Puede ser napasó na an kódigo.',
 'confirmemail_needlogin' => "Kaipuhan tabi $1 ikompirmar an saimong ''e''-surat.",
-'confirmemail_success' => "Nakompirmar na an saimong ''e''-surat. Pwede ka nang maglaog asin mag-ogma sa wiki.",
+'confirmemail_success' => 'An saimong e-surat na adres kumpirmado na.
+Puwede ka na ngunyan [[Special:UserLogin|maglaog]] asin maogmang maggamit kan wiki.',
 'confirmemail_loggedin' => "Nakompirmar na an saimong ''e''-surat.",
 'confirmemail_error' => 'May nasalâ sa pagtagama kan saimong kompirmasyon.',
 'confirmemail_subject' => "kompirmasyón {{SITENAME}} kan direksyón nin ''e''-surat",
-'confirmemail_body' => 'May paragamit, pwedeng ika, halì sa IP na $1, na nagrehistro nin account na
-"$2" na igwang e-koreo sa {{SITENAME}}.
+'confirmemail_body' => 'Sarong tawo, mapuwedeng ika, gikan sa IP adres na $1,
+nagrehistro nin sarong panindog "$2" na igwa kaining e-surat na adres sa {{SITENAME}}.
+
+Tanganing kumpirmaron na ining panindog talagang pagsadire mo asin aktibaron an e-surat na mga estima sa {{SITENAME}}, bukasi tabi ining kasugpunan sa saimong kilyaw:
+
+$3
+
+Kun ika *dae* nagrehistro kan panindog, sunuda ining sugpon
+tanganing kanselaron an e-surat na adres na pankumpirma:
+
+$5
 
-Tangarig makompirmar na talagang saimo ining account asin makagamit nin e-koreo sa {{SITENAME}}, bukasán ining takod sa saimong browser:
+Ining pankumpirmang koda mapalso sa $4.',
+'confirmemail_body_changed' => 'Sarong tawo, mapuwedeng ika, gikan sa IP adres na $1,
+nagrehistro nin sarong panindog "$2" na igwa kaining e-surat na adres sa {{SITENAME}}.
+
+Tanganing kumpirmaron na ining panindog talagang pagsadire mo asin aktibaron an e-surat na mga estima sa {{SITENAME}}, bukasi tabi ining kasugpunan sa saimong kilyaw:
 
 $3
 
-Kun *bakô* ka ini, dai sunodón an takod. Mapaso sa $4 inning koda nin kompirmasyon.',
+Kun an panindog *bakong* saimo, sunuda ining sugpon
+tanganing kanselaron an e-surat na adres na pankumpirma:
+
+$5
+
+Ining pankumpirmang koda mapalso sa $4.',
+'confirmemail_body_set' => 'Sarong tawo, mapuwedeng ika, gikan sa IP adres na $1,
+nagrehistro nin sarong panindog "$2" na igwa kaining e-surat na adres sa {{SITENAME}}.
+
+Tanganing kumpirmaron na ining panindog talagang pagsadire mo asin re-aktibaron an e-surat na mga estima sa {{SITENAME}}, bukasi tabi ining kasugpunan sa saimong kilyaw:
+
+$3
+
+Kun an panindog *bakong* saimo, sunuda ining sugpon
+tanganing kanselaron an e-surat na adres na pankumpirma:
+
+$5
+
+Ining pankumpirmang koda mapalso sa $4.',
+'confirmemail_invalidated' => 'An e-surat na adres na pankumpirma kanselado na',
+'invalidateemail' => 'Kanselaron an e-surat na pankumpirmasyon',
 
 # Scary transclusion
 'scarytranscludedisabled' => '[Pigpopogolan an transcluding na Interwiki]',
-'scarytranscludefailed' => '[Nabigô an pagkua kan templato para sa $1; despensa]',
-'scarytranscludetoolong' => '[halabaon an URL; despensa]',
+'scarytranscludefailed' => '[Templatong panakdo nagpalya para sa $1]',
+'scarytranscludetoolong' => '[An kilyawan grabe kahalaba]',
 
 # Delete conflict
-'deletedwhileediting' => 'Patanid: Pigparâ na an pahinang ini antes na nagpoon kan maghirá!',
+'deletedwhileediting' => "'''Patanid tabi''': Ining pahina pinagpura matapos na ika nagpoon na magliliwat!",
 'confirmrecreate' => "Si [[User:$1|$1]] ([[User talk:$1|olay]]) pigparâ ining páhina pagkatapos mong magpoon kan paghira ta:
 : ''$2''
 Ikonpirmar tabi na talagang gusto mong gibohon giraray ining pahina.",
+'confirmrecreate-noreason' => 'Paragamit [[User:$1|$1]] ([[User talk:$1|Olay]]) an nagpura kaining pahina matapos na ika nagpoon na magliliwat. Pakikumpirma tabi na ika boot na muknaon otro ining pahina.',
 'recreate' => 'Gibohón giraray',
 
 # action=purge
 'confirm_purge_button' => 'Sige',
 'confirm-purge-top' => 'Halîon an an aliho kaining páhina?',
+'confirm-purge-bottom' => 'Pagpupurga nin sarong pahina minalinig kan sarayan asin minapuwersa sa pinakahuring rebisyon na magtunga.',
+
+# action=watch/unwatch
+'confirm-watch-button' => 'OK tabi',
+'confirm-watch-top' => 'Idadagdag ining pahina sa saimong bantay-listahan?',
+'confirm-unwatch-button' => 'OK tabi',
+'confirm-unwatch-top' => 'Haleon ining pahina gikan sa saimong bantay-listahan?',
 
 # Multipage image navigation
 'imgmultipageprev' => '← nakaaging pahina',
 'imgmultipagenext' => 'sunod na pahina →',
 'imgmultigo' => 'Dumanán!',
+'imgmultigoto' => 'Magpasiring sa pahina $1',
 
 # Table pager
 'ascending_abbrev' => 'skt',
@@ -2904,14 +3300,15 @@ Ikonpirmar tabi na talagang gusto mong gibohon giraray ining pahina.",
 'table_pager_first' => 'Enot na páhina',
 'table_pager_last' => 'Huring páhina',
 'table_pager_limit' => 'Ipahiling an $1 na aytem kada páhina',
+'table_pager_limit_label' => 'Mga aytem kada pahina:',
 'table_pager_limit_submit' => 'Dumanán',
 'table_pager_empty' => 'Mayong resulta',
 
 # Auto-summaries
-'autosumm-blank' => 'Pighahalî an gabos na laog sa páhina',
+'autosumm-blank' => 'Pinagblangko an pahina',
 'autosumm-replace' => "Pigriribayan an páhina nin '$1'",
 'autoredircomment' => 'Piglilikay sa [[$1]]',
-'autosumm-new' => 'Bâgong páhina: $1',
+'autosumm-new' => 'Pinagmukna an pahina kaining "$1"',
 
 # Live preview
 'livepreview-loading' => 'Pigkakarga…',
@@ -2920,16 +3317,17 @@ Ikonpirmar tabi na talagang gusto mong gibohon giraray ining pahina.",
 'livepreview-error' => 'Dai nakakabit: $1 "$2". Hilingón tabî an normal na patânaw.',
 
 # Friendlier slave lag warnings
-'lag-warn-normal' => 'An mga pagbalyó na mas bâgo sa $1 na segundo pwedeng dai pa mahiling sa listang ini.',
-'lag-warn-high' => "Nin huli sa ''high database server lag'', an mga pagbabâgo na mas bâgo sa $1 na segundo pwedeng dai pa ipahiling sa listang ini.",
+'lag-warn-normal' => 'Mga pagliliwat na baguhon pa sana nin $1 {{PLURAL:$1|segundo|segundos}} puwedeng dae maipapahiling sa listahang ini.',
+'lag-warn-high' => 'Nin huli sa halangkawon na kaabalahan sa serbidor kan datos-sarayan, mga pagliliwat na baguhon pa sana nin $1 {{PLURAL:$1|segundo|segundos}} puwedeng dae maipapahiling sa listahang ini.',
 
 # Watchlist editor
 'watchlistedit-numitems' => 'An saimong pigbabantayan igwang {{PLURAL:$1|1 titulo|$1 mga titulo}}, apwera kan mga páhina kan olay.',
 'watchlistedit-noitems' => 'Mayong mga titulo an pigbabantayan mo.',
 'watchlistedit-normal-title' => 'Hirahón an pigbabantayan',
 'watchlistedit-normal-legend' => 'Halion an mga titulo sa pigbabantayan',
-'watchlistedit-normal-explain' => 'Mahihiling sa babâ an mga titulo na nasa pigbabantayan mo.
-Tangarig maghalì nin titulo, markahan an kahon sa gilid kaini, dangan pindotón an Tangkasón an mga Titulo. Pwede mo man na [[Special:EditWatchlist/raw|hirahón an bàgong lista]].',
+'watchlistedit-normal-explain' => 'Mga sa saimong bantay-listahan ipinapahiling sa ibaba.
+Sa paghali nin sarong titutlo, -tsek an kahon kasunod kaini, asin i-klik an "{{int:Watchlistedit-normal-submit}}".
+Puwede ka man na [[Special:EditWatchlist/raw|magliwat kan temporaryong listahan]].',
 'watchlistedit-normal-submit' => 'Tangkasón an mga Titulo',
 'watchlistedit-normal-done' => 'Pigtangkas an {{PLURAL:$1|1 an titulo|$1 mga titulo}} sa saimong pigbabantayan:',
 'watchlistedit-raw-title' => 'Hirahón an bàgong pigbabantayan',
@@ -2949,20 +3347,139 @@ Pwede mo man [[Special:EditWatchlist|gamiton an standard editor]].',
 'watchlisttools-edit' => 'Hilingón asin ligwatón an pigbabantayan',
 'watchlisttools-raw' => 'Hirahón an bàgong pigbabantayan',
 
+# Signatures
+'signature' => '[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|olay]])',
+
+# Core parser functions
+'unknown_extension_tag' => 'Bakong bistadong ekstensyon nin pagmarka "$1"',
+'duplicate-defaultsort' => '\'\'\'Patanid tabi:\'\'\' An susing panugmad kan salansan na "$2" minasalimbaw sa dating susing panugmad kan salansan na "$1".',
+
 # Special:Version
 'version' => 'Bersyon',
+'version-extensions' => 'Instaladong mga ekstensyon',
+'version-specialpages' => 'Espesyal na mga pahina',
+'version-parserhooks' => 'Mga pangawil kan parser',
+'version-variables' => 'Mga kabalanggayahan',
+'version-antispam' => 'Pan-spam na pangataman',
+'version-skins' => 'Mga kublit',
+'version-other' => 'An iba pa',
+'version-mediahandlers' => 'Mga Midyang Tagakapot',
+'version-hooks' => 'Mga pangawil',
+'version-extension-functions' => 'Mga punksyon kan ekstensyon',
+'version-parser-extensiontags' => 'Mga ekstensyong panmarka kan Parser',
+'version-parser-function-hooks' => 'Mga panpunksyong pangawil kan Parser',
+'version-hook-name' => 'Ngaran kan pangawil',
+'version-hook-subscribedby' => 'Pinaghaguhot ni',
+'version-version' => '(Bersyon na $1)',
+'version-license' => 'Lisensiya',
+'version-poweredby-credits' => "An wiking ini pinagpagana kan '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-others' => '[{{SERVER}}{{SCRIPTPATH}}/CREDITS mga iba pa]',
+'version-license-info' => 'An MediaWiki sarong libreng kasungatan; puwede mong ipanao ini asin/o baguhon ini sa irarom kan termino nin HNU (Heneral na Pampublikong Lisensiya) bilang publisado kan Free Software Foundation; maski sa arin na bersyon 2 kan lisensiya, o (saimong pansadireng pagpipilian) arinman na huring bersyon.
+
+An MediaWiki ipinagpanao sa paglaom na ini magigin kapakinabangan, pero MAYO NIN ANUMAN NA WARANTIYA; mayo dawa ngani nin pinaghuhurot na warantiya kan MERKANTIBILIDAD o KAUYUGAN PARA SA SARONG PARTIKULAR NA KATUYUHAN. Hilngon an HNU (Heneral na Pampublikong Lisensiya) para sa kadagdagang mga detalye.
+
+Ika dapat na nakapagresibe na kan [{{SERVER}}{{SCRIPTPATH}}/COPYING sarong kopya nin HNU Heneral na Pampublikong Lisensiya] na kaiba kaining programa; kun dae, surati an Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA o baya [//www.gnu.org/licenses/old-licenses/gpl-2.0.html online ining basahon].',
+'version-software' => 'Instalyadong kasungatan',
+'version-software-product' => 'Produkto',
+'version-software-version' => 'Bersyon',
+'version-entrypoints' => 'Puntong pan-entrada sa mga kilyawan',
+'version-entrypoints-header-entrypoint' => 'Puntong pan-entrada',
+'version-entrypoints-header-url' => 'Kilyawan',
+
+# Special:FilePath
+'filepath' => 'Pansagunsong agihan',
+'filepath-page' => 'Sagunson:',
+'filepath-submit' => 'Magduman',
+'filepath-summary' => 'Ining espesyal na pahina minapabalik kan kumpletong agihan para sa sarong sagunson.
+Mga imahe ipinapahiling sa bilog na resolusyon, an iba pang tipo nin mga sagunson pinagpapoon nin direkta kan saindang asosyadong programa.',
+
+# Special:FileDuplicateSearch
+'fileduplicatesearch' => 'Maghanap kan duplikadong mga sagunson',
+'fileduplicatesearch-summary' => 'Maghanap kan duplikadong mga sagunson na pinagbasihan an mga kahalagahan nin hash.',
+'fileduplicatesearch-legend' => 'Maghanap kan sarong duplikado',
+'fileduplicatesearch-filename' => 'Ngaran nin sagunson:',
+'fileduplicatesearch-submit' => 'Maghanap',
+'fileduplicatesearch-info' => '$1 × $2 piksel<br />Sukol nin sagunson: $3<br />MIME tipo: $4',
+'fileduplicatesearch-result-1' => 'An sagunson "$1" mayo nin kaparehong duplikasyon.',
+'fileduplicatesearch-result-n' => 'An sagunson "$1" igwa nin {{PLURAL:$2|1 kaparehong duplikasyon|$2 mga kaparehong duplikasyon}}.',
+'fileduplicatesearch-noresults' => 'Mayong sagunson na pinagngaranan na "$1" an nanagboan.',
 
 # Special:SpecialPages
 'specialpages' => 'Mga espesyal na pahina',
+'specialpages-note' => '----
+* Normal espesyal na mga pahina.
+* <span class="mw-specialpagerestricted">Restriktadong espesyal na mga pahina.</span>',
+'specialpages-group-maintenance' => 'Mga talaan nin pagpangataman',
 'specialpages-group-other' => 'Iba pang mga espesyal na pahina',
-'specialpages-group-login' => 'Maglaóg/ maggíbo',
+'specialpages-group-login' => 'Maglaog / magmukna nin panindog',
 'specialpages-group-changes' => 'Nakakaági pa sanáng mga pagbàgo asín laóg',
+'specialpages-group-media' => 'Mga talaan sa midya asin mga ikinarga',
+'specialpages-group-users' => 'Mga paragamit asin mga karapatan',
+'specialpages-group-highuse' => 'Halangkawong gamit na mga pahina',
+'specialpages-group-pages' => 'Mga listahan kan mga pahina',
+'specialpages-group-pagetools' => 'Mga kagamitan sa pahina',
+'specialpages-group-wiki' => 'Wiking datos asin mga kagamitan',
+'specialpages-group-redirects' => 'Panukdo sa espesyal na mga pahina',
+'specialpages-group-spam' => 'Pan-spam na mga kagamitan',
 
 # Special:BlankPage
 'blankpage' => 'Blangkong pahina',
 'intentionallyblankpage' => 'Pigtuyong blangko an pahinang ini',
 
+# External image whitelist
+'external_image_whitelist' => '#Bayai ining linya eksaktong siring man sana kaini<pre>
+#Magkaag nin regular na mga panambitong parasa (idto sanang parte na minauyon sa tahaw kan //) na yaon sa ibaba
+#An mga ini paglalangkapon kaiba an mga kilyawan kan panluwas (hotlinked) na mga imahe
+#Idtong nagkaralangkap ipagpapahiling bilang mga imahe, o baya an sarong sugpon sana pasiring sa imahe an ipagpapahiling
+#Mga linya na nagpopoon sa # pagtatrataron bilang mga komento
+#Ini baya bakong sensitibo sa tipahan
+
+#Ikaag an gabos na parasang regex sa ibabaw kaining linya. Bayai ining linya eksaktong siring man sana kaini.</pre>',
+
 # Special:Tags
+'tags' => 'Balidong mga marka nin kaliwatan',
+'tag-filter' => '[[Special:Tags|Tag]] saraon:',
+'tag-filter-submit' => 'Saraan',
+'tags-title' => 'Mga marka',
+'tags-intro' => 'Ining pahina minalista kan mga marka na an kasungatan mapuwedeng maimarka an pagliwat kaini, asin an saindang mga kahulugan.',
+'tags-tag' => 'Ngarang panmarka',
+'tags-display-header' => 'Kinaluwasan sa listahan nin kaliwatan',
+'tags-description-header' => 'Bilog na deskripsyon nin kahulugan',
+'tags-hitcount-header' => 'Pinagmarkahan na mga kaliwatan',
 'tags-edit' => 'liwatón',
+'tags-hitcount' => '$1 {{PLURAL:$1|kaliwatan|mga kaliwatan}}',
+
+# Special:ComparePages
+'comparepages' => 'Ikumpara an mga pahina',
+'compare-selector' => 'Ikumpara an mga rebisyon nin pahina',
+'compare-page1' => 'Pahina 1',
+'compare-page2' => 'Pahina 2',
+'compare-rev1' => 'Rebisyon 1',
+'compare-rev2' => 'Rebisyon 2',
+'compare-submit' => 'Ikumpara',
+'compare-invalid-title' => 'An titulo na saimong pinagsambit sarong imbalido.',
+'compare-title-not-exists' => 'An titulo na saimong pinagsambit bakong eksistido.',
+'compare-revision-not-exists' => 'An rebisyon na saimong pinagsambit bakong eksistido.',
+
+# Database error messages
+'dberr-header' => 'Ining wiki igwa nin sarong problema',
+'dberr-problems' => 'Sori!
+Ining sityo igwang naeksperiyensiyahan na mga kakundian sa teknikal.',
+'dberr-again' => 'Prubaring maghalat tabi nin nagkapirang minutos asin otrohon ikarga.',
+'dberr-info' => '(Dae makakontak sa serbidor kan datos-sarayan: $1)',
+'dberr-usegoogle' => 'Ika puwedeng magprubar na maghanap sa Google nguna.',
+'dberr-outofdate' => 'Pasinon mo tabi na an saindang mga indekso kan satuyang laog puwedeng luwas na sa petsa.',
+'dberr-cachederror' => 'Ini sarong nakasaray na kopya kan pinaghahagad na pahina, asin puwedeng bakong angat sa petsa.',
+
+# HTML forms
+'htmlform-invalid-input' => 'Igwa nin mga problema an iba sa saimong pinaglaog',
+'htmlform-select-badoption' => 'An halaga na saimong pinagsambit bakong saro sa balidong pagpipilian.',
+'htmlform-int-invalid' => 'An halaga na saimong pinagsambit bako na sarong integer.',
+'htmlform-float-invalid' => 'An halaga na saimong pinagsamit bako na sarong numero.',
+'htmlform-int-toolow' => 'An halaga na saimong pinagsambit hababaon sa minimum na $1',
+'htmlform-int-toohigh' => 'An halaga na saimong pinagsambit halangkawon sa maksimum na $1',
+'htmlform-required' => 'Ining halaga pinaghahagad',
+'htmlform-submit' => 'Sumitiron',
+'htmlform-reset' => 'Dae idagos an mga kaliwatan',
 
 );
index 9064910..69f2853 100644 (file)
@@ -68,14 +68,14 @@ $namespaceAliases = array(
 );
 
 $magicWords = array(
-       'img_thumbnail'           => array( '1', 'міні', 'мініяцюра', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '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_thumbnail'             => array( '1', 'міні', 'мініяцюра', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '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' ),
 );
 
 # Per discussion on http://translatewiki.net/wiki/Thread:Support/Customization_of number format
index 9f31a7a..de1217d 100644 (file)
@@ -39,121 +39,121 @@ $dateFormats = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#перанакіраваньне', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__БЯЗЬ_ЗЬМЕСТУ__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__БЕЗ_ГАЛЕРЭІ__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__ЗЬМЕСТ_ПРЫМУСАМ__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__ЗЬМЕСТ__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__БЕЗ_РЭДАГАВАНЬНЯ_СЭКЦЫІ__', '__NOEDITSECTION__' ),
-       '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' ),
-       'currentyear'             => array( '1', 'БЯГУЧЫ_ГОД', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'БЯГУЧЫ_ЧАС', 'CURRENTTIME' ),
-       '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' ),
-       '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' ),
-       'numberofusers'           => array( '1', 'КОЛЬКАСЬЦЬ_УДЗЕЛЬНІКАЎ', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'КОЛЬКАСЬЦЬ_АКТЫЎНЫХ_УДЗЕЛЬНІКАЎ', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'КОЛЬКАСЬЦЬ_РЭДАГАВАНЬНЯЎ', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'КОЛЬКАСЬЦЬ_ПРАГЛЯДАЎ', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'НАЗВА_СТАРОНКІ', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'НАЗВА_СТАРОНКІ_2', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'ПРАСТОРА_НАЗВАЎ', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'ПРАСТОРА_НАЗВАЎ_2', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'ПРАСТОРА_НАЗВАЎ_АБМЕРКАВАНЬНЯ', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'ПРАСТОРА_НАЗВАЎ_АБМЕРКАВАНЬНЯ_2', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'ПРАСТОРА_НАЗВАЎ_ПРАДМЕТУ', 'ПРАСТОРА_НАЗВАЎ_АРТЫКУЛА', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'ПРАСТОРА_НАЗВАЎ_ПРАДМЕТУ_2', 'ПРАСТОРА_НАЗВАЎ_АРТЫКУЛА_2', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'ПОЎНАЯ_НАЗВА_СТАРОНКІ', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'ПОЎНАЯ_НАЗВА_СТАРОНКІ_2', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'НАЗВА_ПАДСТАРОНКІ', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'НАЗВА_ПАДСТАРОНКІ_2', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'НАЗВА_БАЗАВАЙ_СТАРОНКІ', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'НАЗВА_БАЗАВАЙ_СТАРОНКІ_2', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'НАЗВА_СТАРОНКІ_АБМЕРКАВАНЬНЯ', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'НАЗВА_СТАРОНКІ_АБМЕРКАВАНЬНЯ_2', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'НАЗВА_СТАРОНКІ_ПРАДМЕТУ', 'НАЗВА_СТАРОНКІ_АРТЫКУЛА', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'subjectpagenamee'        => array( '1', 'НАЗВА_СТАРОНКІ_ПРАДМЕТУ_2', 'НАЗВА_СТАРОНКІ_АРТЫКУЛА_2', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
-       'msg'                     => array( '0', 'ПАВЕДАМЛЕНЬНЕ:', 'MSG:' ),
-       'subst'                   => array( '0', 'ПАДСТАНОЎКА:', 'SUBST:' ),
-       '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' ),
-       '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_page'                => array( '1', 'старонка=$1', 'старонка $1', 'page=$1', 'page $1' ),
-       '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:' ),
-       'localurl'                => array( '0', 'ЛЯКАЛЬНЫ_АДРАС:', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'ЛЯКАЛЬНЫ_АДРАС_2:', 'LOCALURLE:' ),
-       'server'                  => array( '0', 'СЭРВЭР', 'SERVER' ),
-       'servername'              => array( '0', 'НАЗВА_СЭРВЭРА', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'ШЛЯХ_ДА_СКРЫПТА', 'SCRIPTPATH' ),
-       'grammar'                 => array( '0', 'ГРАМАТЫКА:', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'ПОЛ:', 'GENDER:' ),
-       '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_ВЭРСІІ', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'ДЗЕНЬ_ВЭРСІІ', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'ДЗЕНЬ_ВЭРСІІ_2', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'МЕСЯЦ_ВЭРСІІ', 'REVISIONMONTH' ),
-       'revisionyear'            => array( '1', 'ГОД_ВЭРСІІ', 'REVISIONYEAR' ),
-       'revisiontimestamp'       => array( '1', 'МОМАНТ_ЧАСУ_ВЭРСІІ', 'REVISIONTIMESTAMP' ),
-       'plural'                  => array( '0', 'МНОЖНЫ_ЛІК:', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'ПОЎНЫ_АДРАС:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'ПОЎНЫ_АДРАС_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', 'ПАКАЗВАЦЬ_НАЗВУ', 'DISPLAYTITLE' ),
-       'rawsuffix'               => array( '1', 'Н', 'R' ),
-       'newsectionlink'          => array( '1', '__СПАСЫЛКА_НА_НОВУЮ_СЭКЦЫЮ__', '__NEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', 'БЯГУЧАЯ_ВЭРСІЯ', 'CURRENTVERSION' ),
-       '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' ),
-       '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' ),
-       'staticredirect'          => array( '1', '__СТАТЫЧНАЕ_ПЕРАНАКІРАВАНЬНЕ__', '__STATICREDIRECT__' ),
+       'redirect'                  => array( '0', '#перанакіраваньне', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__БЯЗЬ_ЗЬМЕСТУ__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__БЕЗ_ГАЛЕРЭІ__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__ЗЬМЕСТ_ПРЫМУСАМ__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__ЗЬМЕСТ__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__БЕЗ_РЭДАГАВАНЬНЯ_СЭКЦЫІ__', '__NOEDITSECTION__' ),
+       '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' ),
+       'currentyear'               => array( '1', 'БЯГУЧЫ_ГОД', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'БЯГУЧЫ_ЧАС', 'CURRENTTIME' ),
+       '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' ),
+       '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' ),
+       'numberofusers'             => array( '1', 'КОЛЬКАСЬЦЬ_УДЗЕЛЬНІКАЎ', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'КОЛЬКАСЬЦЬ_АКТЫЎНЫХ_УДЗЕЛЬНІКАЎ', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'КОЛЬКАСЬЦЬ_РЭДАГАВАНЬНЯЎ', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'КОЛЬКАСЬЦЬ_ПРАГЛЯДАЎ', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'НАЗВА_СТАРОНКІ', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'НАЗВА_СТАРОНКІ_2', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'ПРАСТОРА_НАЗВАЎ', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'ПРАСТОРА_НАЗВАЎ_2', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'ПРАСТОРА_НАЗВАЎ_АБМЕРКАВАНЬНЯ', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'ПРАСТОРА_НАЗВАЎ_АБМЕРКАВАНЬНЯ_2', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'ПРАСТОРА_НАЗВАЎ_ПРАДМЕТУ', 'ПРАСТОРА_НАЗВАЎ_АРТЫКУЛА', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'ПРАСТОРА_НАЗВАЎ_ПРАДМЕТУ_2', 'ПРАСТОРА_НАЗВАЎ_АРТЫКУЛА_2', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'ПОЎНАЯ_НАЗВА_СТАРОНКІ', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'ПОЎНАЯ_НАЗВА_СТАРОНКІ_2', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'НАЗВА_ПАДСТАРОНКІ', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'НАЗВА_ПАДСТАРОНКІ_2', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'НАЗВА_БАЗАВАЙ_СТАРОНКІ', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'НАЗВА_БАЗАВАЙ_СТАРОНКІ_2', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'НАЗВА_СТАРОНКІ_АБМЕРКАВАНЬНЯ', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'НАЗВА_СТАРОНКІ_АБМЕРКАВАНЬНЯ_2', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'НАЗВА_СТАРОНКІ_ПРАДМЕТУ', 'НАЗВА_СТАРОНКІ_АРТЫКУЛА', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'          => array( '1', 'НАЗВА_СТАРОНКІ_ПРАДМЕТУ_2', 'НАЗВА_СТАРОНКІ_АРТЫКУЛА_2', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+       'msg'                       => array( '0', 'ПАВЕДАМЛЕНЬНЕ:', 'MSG:' ),
+       'subst'                     => array( '0', 'ПАДСТАНОЎКА:', 'SUBST:' ),
+       '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' ),
+       '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_page'                  => array( '1', 'старонка=$1', 'старонка $1', 'page=$1', 'page $1' ),
+       '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:' ),
+       'localurl'                  => array( '0', 'ЛЯКАЛЬНЫ_АДРАС:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'ЛЯКАЛЬНЫ_АДРАС_2:', 'LOCALURLE:' ),
+       'server'                    => array( '0', 'СЭРВЭР', 'SERVER' ),
+       'servername'                => array( '0', 'НАЗВА_СЭРВЭРА', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'ШЛЯХ_ДА_СКРЫПТА', 'SCRIPTPATH' ),
+       'grammar'                   => array( '0', 'ГРАМАТЫКА:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'ПОЛ:', 'GENDER:' ),
+       '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_ВЭРСІІ', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'ДЗЕНЬ_ВЭРСІІ', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'ДЗЕНЬ_ВЭРСІІ_2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'МЕСЯЦ_ВЭРСІІ', 'REVISIONMONTH' ),
+       'revisionyear'              => array( '1', 'ГОД_ВЭРСІІ', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'МОМАНТ_ЧАСУ_ВЭРСІІ', 'REVISIONTIMESTAMP' ),
+       'plural'                    => array( '0', 'МНОЖНЫ_ЛІК:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'ПОЎНЫ_АДРАС:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'ПОЎНЫ_АДРАС_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', 'ПАКАЗВАЦЬ_НАЗВУ', 'DISPLAYTITLE' ),
+       'rawsuffix'                 => array( '1', 'Н', 'R' ),
+       'newsectionlink'            => array( '1', '__СПАСЫЛКА_НА_НОВУЮ_СЭКЦЫЮ__', '__NEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'БЯГУЧАЯ_ВЭРСІЯ', 'CURRENTVERSION' ),
+       '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' ),
+       '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' ),
+       'staticredirect'            => array( '1', '__СТАТЫЧНАЕ_ПЕРАНАКІРАВАНЬНЕ__', '__STATICREDIRECT__' ),
 );
 
 $namespaceNames = array(
@@ -1924,6 +1924,7 @@ $1',
 'shared-repo-from' => '$1',
 'shared-repo' => 'агульнага сховішча',
 'shared-repo-name-wikimediacommons' => 'Вікісховішча',
+'upload-disallowed-here' => 'На жаль Вы ня можаце перазапісаць гэтую выяву.',
 
 # File reversion
 'filerevert' => 'Вярнуць $1',
@@ -2207,6 +2208,8 @@ $1',
 'mailnologin' => 'Няма адрасу атрымальніка',
 'mailnologintext' => 'Вам неабходна [[Special:UserLogin|ўвайсьці ў сыстэму]] і мець пацьверджаны адрас электроннай пошты ў Вашых [[Special:Preferences|наладах]], каб дасылаць лісты іншым удзельнікам.',
 'emailuser' => 'Даслаць ліст',
+'emailuser-title-target' => 'Адправіць гэта па электроннай пошце  {{GENDER:$1|гэтаму ўдзельніку|гэтай удзельніцы}}',
+'emailuser-title-notarget' => 'Даслаць ліст ўдзельніку ці ўдзельніцы па электроннай пошце',
 'emailpage' => 'Даслаць ліст ўдзельніку ці ўдзельніцы па электроннай пошце',
 'emailpagetext' => 'Вы можаце выкарыстоўваць форму ніжэй, каб даслаць гэтаму ўдзельніку ліст па электроннай пошце.
 Адрас электроннай пошты, які Вы пазначалі ў [[Special:Preferences|сваіх наладах]], будзе пазначаны ў полі ліста «Ад», і ўдзельнік зможа даслаць на гэты адрас адказ.',
@@ -3006,11 +3009,34 @@ $1',
 
 # Info page
 'pageinfo-title' => 'Інфармацыя пра «$1»',
+'pageinfo-header-basic' => 'Асноўныя зьвесткі',
 'pageinfo-header-edits' => 'Рэдагаваньні',
+'pageinfo-header-restrictions' => 'Абарона старонкі',
+'pageinfo-header-properties' => 'Уласьцівасьці старонкі',
+'pageinfo-display-title' => 'Загаловак для адлюстраваньня',
+'pageinfo-default-sort' => 'Перадвызначаны ключ сартаваньня',
+'pageinfo-length' => 'Памер старонкі (у байтах)',
+'pageinfo-article-id' => 'Ідэнтыфікатар старонкі',
+'pageinfo-robot-policy' => 'Індэксацыя пашукавікамі',
+'pageinfo-robot-index' => 'Індэксуецца',
+'pageinfo-robot-noindex' => 'Не індэксуецца',
 'pageinfo-views' => 'Колькасьць праглядаў',
 'pageinfo-watchers' => 'Колькасьць назіральнікаў і назіральніц',
+'pageinfo-redirects-name' => 'Перанакіраваньняў на гэтую старонку',
+'pageinfo-subpages-name' => 'Колькасьць падстаронак',
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|перанакіраваньне|перанакіраваньні|перанакіраваньняў}}; $3 {{PLURAL:$3|звычайная|звычайныя|звычайных}})',
+'pageinfo-firstuser' => 'Стваральнік старонкі',
+'pageinfo-firsttime' => 'Дата стварэньня',
+'pageinfo-lastuser' => 'Апошні рэдактар',
+'pageinfo-lasttime' => 'Дата апошняга рэдагаваньня',
 'pageinfo-edits' => 'Колькасьць рэдагаваньняў',
 'pageinfo-authors' => 'Колькасьць аўтараў',
+'pageinfo-recent-edits' => 'Колькасьць апошніх рэдагаваньняў (за $1)',
+'pageinfo-recent-authors' => 'Колькасьць апошніх аўтараў',
+'pageinfo-restriction' => 'Стан аховы (<code>{{lcfirst:$1}}</code>)',
+'pageinfo-magic-words' => '{{PLURAL:$1|Магічнае слова|Магічныя словы}} ($1)',
+'pageinfo-hidden-categories' => '{{PLURAL:$1|Схаваная катэгорыя|Схаваныя катэгорыі}} ($1)',
+'pageinfo-templates' => '{{PLURAL:$1|Шаблён|Шаблёны}} ($1)',
 
 # Skin names
 'skinname-standard' => 'Клясычнае',
@@ -3063,7 +3089,8 @@ $1',
 'file-info-size' => '$1 × $2 {{PLURAL:$2|піксэль|піксэлі|піксэляў}}, памер файла: $3, тып MIME: $4',
 'file-info-size-pages' => '$1 × $2 піксэлаў, памер файла: $3, MIME-тып: $4, $5 {{PLURAL:$5|старонка|старонкі|старонак}}',
 'file-nohires' => 'Няма вэрсіі зь лепшым разрозьненьнем.',
-'svg-long-desc' => 'SVG-файл, намінальна $1 × $2 {{PLURAL:$2|піксэль|піксэлі|піксэляў}}, памер файла: $3.',
+'svg-long-desc' => 'SVG-файл, намінальна $1 × $2 {{PLURAL:$2|піксэл|піксэлы|піксэлаў}}, памер файла: $3.',
+'svg-long-desc-animated' => 'Анімаваны SVG-файл, намінальна $1 × $2 {{PLURAL:$2|піксэл|піксэлы|піксэлаў}}, памер файла: $3',
 'show-big-image' => 'Найлепшае разрозьненьне',
 'show-big-image-preview' => 'Памер прагляду: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Іншае разрозьненьне|Іншыя разрозьненьні}}: $1.',
@@ -3073,6 +3100,8 @@ $1',
 'file-info-png-looped' => 'паўтараючыся',
 'file-info-png-repeat' => 'паўтораны $1 {{PLURAL:$1|раз|разы|разоў}}',
 'file-info-png-frames' => '$1 {{PLURAL:$1|кадар|кадры|кадраў}}',
+'file-no-thumb-animation' => "'''Заўвага: з-за тэхнічных абмежаваньняў мініятуры гэтага файла ня будуць анімаваныя.'''",
+'file-no-thumb-animation-gif' => "'''Заўвага: з-за тэхнічных абмежаваньняў мініятуры GIF-выяваў высокага разрозьненьня ствараюцца без анімацыі.'''",
 
 # Special:NewFiles
 'newimages' => 'Галерэя новых файлаў',
index 123ba4c..40735c9 100644 (file)
@@ -58,86 +58,86 @@ $bookstoreList = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#пренасочване', '#виж', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__БЕЗСЪДЪРЖАНИЕ__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__БЕЗГАЛЕРИЯ__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__СЪССЪДЪРЖАНИЕ__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__СЪДЪРЖАНИЕ__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__БЕЗ_РЕДАКТИРАНЕ_НА_РАЗДЕЛИ__', '__NOEDITSECTION__' ),
-       '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' ),
-       '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' ),
-       'pagename'                => array( '1', 'СТРАНИЦА', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'СТРАНИЦАИ', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'ИМЕННОПРОСТРАНСТВО', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'ИМЕННОПРОСТРАНСТВОИ', 'NAMESPACEE' ),
-       'fullpagename'            => array( '1', 'ПЪЛНОИМЕ_СТРАНИЦА', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'ПЪЛНОИМЕ_СТРАНИЦАИ', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'ИМЕ_ПОДСТРАНИЦА', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'ИМЕ_ПОДСТРАНИЦАИ', 'SUBPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'ИМЕ_БЕСЕДА', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'ИМЕ_БЕСЕДАИ', 'TALKPAGENAMEE' ),
-       'msg'                     => array( '0', 'СЪОБЩ:', 'MSG:' ),
-       'subst'                   => array( '0', 'ЗАМЕСТ:', 'SUBST:' ),
-       'msgnw'                   => array( '0', 'СЪОБЩБУ:', 'MSGNW:' ),
-       '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_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_border'              => array( '1', 'ръб', 'контур', 'border' ),
-       'int'                     => array( '0', 'ВЪТР:', 'INT:' ),
-       'sitename'                => array( '1', 'ИМЕНАСАЙТА', 'SITENAME' ),
-       'ns'                      => array( '0', 'ИП:', 'NS:' ),
-       'localurl'                => array( '0', 'ЛОКАЛЕНАДРЕС:', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'ЛОКАЛЕНАДРЕСИ:', 'LOCALURLE:' ),
-       'server'                  => array( '0', 'СЪРВЪР', 'SERVER' ),
-       'servername'              => array( '0', 'ИМЕНАСЪРВЪРА', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'ПЪТДОСКРИПТА', 'SCRIPTPATH' ),
-       'grammar'                 => array( '0', 'ГРАМАТИКА:', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'ПОЛ:', 'GENDER:' ),
-       'currentweek'             => array( '1', 'ТЕКУЩАСЕДМИЦА', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'ТЕКУЩ_ДЕН_ОТ_СЕДМИЦАТА', 'CURRENTDOW' ),
-       'revisionid'              => array( '1', 'ИД_НА_ВЕРСИЯТА', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'ДЕН_НА_ВЕРСИЯТА', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'ДЕН_НА_ВЕРСИЯТА2', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'МЕСЕЦ_НА_ВЕРСИЯТА', 'REVISIONMONTH' ),
-       'revisionyear'            => array( '1', 'ГОДИНА_НА_ВЕРСИЯТА', 'REVISIONYEAR' ),
-       'plural'                  => array( '0', 'МН_ЧИСЛО:', 'PLURAL:' ),
-       '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' ),
-       'newsectionlink'          => array( '1', '__ВРЪЗКА_ЗА_НОВ_РАЗДЕЛ__', '__NEWSECTIONLINK__' ),
-       'language'                => array( '0', '#ЕЗИК:', '#LANGUAGE:' ),
-       'numberofadmins'          => array( '1', 'БРОЙАДМИНИСТРАТОРИ', 'NUMBEROFADMINS' ),
-       'defaultsort'             => array( '1', 'СОРТКАТ:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'hiddencat'               => array( '1', '__СКРИТАКАТЕГОРИЯ__', '__HIDDENCAT__' ),
-       'index'                   => array( '1', '__ИНДЕКСИРАНЕ__', '__INDEX__' ),
-       'noindex'                 => array( '1', '__БЕЗИНДЕКСИРАНЕ__', '__NOINDEX__' ),
+       'redirect'                  => array( '0', '#пренасочване', '#виж', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__БЕЗСЪДЪРЖАНИЕ__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__БЕЗГАЛЕРИЯ__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__СЪССЪДЪРЖАНИЕ__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__СЪДЪРЖАНИЕ__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__БЕЗ_РЕДАКТИРАНЕ_НА_РАЗДЕЛИ__', '__NOEDITSECTION__' ),
+       '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' ),
+       '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' ),
+       'pagename'                  => array( '1', 'СТРАНИЦА', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'СТРАНИЦАИ', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'ИМЕННОПРОСТРАНСТВО', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'ИМЕННОПРОСТРАНСТВОИ', 'NAMESPACEE' ),
+       'fullpagename'              => array( '1', 'ПЪЛНОИМЕ_СТРАНИЦА', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'ПЪЛНОИМЕ_СТРАНИЦАИ', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'ИМЕ_ПОДСТРАНИЦА', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'ИМЕ_ПОДСТРАНИЦАИ', 'SUBPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'ИМЕ_БЕСЕДА', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'ИМЕ_БЕСЕДАИ', 'TALKPAGENAMEE' ),
+       'msg'                       => array( '0', 'СЪОБЩ:', 'MSG:' ),
+       'subst'                     => array( '0', 'ЗАМЕСТ:', 'SUBST:' ),
+       'msgnw'                     => array( '0', 'СЪОБЩБУ:', 'MSGNW:' ),
+       '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_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_border'                => array( '1', 'ръб', 'контур', 'border' ),
+       'int'                       => array( '0', 'ВЪТР:', 'INT:' ),
+       'sitename'                  => array( '1', 'ИМЕНАСАЙТА', 'SITENAME' ),
+       'ns'                        => array( '0', 'ИП:', 'NS:' ),
+       'localurl'                  => array( '0', 'ЛОКАЛЕНАДРЕС:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'ЛОКАЛЕНАДРЕСИ:', 'LOCALURLE:' ),
+       'server'                    => array( '0', 'СЪРВЪР', 'SERVER' ),
+       'servername'                => array( '0', 'ИМЕНАСЪРВЪРА', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'ПЪТДОСКРИПТА', 'SCRIPTPATH' ),
+       'grammar'                   => array( '0', 'ГРАМАТИКА:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'ПОЛ:', 'GENDER:' ),
+       'currentweek'               => array( '1', 'ТЕКУЩАСЕДМИЦА', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'ТЕКУЩ_ДЕН_ОТ_СЕДМИЦАТА', 'CURRENTDOW' ),
+       'revisionid'                => array( '1', 'ИД_НА_ВЕРСИЯТА', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'ДЕН_НА_ВЕРСИЯТА', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'ДЕН_НА_ВЕРСИЯТА2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'МЕСЕЦ_НА_ВЕРСИЯТА', 'REVISIONMONTH' ),
+       'revisionyear'              => array( '1', 'ГОДИНА_НА_ВЕРСИЯТА', 'REVISIONYEAR' ),
+       'plural'                    => array( '0', 'МН_ЧИСЛО:', 'PLURAL:' ),
+       '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' ),
+       'newsectionlink'            => array( '1', '__ВРЪЗКА_ЗА_НОВ_РАЗДЕЛ__', '__NEWSECTIONLINK__' ),
+       'language'                  => array( '0', '#ЕЗИК:', '#LANGUAGE:' ),
+       'numberofadmins'            => array( '1', 'БРОЙАДМИНИСТРАТОРИ', 'NUMBEROFADMINS' ),
+       'defaultsort'               => array( '1', 'СОРТКАТ:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'hiddencat'                 => array( '1', '__СКРИТАКАТЕГОРИЯ__', '__HIDDENCAT__' ),
+       'index'                     => array( '1', '__ИНДЕКСИРАНЕ__', '__INDEX__' ),
+       'noindex'                   => array( '1', '__БЕЗИНДЕКСИРАНЕ__', '__NOINDEX__' ),
 );
 
 $specialPageAliases = array(
@@ -558,9 +558,9 @@ $1',
 'dberrortext' => 'Възникна синтактична грешка при заявка към базата данни.
 Това може да означава грешка в софтуера.
 Последната заявка към базата данни беше:
-<blockquote><tt>$1</tt></blockquote>
-при функцията „<tt>$2</tt>“.
-MySQL върна грешка „<tt>$3: $4</tt>“.',
+<blockquote><code>$1</code></blockquote>
+при функцията „<code>$2</code>“.
+Базата от данни върна грешка „<samp>$3: $4</samp>“.',
 'dberrortextcl' => 'Възникна синтактична грешка при заявка към базата данни.
 Последната заявка към базата данни беше:
 „$1“
@@ -1054,7 +1054,7 @@ $2
 'rev-deleted-text-permission' => "Тази версия на страницата е била '''изтрита'''.
 Допълнителна информация може да се съдържа в [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} Дневника на изтриванията].",
 'rev-deleted-text-unhide' => "Тази версия на страницата е била '''изтрита'''.
-Допълнителна информация може се съдържа в [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} Дневника на изтриванията].
+Допълнителна информация може се съдържа в [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} Дневника на изтриванията].
 Като администратор на сайта вие можете да [$1 прегледате тази редакция], ако желаете да продължите.",
 'rev-suppressed-text-unhide' => "Тази версия на страницата е била '''прикрита'''.
 Допълнителна информация може да се съдържа в [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} Дневника на прикриванията].
@@ -1076,7 +1076,7 @@ $2
 ато администратор на сайта, вие можете да [$1 прегледате тази разликова препратка], ако желаете да продължите.",
 'rev-deleted-diff-view' => "Една от версиите на тази разлика е била '''изтрита'''.
 Можете да видите тази разлика; възможно е да има повече информация в [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} дневника на изтриванията].",
-'rev-suppressed-diff-view' => "Ð\95дна Ð¾Ñ\82 Ñ\80едакÑ\86ииÑ\82е Ð¾Ñ\82 Ñ\82ази Ñ\80азлика Ð¼ÐµÐ¶Ð´Ñ\83 Ð²ÐµÑ\80Ñ\81ииÑ\82е Ð±ÐµÑ\88е '''прикрита'''.
+'rev-suppressed-diff-view' => "Ð\95дна Ð¾Ñ\82 Ñ\80едакÑ\86ииÑ\82е Ð¾Ñ\82 Ñ\82ази Ñ\80азлика Ð¼ÐµÐ¶Ð´Ñ\83 Ð²ÐµÑ\80Ñ\81ииÑ\82е Ðµ Ð±Ð¸Ð»Ð° '''прикрита'''.
 Като администратор, можете да видите тази разлика; повече подробности има в [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} дневника за прикриванията].",
 'rev-delundel' => 'показване/скриване',
 'rev-showdeleted' => 'показване',
@@ -1146,7 +1146,7 @@ $1",
 # Suppression log
 'suppressionlog' => 'Дневник на прикриванията',
 'suppressionlogtext' => 'По-долу е посочен списък на изтривания и блокирания, свързан със съдържание, скрито от администраторите.
\97а Ñ\82екÑ\83Ñ\89иÑ\82е Ð±Ð»Ð¾ÐºÐ¸Ñ\80аниÑ\8f Ð¸ Ð·Ð°Ð±Ñ\80ани, Ð²Ð¸Ð¶Ñ\82е [[Special:BlockList|Ñ\81пиÑ\81Ñ\8aка Ñ\81 Ð±Ð»Ð¾ÐºÐ¸Ñ\80аниÑ\82е IP Ð°Ð´Ñ\80еÑ\81и]].',
\97а Ñ\82екÑ\83Ñ\89иÑ\82е Ð±Ð»Ð¾ÐºÐ¸Ñ\80аниÑ\8f Ð¸ Ð·Ð°Ð±Ñ\80ани, Ð²Ð¸Ð¶Ñ\82е [[Special:BlockList|Ñ\81пиÑ\81Ñ\8aка Ñ\81 Ð±Ð»Ð¾ÐºÐ¸Ñ\80аниÑ\8fÑ\82а]].',
 
 # History merging
 'mergehistory' => 'Сливане на редакционни истории',
@@ -1947,6 +1947,7 @@ $1',
 'wantedpages' => 'Желани страници',
 'wantedpages-badtitle' => 'Невалидно заглавие в резултатното множество: $1',
 'wantedfiles' => 'Желани файлове',
+'wantedfiletext-nocat' => 'Следните файлове се използват, но не съществуват. Възможно е да са включени файлове от външни хранилища, въпреки че съществуват. Всички такива случаи на възможна фалшива тревога ще бъдат показвани <del>зачеркнати</del>.',
 'wantedtemplates' => 'Желани шаблони',
 'mostlinked' => 'Най-препращани страници',
 'mostlinkedcategories' => 'Най-препращани категории',
@@ -2852,6 +2853,7 @@ $1',
 'spambot_username' => 'Спамочистач',
 'spam_reverting' => 'Връщане на последната версия, несъдържаща препратки към $1',
 'spam_blanking' => 'Всички версии, съдържащи препратки към $1, изчистване',
+'spam_deleting' => 'Всички версии съдържат препратки към $1, изтриване',
 
 # Info page
 'pageinfo-title' => 'Информация за "$1"',
@@ -2859,12 +2861,13 @@ $1',
 'pageinfo-header-edits' => 'Редакции',
 'pageinfo-views' => 'Брой прегледи',
 'pageinfo-watchers' => 'Брой наблюдабащи',
+'pageinfo-redirects-name' => 'Пренасочвания към тази страница',
 'pageinfo-subpages-name' => 'Подстраници на тази страница',
 'pageinfo-lastuser' => 'Последeн редактор',
 'pageinfo-lasttime' => 'Дата на последнoто редактиране',
 'pageinfo-edits' => 'Общ брой редакции',
 'pageinfo-authors' => 'Брой на отделни автори',
-'pageinfo-magic-words' => 'Вълшебни думички ($1)',
+'pageinfo-magic-words' => '{{PLURAL:$1|Вълшебна думичка|Вълшебни думички}} ($1)',
 
 # Skin names
 'skinname-standard' => 'Класика',
index 04fcaed..0fa7c96 100644 (file)
@@ -120,43 +120,43 @@ $specialPageAliases = array(
 );
 
 $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', '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' ),
+       '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', '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(
@@ -442,6 +442,10 @@ $1',
 'youhavenewmessages' => "$1 zo ganeoc'h ($2).",
 'newmessageslink' => 'Kemennoù nevez',
 'newmessagesdifflink' => "Diforc'hioù e-keñver ar stumm kent",
+'youhavenewmessagesfromusers' => '$1 ho peus eus {{PLURAL:$3|un implijer all|$3 implijer}} ($2).',
+'youhavenewmessagesmanyusers' => ' $1 ho peus implijerien a-leizh  ($2).',
+'newmessageslinkplural' => "{{PLURAL:$1ur c'hemennad nevez|kemennadoù nevez}}",
+'newmessagesdifflinkplural' => '{{PLURAL:$1|kemennad diwezhañ|kemennadoù diwezhañ}}',
 'youhavenewmessagesmulti' => "Kemennoù nevez zo ganeoc'h war $1",
 'editsection' => 'kemmañ',
 'editold' => 'kemmañ',
@@ -495,9 +499,9 @@ Ur roll eus ar pajennoù dibar reizh a c'hallit kavour war [[Special:SpecialPage
 'databaseerror' => 'Fazi bank roadennoù',
 'dberrortext' => 'C\'hoarvezet ez eus ur fazi ereadur eus ar reked er bank roadennoù, ar pezh a c\'hall talvezout ez eus un draen er meziant.
 Setu ar goulenn bet pledet gantañ da ziwezhañ :
-<blockquote><tt>$1</tt></blockquote>
-adal an arc\'hwel "<tt>$2</tt>".
-Adkaset eo bet ar fazi "<tt>$3: $4</tt>" gant ar bank roadennoù.',
+<blockquote><code>$1</code></blockquote>
+adal an arc\'hwel "<code>$2</code>".
+Adkaset eo bet ar fazi "<samp>$3: $4</samp>" gant ar bank roadennoù.',
 'dberrortextcl' => 'Ur fazi ereadur zo en ur reked savet ouzh ar bank roadennoù.
 Setu ar goulenn bet pledet gantañ da ziwezhañ :
 "$1"
@@ -591,6 +595,7 @@ Na zisoñjit ket resisaat ho [[Special:Preferences|penndibaboù evit {{SITENAME}
 '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',
+'password-change-forbidden' => "Ne c'hallit ket kemmañ ar gerioù-tremen er wiki-mañ.",
 '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ñ',
 'nav-login-createaccount' => 'Krouiñ ur gont pe kevreañ',
@@ -832,15 +837,17 @@ Gallout a rit [[Special:Search/{{PAGENAME}}|klask an titl anezhi]] e pajennoù a
 'noarticletext-nopermission' => 'N\'eus, evit ar mare, tamm testenn ebet war ar bajenn-mañ.
 Gallout a rit [[Special:Search/{{PAGENAME}}|klask titl ar bajenn-mañ]] war pajennoù all,
 pe <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} klask er marilhoù kar]</span>.',
+'missing-revision' => "C'hoarvezout a ra peurliesañ pa vez heuliet ul liamm istorel dispredet war-zu ur bajenn zo bet dilamet.
+Gallout a reot kavout muioc'h a vunudoù e [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} renabl an dilamadurioù].",
 'userpage-userdoesnotexist' => 'N\'eo ket enrollet ar gont "<nowiki>$1</nowiki>". Merkit ma fell deoc\'h krouiñ/kemmañ ar bajenn-mañ.',
 'userpage-userdoesnotexist-view' => 'N\'eo ket enrollet ar gont implijer "$1".',
 'blocked-notice-logextract' => "Stanket eo an implijer-mañ evit poent.
 Dindan emañ merket moned diwezhañ marilh ar stankadennoù, d'ho kelaouiñ :",
 'clearyourcache' => "Notenn :''' Goude bezañ enrollet ho pajenn e rankot freskaat krubuilh ho merdeer a-benn gwelet ar c'hemmoù.
-* '''Firefox / Safari: ''' Derc'hel da bouezañ war ''Pennlizherenn'' en ur glikañ war ''Adkargañ'', pe pouezañ war ''Ctrl-F5'' pe ''Ctrl-R'' (''⌘-R'' war ur Mac); 
-* '''Google Chrome:''' Pouezañ war ''Ctrl-Pennlizh-R'' (''⌘-Shift-R'' war ur Mac)
+* '''Firefox / Safari:''' Derc'hel da bouezañ war ''Pennlizherenn'' en ur glikañ war ''Adkargañ'', pe pouezañ war ''Ctrl-F5'' pe ''Ctrl-R'' (''⌘-R'' war ur Mac); 
+* ''''Google Chrome:''' Pouezañ war ''Ctrl-Pennlizh-R'' (''⌘-Shift-R'' war ur Mac)
 * '''Internet Explorer:''' Derc'hel da bouezañ war ''Ctrl'' en ur glikañ war ''Freskaat,'' pe pouezañ war ''Ctrl-F5''
-* '''Konqueror: '''Klikañ war ''Adkargañ'' pe pouezañ war ''F5;'' 
+* ''''Konqueror: '''Klikañ war ''Adkargañ'' pe pouezañ war ''F5;'' 
 * '''Opera:''' Riñsañ ar grubuilh e ''Ostilhoù → Penndibaboù''",
 'usercssyoucanpreview' => "'''Tun :''' Grit gant ar bouton \"{{int:showpreview}}\" evit testiñ ho follenn CSS nevez a-raok enrollañ anezhi.",
 'userjsyoucanpreview' => "'''Tun :''' Grit gant ar bouton \"{{int:showpreview}}\" evit testiñ ho follenn JS nevez a-raok enrollañ anezhi.",
@@ -952,6 +959,7 @@ A-gostez eo bet lezet an arventenn-se.',
 'expansion-depth-exceeded-warning' => "Pajenn a ya dreist d'an donder astenn",
 'parser-unstrip-loop-warning' => "Detektet ez eus bet ul lagadenn n'haller ket divontañ",
 'parser-unstrip-recursion-limit' => "Aet dreist d'ar vevenn rekurziñ n'haller ket divontañ : $1",
+'converter-manual-rule-error' => 'Fazi dinodet  er reolenn cheñch yezh dre zorn',
 
 # "Undo" feature
 'undo-success' => "Gallout a reer disteurel ar c'hemmoù-mañ. Gwiriit, mar plij, gant ar geñveriadenn a-is evit bezañ sur eo an dra-se a fell deoc'h ober; goude-se enrollit ar c'hemmoù a-is a-benn echuiñ disteurel ar c'hemmoù.",
@@ -1136,6 +1144,8 @@ Gwiriit ne vo ket torret red istor ar bajenn gant ar c'hemm-mañ.",
 'editundo' => 'dizober',
 '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.)",
+'difference-missing-revision' => "C'hoarvezout a ra peurliesañ pa vez heuliet ul liamm disheñvel dispredet war-zu ur bajenn zo bet dilamet.
+Gallout a reot kavout munudoù e [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} renabl an dilamadurioù].",
 
 # Search results
 'searchresults' => "Disoc'hoù enklask",
@@ -1402,6 +1412,7 @@ Ma skrivit anezhañ e vo implijet evit lakaat war wel ar pezh a vo bet degaset g
 'right-writeapi' => 'Ober gant an API evit kemmañ ar wiki',
 'right-delete' => 'Diverkañ pajennoù',
 'right-bigdelete' => 'Diverkañ pajennoù dezho un hir a istor',
+'right-deletelogentry' => 'Dilemel hag assevel monedoù dibar eus ar renabl',
 'right-deleterevision' => 'Diverkañ ha diziverkañ stummoù zo eus ur pajenn',
 'right-deletedhistory' => 'Gwelet anvioù an istorioù diverket hep diskouez an destenn stag outo',
 'right-deletedtext' => "Gwelet ar skrid diverket hag an diforc'hioù etre ar stummoù diverket",
@@ -1831,6 +1842,7 @@ Marteze a-walc'h e fell deoc'h kemmañ an deskrivadur anezhi war ar [$2 bajenn d
 'uploadnewversion-linktext' => 'Kargañ ur stumm nevez eus ar restr-mañ',
 'shared-repo-from' => 'eus $1',
 'shared-repo' => 'ur sanailh rannet',
+'upload-disallowed-here' => "Siwazh, ne c'hallit ket erlec'hiañ ar skeudenn-mañ",
 
 # File reversion
 'filerevert' => 'Disteuler $1',
@@ -1938,6 +1950,7 @@ Diskoulmet eo bet an enmontoù <del>barrennet</del>.',
 'nbytes' => '$1 {{PLURAL:$1|eizhbit|eizhbit}}',
 'ncategories' => '
 $1 {{PLURAL:$1|rummad|rummad}}',
+'ninterwikis' => ' {{PLURAL:$1|interwiki|interwikis}}',
 'nlinks' => '$1 {{PLURAL:$1|liamm|liamm}}',
 'nmembers' => '$1 {{PLURAL:$1|elfenn|elfenn}}',
 'nrevisions' => '$1 {{PLURAL:$1|stumm|stumm}}',
@@ -2114,6 +2127,8 @@ Gallout a ra bezañ [[{{MediaWiki:Listgrouprights-helppage}}|titouroù ouzhpenn]
 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ñ",
+'emailuser-title-target' => "Kas ur postel d'an {{PLURAL:$1|an implijer-mañ|an implijerez-mañ}}",
+'emailuser-title-notarget' => "Kas ur postel d'un implijer",
 '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.",
@@ -2158,7 +2173,7 @@ a-benn gellout kemmañ ho roll evezhiañ.",
 'addedwatchtext' => 'Ouzh ho [[Special:Watchlist|rollad evezhiañ]] eo bet ouzhpennet ar bajenn "[[:$1]]".
 Kemmoù da zont ar bajenn-mañ ha re ar bajenn gaozeal stag outi a vo rollet amañ hag e teuio ar bajenn <b>e tev</b> er [[Special:RecentChanges|roll kemmoù diwezhañ]] evit bezañ gwelet aesoc\'h ganeoc\'h.
 
-Evit tennañ ar bajenn-mañ a-ziwar ho rollad evezhiañ. klikit war "Paouez da evezhiañ" er framm merdeiñ.',
+Evit tennañ ar bajenn-mañ a-ziwar ho rollad evezhiañ, klikit war "Paouez da evezhiañ" er framm merdeiñ.',
 'removewatch' => 'Lemel a-ziwar ar roll evezhiañ',
 'removedwatchtext' => 'Lamet eo bet ar bajenn "[[:$1]]" a-ziwar ho [[Special:Watchlist|roll evezhiañ]].',
 'watch' => 'Evezhiañ',
@@ -2773,6 +2788,7 @@ Enrollit ar bajenn war hoc'h urzhiataer ha kargit anezhi amañ.",
 'import-error-interwiki' => 'Ne vez ket enporzhiet ar bajenn "$1" rak miret eo an anv evit liammoù diavaez (etrewiki).',
 'import-error-special' => 'Ne vez ket enporzhiet ar bajenn "$1" rak stag eo ouzh un esaouenn anv dibar na aotre ket pajennoù.',
 'import-error-invalid' => 'Ne vez ket enporzhiet ar bajenn "$1" rak direizh eo hec\'h anv.',
+'import-options-wrong' => '{{PLURAL:$2|Dibab fall|Dibaboù fall}}: <nowiki>$1</nowiki>',
 
 # Import log
 'importlogpage' => 'Log an enporzhiadennoù',
@@ -2921,11 +2937,34 @@ Sur a-walc'h abalamour d'ul liamm enni a gas d'ul lec'hienn ziavaez berzet.",
 
 # Info page
 'pageinfo-title' => 'Titouroù evit "$1"',
+'pageinfo-header-basic' => 'Titouroù diazez',
 'pageinfo-header-edits' => 'Kemmoù',
+'pageinfo-header-restrictions' => 'Gwarez ar bajenn',
+'pageinfo-header-properties' => 'Perzhioù ar bajenn',
+'pageinfo-display-title' => 'Titl diskwelet',
+'pageinfo-default-sort' => "Alc'hwez rummañ dre ziouer",
+'pageinfo-length' => 'Ment ar bajenn (en oktedoù)',
+'pageinfo-article-id' => 'Niverenn ar bajenn',
+'pageinfo-robot-policy' => 'Statud al lusker klask',
+'pageinfo-robot-index' => "A c'haller menegeriñ",
+'pageinfo-robot-noindex' => "Ne c'haller ket menegeriñ",
 'pageinfo-views' => 'Niver a weladennoù',
 'pageinfo-watchers' => 'Niver a dud o heuliañ',
+'pageinfo-redirects-name' => 'Adkas war-zu ar bajenn-mañ',
+'pageinfo-subpages-name' => 'Ispajennoù eus ar bajenn-mañ',
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|kasadur|kasadurioù}}; $3 {{PLURAL:$3|nann kasaduri|nann kasadurioù}})',
+'pageinfo-firstuser' => 'Krouer ar bajenn',
+'pageinfo-firsttime' => 'Deiziad krouiñ ar bajenn',
+'pageinfo-lastuser' => 'Kontroller diwezhañ',
+'pageinfo-lasttime' => "Deiziad ar c'hemm diwezhañ",
 'pageinfo-edits' => 'Niver a gemmoù',
 'pageinfo-authors' => 'Niver a aozerien disheñvel',
+'pageinfo-recent-edits' => 'Niver a gemmoù nevez (er $1 diwezhañ)',
+'pageinfo-recent-authors' => "Niver a aozerien nevez a-ziforc'h",
+'pageinfo-restriction' => 'Gwareziñ ar bajenn (<code>{{lcfirst:$1}}</code>)',
+'pageinfo-magic-words' => '{{PLURAL:$1|Ger hud |Gerioù hud}} ($1)',
+'pageinfo-hidden-categories' => '{{PLURAL:$1|Rumm kuzh|Rummoù kuzh}} ($1)',
+'pageinfo-templates' => "{{PLURAL:$1|Patrom endalc'het|Patromoù endalc'het}} ($1)",
 
 # Skin names
 'skinname-standard' => 'Standard',
@@ -2980,6 +3019,7 @@ Ma vez erounezet ganeoc'h e c'hallje tagañ ho reizhiad.",
 'file-info-size-pages' => '$1 × $2 piksel, ment ar restr : $3, seurt MIME : $4, $5 {{PLURAL:$5|pajenn|pajenn}}',
 '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-animated' => 'Restr SVG bev, ment $1 × $2 piksel, ment ar restr: $3',
 'show-big-image' => 'Pizhder leun',
 'show-big-image-preview' => 'Ment ar rakweled-mañ : $1.',
 'show-big-image-other' => '{{PLURAL:$2|pizhder all|pizhderioù all}} : $1.',
@@ -2989,6 +3029,8 @@ Ma vez erounezet ganeoc'h e c'hallje tagañ ho reizhiad.",
 '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}}',
+'file-no-thumb-animation' => 'Evezhiadenn: En abeg  da vevennoù teknikel ne vo ket bevaet skeudennoùigoù ar restr-mañ',
+'file-no-thumb-animation-gif' => 'Evezhiadenn: En abeg  da vevennoù teknikel ne vo ket bevaet ar skeudennoù GIF uhel o diarunusted evel homañ.',
 
 # Special:NewFiles
 'newimages' => 'Roll ar restroù nevez',
@@ -3809,7 +3851,7 @@ A-hend-all e c'hallit ober gant ar furmskrid eeunaet dindan. Ouzhpennet e vo hoc
 'api-error-file-too-large' => "Ar restr hoc'h eus roet a oa re vras.",
 'api-error-filename-tooshort' => 'Re verr eo anv ar restr.',
 'api-error-filetype-banned' => 'Difennet eo ar seurt restroù',
-'api-error-filetype-banned-type' => "'''N'eo ket $1 {{PLURAL:$4|ur seurt restr aotreet|seurtoù restroù aotreet}}. $2 eo {{PLURAL:$3|ar seurt restroù|ar seurtoù restroù}} degemeret.",
+'api-error-filetype-banned-type' => "N'eo ket $1{{PLURAL:$4|ur seurt restr aotreet | seurtoù restroù aotreet}}. $2 zo {{PLURAL:$3|ar seurt restroù|ar seurtoù restroù}} degemeret.?",
 'api-error-filetype-missing' => "Un astenn a vank d'ar restr.",
 'api-error-hookaborted' => "Ar c'hemm hoc'h eus klasket degas zo bet harzet gant ur c'hrog astenn.",
 'api-error-http' => "Fazi diabarzh : dibosupl kevreañ d'ar servijer.",
index cc8bc90..263acb9 100644 (file)
@@ -147,132 +147,132 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#PREUSMJERI', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__BEZSADRŽAJA__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__BEZGALERIJE__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__FORSIRANISADRŽAJ__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__SADRŽAJ__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__BEZ_IZMJENA__', '__BEZIZMJENA__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '__BEZ_ZAGLAVLJA__', '__NOHEADER__' ),
-       'currentmonth'            => array( '1', 'TRENUTNIMJESEC', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', 'TRENUTNIMJESEC1', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', 'TRENUTNIMJESECIME', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'TRENUTNIMJESECROD', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'TRENUTNIMJESECSKR', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'TRENUTNIDAN', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'TRENUTNIDAN2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'TRENUTNIDANIME', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'TRENUTNAGODINA', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'TRENUTNOVRIJEME', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'TRENUTNISAT', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'LOKALNIMJESEC', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', 'LOKALNIMJESEC1', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'LOKALNIMJESECIME', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'LOKALNIMJESECIMEROD', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'LOKALNIMJESECSKR', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'LOKALNIDAN', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'LOKALNIDAN2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'LOKALNIDANIME', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'LOKALNAGODINA', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'LOKALNOVRIJEME', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'LOKALNISAT', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'BROJSTRANICA', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'BROJČLANAKA', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'BROJDATOTEKA', 'BROJFAJLOVA', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'BROJKORISNIKA', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'BROJAKTIVNIHKORISNIKA', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'BROJPROMJENA', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'BROJPREGLEDA', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'STRANICA', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'STRANICE', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'IMENSKIPROSTOR', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'IMENSKIPROSTORI', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'PROSTORZARAZGOVOR', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'PROSTORIZARAZGOVOR', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'PROSTORSUBJEKTA', 'PROSTORCLANAKA', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'PROSTORISUBJEKTA', 'PROSTORICLANKA', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'PUNOIMESTRANE', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'PUNOIMESTRANEE', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'IMEPODSTRANICE', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'IMENAPODSTRANICE', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'IMEBAZNESTRANICE', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'IMENABAZNESTRANICE', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'IMESTRANICERAZGOVORA', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'IMENASTRANICERAZGOVORA', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'IMESTRANICESUBKJEKTA', 'IMESTRANICECLANKA', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'subjectpagenamee'        => array( '1', 'IMENASTRANICESUBJEKTA', 'IMENASTRANICECLANAKA', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
-       'msg'                     => array( '0', 'POR:', 'MSG:' ),
-       'subst'                   => array( '0', 'ZAMJENI:', 'SUBST:' ),
-       'msgnw'                   => array( '0', 'NVPOR:', 'MSGNW:' ),
-       'img_thumbnail'           => array( '1', 'mini', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'mini=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'desno', 'd', 'right' ),
-       'img_left'                => array( '1', 'lijevo', 'l', 'left' ),
-       'img_none'                => array( '1', 'n', 'bez', 'none' ),
-       '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_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_border'              => array( '1', 'granica', 'border' ),
-       '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_middle'              => array( '1', 'sredina', 'middle' ),
-       'img_bottom'              => array( '1', 'dugme', 'bottom' ),
-       'img_text_bottom'         => array( '1', 'tekst-dugme', 'text-bottom' ),
-       'sitename'                => array( '1', 'IMESAJTA', 'SITENAME' ),
-       'ns'                      => array( '0', 'IP:', 'NS:' ),
-       'localurl'                => array( '0', 'LOKALNAADRESA:', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'LOKALNEADRESE:', 'LOCALURLE:' ),
-       'servername'              => array( '0', 'IMESERVERA', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'SKRIPTA', 'SCRIPTPATH' ),
-       'grammar'                 => array( '0', 'GRAMATIKA:', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'POL:', 'GENDER:' ),
-       'notitleconvert'          => array( '0', '__BEZTC__', '__NOTITLECONVERT__', '__NOTC__' ),
-       'nocontentconvert'        => array( '0', '__BEZCC__', '__NOCONTENTCONVERT__', '__NOCC__' ),
-       'currentweek'             => array( '1', 'TRENUTNASEDMICA', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'TRENUTNIDOV', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'LOKALNASEDMICA', 'LOCALWEEK' ),
-       'revisionid'              => array( '1', 'IDREVIZIJE', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'REVIZIJEDANA', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'REVIZIJEDANA2', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'REVIZIJAMJESECA', 'REVISIONMONTH' ),
-       'revisionyear'            => array( '1', 'REVIZIJAGODINE', 'REVISIONYEAR' ),
-       'revisiontimestamp'       => array( '1', 'REVIZIJAVREMENSKOGPECATA', 'REVISIONTIMESTAMP' ),
-       'plural'                  => array( '0', 'MNOŽINA:', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'PUNURL:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'PUNURLE:', 'FULLURLE:' ),
-       'lcfirst'                 => array( '0', 'LCPRVI:', 'LCFIRST:' ),
-       'ucfirst'                 => array( '0', 'UCPRVI:', 'UCFIRST:' ),
-       'displaytitle'            => array( '1', 'POKAZINASLOV', 'DISPLAYTITLE' ),
-       'newsectionlink'          => array( '1', '__LINKNOVESEKCIJE__', '__NEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', 'SADASNJAVERZIJA', 'CURRENTVERSION' ),
-       'urlencode'               => array( '0', 'DEKODIRAJADRESU', 'URLENCODE:' ),
-       'currenttimestamp'        => array( '1', 'SADASNJIVREMENSKIPECAT', 'CURRENTTIMESTAMP' ),
-       'localtimestamp'          => array( '1', 'LOKALNIVREMENSKIPECAT', 'LOCALTIMESTAMP' ),
-       'language'                => array( '0', '#JEZIK:', '#LANGUAGE:' ),
-       'pagesinnamespace'        => array( '1', 'STRANICEUIMENSKOMPROSTORU:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'          => array( '1', 'BROJADMINISTRATORA', 'NUMBEROFADMINS' ),
-       'formatnum'               => array( '0', 'NUMERICKIFORMAT', 'FORMATNUM' ),
-       'padleft'                 => array( '0', 'JASTUKLIJEVO', 'PADLEFT' ),
-       'padright'                => array( '0', 'JASTUKDESNO', 'PADRIGHT' ),
-       'special'                 => array( '0', 'specijalno', 'special' ),
-       'filepath'                => array( '0', 'STAZADATOTEKE:', 'FILEPATH:' ),
-       'tag'                     => array( '0', 'oznaka', 'tag' ),
-       'hiddencat'               => array( '1', '__SAKRIVENAKATEGORIJA__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'STRANICEUKATEGORIJI', 'STRANICEUKAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'VELICINASTRANICE', 'PAGESIZE' ),
-       'index'                   => array( '1', '__SADRZAJ__', '__INDEX__' ),
-       'noindex'                 => array( '1', '__BEZSADRZAJA__', '__NOINDEX__' ),
-       'numberingroup'           => array( '1', 'BROJUGRUPI', 'NUMBERINGROUP', 'NUMINGROUP' ),
-       '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' ),
+       'redirect'                  => array( '0', '#PREUSMJERI', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__BEZSADRŽAJA__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__BEZGALERIJE__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__FORSIRANISADRŽAJ__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__SADRŽAJ__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__BEZ_IZMJENA__', '__BEZIZMJENA__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '__BEZ_ZAGLAVLJA__', '__NOHEADER__' ),
+       'currentmonth'              => array( '1', 'TRENUTNIMJESEC', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'TRENUTNIMJESEC1', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'TRENUTNIMJESECIME', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'TRENUTNIMJESECROD', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'TRENUTNIMJESECSKR', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'TRENUTNIDAN', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'TRENUTNIDAN2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'TRENUTNIDANIME', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'TRENUTNAGODINA', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'TRENUTNOVRIJEME', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'TRENUTNISAT', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'LOKALNIMJESEC', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'LOKALNIMJESEC1', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'LOKALNIMJESECIME', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'LOKALNIMJESECIMEROD', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'LOKALNIMJESECSKR', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'LOKALNIDAN', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'LOKALNIDAN2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'LOKALNIDANIME', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'LOKALNAGODINA', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'LOKALNOVRIJEME', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'LOKALNISAT', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'BROJSTRANICA', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'BROJČLANAKA', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'BROJDATOTEKA', 'BROJFAJLOVA', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'BROJKORISNIKA', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'BROJAKTIVNIHKORISNIKA', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'BROJPROMJENA', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'BROJPREGLEDA', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'STRANICA', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'STRANICE', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'IMENSKIPROSTOR', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'IMENSKIPROSTORI', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'PROSTORZARAZGOVOR', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'PROSTORIZARAZGOVOR', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'PROSTORSUBJEKTA', 'PROSTORCLANAKA', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'PROSTORISUBJEKTA', 'PROSTORICLANKA', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'PUNOIMESTRANE', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'PUNOIMESTRANEE', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'IMEPODSTRANICE', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'IMENAPODSTRANICE', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'IMEBAZNESTRANICE', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'IMENABAZNESTRANICE', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'IMESTRANICERAZGOVORA', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'IMENASTRANICERAZGOVORA', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'IMESTRANICESUBKJEKTA', 'IMESTRANICECLANKA', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'          => array( '1', 'IMENASTRANICESUBJEKTA', 'IMENASTRANICECLANAKA', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+       'msg'                       => array( '0', 'POR:', 'MSG:' ),
+       'subst'                     => array( '0', 'ZAMJENI:', 'SUBST:' ),
+       'msgnw'                     => array( '0', 'NVPOR:', 'MSGNW:' ),
+       'img_thumbnail'             => array( '1', 'mini', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'mini=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'desno', 'd', 'right' ),
+       'img_left'                  => array( '1', 'lijevo', 'l', 'left' ),
+       'img_none'                  => array( '1', 'n', 'bez', 'none' ),
+       '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_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_border'                => array( '1', 'granica', 'border' ),
+       '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_middle'                => array( '1', 'sredina', 'middle' ),
+       'img_bottom'                => array( '1', 'dugme', 'bottom' ),
+       'img_text_bottom'           => array( '1', 'tekst-dugme', 'text-bottom' ),
+       'sitename'                  => array( '1', 'IMESAJTA', 'SITENAME' ),
+       'ns'                        => array( '0', 'IP:', 'NS:' ),
+       'localurl'                  => array( '0', 'LOKALNAADRESA:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'LOKALNEADRESE:', 'LOCALURLE:' ),
+       'servername'                => array( '0', 'IMESERVERA', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'SKRIPTA', 'SCRIPTPATH' ),
+       'grammar'                   => array( '0', 'GRAMATIKA:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'POL:', 'GENDER:' ),
+       'notitleconvert'            => array( '0', '__BEZTC__', '__NOTITLECONVERT__', '__NOTC__' ),
+       'nocontentconvert'          => array( '0', '__BEZCC__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+       'currentweek'               => array( '1', 'TRENUTNASEDMICA', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'TRENUTNIDOV', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'LOKALNASEDMICA', 'LOCALWEEK' ),
+       'revisionid'                => array( '1', 'IDREVIZIJE', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'REVIZIJEDANA', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'REVIZIJEDANA2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'REVIZIJAMJESECA', 'REVISIONMONTH' ),
+       'revisionyear'              => array( '1', 'REVIZIJAGODINE', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'REVIZIJAVREMENSKOGPECATA', 'REVISIONTIMESTAMP' ),
+       'plural'                    => array( '0', 'MNOŽINA:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'PUNURL:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'PUNURLE:', 'FULLURLE:' ),
+       'lcfirst'                   => array( '0', 'LCPRVI:', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', 'UCPRVI:', 'UCFIRST:' ),
+       'displaytitle'              => array( '1', 'POKAZINASLOV', 'DISPLAYTITLE' ),
+       'newsectionlink'            => array( '1', '__LINKNOVESEKCIJE__', '__NEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'SADASNJAVERZIJA', 'CURRENTVERSION' ),
+       'urlencode'                 => array( '0', 'DEKODIRAJADRESU', 'URLENCODE:' ),
+       'currenttimestamp'          => array( '1', 'SADASNJIVREMENSKIPECAT', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', 'LOKALNIVREMENSKIPECAT', 'LOCALTIMESTAMP' ),
+       'language'                  => array( '0', '#JEZIK:', '#LANGUAGE:' ),
+       'pagesinnamespace'          => array( '1', 'STRANICEUIMENSKOMPROSTORU:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', 'BROJADMINISTRATORA', 'NUMBEROFADMINS' ),
+       'formatnum'                 => array( '0', 'NUMERICKIFORMAT', 'FORMATNUM' ),
+       'padleft'                   => array( '0', 'JASTUKLIJEVO', 'PADLEFT' ),
+       'padright'                  => array( '0', 'JASTUKDESNO', 'PADRIGHT' ),
+       'special'                   => array( '0', 'specijalno', 'special' ),
+       'filepath'                  => array( '0', 'STAZADATOTEKE:', 'FILEPATH:' ),
+       'tag'                       => array( '0', 'oznaka', 'tag' ),
+       'hiddencat'                 => array( '1', '__SAKRIVENAKATEGORIJA__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'STRANICEUKATEGORIJI', 'STRANICEUKAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'VELICINASTRANICE', 'PAGESIZE' ),
+       'index'                     => array( '1', '__SADRZAJ__', '__INDEX__' ),
+       'noindex'                   => array( '1', '__BEZSADRZAJA__', '__NOINDEX__' ),
+       'numberingroup'             => array( '1', 'BROJUGRUPI', 'NUMBERINGROUP', 'NUMINGROUP' ),
+       '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";
@@ -523,7 +523,7 @@ $1',
 'disclaimerpage' => 'Project:Uslovi korištenja, pravne napomene i odricanje odgovornosti',
 'edithelp' => 'Pomoć pri uređivanju stranice',
 'edithelppage' => 'Help:Uređivanje',
-'helppage' => 'Pomoć:Sadržaj',
+'helppage' => 'Help:Sadržaj',
 'mainpage' => 'Početna strana',
 'mainpage-description' => 'Početna strana',
 'policy-url' => 'Project:Pravila',
@@ -666,6 +666,7 @@ $2',
 'ns-specialprotected' => 'Specijalne stranice se ne mogu uređivati.',
 'titleprotected' => 'Naslov stranice je zaštićen od postavljanja od strane korisnika [[User:$1|$1]].
 Iz razloga "\'\'$2\'\'".',
+'exception-nologin' => 'Niste prijavljeni',
 
 # Virus scanner
 'virus-badscanner' => "Loša konfiguracija: nepoznati anti-virus program: ''$1''",
@@ -3022,6 +3023,8 @@ Ovo je vjerovatno izazvao vezom ka vanjskoj nepoželjnoj stranici.',
 # Info page
 'pageinfo-title' => 'Informacije za "$1"',
 'pageinfo-header-edits' => 'Izmjene',
+'pageinfo-header-restrictions' => 'Zaštita stranice',
+'pageinfo-article-id' => 'ID stranice',
 'pageinfo-views' => 'Broj pogleda',
 'pageinfo-watchers' => 'Broj onih koji pregledaju',
 'pageinfo-edits' => 'Broj izmjena',
index f9eba2d..97ed470 100644 (file)
@@ -84,20 +84,20 @@ $dateFormats = array(
 );
 
 $magicWords = array(
-       'numberofarticles'        => array( '1', 'NOMBRED\'ARTICLES', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'NOMBRED\'ARXIUS', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'NOMBRED\'USUARIS', 'NUMBEROFUSERS' ),
-       'numberofedits'           => array( '1', 'NOMBRED\'EDICIONS', 'NUMBEROFEDITS' ),
-       'pagename'                => array( '1', 'NOMDELAPLANA', 'PAGENAME' ),
-       'img_right'               => array( '1', 'dreta', 'right' ),
-       'img_left'                => array( '1', 'esquerra', 'left' ),
-       'img_border'              => array( '1', 'vora', 'border' ),
-       'img_link'                => array( '1', 'enllaç=$1', 'link=$1' ),
-       'displaytitle'            => array( '1', 'TÍTOL', 'DISPLAYTITLE' ),
-       'language'                => array( '0', '#IDIOMA:', '#LANGUAGE:' ),
-       'special'                 => array( '0', 'especial', 'special' ),
-       'defaultsort'             => array( '1', 'ORDENA:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'pagesize'                => array( '1', 'MIDADELAPLANA', 'PAGESIZE' ),
+       'numberofarticles'          => array( '1', 'NOMBRED\'ARTICLES', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'NOMBRED\'ARXIUS', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'NOMBRED\'USUARIS', 'NUMBEROFUSERS' ),
+       'numberofedits'             => array( '1', 'NOMBRED\'EDICIONS', 'NUMBEROFEDITS' ),
+       'pagename'                  => array( '1', 'NOMDELAPLANA', 'PAGENAME' ),
+       'img_right'                 => array( '1', 'dreta', 'right' ),
+       'img_left'                  => array( '1', 'esquerra', 'left' ),
+       'img_border'                => array( '1', 'vora', 'border' ),
+       'img_link'                  => array( '1', 'enllaç=$1', 'link=$1' ),
+       'displaytitle'              => array( '1', 'TÍTOL', 'DISPLAYTITLE' ),
+       'language'                  => array( '0', '#IDIOMA:', '#LANGUAGE:' ),
+       'special'                   => array( '0', 'especial', 'special' ),
+       'defaultsort'               => array( '1', 'ORDENA:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'pagesize'                  => array( '1', 'MIDADELAPLANA', 'PAGESIZE' ),
 );
 
 $specialPageAliases = array(
@@ -1994,7 +1994,7 @@ Les entrades <del>ratllades</del> s\'han resolt.',
 'listusers-editsonly' => 'Mostra només usuaris amb edicions',
 'listusers-creationsort' => 'Ordena per data de creació',
 'usereditcount' => '$1 {{PLURAL:$1|modificació|modificacions}}',
-'usercreated' => '{{GENDER:$3|Creat}} en  $1  a les$2',
+'usercreated' => '{{GENDER:$3|Creat}}: $1 a les $2',
 'newpages' => 'Pàgines noves',
 'newpages-username' => "Nom d'usuari:",
 'ancientpages' => 'Pàgines més antigues',
index 37e16bf..17545b0 100644 (file)
@@ -62,150 +62,150 @@ $namespaceAliases = array(
 $namespaceGenderAliases = array();
 
 $magicWords = array(
-       '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:' ),
-       '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' ),
+       '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:' ),
+       '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(
index 2008ac7..6b75f91 100644 (file)
@@ -135,14 +135,14 @@ $specialPageAliases = 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' ),
+       '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(
@@ -174,8 +174,8 @@ $messages = array(
 'tog-enotifminoredits' => 'بۆ گۆڕانکارییە بچووکەکانی پەڕەکان و پەڕگەکانیش ئیمەیلم بۆ بنێرە',
 'tog-enotifrevealaddr' => 'ئەدرەسی ئیمەیلەکەم لە ئیمەیلە ئاگاداریدەرەکان دا نیشان بدە',
 'tog-shownumberswatching' => 'ژمارەی بەکارھێنەرە چاودێڕەکان نیشان بدە',
-'tog-oldsig' => 'واژۆی ئێستا:',
-'tog-fancysig' => 'وەک ویکی‌دەق لەگەڵ واژۆ مامەڵەبکە (بێ بەستەرێکی خۆکار)',
+'tog-oldsig' => 'واژووی ئێستا:',
+'tog-fancysig' => 'وەکوو ویکیدەق واژووەکە لەبەر چاو بگرە (بێ بەستەرێکی خۆگەڕ)',
 'tog-externaleditor' => 'دەستکاریکەری دەرەکی بەکاربێنە لە حاڵەتی دیفاڵتدا (تەنھا بۆ شارەزایان، ڕێکخستنی تایبەتی پێویستە لە سەر کۆمپیوتەرەکەت [//www.mediawiki.org/wiki/Manual:External_editors زانیاریی زۆرتر.])',
 'tog-externaldiff' => 'لە پرۆگرامێکی دەرەکی بۆ بینینی جیاوازیەکان کەڵک وەرگرە لە دیفاڵتدا (تەنها بۆ شارەزایان، ڕێکخستنی تایبەتی پێویستە لە سەر کۆمپیوتەرەکەت. [//www.mediawiki.org/wiki/Manual:External_editors زانیاریی زۆرتر.])',
 'tog-showjumplinks' => 'ڕێگە بدە بۆ بەستەرەکانی «{{int:jumpto}}»',
@@ -273,6 +273,8 @@ $messages = array(
 'listingcontinuesabbrev' => '(درێژە)',
 'index-category' => 'پەڕە پێرستەکراوەکان',
 'noindex-category' => 'پەڕە پێرستنەکراوەکان',
+'broken-file-category' => 'ئەو پەڕانەی بەستەری پەڕگەکانیان شکاوە',
+'categoryviewer-pagedlinks' => '($1) ($2)',
 
 'about' => 'سەبارەت',
 'article' => 'بابەت',
@@ -404,11 +406,17 @@ $1',
 تەماشای [[Special:Version|پەڕەی وەشان]] بکە.',
 
 'ok' => 'باشه‌',
+'pagetitle' => '$1 - {{SITENAME}}',
+'pagetitle-view-mainpage' => '{{SITENAME}}',
 'backlinksubtitle' => '→ $1',
 'retrievedfrom' => 'وەرگیراو لە «$1»',
 'youhavenewmessages' => '$1ت ھەیە ($2).',
 'newmessageslink' => 'پەیامی نوێ',
-'newmessagesdifflink' => 'دوا گۆڕانکارییەکان',
+'newmessagesdifflink' => 'دوایین گۆڕانکاری',
+'youhavenewmessagesfromusers' => '$1ت لە {{PLURAL:$3|بەکارھێنەرێکی تر| $3 بەکارھێنەر}} ھەیە ( $2 ).',
+'youhavenewmessagesmanyusers' => '$1ت  لە ژمارەیەک بەکارھێنەر ھەیە ( $2 ).',
+'newmessageslinkplural' => '{{PLURAL:$1|پەیامێکی نوێ|پەیامی نوێ}}',
+'newmessagesdifflinkplural' => 'دوایین {{PLURAL:$1|گۆڕانکاری|گۆڕانکارییەکان}}',
 'youhavenewmessagesmulti' => 'لە $1 دا پەیامی نوێت ھەیە',
 'editsection' => 'دەستکاری',
 'editold' => 'دەستکاری',
@@ -431,6 +439,7 @@ $1',
 'site-atom-feed' => 'فیدی Atom بۆ $1',
 'page-rss-feed' => 'فیدی RSS بۆ «$1»',
 'page-atom-feed' => 'فیدی Atom بۆ «$1»',
+'feed-atom' => 'ئەتۆم',
 'red-link-title' => '$1 (پەڕە بوونی نییە)',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
@@ -547,6 +556,7 @@ $2',
 'yourpasswordagain' => 'دیسان تێپەڕوشەکە بنووسەوە:',
 'remembermypassword' => 'چوونە ژوورەوەم لەسەر ئەم کۆمپیوتەرە پاشەکەوت بکە (ئەو پەڕی $1 {{PLURAL:$1|ڕۆژ|ڕۆژ}}ە)',
 'yourdomainname' => 'ناوی دۆمه‌ینی خۆت',
+'password-change-forbidden' => 'ناتوانیت تێپەڕوشەکانت لەم ویکییەدا بگۆڕیت.',
 'externaldberror' => 'یان هەڵەی ڕێگەپێدانی بنکەدراو هەیە یان ڕێگات پێ نادرێت بۆ نوێ کردنی هەژماری دەرەکیت.',
 'login' => 'بچۆ ژوورەوە',
 'nav-login-createaccount' => 'بچۆ ژوورەوە / ھەژمار دروست بکە',
@@ -568,6 +578,7 @@ $2',
 'userexists' => 'ئەو ناوەی تۆ داوتە پێشتر بەکارھێنراوە.
 ناوێکی دیکە ھەڵبژێرە.',
 'loginerror' => 'ھەڵەی چوونەژوورەوە',
+'createaccounterror' => 'ناتوانیت هەژماری بەکارهێنەر دروست بکەیت: $1',
 'nocookiesnew' => 'ھەژماری بەکارھێنەر دروست‌کرا، بەڵام بە سەرکەوتوویی نەچوویتەوە ژوورەوە.
 {{SITENAME}} بۆ چوونەوە ژوورەوەی بەکارھێنەر لە شەکرۆکە کەڵک وەردەگرێت.
 تۆ شەکرۆکەکەت لەکارخستووە.
@@ -715,8 +726,8 @@ $2
 'showpreview' => 'پێشبینین نیشانبدە',
 'showlivepreview' => 'پێشبینینی ڕاسته‌وخۆ',
 'showdiff' => 'گۆڕانکارییەکان نیشان بدە',
-'anoneditwarning' => "'''ھۆشیار بە:''' نەچوویتەتە ژوورەوە.
-ئەدرەسی IPی تۆ لە مێژووی دەستکارییەکانی ئەم پەڕەدا تۆماردەکرێت.",
+'anoneditwarning' => "'''ھۆشیار بە:''' نەچوویتە ژوورەوە.
+ناونیشانی IPی تۆ لە مێژووی دەستکارییەکانی ئەم پەڕەیەدا تۆماردەکرێت.",
 'anonpreviewwarning' => '«نەڕۆشتوویتە ژوورەوە. پاشەکەوتکردن، ئەدرەسی IPەکەت لە مێژووی دەستکاریی ئەم پەڕە تۆمار دەکات.»',
 'missingsummary' => "'''وە بیر خستنەوە:''' پوختەیەکت نەنووسیوە بۆ چۆنیەتی گۆڕانکارییەکەت.
 ئەگەر جارێکی تر پاشکەوت کردن لێبدەی، بێ پوختە تۆمار دەکرێ.",
@@ -805,6 +816,7 @@ $2
 'note' => "'''تێبینی:'''",
 'previewnote' => "'''لە بیرت نەچێت ئەمە تەنیا پێشبینینە.'''
 گۆڕانکارییەکانت ھێشتا پاشەکەوت نەکراون!",
+'continue-editing' => 'بەردەوام بە لەدەستکاریکردن',
 'previewconflict' => 'ئەم پێشبینینە بە تۆ نیشان ئەدات ئەو دەقەی لە شوێنی دەستکاری سەرەوە داتناوە چۆن بەرچاو ئەکەوێت ئەگەر پاشەکەوتی بکەیت.',
 'session_fail_preview' => "'''ببوورە! ناتوانین دەستکارییەکەت پێواژۆ بکەین بە ھۆی لەدەستدانی session data.'''
 تکایە دیسان ھەوڵبدەوە.
@@ -886,6 +898,7 @@ $2
 'edit-no-change' => 'دەستکاریەکەت بەرچاو نەخرا، لەبەر ئەوەی هیچ گۆڕانکارییەکت لەسەر دەقەکە نەکردووە.',
 'edit-already-exists' => 'توانای درووست‌کردنی لاپەڕەی نوێ نیە.<br />
 ئەوە لەپێش‌دا هەبوو.',
+'defaultmessagetext' => 'دەقی پەیامی هەمیشەیی',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => "'''ئاگاداری:''' ئەم لاپەڕە ژمارەیەکی زۆر بانگ‌کەری فەنکشێنی لێک‌کەرەوەی لەخۆ گرتوو.<br /><br />
@@ -967,7 +980,7 @@ $3 هۆکاری "$2" خستوەتەڕوو',
 ھێشتا دەتوانیت [$1 ئەم جیاوازییە ببینیت] ئەگەر بتەوێ.",
 'rev-delundel' => 'نیشانبدە/بشارەوە',
 'rev-showdeleted' => 'نیشان بدە',
-'revisiondelete' => 'سڕینەوە\\هاوردنەوەی پێداچوونەوەکان',
+'revisiondelete' => 'سڕینەوە/ھێنانەوەی پێداچوونەوەکان',
 'revdelete-nooldid-title' => 'مەبەستی پێداچوونەوەی نادیار',
 'revdelete-nooldid-text' => 'پێداچوەنەوەی مەبەستت ڕاچاو نەکردە بۆ ئەنجامی ئەم فەنکشێنە یان ئەو پێداچوونەوەی ڕاچاوت کردە بوونی نیە، یا خەریکی هەوڵی داشاردنی پێداچوونەوهی ئێستا‌ ئەدەی.',
 'revdelete-nologtype-title' => 'جۆری لۆگ ڕاچاو نەکراوە',
@@ -986,12 +999,12 @@ $3 هۆکاری "$2" خستوەتەڕوو',
 * سووکایەتیکردن بە کەسایەتییەک<br />
 * بڵاوکردنەوەی زانیاریی تاکەکەسی نەگونجاو<br />
 *: '' ناونیشانی ماڵ یا ژمارە تەلەفۆن و وەک ئەمانە.''<br />",
-'revdelete-legend' => 'داÙ\86اÙ\86Û\8c Ø¨Û\95ربÛ\95ستÛ\95کاÙ\86Û\8c Ø¨Û\95رÚ\86اÙ\88کەوتن',
-'revdelete-hide-text' => 'داشاردÙ\86ی دەقی پێداچوونەوە',
+'revdelete-legend' => 'سÙ\86Ù\88Ù\88ردارکردÙ\86Û\8c Ø¯Û\95رکەوتن',
+'revdelete-hide-text' => 'شاردÙ\86Û\95Ù\88Û\95ی دەقی پێداچوونەوە',
 'revdelete-hide-image' => 'ناوەڕۆکی پەڕگە بشارەوە',
 'revdelete-hide-name' => 'داشاردنی مەبەست و کردەوە',
 'revdelete-hide-comment' => 'شاردنەوەی کورتەی دەستکاری',
-'revdelete-hide-user' => 'شاردنەوەی ناوی بەکارهێنەری\\ئای-‌پی دەستکاریکەر',
+'revdelete-hide-user' => 'شاردنەوەی ناوی بەکارھێنەری/ئای-‌پی دەستکاریکەر',
 'revdelete-hide-restricted' => 'بەرگری دراوە لە بەڕێوبەران هەر وەک ئەوانی دیکە',
 'revdelete-radio-same' => '(مەیگۆڕە)',
 'revdelete-radio-set' => 'بەڵێ',
@@ -1026,9 +1039,9 @@ $1",
 ** لادان لە مافی لەبەرگرتنەوە
 ** زانیارە تاکەکەسییە نابەجێیەکان
 ** Potentially libelous information',
-'revdelete-otherreason' => 'هۆکاری دیکە/زیادی:',
+'revdelete-otherreason' => 'ھۆکاری تر/زیاتر:',
 'revdelete-reasonotherlist' => 'هۆکاری دیکە',
-'revdelete-edit-reasonlist' => 'دەستکاری هۆکارەکانی سڕینەوە',
+'revdelete-edit-reasonlist' => 'دەستکاریی ھۆکارەکانی سڕینەوە',
 'revdelete-offender' => 'نووسەری پیاچوونەوە:',
 
 # Suppression log
@@ -1069,7 +1082,7 @@ $1",
 
 # Diffs
 'history-title' => 'مێژووی پیاچوونەوەکانی «$1»',
-'difference-title' => 'جیاوازی نێوان پیاچوونەوەکانی «$1»',
+'difference-title' => 'جیاوازیی نێوان پێداچوونەوەکانی «$1»',
 'difference-title-multipage' => 'جیاوازیی نێوان پەڕەی «$1» و «$2»',
 'difference-multipage' => '(جیاوازی نێوان پەڕەکان)',
 'lineno' => 'ھێڵی  $1:',
@@ -1178,7 +1191,7 @@ $1",
 'prefs-misc' => 'جۆراوجۆر',
 'prefs-resetpass' => 'تێپەڕوشە بگۆڕە',
 'prefs-changeemail' => 'ئەدرەسی ئیمەیل بگۆڕە',
-'prefs-setemail' => 'ئەدرەسێکی ئیمەیل رێکبخە',
+'prefs-setemail' => 'ناونیشانێکی ئیمەیل دیاری بکە',
 'prefs-email' => 'ھەڵبژاردەکانی ئیمەیل',
 'prefs-rendering' => 'ڕواڵەت',
 'saveprefs' => 'پاشەکەوت',
@@ -1238,12 +1251,12 @@ $1",
 'yourrealname' => 'ناوی ڕاستی:',
 'yourlanguage' => 'زمان',
 'yourvariant' => 'شێوەزاری زمانی ناوەرۆک:',
-'yournick' => 'Ù\86ازÙ\86اÙ\88',
+'yournick' => 'Ù\88اÚ\98Ù\88Ù\88Û\8c Ù\86Ù\88Û\8e:',
 'prefs-help-signature' => 'بۆچوونەکان لە لاپەڕەکانی وتووێژدا دەبێ بە "<nowiki>~~~~</nowiki>" دیاری بکرێن، کە دواتر خۆکار دەگۆڕێ بە واژۆکەت و مۆری کاتی.',
 'badsig' => 'ئیمزاكه‌ هه‌ڵه‌یه‌، ته‌ماشای كۆدی HTML بكه‌‌',
 'badsiglength' => 'واژۆکەت زۆر درێژە.
 واژۆ نابێ لە $1 {{PLURAL:$1|نووسە|نووسە}} درێژتر بێت.',
-'yourgender' => 'ڕەگەز:',
+'yourgender' => 'زایەند:',
 'gender-unknown' => 'ئاشکرا نەکراو',
 'gender-male' => 'پیاو',
 'gender-female' => 'ژن',
@@ -1271,7 +1284,7 @@ $1",
 'prefs-diffs' => 'جیاوازییەکان',
 
 # User rights
-'userrights' => 'بەڕێوەبردنی مافەکانی بەکارهێنەران',
+'userrights' => 'بەڕێوەبردنی مافەکانی بەکارھێنەر',
 'userrights-lookup-user' => 'بەڕێوەبردنی گرووپەکانی بەکارهێنەران',
 'userrights-user-editname' => 'ناوی بەکارهێنەرێک بنووسە:',
 'editusergroup' => 'گرووپەکانی بەکارهێنەر بگۆڕە',
@@ -1381,7 +1394,7 @@ $1",
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'خوێندنەوەی ئەم پەڕە',
-'action-edit' => 'دەستکاریی ئەم پەڕە',
+'action-edit' => 'دەستکاریی ئەم پەڕەیە',
 'action-createpage' => 'درووست‌کردنی لاپەڕە',
 'action-createtalk' => 'درووست‌کردنی لەپەڕەکانی وتووێژ',
 'action-createaccount' => 'درووست‌کردنی هەژمارەی ئەم بەکارهێنەرە',
@@ -1434,7 +1447,7 @@ $1",
 'rcshowhideanons' => 'بەکارھێنەرە نەناسراوەکان $1',
 'rcshowhidepatr' => 'گۆرانکارییە کۆنترۆڵکراوەکان $1',
 'rcshowhidemine' => 'دەستکارییەکانی من $1',
-'rclinks' => 'دوایین $1 گۆڕانکاریی $2 ڕۆژی ڕابردوو نیشانبدە<br />$3',
+'rclinks' => 'دوایین $1 گۆڕانکاریی $2 ڕۆژی ڕابردوو نیشان بدە<br />$3',
 'diff' => 'جیاوازی',
 'hist' => 'مێژوو',
 'hide' => 'بشارەوە',
@@ -1693,6 +1706,7 @@ $1',
 **لادان لە مافەکانی بڵاوکردنەوە
 ***پەڕگەی دووبارەکراوە',
 'filedelete-edit-reasonlist' => 'دەستکاری هۆکارەکانی سڕینەوە',
+'filedelete-maintenance-title' => 'ناتوانیت پەڕگە بسڕیتەوە',
 
 # MIME search
 'mimesearch' => 'گەڕانی MIME',
@@ -1755,7 +1769,7 @@ $1',
 ئێستا ڕەوانکەرە بۆ [[$2]].',
 'double-redirect-fixer' => 'چارەسەرکەری ڕەوانکەر',
 
-'brokenredirects' => 'ڕەوانەکراوە شکاوەکان',
+'brokenredirects' => 'ڕەوانەکەرە شکاوەکان',
 'brokenredirectstext' => 'ئەم ڕەوانەکراوانە بەستەرن بۆ ئەو پەڕانە کە بوونیان نییە:',
 'brokenredirects-edit' => 'دەستکاری',
 'brokenredirects-delete' => 'سڕینەوە',
@@ -1798,8 +1812,9 @@ $1',
 'mostimages' => 'ئەو پەڕگانە زۆرترین بەستەریان پێدراوە',
 'mostrevisions' => 'ئەو پەڕانە زۆرترین پیاچوونەوەیان ھەیە',
 'prefixindex' => 'گشت پەڕەکان بە پێشگرەوە',
+'prefixindex-namespace' => 'هەموو پەڕەکان بەپێشگری (بۆشایی ناوی $1)',
 'shortpages' => 'پەڕە کورتەکان',
-'longpages' => 'پەڕە دڕێژەکان',
+'longpages' => 'پەڕە درێژەکان',
 'deadendpages' => 'پەڕە بنبەستەکان',
 'deadendpagestext' => 'ئەم پەڕانەی خوارەوە پەیوەندییان لەگەڵ پەڕەکانی تری {{SITENAME}} نییە.',
 'protectedpages' => 'پەڕە پارێزراوەکان',
@@ -1868,6 +1883,9 @@ $1',
 'allpages-bad-ns' => '{{SITENAME}} ناوبۆشایی نیە "$1".',
 'allpages-hide-redirects' => 'ڕەوانەکراوەکان بشارەوە',
 
+# SpecialCachedPage
+'cachedspecial-refresh-now' => 'دواترین پیشانبدە',
+
 # Special:Categories
 'categories' => 'پۆلەكان',
 'categoriespagetext' => 'ئەم {{PLURAL:$1|پۆلە پەڕە یان پەڕگەی|پۆلانە پەڕە یان پەڕگەیان}} لەخۆگرتە.
@@ -1939,6 +1957,7 @@ $1',
 'emailpagetext' => 'دەتوانی لەم فۆرمەی خوارەوە کەڵک وەربگریت بۆ ناردنی پەیامێکی ئیمەیل بۆ ئەم بەکارھێنەرە.
 ئەو ئەدرەسی ئیمەیلە لە [[Special:Preferences|ھەڵبژاردەکانی بەکارھێنەر‌یتدا]] نووسیوتە، بۆ ئەدرەسی «لەلایەن» (From) لە ئیمەیلدا نیشان دەدرێت، کە وایە بەکارھێنەری وەرگر دەتوانێ ڕاستەوخۆ وەڵامت بداتەوە.',
 'defemailsubject' => 'ئیمەیڵی {{SITENAME}} لە بەکارھێنەر «$1»ەوە',
+'usermaildisabled' => 'ئیمەیڵی بەکارهێنەر لەکاردانیە',
 'noemailtitle' => 'هیچ ناونیشانێکی ئی‌مەیل نییە',
 'noemailtext' => 'ئەم بەکارهێنەرە ناونێشانێکی بڕوا پێکراوی ئی‌مەیلی دانەناوە.',
 'nowikiemailtitle' => 'ڕێگە بۆ ئی‌مەیل نەدراوە',
@@ -1963,7 +1982,7 @@ $1',
 'usermessage-editor' => 'پەیامنێری سیستەم',
 
 # Watchlist
-'watchlist' => 'Ù\84Û\8cستی چاودێرییەکانم',
+'watchlist' => 'Ù¾Û\8eرستی چاودێرییەکانم',
 'mywatchlist' => 'پێرستی چاودێرییەکانم',
 'watchlistfor2' => 'بۆ $1 $2',
 'nowatchlist' => 'لە لیستی چاودێڕییەکانتدا ھیچ نیە.',
@@ -1973,6 +1992,7 @@ $1',
 'addwatch' => 'بیخە سەر لیستی چاودێری',
 'addedwatchtext' => 'پەڕەی «[[:$1]]» خرایە سەر [[Special:Watchlist|لیستی چاودێرییەکەت]].
 گۆڕانکارییەکانی داھاتووی ئەم پەڕە و پەڕەی وتووێژەکەی، لەوێدا ڕیزدەکرێ و پەڕەکە لە [[Special:RecentChanges|لیستی دوایین گۆڕانکارییەکاندا]] ئەستوورکراو دەردەکەوێت بۆ ئەوەی ئاسانتر دەستکەوێت.',
+'removewatch' => 'لەلیستی چاودێری لایبە',
 'removedwatchtext' => 'پەڕەی «[[:$1]]» لە [[Special:Watchlist|لیستی چاودێریەکەت]] لابرا.',
 'watch' => 'چاودێری بکە',
 'watchthispage' => 'چاودێریی ئەم پەڕە بکە',
@@ -2039,7 +2059,7 @@ $UNWATCHURL
 'deletepage' => 'پەڕە بسڕەوە',
 'confirm' => 'پشتدار بکەرەوە',
 'excontent' => 'ناوەرۆک ئەمە بوو: «$1»',
-'excontentauthor' => 'ناوەرۆک ئەمە بوو: «$1» (و تەنھا بەشداربوو  «[[Special:Contributions/$2|$2]]» بوو)',
+'excontentauthor' => 'ناوەرۆک ئەمە بوو: «$1» (و تەنیا بەشداربوو «[[Special:Contributions/$2|$2]]» بوو)',
 'exbeforeblank' => 'ناوەرۆک بەر لە بەتاڵ کردنەوە ئەمە بوو: «$1»',
 'exblank' => 'پەڕە خاڵی بوو',
 'delete-confirm' => 'سڕینەوەی «$1»',
@@ -2080,7 +2100,7 @@ $UNWATCHURL
 
 دوایین دەستکاری ئەم لاپەڕە [[User:$3|$3]] کردوویە ([[User talk:$3|وتووێژ]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
 'editcomment' => "پوختەی دەستکاری \"''\$1''\" بوو.",
-'revertpage' => 'گەڕاندنەوەی دەستکارییەکان لەلایەن [[Special:Contributions/$2|$2]] ([[User talk:$2|لێدوان]]) بۆ دوایین دەستکاریی [[User:$1|$1]]',
+'revertpage' => 'گەڕاندنەوەی دەستکارییەکانی [[Special:Contributions/$2|$2]] ([[User talk:$2|لێدوان]]) بۆ دوایین دەستکاریی [[User:$1|$1]]',
 'rollback-success' => 'دەستکارییەکانی $1 وەرگێرایەوە؛<br />
 گۆڕدرا بۆ دوایین دەستکاریی $2.',
 
@@ -2096,9 +2116,9 @@ $UNWATCHURL
 'protectedarticle' => '«[[$1]]»ی پاراست',
 'modifiedarticleprotection' => 'ئاستی پاراستنی «[[$1]]»ی گۆڕا',
 'unprotectedarticle' => 'پاراستنی لەسەر «[[$1]]» لابرد',
-'movedarticleprotection' => 'ڕێککارییەکانی پاراستن لە  "[[$2]]" گوازرایەوە بۆ "[[$1]]"',
+'movedarticleprotection' => 'ڕێککارییەکانی پاراستن لە  «[[$2]]» گوازرایەوە بۆ «[[$1]]»',
 'protect-title' => 'گۆڕینی ئاستی پاراستنی "$1"',
-'prot_1movedto2' => '[[$1]] گوازراوەتەوە بۆ [[$2]]',
+'prot_1movedto2' => '[[$1]] گوازرایەوە بۆ [[$2]]',
 'protect-legend' => 'پاراستن تەیید بکە',
 'protectcomment' => 'ھۆکار:',
 'protectexpiry' => 'ھەتا:',
@@ -2409,7 +2429,7 @@ $1',
 * ئەو چوارچێوەی خوارەوە لێنەدراو بکەی.
 
 لەو حاڵەتەدا، ئەگەر بتەوێت بیگوازیتەوە ناچار دەبیت بە شێوەی دەستی بیگوازیتەوە یان تێکەڵیان بکەی.",
-'movearticle' => 'ئەم پەڕە بگوازەوە:',
+'movearticle' => 'ئەم پەڕەیە بگوازەوە:',
 'movenologin' => 'نەچوویتەتە ژوورەوە',
 'movenologintext' => 'بۆ گواستنەوەی پەڕەیەک، ئەشێ ببی بە ئەندام و [[Special:UserLogin|لە ژوورەوە]] بیت.',
 'movenotallowed' => 'ڕێگەت پێ‌نەدراوە بۆ گواستنەوەی لاپەڕەکان.',
@@ -2417,11 +2437,11 @@ $1',
 'cant-move-user-page' => 'ڕێگەت پێ‌نەدراوە بۆ گواستنەوەی لاپەڕەکانی بەکارهێنەر (جیاواز لە ژێرلاپەڕەکان).',
 'cant-move-to-user-page' => 'ڕێگەت پێ‌نەدراوە بۆ گواستنەوەی لاپەڕەیەک بۆ لاپەڕەی بەکارهێنەر (غەیری بۆ ژێرلاپەڕەی بەکارهێنەر).',
 'newtitle' => 'بۆ ناوی نوێی:',
-'move-watch' => 'ئەم پەڕە چاودێری بکە',
-'movepagebtn' => 'ئەم پەڕە بگوازەوە',
+'move-watch' => 'چاودێری ئەم پەڕەیە بکە',
+'movepagebtn' => 'ئەم پەڕەیە بگوازەوە',
 'pagemovedsub' => 'گواستنەوە بە سەرکەوتوویی جێبەجێ کرا',
 'movepage-moved' => "'''«$1» گوازرایەوە بۆ «$2»'''",
-'movepage-moved-redirect' => 'ڕەوانکەرێک درووست‌کرا.',
+'movepage-moved-redirect' => 'ڕەوانەکەرێک دروست کرا.',
 'movepage-moved-noredirect' => 'لە دانانی ڕەوانەکەر بەرگری کرا.',
 'articleexists' => 'پەڕەیەک بەم ناوە ھەیە یان ئەو ناوەی تۆ ھەڵتبژاردووە ڕێگەی پێنەدراوە.
 تکایە ناوێکی دیکە ھەڵبژێرە.',
@@ -2431,7 +2451,7 @@ $1',
 'movedto' => 'گواسترایەوە بۆ',
 'movetalk' => 'پەڕەی وتووێژی پەیوەندیدار بگوازەوە',
 'move-subpages' => 'ژێرپەڕەکانی بگوازەوە (ھەتا $1 پەڕە)',
-'move-talk-subpages' => 'ژێرپەڕەکانی پەڕەی وتووێژی بگۆزەرەوە (ھەتاکوو $1)',
+'move-talk-subpages' => 'ژێرپەڕەکانی پەڕەی وتووێژ بگوازەوە (ھەتا $1 پەڕە)',
 'movepage-page-exists' => 'پەڕەی $1 هەیە و ناتوانرێت خۆکار بخرێتە جێی.',
 'movepage-page-moved' => 'پەڕەی $1 گۆزرایەوە بۆ $2.',
 'movepage-page-unmoved' => 'ناکرێ پەڕەی $1 بگوێزرێتەوە بۆ $2.',
@@ -2440,14 +2460,14 @@ $1',
 'movelogpagetext' => 'لە خوارەوەدا لیستی ھەموو پەڕە گواستنەوەکان دەبینن.',
 'movesubpage' => '{{PLURAL:$1|ژێرپەڕە|ژێرپەڕە}}',
 'movesubpagetext' => 'ئەم لاپەڕە $1 {{PLURAL:$1|ژێرلاپەڕەی‌|ژێرلاپەڕەی}} هەیە کە لەخوارە نیشان دراوە.',
-'movenosubpage' => 'ئەم پەڕە ھیچ ژێرپەڕەیەکی نییە.',
+'movenosubpage' => 'ئەم پەڕەیە ھیچ ژێرپەڕەیەکی نییە.',
 'movereason' => 'ھۆکار:',
 'revertmove' => 'پێچەوانەکردنەوە',
 'delete_and_move' => 'بیسڕەوە و بیگوازەوە',
 'delete_and_move_text' => '== پێویستییەکانی سڕینەوە ==
 لاپەڕەی مەبەست "[[:$1]]" لە پێش‌دا هەیە.
 ئایا دەتەوێ ئەوە بسڕیتەوە تا ڕێگە بۆ گواستنەوەی بکەیتەوە؟',
-'delete_and_move_confirm' => 'بÛ\95ÚµÛ\8eØ\8c Ù\84اپÛ\95Ú\95Û\95Ú©Û\95 Ø¨Ø³Ú\95Û\95Ù\88Ù\87',
+'delete_and_move_confirm' => 'بەڵێ، پەڕەکە بسڕەوه',
 'delete_and_move_reason' => 'سڕایەوە بۆ کردنەوەی ڕیگە بۆ گواستنەوە لە «[[$1]]»ەوە',
 'selfmove' => 'سەردێڕەکانی سەرچاوە و مەبەست یەکێکن؛
 ناکرێ لاپەڕەیەک بۆ سەر خۆی‌ بگوازرێتەوە.',
@@ -2461,7 +2481,7 @@ $1',
 'imagetypemismatch' => 'پاشگری ئەو پەڕگە نوێیە هاوتای جۆری پەڕگەکە نیە.',
 'imageinvalidfilename' => 'ناوی پەڕگەی ئامانج گونجاو نیە',
 'fix-double-redirects' => 'نوێ‌کەردنەوەی هەموو ڕەوانکەرەکان وا ئاماژە بە سەردێڕە سەرەکیەکە دەکەن',
-'move-leave-redirect' => 'لە پاشەوە ڕەوانکەرێک دابنە',
+'move-leave-redirect' => 'لە پاشەوە ڕەوانەکەرێک بھێڵەوە',
 'protectedpagemovewarning' => "'''ھۆشیار بە: ئەم پەڕە پارێزراوە بۆ ئەوی تەنیا ئەو بەکارھێنەرانە کە مافەکانی بەڕێوەبەرایەتییان ھەیە بتوانن بیگوازنەوە.'''
 دوایین لۆگ بۆ ژێدەر لە خوارەوەدا ھاتووە:",
 'semiprotectedpagemovewarning' => "'''ئاگاداری:''' ئەم پەڕە پارێزراوە بۆ ئەوی تەنھا بەکارھێنەرە تۆمارکراوەکان بتوانن بیگوازنەوە.
@@ -2632,6 +2652,7 @@ $1',
 'tooltip-upload' => 'دەستپێکردنی بارکردن',
 'tooltip-rollback' => "''گەڕاندنەوە'' بە یەک کلیک گۆڕانکاری (گۆڕانکارییەکانی) ئەم پەڕە ئەباتەوە بۆ ھی دواین بەشدار",
 'tooltip-undo' => '«پووچکردنەوە» ئەم گۆڕانکارییە دەگەڕێنێتەوە و فۆرمی دەستکاریکردنەکە لە حاڵەتی پێشبینیندا دەکاتەوە. بەم شێوە دەکرێ ھۆکارێک لە پوختەدا بنووسرێت.',
+'tooltip-preferences-save' => 'هەڵبژاردنەکانت بپارێزە',
 'tooltip-summary' => 'پوختەیەکی کورتی تێبخە',
 
 # Metadata
@@ -2659,9 +2680,13 @@ $1',
 
 # Info page
 'pageinfo-title' => 'زانیاری بۆ «$1»',
+'pageinfo-header-basic' => 'زانیاریی سەرەتایی',
 'pageinfo-header-edits' => 'دەستکاریەکان',
+'pageinfo-display-title' => 'ناونیشان نیشانبدە',
+'pageinfo-article-id' => 'زنجیرەی پەڕە',
 'pageinfo-views' => 'ژمارەی بینینەکان',
 'pageinfo-watchers' => 'ژمارەی چاودێران',
+'pageinfo-firstuser' => 'دروستکەری پەڕە',
 'pageinfo-edits' => 'ژمارەی دەستکارییەکان',
 
 # Skin names
@@ -2711,7 +2736,7 @@ $1',
 'file-info-size' => '$1 × $2 پیکسێل، قەبارەی پەڕگە: $3، جۆری MIME: $4',
 'file-nohires' => 'رەزۆلوشنی سەرتر لەمە لە بەردەست دا نیە.',
 'svg-long-desc' => 'پەڕگەی SVG، بە ناو $1 × $2 پیکسەڵ، قەبارەی پەڕگە: $3',
-'show-big-image' => 'گەورە کردنەوە',
+'show-big-image' => 'گەورەکردنەوە',
 'show-big-image-preview' => 'قەبارەی ئەم پێشبینینە: $1.',
 'show-big-image-other' => '{{PLURAL:$2|ڕەزەلووشنی|ڕەزەلووشنەکانی}} تر: $1.',
 'show-big-image-size' => '$1 لە $2 پیکسەڵ',
@@ -2730,6 +2755,10 @@ $1',
 
 # Video information, used by Language::formatTimePeriod() to format lengths in the above messages
 'video-dims' => '$1، $2 لە $3',
+'seconds-abbrev' => '$1چ',
+'minutes-abbrev' => '$1خ',
+'hours-abbrev' => '$1ک',
+'days-abbrev' => '$1ڕ',
 'seconds' => '{{PLURAL:$1|$1 چرکە|$1 چرکە}}',
 'minutes' => '{{PLURAL:$1|$1 خولەک|$1 خولەک}}',
 'hours' => '{{PLURAL:$1|$1 کاتژمێر|$1 کاتژمێر}}',
@@ -2773,10 +2802,14 @@ $1',
 'exif-imagelength' => 'بەرزی',
 'exif-imagedescription' => 'ناونیشانی وێنە',
 'exif-model' => 'جۆری کامێرا',
+'exif-software' => 'نەرمەواڵەی بەکارهاتوو',
 'exif-artist' => 'نووسەر',
 'exif-colorspace' => 'بۆشایی ره‌نگ',
+'exif-pixelydimension' => 'پانی وێنە',
+'exif-pixelxdimension' => 'بەرزی وێنە',
 'exif-usercomment' => 'بۆچوونەکانی بەکارهێنەر',
 'exif-relatedsoundfile' => 'فایلی ده‌نگی لێکچوو',
+'exif-exposuretime-format' => '$1 چرکە ($2)',
 'exif-lightsource' => 'سەرچاوەی ڕووناکی',
 'exif-flash' => 'فلاش',
 'exif-filesource' => 'سەرچاوەی پەڕگە',
@@ -2790,6 +2823,18 @@ $1',
 'exif-gpstrack' => 'ئاڕاستەی جوڵان',
 'exif-gpsimgdirection' => 'ئاڕاستەی وێنە',
 'exif-gpsdatestamp' => 'ڕێکەوتی GPS',
+'exif-objectname' => 'سەردێری کورت',
+'exif-headline' => 'سەردێر',
+'exif-source' => 'سەرچاوە',
+'exif-contact' => 'زانیاری پەیوەندیکردن',
+'exif-writer' => 'نووسەر',
+'exif-languagecode' => 'زمان',
+'exif-iimversion' => 'وەشانی IIM',
+'exif-iimcategory' => 'پۆل',
+'exif-copyrighted' => 'ڕەوشی مافی لەبەرگرتنەوە',
+
+# Make & model, can be wikified in order to link to the camera and model name
+'exif-subjectnewscode-value' => '$2 ($1)',
 
 # EXIF attributes
 'exif-compression-1' => 'نەپەستێنراو',
@@ -2899,7 +2944,20 @@ $1',
 'exif-gpsspeed-k' => 'کیلۆمەتر هەر کاتژمێر',
 'exif-gpsspeed-m' => 'مایل هەر کاتژمێر',
 
+# Pseudotags used for GPSDestDistanceRef
+'exif-gpsdestdistance-k' => 'کیلۆمەتر',
+'exif-gpsdestdistance-m' => 'میل',
+'exif-gpsdestdistance-n' => 'میکی دەریایی',
+
+'exif-dc-date' => 'ڕۆژ(ەکان)',
+'exif-dc-publisher' => 'بڵاوکار',
+'exif-dc-relation' => 'میدیای پەیوەندیدار',
+'exif-dc-rights' => 'مافەکان',
+'exif-dc-source' => 'سەرچاوەی میدیا',
+'exif-dc-type' => 'جۆری میدیا',
+
 'exif-iimcategory-hth' => 'تەندروستی',
+'exif-iimcategory-pol' => 'سیاسەت',
 'exif-iimcategory-sci' => 'زانست و تەکنۆلۆژیا',
 'exif-iimcategory-soi' => 'بابەتە کۆمەڵایەتییەکان',
 'exif-iimcategory-spo' => 'وەرزشەکان',
@@ -3028,6 +3086,7 @@ $5
 'size-megabytes' => '$1 مێگابایت',
 'size-gigabytes' => '$1 گیگابایت',
 'size-terabytes' => '$1 تێرابایت',
+'size-petabytes' => '$1 پێبی‌بایت',
 
 # Live preview
 'livepreview-loading' => 'باركردن‌...',
@@ -3093,7 +3152,8 @@ $5
 'hijri-calendar-m12' => 'زولحەججە',
 
 # Signatures
-'signature' => '[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|وتووێژ]])',
+'signature' => '[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|لێدوان]])',
+'timezone-utc' => 'UTC',
 
 # Core parser functions
 'unknown_extension_tag' => 'تاگی درێژکراوەی نەناسراو "$1"',
@@ -3214,12 +3274,15 @@ $5
 # New logging system
 'logentry-delete-delete' => '$1 پەڕەی $3ی سڕییەوە',
 'logentry-delete-restore' => '$1 پەڕەی $3ی ھێنایەوە',
+'logentry-delete-revision' => '$1 دەرکەوتنی {{PLURAL:$5|پێداچوونەوەیەکی|$5 پێداچوونەوەی}} پەڕەی $3 گۆڕیی: $4',
+'revdelete-content-hid' => 'شاردنەوەی ناوەرۆک',
+'revdelete-uname-hid' => 'ناوی بەکارهێنەری شاراوە',
 'revdelete-restricted' => 'ئەو سنووری بەرگریانەی خستراوەتە سەر بەڕێوبەران',
 'revdelete-unrestricted' => 'ئەو سنووری بەرگریانەی لابردراوە لە سەر بەڕێوبەران',
 'logentry-move-move' => '$1 پەڕەی $3ی گواستەوە بۆ $4',
 'logentry-move-move-noredirect' => '$1 پەڕەی $3 بەبێ بەجێھشتنی ڕەوانەکەرێک گواستەوە بۆ $4',
-'logentry-move-move_redir' => '$1 پەڕەی $3 گۆاستەوە بۆ $4 کە پێشتر ڕەوانەکەر بوو',
-'logentry-move-move_redir-noredirect' => '$1 پەڕەی $3 گواستەوە بۆ $4 لە جێگەی ڕەوانەکەرێک بە بێ بەجێھشتنی ڕەوانەکردنەوەیەک',
+'logentry-move-move_redir' => '$1 پەڕەی $3 گواستەوە بۆ $4 کە پێشتر ڕەوانەکەر بوو',
+'logentry-move-move_redir-noredirect' => '$1 پەڕەی $3 بەبێ بەجێھشتنی ڕەوانەکەرێک گواستەوە بۆ $4 کە پێشتر ڕەوانەکەر بوو',
 'logentry-newusers-newusers' => '$1 ھەژمارێکی بەکارھێنەریی دروستکرد',
 'logentry-newusers-create' => '$1 ھەژمارێکی بەکارھێنەریی دروستکرد',
 'logentry-newusers-create2' => '$1 ھەژمارێکی بەکارھێنەریی دروستکرد $3',
@@ -3230,6 +3293,7 @@ $5
 'feedback-subject' => 'بابەت:',
 'feedback-message' => 'پەیام:',
 'feedback-cancel' => 'ھەڵیوەشێنەوە',
+'feedback-submit' => 'تێبینییەکان بنێرە',
 'feedback-close' => 'ئەنجام درا',
 
 # API errors
index 494dcf6..2276e87 100644 (file)
@@ -139,121 +139,121 @@ $bookstoreList = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#PŘESMĚRUJ', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__BEZOBSAHU__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__BEZGALERIE__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__VŽDYOBSAH__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__OBSAH__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__BEZEDITOVATČÁST__', '__NOEDITSECTION__' ),
-       'currentmonth'            => array( '1', 'AKTUÁLNÍMĚSÍC', 'AKTUÁLNÍMĚSÍC2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', 'AKTUÁLNÍMĚSÍC1', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', 'AKTUÁLNÍMĚSÍCJMÉNO', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'AKTUÁLNÍMĚSÍCGEN', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'AKTUÁLNÍMĚSÍCZKR', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'AKTUÁLNÍDEN', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'AKTUÁLNÍDEN2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'AKTUÁLNÍDENJMÉNO', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'AKTUÁLNÍROK', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'AKTUÁLNÍČAS', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'AKTUÁLNÍHODINA', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'MÍSTNÍMĚSÍC', 'MÍSTNÍMĚSÍC2', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', 'MÍSTNÍMĚSÍC1', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'MÍSTNÍMĚSÍCJMÉNO', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'MÍSTNÍMĚSÍCGEN', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'MÍSTNÍMĚSÍCZKR', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'MÍSTNÍDEN', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'MÍSTNÍDEN2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'MÍSTNÍDENJMÉNO', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'MÍSTNÍROK', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'MÍSTNÍČAS', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'MÍSTNÍHODINA', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'POČETSTRAN', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'POČETČLÁNKŮ', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'POČETSOUBORŮ', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'POČETUŽIVATELŮ', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'POČETAKTIVNÍCHUŽIVATELŮ', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'POČETEDITACÍ', 'NUMBEROFEDITS' ),
-       'pagename'                => array( '1', 'NÁZEVSTRANY', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'NÁZEVSTRANYE', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'JMENNÝPROSTOR', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'JMENNÝPROSTORE', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'DISKUSNÍPROSTOR', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'DISKUSNÍPROSTORE', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'ČLÁNEKPROSTOR', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'ČLÁNEKPROSTORE', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'PLNÝNÁZEVSTRANY', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'PLNÝNÁZEVSTRANYE', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'NÁZEVPODSTRANY', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'NÁZEVPODSTRANYE', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'NÁZEVNADSTRANY', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'NÁZEVNADSTRANYE', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'NÁZEVDISKUSE', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'NÁZEVDISKUSEE', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'NÁZEVČLÁNKU', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'subjectpagenamee'        => array( '1', 'NÁZEVČLÁNKUE', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
-       'subst'                   => array( '0', 'VLOŽIT:', 'SUBST:' ),
-       'msgnw'                   => array( '0', 'VLOŽITNW:', 'MSGNW:' ),
-       'img_thumbnail'           => array( '1', 'náhled', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'náhled=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'vpravo', 'right' ),
-       'img_left'                => array( '1', 'vlevo', 'left' ),
-       'img_none'                => array( '1', 'žádné', 'none' ),
-       'img_width'               => array( '1', '$1pixelů', '$1px' ),
-       'img_center'              => array( '1', 'střed', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'rám', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', 'bezrámu', 'frameless' ),
-       'img_page'                => array( '1', 'strana=$1', 'strana $1', 'page=$1', 'page $1' ),
-       'img_border'              => array( '1', 'okraj', 'border' ),
-       'sitename'                => array( '1', 'NÁZEVWEBU', 'SITENAME' ),
-       'ns'                      => array( '0', 'JMENNÝPROSTOR:', 'NS:' ),
-       'localurl'                => array( '0', 'MÍSTNÍURL:', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'MÍSTNÍURLE:', 'LOCALURLE:' ),
-       'servername'              => array( '0', 'NÁZEVSERVERU', 'SERVERNAME' ),
-       'grammar'                 => array( '0', 'SKLOŇUJ:', 'GRAMMAR:' ),
-       'notitleconvert'          => array( '0', '__BEZKONVERZENADPISU__', '__NOTITLECONVERT__', '__NOTC__' ),
-       'nocontentconvert'        => array( '0', '__BEZKONVERZEOBSAHU__', '__NOCONTENTCONVERT__', '__NOCC__' ),
-       'currentweek'             => array( '1', 'AKTUÁLNÍTÝDEN', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'AKTUÁLNÍDENTÝDNE', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'MÍSTNÍTÝDEN', 'LOCALWEEK' ),
-       'localdow'                => array( '1', 'MÍSTNÍDENTÝDNE', 'LOCALDOW' ),
-       'revisionid'              => array( '1', 'IDREVIZE', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'DENREVIZE', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'DENREVIZE2', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'MĚSÍCREVIZE', 'REVISIONMONTH' ),
-       'revisionyear'            => array( '1', 'ROKREVIZE', 'REVISIONYEAR' ),
-       'revisiontimestamp'       => array( '1', 'KÓDČASUREVIZE', 'REVISIONTIMESTAMP' ),
-       'plural'                  => array( '0', 'PLURÁL:', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'PLNÉURL:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'PLNÉURLE:', 'FULLURLE:' ),
-       'lcfirst'                 => array( '0', 'PRVNÍMALÉ:', 'LCFIRST:' ),
-       'ucfirst'                 => array( '0', 'PRVNÍVELKÉ:', 'UCFIRST:' ),
-       'lc'                      => array( '0', 'MALÁ:', 'LC:' ),
-       'uc'                      => array( '0', 'VELKÁ:', 'UC:' ),
-       'displaytitle'            => array( '1', 'ZOBRAZOVANÝNADPIS', 'DISPLAYTITLE' ),
-       'newsectionlink'          => array( '1', '__LINKPŘIDATKOMENTÁŘ__', '__NEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', 'VERZESOFTWARE', 'CURRENTVERSION' ),
-       'urlencode'               => array( '0', 'ENKÓDOVATURL:', 'URLENCODE:' ),
-       'anchorencode'            => array( '0', 'ENKÓDOVATNADPIS', 'ANCHORENCODE' ),
-       'currenttimestamp'        => array( '1', 'AKTUÁLNÍKÓDČASU', 'CURRENTTIMESTAMP' ),
-       'localtimestamp'          => array( '1', 'MÍSTNÍKÓDČASU', 'LOCALTIMESTAMP' ),
-       'language'                => array( '0', '#JAZYK:', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', 'JAZYKOBSAHU', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'        => array( '1', 'STRÁNEKVEJMENNÉMPROSTORU:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'          => array( '1', 'POČETSPRÁVCŮ', 'NUMBEROFADMINS' ),
-       'formatnum'               => array( '0', 'FORMÁTUJČÍSLO', 'FORMATNUM' ),
-       'padleft'                 => array( '0', 'ZAROVNATVLEVO', 'PADLEFT' ),
-       'padright'                => array( '0', 'ZAROVNATVPRAVO', 'PADRIGHT' ),
-       'special'                 => array( '0', 'speciální', 'special' ),
-       'defaultsort'             => array( '1', 'KLÍČŘAZENÍ:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'filepath'                => array( '0', 'CESTAKSOUBORU', 'FILEPATH:' ),
-       'tag'                     => array( '0', 'značka', 'tag' ),
-       'hiddencat'               => array( '1', '__SKRÝTKAT__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'STRÁNEKVKATEGORII', 'STRÁNEKVKAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'VELIKOSTSTRÁNKY', 'PAGESIZE' ),
-       'index'                   => array( '1', '__INDEXOVAT__', '__INDEX__' ),
-       'noindex'                 => array( '1', '__NEINDEXOVAT__', '__NOINDEX__' ),
-       'staticredirect'          => array( '1', '__STATICKÉPŘESMĚROVÁNÍ__', '__STATICREDIRECT__' ),
-       'protectionlevel'         => array( '1', 'ÚROVEŇZAMČENÍ', 'PROTECTIONLEVEL' ),
+       'redirect'                  => array( '0', '#PŘESMĚRUJ', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__BEZOBSAHU__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__BEZGALERIE__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__VŽDYOBSAH__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__OBSAH__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__BEZEDITOVATČÁST__', '__NOEDITSECTION__' ),
+       'currentmonth'              => array( '1', 'AKTUÁLNÍMĚSÍC', 'AKTUÁLNÍMĚSÍC2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'AKTUÁLNÍMĚSÍC1', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'AKTUÁLNÍMĚSÍCJMÉNO', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'AKTUÁLNÍMĚSÍCGEN', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'AKTUÁLNÍMĚSÍCZKR', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'AKTUÁLNÍDEN', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'AKTUÁLNÍDEN2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'AKTUÁLNÍDENJMÉNO', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'AKTUÁLNÍROK', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'AKTUÁLNÍČAS', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'AKTUÁLNÍHODINA', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'MÍSTNÍMĚSÍC', 'MÍSTNÍMĚSÍC2', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'MÍSTNÍMĚSÍC1', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'MÍSTNÍMĚSÍCJMÉNO', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'MÍSTNÍMĚSÍCGEN', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'MÍSTNÍMĚSÍCZKR', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'MÍSTNÍDEN', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'MÍSTNÍDEN2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'MÍSTNÍDENJMÉNO', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'MÍSTNÍROK', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'MÍSTNÍČAS', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'MÍSTNÍHODINA', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'POČETSTRAN', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'POČETČLÁNKŮ', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'POČETSOUBORŮ', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'POČETUŽIVATELŮ', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'POČETAKTIVNÍCHUŽIVATELŮ', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'POČETEDITACÍ', 'NUMBEROFEDITS' ),
+       'pagename'                  => array( '1', 'NÁZEVSTRANY', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'NÁZEVSTRANYE', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'JMENNÝPROSTOR', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'JMENNÝPROSTORE', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'DISKUSNÍPROSTOR', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'DISKUSNÍPROSTORE', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'ČLÁNEKPROSTOR', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'ČLÁNEKPROSTORE', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'PLNÝNÁZEVSTRANY', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'PLNÝNÁZEVSTRANYE', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'NÁZEVPODSTRANY', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'NÁZEVPODSTRANYE', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'NÁZEVNADSTRANY', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'NÁZEVNADSTRANYE', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'NÁZEVDISKUSE', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'NÁZEVDISKUSEE', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'NÁZEVČLÁNKU', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'          => array( '1', 'NÁZEVČLÁNKUE', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+       'subst'                     => array( '0', 'VLOŽIT:', 'SUBST:' ),
+       'msgnw'                     => array( '0', 'VLOŽITNW:', 'MSGNW:' ),
+       'img_thumbnail'             => array( '1', 'náhled', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'náhled=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'vpravo', 'right' ),
+       'img_left'                  => array( '1', 'vlevo', 'left' ),
+       'img_none'                  => array( '1', 'žádné', 'none' ),
+       'img_width'                 => array( '1', '$1pixelů', '$1px' ),
+       'img_center'                => array( '1', 'střed', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'rám', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'bezrámu', 'frameless' ),
+       'img_page'                  => array( '1', 'strana=$1', 'strana $1', 'page=$1', 'page $1' ),
+       'img_border'                => array( '1', 'okraj', 'border' ),
+       'sitename'                  => array( '1', 'NÁZEVWEBU', 'SITENAME' ),
+       'ns'                        => array( '0', 'JMENNÝPROSTOR:', 'NS:' ),
+       'localurl'                  => array( '0', 'MÍSTNÍURL:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'MÍSTNÍURLE:', 'LOCALURLE:' ),
+       'servername'                => array( '0', 'NÁZEVSERVERU', 'SERVERNAME' ),
+       'grammar'                   => array( '0', 'SKLOŇUJ:', 'GRAMMAR:' ),
+       'notitleconvert'            => array( '0', '__BEZKONVERZENADPISU__', '__NOTITLECONVERT__', '__NOTC__' ),
+       'nocontentconvert'          => array( '0', '__BEZKONVERZEOBSAHU__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+       'currentweek'               => array( '1', 'AKTUÁLNÍTÝDEN', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'AKTUÁLNÍDENTÝDNE', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'MÍSTNÍTÝDEN', 'LOCALWEEK' ),
+       'localdow'                  => array( '1', 'MÍSTNÍDENTÝDNE', 'LOCALDOW' ),
+       'revisionid'                => array( '1', 'IDREVIZE', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'DENREVIZE', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'DENREVIZE2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'MĚSÍCREVIZE', 'REVISIONMONTH' ),
+       'revisionyear'              => array( '1', 'ROKREVIZE', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'KÓDČASUREVIZE', 'REVISIONTIMESTAMP' ),
+       'plural'                    => array( '0', 'PLURÁL:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'PLNÉURL:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'PLNÉURLE:', 'FULLURLE:' ),
+       'lcfirst'                   => array( '0', 'PRVNÍMALÉ:', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', 'PRVNÍVELKÉ:', 'UCFIRST:' ),
+       'lc'                        => array( '0', 'MALÁ:', 'LC:' ),
+       'uc'                        => array( '0', 'VELKÁ:', 'UC:' ),
+       'displaytitle'              => array( '1', 'ZOBRAZOVANÝNADPIS', 'DISPLAYTITLE' ),
+       'newsectionlink'            => array( '1', '__LINKPŘIDATKOMENTÁŘ__', '__NEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'VERZESOFTWARE', 'CURRENTVERSION' ),
+       'urlencode'                 => array( '0', 'ENKÓDOVATURL:', 'URLENCODE:' ),
+       'anchorencode'              => array( '0', 'ENKÓDOVATNADPIS', 'ANCHORENCODE' ),
+       'currenttimestamp'          => array( '1', 'AKTUÁLNÍKÓDČASU', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', 'MÍSTNÍKÓDČASU', 'LOCALTIMESTAMP' ),
+       'language'                  => array( '0', '#JAZYK:', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'JAZYKOBSAHU', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', 'STRÁNEKVEJMENNÉMPROSTORU:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', 'POČETSPRÁVCŮ', 'NUMBEROFADMINS' ),
+       'formatnum'                 => array( '0', 'FORMÁTUJČÍSLO', 'FORMATNUM' ),
+       'padleft'                   => array( '0', 'ZAROVNATVLEVO', 'PADLEFT' ),
+       'padright'                  => array( '0', 'ZAROVNATVPRAVO', 'PADRIGHT' ),
+       'special'                   => array( '0', 'speciální', 'special' ),
+       'defaultsort'               => array( '1', 'KLÍČŘAZENÍ:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'filepath'                  => array( '0', 'CESTAKSOUBORU', 'FILEPATH:' ),
+       'tag'                       => array( '0', 'značka', 'tag' ),
+       'hiddencat'                 => array( '1', '__SKRÝTKAT__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'STRÁNEKVKATEGORII', 'STRÁNEKVKAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'VELIKOSTSTRÁNKY', 'PAGESIZE' ),
+       'index'                     => array( '1', '__INDEXOVAT__', '__INDEX__' ),
+       'noindex'                   => array( '1', '__NEINDEXOVAT__', '__NOINDEX__' ),
+       'staticredirect'            => array( '1', '__STATICKÉPŘESMĚROVÁNÍ__', '__STATICREDIRECT__' ),
+       'protectionlevel'           => array( '1', 'ÚROVEŇZAMČENÍ', 'PROTECTIONLEVEL' ),
 );
 
 /**
@@ -267,15 +267,16 @@ $separatorTransformTable = array( ',' => "\xc2\xa0", '.' => ',' );
 
 $specialPageAliases = array(
        'Activeusers'               => array( 'Aktivní_uživatelé', 'Aktivni_uzivatele' ),
-       'Allmessages'               => array( 'Všechny_zprávy' ),
+       'Allmessages'               => array( 'Všechna_hlášení', 'Všechny_zprávy', 'Vsechna_hlaseni', 'Vsechny_zpravy' ),
        'Allpages'                  => array( 'Všechny_stránky', 'Vsechny_stranky' ),
        'Ancientpages'              => array( 'Nejstarší_stránky', 'Staré_stránky', 'Stare_stranky' ),
        'Blankpage'                 => array( 'Prázdná_stránka' ),
-       'Block'                     => array( 'Blokovat_uživatele', 'Blokovat_IP', 'Blokovat_uzivatele' ),
+       'Block'                     => array( 'Blokování', 'Blokovani', 'Blokovat_uživatele', 'Blokovat_IP', 'Blokovat_uzivatele' ),
        'Blockme'                   => array( 'Zablokuj_mě', 'Zablokuj_me' ),
        'Booksources'               => array( 'Zdroje_knih' ),
        'BrokenRedirects'           => array( 'Přerušená_přesměrování', 'Prerusena_presmerovani' ),
        'Categories'                => array( 'Kategorie' ),
+       'ChangeEmail'               => array( 'Změna_emailu', 'Zmena_emailu' ),
        'ChangePassword'            => array( 'Změna_hesla', 'Zmena_hesla', 'Resetovat_heslo' ),
        'Confirmemail'              => array( 'Potvrdit_e-mail' ),
        'Contributions'             => array( 'Příspěvky', 'Prispevky' ),
@@ -314,7 +315,7 @@ $specialPageAliases = array(
        'Movepage'                  => array( 'Přesunout_stránku' ),
        'Mycontributions'           => array( 'Mé_příspěvky', 'Me_prispevky' ),
        'Mypage'                    => array( 'Moje_stránka', 'Moje_stranka' ),
-       'Mytalk'                    => array( 'Moje_diskuse', 'Moje_diskuze' ),
+       'Mytalk'                    => array( 'Moje_diskuse' ),
        'Newimages'                 => array( 'Nové_obrázky', 'Galerie_nových_obrázků', 'Nove_obrazky' ),
        'Newpages'                  => array( 'Nové_stránky', 'Nove_stranky', 'Nejnovější_stránky', 'Nejnovejsi_stranky' ),
        'Popularpages'              => array( 'Nejnavštěvovanější_stránky', 'Nejnavstevovanejsi_stranky' ),
@@ -331,6 +332,7 @@ $specialPageAliases = array(
        'Specialpages'              => array( 'Speciální_stránky', 'Specialni_stranky' ),
        'Statistics'                => array( 'Statistika', 'Statistiky' ),
        'Tags'                      => array( 'Značky', 'Znacky' ),
+       'Unblock'                   => array( 'Odblokování', 'Odblokovani' ),
        'Uncategorizedcategories'   => array( 'Nekategorizované_kategorie', 'Nekategorizovane_kategorie' ),
        'Uncategorizedimages'       => array( 'Nekategorizované_soubory', 'Nekategorizovane_soubory' ),
        'Uncategorizedpages'        => array( 'Nekategorizované_stránky', 'Nekategorizovane_stranky' ),
@@ -2016,6 +2018,7 @@ Možná spíše chcete upravit [$2 tamější stránku s popisem souboru].',
 'shared-repo-from' => 'z {{grammar:2sg|$1}}',
 'shared-repo' => 'sdíleného úložiště',
 'filepage.css' => '/* Zde uvedené CSS se vkládá na stránky s popisem souboru, včetně cizích klientských wiki */',
+'upload-disallowed-here' => 'Tento soubor bohužel nemůžete přepsat.',
 
 # File reversion
 'filerevert' => 'Vrátit zpět $1',
@@ -2513,10 +2516,10 @@ Současné nastavení pro tuto stránku je: '''$1''':",
 'pagesize' => '(bajtů)',
 
 # Restrictions (nouns)
-'restriction-edit' => 'editace',
-'restriction-move' => 'přesunutí',
-'restriction-create' => 'vytvoření',
-'restriction-upload' => 'Nahrávání souborů',
+'restriction-edit' => 'Editace',
+'restriction-move' => 'Přesunutí',
+'restriction-create' => 'Vytvoření',
+'restriction-upload' => 'Načtení souboru',
 
 # Restriction levels
 'restriction-level-sysop' => 'zamčeno',
@@ -2919,6 +2922,7 @@ Pokud si přejete přispívat k lokalizaci softwaru MediaWiki, navštivte [//www
 'import-interwiki-templates' => 'Zahrnout všechny šablony',
 'import-interwiki-submit' => 'Importovat',
 'import-interwiki-namespace' => 'Cílový jmenný prostor:',
+'import-interwiki-rootpage' => 'Cílová kořenová stránka (nepovinné):',
 'import-upload-filename' => 'Jméno souboru:',
 'import-comment' => 'Zdůvodnění:',
 'importtext' => 'Prosím exportujte soubor ze zdrojové wiki pomocí [[Special:Export|exportního nástroje]].
@@ -2951,6 +2955,9 @@ Uložte jej na svůj disk a nahrajte ho sem.',
 'import-error-interwiki' => 'Stránka „$1“ se neimportuje, protože její název je vyhrazen pro externí odkazy (interwiki).',
 'import-error-special' => 'Stránka „$1“ se neimportuje, protože patří do speciálního jmenného prostoru, do kterého stránky nepatří.',
 'import-error-invalid' => 'Stránka „$1“ se neimportuje, protože její název je neplatný.',
+'import-options-wrong' => '{{PLURAL:$2|Chybná volba|Chybné volby}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'Zadaný název kořenové stránky je neplatný.',
+'import-rootpage-nosubpage' => 'Ve jmenném prostoru „$1“ kořenové stránky nejsou dovoleny podstránky.',
 
 # Import log
 'importlogpage' => 'Kniha importů',
@@ -3100,7 +3107,7 @@ Uložte jej na svůj disk a nahrajte ho sem.',
 'spam_deleting' => 'Všechny verze obsahovaly odkazy na $1, smazáno',
 
 # Info page
-'pageinfo-title' => 'Informace o "$1"',
+'pageinfo-title' => 'Informace o stránce „$1“',
 'pageinfo-header-basic' => 'Základní údaje',
 'pageinfo-header-edits' => 'Historie editací',
 'pageinfo-header-restrictions' => 'Zámek stránky',
@@ -3110,6 +3117,8 @@ Uložte jej na svůj disk a nahrajte ho sem.',
 'pageinfo-length' => 'Velikost stránky (v bajtech)',
 'pageinfo-article-id' => 'ID stránky',
 'pageinfo-robot-policy' => 'Nastavení pro vyhledávače',
+'pageinfo-robot-index' => 'Indexovatelná',
+'pageinfo-robot-noindex' => 'Neindexovatelná',
 'pageinfo-views' => 'Počet zobrazení',
 'pageinfo-watchers' => 'Počet sledujících',
 'pageinfo-redirects-name' => 'Přesměrování na tuto stránku',
@@ -3121,9 +3130,9 @@ Uložte jej na svůj disk a nahrajte ho sem.',
 'pageinfo-lasttime' => 'Datum nejnovější editace',
 'pageinfo-edits' => 'Celkový počet editací',
 'pageinfo-authors' => 'Celkový počet různých autorů',
-'pageinfo-recent-edits' => 'Počet nedávných editací (za posledních $1)',
+'pageinfo-recent-edits' => 'Počet nedávných ($1) editací',
 'pageinfo-recent-authors' => 'Nedávný počet různých autorů',
-'pageinfo-restriction' => 'Zámek stránky (<code>$1</code>)',
+'pageinfo-restriction' => 'Zámek stránky (<code>{{lcfirst:$1}}</code>)',
 'pageinfo-magic-words' => '{{PLURAL:$1|Kouzelné slovo|Kouzelná slova}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Skrytá|Skryté}} kategorie ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|Použitá šablona|Použité šablony}} ($1)',
@@ -3180,7 +3189,8 @@ Otevřením souboru můžete ohrozit svůj počítač.",
 'file-info-size' => '$1 × $2 pixelů, velikost souboru: $3, MIME typ: $4',
 'file-info-size-pages' => '$1 × $2 pixelů, velikost souboru: $3, MIME typ: $4, $5 {{PLURAL:$5|stránka|stránky|stránek}}',
 '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',
+'svg-long-desc-animated' => 'Animovaný 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-preview' => 'Velikost tohoto náhledu: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Jiné|Jiná}} rozlišení: $1.',
@@ -3190,6 +3200,8 @@ Otevřením souboru můžete ohrozit svůj počítač.",
 '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ů}}',
+'file-no-thumb-animation' => "'''Poznámka: Kvůli technickým omezením nebudou náhledy tohoto souboru animované.'''",
+'file-no-thumb-animation-gif' => "'''Poznámka: Kvůli technickým omezením nebudou náhledy obrázků GIF ve vysokém rozlišení, jako je tento, animované.'''",
 
 # Special:NewFiles
 'newimages' => 'Galerie nových souborů',
index c750c19..ce92abd 100644 (file)
@@ -61,8 +61,8 @@ $namespaceAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#ПРѢНАПРАВЛЄНИѤ', '#REDIRECT' ),
-       'language'                => array( '0', '#ѨꙀꙐКЪ:', '#LANGUAGE:' ),
+       'redirect'                  => array( '0', '#ПРѢНАПРАВЛЄНИѤ', '#REDIRECT' ),
+       'language'                  => array( '0', '#ѨꙀꙐКЪ:', '#LANGUAGE:' ),
 );
 
 $defaultDateFormat = 'mdy';
index e45ad2b..0766e38 100644 (file)
@@ -49,69 +49,69 @@ $bookstoreList = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#ail-cyfeirio', '#ailgyfeirio', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__DIMTAFLENCYNNWYS__', '__DIMRHESTRGYNNWYS__', '__DIMRHG__', '__NOTOC__' ),
-       'noeditsection'           => array( '0', '__DIMADRANGOLYGU__', '__DIMGOLYGUADRAN__', '__NOEDITSECTION__' ),
-       'currentmonth'            => array( '1', 'MISCYFOES', 'MISCYFREDOL', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonthname'        => array( '1', 'ENWMISCYFOES', 'ENWMISCYFREDOL', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'GENENWMISCYFOES', 'CURRENTMONTHNAMEGEN' ),
-       'currentday'              => array( '1', 'DYDDIADCYFOES', 'DYDDCYFREDOL', 'CURRENTDAY' ),
-       'currentdayname'          => array( '1', 'ENWDYDDCYFOES', 'ENWDYDDCYFREDOL', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'FLWYDDYNCYFOES', 'BLWYDDYNGYFREDOL', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'AMSERCYFOES', 'AMSERCYFREDOL', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'AWRGYFREDOL', 'CURRENTHOUR' ),
-       'numberofarticles'        => array( '1', 'NIFEROERTHYGLAU', 'NIFERYRERTHYGLAU', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'NIFERYFFEILIAU', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'NIFERYDEFNYDDWYR', 'NUMBEROFUSERS' ),
-       'numberofedits'           => array( '1', 'NIFERYGOLYGIADAU', 'NUMBEROFEDITS' ),
-       'pagename'                => array( '1', 'ENWTUDALEN', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'ENWTUDALENE', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'PARTH', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'NAMESPACE', 'PARTHE', 'NAMESPACEE' ),
-       'fullpagename'            => array( '1', 'ENWLLAWNTUDALEN', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'ENWLLAWNTUDALENE', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'ENWISDUDALEN', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'ENWISDUDALENE', 'SUBPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'ENWTUDALENSGWRS', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'ENWTUDALENSGWRSE', 'TALKPAGENAMEE' ),
-       'img_thumbnail'           => array( '1', 'ewin bawd', 'bawd', 'mân-lun', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'mân-lun=$1', 'bawd=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'de', 'right' ),
-       'img_left'                => array( '1', 'chwith', 'left' ),
-       'img_none'                => array( '1', 'dim', 'none' ),
-       'img_center'              => array( '1', 'canol', 'center', 'centre' ),
-       'img_page'                => array( '1', 'tudalen=$1', 'tudalen $1', 'page=$1', 'page $1' ),
-       'img_upright'             => array( '1', 'unionsyth', 'unionsyth=$1', 'unionsyth $1', 'upright', 'upright=$1', 'upright $1' ),
-       'img_sub'                 => array( '1', 'is', 'sub' ),
-       'img_super'               => array( '1', 'uwch', 'super', 'sup' ),
-       'img_top'                 => array( '1', 'brig', 'top' ),
-       'img_bottom'              => array( '1', 'gwaelod', 'godre', 'bottom' ),
-       'server'                  => array( '0', 'GWEINYDD', 'SERVER' ),
-       'servername'              => array( '0', 'ENW\'RGWEINYDD', 'SERVERNAME' ),
-       'grammar'                 => array( '0', 'GRAMMAR', 'GRAMADEG', 'GRAMMAR:' ),
-       'currentweek'             => array( '1', 'WYTHNOSGYFREDOL', 'CURRENTWEEK' ),
-       'revisionid'              => array( '1', 'IDYGOLYGIAD', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'DIWRNODYGOLYGIAD', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'DIWRNODYGOLYGIAD2', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'MISYGOLYGIAD', 'REVISIONMONTH' ),
-       'revisionyear'            => array( '1', 'BLWYDDYNYGOLYGIAD', 'REVISIONYEAR' ),
-       'revisiontimestamp'       => array( '1', 'STAMPAMSERYGOLYGIAD', 'REVISIONTIMESTAMP' ),
-       'plural'                  => array( '0', 'LLUOSOG:', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'URLLLAWN:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'URLLLAWNE:', 'FULLURLE:' ),
-       'newsectionlink'          => array( '1', '_NEWSECTIONLINK_', '_CYSWLLTADRANNEWYDD_', '__NEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', 'GOLYGIADCYFREDOL', 'CURRENTVERSION' ),
-       'currenttimestamp'        => array( '1', 'STAMPAMSERCYFREDOL', 'CURRENTTIMESTAMP' ),
-       'localtimestamp'          => array( '1', 'STAMPAMSERLLEOL', 'LOCALTIMESTAMP' ),
-       'language'                => array( '0', '#IAITH:', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', 'IAITHYCYNNWYS', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'        => array( '1', 'TUDALENNAUYNYPARTH:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'          => array( '1', 'NIFERYGWEINYDDWYR', 'NUMBEROFADMINS' ),
-       'formatnum'               => array( '0', 'FFORMATIORHIF', 'FORMATNUM' ),
-       'special'                 => array( '0', 'arbennig', 'special' ),
-       'hiddencat'               => array( '1', '_HIDDENCAT_', '_CATCUDD_', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'TUDALENNAUYNYCAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'MAINTTUD', 'PAGESIZE' ),
+       'redirect'                  => array( '0', '#ail-cyfeirio', '#ailgyfeirio', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__DIMTAFLENCYNNWYS__', '__DIMRHESTRGYNNWYS__', '__DIMRHG__', '__NOTOC__' ),
+       'noeditsection'             => array( '0', '__DIMADRANGOLYGU__', '__DIMGOLYGUADRAN__', '__NOEDITSECTION__' ),
+       'currentmonth'              => array( '1', 'MISCYFOES', 'MISCYFREDOL', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonthname'          => array( '1', 'ENWMISCYFOES', 'ENWMISCYFREDOL', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'GENENWMISCYFOES', 'CURRENTMONTHNAMEGEN' ),
+       'currentday'                => array( '1', 'DYDDIADCYFOES', 'DYDDCYFREDOL', 'CURRENTDAY' ),
+       'currentdayname'            => array( '1', 'ENWDYDDCYFOES', 'ENWDYDDCYFREDOL', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'FLWYDDYNCYFOES', 'BLWYDDYNGYFREDOL', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'AMSERCYFOES', 'AMSERCYFREDOL', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'AWRGYFREDOL', 'CURRENTHOUR' ),
+       'numberofarticles'          => array( '1', 'NIFEROERTHYGLAU', 'NIFERYRERTHYGLAU', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'NIFERYFFEILIAU', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'NIFERYDEFNYDDWYR', 'NUMBEROFUSERS' ),
+       'numberofedits'             => array( '1', 'NIFERYGOLYGIADAU', 'NUMBEROFEDITS' ),
+       'pagename'                  => array( '1', 'ENWTUDALEN', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'ENWTUDALENE', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'PARTH', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'NAMESPACE', 'PARTHE', 'NAMESPACEE' ),
+       'fullpagename'              => array( '1', 'ENWLLAWNTUDALEN', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'ENWLLAWNTUDALENE', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'ENWISDUDALEN', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'ENWISDUDALENE', 'SUBPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'ENWTUDALENSGWRS', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'ENWTUDALENSGWRSE', 'TALKPAGENAMEE' ),
+       'img_thumbnail'             => array( '1', 'ewin bawd', 'bawd', 'mân-lun', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'mân-lun=$1', 'bawd=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'de', 'right' ),
+       'img_left'                  => array( '1', 'chwith', 'left' ),
+       'img_none'                  => array( '1', 'dim', 'none' ),
+       'img_center'                => array( '1', 'canol', 'center', 'centre' ),
+       'img_page'                  => array( '1', 'tudalen=$1', 'tudalen $1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', 'unionsyth', 'unionsyth=$1', 'unionsyth $1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_sub'                   => array( '1', 'is', 'sub' ),
+       'img_super'                 => array( '1', 'uwch', 'super', 'sup' ),
+       'img_top'                   => array( '1', 'brig', 'top' ),
+       'img_bottom'                => array( '1', 'gwaelod', 'godre', 'bottom' ),
+       'server'                    => array( '0', 'GWEINYDD', 'SERVER' ),
+       'servername'                => array( '0', 'ENW\'RGWEINYDD', 'SERVERNAME' ),
+       'grammar'                   => array( '0', 'GRAMMAR', 'GRAMADEG', 'GRAMMAR:' ),
+       'currentweek'               => array( '1', 'WYTHNOSGYFREDOL', 'CURRENTWEEK' ),
+       'revisionid'                => array( '1', 'IDYGOLYGIAD', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'DIWRNODYGOLYGIAD', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'DIWRNODYGOLYGIAD2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'MISYGOLYGIAD', 'REVISIONMONTH' ),
+       'revisionyear'              => array( '1', 'BLWYDDYNYGOLYGIAD', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'STAMPAMSERYGOLYGIAD', 'REVISIONTIMESTAMP' ),
+       'plural'                    => array( '0', 'LLUOSOG:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'URLLLAWN:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'URLLLAWNE:', 'FULLURLE:' ),
+       'newsectionlink'            => array( '1', '_NEWSECTIONLINK_', '_CYSWLLTADRANNEWYDD_', '__NEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'GOLYGIADCYFREDOL', 'CURRENTVERSION' ),
+       'currenttimestamp'          => array( '1', 'STAMPAMSERCYFREDOL', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', 'STAMPAMSERLLEOL', 'LOCALTIMESTAMP' ),
+       'language'                  => array( '0', '#IAITH:', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'IAITHYCYNNWYS', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', 'TUDALENNAUYNYPARTH:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', 'NIFERYGWEINYDDWYR', 'NUMBEROFADMINS' ),
+       'formatnum'                 => array( '0', 'FFORMATIORHIF', 'FORMATNUM' ),
+       'special'                   => array( '0', 'arbennig', 'special' ),
+       'hiddencat'                 => array( '1', '_HIDDENCAT_', '_CATCUDD_', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'TUDALENNAUYNYCAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'MAINTTUD', 'PAGESIZE' ),
 );
 
 $linkTrail = "/^([àáâèéêìíîïòóôûŵŷa-z]+)(.*)$/sDu";
@@ -775,7 +775,6 @@ Dyma'r cofnod lòg diweddaraf, er gwybodaeth:",
 *'''Firefox / Safari:''' Pwyswch ar ''Shift'' tra'n clicio ''Ail-lwytho/Reload'', neu gwasgwch ''Ctrl-F5'' neu ''Ctrl-R'' (''⌘-R'' ar Mac);
 *'''Google Chrome:'''Pwyswch ar Ctrl-Shift-R'' (''⌘-Shift-R'' ar Mac)
 *'''Internet Explorer:''' Pwyswch ar ''Ctrl'' tra'n clicio ''Adnewyddu/Refresh'', neu gwasgwch ''Ctrl-F5''. 
-*'''Konqueror:''' Cliciwch y botwm ''Ail-lwytho/Reload'', neu gwasgwch ''F5''; 
 *'''Opera:''' gwacewch y celc yn llwyr trwy ''Offer → Dewisiadau / Tools→Preferences'';",
 'usercssyoucanpreview' => "'''Tip:''' Defnyddiwch y botwm \"{{int:showpreview}}\" er mwyn profi eich CSS newydd cyn ei gadw.",
 'userjsyoucanpreview' => "'''Tip:''' Defnyddiwch y botwm \"{{int:showpreview}}\" er mwyn profi eich JS newydd cyn ei gadw.",
@@ -1679,7 +1678,7 @@ Gweler https://www.mediawiki.org/wiki/Manual:Image_Authorization.",
 'img-auth-nofile' => 'Nid oes ffeil a\'r enw "$1" ar gael.',
 'img-auth-isdir' => 'Rydych yn ceisio cyrchu cyfeiriadur o\'r enw "$1".
 Dim ond ffeiliau y cewch eu cyrchu.',
-'img-auth-streaming' => 'Wrthi\'n llifo "$1".',
+'img-auth-streaming' => 'Wrthi\'n ffrydio "$1".',
 'img-auth-public' => "Gwaith img_auth.php yw allbynnu ffeiliau o wici preifat.
 Mae'r wici hwn wedi ei osod yn wici gyhoeddus.
 Er mwyn sicrhau'r diogelwch gorau posib, analluogwyd img_auth.php.",
@@ -1766,6 +1765,7 @@ Mae modd golygu'r disgrifiad ohoni ar ei [$2 thudalen disgrifio] fan honno.",
 'shared-repo-from' => 'oddi ar $1',
 'shared-repo' => 'storfa cyfrannol',
 'shared-repo-name-wikimediacommons' => 'Comin Wikimedia',
+'upload-disallowed-here' => "Yn anffodus ni allwch drosysgrifo'r ddelwedd hon.",
 
 # File reversion
 'filerevert' => 'Gwrthdroi $1',
@@ -1872,6 +1872,7 @@ Gosodwyd <del>llinell</del> drwy'r eitemau sydd eisoes wedi eu datrys.",
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|beit|beit|feit|beit|beit|beit}}',
 'ncategories' => '$1 {{PLURAL:$1|categori|categori|gategori|chategori|chategori|categori}}',
+'ninterwikis' => '$1 {{PLURAL:$1|cyswllt|cyswllt|gyswllt|chyswllt|chyswllt|cyswllt}}',
 'nlinks' => '$1 {{PLURAL:$1|cyswllt|cyswllt|gyswllt|chyswllt|chyswllt|cyswllt}}',
 'nmembers' => '$1 {{PLURAL:$1|aelod|aelod|aelod|aelod|aelod|aelod}}',
 'nrevisions' => '$1 {{PLURAL:$1|diwygiad|diwygiad|ddiwygiad|diwygiad|diwygiad|diwygiad}}',
@@ -1900,6 +1901,7 @@ Gosodwyd <del>llinell</del> drwy'r eitemau sydd eisoes wedi eu datrys.",
 'mostlinkedtemplates' => 'Nodiadau yn nhrefn nifer y cysylltiadau iddynt',
 'mostcategories' => 'Erthyglau yn nhrefn nifer eu categorïau',
 'mostimages' => 'Ffeiliau yn nhrefn nifer y cysylltiadau iddynt',
+'mostinterwikis' => "Tudalennau a'r nifer mwyaf o gysylltau rhyngwici",
 'mostrevisions' => 'Tudalennau yn nhrefn nifer y newidiadau iddynt',
 'prefixindex' => 'Pob tudalen yn ôl parth',
 'prefixindex-namespace' => 'Pob tudalen â rhagddodiad penodol (y parth $1)',
@@ -2047,6 +2049,8 @@ Protocoliau sy\'n cael eu cynnal: <code>$1</code> (peidiwch ag ychwanegu\'r rhai
 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',
+'emailuser-title-target' => "Ebostio'r {{GENDER:$1|defnyddiwr hwn}}",
+'emailuser-title-notarget' => 'Anfon e-bost at ddefnyddiwr',
 '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.",
@@ -2191,7 +2195,7 @@ Gallai dileu tudalen, gyda hanes golygu cymaint â hyn iddi, beri dryswch i weit
 # Rollback
 'rollback' => 'Gwrthdroi golygiadau',
 'rollback_short' => 'Gwrthdroi',
-'rollbacklink' => 'gwrthdroi',
+'rollbacklink' => 'gwrthdröer',
 'rollbacklinkcount' => 'gwrthdröer $1 {{PLURAL:$1||golygiad|olygiad|golygiad|golygiad|golygiad}}',
 'rollbacklinkcount-morethan' => 'gwrthdröer mwy na $1 {{PLURAL:$1||golygiad|olygiad|golygiad|golygiad|golygiad}}',
 'rollbackfailed' => 'Methodd y gwrthdroi',
@@ -2842,11 +2846,27 @@ Achos hyn yn fwy na thebyg yw presenoldeb cysylltiad i wefan ar y rhestr wahardd
 
 # Info page
 'pageinfo-title' => 'Manylion "$1"',
-'pageinfo-header-edits' => 'Golygiadau',
+'pageinfo-header-basic' => 'Gwybodaeth sylfaenol',
+'pageinfo-header-edits' => 'Hanes golygu',
+'pageinfo-header-restrictions' => 'Diogelwch y dudalen',
+'pageinfo-header-properties' => "Priodweddau'r dudalen",
+'pageinfo-display-title' => 'Teitl y dudalen',
+'pageinfo-default-sort' => 'Allwedd trefnu diofyn',
+'pageinfo-length' => 'Hyd y dudalen (beitiau)',
+'pageinfo-article-id' => 'ID y dudalen',
+'pageinfo-robot-policy' => 'Statws i beiriannau chwilio',
 'pageinfo-views' => 'Nifer yr ymweliadau',
-'pageinfo-watchers' => 'Nifer y gwylwyr',
-'pageinfo-edits' => 'Nifer y golygiadau',
-'pageinfo-authors' => 'Nifer yr awduron gwahanol',
+'pageinfo-watchers' => 'Nifer gwylwyr y dudalen',
+'pageinfo-redirects-name' => "Nifer yr ailgyfeiriadau i'r dudalen hon",
+'pageinfo-subpages-name' => "Nifer yr is-dudalennau i'r dudalen hon",
+'pageinfo-firstuser' => 'Y defnyddiwr a ddechreuodd y dudalen',
+'pageinfo-firsttime' => "Dyddiad dechrau'r dudalen",
+'pageinfo-lastuser' => 'Y golygydd diweddaraf',
+'pageinfo-lasttime' => 'Dyddiad y golygiad diweddaraf',
+'pageinfo-edits' => 'Cyfanswm y golygiadau',
+'pageinfo-authors' => 'Cyfanswm yr awduron gwahanol',
+'pageinfo-magic-words' => '{{PLURAL:$1|Gair|Gair|Geiriau}} hud ($1)',
+'pageinfo-hidden-categories' => '{{PLURAL:$1|Categori|Categori|Categorïau}} cudd ($1)',
 
 # Skin names
 'skinname-standard' => 'Safonol',
index e039978..522ef8b 100644 (file)
@@ -404,7 +404,7 @@ $messages = array(
 'redirectedfrom' => '(Omdirigeret fra $1)',
 'redirectpagesub' => 'Omdirigering',
 'lastmodifiedat' => 'Denne side blev senest ændret $1 kl. $2.',
-'viewcount' => 'Siden er vist {{PLURAL:$1|en gang|$1 gange}}.',
+'viewcount' => 'Siden er vist {{PLURAL:$1|en gang|$1 gange}}.',
 'protectedpage' => 'Beskyttet side',
 'jumpto' => 'Skift til:',
 'jumptonavigation' => 'Navigation',
@@ -858,7 +858,6 @@ Loggen over den seneste blokering ses nedenfor:',
 * '''Firefox / Safari:''' Hold ''shifttasten'' nede og klik på ''reload'', eller tryk enten ''Ctrl-F5'' eller ''Ctrl-Shift-r'' (''⌘-R'' på en Mac).
 * '''Google Chrome:''' Tryk ''Ctrl-Shift-R'' (''⌘-Shift-R'' på en Mac).
 * '''Internet Explorer:''' Hold ''controltasten'' nede og klik på ''refresh'' eller tryk på ''Ctrl-F5''.
-* '''Konqueror:''' Klik på ''reload'' eller tryk på ''F5''.
 * '''Opera:''' Tøm cachen i ''Tools → Preferences''.",
 'usercssyoucanpreview' => "'''Tip:''' Brug \"{{int:showpreview}}\"-knappen for at teste dit nye CSS inden du gemmer.",
 'userjsyoucanpreview' => "'''Tip:''' Brug \"{{int:showpreview}}\"-knappen for at teste dit nye JavaScript inden du gemmer.",
@@ -1836,6 +1835,7 @@ Måske vil du redigere beskrivelsen på dens [$2 filbeskrivelsesside] der.',
 'uploadnewversion-linktext' => 'Læg en ny version af denne fil op',
 'shared-repo-from' => 'fra $1',
 'shared-repo' => 'et delt filarkiv',
+'upload-disallowed-here' => 'Desværre kan du ikke overskrive dette billede.',
 
 # File reversion
 'filerevert' => 'Gendan $1',
@@ -1944,6 +1944,7 @@ Hver linje indeholder henvisninger til den første og den anden omdirigering, s
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|byte|bytes}}',
 'ncategories' => '$1 {{PLURAL:$1|kategori|kategorier}}',
+'ninterwikis' => '$1 {{PLURAL:$1|interwikilink|interwikilinks}}',
 'nlinks' => '{{PLURAL:$1|1 henvisning|$1 henvisninger}}',
 'nmembers' => '$1 {{PLURAL:$1|medlem|medlemmer}}',
 'nrevisions' => '{{PLURAL:$1|1 ændring|$1 ændringer}}',
@@ -1972,6 +1973,7 @@ Hver linje indeholder henvisninger til den første og den anden omdirigering, s
 'mostlinkedtemplates' => 'Hyppigst brugte skabeloner',
 'mostcategories' => 'Mest brugte sider',
 'mostimages' => 'Mest brugte filer',
+'mostinterwikis' => 'Sider med flest interwikilinks',
 'mostrevisions' => 'Sider med de fleste ændringer',
 'prefixindex' => 'Alle sider med præfiks',
 'prefixindex-namespace' => 'Alle sider med præfiks (navnerummet $1)',
@@ -2118,6 +2120,8 @@ Der findes muligvis [[{{MediaWiki:Listgrouprights-helppage}}|yderligere informat
 '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',
+'emailuser-title-target' => 'Send email til denne {{GENDER:$1|bruger}}',
+'emailuser-title-notarget' => 'Send email til en 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.',
@@ -2767,6 +2771,7 @@ Alle Transwiki import-aktioner protokolleres i [[Special:Log/import|import-logge
 'import-error-interwiki' => 'Siden "$1" importeres ikke, da dens navn er reserveret for eksterne henvisninger (interwiki).',
 'import-error-special' => 'Siden "$1" importeres ikke, da den tilhører et særligt navnerum, der ikke tillader sider.',
 'import-error-invalid' => 'Siden "$1" importeres ikke, da dens navn er ugyldigt.',
+'import-options-wrong' => '{{PLURAL:$2|Ugyldig indstilling|Ugyldige indstillinger}}: <nowiki>$1</nowiki>',
 'import-rootpage-invalid' => 'Den rodside der er angivet har en ugyldig titel.',
 'import-rootpage-nosubpage' => 'Navnerummet "$1" tillader ikke undersider af rodsiderne.',
 
@@ -2895,11 +2900,29 @@ Dette skyldes sandsynligvis en henvisning til et sortlistet eksternt websted.',
 
 # Info page
 'pageinfo-title' => 'Information om "$1"',
-'pageinfo-header-edits' => 'Redigeringer',
+'pageinfo-header-basic' => 'Grundlæggende oplysninger',
+'pageinfo-header-edits' => 'Redigeringshistorik',
+'pageinfo-header-restrictions' => 'Sidebeskyttelse',
+'pageinfo-header-properties' => 'Sideegenskaber',
+'pageinfo-default-sort' => 'Standardsorteringsnøgle',
+'pageinfo-length' => 'Sidelængde (i bytes)',
+'pageinfo-article-id' => 'Side-ID',
+'pageinfo-robot-policy' => 'Søgemaskinestatus',
+'pageinfo-robot-index' => 'Indekserbar',
+'pageinfo-robot-noindex' => 'Ikke indekserbar',
 'pageinfo-views' => 'Antal visninger',
 'pageinfo-watchers' => 'Antal brugere, der overvåger siden',
-'pageinfo-edits' => 'Antal redigeringer',
-'pageinfo-authors' => 'Antal forskellige forfattere',
+'pageinfo-redirects-name' => 'Omdirigeringer til denne side',
+'pageinfo-subpages-name' => 'Undersider til denne side',
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|omdirigering|omdirigeringer}}; $3 {{PLURAL:$3|der ikke er en omdirigering|der ikke er omdirigeringer}})',
+'pageinfo-firsttime' => 'Dato for oprettelsen af siden',
+'pageinfo-lasttime' => 'Dato for seneste redigering',
+'pageinfo-edits' => 'Samlet antal redigeringer',
+'pageinfo-authors' => 'Det samlede antal forskellige forfattere',
+'pageinfo-restriction' => 'Sidebeskyttelse (<code>{{lcfirst:$1}}</code>)',
+'pageinfo-magic-words' => '{{PLURAL:$1|Magisk|Magiske}} ord ($1)',
+'pageinfo-hidden-categories' => '{{PLURAL:$1|Skjult kategori|Skjulte kategorier}} ($1)',
+'pageinfo-templates' => '{{PLURAL:$1|Transkluderet skabelon|Transkluderede skabeloner}} ($1)',
 
 # Skin names
 'skinname-standard' => 'Klassik',
@@ -2953,6 +2976,7 @@ Du kan beskadige dit system hvis du udfører den.",
 'file-info-size-pages' => '$1 × $2 punkter, filstørrelse: $3, MIME-type: $4, $5 {{PLURAL:$5|side|sider}}',
 'file-nohires' => 'Ingen højere opløsning fundet.',
 'svg-long-desc' => 'SVG fil, basisstørrelse $1 × $2 punkters, størrelse: $3',
+'svg-long-desc-animated' => 'Animeret SVG-fil, basisstørrelse $1 × $2 punkter, filstørrelse: $3',
 'show-big-image' => 'Version i større opløsning',
 'show-big-image-preview' => 'Størrelse af denne forhåndsvisning: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Anden opløsning|Andre opløsninger}}: $1.',
@@ -2962,6 +2986,8 @@ Du kan beskadige dit system hvis du udfører den.",
 'file-info-png-looped' => 'gentaget',
 'file-info-png-repeat' => 'afspillede $1 {{PLURAL:$1|gang|gange}}',
 'file-info-png-frames' => '$1 {{PLURAL:$1|billede|billeder}}',
+'file-no-thumb-animation' => "'''Bemærk: På grund af tekniske begrænsninger vil miniaturebilleder af denne fil ikke blive animeret.'''",
+'file-no-thumb-animation-gif' => "'''Bemærk: På grund af tekniske begrænsninger vil miniaturebilleder af GIF-filer, der som denne er i høj opløsning, ikke blive animeret.'''",
 
 # Special:NewFiles
 'newimages' => 'Galleri med de nyeste billeder',
index c4b107e..3cca140 100644 (file)
@@ -157,6 +157,7 @@ $specialPageAliases = array(
        'MIMEsearch'                => array( 'MIME-Typ-Suche' ),
        'Mostcategories'            => array( 'Meistkategorisierte_Seiten' ),
        'Mostimages'                => array( 'Meistbenutzte_Dateien' ),
+       'Mostinterwikis'            => array( 'Meiste_Interwikilinks' ),
        'Mostlinked'                => array( 'Meistverlinkte_Seiten' ),
        'Mostlinkedcategories'      => array( 'Meistbenutzte_Kategorien' ),
        'Mostlinkedtemplates'       => array( 'Meistbenutzte_Vorlagen' ),
@@ -245,150 +246,153 @@ $dateFormats = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#WEITERLEITUNG', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__KEIN_INHALTSVERZEICHNIS__', '__KEININHALTSVERZEICHNIS__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__KEINE_GALERIE__', '__KEINEGALERIE__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__INHALTSVERZEICHNIS_ERZWINGEN__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__INHALTSVERZEICHNIS__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__ABSCHNITTE_NICHT_BEARBEITEN__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '__KEINKOPF__', '__KEIN_HEADER__', '__KEIN_KOPF__', '__KEINHEADER__', '__NOHEADER__' ),
-       'currentmonth'            => array( '1', 'JETZIGER_MONAT', 'JETZIGER_MONAT_2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', 'JETZIGER_MONAT_1', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', 'JETZIGER_MONATSNAME', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'JETZIGER_MONATSNAME_GENITIV', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'JETZIGER_MONATSNAME_KURZ', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'JETZIGER_KALENDERTAG', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'JETZIGER_KALENDERTAG_2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'JETZIGER_WOCHENTAG', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'JETZIGES_JAHR', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'JETZIGE_UHRZEIT', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'JETZIGE_STUNDE', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'LOKALER_MONAT', 'LOKALER_MONAT_2', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', 'LOKALER_MONAT_1', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'LOKALER_MONATSNAME', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'LOKALER_MONATSNAME_GENITIV', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'LOKALER_MONATSNAME_KURZ', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'LOKALER_KALENDERTAG', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'LOKALER_KALENDERTAG_2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'LOKALER_WOCHENTAG', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'LOKALES_JAHR', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'LOKALE_UHRZEIT', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'LOKALE_STUNDE', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'SEITENANZAHL', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'ARTIKELANZAHL', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'DATEIANZAHL', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'BENUTZERANZAHL', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'AKTIVE_BENUTZER', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'BEARBEITUNGSANZAHL', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'BETRACHTUNGEN', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'SEITENNAME', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'SEITENNAME_URL', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'NAMENSRAUM', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'NAMENSRAUM_URL', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'DISKUSSIONSNAMENSRAUM', 'DISK_NR', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'DISKUSSIONSNAMENSRAUM_URL', 'DISK_NR_URL', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'HAUPTNAMENSRAUM', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'HAUPTNAMENSRAUM_URL', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'VOLLER_SEITENNAME', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'VOLLER_SEITENNAME_URL', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'UNTERSEITE', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'UNTERSEITE_URL', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'OBERSEITE', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'OBERSEITE_URL', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'DISKUSSIONSSEITE', 'DISK', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'DISKUSSIONSSEITE_URL', 'DISK_URL', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'HAUPTSEITE', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'subjectpagenamee'        => array( '1', 'HAUPTSEITE_URL', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
-       'subst'                   => array( '0', 'ERS:', 'SUBST:' ),
-       'safesubst'               => array( '0', 'SICHER_ERS:', 'SICHERERS:', 'SAFESUBST:' ),
-       'img_thumbnail'           => array( '1', 'miniatur', 'mini', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'miniatur=$1', 'mini=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'rechts', 'right' ),
-       'img_left'                => array( '1', 'links', 'left' ),
-       'img_none'                => array( '1', 'ohne', 'none' ),
-       'img_center'              => array( '1', 'zentriert', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'gerahmt', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', 'rahmenlos', 'frameless' ),
-       'img_page'                => array( '1', 'seite=$1', 'seite_$1', 'page=$1', 'page $1' ),
-       'img_upright'             => array( '1', 'hochkant', 'hochkant=$1', 'hochkant $1', 'upright', 'upright=$1', 'upright $1' ),
-       'img_border'              => array( '1', 'rand', 'border' ),
-       'img_baseline'            => array( '1', 'grundlinie', 'baseline' ),
-       'img_sub'                 => array( '1', 'tiefgestellt', 'tief', 'sub' ),
-       'img_super'               => array( '1', 'hochgestellt', 'hoch', 'super', 'sup' ),
-       'img_top'                 => array( '1', 'oben', 'top' ),
-       'img_text_top'            => array( '1', 'text-oben', 'text-top' ),
-       'img_middle'              => array( '1', 'mitte', 'middle' ),
-       'img_bottom'              => array( '1', 'unten', 'bottom' ),
-       'img_text_bottom'         => array( '1', 'text-unten', 'text-bottom' ),
-       'img_link'                => array( '1', 'verweis=$1', 'link=$1' ),
-       'img_alt'                 => array( '1', 'alternativtext=$1', 'alt=$1' ),
-       '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:' ),
-       'localurle'               => array( '0', 'LOKALE_URL_C:', 'LOCALURLE:' ),
-       'articlepath'             => array( '0', 'ARTIKELPFAD', 'ARTICLEPATH' ),
-       'scriptpath'              => array( '0', 'SKRIPTPFAD', 'SCRIPTPATH' ),
-       'stylepath'               => array( '0', 'STILPFAD', 'STYLEPFAD', 'STYLEPATH' ),
-       'grammar'                 => array( '0', 'GRAMMATIK:', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'GESCHLECHT:', 'GENDER:' ),
-       'notitleconvert'          => array( '0', '__KEINE_TITELKONVERTIERUNG__', '__NOTITLECONVERT__', '__NOTC__' ),
-       'nocontentconvert'        => array( '0', '__KEINE_INHALTSKONVERTIERUNG__', '__NOCONTENTCONVERT__', '__NOCC__' ),
-       'currentweek'             => array( '1', 'JETZIGE_KALENDERWOCHE', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'JETZIGER_WOCHENTAG_ZAHL', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'LOKALE_KALENDERWOCHE', 'LOCALWEEK' ),
-       'localdow'                => array( '1', 'LOKALER_WOCHENTAG_ZAHL', 'LOCALDOW' ),
-       'revisionid'              => array( '1', 'REVISIONSID', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'REVISIONSTAG', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'REVISIONSTAG2', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'REVISIONSMONAT', 'REVISIONMONTH' ),
-       'revisionmonth1'          => array( '1', 'REVISIONSMONAT1', 'REVISIONMONTH1' ),
-       'revisionyear'            => array( '1', 'REVISIONSJAHR', 'REVISIONYEAR' ),
-       'revisiontimestamp'       => array( '1', 'REVISIONSZEITSTEMPEL', 'REVISIONTIMESTAMP' ),
-       'revisionuser'            => array( '1', 'REVISIONSBENUTZER', 'REVISIONUSER' ),
-       'fullurl'                 => array( '0', 'VOLLSTÄNDIGE_URL:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'VOLLSTÄNDIGE_URL_C:', 'FULLURLE:' ),
-       'canonicalurl'            => array( '0', 'KANONISCHE_URL:', 'CANONICALURL:' ),
-       'canonicalurle'           => array( '0', 'KANONISCHE_URL_C:', 'CANONICALURLE:' ),
-       'lcfirst'                 => array( '0', 'INITIAL_KLEIN:', 'LCFIRST:' ),
-       'ucfirst'                 => array( '0', 'INITIAL_GROSS:', 'UCFIRST:' ),
-       'lc'                      => array( '0', 'KLEIN:', 'LC:' ),
-       'uc'                      => array( '0', 'GROSS:', 'UC:' ),
-       'raw'                     => array( '0', 'ROH:', 'RAW:' ),
-       'displaytitle'            => array( '1', 'SEITENTITEL', 'DISPLAYTITLE' ),
-       'newsectionlink'          => array( '1', '__NEUER_ABSCHNITTSLINK__', '__PLUS_LINK__', '__NEWSECTIONLINK__' ),
-       'nonewsectionlink'        => array( '1', '__KEIN_NEUER_ABSCHNITTSLINK__', '__KEIN_PLUS_LINK__', '__NONEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', 'JETZIGE_VERSION', 'CURRENTVERSION' ),
-       'urlencode'               => array( '0', 'URLENKODIERT:', 'URLENCODE:' ),
-       'anchorencode'            => array( '0', 'ANKERENKODIERT:', 'SPRUNGMARKEENKODIERT:', 'ANCHORENCODE' ),
-       'currenttimestamp'        => array( '1', 'JETZIGER_ZEITSTEMPEL', 'CURRENTTIMESTAMP' ),
-       'localtimestamp'          => array( '1', 'LOKALER_ZEITSTEMPEL', 'LOCALTIMESTAMP' ),
-       'directionmark'           => array( '1', 'TEXTAUSRICHTUNG', 'DIRECTIONMARK', 'DIRMARK' ),
-       'language'                => array( '0', '#SPRACHE:', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', 'INHALTSSPRACHE', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'        => array( '1', 'SEITEN_IM_NAMENSRAUM:', 'SEITEN_IN_NR:', 'SEITEN_NR:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'          => array( '1', 'ADMINANZAHL', 'NUMBEROFADMINS' ),
-       'formatnum'               => array( '0', 'ZAHLENFORMAT', 'FORMATNUM' ),
-       'padleft'                 => array( '0', 'FÜLLENLINKS', 'PADLEFT' ),
-       'padright'                => array( '0', 'FÜLLENRECHTS', 'PADRIGHT' ),
-       'special'                 => array( '0', 'spezial', 'special' ),
-       'defaultsort'             => array( '1', 'SORTIERUNG:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'filepath'                => array( '0', 'DATEIPFAD:', 'FILEPATH:' ),
-       'tag'                     => array( '0', 'markierung', 'tag' ),
-       'hiddencat'               => array( '1', '__VERSTECKTE_KATEGORIE__', '__WARTUNGSKATEGORIE__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'SEITEN_IN_KATEGORIE', 'SEITEN_KAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'SEITENGRÖSSE', 'PAGESIZE' ),
-       'index'                   => array( '1', '__INDIZIEREN__', '__INDEX__' ),
-       'noindex'                 => array( '1', '__NICHT_INDIZIEREN__', '__NOINDEX__' ),
-       'numberingroup'           => array( '1', 'BENUTZER_IN_GRUPPE', 'NUMBERINGROUP', 'NUMINGROUP' ),
-       'staticredirect'          => array( '1', '__PERMANENTE_WEITERLEITUNG__', '__STATICREDIRECT__' ),
-       'protectionlevel'         => array( '1', 'SCHUTZSTATUS', 'PROTECTIONLEVEL' ),
-       'formatdate'              => array( '0', 'DATUMSFORMAT', 'formatdate', 'dateformat' ),
-       'url_path'                => array( '0', 'PFAD', 'PATH' ),
-       'url_query'               => array( '0', 'ABFRAGE', 'QUERY' ),
-       'defaultsort_noerror'     => array( '0', 'keinfehler', 'noerror' ),
-       'defaultsort_noreplace'   => array( '0', 'keineersetzung', 'noreplace' ),
+       'redirect'                  => array( '0', '#WEITERLEITUNG', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__KEIN_INHALTSVERZEICHNIS__', '__KEININHALTSVERZEICHNIS__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__KEINE_GALERIE__', '__KEINEGALERIE__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__INHALTSVERZEICHNIS_ERZWINGEN__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__INHALTSVERZEICHNIS__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__ABSCHNITTE_NICHT_BEARBEITEN__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '__KEINKOPF__', '__KEIN_HEADER__', '__KEIN_KOPF__', '__KEINHEADER__', '__NOHEADER__' ),
+       'currentmonth'              => array( '1', 'JETZIGER_MONAT', 'JETZIGER_MONAT_2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'JETZIGER_MONAT_1', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'JETZIGER_MONATSNAME', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'JETZIGER_MONATSNAME_GENITIV', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'JETZIGER_MONATSNAME_KURZ', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'JETZIGER_KALENDERTAG', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'JETZIGER_KALENDERTAG_2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'JETZIGER_WOCHENTAG', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'JETZIGES_JAHR', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'JETZIGE_UHRZEIT', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'JETZIGE_STUNDE', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'LOKALER_MONAT', 'LOKALER_MONAT_2', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'LOKALER_MONAT_1', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'LOKALER_MONATSNAME', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'LOKALER_MONATSNAME_GENITIV', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'LOKALER_MONATSNAME_KURZ', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'LOKALER_KALENDERTAG', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'LOKALER_KALENDERTAG_2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'LOKALER_WOCHENTAG', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'LOKALES_JAHR', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'LOKALE_UHRZEIT', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'LOKALE_STUNDE', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'SEITENANZAHL', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'ARTIKELANZAHL', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'DATEIANZAHL', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'BENUTZERANZAHL', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'AKTIVE_BENUTZER', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'BEARBEITUNGSANZAHL', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'BETRACHTUNGEN', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'SEITENNAME', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'SEITENNAME_URL', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'NAMENSRAUM', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'NAMENSRAUM_URL', 'NAMESPACEE' ),
+       'namespacenumber'           => array( '1', 'NAMENSRAUMNUMMER', 'NAMESPACENUMBER' ),
+       'talkspace'                 => array( '1', 'DISKUSSIONSNAMENSRAUM', 'DISK_NR', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'DISKUSSIONSNAMENSRAUM_URL', 'DISK_NR_URL', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'HAUPTNAMENSRAUM', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'HAUPTNAMENSRAUM_URL', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'VOLLER_SEITENNAME', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'VOLLER_SEITENNAME_URL', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'UNTERSEITE', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'UNTERSEITE_URL', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'OBERSEITE', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'OBERSEITE_URL', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'DISKUSSIONSSEITE', 'DISK', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'DISKUSSIONSSEITE_URL', 'DISK_URL', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'HAUPTSEITE', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'          => array( '1', 'HAUPTSEITE_URL', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+       'subst'                     => array( '0', 'ERS:', 'SUBST:' ),
+       'safesubst'                 => array( '0', 'SICHER_ERS:', 'SICHERERS:', 'SAFESUBST:' ),
+       'img_thumbnail'             => array( '1', 'miniatur', 'mini', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'miniatur=$1', 'mini=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'rechts', 'right' ),
+       'img_left'                  => array( '1', 'links', 'left' ),
+       'img_none'                  => array( '1', 'ohne', 'none' ),
+       'img_center'                => array( '1', 'zentriert', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'gerahmt', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'rahmenlos', 'frameless' ),
+       'img_page'                  => array( '1', 'seite=$1', 'seite_$1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', 'hochkant', 'hochkant=$1', 'hochkant $1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_border'                => array( '1', 'rand', 'border' ),
+       'img_baseline'              => array( '1', 'grundlinie', 'baseline' ),
+       'img_sub'                   => array( '1', 'tiefgestellt', 'tief', 'sub' ),
+       'img_super'                 => array( '1', 'hochgestellt', 'hoch', 'super', 'sup' ),
+       'img_top'                   => array( '1', 'oben', 'top' ),
+       'img_text_top'              => array( '1', 'text-oben', 'text-top' ),
+       'img_middle'                => array( '1', 'mitte', 'middle' ),
+       'img_bottom'                => array( '1', 'unten', 'bottom' ),
+       'img_text_bottom'           => array( '1', 'text-unten', 'text-bottom' ),
+       'img_link'                  => array( '1', 'verweis=$1', 'link=$1' ),
+       'img_alt'                   => array( '1', 'alternativtext=$1', 'alt=$1' ),
+       '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:' ),
+       'localurle'                 => array( '0', 'LOKALE_URL_C:', 'LOCALURLE:' ),
+       'articlepath'               => array( '0', 'ARTIKELPFAD', 'ARTICLEPATH' ),
+       'pageid'                    => array( '0', 'SEITENID', 'SEITENKENNUNG', 'PAGEID' ),
+       'scriptpath'                => array( '0', 'SKRIPTPFAD', 'SCRIPTPATH' ),
+       'stylepath'                 => array( '0', 'STILPFAD', 'STYLEPFAD', 'STYLEPATH' ),
+       'grammar'                   => array( '0', 'GRAMMATIK:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'GESCHLECHT:', 'GENDER:' ),
+       'notitleconvert'            => array( '0', '__KEINE_TITELKONVERTIERUNG__', '__NOTITLECONVERT__', '__NOTC__' ),
+       'nocontentconvert'          => array( '0', '__KEINE_INHALTSKONVERTIERUNG__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+       'currentweek'               => array( '1', 'JETZIGE_KALENDERWOCHE', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'JETZIGER_WOCHENTAG_ZAHL', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'LOKALE_KALENDERWOCHE', 'LOCALWEEK' ),
+       'localdow'                  => array( '1', 'LOKALER_WOCHENTAG_ZAHL', 'LOCALDOW' ),
+       'revisionid'                => array( '1', 'REVISIONSID', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'REVISIONSTAG', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'REVISIONSTAG2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'REVISIONSMONAT', 'REVISIONMONTH' ),
+       'revisionmonth1'            => array( '1', 'REVISIONSMONAT1', 'REVISIONMONTH1' ),
+       'revisionyear'              => array( '1', 'REVISIONSJAHR', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'REVISIONSZEITSTEMPEL', 'REVISIONTIMESTAMP' ),
+       'revisionuser'              => array( '1', 'REVISIONSBENUTZER', 'REVISIONUSER' ),
+       'fullurl'                   => array( '0', 'VOLLSTÄNDIGE_URL:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'VOLLSTÄNDIGE_URL_C:', 'FULLURLE:' ),
+       'canonicalurl'              => array( '0', 'KANONISCHE_URL:', 'CANONICALURL:' ),
+       'canonicalurle'             => array( '0', 'KANONISCHE_URL_C:', 'CANONICALURLE:' ),
+       'lcfirst'                   => array( '0', 'INITIAL_KLEIN:', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', 'INITIAL_GROSS:', 'UCFIRST:' ),
+       'lc'                        => array( '0', 'KLEIN:', 'LC:' ),
+       'uc'                        => array( '0', 'GROSS:', 'UC:' ),
+       'raw'                       => array( '0', 'ROH:', 'RAW:' ),
+       'displaytitle'              => array( '1', 'SEITENTITEL', 'DISPLAYTITLE' ),
+       'newsectionlink'            => array( '1', '__NEUER_ABSCHNITTSLINK__', '__PLUS_LINK__', '__NEWSECTIONLINK__' ),
+       'nonewsectionlink'          => array( '1', '__KEIN_NEUER_ABSCHNITTSLINK__', '__KEIN_PLUS_LINK__', '__NONEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'JETZIGE_VERSION', 'CURRENTVERSION' ),
+       'urlencode'                 => array( '0', 'URLENKODIERT:', 'URLENCODE:' ),
+       'anchorencode'              => array( '0', 'ANKERENKODIERT:', 'SPRUNGMARKEENKODIERT:', 'ANCHORENCODE' ),
+       'currenttimestamp'          => array( '1', 'JETZIGER_ZEITSTEMPEL', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', 'LOKALER_ZEITSTEMPEL', 'LOCALTIMESTAMP' ),
+       'directionmark'             => array( '1', 'TEXTAUSRICHTUNG', 'DIRECTIONMARK', 'DIRMARK' ),
+       'language'                  => array( '0', '#SPRACHE:', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'INHALTSSPRACHE', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', 'SEITEN_IM_NAMENSRAUM:', 'SEITEN_IN_NR:', 'SEITEN_NR:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', 'ADMINANZAHL', 'NUMBEROFADMINS' ),
+       'formatnum'                 => array( '0', 'ZAHLENFORMAT', 'FORMATNUM' ),
+       'padleft'                   => array( '0', 'FÜLLENLINKS', 'PADLEFT' ),
+       'padright'                  => array( '0', 'FÜLLENRECHTS', 'PADRIGHT' ),
+       'special'                   => array( '0', 'spezial', 'special' ),
+       'speciale'                  => array( '0', 'speziale', 'speciale' ),
+       'defaultsort'               => array( '1', 'SORTIERUNG:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'filepath'                  => array( '0', 'DATEIPFAD:', 'FILEPATH:' ),
+       'tag'                       => array( '0', 'erweiterung', 'tag' ),
+       'hiddencat'                 => array( '1', '__VERSTECKTE_KATEGORIE__', '__WARTUNGSKATEGORIE__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'SEITEN_IN_KATEGORIE', 'SEITEN_KAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'SEITENGRÖSSE', 'PAGESIZE' ),
+       'index'                     => array( '1', '__INDIZIEREN__', '__INDEX__' ),
+       'noindex'                   => array( '1', '__NICHT_INDIZIEREN__', '__NOINDEX__' ),
+       'numberingroup'             => array( '1', 'BENUTZER_IN_GRUPPE', 'NUMBERINGROUP', 'NUMINGROUP' ),
+       'staticredirect'            => array( '1', '__PERMANENTE_WEITERLEITUNG__', '__STATICREDIRECT__' ),
+       'protectionlevel'           => array( '1', 'SCHUTZSTATUS', 'PROTECTIONLEVEL' ),
+       'formatdate'                => array( '0', 'DATUMSFORMAT', 'formatdate', 'dateformat' ),
+       'url_path'                  => array( '0', 'PFAD', 'PATH' ),
+       'url_query'                 => array( '0', 'ABFRAGE', 'QUERY' ),
+       'defaultsort_noerror'       => array( '0', 'keinfehler', 'noerror' ),
+       'defaultsort_noreplace'     => array( '0', 'keineersetzung', 'noreplace' ),
 );
 
 $imageFiles = array(
@@ -1796,7 +1800,7 @@ Um ein '''Bild''' in einer Seite zu verwenden, nutze einen Link in der folgenden
 'filereuploadsummary' => 'Dateiänderungen:',
 'filestatus' => 'Copyright-Status:',
 'filesource' => 'Quelle:',
-'uploadedfiles' => 'Hochgeladene Dateien',
+'uploadedfiles' => 'Hochladen',
 'ignorewarning' => 'Warnung ignorieren und Datei speichern',
 'ignorewarnings' => 'Warnungen ignorieren',
 'minlength1' => 'Dateinamen müssen mindestens einen Buchstaben lang sein.',
@@ -2058,12 +2062,13 @@ Eine [[Special:WhatLinksHere/$2|vollständige Liste]] ist verfügbar.',
 Vielleicht möchtest du die Beschreibung auf der dortigen [$2 Dateibeschreibungsseite] bearbeiten.',
 'sharedupload-desc-create' => 'Diese Datei stammt aus $1 und kann von anderen Projekten verwendet werden.
 Vielleicht möchtest du die Beschreibung auf der dortigen [$2 Dateibeschreibungsseite] bearbeiten.',
-'filepage-nofile' => 'Es ist keine Datei dieses namens vorhanden.',
-'filepage-nofile-link' => 'Es ist keine Datei dieses namens vorhanden. Du kannst jedoch [$1 diese Datei hochladen].',
+'filepage-nofile' => 'Es ist keine Datei dieses Namens vorhanden.',
+'filepage-nofile-link' => 'Es ist keine Datei dieses Namens vorhanden. Du kannst jedoch [$1 diese Datei hochladen].',
 '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. */',
+'upload-disallowed-here' => 'Leider kannst du dieses Bild nicht überschreiben.',
 
 # File reversion
 'filerevert' => 'Zurücksetzen von „$1“',
@@ -2144,9 +2149,9 @@ Vielleicht möchtest du die Beschreibung auf der dortigen [$2 Dateibeschreibungs
 
 'disambiguations' => 'Seiten die auf Begriffsklärungsseiten verlinken',
 'disambiguationspage' => 'Template:Begriffsklärung',
-'disambiguations-text' => "Die folgenden Seiten enthalten mindestens einen Link zur einer '''Begriffsklärungsseite'''. Sie sollten möglicherweise auf die eigentlich gemeinte Seite verlinken.
+'disambiguations-text' => "Die folgenden Seiten enthalten mindestens einen Link zur einer '''Begriffsklärungsseite'''. Stattdessen sollten sie möglicherweise auf die eigentlich gemeinte Seite verlinken.
 
-Eine Seite gilt als Begriffsklärungsseite, wenn sie mindestens eine der auf [[MediaWiki:Disambiguationspage]] aufgeführten Vorlagen enthält.",
+Eine Seite gilt als Begriffsklärungsseite, wenn sie mindestens eine der auf der Seite [[MediaWiki:Disambiguationspage|Disambiguationspage]] aufgeführten Vorlagen enthält.",
 
 'doubleredirects' => 'Doppelte Weiterleitungen',
 'doubleredirectstext' => 'Diese Liste enthält Weiterleitungen, die auf Weiterleitungen verlinken.
@@ -2178,7 +2183,7 @@ Jede Zeile enthält Links zur ersten und zweiten Weiterleitung sowie dem Ziel de
 'nviews' => '{{PLURAL:$1|1 Abfrage|$1 Abfragen}}',
 'nimagelinks' => 'Verwendet auf {{PLURAL:$1|einer Seite|$1 Seiten}}',
 'ntransclusions' => 'verwendet auf {{PLURAL:$1|einer Seite|$1 Seiten}}',
-'specialpage-empty' => 'Die Seite enthält aktuell keine Einträge.',
+'specialpage-empty' => 'Es sind aktuell keine zutreffenden Einträge vorhanden.',
 'lonelypages' => 'Verwaiste Seiten',
 'lonelypagestext' => 'Die folgenden Seiten werden nicht eingebunden oder es wird nicht auf sie in {{SITENAME}} verwiesen.',
 'uncategorizedpages' => 'Nicht kategorisierte Seiten',
@@ -2563,7 +2568,7 @@ Siehe die [[Special:ProtectedPages|Liste der geschützten Seiten]] für alle akt
 
 # Restriction levels
 'restriction-level-sysop' => 'geschützt (nur Administratoren)',
-'restriction-level-autoconfirmed' => 'geschützt (nur angemeldete, nicht-neue Benutzer)',
+'restriction-level-autoconfirmed' => 'geschützt (nur angemeldete, nicht neue Benutzer)',
 'restriction-level-all' => 'alle',
 
 # Undelete
@@ -2708,7 +2713,7 @@ Bitte gib den Grund für die Sperre an.',
 'ipb-change-block' => 'Sperre mit diesen Sperrparametern erneuern',
 'ipb-confirm' => 'Sperrung bestätigen',
 'badipaddress' => 'Die IP-Adresse hat ein falsches Format.',
-'blockipsuccesssub' => 'Sperre erfolgreich',
+'blockipsuccesssub' => 'Die Sperrung war erfolgreich.',
 'blockipsuccesstext' => 'Der Benutzer / die IP-Adresse [[Special:Contributions/$1|$1]] wurde gesperrt.<br />
 Zur Aufhebung der Sperre siehe die [[Special:BlockList|Liste aller aktiven Sperren]].',
 'ipb-blockingself' => 'Du bist gerade dabei, dich selbst zu sperren! Möchtest du das wirklich tun?',
@@ -2776,7 +2781,7 @@ Siehe die [[Special:BlockList|Liste der gesperrten IP-Adressen und Benutzernamen
 'ipb_expiry_invalid' => 'Die eingegebene Dauer ist ungültig.',
 'ipb_expiry_temp' => 'Benutzernamens-Sperren mit der Verstecken-Option müssen permanent sein.',
 'ipb_hide_invalid' => 'Dieses Konto kann nicht unterdrückt werden, da es zu viele Bearbeitungen aufweist.',
-'ipb_already_blocked' => '„$1“ wurde bereits gesperrt.',
+'ipb_already_blocked' => '„$1“ ist bereits gesperrt',
 'ipb-needreblock' => '„$1“ ist bereits gesperrt. Möchtest du die Sperrparameter ändern?',
 'ipb-otherblocks-header' => 'Andere {{PLURAL:$1|Sperre|Sperren}}',
 'unblock-hideuser' => 'Dieser Benutzer kann nicht entsperrt werden, da dessen Benutzername versteckt wurde.',
@@ -3184,7 +3189,7 @@ Das liegt wahrscheinlich an einem Link auf eine externe Seite.',
 'pageinfo-authors' => 'Gesamtzahl unterschiedlicher Autoren',
 'pageinfo-recent-edits' => 'Anzahl der kürzlich erfolgten Bearbeitungen (innerhalb von $1)',
 'pageinfo-recent-authors' => 'Anzahl der unterschiedlichen Autoren',
-'pageinfo-restriction' => 'Seitenschutz (<code>$1</code>)',
+'pageinfo-restriction' => 'Seitenschutz (<code>{{lcfirst:$1}}</code>)',
 'pageinfo-magic-words' => '{{PLURAL:$1|Magisches Wort|Magische Wörter}} ($1)',
 'pageinfo-hidden-categories' => 'Versteckte {{PLURAL:$1|Kategorie|Kategorien}} ($1)',
 'pageinfo-templates' => 'Eingebundene {{PLURAL:$1|Vorlage|Vorlagen}} ($1)',
@@ -3242,6 +3247,7 @@ Durch das Herunterladen und Öffnen der Datei kann dein Computer beschädigt wer
 'file-info-size-pages' => '$1 × $2 Pixel, Dateigröße: $3, MIME-Typ: $4, $5 {{PLURAL:$5|Seite| Seiten}}',
 'file-nohires' => 'Keine höhere Auflösung vorhanden.',
 'svg-long-desc' => 'SVG-Datei, Basisgröße: $1 × $2 Pixel, Dateigröße: $3',
+'svg-long-desc-animated' => 'Animierte SVG-Datei, Basisgröße $1 × $2 Pixel, Dateigröße: $3',
 'show-big-image' => 'Volle Auflösung',
 'show-big-image-preview' => 'Größe dieser Vorschau: $1.',
 'show-big-image-other' => 'Weitere {{PLURAL:$2|Auflösung|Auflösungen}}: $1.',
@@ -3251,6 +3257,8 @@ Durch das Herunterladen und Öffnen der Datei kann dein Computer beschädigt wer
 'file-info-png-looped' => 'Endlosschleife',
 'file-info-png-repeat' => '$1-{{PLURAL:$1|mal|mal}} abgespielt',
 'file-info-png-frames' => '$1 {{PLURAL:$1|Bild|Bilder}}',
+'file-no-thumb-animation' => "'''Hinweis: Aufgrund technischer Beschränkungen werden Vorschaubilder dieser Datei nicht animiert.'''",
+'file-no-thumb-animation-gif' => "'''Hinweis: Aufgrund technischer Beschränkungen werden Vorschaubilder hochauflösender GIF-Dateien wie dieser nicht animiert.'''",
 
 # Special:NewFiles
 'newimages' => 'Neue Dateien',
index 690d312..a5e6dc4 100644 (file)
@@ -24,7 +24,7 @@ $namespaceNames = array(
        NS_SPECIAL          => 'Xısusi',
        NS_TALK             => 'Werênayış',
        NS_USER             => 'Karber',
-       NS_USER_TALK        => 'Karber_mesac',
+       NS_USER_TALK        => 'Karber_werênayış',
        NS_PROJECT_TALK     => '$1_werênayış',
        NS_FILE             => 'Dosya',
        NS_FILE_TALK        => 'Dosya_werênayış',
@@ -32,26 +32,34 @@ $namespaceNames = array(
        NS_MEDIAWIKI_TALK   => 'MediaWiki_werênayış',
        NS_TEMPLATE         => 'Şablon',
        NS_TEMPLATE_TALK    => 'Şablon_werênayış',
-       NS_HELP             => 'Desteg',
-       NS_HELP_TALK        => 'Desteg_werênayış',
-       NS_CATEGORY         => 'Kategori',
-       NS_CATEGORY_TALK    => 'Kategori_werênayış',
+       NS_HELP             => 'Peşti',
+       NS_HELP_TALK        => 'Peşti_werênayış',
+       NS_CATEGORY         => 'Kategoriye',
+       NS_CATEGORY_TALK    => 'Kategoriye_werênayış',
+);
+
+$namespaceAliases = array(
+       'Karber_mesac'       => NS_USER_TALK,
+       'Desteg'             => NS_HELP,
+       'Desteg_werênayış'   => NS_HELP_TALK,
+       'Kategori'           => NS_CATEGORY,
+       'Kategori_werênayış' => NS_CATEGORY_TALK,
 );
 
 $specialPageAliases = array(
-       'Activeusers'               => array( 'KarbereAktivi', 'AktivKarberi' ),
-       'Allmessages'               => array( 'MesaciPero' ),
-       'Allpages'                  => array( 'PeleyPero' ),
-       'Ancientpages'              => array( 'PeleyVereni' ),
+       'Activeusers'               => array( 'KarberêAktivi', 'AktivKarberi' ),
+       'Allmessages'               => array( 'MesaciPêro' ),
+       'Allpages'                  => array( 'PeleyPêro' ),
+       'Ancientpages'              => array( 'PeleyVerêni' ),
        'Badtitle'                  => array( 'SernameyoXırab' ),
        'Blankpage'                 => array( 'PelaVeng', 'VengPela' ),
        'Block'                     => array( 'Bloke', 'BlokeIP', 'BlokeKarber' ),
-       'Blockme'                   => array( 'BlokeMe' ),
+       'Blockme'                   => array( 'BlokêMe' ),
        'Booksources'               => array( 'KıtabeÇıme' ),
-       'BrokenRedirects'           => array( 'HetenayışoXırab' ),
+       'BrokenRedirects'           => array( 'HetênayışoXırab' ),
        'Categories'                => array( 'Kategoriye' ),
-       'ChangeEmail'               => array( 'EpostaBıvurne' ),
-       'ChangePassword'            => array( 'ParolaBıvurne', 'ParolaResetke' ),
+       'ChangeEmail'               => array( 'EpostaBıvurnê' ),
+       'ChangePassword'            => array( 'ParolaBıvurnê', 'ParolaResetke' ),
        'ComparePages'              => array( 'PelaPêverke' ),
        'Confirmemail'              => array( 'EpostayAraştke' ),
        'Contributions'             => array( 'İştiraxi' ),
@@ -103,23 +111,23 @@ $specialPageAliases = array(
        'Protectedpages'            => array( 'PeleyêkeStaryayê' ),
        'Protectedtitles'           => array( 'SernameyêkeStaryayê' ),
        'Randompage'                => array( 'Raştamê', 'PelayakeRaştamê' ),
-       'Randomredirect'            => array( 'HetenayışoRaştmae' ),
+       'Randomredirect'            => array( 'HetenayışoRaştame' ),
        'Recentchanges'             => array( 'VurnayışêPeyêni' ),
        'Recentchangeslinked'       => array( 'GreyêVurnayışêPeyêni' ),
        'Revisiondelete'            => array( 'RevizyoniBesterne' ),
-       'RevisionMove'              => array( 'RevizyoniAhulne' ),
+       'RevisionMove'              => array( 'RewizyoniAhulne' ),
        'Search'                    => array( 'Cıgeyre' ),
        'Shortpages'                => array( 'PeleyêKılmi' ),
        'Specialpages'              => array( 'PeleyXısusi' ),
        'Statistics'                => array( 'İstatistiki' ),
        'Tags'                      => array( 'Etiketi' ),
-       'Unblock'                   => array( 'Bloqihewad' ),
+       'Unblock'                   => array( 'Bloqiwedarne' ),
        'Uncategorizedcategories'   => array( 'KategoriyêkeKategorinêbiyê' ),
        'Uncategorizedimages'       => array( 'DosyeyêkeKategorinêbiyê' ),
        'Uncategorizedpages'        => array( 'PeleyêkeKategorinêbiyê' ),
        'Uncategorizedtemplates'    => array( 'ŞablonêkeKategorinêbiyê' ),
        'Undelete'                  => array( 'Peyserbiya' ),
-       'Unlockdb'                  => array( 'DBKlitiake' ),
+       'Unlockdb'                  => array( 'DBSırmiake' ),
        'Unusedcategories'          => array( 'KategoriyêkeNêkaryayê' ),
        'Unusedimages'              => array( 'DosyeyêkeNêkaryayê' ),
        'Unusedtemplates'           => array( 'ŞablonêkeNêkaryayê' ),
@@ -133,140 +141,167 @@ $specialPageAliases = array(
        'Wantedcategories'          => array( 'KategoriyêkeWazênê' ),
        'Wantedfiles'               => array( 'DosyeyêkeWazênê' ),
        'Wantedpages'               => array( 'PeleyêkeWazênê' ),
-       'Wantedtemplates'           => array( 'ŞablonyêkeWazênê' ),
+       'Wantedtemplates'           => array( 'ŞablonêkeWazênê' ),
        'Watchlist'                 => array( 'Listeyseyri' ),
        'Whatlinkshere'             => array( 'PelarêGre' ),
        'Withoutinterwiki'          => array( 'Bêİnterwiki' ),
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#HETENAYIŞ', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__ESTENÇINO__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__GALERİÇINO__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__ESTENZARURET__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__ESTEN__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__TİMARKERDIŞÇINO__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '__SERNAMEÇINO__', '__NOHEADER__' ),
-       'currentmonth'            => array( '1', 'MEWCUDAŞMİ', 'MEWCUDAŞMİ2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', 'MEWCUDAŞMİ1', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', 'NAMEYAŞMDAMEWCUD', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'MEWCUDAŞMACI', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'MEWCUDAŞMİKILMKERDIŞ', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'MEWCUDROCE', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'MEWCUDROCE2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'NAMEYÊMEWCUDROCE', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'MEWCUDSERRE', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'MEWCUDDEME', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'MEWCUDSEHAT', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'WAREYAŞMİ', 'WAREYAŞMİ2', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', 'WAREYAŞMİ1', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'NAMEYÊWAREYAŞMİ', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'NAMEYWAREDÊAŞMİDACI', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'WAREYAŞMİKILMKERDIŞ', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'WAREYROCE', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'WAREYROCE2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'NAMEYÊWAREYROCE', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'WAREYSERRE', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'WAREYDEME', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'WAREYSEHAT', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'AMARİYAPELAN', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'AMARİYAWESİQAN', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'AMARİYADOSYAYAN', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'AMARİYAKARBERAN', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'AMARİYAAKTİVKARBERAN', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'AMARİYAVURNAYIŞAN', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'AMARİYAMOCNAYIŞAN', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'NAMEYPELA', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'NAMEYPELAA', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'CANAME', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'CANAMEE', 'NAMESPACEE' ),
-       'namespacenumber'         => array( '1', 'AMARİYACANAME', 'NAMESPACENUMBER' ),
-       'talkspace'               => array( '1', 'CAYÊWERÊNAYIŞİ', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'CAYÊWERÊNAYIŞAN', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'CAYÊMESEL', 'CAYÊWESİQE', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'CAYÊMESELAN', 'CAYÊWESİQAN', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'NAMEYPELAPÊRO', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'NAMEYPELAPÊRON', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'NAMEYBINPELA', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'NAMEYBINPELAA', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'NAMEYSERPELA', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'NAMEYSERPELAA', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'NAMEYPELAWERÊNAYIŞ', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'NAMEYPELAWERÊNAYIŞAN', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'NAMEYPELAMESEL', 'NAMEYPELAWESİQE', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'subjectpagenamee'        => array( '1', 'NAMEYPELAMESELER', 'NAMEYPELAQESİQER', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
-       'msg'                     => array( '0', 'MSC', 'MSG:' ),
-       'subst'                   => array( '0', 'KOPYAKE', 'ATEBERDE', 'SUBST:' ),
-       'safesubst'               => array( '0', 'EMELEYATEBERDE', 'SAFESUBST:' ),
-       'msgnw'                   => array( '0', 'MSJNW:', 'MSGNW:' ),
-       'img_thumbnail'           => array( '1', 'resmowerdı', 'werdı', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'resmowerdı=$1', 'erwdı=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'raşt', 'right' ),
-       'img_left'                => array( '1', 'çep', 'left' ),
-       'img_none'                => array( '1', 'çıno', 'none' ),
-       'img_width'               => array( '1', '$1pik', '$1piksel', '$1px' ),
-       'img_center'              => array( '1', 'werte', 'miyan', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'çerçeweyın', 'çerçeweya', 'çerçewe', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', 'beçerçewe', 'frameless' ),
-       'img_page'                => array( '1', 'pela=$1', 'pela_$1', 'page=$1', 'page $1' ),
-       'img_border'              => array( '1', 'sinor', 'border' ),
-       'img_top'                 => array( '1', 'gedug', 'top' ),
-       'img_middle'              => array( '1', 'merkez', 'middle' ),
-       'img_link'                => array( '1', 'gre=$1', 'link=$1' ),
-       'int'                     => array( '0', 'İNT:', 'INT:' ),
-       'scriptpath'              => array( '0', 'RAYASCRIPTİ', 'SCRIPTPATH' ),
-       'stylepath'               => array( '0', 'TERZÊTEWRİ', 'STYLEPATH' ),
-       'grammar'                 => array( '0', 'GRAMER:', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'CİNSİYET:', 'GENDER:' ),
-       'notitleconvert'          => array( '0', '__SERNAMEVURNAYIŞÇINO__', '__SVÇ__', '__NOTITLECONVERT__', '__NOTC__' ),
-       'nocontentconvert'        => array( '0', '__ZERREVURNAYIŞÇINO__', '__ZVÇ__', '__NOCONTENTCONVERT__', '__NOCC__' ),
-       'currentweek'             => array( '1', 'MEVCUDHEFTE', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'MEVCUDWAREYHEFTİ', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'WAREYHEFTİ', 'LOCALWEEK' ),
-       'localdow'                => array( '1', 'WAREYROCAHEFTİ', 'LOCALDOW' ),
-       'revisionid'              => array( '1', 'NIMREYREVİZYONİ', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'ROCAREVİZYONİ', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'ROCAREVİZYON1', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'AŞMAREVİZYONİ', 'REVISIONMONTH' ),
-       'revisionmonth1'          => array( '1', 'AŞMAREVİZYONİ1', 'REVISIONMONTH1' ),
-       'revisionyear'            => array( '1', 'SERRAREVİZYONİ', 'REVISIONYEAR' ),
-       'revisiontimestamp'       => array( '1', 'MELUMATÊREVİZYONÊDEMİ', 'REVISIONTIMESTAMP' ),
-       'revisionuser'            => array( '1', 'REVİZYONKARBER', 'REVISIONUSER' ),
-       'plural'                  => array( '0', 'ZAFEN:', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'GREPÊRO:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'GREYOPÊRON:', 'FULLURLE:' ),
-       'canonicalurl'            => array( '0', 'GREYÊKANONİK:', 'CANONICALURL:' ),
-       'canonicalurle'           => array( '0', 'GREYOKANONİK:', 'CANONICALURLE:' ),
-       'lcfirst'                 => array( '0', 'KHİLK:', 'LCFIRST:' ),
-       'ucfirst'                 => array( '0', 'BHİLK:', 'UCFIRST:' ),
-       'lc'                      => array( '0', 'KH:', 'LC:' ),
-       'uc'                      => array( '0', 'BH:', 'UC:' ),
-       'raw'                     => array( '0', 'XAM:', 'RAW:' ),
-       'displaytitle'            => array( '1', 'SERNAMEİBIMOCNE', 'DISPLAYTITLE' ),
-       'newsectionlink'          => array( '1', '__GREYÊSERNAMEDÊNEWİ__', '__NEWSECTIONLINK__' ),
-       'nonewsectionlink'        => array( '1', '__GREYÊSERNAMEDÊNEWİÇINO__', '__NONEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', 'MEWCUDVERSİYON', 'CURRENTVERSION' ),
-       'currenttimestamp'        => array( '1', 'MEWCUDWAREYSEHAT', 'CURRENTTIMESTAMP' ),
-       'localtimestamp'          => array( '1', 'MALUMATÊWAREYSEHAT', 'LOCALTIMESTAMP' ),
-       'language'                => array( '0', '#ZIWAN', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', 'ZIWANÊESTİN', 'ZIWESTEN', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'        => array( '1', 'PELEYÊKECADÊNAMİDEYÊ', 'PELECN', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'          => array( '1', 'AMARİYAXİZMETKARAN', 'NUMBEROFADMINS' ),
-       'formatnum'               => array( '0', 'BABETNAYIŞ', 'FORMATNUM' ),
-       'special'                 => array( '0', 'xısusi', 'special' ),
-       'speciale'                => array( '0', 'xısusiye', 'speciale' ),
-       'defaultsort'             => array( '1', 'RATNAYIŞOHESBNAYIŞ', 'QESAYARATNAYIŞOHESBNAYIŞ', 'KATEGORİYARATNAYIŞOHESBNAYIŞ', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'filepath'                => array( '0', 'RAYADOSYA:', 'FILEPATH:' ),
-       'tag'                     => array( '0', 'etiket', 'tag' ),
-       'hiddencat'               => array( '1', '__KATEGORİYANIMITİ__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'PELEYÊKEKATEGORİDEYÊ', 'KATDÊPELEY', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'EBATÊPELA', 'PAGESIZE' ),
-       'index'                   => array( '1', '__SERSIQ__', '__INDEX__' ),
-       'noindex'                 => array( '1', '__SERSIQÇINYO__', '__NOINDEX__' ),
-       'numberingroup'           => array( '1', 'GRUBDEAMARE', 'AMARİYAGRUBER', 'NUMBERINGROUP', 'NUMINGROUP' ),
-       'staticredirect'          => array( '1', '__STATİKHETENAYIŞ__', '__STATICREDIRECT__' ),
-       'protectionlevel'         => array( '1', 'SEWİYEYÊSTARE', 'PROTECTIONLEVEL' ),
-       'url_wiki'                => array( '0', 'WİKİ', 'WIKI' ),
+       'redirect'                  => array( '0', '#HETENAYIŞ', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__ESTENÇINO__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__GALERİÇINO__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__ESTENZARURET__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__ESTEN__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__TİMARKERDIŞÇINO__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '__SERNAMEÇINO__', '__NOHEADER__' ),
+       'currentmonth'              => array( '1', 'AŞMİYANEWKİ', 'MEWCUDAŞMİ2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'AŞMİYANEWKİ1', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'NAMEYAŞMDANEWKİ', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'AŞMACIYANEWKİ', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'AŞMİYANEWKİKILMKERDIŞ', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'ROCENEWKİ', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'ROCENEWKİ2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'NAMEYÊROCENEWKİ', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'SERRENEWKİ', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'DEMENEWKİ', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'SEHATNEWKİ', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'WAREYAŞMİ', 'WAREYAŞMİ2', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'WAREYAŞMİ1', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'NAMEYÊWAREYAŞMİ', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'NAMEYWAREDÊAŞMİDACI', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'WAREYAŞMİKILMKERDIŞ', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'WAREYROCE', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'WAREYROCE2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'NAMEYÊWAREYROCE', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'WAREYSERRE', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'WAREYDEME', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'WAREYSEHAT', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'AMARİYAPELAN', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'AMARİYAWESİQAN', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'AMARİYADOSYAYAN', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'AMARİYAKARBERAN', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'AMARİYAAKTİVKARBERAN', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'AMARİYAVURNAYIŞAN', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'AMARİYAMOCNAYIŞAN', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'NAMEYPELA', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'NAMEYPELAA', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'CANAME', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'CANAMEE', 'NAMESPACEE' ),
+       'namespacenumber'           => array( '1', 'AMARİYACANAME', 'NAMESPACENUMBER' ),
+       'talkspace'                 => array( '1', 'CAYÊWERÊNAYIŞİ', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'CAYÊWERÊNAYIŞAN', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'CAYÊMESEL', 'CAYÊWESİQE', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'CAYÊMESELAN', 'CAYÊWESİQAN', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'NAMEYPELAPÊRO', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'NAMEYPELAPÊRON', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'NAMEYBINPELA', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'NAMEYBINPELAA', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'NAMEYSERPELA', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'NAMEYSERPELAA', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'NAMEYPELAWERÊNAYIŞ', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'NAMEYPELAWERÊNAYIŞAN', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'NAMEYPELAMESEL', 'NAMEYPELAWESİQE', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'          => array( '1', 'NAMEYPELAMESELER', 'NAMEYPELAQESİQER', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+       'msg'                       => array( '0', 'MSC', 'MSG:' ),
+       'subst'                     => array( '0', 'KOPYAKE', 'ATEBERDE', 'SUBST:' ),
+       'safesubst'                 => array( '0', 'EMELEYATEBERDE', 'SAFESUBST:' ),
+       'msgnw'                     => array( '0', 'MSJNW:', 'MSGNW:' ),
+       'img_thumbnail'             => array( '1', 'resmoqıckek', 'qıckek', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'resmoqıckek=$1', 'qıckek=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'raşt', 'right' ),
+       'img_left'                  => array( '1', 'çep', 'left' ),
+       'img_none'                  => array( '1', 'çıniyo', 'none' ),
+       'img_width'                 => array( '1', '$1pik', '$1piksel', '$1px' ),
+       'img_center'                => array( '1', 'werte', 'miyan', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'çerçeweya', 'çerçeweniyo', 'çerçewe', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'bêçerçewe', 'frameless' ),
+       'img_page'                  => array( '1', 'pela=$1', 'pela_$1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', 'disleg', 'disleg=$1', 'disleg_$1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_border'                => array( '1', 'sinor', 'border' ),
+       'img_baseline'              => array( '1', 'Sinorêerdi', 'baseline' ),
+       'img_sub'                   => array( '1', 'bın', 'sub' ),
+       'img_super'                 => array( '1', 'corên', 'cor', 'super', 'sup' ),
+       'img_top'                   => array( '1', 'gedug', 'top' ),
+       'img_text_top'              => array( '1', 'gedug-metin', 'text-top' ),
+       'img_middle'                => array( '1', 'merkez', 'middle' ),
+       'img_bottom'                => array( '1', 'erd', 'bottom' ),
+       'img_text_bottom'           => array( '1', 'erd-metin', 'text-bottom' ),
+       'img_link'                  => array( '1', 'gre=$1', 'link=$1' ),
+       'int'                       => array( '0', 'İNT:', 'INT:' ),
+       'sitename'                  => array( '1', 'NAMEYSİTA', 'SITENAME' ),
+       'ns'                        => array( '0', 'CN', 'NS:' ),
+       'nse'                       => array( '0', 'CNV', 'NSE:' ),
+       'localurl'                  => array( '0', 'LOKALGRE', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'LOKALGREV', 'LOCALURLE:' ),
+       'articlepath'               => array( '0', 'SOPAWESİQAN', 'ARTICLEPATH' ),
+       'pageid'                    => array( '0', 'NIMREYPELA', 'PAGEID' ),
+       'server'                    => array( '0', 'ARDEN', 'SERVER' ),
+       'servername'                => array( '0', 'NAMEYARDEN', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'RAYASCRIPTİ', 'SCRIPTPATH' ),
+       'stylepath'                 => array( '0', 'TERZÊTEWRİ', 'STYLEPATH' ),
+       'grammar'                   => array( '0', 'GRAMER:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'CİNSİYET:', 'GENDER:' ),
+       'notitleconvert'            => array( '0', '__SERNAMEVURNAYIŞÇINO__', '__SVÇ__', '__NOTITLECONVERT__', '__NOTC__' ),
+       'nocontentconvert'          => array( '0', '__ZERREVURNAYIŞÇINO__', '__ZVÇ__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+       'currentweek'               => array( '1', 'MEVCUDHEFTE', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'MEVCUDWAREYHEFTİ', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'WAREYHEFTİ', 'LOCALWEEK' ),
+       'localdow'                  => array( '1', 'WAREYROCAHEFTİ', 'LOCALDOW' ),
+       'revisionid'                => array( '1', 'NIMREYREVİZYONİ', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'ROCAREVİZYONİ', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'ROCAREVİZYON1', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'AŞMAREVİZYONİ', 'REVISIONMONTH' ),
+       'revisionmonth1'            => array( '1', 'AŞMAREVİZYONİ1', 'REVISIONMONTH1' ),
+       'revisionyear'              => array( '1', 'SERRAREVİZYONİ', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'MELUMATÊREVİZYONÊDEMİ', 'REVISIONTIMESTAMP' ),
+       'revisionuser'              => array( '1', 'REVİZYONKARBER', 'REVISIONUSER' ),
+       'plural'                    => array( '0', 'ZAFEN:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'GREPÊRO:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'GREYOPÊRON:', 'FULLURLE:' ),
+       'canonicalurl'              => array( '0', 'GREYÊKANONİK:', 'CANONICALURL:' ),
+       'canonicalurle'             => array( '0', 'GREYOKANONİK:', 'CANONICALURLE:' ),
+       'lcfirst'                   => array( '0', 'KHİLK:', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', 'BHİLK:', 'UCFIRST:' ),
+       'lc'                        => array( '0', 'KH:', 'LC:' ),
+       'uc'                        => array( '0', 'BH:', 'UC:' ),
+       'raw'                       => array( '0', 'XAM:', 'RAW:' ),
+       'displaytitle'              => array( '1', 'SERNAMİBIMOCNE', 'DISPLAYTITLE' ),
+       'newsectionlink'            => array( '1', '__GREYÊSERNAMEDÊNEWİ__', '__NEWSECTIONLINK__' ),
+       'nonewsectionlink'          => array( '1', '__GREYÊSERNAMEDÊNEWİÇINO__', '__NONEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'VERSİYONÊNEWKİ', 'CURRENTVERSION' ),
+       'currenttimestamp'          => array( '1', 'WAREYSEHATÊNEWKİ', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', 'MALUMATÊWAREYSEHAT', 'LOCALTIMESTAMP' ),
+       'directionmark'             => array( '1', 'HETANIŞANKERDIŞ', 'HETNIŞAN', 'DIRECTIONMARK', 'DIRMARK' ),
+       'language'                  => array( '0', '#ZIWAN', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'ZIWANÊESTİN', 'ZIWESTEN', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', 'PELEYÊKECADÊNAMİDEYÊ', 'PELECN', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', 'AMARİYAXİZMETKARAN', 'NUMBEROFADMINS' ),
+       'formatnum'                 => array( '0', 'BABETNAYIŞ', 'FORMATNUM' ),
+       'padleft'                   => array( '0', 'ÇEPİPIRKE', 'PADLEFT' ),
+       'padright'                  => array( '0', 'RAŞTİPIRKE', 'PADRIGHT' ),
+       'special'                   => array( '0', 'xısusi', 'special' ),
+       'speciale'                  => array( '0', 'xısusiye', 'speciale' ),
+       'defaultsort'               => array( '1', 'RATNAYIŞOHESBNAYIŞ', 'SIRMEYRATNAYIŞOHESBNAYIŞ', 'KATEGORİYARATNAYIŞOHESBNAYIŞ', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'filepath'                  => array( '0', 'RAYADOSYA:', 'FILEPATH:' ),
+       'tag'                       => array( '0', 'etiket', 'tag' ),
+       'hiddencat'                 => array( '1', '__KATEGORİYANIMITİ__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'PELEYÊKEKATEGORİDEYÊ', 'KATDÊPELEY', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'EBATÊPELA', 'PAGESIZE' ),
+       'index'                     => array( '1', '__SERSIQ__', '__INDEX__' ),
+       'noindex'                   => array( '1', '__SERSIQÇINYO__', '__NOINDEX__' ),
+       'numberingroup'             => array( '1', 'GRUBDEAMARE', 'AMARİYAGRUBER', 'NUMBERINGROUP', 'NUMINGROUP' ),
+       'staticredirect'            => array( '1', '__STATİKHETENAYIŞ__', '__STATICHETENAYIŞ__', '__STATICREDIRECT__' ),
+       'protectionlevel'           => array( '1', 'SEWİYEYÊSTARE', 'PROTECTIONLEVEL' ),
+       'formatdate'                => array( '0', 'demêformati', 'formatdate', 'dateformat' ),
+       'url_path'                  => array( '0', 'RAY', 'PATH' ),
+       'url_wiki'                  => array( '0', 'WİKİ', 'WIKI' ),
+       'url_query'                 => array( '0', 'PERSİYE', 'QUERY' ),
+       'defaultsort_noerror'       => array( '0', 'xırabinçıniya', 'noerror' ),
+       'defaultsort_noreplace'     => array( '0', 'cewabçıniyo', 'noreplace' ),
+       'pagesincategory_all'       => array( '0', 'pêro', 'all' ),
+       'pagesincategory_pages'     => array( '0', 'peley', 'pages' ),
+       'pagesincategory_files'     => array( '0', 'dosyey', 'files' ),
 );
 
 $messages = array(
@@ -381,7 +416,7 @@ $messages = array(
 'dec' => 'Kan',
 
 # Categories related messages
-'pagecategories' => '{{PLURAL:$1|Kategori|Kategoriy}}',
+'pagecategories' => '{{PLURAL:$1|Kategoriye|Kategoriy}}',
 'category_header' => 'Pelê ke kategoriya "$1" derê',
 'subcategories' => 'Kategoriyê bınêni',
 'category-media-header' => 'Medyawa ke kategoriya "$1" dera',
@@ -473,7 +508,7 @@ $messages = array(
 'talkpage' => 'Ena pele sero werêne',
 'talkpagelinktext' => 'Mesac',
 'specialpage' => 'Pela xısusiye',
-'personaltools' => 'Hacetê şexsi',
+'personaltools' => 'Haletê şexsi',
 'postcomment' => 'Qısımo newe',
 'articlepage' => 'Pela zerreki bıvêne',
 'talk' => 'Werênayış',
@@ -599,11 +634,11 @@ Seba lista pelanê xasanê vêrdeyan reca kena: [[Special:SpecialPages|{{int:spe
 # General errors
 'error' => 'Xırab',
 'databaseerror' => 'Xeta serveri',
-'dberrortext' => 'Rêzê vateyê database de xeta bı.
+'dberrortext' => 'Rêzê vateyê malumati de xeta bı.
 No xeta belka software ra yo.
-"<tt>$2</tt>" ra pers kerdışê peyin:
-<blockquote><tt>$1</tt></blockquote>.
-Database yo ke xeta dayo "<tt>$3: $4</tt>".',
+"<blockquote><tt>$1</tt></blockquote>.
+<tt>$2</tt>" ra pers kerdışê peyin:
+Malumatê yo ke xeta dayo "<tt>$3: $4</tt>".',
 'dberrortextcl' => 'Persê rêzê vateyê database de xeta bı.
 Persê databaseyê peyin:
 "$1"
@@ -946,8 +981,9 @@ Kerem ke, tı ke wazenay na pele bafernê/bıvurnê, qontrol ke.',
 'blocked-notice-logextract' => 'No karber/na karbere emanet blokekerdeyo/blokekediya.
 Cıkewtışo tewr peyêno ke bloke biyo, cêr seba referansi belikerdeyo:',
 'clearyourcache' => "'''Not:''' Bahde sazkerdışi, gani hafızayê cı gerayoğ pak bıbo.
-*'''Mozilla / Firefox / Safari:''' ''Shift'' ri gıştê şıma ser nayi pel newe ra bar kere yana zi ''Ctrl-Shift-R'' bıkere u (qey Apple Mac ''Cmd-Shift-R'');,
-*'''IE:''' ''Ctrl-F5'', '''Konqueror:''' tena tuşê pelaya newi ra bar kere cı sernê.",
+*'''Mozilla / Firefox / Safari:''' ''Shift'' ri gıştê şıma ser nayi pel newe ra bar kere yana zi''Ctrl-Shift-R'' bıkere u (qey Apple Mac ''Cmd-Shift-R'');,
+*'''IE:''' ''Ctrl-F5' piya pıploxnê ke wa newe bo', 
+* '''Operar:'''hacetan ra şı rê →tercihan ra bıvurnen",
 'usercssyoucanpreview' => "'''Yardim:''' Ser \"{{int:showpreview}}\" sima eskeni CSSe newe test bikeri.",
 'userjsyoucanpreview' => "'''Yardim:''' Ser \"{{int:showpreview}}\" sima eskeni CSSe newe test bikeri.",
 'usercsspreview' => "'''şıma tena verqaydê dosyayê CSS vineni.''' '''Dosyayê Karberi CSS hema qayd nebiyo!'''",
@@ -1296,9 +1332,9 @@ Detayê besternayışi [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}
 'mwsuggest-disable' => 'Tewsiyay AJAXi bıgê',
 'searcheverything-enable' => 'cayê nameyê hemi de bigêre',
 'searchrelated' => 'eleqayî',
-'searchall' => 'têdıne',
+'searchall' => 'pêro',
 'showingresults' => "Heta {{PLURAL:$1|'''1''' netice|'''$1''' neticeyan}} ke pê #'''$2''' başli beno ey bimocne .",
-'showingresultsnum' => "Heta binê {{PLURAL:$3|'''1''' netice|'''$3''' neticeyan}} ke pê #'''$2''' başli beno ey bimocne .",
+'showingresultsnum' => "'''$2''' netican ra nata  {{PLURAL:$3|'''1''' netice|'''$3''' neticeyê}} cêrde liste biyê.",
 'showingresultsheader' => "{{PLURAL:$5|Neticeyê '''$1''' of '''$3'''|Neticeyanê '''$1 - $2''' of '''$3'''}} qe '''$4'''",
 'nonefound' => "'''Teme''': Teyna tay namecayan cıgeyro beno.
 Pe verbendi ''all:'', vaceyê xo bıvurni ki contenti hemi cıgeyro (pelanê mınaqeşe, templatenan, ucb.) ya zi cıgeyro ser namecay ki tı wazeni.",
@@ -1906,7 +1942,7 @@ keyepel nıka zaf meşğulo yew dema herayi de newe ra tesel bıkerê.',
 'listfiles_name' => 'Name',
 'listfiles_user' => 'Karber',
 'listfiles_size' => 'Gırdiye',
-'listfiles_description' => 'Şınasiyen',
+'listfiles_description' => 'Sılasnayış',
 'listfiles_count' => 'Versiyoni',
 
 # File description page
@@ -1949,6 +1985,7 @@ listeya ke ha ver a têna na {{PLURAL:$1|dosyaya ewwili|dosyaya $1 ewwili}} mocn
 'shared-repo' => 'yew embarê repositoryî',
 'shared-repo-name-wikimediacommons' => 'Wikimedia Commons',
 'filepage.css' => '/* CSS placed here is included on the file description page, also included on foreign client wikis */',
+'upload-disallowed-here' => 'Nê asengi sero theba nênusneyêno.',
 
 # File reversion
 'filerevert' => '$1 reyna biyere',
@@ -2013,7 +2050,7 @@ listeya ke ha ver a têna na {{PLURAL:$1|dosyaya ewwili|dosyaya $1 ewwili}} mocn
 'statistics-header-users' => 'Îstatistiksê karberî',
 'statistics-header-hooks' => 'Îstatistiksê binî',
 'statistics-articles' => 'Pelanê tedesteyî',
-'statistics-pages' => 'Peli',
+'statistics-pages' => 'Peley',
 'statistics-pages-desc' => 'Pelanê hemî ke wîkî de estê, pelanê mineqeşeyî, redireksiyon ucb... dehil o.',
 'statistics-files' => 'Dosyayê bar biye',
 'statistics-edits' => 'Amarê vurnayîşî ke wextê {{SITENAME}} ronayîşî ra',
@@ -2053,6 +2090,7 @@ gıreyê her satıri de gıreyi; raş motışê yewın u dıyıni esto.
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|bayt|bayti}}',
 'ncategories' => '$1 {{PLURAL:$1|Kategoriye|Kategoriy}}',
+'ninterwikis' => '$1 {{PLURAL:$1|interwiki|interwikiy}}',
 'nlinks' => '$1 {{PLURAL:$1|link|linkî}}',
 'nmembers' => '$1 {{PLURAL:$1|eza|ezayan}}',
 'nrevisions' => '$1 {{PLURAL:$1|revizyon|revizyonî}}',
@@ -2081,6 +2119,7 @@ gıreyê her satıri de gıreyi; raş motışê yewın u dıyıni esto.
 'mostlinkedtemplates' => 'Şablonê ke tewr zafî pela re gıre bîye.',
 'mostcategories' => 'Pelan ke tewr zaf kategorî estê.',
 'mostimages' => 'Dosyayan ke tewr zaf link estê.',
+'mostinterwikis' => 'Pelan ke tewr zaf interwiki biyê.',
 'mostrevisions' => 'Pelan ke tewr zaf revizyonî biyê.',
 'prefixindex' => 'Veroleya peley pêro',
 'prefixindex-namespace' => 'Peleyê Veroleyıni ($1 cay nami)',
@@ -2172,7 +2211,7 @@ hem zi bıewnê [[Special:WantedCategories|kategori yê ke waziyeni]].',
 # Special:DeletedContributions
 'deletedcontributions' => 'İştiraqê karberan de besternayına',
 'deletedcontributions-title' => 'Îştirakê karberî wederna',
-'sp-deletedcontributions-contribs' => 'iştıraqi',
+'sp-deletedcontributions-contribs' => 'pêşteni',
 
 # Special:LinkSearch
 'linksearch' => 'Gıreyê teberi cı geyrê',
@@ -2228,7 +2267,9 @@ qey heqê şexsi de [[{{MediaWiki:Listgrouprights-helppage}}|hema malumato ziyed
 '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ê mesac bırse',
-'emailpage' => 'karberi re e-mail bışaw',
+'emailuser-title-target' => 'Na E-postaya {{GENDER:$1|karberi}}ya',
+'emailuser-title-notarget' => 'E-postaya karberi',
+'emailpage' => 'karberi re e-posta bırışê',
 '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:',
@@ -2300,7 +2341,7 @@ Ena deme ra, ma qe vurnayışan ser ena pele tı haberdar keni. Hem zi çı dem
 'enotif_reset' => 'Pela pêro ziyaret kerde deye mor ke',
 'enotif_newpagetext' => 'Ena yew pela newî ya.',
 'enotif_impersonal_salutation' => '{{SITENAME}} karber',
-'changed' => 'vurniya',
+'changed' => 'vurneya',
 'created' => 'viraziya',
 'enotif_subject' => 'pelê {{SITENAME}}i $PAGETITLE, hetê/perrê $PAGEEDITOR $CHANGEDORCREATED',
 'enotif_lastvisited' => 'ziyareta şıma ye peyini ra nata heme vuryayiş ê ke biyê bıewnê $1i re..',
@@ -2517,9 +2558,9 @@ $1',
 'blanknamespace' => '(Ser)',
 
 # Contributions
-'contributions' => 'İştirakê karberi',
+'contributions' => 'İştiraqê karberi',
 'contributions-title' => '$1 de iştırakê karberi',
-'mycontris' => 'İştıraqi',
+'mycontris' => 'Pêşteni',
 'contribsub2' => 'Qandê $1 ($2)',
 'nocontribs' => 'Ena kriteriya de vurnayîş çini yo.',
 'uctop' => '(ser)',
@@ -2642,7 +2683,7 @@ Cıkewtışo tewr peyêno ke bloke biyo, cêr seba referansi belikerdeyo:',
 'blocklink' => 'kılit ke',
 'unblocklink' => 'ake',
 'change-blocklink' => 'kılit-kerdışi bıvurne',
-'contribslink' => 'iştıraqi',
+'contribslink' => 'pêşteni',
 'emaillink' => 'e-poste bırışe',
 'autoblocker' => 'Şıma otomatikmen kılit biy, çıke adresa şımawa \'\'IP\'\'y terefê "[[User:$1|$1]]" gureniyena.
 Sebebê kılit-biyayışê $1\'i: "$2"o',
@@ -2897,7 +2938,7 @@ dosyaya emaneti vindbiyo',
 'xml-error-string' => '$1 çizgi de $2 col $3 (bit $4): $5',
 'import-upload' => 'Dosyayê XML bar bike',
 'import-token-mismatch' => "vindibiyayişê ma'lumatê hesabi. kerem kerê newe ra tesel/cereb bıkerê.",
-'import-invalid-interwiki' => 'Eya wîkî ra nieşkenî împort bike.',
+'import-invalid-interwiki' => 'Ena wiki ra azere kerdış nêbeno.',
 'import-error-edit' => 'Pela " $1 " qandê vurnayışi aya nêgêrêna çıkı cı rê icazet nêdeyayo.',
 'import-error-create' => 'Pela " $1 " qandê vıraştışi aya nêabêna çıkı cı rê icazet nêdeyayo.',
 'import-error-interwiki' => 'Pela " $1 " qandê name dayışi aya nêgêrêna çıkı namey cı (interwiki) sero cırê ca abıryayo.',
@@ -3025,11 +3066,34 @@ Tı eşkeno yew sebeb bınus.',
 
 # Info page
 'pageinfo-title' => 'Heq tê "$1"\'i',
-'pageinfo-header-edits' => 'Vurnayışi',
+'pageinfo-header-basic' => 'Seron zanayış',
+'pageinfo-header-edits' => 'Vurnayışi verêni',
+'pageinfo-header-restrictions' => 'Xısusiyetê pela',
+'pageinfo-header-properties' => 'Xısusiyetê pela',
+'pageinfo-display-title' => 'Asenge sernuşte',
+'pageinfo-default-sort' => 'Hesıbyaye mırfeyo kılm',
+'pageinfo-length' => 'Derdeya pela (bayti heta)',
+'pageinfo-article-id' => 'Nımrey pela',
+'pageinfo-robot-policy' => 'Weziyetê motor de cıgeyrayışi',
+'pageinfo-robot-index' => 'İIndeksbiyayen',
+'pageinfo-robot-noindex' => 'İndeksnêbiyayen',
 'pageinfo-views' => 'Amarina mocnayışan',
-'pageinfo-watchers' => 'Amariya serykeran',
-'pageinfo-edits' => 'Amarina vurnayışan',
-'pageinfo-authors' => 'Amarina nuştekaran',
+'pageinfo-watchers' => 'Amariya pela serykeran',
+'pageinfo-redirects-name' => 'Hetenayışê na pela',
+'pageinfo-subpages-name' => 'Bınpelê na pela',
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|hetenayış|hetenayışi}}; $3 {{PLURAL:$3|raykerdışt|raykerdışi}})',
+'pageinfo-firstuser' => 'Pela vıraşter',
+'pageinfo-firsttime' => 'Demê pela vıraştışi',
+'pageinfo-lastuser' => 'Vurnayeno peyên',
+'pageinfo-lasttime' => 'Deme u vurnayışo peyên',
+'pageinfo-edits' => 'Amarina vurnayışan pêro',
+'pageinfo-authors' => 'Amarina nuştekaran pêro',
+'pageinfo-recent-edits' => 'Amariya vurnayışan ($1 ra nata)',
+'pageinfo-recent-authors' => 'Amarina nuştekaran pêro',
+'pageinfo-restriction' => 'Xısusiyetê pela (<code>{{lcfirst:$1}}</code>)',
+'pageinfo-magic-words' => '{{PLURAL:$1|Çekuya|Çekuyê}} ($1) sihırini',
+'pageinfo-hidden-categories' => '{{PLURAL:$1|Kategoriye|Kategoriyan}} ($1) bınımne',
+'pageinfo-templates' => '{{PLURAL:$1|Şablon|Şabloni}} ($1) açarneyayê',
 
 # Skin names
 'skinname-standard' => 'Klasik',
@@ -3085,6 +3149,7 @@ Gurênayışê nae de, beno ke sistemê şıma zerar bıvêno.",
 'file-info-size-pages' => '$1 × $2 pikse, dergeya dosyay: $3, MIME tipiya cı: $4, $5 {{PLURAL:$5|pela|pela}}',
 'file-nohires' => 'Rovıleşiyayışo berzêr çıniyo.',
 'svg-long-desc' => 'SVG dosya, nominalin $1 × $2 piksels, ebatê dosya: $3',
+'svg-long-desc-animated' => 'SVG dosya, nominalin $1 × $2 piksela, ebatê dosya: $3',
 'show-big-image' => 'Resolosyonê temami',
 'show-big-image-preview' => "Verqayd dergiya: $1'i.",
 'show-big-image-other' => 'Zewmi{{PLURAL:$2|Vılêşnayış|Vılêşnayışê}}: $1.',
@@ -3094,6 +3159,8 @@ Gurênayışê nae de, beno ke sistemê şıma zerar bıvêno.",
 '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}}',
+'file-no-thumb-animation' => "'''Not: Dılet tekniko limit, gırd agozneya resm de qıckek de animasyoni miyan dı nêbo.'''",
+'file-no-thumb-animation-gif' => "'''Not: Dılet tekniko limit, gırd agozneya resm de qıckek de  GIF imaci de animasyon do nêbo.'''",
 
 # Special:NewFiles
 'newimages' => 'Galeriya dosyayan dê newan',
@@ -3597,7 +3664,7 @@ $8',
 'exif-ycbcrpositioning-1' => 'Wertekerdış',
 'exif-ycbcrpositioning-2' => 'Wayırê-site',
 
-'exif-dc-contributor' => 'İştırakdari',
+'exif-dc-contributor' => 'Pêşteni',
 'exif-dc-coverage' => 'Heruna yana wextin grotışa medya',
 'exif-dc-date' => 'Tarix(i)',
 'exif-dc-publisher' => 'Hesrekar',
@@ -3641,9 +3708,9 @@ $8',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'pêro',
-'namespacesall' => 'têde',
+'namespacesall' => 'pêro',
 'monthsall' => 'pêro',
-'limitall' => 'hemi',
+'limitall' => 'pêro',
 
 # E-mail address confirmation
 'confirmemail' => 'Adresê e-posta tesdiq ker',
@@ -3756,7 +3823,7 @@ Ma rica keno tesdiq bike ke ti raştî wazeno eno pel bivirazo.",
 # Table pager
 'ascending_abbrev' => 'berz',
 'descending_abbrev' => 'nızm',
-'table_pager_next' => 'Pela badê cû',
+'table_pager_next' => 'Pela peyên',
 'table_pager_prev' => 'Pela verêne',
 'table_pager_first' => 'Pela jûyıne',
 'table_pager_last' => 'Pela peyêne',
@@ -3964,10 +4031,10 @@ Resımi be tam asayış mocniyayê, tipê dosyaê bini be programê cıyo elaqed
 'specialpages-group-users' => 'Karber u heqqî',
 'specialpages-group-highuse' => 'Peleyê ke vêşi karênê',
 'specialpages-group-pages' => 'listeyanê pelan',
-'specialpages-group-pagetools' => 'Hacetê pelan',
+'specialpages-group-pagetools' => 'Haletê pelan',
 'specialpages-group-wiki' => 'Malumatê wiki u haceti',
 'specialpages-group-redirects' => 'Pela xasîyê ke heteneyayê',
-'specialpages-group-spam' => 'hacetê spami',
+'specialpages-group-spam' => 'haletê spami',
 
 # Special:BlankPage
 'blankpage' => 'Pela venge',
index b587492..1caeafa 100644 (file)
@@ -1793,6 +1793,7 @@ Snaź coš wopisanje na jeje [$2 boku datajowego wopisanja] wobźěłaś.',
 'uploadnewversion-linktext' => 'Nowu wersiju toś teje dataje nagraś',
 'shared-repo-from' => 'z $1',
 'shared-repo' => 'zgromadny repozitorium',
+'upload-disallowed-here' => 'Bóžko njamóžoš toś ten wobraz pśepisaś.',
 
 # File reversion
 'filerevert' => 'Slědk wześ $1',
@@ -2857,6 +2858,8 @@ W zespominanju dajo se pśicyna pódaś.',
 'pageinfo-length' => 'Dłujkosć boka (w bajtach)',
 'pageinfo-article-id' => 'ID boka',
 'pageinfo-robot-policy' => 'Status pytawy',
+'pageinfo-robot-index' => 'Indeksěrujobny',
+'pageinfo-robot-noindex' => 'Njeindeksěrujobny',
 'pageinfo-views' => 'Licba zwobraznjenjow',
 'pageinfo-watchers' => 'Licba  wobglědowarjow boka',
 'pageinfo-redirects-name' => 'Dalejpósrědnjenja k toś tomu bokoju',
@@ -2871,7 +2874,7 @@ W zespominanju dajo se pśicyna pódaś.',
 'pageinfo-authors' => 'Cełkowna licba wšakich awtorow',
 'pageinfo-recent-edits' => 'Licba nejnowšych změnow (za zachadnych $1)',
 'pageinfo-recent-authors' => 'Nejnowša licba rozdźělnych awtorow',
-'pageinfo-restriction' => 'Šćit boka (<code>$1</code>)',
+'pageinfo-restriction' => 'Šćit boka (<code>{{lcfirst:$1}}</code>)',
 'pageinfo-magic-words' => '{{PLURAL:$1|Magiske słowo|Magiskej słowje|Magiske słowa|Magiske słowa}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Schowana kategorija|Schowanej kategoriji|Schowane kategorije|Schowane kategorije}} ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|Zapśěgnjona pśedłoga|Zapśěgnjonej pśedłoze|Zapśěgnjone pśedłogi|Zapśěgnjone pśedłogi}} ($1)',
@@ -2927,6 +2930,7 @@ $1',
 'file-info-size-pages' => '$1 × $2 pikselow, wjelikosć dataje: $3, MIME-typ: $4, $5 {{PLURAL:$5|bok|boka|boki|bokow}}',
 'file-nohires' => 'Wuše wótgranicowanje njeeksistěrujo.',
 'svg-long-desc' => 'dataja SVG, nominalnje: $1 × $2 piksele, wjelikosć dataje: $3',
+'svg-long-desc-animated' => 'Animěrowana SVG-dataja, zakładnej wótměra $1 × $2 pikselow, datajowa wjelikosć: $3',
 'show-big-image' => 'Połne optiske wótgranicowanje.',
 'show-big-image-preview' => 'Wjelikosć toś togo pśeglěda: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Druge rozeznaśe||Drugej rozeznaśi|Druge rozeznaśa|Druge rozeznaśa}}: $1.',
@@ -2936,6 +2940,8 @@ $1',
 '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}}',
+'file-no-thumb-animation' => "'''Glědaj: Techniskich wobgranicowanjow dla pśeglědne wobrazki toś teje dataje se njeaniměruju.'''",
+'file-no-thumb-animation-gif' => "'''Glědaj: Techniskich wobgranicowanjow dla pśeglědne wobrazki wusokego rozeznaśa GIF-wobrazow ako toś togo njebudu se animěrowaś.'''",
 
 # Special:NewFiles
 'newimages' => 'Nowe dataje',
index 5ee9f93..d51332b 100644 (file)
@@ -212,143 +212,143 @@ $dateFormats = array(
 
 
 $magicWords = array(
-       'redirect'                => array( '0', '#ΑΝΑΚΑΤΕΥΘΥΝΣΗ', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__ΧΩΡΙΣΠΠ__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__ΧΩΡΙΣΠΙΝΑΚΟΘΗΚΗ__', '__NOGALLERY__' ),
-       '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' ),
-       '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' ),
-       'localmonth'              => array( '1', 'ΤΟΠΙΚΟΣΜΗΝΑΣ', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', 'ΤΟΠΙΚΟΣΜΗΝΑΣ1', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'ΤΟΠΙΚΟΣΜΗΝΑΣΟΝΟΜΑ', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'ΤΟΠΙΚΟΣΜΗΝΑΣΓΕΝΙΚΗ', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'ΤΟΠΙΚΟΣΜΗΝΑΣΣΥΝΤ', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'ΤΟΠΙΚΗΜΕΡΑ', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'ΤΟΠΙΚΗΜΕΡΑ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' ),
-       'numberofusers'           => array( '1', 'ΑΡΙΘΜΟΣΧΡΗΣΤΩΝ', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'ΕΝΕΡΓΟΙΧΡΗΣΤΕΣ', 'ΑΡΙΘΜΟΣΕΝΕΡΓΩΝΧΡΗΣΤΩΝ', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'ΑΡΙΘΜΟΣΕΠΕΞΕΡΓΑΣΙΩΝ', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'ΑΡΙΘΜΟΣΕΜΦΑΝΙΣΕΩΝ', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'ΟΝΟΜΑΣΕΛΙΔΑΣ', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'ΟΝΟΜΑΣΕΛΙΔΑΣΚ', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'ΠΕΡΙΟΧΗ', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'ΠΕΡΙΟΧΗΚ', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'ΠΕΡΙΟΧΗΣΥΖΗΤΗΣΕΩΝ', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'ΠΕΡΙΟΧΗΣΥΖΗΤΗΣΕΩΝΚ', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'ΠΕΡΙΟΧΗΘΕΜΑΤΩΝ', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'ΠΕΡΙΟΧΗΘΕΜΑΤΩΝΚ', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'ΠΛΗΡΕΣΟΝΟΜΑΣΕΛΙΔΑΣ', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'ΠΛΗΡΕΣΟΝΟΜΑΣΕΛΙΔΑΣΚ', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'ΟΝΟΜΑΥΠΟΣΕΛΙΔΑΣ', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'ΟΝΟΜΑΥΠΟΣΕΛΙΔΑΣΚ', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'ΒΑΣΗΟΝΟΜΑΤΟΣΣΕΛΙΔΑΣ', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'ΒΑΣΗΟΝΟΜΑΤΟΣΣΕΛΙΔΑΣΚ', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'ΟΝΟΜΑΣΕΛΙΔΑΣΣΥΖΗΤΗΣΕΩΝ', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'ΟΝΟΜΑΣΕΛΙΔΑΣΣΥΖΗΤΗΣΕΩΝΚ', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'ΟΝΟΜΑΣΕΛΙΔΑΣΘΕΜΑΤΟΣ', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'subjectpagenamee'        => array( '1', 'ΟΝΟΜΑΣΕΛΙΔΑΣΘΕΜΑΤΟΣΚ', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
-       'msg'                     => array( '0', 'ΚΕΙΜΕΝΟ:', 'MSG:' ),
-       'subst'                   => array( '0', 'ΑΛΛΑΓΗ:', 'SUBST:' ),
-       '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' ),
-       '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_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:' ),
-       'localurl'                => array( '0', 'ΤΟΠΙΚΟURL:', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'ΤΟΠΙΚΟURLΚ:', 'LOCALURLE:' ),
-       'server'                  => array( '0', 'ΕΞΥΠΗΡΕΤΗΤΗΣ', 'SERVER' ),
-       'servername'              => array( '0', 'ΟΝΟΜΑΕΞΥΠΗΡΕΤΗΤΗ', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'ΔΙΑΔΡΟΜΗΠΡΟΓΡΑΜΜΑΤΟΣ', 'SCRIPTPATH' ),
-       'grammar'                 => array( '0', 'ΓΡΑΜΜΑΤΙΚΗ:', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'ΦΥΛΟ:', 'GENDER:' ),
-       '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', 'ΚΩΔΙΚΟΣΑΛΛΑΓΗΣ', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'ΜΕΡΑΑΛΛΑΓΗΣ', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'ΜΕΡΑΑΛΛΑΓΗΣ2', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'ΜΗΝΑΣΑΛΛΑΓΗΣ', 'REVISIONMONTH' ),
-       'revisionyear'            => array( '1', 'ΕΤΟΣΑΛΛΑΓΗΣ', 'REVISIONYEAR' ),
-       'revisiontimestamp'       => array( '1', 'ΧΡΟΝΟΣΗΜΑΝΣΗΑΛΛΑΓΗΣ', 'REVISIONTIMESTAMP' ),
-       'plural'                  => array( '0', 'ΠΛΗΘΥΝΤΙΚΟΣ:', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'ΠΛΗΡΕΣURL:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'ΠΛΗΡΕΣURLΚ:', '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' ),
-       'newsectionlink'          => array( '1', '__ΔΕΣΜΟΣΝΕΑΣΕΝΟΤΗΤΑΣ__', '__NEWSECTIONLINK__' ),
-       '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' ),
-       '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__' ),
-       'numberingroup'           => array( '1', 'ΟΜΑΔΑΑΡΙΘΜΗΣΗΣ', 'NUMBERINGROUP', 'NUMINGROUP' ),
-       'staticredirect'          => array( '1', '__ΣΤΑΤΙΚΗΑΝΑΚΑΤΕΥΘΥΝΣΗ__', '__STATICREDIRECT__' ),
-       'protectionlevel'         => array( '1', 'ΕΠΙΠΕΔΟΠΡΟΣΤΑΣΙΑΣ', 'PROTECTIONLEVEL' ),
+       'redirect'                  => array( '0', '#ΑΝΑΚΑΤΕΥΘΥΝΣΗ', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__ΧΩΡΙΣΠΠ__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__ΧΩΡΙΣΠΙΝΑΚΟΘΗΚΗ__', '__NOGALLERY__' ),
+       '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' ),
+       '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' ),
+       'localmonth'                => array( '1', 'ΤΟΠΙΚΟΣΜΗΝΑΣ', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'ΤΟΠΙΚΟΣΜΗΝΑΣ1', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'ΤΟΠΙΚΟΣΜΗΝΑΣΟΝΟΜΑ', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'ΤΟΠΙΚΟΣΜΗΝΑΣΓΕΝΙΚΗ', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'ΤΟΠΙΚΟΣΜΗΝΑΣΣΥΝΤ', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'ΤΟΠΙΚΗΜΕΡΑ', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'ΤΟΠΙΚΗΜΕΡΑ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' ),
+       'numberofusers'             => array( '1', 'ΑΡΙΘΜΟΣΧΡΗΣΤΩΝ', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'ΕΝΕΡΓΟΙΧΡΗΣΤΕΣ', 'ΑΡΙΘΜΟΣΕΝΕΡΓΩΝΧΡΗΣΤΩΝ', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'ΑΡΙΘΜΟΣΕΠΕΞΕΡΓΑΣΙΩΝ', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'ΑΡΙΘΜΟΣΕΜΦΑΝΙΣΕΩΝ', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'ΟΝΟΜΑΣΕΛΙΔΑΣ', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'ΟΝΟΜΑΣΕΛΙΔΑΣΚ', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'ΠΕΡΙΟΧΗ', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'ΠΕΡΙΟΧΗΚ', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'ΠΕΡΙΟΧΗΣΥΖΗΤΗΣΕΩΝ', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'ΠΕΡΙΟΧΗΣΥΖΗΤΗΣΕΩΝΚ', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'ΠΕΡΙΟΧΗΘΕΜΑΤΩΝ', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'ΠΕΡΙΟΧΗΘΕΜΑΤΩΝΚ', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'ΠΛΗΡΕΣΟΝΟΜΑΣΕΛΙΔΑΣ', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'ΠΛΗΡΕΣΟΝΟΜΑΣΕΛΙΔΑΣΚ', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'ΟΝΟΜΑΥΠΟΣΕΛΙΔΑΣ', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'ΟΝΟΜΑΥΠΟΣΕΛΙΔΑΣΚ', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'ΒΑΣΗΟΝΟΜΑΤΟΣΣΕΛΙΔΑΣ', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'ΒΑΣΗΟΝΟΜΑΤΟΣΣΕΛΙΔΑΣΚ', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'ΟΝΟΜΑΣΕΛΙΔΑΣΣΥΖΗΤΗΣΕΩΝ', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'ΟΝΟΜΑΣΕΛΙΔΑΣΣΥΖΗΤΗΣΕΩΝΚ', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'ΟΝΟΜΑΣΕΛΙΔΑΣΘΕΜΑΤΟΣ', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'          => array( '1', 'ΟΝΟΜΑΣΕΛΙΔΑΣΘΕΜΑΤΟΣΚ', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+       'msg'                       => array( '0', 'ΚΕΙΜΕΝΟ:', 'MSG:' ),
+       'subst'                     => array( '0', 'ΑΛΛΑΓΗ:', 'SUBST:' ),
+       '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' ),
+       '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_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:' ),
+       'localurl'                  => array( '0', 'ΤΟΠΙΚΟURL:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'ΤΟΠΙΚΟURLΚ:', 'LOCALURLE:' ),
+       'server'                    => array( '0', 'ΕΞΥΠΗΡΕΤΗΤΗΣ', 'SERVER' ),
+       'servername'                => array( '0', 'ΟΝΟΜΑΕΞΥΠΗΡΕΤΗΤΗ', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'ΔΙΑΔΡΟΜΗΠΡΟΓΡΑΜΜΑΤΟΣ', 'SCRIPTPATH' ),
+       'grammar'                   => array( '0', 'ΓΡΑΜΜΑΤΙΚΗ:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'ΦΥΛΟ:', 'GENDER:' ),
+       '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', 'ΚΩΔΙΚΟΣΑΛΛΑΓΗΣ', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'ΜΕΡΑΑΛΛΑΓΗΣ', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'ΜΕΡΑΑΛΛΑΓΗΣ2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'ΜΗΝΑΣΑΛΛΑΓΗΣ', 'REVISIONMONTH' ),
+       'revisionyear'              => array( '1', 'ΕΤΟΣΑΛΛΑΓΗΣ', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'ΧΡΟΝΟΣΗΜΑΝΣΗΑΛΛΑΓΗΣ', 'REVISIONTIMESTAMP' ),
+       'plural'                    => array( '0', 'ΠΛΗΘΥΝΤΙΚΟΣ:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'ΠΛΗΡΕΣURL:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'ΠΛΗΡΕΣURLΚ:', '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' ),
+       'newsectionlink'            => array( '1', '__ΔΕΣΜΟΣΝΕΑΣΕΝΟΤΗΤΑΣ__', '__NEWSECTIONLINK__' ),
+       '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' ),
+       '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__' ),
+       'numberingroup'             => array( '1', 'ΟΜΑΔΑΑΡΙΘΜΗΣΗΣ', 'NUMBERINGROUP', 'NUMINGROUP' ),
+       'staticredirect'            => array( '1', '__ΣΤΑΤΙΚΗΑΝΑΚΑΤΕΥΘΥΝΣΗ__', '__STATICREDIRECT__' ),
+       'protectionlevel'           => array( '1', 'ΕΠΙΠΕΔΟΠΡΟΣΤΑΣΙΑΣ', 'PROTECTIONLEVEL' ),
 );
 
 $messages = array(
@@ -616,6 +616,10 @@ $1',
 'youhavenewmessages' => 'Έχετε $1 ($2).',
 'newmessageslink' => 'νέα μηνύματα',
 'newmessagesdifflink' => 'τελευταία αλλαγή',
+'youhavenewmessagesfromusers' => 'Έχετε $1 από {{PLURAL:$3|ένα άλλο χρήστη|$3 χρήστες}} ($2).',
+'youhavenewmessagesmanyusers' => 'Έχετε $1 από πολλούς χρήστες ($2).',
+'newmessageslinkplural' => '{{PLURAL:$1|ένα νέο μήνυμα|νέα μηνύματα}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|τελευταία αλλαγή|τελευταίες αλλαγές}}',
 'youhavenewmessagesmulti' => 'Έχετε νέα μηνύματα στο $1',
 'editsection' => 'επεξεργασία',
 'editold' => 'επεξεργασία',
@@ -736,6 +740,8 @@ $2',
 'filereadonlyerror' => 'Δεν είναι δυνατή η τροποποίηση του αρχείου " $1 " επειδή το αποθετήριο αρχείων " $2 " είναι σε κατάσταση λειτουργίας μόνο για ανάγνωση.
 
 Ο διαχειριστής που το κλείδωσε προσφέρει αυτή την αιτιολόγηση: " $3 ".',
+'exception-nologin' => 'Δεν έχετε συνδεθεί.',
+'exception-nologin-text' => 'Αυτή η σελίδα ή η ενέργεια απαιτεί να είστε {{GENDER:|συνδεμένος|συνδεμένη}} στο wiki.',
 
 # Virus scanner
 'virus-badscanner' => "Λάθος ρύθμιση: άγνωστος ανιχνευτής ιών: ''$1''",
@@ -2239,6 +2245,8 @@ $1',
 μια έγκυρη ηλεκτρονική διεύθυνση στις [[Special:Preferences|Προτιμήσεις]]
 για να στείλετε e-mail σε άλλους χρήστες.',
 'emailuser' => 'Στείλτε μήνυμα σε αυτό τον χρήστη',
+'emailuser-title-target' => 'Αποστολή e-mail {{GENDER:$1|στο|στη}} χρήστη',
+'emailuser-title-notarget' => 'Αποστολή e-mail σε χρήστη',
 'emailpage' => 'Αποστολή μηνύματος ηλεκτρονικού ταχυδρομείο στο χρήστη',
 'emailpagetext' => 'Συπληρώνοντας την παρακάτω φόρμα θα στείλετε ένα μήνυμα εφόσον έχετε δηλώσει μια έγκυρη διεύθυνση ηλεκτρονικού ταχυδρομείου στις [[Special:Preferences|προτιμήσεις χρήστη]]. Αυτή θα εμφανιστεί ως διεύθυνση αποστολέα του μηνύματος, ούτως ώστε ο παραλήπτης να μπορέσει να σας απαντήσει.',
 'usermailererror' => 'Σφάλμα ηλεκτρονικού ταχυδρομείου:',
@@ -2386,6 +2394,8 @@ $UNWATCHURL
 'rollback' => 'Επαναφορά επεξεργασιών',
 'rollback_short' => 'Επαναφορά',
 'rollbacklink' => 'Επαναφορά στην προηγούμενη',
+'rollbacklinkcount' => 'Επαναφορά $1 {{PLURAL:$1|επεξεργασίας|επεξεργασιών}}',
+'rollbacklinkcount-morethan' => 'επαναφορά περισσότερων από $1 {{PLURAL:$1|επεξεργασία|επεξεργασίες}}',
 'rollbackfailed' => 'Η επαναφορά απέτυχε.',
 'cantrollback' => 'Δεν είναι δυνατή η αναίρεση αυτής της αλλαγής, πρόκειται για την αρχική ενέργεια δημιουργίας της σελίδας.',
 'alreadyrolled' => 'Αδύνατον να αναιρεθεί η τελευταία αλλαγή της σελίδας [[:$1]] από το χρήστη ([[User:$2|$2]] ([[User talk:$2|Συζήτηση]]){{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]), διότι κάποιος έχει ήδη αναιρέσει την αλλαγή ή έχει αλλάξει εκ νέου τη σελίδα.
@@ -3044,7 +3054,14 @@ $1',
 
 # Info page
 'pageinfo-title' => 'Πληροφορίες για "$1"',
-'pageinfo-header-edits' => 'Επεξεργασίες',
+'pageinfo-header-basic' => 'Βασικές πληροφορίες',
+'pageinfo-header-edits' => 'Ιστορικό επεξεργασίας',
+'pageinfo-header-restrictions' => 'Προστασία σελίδας',
+'pageinfo-header-properties' => 'Ιδιότητες σελίδας',
+'pageinfo-display-title' => 'Εμφάνιση τίτλου',
+'pageinfo-default-sort' => 'Προεπιλεγμένο κλειδί ταξινόμησης',
+'pageinfo-length' => 'Μήκος σελίδας (σε bytes)',
+'pageinfo-article-id' => 'Αναγνωριστικό σελίδας',
 'pageinfo-views' => 'Αριθμός προβολών',
 'pageinfo-watchers' => 'Αριθμός παρατηρητών',
 'pageinfo-edits' => 'Αριθμός επεξεργασιών',
index e290a4c..515a433 100644 (file)
@@ -282,6 +282,7 @@ $magicWords = array(
        'img_text_bottom'         => array( 1,    'text-bottom' ),
        'img_link'                => array( 1,    'link=$1' ),
        'img_alt'                 => array( 1,    'alt=$1' ),
+       'img_class'               => array( 1,    'class=$1' ),
        'int'                     => array( 0,    'INT:' ),
        'sitename'                => array( 1,    'SITENAME' ),
        'ns'                      => array( 0,    'NS:' ),
@@ -1434,6 +1435,7 @@ You are also promising us that you wrote this yourself, or copied it from a publ
 If you do not want your writing to be edited mercilessly, then do not submit it here.<br />
 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-head-copy-warn'          => '-', # do not translate or duplicate this message to other languages
 'editpage-tos-summary'             => '-', # do not translate or duplicate this message to other languages
 'longpage-hint'                    => '-', # do not translate or duplicate this message to other languages
 'longpageerror'                    => "'''Error: The text you have submitted is {{PLURAL:$1|one kilobyte|$1 kilobytes}} long, which is longer than the maximum of {{PLURAL:$2|one kilobyte|$2 kilobytes}}.'''
@@ -2458,6 +2460,7 @@ Maybe you want to edit the description on its [$2 file description page] there.'
 '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
+'upload-disallowed-here'            => 'Unfortunately you cannot overwrite this image.',
 
 # File reversion
 'filerevert'                => 'Revert $1',
@@ -3732,6 +3735,7 @@ This is probably caused by a link to a blacklisted external site.',
 'spam_deleting'       => 'All revisions contained links to $1, deleting',
 
 # Info page
+'pageinfo-header'              => '-', # do not translate or duplicate this message to other languages
 'pageinfo-title'               => 'Information for "$1"',
 'pageinfo-header-basic'        => 'Basic information',
 'pageinfo-header-edits'        => 'Edit history',
@@ -3758,10 +3762,11 @@ This is probably caused by a link to a blacklisted external site.',
 'pageinfo-authors'             => 'Total number of distinct authors',
 'pageinfo-recent-edits'        => 'Recent number of edits (within past $1)',
 'pageinfo-recent-authors'      => 'Recent number of distinct authors',
-'pageinfo-restriction'         => 'Page protection (<code>$1</code>)',
+'pageinfo-restriction'         => 'Page protection (<code>{{lcfirst:$1}}</code>)',
 'pageinfo-magic-words'         => 'Magic {{PLURAL:$1|word|words}} ($1)',
 'pageinfo-hidden-categories'   => 'Hidden {{PLURAL:$1|category|categories}} ($1)',
 'pageinfo-templates'           => 'Transcluded {{PLURAL:$1|template|templates}} ($1)',
+'pageinfo-footer'              => '-', # do not translate or duplicate this message to other languages
 
 # Skin names
 'skinname-standard'    => 'Classic', # only translate this message to other languages if you have to change it
@@ -3818,6 +3823,7 @@ By executing it, your system may be compromised.",
 'file-info-size-pages'   => '$1 × $2 pixels, file size: $3, MIME type: $4, $5 {{PLURAL:$5|page|pages}}',
 'file-nohires'           => 'No higher resolution available.',
 'svg-long-desc'          => 'SVG file, nominally $1 × $2 pixels, file size: $3',
+'svg-long-desc-animated' => 'Animated SVG file, nominally $1 × $2 pixels, file size: $3',
 'show-big-image'         => 'Full resolution',
 'show-big-image-preview' => 'Size of this preview: $1.',
 'show-big-image-other'   => 'Other {{PLURAL:$2|resolution|resolutions}}: $1.',
@@ -3827,6 +3833,8 @@ By executing it, your system may be compromised.",
 'file-info-png-looped'   => 'looped',
 'file-info-png-repeat'   => 'played $1 {{PLURAL:$1|time|times}}',
 'file-info-png-frames'   => '$1 {{PLURAL:$1|frame|frames}}',
+'file-no-thumb-animation'=> '\'\'\'Note: Due to technical limitations, thumbnails of this file will not be animated.\'\'\'',
+'file-no-thumb-animation-gif' => '\'\'\'Note: Due to technical limitations, thumbnails of high resolution GIF images such as this one will not be animated.\'\'\'',
 
 # Special:NewFiles
 'newimages'             => 'Gallery of new files',
index dc36986..f838269 100644 (file)
@@ -175,129 +175,129 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       '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' ),
-       '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' ),
-       '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', 'dekstre', 'right' ),
-       'img_left'                => array( '1', 'maldekstra', 'maldekstre', 'left' ),
-       'img_none'                => array( '1', 'nenio', 'neniu', 'none' ),
-       'img_width'               => array( '1', '$1ra', '$1px' ),
-       'img_center'              => array( '1', 'centra', 'meza', 'center', 'centre' ),
-       '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_upright'             => array( '1', 'altdekstre', 'altdekstre=$1', 'altdekstre_$1', 'upright', 'upright=$1', 'upright $1' ),
-       'img_border'              => array( '1', 'kadra', 'kadrita', 'kadrigita', 'kadrite', 'kadrigite', 'border' ),
-       'img_sub'                 => array( '1', 'sube', 'malsupre', 'sub' ),
-       'img_super'               => array( '1', 'supre', 'malsube', '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' ),
-       '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', 'NSS:', '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', '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:' ),
-       'fullurl'                 => array( '0', 'PLENALIGILO:', 'PLENLIG:', 'TUTATTT:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'PLENALIGILOO:', 'PLENLIGG:', '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:' ),
-       '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__' ),
-       'staticredirect'          => array( '1', '__STATIKAALIDIREKTO__', '__STATICREDIRECT__' ),
-       'protectionlevel'         => array( '1', 'PROTEKTONIVELO', 'PROTECTIONLEVEL' ),
-       'url_path'                => array( '0', 'VOJO', 'PATH' ),
-       'url_wiki'                => array( '0', 'VIKIO', 'WIKI' ),
-       'url_query'               => array( '0', 'INFORMPETO', 'QUERY' ),
+       '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' ),
+       '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' ),
+       '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', 'dekstre', 'right' ),
+       'img_left'                  => array( '1', 'maldekstra', 'maldekstre', 'left' ),
+       'img_none'                  => array( '1', 'nenio', 'neniu', 'none' ),
+       'img_width'                 => array( '1', '$1ra', '$1px' ),
+       'img_center'                => array( '1', 'centra', 'meza', 'center', 'centre' ),
+       '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_upright'               => array( '1', 'altdekstre', 'altdekstre=$1', 'altdekstre_$1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_border'                => array( '1', 'kadra', 'kadrita', 'kadrigita', 'kadrite', 'kadrigite', 'border' ),
+       'img_sub'                   => array( '1', 'sube', 'malsupre', 'sub' ),
+       'img_super'                 => array( '1', 'supre', 'malsube', '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' ),
+       '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', 'NSS:', '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', '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:' ),
+       'fullurl'                   => array( '0', 'PLENALIGILO:', 'PLENLIG:', 'TUTATTT:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'PLENALIGILOO:', 'PLENLIGG:', '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:' ),
+       '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__' ),
+       'staticredirect'            => array( '1', '__STATIKAALIDIREKTO__', '__STATICREDIRECT__' ),
+       'protectionlevel'           => array( '1', 'PROTEKTONIVELO', 'PROTECTIONLEVEL' ),
+       'url_path'                  => array( '0', 'VOJO', 'PATH' ),
+       'url_wiki'                  => array( '0', 'VIKIO', 'WIKI' ),
+       'url_query'                 => array( '0', 'INFORMPETO', 'QUERY' ),
 );
 
 $separatorTransformTable = array( ',' => "\xc2\xa0", '.' => ',' );
@@ -630,12 +630,12 @@ Listo de validaj specialaj paĝoj estas trovebla ĉe [[Special:SpecialPages|{{in
 # General errors
 'error' => 'Eraro',
 'databaseerror' => 'Datumbaza eraro',
-'dberrortext' => 'Sintakseraro okazis dum informpeto al la datumaro.
-Ĝi eble indikas cimon en la programaro.
+'dberrortext' => 'Sintakseraro okazis dum informpeto al la datenbazo.
+Ĝi eble indikas misaĵeton en la programaro.
 Jen la plej laste provita informpeto:
-<blockquote><tt>$1</tt></blockquote>
-el la funkcio "<tt>$2</tt>".
-MySQL liveris eraron "<tt>$3: $4</tt>".',
+<blockquote><code>$1</code></blockquote>
+el la funkcio "<code>$2</code>".
+La datenbazo liveris eraron "<samp>$3: $4</samp>".',
 'dberrortextcl' => 'Sintaksa eraro de la datumbaza informmendo okazis.
 La lasta provita datumbaza informmendo estis:
 "$1"
@@ -989,12 +989,10 @@ Detaloj troveblos en la [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}
 'userpage-userdoesnotexist-view' => 'Uzanto-konto "$1" ne estas registrita.',
 'blocked-notice-logextract' => 'Ĉi tiu uzanto estas ĉi-momente forbarita.
 La lasta protokolero estas jene montrata por via referenco:',
-'clearyourcache' => "'''Notu:''' Post konservado vi forviŝu la kaŝmemoron de via foliumilo por vidi la ŝanĝojn. 
-* '''Firefox / Safari:''' Premu majuskligan klavon klakante ''Reŝarĝi'', aŭ premu ''Stir-F5'', aŭ premu ''Stir-R'' aŭ ''⌘-R'' kun Makintoŝo
-* '''Google Chrome:''' Premu ''Stir-majuskligklavon'' aŭ ⌘-Majuskligklavo-R'' kun Makintoŝo
+'clearyourcache' => "Notu:''' Post konservado, vi forviŝu la kaŝmemoron de via foliumilo por vidi la ŝanĝojn. 
+* '''Firefox / Safari:''' Premu majuskligan klavon klakante ''Reŝarĝi'', aŭ premu aŭ ''Stir-F5'' aŭ ''Stir-R'' (''⌘-R'' kun Makintoŝo)
+* '''Google Chrome:''' Premu ''Stir-majuskligklavon-R'' (''⌘-Majuskligklavo-R'' kun Makintoŝo)
 * '''Interreta Esplorilo''': Premu ''Stir'' klakante ''Refreŝu'', aŭ premu ''Stir-F5'' 
-* '''Safari:''' ''Cmd-R''
-* '''Konqueror:''' Klaku ''Reŝarĝu'' aŭ premu ''F5''
 * '''Opera:''' Nuligi la kaŝmemoro en ''Iloj → Preferoj''",
 'usercssyoucanpreview' => "'''Konsileto:''' Uzu la butonon \"Antaŭrigardi\" por provi vian novan CSS-kodon antaŭ konservado.",
 'userjsyoucanpreview' => "'''Konsileto:''' Uzu la butonon \"Antaŭrigard\" por provi vian novan JS-kodon antaŭ konservado.",
@@ -1988,6 +1986,7 @@ Eble vi volas redakti la priskribon ĉe ties [$2 dosier-priskriba paĝo].',
 'uploadnewversion-linktext' => 'Alŝuti novan version de ĉi tiu dosiero',
 'shared-repo-from' => 'de $1',
 'shared-repo' => 'komuna dosierujo',
+'upload-disallowed-here' => 'Bedaŭrinde, vi ne povas superskribi ĉi tiun bildon.',
 
 # File reversion
 'filerevert' => 'Restarigi $1',
@@ -2270,6 +2269,8 @@ Estas [[{{MediaWiki:Listgrouprights-helppage}}|aldona informo]] pri individuaj r
 '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',
+'emailuser-title-target' => 'Retpoŝti ĉi tiun {{GENDER:$1|uzanton}}',
+'emailuser-title-notarget' => 'Retpoŝti 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.',
@@ -3093,11 +3094,17 @@ Datoj de versioj kaj nomoj de redaktantoj estos preservitaj.
 
 # Info page
 'pageinfo-title' => 'Informoj por "$1"',
-'pageinfo-header-edits' => 'Redaktoj',
+'pageinfo-header-basic' => 'Baza informo',
+'pageinfo-header-edits' => 'Historio de redaktoj',
+'pageinfo-robot-index' => 'Indeksebla',
+'pageinfo-robot-noindex' => 'Ne indeksebla',
 'pageinfo-views' => 'Nombro de rigardoj',
-'pageinfo-watchers' => 'Nombro de atentantoj',
-'pageinfo-edits' => 'Nombro de redaktoj',
-'pageinfo-authors' => 'Nombro de distingaj aŭtoroj',
+'pageinfo-watchers' => 'Nombro de paĝatentantoj',
+'pageinfo-lastuser' => 'Lasta redaktoro',
+'pageinfo-lasttime' => 'Dato de lasta redakto',
+'pageinfo-edits' => 'Tuta nombro de redaktoj',
+'pageinfo-authors' => 'Tuta nombro de malsamaj aŭtoroj',
+'pageinfo-recent-authors' => 'Lasta nombro de malsamaj aŭtoroj',
 
 # Skin names
 'skinname-standard' => 'Klasiko',
index 6aed22c..c36b38e 100644 (file)
@@ -70,6 +70,7 @@
  * @author Richard Wolf VI
  * @author Sanbec
  * @author Savh
+ * @author Shirayuki
  * @author Spacebirdy
  * @author Technorum
  * @author The Evil IP address
@@ -130,7 +131,7 @@ $specialPageAliases = array(
        'ChangeEmail'               => array( 'CambiarEmail', 'CambiarCorreo' ),
        'ChangePassword'            => array( 'Cambiar_contraseña', 'CambiarContraseña', 'ResetearContraseña', 'Resetear_contraseña' ),
        'ComparePages'              => array( 'CompararPáginas' ),
-       'Confirmemail'              => array( 'ConfirmarEmail', 'Confirmar_e-mail' ),
+       'Confirmemail'              => array( 'ConfirmarEmail', 'Confirmar_correo_electrónico' ),
        'Contributions'             => array( 'Contribuciones' ),
        'CreateAccount'             => array( 'Crear_una_cuenta', 'CrearCuenta' ),
        'Deadendpages'              => array( 'PáginasSinSalida', 'Páginas_sin_salida' ),
@@ -144,7 +145,7 @@ $specialPageAliases = array(
        'FileDuplicateSearch'       => array( 'BuscarArchivosDuplicados', 'Buscar_archivos_duplicados' ),
        'Filepath'                  => array( 'RutaDeArchivo', 'Ruta_de_archivo' ),
        'Import'                    => array( 'Importar' ),
-       'Invalidateemail'           => array( 'InvalidarEmail', 'Invalidar_e-mail' ),
+       'Invalidateemail'           => array( 'InvalidarEmail', 'Invalidar_correo_electrónico' ),
        'BlockList'                 => array( 'UsuariosBloqueados', 'Lista_de_usuarios_bloqueados' ),
        'LinkSearch'                => array( 'BúsquedaDeEnlaces', 'Búsqueda_de_enlaces' ),
        'Listadmins'                => array( 'ListaDeAdministradores', 'Lista_de_administradores' ),
@@ -173,6 +174,7 @@ $specialPageAliases = array(
        'Newimages'                 => array( 'NuevasImágenes', 'Nuevas_imágenes' ),
        'Newpages'                  => array( 'PáginasNuevas', 'Páginas_nuevas' ),
        'PasswordReset'             => array( 'RestablecerContraseña' ),
+       'PermanentLink'             => array( 'EnlacePermanente' ),
        'Popularpages'              => array( 'PáginasMásVisitadas', 'PáginasPopulares', 'Páginas_más_visitadas' ),
        'Preferences'               => array( 'Preferencias' ),
        'Prefixindex'               => array( 'PáginasPorPrefijo', 'Páginas_por_prefijo' ),
@@ -215,125 +217,132 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#REDIRECCIÓN', '#REDIRECCION', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__NOTDC__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__NOGALERÍA__', '__NOGALERIA__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__FORZARTDC__', '__FORZARTOC__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__TDC__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__NOEDITARSECCIÓN__', '__NOEDITARSECCION__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '__NOTÍTULO__', '__NOTITULO__', '__NOHEADER__' ),
-       'currentmonth'            => array( '1', 'MESACTUAL', 'MESACTUAL2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', 'MESACTUAL1', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', 'MESACTUALCOMPLETO', 'NOMBREMESACTUAL', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'MESACTUALGENITIVO', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'MESACTUALABREVIADO', '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' ),
-       'currentdayname'          => array( '1', 'NOMBREDÍAACTUAL', 'NOMBREDIAACTUAL', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'AÑOACTUAL', 'AÑO_ACTUAL', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'HORA_MINUTOS_ACTUAL', 'HORAMINUTOSACTUAL', 'TIEMPOACTUAL', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'HORAACTUAL', 'HORA_ACTUAL', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'MESLOCAL', 'MESLOCAL2', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', 'MESLOCAL1', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'MESLOCALCOMPLETO', 'NOMBREMESLOCAL', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'MESLOCALGENITIVO', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'MESLOCALABREVIADO', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'DÍALOCAL', 'DIALOCAL', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'DIALOCAL2', 'DÍALOCAL2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'NOMBREDIALOCAL', 'NOMBREDÍALOCAL', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'AÑOLOCAL', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'HORAMINUTOSLOCAL', 'TIEMPOLOCAL', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'HORALOCAL', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'NÚMERODEPÁGINAS', 'NUMERODEPAGINAS', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'NÚMERODEARTÍCULOS', 'NUMERODEARTICULOS', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'NÚMERODEARCHIVOS', 'NUMERODEARCHIVOS', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'NÚMERODEUSUARIOS', 'NUMERODEUSUARIOS', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'NÚMERODEUSUARIOSACTIVOS', 'NUMERODEUSUARIOSACTIVOS', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'NÚMERODEEDICIONES', 'NUMERODEEDICIONES', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'NÚMERODEVISTAS', 'NUMERODEVISTAS', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'NOMBREDEPAGINA', 'NOMBREDEPÁGINA', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'NOMBREDEPAGINAC', 'NOMBREDEPÁGINAC', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'ESPACIODENOMBRE', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'ESPACIODENOMBREC', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'ESPACIODEDISCUSION', 'ESPACIODEDISCUSIÓN', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'ESPACIODEDISCUSIONC', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'ESPACIODEASUNTO', 'ESPACIODETEMA', 'ESPACIODEARTÍCULO', 'ESPACIODEARTICULO', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'ESPACIODETEMAC', 'ESPACIODEASUNTOC', 'ESPACIODEARTICULOC', 'ESPACIODEARTÍCULOC', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'NOMBRECOMPLETODEPÁGINA', 'NOMBRECOMPLETODEPAGINA', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'NOMBRECOMPLETODEPAGINAC', 'NOMBRECOMPLETODEPÁGINAC', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'NOMBREDESUBPAGINA', 'NOMBREDESUBPÁGINA', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'NOMBREDESUBPAGINAC', 'NOMBREDESUBPÁGINAC', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'NOMBREDEPAGINABASE', 'NOMBREDEPÁGINABASE', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'NOMBREDEPAGINABASEC', 'NOMBREDEPÁGINABASEC', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'NOMBREDEPÁGINADEDISCUSIÓN', 'NOMBREDEPAGINADEDISCUSION', 'NOMBREDEPAGINADISCUSION', 'NOMBREDEPÁGINADISCUSIÓN', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'NOMBREDEPÁGINADEDISCUSIÓNC', 'NOMBREDEPAGINADEDISCUSIONC', 'NOMBREDEPAGINADISCUSIONC', 'NOMBREDEPÁGINADISCUSIÓNC', 'TALKPAGENAMEE' ),
-       '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', '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_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', 'enlace=$1', 'link=$1' ),
-       'sitename'                => array( '1', 'NOMBREDELSITIO', 'SITENAME' ),
-       'ns'                      => array( '0', 'EN:', 'NS:' ),
-       'localurl'                => array( '0', 'URLLOCAL', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'URLLOCALC:', 'LOCALURLE:' ),
-       'server'                  => array( '0', 'SERVIDOR', 'SERVER' ),
-       'servername'              => array( '0', 'NOMBRESERVIDOR', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'RUTASCRIPT', 'RUTADESCRIPT', 'SCRIPTPATH' ),
-       'stylepath'               => array( '0', 'RUTAESTILO', 'RUTADEESTILO', 'STYLEPATH' ),
-       'grammar'                 => array( '0', 'GRAMATICA:', 'GRAMÁTICA:', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'GÉNERO:', 'GENERO:', 'GENDER:' ),
-       'notitleconvert'          => array( '0', '__NOCONVERTIRTITULO__', '__NOCONVERTIRTÍTULO__', '__NOCT___', '__NOTITLECONVERT__', '__NOTC__' ),
-       'nocontentconvert'        => array( '0', '__NOCONVERTIRCONTENIDO__', '__NOCC___', '__NOCONTENTCONVERT__', '__NOCC__' ),
-       'currentweek'             => array( '1', 'SEMANAACTUAL', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'DDSACTUAL', 'DIADESEMANAACTUAL', 'DÍADESEMANAACTUAL', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'SEMANALOCAL', 'LOCALWEEK' ),
-       'localdow'                => array( '1', 'DDSLOCAL', 'DIADESEMANALOCAL', 'DÍADESEMANALOCAL', 'LOCALDOW' ),
-       'revisionid'              => array( '1', 'IDDEREVISION', 'IDREVISION', 'IDDEREVISIÓN', 'IDREVISIÓN', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'DIADEREVISION', 'DIAREVISION', 'DÍADEREVISIÓN', 'DÍAREVISIÓN', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'DIADEREVISION2', 'DIAREVISION2', 'DÍADEREVISIÓN2', 'DÍAREVISIÓN2', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'MESDEREVISION', 'MESDEREVISIÓN', 'MESREVISION', 'MESREVISIÓN', 'REVISIONMONTH' ),
-       'revisionyear'            => array( '1', 'AÑODEREVISION', 'AÑODEREVISIÓN', 'AÑOREVISION', 'AÑOREVISIÓN', 'REVISIONYEAR' ),
-       'revisiontimestamp'       => array( '1', 'MARCADEHORADEREVISION', 'MARCADEHORADEREVISIÓN', 'REVISIONTIMESTAMP' ),
-       'revisionuser'            => array( '1', 'USUARIODEREVISION', 'USUARIODEREVISIÓN', 'REVISIONUSER' ),
-       'fullurl'                 => array( '0', 'URLCOMPLETA:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'URLCOMPLETAC:', 'FULLURLE:' ),
-       'lcfirst'                 => array( '0', 'PRIMEROMINUS;', 'PRIMEROMINÚS:', 'LCFIRST:' ),
-       'ucfirst'                 => array( '0', 'PRIMEROMAYUS;', 'PRIMEROMAYÚS:', 'UCFIRST:' ),
-       'lc'                      => array( '0', 'MINUS:', 'MINÚS:', 'LC:' ),
-       'uc'                      => array( '0', 'MAYUS:', 'MAYÚS:', 'UC:' ),
-       'displaytitle'            => array( '1', 'MOSTRARTÍTULO', 'MOSTRARTITULO', 'DISPLAYTITLE' ),
-       'newsectionlink'          => array( '1', '__VINCULARANUEVASECCION__', 'VÍNCULARANUEVASECCIÓN__', '__NEWSECTIONLINK__' ),
-       'nonewsectionlink'        => array( '1', '__NOVINCULARANUEVASECCION__', 'NOVÍNCULARANUEVASECCIÓN__', '__NONEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', 'VERSIONACTUAL', 'VERSIÓNACTUAL', 'CURRENTVERSION' ),
-       'urlencode'               => array( '0', 'CODIFICARURL:', 'URLENCODE:' ),
-       'currenttimestamp'        => array( '1', 'MARCADEHORAACTUAL', 'CURRENTTIMESTAMP' ),
-       'localtimestamp'          => array( '1', 'MARCADEHORALOCAL', 'LOCALTIMESTAMP' ),
-       'language'                => array( '0', '#IDIOMA:', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', 'IDIOMADELCONTENIDO', 'IDIOMADELCONT', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       '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', '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__' ),
-       'pagesincategory'         => array( '1', 'PÁGINASENCATEGORÍA', 'PÁGINASENCAT', 'PAGSENCAT', 'PAGINASENCATEGORIA', 'PAGINASENCAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'TAMAÑOPÁGINA', 'TAMAÑODEPÁGINA', 'TAMAÑOPAGINA', 'TAMAÑODEPAGINA', 'PAGESIZE' ),
-       'index'                   => array( '1', '__INDEXAR__', '__INDEX__' ),
-       'noindex'                 => array( '1', '__NOINDEXAR__', '__NOINDEX__' ),
-       'numberingroup'           => array( '1', 'NÚMEROENGRUPO', 'NUMEROENGRUPO', 'NUMENGRUPO', 'NÚMENGRUPO', 'NUMBERINGROUP', 'NUMINGROUP' ),
-       'staticredirect'          => array( '1', '__REDIRECCIONESTATICA__', '__REDIRECCIÓNESTÁTICA__', '__STATICREDIRECT__' ),
-       'protectionlevel'         => array( '1', 'NIVELDEPROTECCIÓN', 'PROTECTIONLEVEL' ),
-       'formatdate'              => array( '0', 'formatodefecha', 'formatearfecha', 'formatdate', 'dateformat' ),
+       'redirect'                  => array( '0', '#REDIRECCIÓN', '#REDIRECCION', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__SIN_TDC__', '__NOTDC__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__SIN_GALERÍA__', '__NOGALERÍA__', '__NOGALERIA__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__FORZAR_TDC__', '__FORZARTDC__', '__FORZARTOC__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__TDC__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__NO_EDITAR_SECCIÓN__', '__NOEDITARSECCIÓN__', '__NOEDITARSECCION__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '__SIN_TÍTULO__', '__SINTÍTULO__', '__NOTÍTULO__', '__NOTITULO__', '__NOHEADER__' ),
+       'currentmonth'              => array( '1', 'MESACTUAL', 'MESACTUAL2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'MESACTUAL1', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'MESACTUALCOMPLETO', 'NOMBREMESACTUAL', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'MESACTUALGENITIVO', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'MESACTUALABREVIADO', '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' ),
+       'currentdayname'            => array( '1', 'NOMBREDÍAACTUAL', 'NOMBREDIAACTUAL', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'AÑOACTUAL', 'AÑO_ACTUAL', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'HORA_MINUTOS_ACTUAL', 'HORAMINUTOSACTUAL', 'TIEMPOACTUAL', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'HORAACTUAL', 'HORA_ACTUAL', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'MESLOCAL', 'MESLOCAL2', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'MESLOCAL1', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'MESLOCALCOMPLETO', 'NOMBREMESLOCAL', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'MESLOCALGENITIVO', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'MESLOCALABREVIADO', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'DÍALOCAL', 'DIALOCAL', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'DIALOCAL2', 'DÍALOCAL2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'NOMBREDIALOCAL', 'NOMBREDÍALOCAL', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'AÑOLOCAL', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'HORAMINUTOSLOCAL', 'TIEMPOLOCAL', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'HORALOCAL', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'NÚMERODEPÁGINAS', 'NUMERODEPAGINAS', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'NÚMERODEARTÍCULOS', 'NUMERODEARTICULOS', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'NÚMERODEARCHIVOS', 'NUMERODEARCHIVOS', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'NÚMERODEUSUARIOS', 'NUMERODEUSUARIOS', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'NÚMERODEUSUARIOSACTIVOS', 'NUMERODEUSUARIOSACTIVOS', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'NÚMERODEEDICIONES', 'NUMERODEEDICIONES', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'NÚMERODEVISTAS', 'NUMERODEVISTAS', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'NOMBREDEPAGINA', 'NOMBREDEPÁGINA', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'NOMBREDEPAGINAC', 'NOMBREDEPÁGINAC', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'ESPACIODENOMBRE', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'ESPACIODENOMBREC', 'NAMESPACEE' ),
+       'namespacenumber'           => array( '1', 'NÚMERODELESPACIO', 'NAMESPACENUMBER' ),
+       'talkspace'                 => array( '1', 'ESPACIODEDISCUSION', 'ESPACIODEDISCUSIÓN', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'ESPACIODEDISCUSIONC', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'ESPACIODEASUNTO', 'ESPACIODETEMA', 'ESPACIODEARTÍCULO', 'ESPACIODEARTICULO', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'ESPACIODETEMAC', 'ESPACIODEASUNTOC', 'ESPACIODEARTICULOC', 'ESPACIODEARTÍCULOC', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'NOMBRECOMPLETODEPÁGINA', 'NOMBRECOMPLETODEPAGINA', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'NOMBRECOMPLETODEPAGINAC', 'NOMBRECOMPLETODEPÁGINAC', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'NOMBREDESUBPAGINA', 'NOMBREDESUBPÁGINA', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'NOMBREDESUBPAGINAC', 'NOMBREDESUBPÁGINAC', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'NOMBREDEPAGINABASE', 'NOMBREDEPÁGINABASE', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'NOMBREDEPAGINABASEC', 'NOMBREDEPÁGINABASEC', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'NOMBREDEPÁGINADEDISCUSIÓN', 'NOMBREDEPAGINADEDISCUSION', 'NOMBREDEPAGINADISCUSION', 'NOMBREDEPÁGINADISCUSIÓN', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'NOMBREDEPÁGINADEDISCUSIÓNC', 'NOMBREDEPAGINADEDISCUSIONC', 'NOMBREDEPAGINADISCUSIONC', 'NOMBREDEPÁGINADISCUSIÓNC', 'TALKPAGENAMEE' ),
+       '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:' ),
+       'subst'                     => array( '0', 'SUST:', 'FIJAR:', 'SUBST:' ),
+       '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_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', 'enlace=$1', 'link=$1' ),
+       'sitename'                  => array( '1', 'NOMBREDELSITIO', 'SITENAME' ),
+       'ns'                        => array( '0', 'EN:', 'NS:' ),
+       'localurl'                  => array( '0', 'URLLOCAL', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'URLLOCALC:', 'LOCALURLE:' ),
+       'server'                    => array( '0', 'SERVIDOR', 'SERVER' ),
+       'servername'                => array( '0', 'NOMBRESERVIDOR', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'RUTASCRIPT', 'RUTADESCRIPT', 'SCRIPTPATH' ),
+       'stylepath'                 => array( '0', 'RUTAESTILO', 'RUTADEESTILO', 'STYLEPATH' ),
+       'grammar'                   => array( '0', 'GRAMATICA:', 'GRAMÁTICA:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'GÉNERO:', 'GENERO:', 'GENDER:' ),
+       'notitleconvert'            => array( '0', '__NOCONVERTIRTITULO__', '__NOCONVERTIRTÍTULO__', '__NOCT___', '__NOTITLECONVERT__', '__NOTC__' ),
+       'nocontentconvert'          => array( '0', '__NOCONVERTIRCONTENIDO__', '__NOCC___', '__NOCONTENTCONVERT__', '__NOCC__' ),
+       'currentweek'               => array( '1', 'SEMANAACTUAL', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'DDSACTUAL', 'DIADESEMANAACTUAL', 'DÍADESEMANAACTUAL', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'SEMANALOCAL', 'LOCALWEEK' ),
+       'localdow'                  => array( '1', 'DDSLOCAL', 'DIADESEMANALOCAL', 'DÍADESEMANALOCAL', 'LOCALDOW' ),
+       'revisionid'                => array( '1', 'IDDEREVISION', 'IDREVISION', 'IDDEREVISIÓN', 'IDREVISIÓN', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'DIADEREVISION', 'DIAREVISION', 'DÍADEREVISIÓN', 'DÍAREVISIÓN', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'DIADEREVISION2', 'DIAREVISION2', 'DÍADEREVISIÓN2', 'DÍAREVISIÓN2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'MESDEREVISION', 'MESDEREVISIÓN', 'MESREVISION', 'MESREVISIÓN', 'REVISIONMONTH' ),
+       'revisionyear'              => array( '1', 'AÑODEREVISION', 'AÑODEREVISIÓN', 'AÑOREVISION', 'AÑOREVISIÓN', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'MARCADEHORADEREVISION', 'MARCADEHORADEREVISIÓN', 'REVISIONTIMESTAMP' ),
+       'revisionuser'              => array( '1', 'USUARIODEREVISION', 'USUARIODEREVISIÓN', 'REVISIONUSER' ),
+       'fullurl'                   => array( '0', 'URLCOMPLETA:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'URLCOMPLETAC:', 'FULLURLE:' ),
+       'canonicalurl'              => array( '0', 'URLCANONICA:', 'CANONICALURL:' ),
+       'canonicalurle'             => array( '0', 'URLCANONICAC:', 'CANONICALURLE:' ),
+       'lcfirst'                   => array( '0', 'PRIMEROMINUS;', 'PRIMEROMINÚS:', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', 'PRIMEROMAYUS;', 'PRIMEROMAYÚS:', 'UCFIRST:' ),
+       'lc'                        => array( '0', 'MINUS:', 'MINÚS:', 'LC:' ),
+       'uc'                        => array( '0', 'MAYUS:', 'MAYÚS:', 'UC:' ),
+       'raw'                       => array( '0', 'SINFORMATO', 'SINPUNTOS', 'RAW:' ),
+       'displaytitle'              => array( '1', 'MOSTRARTÍTULO', 'MOSTRARTITULO', 'DISPLAYTITLE' ),
+       'rawsuffix'                 => array( '1', 'SF', 'R' ),
+       'newsectionlink'            => array( '1', '__VINCULARANUEVASECCION__', 'VÍNCULARANUEVASECCIÓN__', '__NEWSECTIONLINK__' ),
+       'nonewsectionlink'          => array( '1', '__NOVINCULARANUEVASECCION__', 'NOVÍNCULARANUEVASECCIÓN__', '__NONEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'VERSIONACTUAL', 'VERSIÓNACTUAL', 'CURRENTVERSION' ),
+       'urlencode'                 => array( '0', 'CODIFICARURL:', 'URLENCODE:' ),
+       'currenttimestamp'          => array( '1', 'MARCADEHORAACTUAL', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', 'MARCADEHORALOCAL', 'LOCALTIMESTAMP' ),
+       'language'                  => array( '0', '#IDIOMA:', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'IDIOMADELCONTENIDO', 'IDIOMADELCONT', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', 'PÁGINASENESPACIO', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       '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', 'ORDENAR:', 'CLAVEDEORDENPREDETERMINADO:', 'ORDENDECATEGORIAPREDETERMINADO:', 'ORDENDECATEGORÍAPREDETERMINADO:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'filepath'                  => array( '0', 'RUTAARCHIVO:', 'RUTARCHIVO:', 'RUTADEARCHIVO:', 'FILEPATH:' ),
+       'tag'                       => array( '0', 'etiqueta', 'tag' ),
+       'hiddencat'                 => array( '1', '__CATEGORÍAOCULTA__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'PÁGINASENCATEGORÍA', 'PÁGINASENCAT', 'PAGSENCAT', 'PAGINASENCATEGORIA', 'PAGINASENCAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'TAMAÑOPÁGINA', 'TAMAÑODEPÁGINA', 'TAMAÑOPAGINA', 'TAMAÑODEPAGINA', 'PAGESIZE' ),
+       'index'                     => array( '1', '__INDEXAR__', '__INDEX__' ),
+       'noindex'                   => array( '1', '__NOINDEXAR__', '__NOINDEX__' ),
+       'numberingroup'             => array( '1', 'NÚMEROENGRUPO', 'NUMEROENGRUPO', 'NUMENGRUPO', 'NÚMENGRUPO', 'NUMBERINGROUP', 'NUMINGROUP' ),
+       'staticredirect'            => array( '1', '__REDIRECCIONESTATICA__', '__REDIRECCIÓNESTÁTICA__', '__STATICREDIRECT__' ),
+       'protectionlevel'           => array( '1', 'NIVELDEPROTECCIÓN', 'PROTECTIONLEVEL' ),
+       'formatdate'                => array( '0', 'formatodefecha', 'formatearfecha', 'formatdate', 'dateformat' ),
 );
 
 $datePreferences = false;
@@ -382,7 +391,7 @@ $messages = array(
 'tog-externaldiff' => 'Utilizar diff externo por defecto (sólo para expertos, pues necesitas ajustes especiales en tu ordenador; [//www.mediawiki.org/wiki/Manual:External_editors más información])',
 'tog-showjumplinks' => 'Habilitar enlaces de accesibilidad «saltar a»',
 'tog-uselivepreview' => 'Usar live preview (JavaScript) (Experimental)',
-'tog-forceeditsummary' => 'Alertar al grabar sin resumen de edición.',
+'tog-forceeditsummary' => 'Avisar cuando grabe la página sin introducir un resumen de edición',
 'tog-watchlisthideown' => 'Ocultar mis ediciones en la lista de seguimiento',
 'tog-watchlisthidebots' => 'Ocultar ediciones de bots en la lista de seguimiento',
 'tog-watchlisthideminor' => 'Ocultar ediciones menores en la lista de seguimiento',
@@ -563,7 +572,7 @@ $messages = array(
 'categorypage' => 'Ver página de categoría',
 'viewtalkpage' => 'Ver discusión',
 'otherlanguages' => 'Otros idiomas',
-'redirectedfrom' => '(Redirigido desde $1)',
+'redirectedfrom' => '(Redirigido desde «$1»)',
 'redirectpagesub' => 'Página redirigida',
 'lastmodifiedat' => 'Esta página fue modificada por última vez el $1, a las $2.',
 'viewcount' => 'Esta página ha sido visitada {{PLURAL:$1|una vez|$1 veces}}.',
@@ -601,7 +610,7 @@ $1',
 'privacypage' => 'Project:Política de protección de datos',
 
 'badaccess' => 'Error de permisos',
-'badaccess-group0' => 'No tienes autorización para ejecutar la acción que ha solicitado.',
+'badaccess-group0' => 'No estás autorizado a ejecutar la acción solicitada.',
 'badaccess-groups' => 'La acción que has solicitado está restringida a los usuarios {{PLURAL:$2|del grupo|de uno de estos $2 grupos}}: $1.',
 
 'versionrequired' => 'La versión $1 de MediaWiki es necesaria para utilizar esta página',
@@ -987,10 +996,10 @@ La razón dada es esta:
 
 Puedes contactar con $1 o con otro de los [[{{MediaWiki:Grouppage-sysop}}|administradores]] para discutir el bloqueo.
 
-Ten en cuenta de que no podrás utilizar la herramienta de «enviar correo electrónico a este usuario»  a menos que tengas una dirección de correo electrónico válida registrada en tus [[Special:Preferences|preferencias de usuario]] y que el bloqueo no haya inhabilitado esta función.
+Ten en cuenta que no podrás utilizar la herramienta de «enviar correo electrónico a este usuario» a menos que tengas una dirección de correo electrónico válida registrada en tus [[Special:Preferences|preferencias de usuario]] y que el bloqueo no haya inhabilitado esta función.
 
 Tu actual dirección IP es $3, y el identificador del bloqueo es #$5.
-Por favor incluye todos los datos aquí mostrados en cualquier consulta que hagas.",
+Por favor, incluye todos los datos mostrados aquí en cualquier consulta que hagas.",
 'blockednoreason' => 'no se ha especificado el motivo',
 'whitelistedittext' => 'Tienes que $1 para editar artículos.',
 'confirmedittext' => 'Debes confirmar tu dirección electrónica antes de editar páginas. Por favor, establece y valida una dirección electrónica a través de tus [[Special:Preferences|preferencias de usuario]].',
@@ -1016,8 +1025,10 @@ o [{{fullurl:{{FULLPAGENAME}}|action=edit}} editar esta página]</span>.',
 'noarticletext-nopermission' => 'Actualmente no hay texto en esta página.
 Puedes [[Special:Search/{{PAGENAME}}|buscar este título de página]] en otras páginas,
 o <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} buscar en los registros relacionados]</span>.',
-'missing-revision' => 'La revisión # $1  de la página denominada "{{PAGENAME}}" no existe.
-!¡ N!Esto es generalmente causado al seguir un enlace de historia obsoleto a una página que se ha borrado.!¡ N!Los detalles pueden encontrarse en el [{{fullurl: {{#Special:Log}} / delete|page = {{FULLPAGENAMEE}}}} registro de borrado].',
+'missing-revision' => 'La revisión #$1 de la página «{{PAGENAME}}» no existe.
+
+Esto suele deberse a seguir un enlace obsoleto hacia el historial de una página que ya ha sido borrada.
+Los detalles pueden encontrarse en el [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro de borrado].',
 'userpage-userdoesnotexist' => 'La cuenta de usuario «<nowiki>$1</nowiki>» no está registrada. Por favor comprueba si quieres crear o editar esta página.',
 'userpage-userdoesnotexist-view' => 'La cuenta de usuario «$1» no está registrada.',
 'blocked-notice-logextract' => 'Este usuario está actualmente bloqueado.
@@ -1331,8 +1342,10 @@ Nota que usar los enlaces de navegación borrará las selecciones de esta column
 'editundo' => 'deshacer',
 '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}})',
-'difference-missing-revision' => '{{PLURAL:$2|Un revisión| $2  revisiones}} de esta diferencia ( $1 )  no {{PLURAL:$2| ha siado encontrada|han sido encontradas}}.
-!¡ N!Esto es generalmente causado por seguir un enlace de diffs obsoletas a una página que ha sido borrada.!¡ N!Los detalles pueden encontrarse en el [{{fullurl:{{#Special:log}} / delete|page = {{FULLPAGENAMEE}}}} registro de borrado].',
+'difference-missing-revision' => 'No {{PLURAL:$2|se ha encontrado|se han encontrado}} {{PLURAL:$2|una revisión|$2 revisiones}} de esta diferencia ($1).
+
+Esto suele deberse a seguir un enlace obsoleto hacia una página que ya ha sido borrada.
+Los detalles pueden encontrarse en el [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro de borrado].',
 
 # Search results
 'searchresults' => 'Resultados de la búsqueda',
@@ -2030,6 +2043,7 @@ Tal vez desee editar la descripción de su [$2 página de descripción del archi
 'shared-repo-from' => 'de $1',
 'shared-repo' => 'un repositorio compartido',
 'filepage.css' => '/* Los estilos CSS colocados aquí se incluirán en las páginas de descripción de archivos, incluso en los wikis externos que incluyan estas páginas */',
+'upload-disallowed-here' => 'Lamentablemente no puedes sobrescribir esta imagen.',
 
 # File reversion
 'filerevert' => 'Revertir $1',
@@ -2821,7 +2835,7 @@ por favor, asegúrate de entender las consecuencias del procedimiento antes de s
 
 En estos casos, deberás trasladar manualmente el contenido de la página de discusión.",
 'movearticle' => 'Renombrar página',
-'moveuserpage-warning' => "'''Aviso:''' estás a punto de mover una página de usuario. Ten en cuenta de que solo la página será trasladada pero el usuario '''no''' será renombrado.",
+'moveuserpage-warning' => "'''Aviso:''' estás a punto de mover una página de usuario. Ten en cuenta que solo será trasladada la página; el usuario '''no''' será renombrado.",
 'movenologin' => 'No has iniciado sesión',
 'movenologintext' => 'Es necesario ser usuario registrado y [[Special:UserLogin|haber iniciado sesión]] para renombrar una página.',
 'movenotallowed' => 'No tienes permiso para mover páginas.',
@@ -3145,6 +3159,8 @@ Esto podría estar causado por un enlace a un sitio externo incluido en la lista
 'pageinfo-length' => 'Longitud de la página (en bytes)',
 'pageinfo-article-id' => 'Identificador ID de la página',
 'pageinfo-robot-policy' => 'Estado del motor de búsqueda',
+'pageinfo-robot-index' => 'Indexable',
+'pageinfo-robot-noindex' => 'No indexable',
 'pageinfo-views' => 'Número de vistas',
 'pageinfo-watchers' => 'Número de usuarios que vigilan la página',
 'pageinfo-redirects-name' => 'Redirecciones a esta página',
@@ -3159,7 +3175,7 @@ Esto podría estar causado por un enlace a un sitio externo incluido en la lista
 'pageinfo-authors' => 'Número total de autores distintos',
 'pageinfo-recent-edits' => 'Número de ediciones recientes (en los últimos $1)',
 'pageinfo-recent-authors' => 'Número de autores distintos recientes',
-'pageinfo-restriction' => 'Protección de la página (<code>$1</code>)',
+'pageinfo-restriction' => 'Protección de la página (<code>{{lcfirst:$1}}</code>)',
 'pageinfo-magic-words' => '{{PLURAL:$1|Palabra mágica|Palabras mágicas}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Categoría oculta|Categorías ocultas}} ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|plantilla incluida|plantillas incluidas}} ($1)',
@@ -3218,6 +3234,7 @@ Ejecutarlo podría comprometer la seguridad de su equipo.",
 'file-info-size-pages' => '$1 × $2 píxeles, tamaño de archivo: $3, tipo MIME: $4, $5 {{PLURAL:$5|página|páginas}}',
 '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-animated' => 'Archivo SVG animado, nominalmente de $1 × $2 píxeles, tamaño del archivo: $3',
 'show-big-image' => 'Resolución original',
 'show-big-image-preview' => 'Tamaño de esta previsualización: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Otra resolución|Otras resoluciones}}: $1.',
@@ -3227,6 +3244,8 @@ Ejecutarlo podría comprometer la seguridad de su equipo.",
 'file-info-png-looped' => 'bucleado',
 'file-info-png-repeat' => 'reproducido $1 {{PLURAL:$1|vez|veces}}',
 'file-info-png-frames' => '$1 {{PLURAL:$1|marco|marcos}}',
+'file-no-thumb-animation' => "'''Nota: debido a limitaciones técnicas, las miniaturas de este archivo no están animadas.'''",
+'file-no-thumb-animation-gif' => "'''Nota: Debido a limitaciones técnicas, las miniaturas de imágenes GIF de alta resolución como esta no están animadas.'''",
 
 # Special:NewFiles
 'newimages' => 'Galería de imágenes nuevas',
index f32d056..276121a 100644 (file)
@@ -105,6 +105,7 @@ $specialPageAliases = array(
        'Newimages'                 => array( 'Uued_failid' ),
        'Newpages'                  => array( 'Uued_leheküljed' ),
        'PasswordReset'             => array( 'Parooli_lähtestamine' ),
+       'PermanentLink'             => array( 'Püsilink' ),
        'Popularpages'              => array( 'Loetumad_leheküljed' ),
        'Preferences'               => array( 'Eelistused' ),
        'Prefixindex'               => array( 'Kõik_pealkirjad_eesliitega' ),
@@ -158,99 +159,99 @@ $bookstoreList = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#suuna', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__SISUKORRATA__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__GALERIITA__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__SISUKORDEES__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__SISUKORD__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__ALAOSALINGITA__', '__NOEDITSECTION__' ),
-       'currentmonth'            => array( '1', 'HETKEKUU', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', 'HETKEKUU1', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', 'HETKEKUUNIMETUS', 'CURRENTMONTHNAME' ),
-       'currentday'              => array( '1', 'HETKEKUUPÄEV', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'HETKEKUUPÄEV2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'HETKENÄDALAPÄEV', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'HETKEAASTA', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'HETKEAEG', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'HETKETUND', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'KOHALIKKUU', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', 'KOHALIKKUU1', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'KOHALIKKUUNIMETUS', 'LOCALMONTHNAME' ),
-       'localday'                => array( '1', 'KOHALIKKUUPÄEV', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'KOHALIKKUUPÄEV2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'KOHALIKNÄDALAPÄEV', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'KOHALIKAASTA', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'KOHALIKAEG', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'KOHALIKTUND', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'LEHEMÄÄR', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'ARTIKLIMÄÄR', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'FAILIMÄÄR', 'NUMBEROFFILES' ),
-       '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' ),
-       'namespacee'              => array( '1', 'NIMERUUM1', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'ARUTELUNIMERUUM', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'ARUTELUNIMERUUM1', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'SISUNIMERUUM', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'SISUNIMERUUM1', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'KOGULEHEKÜLJENIMI', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'KOGULEHEKÜLJENIMI1', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'ALAMLEHEKÜLJENIMI', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'ALAMLEHEKÜLJENIMI1', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'NIMERUUMITANIMI', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'NIMERUUMITANIMI1', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'ARUTELUNIMI', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'ARUTELUNIMI1', 'TALKPAGENAMEE' ),
-       'subst'                   => array( '0', 'ASENDA:', 'SUBST:' ),
-       'img_thumbnail'           => array( '1', 'pisi', 'pisipilt', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'pisi=$1', 'pisipilt=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'paremal', 'right' ),
-       'img_left'                => array( '1', 'vasakul', 'left' ),
-       'img_none'                => array( '1', 'tühi', 'none' ),
-       '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:' ),
-       'nse'                     => array( '0', 'NR1:', 'NSE:' ),
-       'localurl'                => array( '0', 'KOHALIKURL', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'KOHALIKURL1', 'LOCALURLE:' ),
-       'servername'              => array( '0', 'SERVERINIMI', 'SERVERNAME' ),
-       'gender'                  => array( '0', 'SUGU:', 'GENDER:' ),
-       'currentweek'             => array( '1', 'HETKENÄDAL', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'HETKENÄDALAPÄEV1', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'KOHALIKNÄDAL', 'LOCALWEEK' ),
-       'localdow'                => array( '1', 'KOHALIKNÄDALAPÄEV1', 'LOCALDOW' ),
-       'fullurl'                 => array( '0', 'KOGUURL:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'KOGUURL1:', 'FULLURLE:' ),
-       'lcfirst'                 => array( '0', 'ESIVT:', 'LCFIRST:' ),
-       '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' ),
-       'localtimestamp'          => array( '1', 'KOHALIKAJATEMPEL', 'LOCALTIMESTAMP' ),
-       'language'                => array( '0', '#KEEL:', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', 'VAIKEKEEL', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'        => array( '1', 'LEHEKÜLGINIMERUUMIS', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'          => array( '1', 'ÜLEMAMÄÄR', 'NUMBEROFADMINS' ),
-       'formatnum'               => array( '0', 'ARVUVORMINDUS', 'FORMATNUM' ),
-       'defaultsort'             => array( '1', 'JÄRJESTA:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'hiddencat'               => array( '1', '__PEIDETUDKAT__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'LEHEKÜLGIKATEGOORIAS', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'index'                   => array( '1', 'INDEKSIGA', '__INDEX__' ),
-       'noindex'                 => array( '1', 'INDEKSITA', '__NOINDEX__' ),
-       'numberingroup'           => array( '1', 'KASUTAJAIDRÜHMAS', 'NUMBERINGROUP', 'NUMINGROUP' ),
-       'protectionlevel'         => array( '1', 'KAITSETASE', 'PROTECTIONLEVEL' ),
-       'formatdate'              => array( '0', 'kuupäevavormindus', 'formatdate', 'dateformat' ),
+       'redirect'                  => array( '0', '#suuna', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__SISUKORRATA__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__GALERIITA__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__SISUKORDEES__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__SISUKORD__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__ALAOSALINGITA__', '__NOEDITSECTION__' ),
+       'currentmonth'              => array( '1', 'HETKEKUU', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'HETKEKUU1', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'HETKEKUUNIMETUS', 'CURRENTMONTHNAME' ),
+       'currentday'                => array( '1', 'HETKEKUUPÄEV', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'HETKEKUUPÄEV2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'HETKENÄDALAPÄEV', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'HETKEAASTA', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'HETKEAEG', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'HETKETUND', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'KOHALIKKUU', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'KOHALIKKUU1', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'KOHALIKKUUNIMETUS', 'LOCALMONTHNAME' ),
+       'localday'                  => array( '1', 'KOHALIKKUUPÄEV', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'KOHALIKKUUPÄEV2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'KOHALIKNÄDALAPÄEV', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'KOHALIKAASTA', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'KOHALIKAEG', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'KOHALIKTUND', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'LEHEMÄÄR', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'ARTIKLIMÄÄR', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'FAILIMÄÄR', 'NUMBEROFFILES' ),
+       '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' ),
+       'namespacee'                => array( '1', 'NIMERUUM1', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'ARUTELUNIMERUUM', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'ARUTELUNIMERUUM1', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'SISUNIMERUUM', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'SISUNIMERUUM1', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'KOGULEHEKÜLJENIMI', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'KOGULEHEKÜLJENIMI1', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'ALAMLEHEKÜLJENIMI', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'ALAMLEHEKÜLJENIMI1', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'NIMERUUMITANIMI', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'NIMERUUMITANIMI1', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'ARUTELUNIMI', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'ARUTELUNIMI1', 'TALKPAGENAMEE' ),
+       'subst'                     => array( '0', 'ASENDA:', 'SUBST:' ),
+       'img_thumbnail'             => array( '1', 'pisi', 'pisipilt', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'pisi=$1', 'pisipilt=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'paremal', 'right' ),
+       'img_left'                  => array( '1', 'vasakul', 'left' ),
+       'img_none'                  => array( '1', 'tühi', 'none' ),
+       '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:' ),
+       'nse'                       => array( '0', 'NR1:', 'NSE:' ),
+       'localurl'                  => array( '0', 'KOHALIKURL', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'KOHALIKURL1', 'LOCALURLE:' ),
+       'servername'                => array( '0', 'SERVERINIMI', 'SERVERNAME' ),
+       'gender'                    => array( '0', 'SUGU:', 'GENDER:' ),
+       'currentweek'               => array( '1', 'HETKENÄDAL', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'HETKENÄDALAPÄEV1', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'KOHALIKNÄDAL', 'LOCALWEEK' ),
+       'localdow'                  => array( '1', 'KOHALIKNÄDALAPÄEV1', 'LOCALDOW' ),
+       'fullurl'                   => array( '0', 'KOGUURL:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'KOGUURL1:', 'FULLURLE:' ),
+       'lcfirst'                   => array( '0', 'ESIVT:', 'LCFIRST:' ),
+       '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' ),
+       'localtimestamp'            => array( '1', 'KOHALIKAJATEMPEL', 'LOCALTIMESTAMP' ),
+       'language'                  => array( '0', '#KEEL:', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'VAIKEKEEL', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', 'LEHEKÜLGINIMERUUMIS', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', 'ÜLEMAMÄÄR', 'NUMBEROFADMINS' ),
+       'formatnum'                 => array( '0', 'ARVUVORMINDUS', 'FORMATNUM' ),
+       'defaultsort'               => array( '1', 'JÄRJESTA:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'hiddencat'                 => array( '1', '__PEIDETUDKAT__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'LEHEKÜLGIKATEGOORIAS', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'index'                     => array( '1', 'INDEKSIGA', '__INDEX__' ),
+       'noindex'                   => array( '1', 'INDEKSITA', '__NOINDEX__' ),
+       'numberingroup'             => array( '1', 'KASUTAJAIDRÜHMAS', 'NUMBERINGROUP', 'NUMINGROUP' ),
+       'protectionlevel'           => array( '1', 'KAITSETASE', 'PROTECTIONLEVEL' ),
+       'formatdate'                => array( '0', 'kuupäevavormindus', 'formatdate', 'dateformat' ),
 );
 
 $separatorTransformTable = array( ',' => "\xc2\xa0", '.' => ',' );
@@ -289,16 +290,16 @@ $dateFormats = array(
 
 $messages = array(
 # User preference toggles
-'tog-underline' => 'Lingid alla kriipsutada',
+'tog-underline' => 'Linkide allakriipsutus:',
 'tog-justify' => 'Lõikude rööpjoondus',
 'tog-hideminor' => 'Peida pisiparandused viimastes muudatustes',
-'tog-hidepatrolled' => 'Peida viimaste muudatuste loetelus jälgimisloendis esitatavad muudatused',
+'tog-hidepatrolled' => 'Peida kontrollitud redaktsioonid viimastes muudatustes',
 'tog-newpageshidepatrolled' => 'Peida uute lehtede loendis kontrollitud leheküljed',
 'tog-extendwatchlist' => 'Laienda jälgimisloendit, et näha kõiki muudatusi, mitte vaid kõige värskemaid',
 'tog-usenewrc' => 'Rühmita viimased muudatused ja muudatused jälgimisloendis lehekülje järgi (vaja JavaScripti)',
 'tog-numberheadings' => 'Pealkirjade automaatnummerdus',
-'tog-showtoolbar' => 'Redigeerimise tööriistariba näitamine',
-'tog-editondblclick' => 'Artiklite redigeerimine topeltklõpsu peale (JavaScript)',
+'tog-showtoolbar' => 'Näita redigeerimise tööriistariba (vaja JavaScripti)',
+'tog-editondblclick' => 'Redigeeri lehekülgi topeltklõpsu peale (vaja JavaScripti)',
 'tog-editsection' => 'Näita alaosade redigeerimise linke',
 'tog-editsectiononrightclick' => 'Alusta alaosa redigeerimist paremklõpsuga alaosa pealkirjal (vaja JavaScripti)',
 'tog-showtoc' => 'Näita sisukorda (lehtedel, millel on rohkem kui 3 pealkirja)',
@@ -493,14 +494,14 @@ $messages = array(
 'talk' => 'Arutelu',
 'views' => 'vaatamisi',
 'toolbox' => 'Tööriistad',
-'userpage' => 'Kasutajalehekülg',
+'userpage' => 'Vaata kasutajalehekülge',
 'projectpage' => 'Vaata projektilehekülge',
 'imagepage' => 'Vaata faililehekülge',
 'mediawikipage' => 'Vaata sõnumi lehekülge',
-'templatepage' => 'Mallilehekülg',
+'templatepage' => 'Vaata malli lehekülge',
 'viewhelppage' => 'Vaata abilehekülge',
-'categorypage' => 'Kategoorialehekülg',
-'viewtalkpage' => 'Arutelulehekülg',
+'categorypage' => 'Vaata kategooria lehekülge',
+'viewtalkpage' => 'Vaata arutelulehekülge',
 'otherlanguages' => 'Teistes keeltes',
 'redirectedfrom' => '(Ümber suunatud leheküljelt $1)',
 'redirectpagesub' => 'Ümbersuunamisleht',
@@ -610,9 +611,9 @@ Käibel olevad erileheküljed on loetletud leheküljel [[Special:SpecialPages|{{
 'dberrortext' => 'Andmebaasipäringus oli süntaksiviga.
 Selle võis tingida tarkvaraviga.
 Viimane andmebaasipäring oli:
-<blockquote><tt>$1</tt></blockquote>
-ja see kutsuti funktsioonist "<tt>$2</tt>".
-Andmebaas tagastas veateate "<tt>$3: $4</tt>".',
+<blockquote><code>$1</code></blockquote>
+ja see ilmnes funktsiooniga "<code>$2</code>".
+Andmebaas tagastas veateate "<samp>$3: $4</samp>".',
 'dberrortextcl' => 'Andmebaasipäringus oli süntaksiviga.
 Viimane andmebaasipäring oli:
 "$1"
@@ -954,7 +955,6 @@ Allpool on toodud viimane blokeerimislogi sissekanne:',
 * '''Firefox / Safari:''' Hoia all ''Shift''-klahvi ja klõpsa ''Laadi uuesti'' või vajuta kas ''Ctrl-F5'' või ''Ctrl-R'' (Macis ''⌘-R'').
 * '''Google Chrome:''' Vajuta ''Ctrl-Shift-R'' (Macis ''⌘-Shift-R'').
 * '''Internet Explorer:''' Hoia all ''Ctrl''-klahvi ja klõpsa ''Värskenda'' või vajuta ''Ctrl-F5''.
-* '''Konqueror:''' Klõpsa ''Reload'' või vajuta ''F5''.
 * '''Opera:''' Tühjenda puhver asukohas ''Seaded → Eelistused''.",
 'usercssyoucanpreview' => "'''Vihje:''' Enne salvestamist kasuta oma uue CSSi proovimiseks nuppu \"{{int:showpreview}}\".",
 'userjsyoucanpreview' => "'''Vihje:''' Enne salvestamist kasuta oma uue JavaScripti proovimiseks nuppu \"{{int:showpreview}}\".",
@@ -1930,6 +1930,7 @@ Võib-olla tahad redigeerida selle faili [$2 sealset kirjelduslehekülge].',
 'uploadnewversion-linktext' => 'Laadi üles selle faili uus versioon',
 'shared-repo-from' => 'varamust $1',
 'shared-repo' => 'jagatud varamu',
+'upload-disallowed-here' => 'Paraku ei saa sa seda pilti üle kirjutada.',
 
 # File reversion
 'filerevert' => 'Taasta $1',
@@ -3031,6 +3032,8 @@ See on ilmselt põhjustatud linkimisest mustas nimekirjas olevasse välisvõrguk
 'pageinfo-length' => 'Lehekülje pikkus (baitides)',
 'pageinfo-article-id' => 'Lehekülje identifikaator',
 'pageinfo-robot-policy' => 'Otsimootori olek',
+'pageinfo-robot-index' => 'Indekseeritav',
+'pageinfo-robot-noindex' => 'Indekseerimatu',
 'pageinfo-views' => 'Vaatamiste arv',
 'pageinfo-watchers' => 'Lehekülje jälgijate arv',
 'pageinfo-redirects-name' => 'Ümbersuunamisi sellele leheküljele',
@@ -3044,9 +3047,9 @@ See on ilmselt põhjustatud linkimisest mustas nimekirjas olevasse välisvõrguk
 'pageinfo-authors' => 'Erinevate autorite koguarv',
 'pageinfo-recent-edits' => 'Viimaste redigeerimiste arv (viimase $1 jooksul)',
 'pageinfo-recent-authors' => 'Erinevate viimaste toimetajate arv',
-'pageinfo-restriction' => 'Lehekülje kaitse ($1)',
-'pageinfo-magic-words' => 'Võlusõnad ($1)',
-'pageinfo-hidden-categories' => 'Peidetud kategooriad ($1)',
+'pageinfo-restriction' => 'Lehekülje kaitse (<code>{{lcfirst:$1}}</code>)',
+'pageinfo-magic-words' => '{{PLURAL:$1|Võlusõna|Võlusõnad}} ($1)',
+'pageinfo-hidden-categories' => 'Peidetud {{PLURAL:$1|kategooria|kategooriad}} ($1)',
 'pageinfo-templates' => 'Kasutatud {{PLURAL:$1|mall|mallid}} ($1)',
 
 # Skin names
@@ -3101,7 +3104,8 @@ Selle avamine võib su arvutit kahjustada.",
 'file-info-size' => '$1 × $2 pikslit, faili suurus: $3, MIME tüüp: $4',
 'file-info-size-pages' => '$1 × $2 pikslit, faili suurus: $3 , MIME tüüp: $4, $5 {{PLURAL:$5|lehekülg|lehekülge}}',
 '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',
+'svg-long-desc-animated' => 'Animeeritud SVG-fail,  algsuurus $1 × $2 pikslit, faili suurus: $3',
 'show-big-image' => 'Originaalsuurus',
 'show-big-image-preview' => 'Selle eelvaate suurus: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Teine eraldusvõime|Teised eraldusvõimed}}: $1.',
@@ -3111,6 +3115,8 @@ Selle avamine võib su arvutit kahjustada.",
 '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}}',
+'file-no-thumb-animation' => "'''Märkus: Tehniliste piirangute tõttu on selle faili pisipildid animeerimata.'''",
+'file-no-thumb-animation-gif' => "'''Märkus: Tehniliste piirangute tõttu on nii suure eraldusega GIF-piltide pisipildid animeerimata.'''",
 
 # Special:NewFiles
 'newimages' => 'Uute meediafailide galerii',
index 84836f3..fde8589 100644 (file)
@@ -104,22 +104,22 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#BIRZUZENDU', '#REDIRECT' ),
-       'currentmonth'            => array( '1', 'ORAINGOHILABETE', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonthname'        => array( '1', 'ORAINGOHILABETEIZEN', 'CURRENTMONTHNAME' ),
-       'currentday'              => array( '1', 'ORAINGOEGUN', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'ORAINGOEGUN2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'ORAINGOEGUNIZEN', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'ORAINGOURTE', 'CURRENTYEAR' ),
-       'numberofpages'           => array( '1', 'ORRIALDEKOPURU', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'ARTIKULUKOPURU', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'FITXATEGIKOPURU', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'LANKIDEKOPURU', 'NUMBEROFUSERS' ),
-       'numberofedits'           => array( '1', 'ALDAKETAKOPURU', 'NUMBEROFEDITS' ),
-       'pagename'                => array( '1', 'ORRIALDEIZEN', 'PAGENAME' ),
-       'img_right'               => array( '1', 'eskuinera', 'right' ),
-       'img_left'                => array( '1', 'ezkerrera', 'left' ),
-       'img_center'              => array( '1', 'erdian', 'center', 'centre' ),
+       'redirect'                  => array( '0', '#BIRZUZENDU', '#REDIRECT' ),
+       'currentmonth'              => array( '1', 'ORAINGOHILABETE', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonthname'          => array( '1', 'ORAINGOHILABETEIZEN', 'CURRENTMONTHNAME' ),
+       'currentday'                => array( '1', 'ORAINGOEGUN', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'ORAINGOEGUN2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'ORAINGOEGUNIZEN', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'ORAINGOURTE', 'CURRENTYEAR' ),
+       'numberofpages'             => array( '1', 'ORRIALDEKOPURU', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'ARTIKULUKOPURU', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'FITXATEGIKOPURU', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'LANKIDEKOPURU', 'NUMBEROFUSERS' ),
+       'numberofedits'             => array( '1', 'ALDAKETAKOPURU', 'NUMBEROFEDITS' ),
+       'pagename'                  => array( '1', 'ORRIALDEIZEN', 'PAGENAME' ),
+       'img_right'                 => array( '1', 'eskuinera', 'right' ),
+       'img_left'                  => array( '1', 'ezkerrera', 'left' ),
+       'img_center'                => array( '1', 'erdian', 'center', 'centre' ),
 );
 
 $separatorTransformTable = array( ',' => '.', '.' => ',' ); /* Bug 15717 */
@@ -132,7 +132,7 @@ $messages = array(
 'tog-hidepatrolled' => 'Ezkutatu patruilatutako aldaketa azken aldaketetan',
 'tog-newpageshidepatrolled' => 'Ezkutatu patruilatutako orriak, orri-zerrenda berritik',
 'tog-extendwatchlist' => 'Jarraipen-zerrenda zabaldu aldaketa guztiak ikusteko, ez bakarrik azken aldaketak',
-'tog-usenewrc' => 'Hobetutako azken aldaketak (JavaScript behar da)',
+'tog-usenewrc' => 'Azken aldaketetan eta jarraipen-zerrendan aldaketak orrialdearen arabera taldekatu (JavaScript behar da)',
 'tog-numberheadings' => 'Goiburukoak automatikoki zenbakitu',
 'tog-showtoolbar' => 'Aldaketen tresna-barra erakutsi (JavaScript)',
 'tog-editondblclick' => 'Klik bikoitzaren bitartez orrialdeak aldatu (JavaScript)',
@@ -140,17 +140,17 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Atalen izenburuetan klik eginez atala<br />aldatzea gaitu (JavaScript)',
 'tog-showtoc' => 'Edukien taula erakutsi (3 goiburukotik gorako orrialdeentzako)',
 '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',
-'tog-watchdeletion' => 'Ezabatzen ditudan orrialdeak nire segimendu zerrendara gehitu',
+'tog-watchcreations' => 'Sortzen ditudan orrialdeak eta fitxategiak nire jarraipen-zerrendara gehitu',
+'tog-watchdefault' => 'Aldatzen ditudan orrialdeak eta fitxategiak nire jarraipen-zerrendara gehitu',
+'tog-watchmoves' => 'Izena aldatutako orrialdeak eta fitxategiak jarraipen-zerrendara gehitu',
+'tog-watchdeletion' => 'Ezabatzen ditudan orrialdeak eta fitxategiak nire jarraipen-zerrendara gehitu',
 'tog-minordefault' => 'Lehenetsi bezala aldaketa txiki bezala markatu guztiak',
 'tog-previewontop' => 'Aurrebista aldaketa koadroaren aurretik erakutsi',
 'tog-previewonfirst' => 'Lehen aldaketan aurrebista erakutsi',
 'tog-nocache' => 'Orrialdeen katxea ezgaitu',
-'tog-enotifwatchlistpages' => 'Bidal iezadazue e-postako mezua, jarraitzen ari naizen orri bat aldatzen denean',
+'tog-enotifwatchlistpages' => 'Bidal iezadazue e-posta bat, jarraitzen ari naizen orrialde edo fitxategi bat aldatzen denean',
 'tog-enotifusertalkpages' => 'Nire eztabaida orrialdea aldatzen denean e-posta jaso',
-'tog-enotifminoredits' => 'Aldaketa txikiak direnean ere e-posta jaso',
+'tog-enotifminoredits' => 'Orrialde edo fitxategietan aldaketak txikiak direnean ere e-posta jaso',
 'tog-enotifrevealaddr' => 'Jakinarazpen mezuetan nire e-posta helbidea erakutsi',
 'tog-shownumberswatching' => 'Jarraitzen duen erabiltzaile kopurua erakutsi',
 'tog-oldsig' => 'Egungo sinadura:',
@@ -387,6 +387,7 @@ $1',
 'youhavenewmessages' => '$1 dauzkazu ($2).',
 'newmessageslink' => 'Mezu berriak',
 'newmessagesdifflink' => 'azken aldaketa ikusi',
+'newmessagesdifflinkplural' => 'azken {{PLURAL:$1|aldaketa|aldaketak}}',
 'youhavenewmessagesmulti' => 'Mezu berriak dituzu $1(e)n',
 'editsection' => 'aldatu',
 'editold' => 'aldatu',
@@ -436,10 +437,12 @@ Existitzen direnen zerrenda ikus dezakezu  [[Special:SpecialPages|{{int:specialp
 # General errors
 'error' => 'Errorea',
 'databaseerror' => 'Datu-base errorea',
-'dberrortext' => 'Datu-basean kontsulta egiterakoan sintaxi errore bat gertatu da. Baliteke softwareak bug bat izatea. Datu-basean egindako azken kontsulta:
-<blockquote><tt>$1</tt></blockquote>
-funtzio honekin: "<tt>$2</tt>".
-Datu-baseak emandako errore informazioa: "<tt>$3: $4</tt>".',
+'dberrortext' => 'Datu-basean kontsulta egiterakoan sintaxi errore bat gertatu da. 
+Baliteke softwareak bug bat izatea. 
+Datu-basean egindako azken kontsulta:
+<blockquote><code>$1</code></blockquote>
+funtzio honekin: "<code>$2</code>".
+Datu-baseak emandako errorea: "<samp>$3: $4</samp>".',
 'dberrortextcl' => 'Datu-basean kontsulta egiterakoan sintaxi errore bat gertatu da.
 Datu-basean egindako azken kontsulta:
 "$1"
@@ -475,15 +478,17 @@ Mesedez, bidali gertakar hau administradore bati, URLaren izena jarriz.',
 'badarticleerror' => 'Ezin da ekintza hau orrialde honetan burutu.',
 'cannotdelete' => 'Ezin izan da "$1" orrialde edo fitxategia ezabatu.
 Baliteke beste norbaitek ezabatu izana.',
+'cannotdelete-title' => 'Ezin da "$1" orrialdea ezabatu',
 'badtitle' => 'Izenburu ezegokia',
 'badtitletext' => 'Eskatutako orrialde izenburua ez da baliozkoa, hutsik dago, edo gaizki lotutako hizkuntzen arteko lotura da. Baliteke izenburuetan erabili ezin den karaktereren bat izatea.',
 'perfcached' => 'Hurrengo datuak katxean gordeta daude eta litekeena da guztiz eguneratuta ez egotea. Gehienez {{PLURAL:$1|emaitza 1 dago|$1 emaitza daude}} eskuragarri katxean.',
-'perfcachedts' => 'Hurrengo datuak katxean daude, $1 eguneratu zen azkenekoz. {{PLURAL:$1|emaitza 1 dago|$1 emaitza daude}} eskuragarri katxean.',
+'perfcachedts' => 'Hurrengo datuak katxean daude, $1 eguneratu zen azkenekoz. {{PLURAL:$4|emaitza 1 dago|$4 emaitza daude}} eskuragarri katxean.',
 'querypage-no-updates' => 'Orrialde honen berritzeak ez dira baimentzen. Hemen dagoen data ez da zuzenean berrituko.',
 'wrong_wfQuery_params' => 'Baliogabeko parametroak eman zaizkio wfQuery() funtzioari<br />
 Funtzioa: $1<br />
 Kontsulta: $2',
 'viewsource' => 'Kodea ikusi',
+'viewsource-title' => '$1-en iturria ikusi',
 'actionthrottled' => 'Ekintzaren gainetik pasa da',
 'actionthrottledtext' => 'Spamaren aurkako neurri gisa ekintza hau denbora tarte laburrean aldi askotan egiteko mugapena duzu, eta muga hori zeharkatu duzu.
 Saia zaitez berriro minutu batzuen buruan, mesedez.',
@@ -634,6 +639,8 @@ Behin-behineko pasahitza: $2',
 'passwordreset-emailsent' => 'Gogorarazteko e-posta bidali da.',
 
 # Special:ChangeEmail
+'changeemail' => 'Aldatu e-mail helbidea',
+'changeemail-oldemail' => 'Egungo e-mail helbidea:',
 'changeemail-newemail' => 'E-posta helbide berria:',
 'changeemail-none' => '(bat ere ez)',
 'changeemail-submit' => 'E-posta aldatu',
@@ -735,12 +742,11 @@ edo <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}
 'userpage-userdoesnotexist-view' => '"$1" erabiltzaile-kontua ez dago erregistraturik.',
 'blocked-notice-logextract' => 'Erabiltzaile hau blokeatuta dago une honetan.
 Azken blokeoaren erregistroa ageri da behean, erreferentzia gisa:',
-'clearyourcache' => "'''Oharra:''' Gorde ondoren zure nabigatzailearen katxea ekidin beharko duzu aldaketak ikusteko.
-* '''Firefox / Safari:''' ''Shift'' tekla sakatu birkargatzeko momentuan, edo ''Ctrl-Shift-R'' sakatu (''⌘-R''' Mac baten)
-* '''Google Chrome:''' ''Ctrl-Shift-R'' sakatu (''⌘-R'' Mac batean)
+'clearyourcache' => "'''Oharra:''' Gorde ondoren, zure nabigatzailearen katxea ekidin beharko duzu aldaketak ikusteko.
+* '''Firefox / Safari:''' ''Shift'' tekla sakatu birkargatzeko momentuan, edo ''Ctrl-Shift-R'' edo ''Crtl-F5'' sakatu (''⌘-R''' Mac batean)
+* '''Google Chrome:''' ''Ctrl-Shift-R'' sakatu (''⌘-Shift-R'' Mac batean)
 * '''Internet Explorer:''' ''Ctrl'' tekla sakatu birkargatzeko momentuan, edo ''Ctrl-F5'' sakatu
-* '''Konqueror:''': Birkargatzeko klik egin, edo F5 sakatu, besterik ez
-* '''Opera''' erabiltzaileek ''Tresnak → Hobespenak'' atalera jo eta katxea garbitzeko aukera hautatu",
+* '''Opera''' erabiltzaileek ''Tresnak → Hobespenak'' atalera joan eta katxea garbitzeko aukera hautatu",
 'usercssyoucanpreview' => "'''Laguntza:''' Zure CSS berria gorde aurretik probatzeko \"{{int:showpreview}}\" botoia erabili.",
 'userjsyoucanpreview' => "'''Laguntza:''' Zure JS berria gorde aurretik probatzeko \"{{int:showpreview}}\" botoia erabili.",
 'usercsspreview' => "'''Ez ahaztu zure CSS kodea aurreikusten zabiltzala.'''
@@ -755,6 +761,7 @@ Azken blokeoaren erregistroa ageri da behean, erreferentzia gisa:',
 'note' => "'''Oharra:'''",
 'previewnote' => "'''Gogoratu hau aurrikuspen bat dela.'''
 Zure aldaketak ez dira oraindik gorde!",
+'continue-editing' => 'Aldatzen jarraitu',
 'previewconflict' => 'Aurreikuspenak aldaketen koadroan idatzitako testua erakusten du, gorde ondoren agertuko den bezala.',
 'session_fail_preview' => "'''Sentitzen dugu! Ezin izan da zure aldaketa prozesatu, saioko datu batzuen galera dela-eta. Mesedez, saiatu berriz. Arazoak jarraitzen badu, saiatu saioa amaitu eta berriz hasten.'''",
 'session_fail_preview_html' => "'''Sentitzen dugu! Ezin izan dugu zure aldaketa burutu, saio datu galera bat medio.'''
@@ -766,6 +773,7 @@ Zure aldaketak ez dira oraindik gorde!",
 Aldaketa ezeztatua izan da testuaren galtzea galarazteko.
 Hau batzuetan gertatzen da buggyan oinarritutako web proxy zerbitzua erabiltzean.'''",
 'editing' => '$1 aldatzen',
+'creating' => '$1 sortzen',
 'editingsection' => '$1 aldatzen (atala)',
 'editingcomment' => '$1 aldatzen (atal berria)',
 'editconflict' => 'Aldaketa gatazka: $1',
@@ -906,9 +914,9 @@ Administratzaile bezala ikus dezakezu; xehetasun gehiagorako [{{fullurl:{{#Speci
 'rev-deleted-no-diff' => "Ezin duzu ezberdintasun hau ikusi, berrikuspenetako bat '''ezabatua''' izan delako.
 Xehetasunak [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ezabaketa erregistroan] aurki ditzakezu.",
 'rev-suppressed-no-diff' => "Ezin duzu ezberdintasunik ikusi berrikuspenen bat '''ezabatua''' izan delako.",
-'rev-deleted-unhide-diff' => "diff honen bertsioetako bat '''ezabatu''' da.
+'rev-deleted-unhide-diff' => "aldaketa honen bertsioetako bat '''ezabatu''' da.
 Xehetasunak ikusgai daude [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ezabatze erregistroan].
-Administratzailea zarenez, oraindik [$1 diff hau ikus dezakezu], nahi izanez gero.",
+Oraindik [$1 aldaketa hau ikus dezakezu], nahi izanez gero.",
 'rev-suppressed-unhide-diff' => "diff honen bertsioetako bat '''ezeztatu''' da.
 Xehetasunak ikusgai daude [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ezeztatze erregistroan].
 Administratzailea zarenez, oraindik [$1 diff hau ikus dezakezu], nahi izanez gero.",
@@ -983,7 +991,7 @@ Begira itzazu erregistroak.',
 # Suppression log
 'suppressionlog' => 'Ezabatze loga',
 'suppressionlogtext' => 'Azpian administratzaileek ezkutatutako edukia duten ezabaketa eta blokeoen zerrenda dago.
-Ikusi [[Special:BlockList|IP blokeoen zerrenda]] orain dauden blokeoak ikusi ahal izateko.',
+Ikusi [[Special:BlockList|blokeoen zerrenda]] orain dauden blokeoak eta debekuak ikusi ahal izateko.',
 
 # History merging
 'mergehistory' => 'Orrialdeen historiak bateratu',
@@ -1018,6 +1026,7 @@ Kontura zaitez nabigazio loturek, zutabea ezabatu dezakela.',
 
 # Diffs
 'history-title' => '"$1" orrialdearen historia berrikuspena',
+'difference-title' => '"$1"-en berrikuspenen arteko aldaketa',
 'difference-multipage' => '(Orrialdeen arteko ezberdintasunak)',
 'lineno' => '$1. lerroa:',
 'compareselectedversions' => 'Hautatutako bertsioak alderatu',
@@ -1121,6 +1130,8 @@ Saia zaitez zure eskeraren aurretik ''all:'' jartzen eduki guztien artean bilatz
 'prefs-watchlist-token' => 'Jarraipen zerrendaren tokena:',
 'prefs-misc' => 'Denetarik',
 'prefs-resetpass' => 'Pasahitza aldatu',
+'prefs-changeemail' => 'Aldatu e-mail helbidea',
+'prefs-setemail' => 'E-mail helbide bat ezarri',
 'prefs-email' => 'E-posta aukerak',
 'prefs-rendering' => 'Itxura',
 'saveprefs' => 'Gorde',
@@ -1242,7 +1253,7 @@ $1 {{PLURAL:$1|karakteretik|karakteretik}} behera izan behar ditu.',
 'group-all' => '(guztiak)',
 
 'group-user-member' => '{{GENDER:$1|lankidea}}',
-'group-autoconfirmed-member' => '{{GENDER:$1|baieztatutako erabiltzailea}}',
+'group-autoconfirmed-member' => '{{GENDER:$1|baieztatutako lankidea}}',
 'group-bot-member' => '{{GENDER:$1|bot-a}}',
 'group-sysop-member' => '{{GENDER:$1|administratzailea}}',
 'group-bureaucrat-member' => '{{GENDER:$1|burokrata}}',
@@ -1355,6 +1366,7 @@ $1 {{PLURAL:$1|karakteretik|karakteretik}} behera izan behar ditu.',
 'action-userrights' => 'lankide guztien eskumenak aldatu',
 'action-userrights-interwiki' => 'beste wikietako lankideen lankide-eskumenak aldatu',
 'action-siteadmin' => 'datubasea babestu edo babesa kendu',
+'action-sendemail' => 'E-mailak bidali',
 
 # Recent changes
 'nchanges' => '{{PLURAL:$1|aldaketa 1|$1 aldaketa}}',
@@ -1528,7 +1540,7 @@ $1',
 'img-auth-nopathinfo' => 'PATH_INFO falta da.
 Zure zerbitzaria ez dago informazio hau pasatzeko konfiguratuta.
 CGI-oinarriduna izan daiteke, img_auth onartzen ez duena.
-[https://www.mediawiki.org/wiki/Manual:Image_Authorization Ikusi irudi-baimenak.]',
+Ikusi https://www.mediawiki.org/wiki/Manual:Image_Authorization.',
 'img-auth-notindir' => 'Eskatutako bidea ez dago kofiguratutako igoera-direktorioan.',
 'img-auth-badtitle' => 'Ezin izan da baleko izenbururik eraiki "$1" izenetik abiatuta',
 'img-auth-nologinnWL' => 'Ez duzu saioa hasi eta "$1" ez dago zerrenda zurian.',
@@ -1634,6 +1646,7 @@ Bere [$2 fitxategiaren deskribapen orrialdea] behean dago.',
 ** Copyright bortxaketa
 ** Bikoiztutako fitxategia',
 'filedelete-edit-reasonlist' => 'Ezabaketa arrazoiak aldatu',
+'filedelete-maintenance-title' => 'Ezin da artxiboa ezabatu',
 
 # MIME search
 'mimesearch' => 'MIME bilaketa',
@@ -1682,7 +1695,9 @@ Bere [$2 fitxategiaren deskribapen orrialdea] behean dago.',
 
 'disambiguations' => 'Argipen orrietara lotzen duten orriak',
 'disambiguationspage' => 'Template:argipen',
-'disambiguations-text' => "Jarraian azaltzen diren orrialdeek '''argipen orrialde''' baterako lotura dute. Kasu bakoitzean dagokion artikulu zuzenarekin izan beharko lukete lotura.<br />Orrialde bat argipen motakoa dela antzeman ohi da [[MediaWiki:Disambiguationspage]] orrialdean agertzen den txantiloietako bat duenean.",
+'disambiguations-text' => "Jarraian azaltzen diren orrialdeek '''argipen orrialde''' baterako lotura dute. 
+Kasu bakoitzean dagokion artikulu zuzenarekin izan beharko lukete lotura.<br />
+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 <del>zuzendu</del> beharko luke.',
@@ -1797,6 +1812,10 @@ Erregistro mota, erabiltzailearen izena edota orrialdearen izena iragaziz bistar
 'allpagesprefix' => 'Aurrizki hau duten orrialdeak bistaratu:',
 'allpagesbadtitle' => 'Orrialdearen izena baliogabekoa da edo interwiki edo hizkuntzen arteko aurrizkia dauka. Izenburuetan erabili ezin daitezkeen karaktere bat edo gehiago izan ditzake.',
 'allpages-bad-ns' => '{{SITENAME}}(e)k ez dauka "$1" izeneko izen-tarterik.',
+'allpages-hide-redirects' => 'Birzuzenketak ezkutatu',
+
+# SpecialCachedPage
+'cachedspecial-refresh-now' => 'Azkena ikusi.',
 
 # Special:Categories
 'categories' => 'Kategoriak',
@@ -1862,6 +1881,7 @@ Badago [[{{MediaWiki:Listgrouprights-helppage}}|informazio osagarria]] banakako
 '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',
+'emailuser-title-notarget' => 'Erabiltzaileari e-maila 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.',
@@ -2114,6 +2134,7 @@ In such cases, you must uncheck or unhide the newest deleted revision.',
 
 [[Special:Log/delete|Ezabaketa erregistrora]] jo azken ezabaketa eta leheneraketak ikusteko.",
 'undelete-header' => 'Berriki ezabatutako orrialdeak ikusteko [[Special:Log/delete|ezabaketa erregistrora]] jo.',
+'undelete-search-title' => 'Ezabatutako orrialdeak bilatu',
 'undelete-search-box' => 'Ezabatutako orrialdeak bilatu',
 'undelete-search-prefix' => 'Honela hasten diren orrialdeak erakutsi:',
 'undelete-search-submit' => 'Bilatu',
@@ -2214,8 +2235,8 @@ Blokeo erregistroa azken sarrera ematen da azpian erreferentziarako:',
 'ipb-confirm' => 'Blokeoa baieztatu',
 'badipaddress' => 'Baliogabeko IP helbidea',
 'blockipsuccesssub' => 'Blokeoa burutu da',
-'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] erabiltzaileari blokeoa ezarri zaio.<br />
-Ikus [[Special:BlockList|IP blokeoen zerrenda]] blokeoak aztertzeko.',
+'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] blokeatua izan da.<br />
+Ikus [[Special:BlockList|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',
@@ -2247,6 +2268,7 @@ Ikus [[Special:BlockList|IP blokeoen zerrenda]] blokeoak aztertzeko.',
 'unblocklink' => 'blokeoa kendu',
 'change-blocklink' => 'blokeoa aldatu',
 'contribslink' => 'ekarpenak',
+'emaillink' => 'E-maila bidali',
 'autoblocker' => '"[[User:$1|$1]]"(e)k berriki erabili duen IP helbidea duzulako autoblokeatu zaizu. $1(e)k emandako arrazoia zera da: "\'\'\'$2\'\'\'"',
 'blocklogpage' => 'Blokeo erregistroa',
 'blocklog-showlog' => 'Lankide hau aurretik blokeatua izan da.
@@ -2255,7 +2277,9 @@ Blokeo erregistroa ematen da azpian erreferentziarako:',
 Erregistroa ematen da azpian erreferentziarako:',
 'blocklogentry' => '"[[$1]]" wikilariari blokeoa ezarri zaio. Blokeoaldia: $2 $3',
 'reblock-logentry' => '[[$1]] wikilariari blokeoaldia aldatu diogu. Blokeoaldi berria: $2 $3',
-'blocklogtext' => 'Erabiltzaileen blokeoen ezarpen eta ezabaketen erregistroa da hau. Ez dira automatikoki blokeatutako IP helbideak zerrendatzen. Ikus [[Special:BlockList|IP blokeoen zerrenda]] aktibo dauden blokeoak aztertzeko.',
+'blocklogtext' => 'Erabiltzaileen blokeoen ezarpen eta ezabaketen erregistroa da hau. 
+Automatikoki blokeatutako IP helbideak ez dira zerrendatzen. 
+Ikus [[Special:BlockList|blokeoen zerrenda]] aktibo dauden blokeoak eta debekuak aztertzeko.',
 'unblocklogentry' => '$1 desblokeatu da',
 'block-log-flags-anononly' => 'erabiltzaile anonimoak bakarrik',
 'block-log-flags-nocreate' => 'kontuak sortzea ezgaituta',
@@ -2362,7 +2386,7 @@ Kasu horietan orrialdea eskuz mugitu edo bestearekin bateratu beharko duzu.",
 
 "[[:$1]]" helburua existitzen da. Lekua egiteko ezabatu nahi al duzu?',
 'delete_and_move_confirm' => 'Bai, orrialdea ezabatu',
-'delete_and_move_reason' => 'Lekua egiteko ezabatu da',
+'delete_and_move_reason' => '[[$1]] mugitzeko ezabatu da',
 'selfmove' => 'Helburu izenburua berdina da; ezin da orrialde bat bere gainera mugitu.',
 'immobile-source-namespace' => '"$1" motako orrialdeak ezin dira mugitu',
 'immobile-target-namespace' => 'Orrialdeak ezin dira "$1" motara mugitu',
@@ -2387,6 +2411,7 @@ Azken erregistroko sarrera ematen da azpian erreferentzia gisa:",
 Orrialdeak esportatzeko zehaztu hauen izenburuak beheko koadroan, izenburu bat lerroko, eta aukeratu zein bertsio esportatu nahi dituzun.
 
 Horrez gain, lotura zuzena ere erabil dezakezu; adibidez, [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] "[[{{MediaWiki:Mainpage}}]]" orrialdearentzako.',
+'exportall' => 'Orrialde guztiak esportatu',
 'exportcuronly' => 'Oraingo berrikuspena bakarrik hartu, ez historia guztia',
 'exportnohistory' => "----
 '''Oharra:''' Formulario honen bitartez orrialdeen historia osoak esportatzeko aukera ezgaitu egin da, errendimendua dela-eta.",
@@ -2573,9 +2598,9 @@ Baliteke zerrenda beltzean dagoen kanpo lotura batek sortzea arazo hori.',
 'spam_blanking' => 'Berrikuspen guztiek $1(e)rako lotura zeukaten, husten',
 
 # Info page
-'pageinfo-header-edits' => 'Aldaketak',
+'pageinfo-header-edits' => 'Aldaketen historia',
 'pageinfo-views' => 'Bistaratze-kopurua',
-'pageinfo-edits' => 'Aldaketa kopurua',
+'pageinfo-edits' => 'Aldaketa kopuru totala',
 
 # Skin names
 'skinname-standard' => 'Lehenetsia',
@@ -3071,6 +3096,10 @@ Egiaztapen kode hau $4 iraungiko da.',
 'confirm-purge-top' => 'Orrialde honen katxea ezabatu?',
 'confirm-purge-bottom' => 'Orrialdea purgatzean katxea ezabatzen du eta orrialdearen bertsiorik eguneratuena erakustera behartzen du.',
 
+# action=watch/unwatch
+'confirm-watch-button' => 'Ados',
+'confirm-unwatch-button' => 'Ados',
+
 # Multipage image navigation
 'imgmultipageprev' => '&larr; aurreko orrialdea',
 'imgmultipagenext' => 'hurrengo orrialdea &rarr;',
@@ -3186,7 +3215,7 @@ Irudiak bereizmen handienean daude, bestelako fitxategi motak beraiei esleitutak
 * <strong class="mw-specialpagerestricted">Mugatutako orrialde bereziak.</strong>',
 'specialpages-group-maintenance' => 'Mantentze-oharrak',
 'specialpages-group-other' => 'Beste orrialde berezi batzuk',
-'specialpages-group-login' => 'Sartu / Izena eman',
+'specialpages-group-login' => 'Saioa hasi / kontua sortu',
 'specialpages-group-changes' => 'Aldaketa berriak eta erregistroak',
 'specialpages-group-media' => 'Artxiboen orriak',
 'specialpages-group-users' => 'Erabiltzaileak eta eskumenak',
index 5a968c8..6cf366f 100644 (file)
@@ -264,158 +264,158 @@ $dateFormats = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#تغییر_مسیر', '#تغییرمسیر', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__بی‌فهرست__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__بی‌نگارخانه__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__بافهرست__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__فهرست__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__بی‌بخش__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '__بی‌عنوان__', '__NOHEADER__' ),
-       'currentmonth'            => array( '1', 'ماه', 'ماه‌کنونی', 'ماه_کنونی', 'ماه‌کنونی۲', 'ماه_کنونی۲', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', 'ماه۱', 'ماه‌کنونی۱', 'ماه_کنونی۱', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', 'نام‌ماه', 'نام_ماه', 'نام‌ماه‌کنونی', 'نام_ماه_کنونی', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'نام‌ماه‌اضافه', 'نام_ماه_اضافه', 'نام‌ماه‌کنونی‌اضافه', 'نام_ماه_کنونی_اضافه', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'مخفف‌نام‌ماه', 'مخفف_نام_ماه', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'روز', 'روزکنونی', 'روز_کنونی', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'روز۲', 'روز_۲', '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', 'ماه‌محلی۱', 'ماه_محلی۱', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'نام‌ماه‌محلی', 'نام_ماه_محلی', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'نام‌ماه‌محلی‌اضافه', 'نام_ماه_محلی_اضافه', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'مخفف‌ماه‌محلی', 'مخفف_ماه_محلی', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'روزمحلی', 'روز_محلی', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'روزمحلی۲', 'روز_محلی_۲', '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' ),
-       'numberofusers'           => array( '1', 'تعدادکاربران', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'کاربران‌فعال', 'کاربران_فعال', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'تعدادویرایش‌ها', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'تعدادبازدید', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'نام‌صفحه', 'نام_صفحه', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'نام‌صفحه‌کد', 'نام_صفحه_کد', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'فضای‌نام', 'فضای_نام', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'فضای‌نام‌کد', 'فضای_نام_کد', 'NAMESPACEE' ),
-       'namespacenumber'         => array( '1', 'شماره_فضای_نام', 'شماره‌فضای‌نام', 'NAMESPACENUMBER' ),
-       'talkspace'               => array( '1', 'فضای‌بحث', 'فضای_بحث', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'فضای‌بحث‌کد', 'فضای_بحث_کد', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'فضای‌موضوع', 'فضای‌مقاله', 'فضای_موضوع', 'فضای_مقاله', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'فضای‌موضوع‌کد', 'فضای‌مقاله‌کد', 'فضای_موضوع_کد', 'فضای_مقاله_کد', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'نام‌کامل‌صفحه', 'نام_کامل_صفحه', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'نام‌کامل‌صفحه‌کد', 'نام_کامل_صفحه_کد', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'نام‌زیرصفحه', 'نام_زیرصفحه', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'نام‌زیرصفحه‌کد', 'نام_زیرصفحه_کد', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'نام‌صفحه‌مبنا', 'نام_صفحه_مبنا', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'نام‌صفحه‌مبناکد', 'نام_صفحه_مبنا_کد', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'نام‌صفحه‌بحث', 'نام_صفحه_بحث', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'نام‌صفحه‌بحث‌کد', 'نام_صفحه_بحث_کد', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'نام‌صفحه‌موضوع', 'نام‌صفحه‌مقاله', 'نام_صفحه_موضوع', 'نام_صفحه_مقاله', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       '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_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_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', 'فنک:', '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__' ),
-       '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', 'روزنسخه۲', 'روز_نسخه۲', 'روز_نسخه_۲', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'ماه‌نسخه', 'ماه_نسخه', 'REVISIONMONTH' ),
-       'revisionmonth1'          => array( '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', 'نشانی‌کامل‌کد:', 'نشانی_کامل_کد:', 'FULLURLE:' ),
-       'canonicalurl'            => array( '0', 'نشانی_استاندارد:', 'نشانی‌استاندارد:', 'CANONICALURL:' ),
-       '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', 'نسخه‌کنونی', 'نسخه_کنونی', '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:' ),
-       '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:' ),
-       '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__' ),
-       'numberingroup'           => array( '1', 'تعداددرگروه', 'NUMBERINGROUP', 'NUMINGROUP' ),
-       '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' ),
-       'defaultsort_noerror'     => array( '0', 'بدون‌خطا', 'بدون_خطا', 'noerror' ),
-       'defaultsort_noreplace'   => array( '0', 'جایگزین‌نکن', 'جایگزین_نکن', 'noreplace' ),
+       'redirect'                  => array( '0', '#تغییر_مسیر', '#تغییرمسیر', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__بی‌فهرست__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__بی‌نگارخانه__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__بافهرست__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__فهرست__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__بی‌بخش__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '__بی‌عنوان__', '__NOHEADER__' ),
+       'currentmonth'              => array( '1', 'ماه', 'ماه‌کنونی', 'ماه_کنونی', 'ماه‌کنونی۲', 'ماه_کنونی۲', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'ماه۱', 'ماه‌کنونی۱', 'ماه_کنونی۱', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'نام‌ماه', 'نام_ماه', 'نام‌ماه‌کنونی', 'نام_ماه_کنونی', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'نام‌ماه‌اضافه', 'نام_ماه_اضافه', 'نام‌ماه‌کنونی‌اضافه', 'نام_ماه_کنونی_اضافه', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'مخفف‌نام‌ماه', 'مخفف_نام_ماه', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'روز', 'روزکنونی', 'روز_کنونی', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'روز۲', 'روز_۲', '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', 'ماه‌محلی۱', 'ماه_محلی۱', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'نام‌ماه‌محلی', 'نام_ماه_محلی', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'نام‌ماه‌محلی‌اضافه', 'نام_ماه_محلی_اضافه', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'مخفف‌ماه‌محلی', 'مخفف_ماه_محلی', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'روزمحلی', 'روز_محلی', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'روزمحلی۲', 'روز_محلی_۲', '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' ),
+       'numberofusers'             => array( '1', 'تعدادکاربران', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'کاربران‌فعال', 'کاربران_فعال', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'تعدادویرایش‌ها', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'تعدادبازدید', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'نام‌صفحه', 'نام_صفحه', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'نام‌صفحه‌کد', 'نام_صفحه_کد', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'فضای‌نام', 'فضای_نام', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'فضای‌نام‌کد', 'فضای_نام_کد', 'NAMESPACEE' ),
+       'namespacenumber'           => array( '1', 'شماره_فضای_نام', 'شماره‌فضای‌نام', 'NAMESPACENUMBER' ),
+       'talkspace'                 => array( '1', 'فضای‌بحث', 'فضای_بحث', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'فضای‌بحث‌کد', 'فضای_بحث_کد', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'فضای‌موضوع', 'فضای‌مقاله', 'فضای_موضوع', 'فضای_مقاله', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'فضای‌موضوع‌کد', 'فضای‌مقاله‌کد', 'فضای_موضوع_کد', 'فضای_مقاله_کد', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'نام‌کامل‌صفحه', 'نام_کامل_صفحه', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'نام‌کامل‌صفحه‌کد', 'نام_کامل_صفحه_کد', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'نام‌زیرصفحه', 'نام_زیرصفحه', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'نام‌زیرصفحه‌کد', 'نام_زیرصفحه_کد', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'نام‌صفحه‌مبنا', 'نام_صفحه_مبنا', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'نام‌صفحه‌مبناکد', 'نام_صفحه_مبنا_کد', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'نام‌صفحه‌بحث', 'نام_صفحه_بحث', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'نام‌صفحه‌بحث‌کد', 'نام_صفحه_بحث_کد', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'نام‌صفحه‌موضوع', 'نام‌صفحه‌مقاله', 'نام_صفحه_موضوع', 'نام_صفحه_مقاله', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       '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_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_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', 'فنک:', '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__' ),
+       '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', 'روزنسخه۲', 'روز_نسخه۲', 'روز_نسخه_۲', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'ماه‌نسخه', 'ماه_نسخه', 'REVISIONMONTH' ),
+       'revisionmonth1'            => array( '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', 'نشانی‌کامل‌کد:', 'نشانی_کامل_کد:', 'FULLURLE:' ),
+       'canonicalurl'              => array( '0', 'نشانی_استاندارد:', 'نشانی‌استاندارد:', 'CANONICALURL:' ),
+       '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', 'نسخه‌کنونی', 'نسخه_کنونی', '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:' ),
+       '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:' ),
+       '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__' ),
+       'numberingroup'             => array( '1', 'تعداددرگروه', 'NUMBERINGROUP', 'NUMINGROUP' ),
+       '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' ),
+       'defaultsort_noerror'       => array( '0', 'بدون‌خطا', 'بدون_خطا', 'noerror' ),
+       'defaultsort_noreplace'     => array( '0', 'جایگزین‌نکن', 'جایگزین_نکن', 'noreplace' ),
 );
 
 # Harakat are intentionally not included in the linkTrail. Their addition should
@@ -645,7 +645,7 @@ $messages = array(
 'viewhelppage' => 'نمایش صفحهٔ راهنما',
 'categorypage' => 'نمایش صفحهٔ رده',
 'viewtalkpage' => 'نمایش صفحهٔ بحث',
-'otherlanguages' => 'زبان‌های دیگر',
+'otherlanguages' => 'بÙ\87 Ø²Ø¨Ø§Ù\86â\80\8cÙ\87اÛ\8c Ø¯Û\8cگر',
 'redirectedfrom' => '(تغییرمسیر از $1)',
 'redirectpagesub' => 'صفحهٔ تغییرمسیر',
 'lastmodifiedat' => 'این صفحه آخرین‌بار در $1 ساعت $2 تغییر یافته‌است.',
@@ -697,6 +697,10 @@ $1',
 'youhavenewmessages' => '$1 دارید ($2).',
 'newmessageslink' => 'پیام‌های جدید',
 'newmessagesdifflink' => 'آخرین تغییر',
+'youhavenewmessagesfromusers' => 'شما  $1  از  {{PLURAL:$3| کاربر دیگر| $3  کاربر}} دارید ( $2 ).',
+'youhavenewmessagesmanyusers' => 'شما  $1  از تعدادی کاربر دارید ( $2 ).',
+'newmessageslinkplural' => '{{PLURAL:$1|پیام جدید |پیام جدید}}',
+'newmessagesdifflinkplural' => '{{formatnum:$1}} {{PLURAL:$1|تغییر|تغییرات}} اخیر',
 'youhavenewmessagesmulti' => 'پیام‌های جدیدی در $1 دارید.',
 'editsection' => 'ویرایش',
 'editold' => 'ویرایش',
@@ -753,10 +757,10 @@ $1',
 'dberrortext' => 'اشکال نحوی در درخواست فرستاده شده به پایگاه داده رخ داد.
 دلیل این مشکل می‌تواند ایرادی در نرم‌افزار باشد.
 آخرین درخواست که برای پایگاه داده فرستاد شد این بود:
-<blockquote style="direction:ltr;"><tt>$1</tt></blockquote>
-این درخواست از درون عملگر «<span class="ltr"><tt>$2</tt></span>» فرستاده شد.
+<blockquote style="direction:ltr;"><code>$1</code></blockquote>
+این درخواست از درون عملگر «<span class="ltr"><code>$2</code></span>» فرستاده شد.
 پایگاه داده این خطا را بازگرداند:
-<div class="ltr"><tt>$3: $4</tt></div>',
+<div class="ltr"><samp>$3: $4</samp></div>',
 'dberrortextcl' => 'اشکال نحوی در درخواست فرستاده شده به پایگاه داده رخ داد.
 آخرین درخواستی که برای پایگاه داده فرستاد شد این بود:
 <div class="ltr">$1</div>
@@ -1109,16 +1113,19 @@ $2
 'noarticletext-nopermission' => 'این صفحه هم‌اکنون متنی ندارد.
 شما می‌توانید در دیگر صفحه‌ها [[Special:Search/{{PAGENAME}}|این عنوان را جستجو کنید]]،
 یا <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} سیاهه‌های مرتبط را بگردید]</span>.',
+'missing-revision' => 'ویرایش #$1 از صفحهٔ "{{PAGENAME}}" موجود نیست.
+
+معمولاً در اثر پیوند به تاریخچهٔ به‌روز نشدهٔ صفحهٔ حذف شده است.
+می‌توانید جزئیات بیشتر را در [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سیاههٔ حذف] بیابید.',
 'userpage-userdoesnotexist' => 'حساب کاربر «<nowiki>$1</nowiki>» ثبت نشده‌است.
 لطفاً مطمئن شوید که می‌خواهید این صفحه را ایجاد یا ویرایش کنید.',
 'userpage-userdoesnotexist-view' => 'حساب کاربری «$1» ثبت نشده‌است.',
 'blocked-notice-logextract' => 'دسترسی این کاربر در حال حاضر بسته است.
 آخرین مورد سیاهه قطع دسترسی در زیر آمده‌است:',
-'clearyourcache' => "'''نکته:''' پس از ذخیره‌کردن ممکن است برای دیدن تغییرات نیاز باشد که حافظهٔ نهانی مرورگر خود را پاک کنید.
+'clearyourcache' => "''نکته:''' پس از ذخیره‌کردن ممکن است برای دیدن تغییرات نیاز باشد که حافظهٔ نهانی مرورگر خود را پاک کنید.
 *'''فایرفاکس / سافاری:'''  کلید ''Shift'' را نگه دارید و روی دکمهٔ ''Reload'' کلیک کنید، یا کلید‌های ''Ctrl-F5'' یا ''Ctrl-R'' را با هم فشار دهید (در رایانه‌های اپل مکینتاش کلید‌های ''⌘-R'')
 *'''گوگل کروم:'''کلیدهای ''Ctrl+Shift+R'' را با هم فشار دهید. (در رایانه‌های اپل مکینتاش کلید‌های ''⌘-Shift-R'')
 *'''اینترنت اکسپلورر:''' کلید ''Ctrl'' را نگه‌دارید و روی دکمهٔ ''Refresh'' کلیک کنید، یا کلید‌های ''Ctrl-F5'' را با هم فشار دهید
-*'''کانکوئرر:''' روی دکمهٔ ''Reload'' کلیک کنید و یا کلید ''F5'' را فشار دهید
 *'''اپرا:''' حافظهٔ نهانی مرورگر را از طریق منوی ''Tools &rarr; Preferences'' پاک کنید",
 'usercssyoucanpreview' => "'''نکته:''' پیش از ذخیه‌کردن فایل CSS یا JS خود، با دکمهٔ '''{{int:showpreview}}''' آن را آزمایش کنید.",
 'userjsyoucanpreview' => "'''نکته:''' پیش از ذخیره‌کردن فایل CSS یا JS خود، با دکمهٔ '''{{int:showpreview}}''' آن را آزمایش کنید.",
@@ -1242,6 +1249,7 @@ $2
 'expansion-depth-exceeded-warning' => 'صفحه حداکثر عمق بسط دادن تجاوز کرد',
 'parser-unstrip-loop-warning' => 'حلقه در دستور unstrip پیدا شد',
 'parser-unstrip-recursion-limit' => 'از حداکثر ارجاع در دستور unstrip تجاوز شد ($1)',
+'converter-manual-rule-error' => 'خطا در ساختار کتابچهٔ مبدل زبان',
 
 # "Undo" feature
 'undo-success' => 'این ویرایش را می‌توان خنثی کرد.
@@ -1428,6 +1436,10 @@ $1",
 'editundo' => 'خنثی‌سازی',
 'diff-multi' => '({{PLURAL:$1|یک|$1}} ویرایش میانی توسط {{PLURAL:$2|یک|$2}} کاربر نشان داده نشده‌است)',
 'diff-multi-manyusers' => '({{PLURAL:$1|یک|$1}} ویرایش میانی توسط بیش از {{PLURAL:$2|یک|$2}} کاربر نشان داده نشده‌است)',
+'difference-missing-revision' => '{{PLURAL:$2|یک ویرایش|$2 ویرایش}}  از تفاوت نسخه‌ها ($1) {{PLURAL:$2|یافت|یافت}}  نشد.
+
+معمولاً در اثر پیوند به تاریخچهٔ به‌روز نشدهٔ صفحهٔ حذف شده است.
+می‌توانید جزئیات بیشتر را در [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سیاههٔ حذف] بیابید.',
 
 # Search results
 'searchresults' => 'نتایج جستجو',
@@ -2132,6 +2144,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization را ببینید.',
 'shared-repo-from' => 'از $1',
 'shared-repo' => 'یک مخزن مشترک',
 'shared-repo-name-wikimediacommons' => 'ویکی‌انبار',
+'upload-disallowed-here' => 'متاسفانه شما نمی توانید این نگاره را بازنویس کنید.',
 
 # File reversion
 'filerevert' => 'واگردانی $1',
@@ -2213,8 +2226,8 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization را ببینید.',
 
 'disambiguations' => 'صفحه‌های دارای پیوند به صفحه‌های ابهام‌زدایی',
 'disambiguationspage' => 'Template:ابهام‌زدایی',
-'disambiguations-text' => "صفحه‌های زیر پیوندی به یک '''صفحهٔ ابهام‌زدایی''' هستند.
-اÛ\8cÙ\86 ØµÙ\81Ø­Ù\87â\80\8cÙ\87ا Ø¨اید در عوض به موضوعات مرتبط پیوند داده شوند.<br />
+'disambiguations-text' => "صفحه‌های زیر حاوی حداقل یک پیوند به یک '''صفحهٔ ابهام‌زدایی''' هستند.
+اÛ\8cÙ\86 ØµÙ\81Ø­Ù\87â\80\8cÙ\87ا Ø´اید در عوض به موضوعات مرتبط پیوند داده شوند.<br />
 یک صفحه هنگامی صفحهٔ ابهام‌زدایی در نظر گرفته می‌شود که در آن از الگویی که به [[MediaWiki:Disambiguationspage]] پیوند دارد استفاده شده باشد.",
 
 'doubleredirects' => 'تغییرمسیرهای دوتایی',
@@ -2240,6 +2253,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization را ببینید.',
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|بایت|بایت}}',
 'ncategories' => '$1 {{PLURAL:$1|رده|رده}}',
+'ninterwikis' => '$1 {{PLURAL:$1|میان‌ویکی|میان‌ویکی}}',
 'nlinks' => '$1 {{PLURAL:$1|پیوند|پیوند}}',
 'nmembers' => '$1 {{PLURAL:$1|عضو|عضو}}',
 'nrevisions' => '$1 {{PLURAL:$1|نسخه|نسخه}}',
@@ -2268,6 +2282,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization را ببینید.',
 'mostlinkedtemplates' => 'الگوهایی که بیشتر از همه به آن‌ها پیوند داده شده‌است',
 'mostcategories' => 'صفحه‌های دارای بیشترین رده',
 'mostimages' => 'پرونده‌هایی که بیشتر از همه به آن‌ها پیوند داده شده‌است',
+'mostinterwikis' => 'صفحه‌های دارای بیشترین میان‌ویکی',
 'mostrevisions' => 'صفحه‌های دارای بیشترین نسخه',
 'prefixindex' => 'تمام صفحه‌ها با پیشوند',
 'prefixindex-namespace' => 'همهٔ صفحه‌های دارای پیشوند (فضای‌نام $1)',
@@ -2414,6 +2429,8 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization را ببینید.',
 'mailnologin' => 'نشانی‌ای از فرستنده موجود نیست',
 'mailnologintext' => 'برای فرستادن رایانامه به کاربران دیگر باید [[Special:UserLogin|به سامانه وارد شوید]] و نشانی رایانامهٔ معتبری در [[Special:Preferences|ترجیحات]] خود داشته باشید.',
 'emailuser' => 'فرستادن نامه به این کاربر',
+'emailuser-title-target' => 'ایمیل این {{GENDER:$1| کاربر}}',
+'emailuser-title-notarget' => 'رایانامه به کاربر',
 'emailpage' => 'رایانامه به کاربر',
 'emailpagetext' => 'شما می‌توانید از فرم زیر برای ارسال یک رایانامه به این کاربر استفاده کنید.
 نشانی رایانامه‌ای که در [[Special:Preferences|ترجیحات کاربریتان]] وارد کرده‌اید در نشانی فرستنده (From) نامه خواهد آمد، تا گیرنده بتواند پاسخ دهد.',
@@ -3066,6 +3083,7 @@ $1',
 'import-interwiki-templates' => 'تمام الگوها را شامل شود',
 'import-interwiki-submit' => 'درون‌ریزی شود',
 'import-interwiki-namespace' => 'فضای نام مقصد:',
+'import-interwiki-rootpage' => 'مقصد صفحه ٔ مبنا (اختیاری):',
 'import-upload-filename' => 'نام پرونده:',
 'import-comment' => 'توضیح:',
 'importtext' => 'لطفاً پرونده را از ویکی منبع با کمک [[Special:Export|ابزار برون‌بری]] دریافت کنید.
@@ -3100,6 +3118,9 @@ $1',
 'import-error-interwiki' => 'صفحه «$1» وارد نشد. چون نام آن برای پیوند خارجی (interwiki) رزرو شده‌است.',
 'import-error-special' => 'صفحه «$1» درون‌ریزی نشد، چرا که متعلق به فضای نام غیرمجاز است.',
 'import-error-invalid' => 'صفحه "$1" به دلیل نامعتبر بودن نامش وارد نمی‌شود.',
+'import-options-wrong' => '{{PLURAL:$2|جزئیات|جزئیات}} اشتباه: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'با توجه به ریشه صفحه عنوان نامعتبر است.',
+'import-rootpage-nosubpage' => 'فضای نام  "$1" صفحهٔ مبنا اجازهٔ زیرصفحه نمی‌دهد.',
 
 # Import log
 'importlogpage' => 'سیاههٔ درون‌ریزی‌ها',
@@ -3221,11 +3242,34 @@ $1',
 
 # Info page
 'pageinfo-title' => 'اطلاعات در مورد «$1»',
-'pageinfo-header-edits' => 'ویرایش',
+'pageinfo-header-basic' => 'اطلاعات اولیه',
+'pageinfo-header-edits' => 'ویرایش تاریخچه',
+'pageinfo-header-restrictions' => 'حفاظت از صفحه',
+'pageinfo-header-properties' => 'ويژگيهای صفحه',
+'pageinfo-display-title' => 'نمایش عنوان',
+'pageinfo-default-sort' => 'کلید مرتب‌سازی پیش‌فرض',
+'pageinfo-length' => 'حجم صفحه  (بایت)',
+'pageinfo-article-id' => 'شناسهٔ صفحه',
+'pageinfo-robot-policy' => 'وضعیت موتور جستجو',
+'pageinfo-robot-index' => 'فهرست‌پذیر',
+'pageinfo-robot-noindex' => 'عدم فهرست‌پذیری',
 'pageinfo-views' => 'شمار بازدیدها',
-'pageinfo-watchers' => 'شمار پی‌گیری‌کنندگان',
-'pageinfo-edits' => 'شمار ویرایش‌ها',
-'pageinfo-authors' => 'شمار نویسندگان یکتا',
+'pageinfo-watchers' => 'شمار پی‌گیری‌کنندگان صفحه',
+'pageinfo-redirects-name' => 'تغییرمسیرها به این صفحه',
+'pageinfo-subpages-name' => 'زیرصفحه‌های این صفحه',
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|تغییرمسیر|تغییرمسیر}}; $3 {{PLURAL:$3|غیرتغییرمسیر|غیرتغییرمسیر}})',
+'pageinfo-firstuser' => 'به‌وجود آورندهٔ صفحه',
+'pageinfo-firsttime' => 'زمان ایجاد صفحه',
+'pageinfo-lastuser' => 'آخرین ویرایشگر',
+'pageinfo-lasttime' => 'تاریخ آخرین ویرایش',
+'pageinfo-edits' => 'شمار کلی ویرایش‌ها',
+'pageinfo-authors' => 'تعداد کلی نویسندگان یکتا',
+'pageinfo-recent-edits' => 'شماره ویرایش‌های اخیر (در $1 گذشته)',
+'pageinfo-recent-authors' => 'تعداد نویسندگان یکتای اخیر',
+'pageinfo-restriction' => 'محافظت صفحه ( <code>{{lcfirst:$1}}</code> )',
+'pageinfo-magic-words' => '{{PLURAL:$1|حرف|حروف}} جادویی ($1)',
+'pageinfo-hidden-categories' => '{{PLURAL:$1| ردهٔ|ردهٔ}} پنهان ( $1 )',
+'pageinfo-templates' => '{{PLURAL:$1|الگو|الگو}} استفاده‌شده ($1)',
 
 # Skin names
 'skinname-standard' => 'کلاسیک',
@@ -3281,6 +3325,7 @@ $1',
 'file-info-size-pages' => '<span style="direction:ltr">$1 × $2</span> نقطه، حجم پرونده: $3، نوع MIME پرونده: $4، $5 صفحه',
 'file-nohires' => 'تفکیک‌پذیری بالاتری در دسترس نیست.',
 'svg-long-desc' => 'پروندهٔ اس‌وی‌جی، با ابعاد <span dir="ltr">$1 × $2</span> پیکسل، اندازهٔ پرونده: $3',
+'svg-long-desc-animated' => 'پروندهٔ اس‌وی‌جی متحرک، با ابعاد <span dir="ltr">$1 × $2</span> پیکسل، اندازهٔ پرونده: $3',
 'show-big-image' => 'تصویر با تفکیک‌پذیری بالاتر',
 'show-big-image-preview' => 'اندازهٔ این پیش‌نمایش: $1.',
 'show-big-image-other' => '{{PLURAL:$2|کیفیت|کیفیت‌های}} دیگر: $1.',
@@ -3290,6 +3335,8 @@ $1',
 'file-info-png-looped' => 'چرخش‌دار',
 'file-info-png-repeat' => '$1 {{PLURAL:$1|بار|بار}} پخش شد',
 'file-info-png-frames' => '$1 {{PLURAL:$1|قاب|قاب}}',
+'file-no-thumb-animation' => "'''توجه: به علت مسائل فنی پیش‌نمایش پرونده به صورت متحرک نمایش داده نمی‌شود.'''",
+'file-no-thumb-animation-gif' => "'''توجه:به علت مسائل فنی پیش‌نمایش پرونده‌های GIF مانند این پرونده، به صورت متحرک نمایش داده نمی‌شود.'''",
 
 # Special:NewFiles
 'newimages' => 'نگارخانهٔ پرونده‌های جدید',
@@ -3318,7 +3365,7 @@ $1',
 پیوندهایی بعدی در همان سطر استثنا در نظر گرفته می‌شوند.',
 
 # Metadata
-'metadata' => 'Ù\85تاداده',
+'metadata' => 'Ù\81راداده',
 'metadata-help' => 'این پرونده حاوی اطلاعات اضافه‌ای‌است که احتمالاً دوربین دیجیتال یا پویشگری که در ایجاد یا دیجیتالی‌کردن آن به کار رفته آن را افزوده‌است. اگر پرونده از وضعیت ابتدایی‌اش تغییر داده شده باشد آنگاه ممکن است شرح و تفصیلات موجود اطلاعات تصویر را تماماً بازتاب ندهد.',
 'metadata-expand' => 'نمایش جزئیات تفصیلی',
 'metadata-collapse' => 'نهفتن جزئیات تفصیلی',
index ce09c1f..68e4cfa 100644 (file)
@@ -103,110 +103,110 @@ $bookstoreList = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#OHJAUS', '#UUDELLEENOHJAUS', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__EISISLUETT__', '__NOTOC__' ),
-       'forcetoc'                => array( '0', '__SISLUETTPAKOTUS__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__SISÄLLYSLUETTELO__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__EIOSIOMUOKKAUSTA__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '__EIOTSIKKOA__', '__NOHEADER__' ),
-       'currentmonth'            => array( '1', 'KULUVAKUU', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonthname'        => array( '1', 'KULUVAKUUNIMI', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'KULUVAKUUNIMIGEN', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'KULUVAKUUNIMILYHYT', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'KULUVAPÄIVÄ', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'KULUVAPÄIVÄ2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'KULUVAPÄIVÄNIMI', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'KULUVAVUOSI', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'KULUVAAIKA', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'KULUVATUNTI', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'PAIKALLINENKUU', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonthname'          => array( '1', 'PAIKALLINENKUUNIMI', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'PAIKALLINENKUUNIMIGEN', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'PAIKALLINENKUUNIMILYHYT', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'PAIKALLINENPÄIVÄ', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'PAIKALLINENPÄIVÄ2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'PAIKALLINENPÄIVÄNIMI', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'PAIKALLINENVUOSI', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'PAIKALLINENAIKA', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'PAIKALLINENTUNTI', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'SIVUMÄÄRÄ', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'ARTIKKELIMÄÄRÄ', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'TIEDOSTOMÄÄRÄ', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'KÄYTTÄJÄMÄÄRÄ', 'NUMBEROFUSERS' ),
-       'numberofedits'           => array( '1', 'MUOKKAUSMÄÄRÄ', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'SIVUHAKUMÄÄRÄ', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'SIVUNIMI', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'SIVUNIMIE', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'NIMIAVARUUS', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'NIMIAVARUUSE', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'KESKUSTELUAVARUUS', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'KESKUSTELUAVARUUSE', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'AIHEAVARUUS', 'ARTIKKELIAVARUUS', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'AIHEAVARUUSE', 'ARTIKKELIAVARUUSE', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'KOKOSIVUNIMI', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'KOKOSIVUNIMIE', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'ALASIVUNIMI', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'ALASIVUNIMIE', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'KANTASIVUNIMI', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'KANTASIVUNIMIE', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'KESKUSTELUSIVUNIMI', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'KESKUSTELUSIVUNIMIE', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'AIHESIVUNIMI', 'ARTIKKELISIVUNIMI', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'subjectpagenamee'        => array( '1', 'AIHESIVUNIMIE', 'ARTIKKELISIVUNIMIE', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
-       'subst'                   => array( '0', 'VASTINE:', 'SUBST:' ),
-       'img_thumbnail'           => array( '1', 'pienoiskuva', 'pienois', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'pienoiskuva=$1', 'pienois=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'oikea', 'right' ),
-       'img_left'                => array( '1', 'vasen', 'left' ),
-       'img_none'                => array( '1', 'tyhjä', 'none' ),
-       'img_center'              => array( '1', 'keskitetty', 'keski', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'kehys', 'kehystetty', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', 'kehyksetön', 'frameless' ),
-       'img_page'                => array( '1', 'sivu=$1', 'sivu $1', 'page=$1', 'page $1' ),
-       'img_upright'             => array( '1', 'yläoikea', 'yläoikea=$1', 'yläoikea $1', 'upright', 'upright=$1', 'upright $1' ),
-       'img_border'              => array( '1', 'reunus', 'border' ),
-       'img_baseline'            => array( '1', 'perustaso', 'baseline' ),
-       'img_sub'                 => array( '1', 'alaindeksi', 'sub' ),
-       'img_super'               => array( '1', 'yläindeksi', 'super', 'sup' ),
-       '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:' ),
-       'localurle'               => array( '0', 'PAIKALLINENOSOITEE:', 'LOCALURLE:' ),
-       'server'                  => array( '0', 'PALVELIN', 'SERVER' ),
-       'servername'              => array( '0', 'PALVELINNIMI', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'SKRIPTIPOLKU', 'SCRIPTPATH' ),
-       'grammar'                 => array( '0', 'TAIVUTUS:', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'SUKUPUOLI:', 'GENDER:' ),
-       'currentweek'             => array( '1', 'KULUVAVIIKKO', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'KULUVAVIIKONPÄIVÄ', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'PAIKALLINENVIIKKO', 'LOCALWEEK' ),
-       'localdow'                => array( '1', 'PAIKALLINENVIIKONPÄIVÄ', 'LOCALDOW' ),
-       'revisionid'              => array( '1', 'VERSIOID', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'VERSIOPÄIVÄ', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'VERSIOPÄIVÄ2', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'VERSIOKUUKAUSI', 'REVISIONMONTH' ),
-       'revisionyear'            => array( '1', 'VERSIOVUOSI', 'REVISIONYEAR' ),
-       'revisiontimestamp'       => array( '1', 'VERSIOAIKALEIMA', 'REVISIONTIMESTAMP' ),
-       'plural'                  => array( '0', 'MONIKKO:', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'TÄYSIOSOITE:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'TÄYSIOSOITEE:', 'FULLURLE:' ),
-       'displaytitle'            => array( '1', 'NÄKYVÄOTSIKKO', 'DISPLAYTITLE' ),
-       'currentversion'          => array( '1', 'NYKYINENVERSIO', 'CURRENTVERSION' ),
-       'currenttimestamp'        => array( '1', 'KULUVAAIKALEIMA', 'CURRENTTIMESTAMP' ),
-       'localtimestamp'          => array( '1', 'PAIKALLINENAIKALEIMA', 'LOCALTIMESTAMP' ),
-       'language'                => array( '0', '#KIELI:', '#LANGUAGE:' ),
-       'numberofadmins'          => array( '1', 'YLLÄPITÄJÄMÄÄRÄ', 'NUMBEROFADMINS' ),
-       'formatnum'               => array( '0', 'MUOTOILELUKU', 'FORMATNUM' ),
-       'defaultsort'             => array( '1', 'AAKKOSTUS:', 'OLETUSAAKKOSTUS:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'filepath'                => array( '0', 'TIEDOSTOPOLKU:', 'FILEPATH:' ),
-       'hiddencat'               => array( '1', '__PIILOLUOKKA__', '__HIDDENCAT__' ),
-       'pagesize'                => array( '1', 'SIVUKOKO', 'PAGESIZE' ),
-       'noindex'                 => array( '1', '__HAKUKONEKIELTO__', '__NOINDEX__' ),
-       'protectionlevel'         => array( '1', 'SUOJAUSTASO', 'PROTECTIONLEVEL' ),
+       'redirect'                  => array( '0', '#OHJAUS', '#UUDELLEENOHJAUS', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__EISISLUETT__', '__NOTOC__' ),
+       'forcetoc'                  => array( '0', '__SISLUETTPAKOTUS__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__SISÄLLYSLUETTELO__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__EIOSIOMUOKKAUSTA__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '__EIOTSIKKOA__', '__NOHEADER__' ),
+       'currentmonth'              => array( '1', 'KULUVAKUU', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonthname'          => array( '1', 'KULUVAKUUNIMI', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'KULUVAKUUNIMIGEN', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'KULUVAKUUNIMILYHYT', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'KULUVAPÄIVÄ', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'KULUVAPÄIVÄ2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'KULUVAPÄIVÄNIMI', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'KULUVAVUOSI', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'KULUVAAIKA', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'KULUVATUNTI', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'PAIKALLINENKUU', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonthname'            => array( '1', 'PAIKALLINENKUUNIMI', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'PAIKALLINENKUUNIMIGEN', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'PAIKALLINENKUUNIMILYHYT', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'PAIKALLINENPÄIVÄ', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'PAIKALLINENPÄIVÄ2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'PAIKALLINENPÄIVÄNIMI', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'PAIKALLINENVUOSI', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'PAIKALLINENAIKA', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'PAIKALLINENTUNTI', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'SIVUMÄÄRÄ', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'ARTIKKELIMÄÄRÄ', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'TIEDOSTOMÄÄRÄ', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'KÄYTTÄJÄMÄÄRÄ', 'NUMBEROFUSERS' ),
+       'numberofedits'             => array( '1', 'MUOKKAUSMÄÄRÄ', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'SIVUHAKUMÄÄRÄ', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'SIVUNIMI', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'SIVUNIMIE', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'NIMIAVARUUS', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'NIMIAVARUUSE', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'KESKUSTELUAVARUUS', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'KESKUSTELUAVARUUSE', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'AIHEAVARUUS', 'ARTIKKELIAVARUUS', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'AIHEAVARUUSE', 'ARTIKKELIAVARUUSE', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'KOKOSIVUNIMI', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'KOKOSIVUNIMIE', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'ALASIVUNIMI', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'ALASIVUNIMIE', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'KANTASIVUNIMI', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'KANTASIVUNIMIE', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'KESKUSTELUSIVUNIMI', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'KESKUSTELUSIVUNIMIE', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'AIHESIVUNIMI', 'ARTIKKELISIVUNIMI', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'          => array( '1', 'AIHESIVUNIMIE', 'ARTIKKELISIVUNIMIE', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+       'subst'                     => array( '0', 'VASTINE:', 'SUBST:' ),
+       'img_thumbnail'             => array( '1', 'pienoiskuva', 'pienois', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'pienoiskuva=$1', 'pienois=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'oikea', 'right' ),
+       'img_left'                  => array( '1', 'vasen', 'left' ),
+       'img_none'                  => array( '1', 'tyhjä', 'none' ),
+       'img_center'                => array( '1', 'keskitetty', 'keski', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'kehys', 'kehystetty', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'kehyksetön', 'frameless' ),
+       'img_page'                  => array( '1', 'sivu=$1', 'sivu $1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', 'yläoikea', 'yläoikea=$1', 'yläoikea $1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_border'                => array( '1', 'reunus', 'border' ),
+       'img_baseline'              => array( '1', 'perustaso', 'baseline' ),
+       'img_sub'                   => array( '1', 'alaindeksi', 'sub' ),
+       'img_super'                 => array( '1', 'yläindeksi', 'super', 'sup' ),
+       '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:' ),
+       'localurle'                 => array( '0', 'PAIKALLINENOSOITEE:', 'LOCALURLE:' ),
+       'server'                    => array( '0', 'PALVELIN', 'SERVER' ),
+       'servername'                => array( '0', 'PALVELINNIMI', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'SKRIPTIPOLKU', 'SCRIPTPATH' ),
+       'grammar'                   => array( '0', 'TAIVUTUS:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'SUKUPUOLI:', 'GENDER:' ),
+       'currentweek'               => array( '1', 'KULUVAVIIKKO', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'KULUVAVIIKONPÄIVÄ', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'PAIKALLINENVIIKKO', 'LOCALWEEK' ),
+       'localdow'                  => array( '1', 'PAIKALLINENVIIKONPÄIVÄ', 'LOCALDOW' ),
+       'revisionid'                => array( '1', 'VERSIOID', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'VERSIOPÄIVÄ', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'VERSIOPÄIVÄ2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'VERSIOKUUKAUSI', 'REVISIONMONTH' ),
+       'revisionyear'              => array( '1', 'VERSIOVUOSI', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'VERSIOAIKALEIMA', 'REVISIONTIMESTAMP' ),
+       'plural'                    => array( '0', 'MONIKKO:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'TÄYSIOSOITE:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'TÄYSIOSOITEE:', 'FULLURLE:' ),
+       'displaytitle'              => array( '1', 'NÄKYVÄOTSIKKO', 'DISPLAYTITLE' ),
+       'currentversion'            => array( '1', 'NYKYINENVERSIO', 'CURRENTVERSION' ),
+       'currenttimestamp'          => array( '1', 'KULUVAAIKALEIMA', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', 'PAIKALLINENAIKALEIMA', 'LOCALTIMESTAMP' ),
+       'language'                  => array( '0', '#KIELI:', '#LANGUAGE:' ),
+       'numberofadmins'            => array( '1', 'YLLÄPITÄJÄMÄÄRÄ', 'NUMBEROFADMINS' ),
+       'formatnum'                 => array( '0', 'MUOTOILELUKU', 'FORMATNUM' ),
+       'defaultsort'               => array( '1', 'AAKKOSTUS:', 'OLETUSAAKKOSTUS:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'filepath'                  => array( '0', 'TIEDOSTOPOLKU:', 'FILEPATH:' ),
+       'hiddencat'                 => array( '1', '__PIILOLUOKKA__', '__HIDDENCAT__' ),
+       'pagesize'                  => array( '1', 'SIVUKOKO', 'PAGESIZE' ),
+       'noindex'                   => array( '1', '__HAKUKONEKIELTO__', '__NOINDEX__' ),
+       'protectionlevel'           => array( '1', 'SUOJAUSTASO', 'PROTECTIONLEVEL' ),
 );
 
 $specialPageAliases = array(
@@ -485,7 +485,7 @@ $messages = array(
 'tagline' => '{{SITENAME}}',
 'help' => 'Ohje',
 'search' => 'Haku',
-'searchbutton' => 'Etsi',
+'searchbutton' => 'Hae',
 'go' => 'Siirry',
 'searcharticle' => 'Siirry',
 'history' => 'Historia',
index 5fae770..5b1f34a 100644 (file)
@@ -65,6 +65,7 @@
  * @author Sandji
  * @author Seb35
  * @author Sherbrooke
+ * @author Shirayuki
  * @author Skalman
  * @author The Evil IP address
  * @author Tititou36
@@ -135,143 +136,143 @@ $dateFormats = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#REDIRECTION', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__AUCUNSOMMAIRE__', '__AUCUNETDM__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__AUCUNEGALERIE__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__FORCERSOMMAIRE__', '__FORCERTDM__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__SOMMAIRE__', '__TDM__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__SECTIONNONEDITABLE__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '__AUCUNENTETE__', '__NOHEADER__' ),
-       'currentmonth'            => array( '1', 'MOISACTUEL', 'MOIS2ACTUEL', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', 'MOIS1ACTUEL', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', 'NOMMOISACTUEL', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'NOMGENMOISACTUEL', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'ABREVMOISACTUEL', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'JOURACTUEL', 'JOUR1ACTUEL', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'JOUR2ACTUEL', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'NOMJOURACTUEL', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'ANNEEACTUELLE', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'HORAIREACTUEL', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'HEUREACTUELLE', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'MOISLOCAL', 'MOIS2LOCAL', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', 'MOIS1LOCAL', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'NOMMOISLOCAL', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'NOMGENMOISLOCAL', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'ABREVMOISLOCAL', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'JOURLOCAL', 'JOUR1LOCAL', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'JOUR2LOCAL', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'NOMJOURLOCAL', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'ANNEELOCALE', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'HORAIRELOCAL', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'HEURELOCALE', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'NOMBREPAGES', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'NOMBREARTICLES', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'NOMBREFICHIERS', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'NOMBREUTILISATEURS', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'NOMBREUTILISATEURSACTIFS', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'NOMBREMODIFS', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'NOMBREVUES', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'NOMPAGE', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'NOMPAGEX', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'ESPACENOMMAGE', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'ESPACENOMMAGEX', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'ESPACEDISCUSSION', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'ESPACEDISCUSSIONX', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'ESPACESUJET', 'ESPACEARTICLE', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'ESPACESUJETX', 'ESPACEARTICLEX', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'NOMPAGECOMPLET', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'NOMPAGECOMPLETX', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'NOMSOUSPAGE', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'NOMSOUSPAGEX', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'NOMBASEDEPAGE', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'NOMBASEDEPAGEX', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'NOMPAGEDISCUSSION', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'NOMPAGEDISCUSSIONX', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'NOMPAGESUJET', 'NOMPAGEARTICLE', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'subjectpagenamee'        => array( '1', 'NOMPAGESUJETX', 'NOMPAGEARTICLEX', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
-       'img_thumbnail'           => array( '1', 'vignette', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'vignette=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'droite', 'right' ),
-       'img_left'                => array( '1', 'gauche', 'left' ),
-       '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', '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_sub'                 => array( '1', 'indice', 'ind', 'sub' ),
-       'img_super'               => array( '1', 'exposant', 'exp', 'super', 'sup' ),
-       'img_top'                 => array( '1', 'haut', 'top' ),
-       'img_text_top'            => array( '1', 'haut-texte', 'haut-txt', 'text-top' ),
-       'img_middle'              => array( '1', 'milieu', 'middle' ),
-       'img_bottom'              => array( '1', 'bas', 'bottom' ),
-       'img_text_bottom'         => array( '1', 'bas-texte', 'bas-txt', 'text-bottom' ),
-       'img_link'                => array( '1', 'lien=$1', 'link=$1' ),
-       'sitename'                => array( '1', 'NOMSITE', 'SITENAME' ),
-       'ns'                      => array( '0', 'ESPACEN:', 'NS:' ),
-       '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' ),
-       'stylepath'               => array( '0', 'CHEMINSTYLE', 'STYLEPATH' ),
-       'grammar'                 => array( '0', 'GRAMMAIRE:', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'GENRE:', 'GENDER:' ),
-       'notitleconvert'          => array( '0', '__SANSCONVERSIONTITRE__', '__SANSCT__', '__NOTITLECONVERT__', '__NOTC__' ),
-       'nocontentconvert'        => array( '0', '__SANSCONVERSIONCONTENU__', '__SANSCC__', '__NOCONTENTCONVERT__', '__NOCC__' ),
-       'currentweek'             => array( '1', 'SEMAINEACTUELLE', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'JDSACTUEL', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'SEMAINELOCALE', 'LOCALWEEK' ),
-       'localdow'                => array( '1', 'JDSLOCAL', 'LOCALDOW' ),
-       'revisionid'              => array( '1', 'IDVERSION', 'REVISIONID' ),
-       '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' ),
-       'plural'                  => array( '0', 'PLURIEL:', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'URLCOMPLETE:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'URLCOMPLETEX:', 'FULLURLE:' ),
-       'lcfirst'                 => array( '0', 'INITMINUS:', 'LCFIRST:' ),
-       'ucfirst'                 => array( '0', 'INITMAJUS:', 'INITCAPIT:', 'UCFIRST:' ),
-       'lc'                      => array( '0', 'MINUS:', 'LC:' ),
-       'uc'                      => array( '0', 'MAJUS:', 'CAPIT:', 'UC:' ),
-       'raw'                     => array( '0', 'BRUT:', 'RAW:' ),
-       'displaytitle'            => array( '1', 'AFFICHERTITRE', 'DISPLAYTITLE' ),
-       'rawsuffix'               => array( '1', 'BRUT', 'B', 'R' ),
-       'newsectionlink'          => array( '1', '__LIENNOUVELLESECTION__', '__NEWSECTIONLINK__' ),
-       'nonewsectionlink'        => array( '1', '__AUCUNLIENNOUVELLESECTION__', '__NONEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', 'VERSIONACTUELLE', 'CURRENTVERSION' ),
-       'urlencode'               => array( '0', 'ENCODEURL:', 'URLENCODE:' ),
-       'anchorencode'            => array( '0', 'ENCODEANCRE', 'ANCHORENCODE' ),
-       'currenttimestamp'        => array( '1', 'INSTANTACTUEL', 'CURRENTTIMESTAMP' ),
-       'localtimestamp'          => array( '1', 'INSTANTLOCAL', 'LOCALTIMESTAMP' ),
-       'directionmark'           => array( '1', 'MARQUEDIRECTION', 'MARQUEDIR', 'DIRECTIONMARK', 'DIRMARK' ),
-       'language'                => array( '0', '#LANGUE:', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', 'LANGUECONTENU', 'LANGCONTENU', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'        => array( '1', 'PAGESDANSESPACE:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'          => array( '1', 'NOMBREADMINS', 'NUMBEROFADMINS' ),
-       'formatnum'               => array( '0', 'FORMATNOMBRE', 'FORMATNUM' ),
-       'padleft'                 => array( '0', 'BOURRAGEGAUCHE', 'BOURREGAUCHE', 'PADLEFT' ),
-       'padright'                => array( '0', 'BOURRAGEDROITE', 'BOURREDROITE', 'PADRIGHT' ),
-       'special'                 => array( '0', 'spécial', 'special' ),
-       'defaultsort'             => array( '1', 'CLEFDETRI:', 'CLEDETRI:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'filepath'                => array( '0', 'CHEMIN:', 'FILEPATH:' ),
-       'tag'                     => array( '0', 'balise', 'tag' ),
-       'hiddencat'               => array( '1', '__CATCACHEE__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'PAGESDANSCAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'TAILLEPAGE', 'PAGESIZE' ),
-       'noindex'                 => array( '1', '__AUCUNINDEX__', '__NOINDEX__' ),
-       'numberingroup'           => array( '1', 'NOMBREDANSGROUPE', 'NBDANSGROUPE', 'NUMBERINGROUP', 'NUMINGROUP' ),
-       'staticredirect'          => array( '1', '__REDIRECTIONSTATIQUE__', '__STATICREDIRECT__' ),
-       'protectionlevel'         => array( '1', 'NIVEAUDEPROTECTION', 'PROTECTIONLEVEL' ),
-       'url_path'                => array( '0', 'CHEMIN', 'PATH' ),
-       'url_query'               => array( '0', 'QUESTION', 'QUERY' ),
+       'redirect'                  => array( '0', '#REDIRECTION', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__AUCUNSOMMAIRE__', '__AUCUNETDM__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__AUCUNEGALERIE__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__FORCERSOMMAIRE__', '__FORCERTDM__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__SOMMAIRE__', '__TDM__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__SECTIONNONEDITABLE__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '__AUCUNENTETE__', '__NOHEADER__' ),
+       'currentmonth'              => array( '1', 'MOISACTUEL', 'MOIS2ACTUEL', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'MOIS1ACTUEL', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'NOMMOISACTUEL', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'NOMGENMOISACTUEL', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'ABREVMOISACTUEL', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'JOURACTUEL', 'JOUR1ACTUEL', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'JOUR2ACTUEL', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'NOMJOURACTUEL', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'ANNEEACTUELLE', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'HORAIREACTUEL', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'HEUREACTUELLE', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'MOISLOCAL', 'MOIS2LOCAL', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'MOIS1LOCAL', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'NOMMOISLOCAL', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'NOMGENMOISLOCAL', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'ABREVMOISLOCAL', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'JOURLOCAL', 'JOUR1LOCAL', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'JOUR2LOCAL', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'NOMJOURLOCAL', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'ANNEELOCALE', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'HORAIRELOCAL', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'HEURELOCALE', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'NOMBREPAGES', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'NOMBREARTICLES', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'NOMBREFICHIERS', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'NOMBREUTILISATEURS', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'NOMBREUTILISATEURSACTIFS', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'NOMBREMODIFS', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'NOMBREVUES', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'NOMPAGE', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'NOMPAGEX', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'ESPACENOMMAGE', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'ESPACENOMMAGEX', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'ESPACEDISCUSSION', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'ESPACEDISCUSSIONX', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'ESPACESUJET', 'ESPACEARTICLE', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'ESPACESUJETX', 'ESPACEARTICLEX', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'NOMPAGECOMPLET', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'NOMPAGECOMPLETX', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'NOMSOUSPAGE', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'NOMSOUSPAGEX', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'NOMBASEDEPAGE', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'NOMBASEDEPAGEX', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'NOMPAGEDISCUSSION', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'NOMPAGEDISCUSSIONX', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'NOMPAGESUJET', 'NOMPAGEARTICLE', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'          => array( '1', 'NOMPAGESUJETX', 'NOMPAGEARTICLEX', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+       'img_thumbnail'             => array( '1', 'vignette', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'vignette=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'droite', 'right' ),
+       'img_left'                  => array( '1', 'gauche', 'left' ),
+       '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', '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_sub'                   => array( '1', 'indice', 'ind', 'sub' ),
+       'img_super'                 => array( '1', 'exposant', 'exp', 'super', 'sup' ),
+       'img_top'                   => array( '1', 'haut', 'top' ),
+       'img_text_top'              => array( '1', 'haut-texte', 'haut-txt', 'text-top' ),
+       'img_middle'                => array( '1', 'milieu', 'middle' ),
+       'img_bottom'                => array( '1', 'bas', 'bottom' ),
+       'img_text_bottom'           => array( '1', 'bas-texte', 'bas-txt', 'text-bottom' ),
+       'img_link'                  => array( '1', 'lien=$1', 'link=$1' ),
+       'sitename'                  => array( '1', 'NOMSITE', 'SITENAME' ),
+       'ns'                        => array( '0', 'ESPACEN:', 'NS:' ),
+       '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' ),
+       'stylepath'                 => array( '0', 'CHEMINSTYLE', 'STYLEPATH' ),
+       'grammar'                   => array( '0', 'GRAMMAIRE:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'GENRE:', 'GENDER:' ),
+       'notitleconvert'            => array( '0', '__SANSCONVERSIONTITRE__', '__SANSCT__', '__NOTITLECONVERT__', '__NOTC__' ),
+       'nocontentconvert'          => array( '0', '__SANSCONVERSIONCONTENU__', '__SANSCC__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+       'currentweek'               => array( '1', 'SEMAINEACTUELLE', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'JDSACTUEL', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'SEMAINELOCALE', 'LOCALWEEK' ),
+       'localdow'                  => array( '1', 'JDSLOCAL', 'LOCALDOW' ),
+       'revisionid'                => array( '1', 'IDVERSION', 'REVISIONID' ),
+       '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' ),
+       'plural'                    => array( '0', 'PLURIEL:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'URLCOMPLETE:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'URLCOMPLETEX:', 'FULLURLE:' ),
+       'lcfirst'                   => array( '0', 'INITMINUS:', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', 'INITMAJUS:', 'INITCAPIT:', 'UCFIRST:' ),
+       'lc'                        => array( '0', 'MINUS:', 'LC:' ),
+       'uc'                        => array( '0', 'MAJUS:', 'CAPIT:', 'UC:' ),
+       'raw'                       => array( '0', 'BRUT:', 'RAW:' ),
+       'displaytitle'              => array( '1', 'AFFICHERTITRE', 'DISPLAYTITLE' ),
+       'rawsuffix'                 => array( '1', 'BRUT', 'B', 'R' ),
+       'newsectionlink'            => array( '1', '__LIENNOUVELLESECTION__', '__NEWSECTIONLINK__' ),
+       'nonewsectionlink'          => array( '1', '__AUCUNLIENNOUVELLESECTION__', '__NONEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'VERSIONACTUELLE', 'CURRENTVERSION' ),
+       'urlencode'                 => array( '0', 'ENCODEURL:', 'URLENCODE:' ),
+       'anchorencode'              => array( '0', 'ENCODEANCRE', 'ANCHORENCODE' ),
+       'currenttimestamp'          => array( '1', 'INSTANTACTUEL', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', 'INSTANTLOCAL', 'LOCALTIMESTAMP' ),
+       'directionmark'             => array( '1', 'MARQUEDIRECTION', 'MARQUEDIR', 'DIRECTIONMARK', 'DIRMARK' ),
+       'language'                  => array( '0', '#LANGUE:', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'LANGUECONTENU', 'LANGCONTENU', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', 'PAGESDANSESPACE:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', 'NOMBREADMINS', 'NUMBEROFADMINS' ),
+       'formatnum'                 => array( '0', 'FORMATNOMBRE', 'FORMATNUM' ),
+       'padleft'                   => array( '0', 'BOURRAGEGAUCHE', 'BOURREGAUCHE', 'PADLEFT' ),
+       'padright'                  => array( '0', 'BOURRAGEDROITE', 'BOURREDROITE', 'PADRIGHT' ),
+       'special'                   => array( '0', 'spécial', 'special' ),
+       'defaultsort'               => array( '1', 'CLEFDETRI:', 'CLEDETRI:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'filepath'                  => array( '0', 'CHEMIN:', 'FILEPATH:' ),
+       'tag'                       => array( '0', 'balise', 'tag' ),
+       'hiddencat'                 => array( '1', '__CATCACHEE__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'PAGESDANSCAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'TAILLEPAGE', 'PAGESIZE' ),
+       'noindex'                   => array( '1', '__AUCUNINDEX__', '__NOINDEX__' ),
+       'numberingroup'             => array( '1', 'NOMBREDANSGROUPE', 'NBDANSGROUPE', 'NUMBERINGROUP', 'NUMINGROUP' ),
+       'staticredirect'            => array( '1', '__REDIRECTIONSTATIQUE__', '__STATICREDIRECT__' ),
+       'protectionlevel'           => array( '1', 'NIVEAUDEPROTECTION', 'PROTECTIONLEVEL' ),
+       'url_path'                  => array( '0', 'CHEMIN', 'PATH' ),
+       'url_query'                 => array( '0', 'QUESTION', 'QUERY' ),
 );
 
 $specialPageAliases = array(
@@ -1497,7 +1498,7 @@ Voici une valeur générée aléatoirement que vous pouvez utiliser : $1',
 'prefs-registration' => 'Date d’inscription :',
 'yourrealname' => 'Nom réel :',
 'yourlanguage' => 'Langue :',
-'yourvariant' => 'Variante de la langue du contenu:',
+'yourvariant' => 'Variante de la langue du contenu :',
 'prefs-help-variant' => 'Votre variante ou orthographe préféré dans lequel afficher les pages de contenu de ce wiki.',
 'yournick' => 'Signature pour les discussions :',
 'prefs-help-signature' => 'Les commentaires sur les pages de discussion doivent être signés avec « <nowiki>~~~~</nowiki> », qui sera converti par votre signature et un horodatage.',
@@ -1924,12 +1925,12 @@ Si le problème persiste, contactez un [[Special:ListUsers/sysop|administrateur]
 'lockmanager-fail-svr-release' => 'Impossible de relâcher les verrous sur le serveur $1.',
 
 # ZipDirectoryReader
-'zip-file-open-error' => "Une erreur s'est produite lors de l'ouverture du fichier ZIP pour contrôle.",
-'zip-wrong-format' => "Le fichier spécifié n'est pas un fichier ZIP.",
-'zip-bad' => 'Le fichier est un fichier ZIP corrompu ou illisible.
+'zip-file-open-error' => 'Une erreur s’est produite lors de l’ouverture du fichier ZIP pour contrôle.',
+'zip-wrong-format' => 'Le fichier spécifié n’est pas une archive ZIP.',
+'zip-bad' => 'Le fichier est une archive ZIP corrompue ou illisible.
 Il ne peut pas être correctement vérifié pour la sécurité.',
-'zip-unsupported' => 'Le fichier est un fichier ZIP qui utilise ZIP non supportées par MediaWiki. 
-Il ne peut pas être correctement vérifé pour la sécurité.',
+'zip-unsupported' => 'Le fichier est une archive ZIP qui utilise des caractéristiques non supportées par MediaWiki. 
+Sa sécurité ne peut pas être correctement vérifiée.',
 
 # Special:UploadStash
 'uploadstash' => "Cache d'import",
@@ -2039,6 +2040,7 @@ Vous voulez peut-être modifier la description sur sa [$2 page de description].'
 'shared-repo' => 'un dépôt partagé',
 'shared-repo-name-wikimediacommons' => 'Wikimédia Commons',
 'filepage.css' => '/* Les styles CSS placés ici sont inclus dans la page de description du fichier, également incluse sur les clients wikis étrangers */',
+'upload-disallowed-here' => 'Malheureusement, vous ne peut pas remplacer cette image.',
 
 # File reversion
 'filerevert' => 'Rétablir $1',
@@ -2681,7 +2683,7 @@ Donnez ci-dessous un motif précis (par exemple en citant les pages qui ont ét
 'ipbreason-dropdown' => '* Motifs de blocage les plus fréquents
 ** Insertion de fausses informations
 ** Suppression injustifiée de contenu des pages
-** Insertion répétée de liens externes publicitaires (spam)
+** Insertion répétée de liens externes publicitaires (pollupostage)
 ** Insertion de contenu sans aucun sens et de déchets dans les pages
 ** Tentative d’intimidation ou harcèlement
 ** Abus d’utilisation de comptes multiples
@@ -3164,6 +3166,8 @@ Permet de rétablir la version précédente et d’ajouter un motif dans la boî
 'pageinfo-length' => 'Taille de la page (en octets)',
 'pageinfo-article-id' => 'Numéro de la page',
 'pageinfo-robot-policy' => 'Statut de moteur de recherche',
+'pageinfo-robot-index' => 'Indexable',
+'pageinfo-robot-noindex' => 'Non indexable',
 'pageinfo-views' => 'Nombre de vues',
 'pageinfo-watchers' => 'Nombre de contributeurs ayant la page dans leur liste de suivi',
 'pageinfo-redirects-name' => 'Redirections vers cette page',
@@ -3177,9 +3181,9 @@ Permet de rétablir la version précédente et d’ajouter un motif dans la boî
 'pageinfo-authors' => "Nombre total d'auteurs distincts",
 'pageinfo-recent-edits' => 'Nombre de modifications récentes (dans les derniers $1)',
 'pageinfo-recent-authors' => "Nombre d'auteurs distincts récents",
-'pageinfo-restriction' => 'Protection de la page ($1)',
-'pageinfo-magic-words' => 'Mots magiques ($1)',
-'pageinfo-hidden-categories' => 'Catégories cachées ($1)',
+'pageinfo-restriction' => 'Protection de la page (<code>{{lcfirst:$1}}</code>)',
+'pageinfo-magic-words' => '{{PLURAL:$1|Mot magique|Mots magiques}} ($1)',
+'pageinfo-hidden-categories' => '{{PLURAL:$1|Catégorie cachée|Catégories cachées}} ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|Modèle inclu|Modèles inclus}} ($1)',
 
 # Skin names
@@ -3235,6 +3239,7 @@ Si vous l’exécutez, votre système peut être compromis.",
 'file-info-size-pages' => '$1 × $2 pixels, taille de fichier: $3, type MIME: $4, $5 {{PLURAL:$5|page|pages}}',
 '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-animated' => 'Fichier SVG animé, taille $1 x $2 pixels, taille du fichier: $3',
 'show-big-image' => 'Image en plus haute résolution',
 'show-big-image-preview' => 'Taille de cet aperçu : $1.',
 'show-big-image-other' => '{{PLURAL:$2|Autre résolution|Autres résolutions}} : $1.',
@@ -3244,6 +3249,8 @@ Si vous l’exécutez, votre système peut être compromis.",
 '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}}',
+'file-no-thumb-animation' => "'''Remarque: En raison de limitations techniques, les vignettes de ce fichier ne seront pas animées.'''",
+'file-no-thumb-animation-gif' => "'''Remarque: En raison de limitations techniques, les vignettes d'images GIF en haute résolution telles que celle-ci ne seront pas animées.'''",
 
 # Special:NewFiles
 'newimages' => 'Galerie des nouveaux fichiers',
@@ -3861,11 +3868,59 @@ Vous pouvez aussi [[Special:EditWatchlist|utiliser l’éditeur normal]].',
 'watchlisttools-edit' => 'Voir et modifier la liste de suivi',
 'watchlisttools-raw' => 'Modifier la liste de suivi en mode brut',
 
+# Iranian month names
+'iranian-calendar-m1' => 'Farvardin',
+'iranian-calendar-m2' => 'Ordibehesht',
+'iranian-calendar-m3' => 'Khordâd',
+'iranian-calendar-m4' => 'Tir',
+'iranian-calendar-m5' => 'Mordâd',
+'iranian-calendar-m6' => 'Shahrivar',
+'iranian-calendar-m7' => 'Mehr',
+'iranian-calendar-m8' => 'Âbân',
+'iranian-calendar-m9' => 'Âzar',
+'iranian-calendar-m10' => 'Dey',
+'iranian-calendar-m11' => 'Bahman',
+'iranian-calendar-m12' => 'Esfand',
+
 # Hijri month names
-'hijri-calendar-m3' => 'Rabi’ al-awwal',
-'hijri-calendar-m4' => 'Rabi’ al-thani',
-'hijri-calendar-m8' => 'Sha’aban',
-'hijri-calendar-m11' => 'Dhu al-Qi’dah',
+'hijri-calendar-m1' => 'Mouharram',
+'hijri-calendar-m2' => 'Safar',
+'hijri-calendar-m3' => 'Rabia al awal',
+'hijri-calendar-m4' => 'Rabia ath-thani',
+'hijri-calendar-m5' => 'Joumada al oula',
+'hijri-calendar-m6' => 'Joumada ath-thania',
+'hijri-calendar-m7' => 'Rajab',
+'hijri-calendar-m8' => 'Chaabane',
+'hijri-calendar-m9' => 'Ramadan',
+'hijri-calendar-m10' => 'Chawwal',
+'hijri-calendar-m11' => 'Dhou al qi’da',
+'hijri-calendar-m12' => 'Dhou al-hijja',
+
+# Hebrew month names
+'hebrew-calendar-m1' => 'Tichri',
+'hebrew-calendar-m2' => 'Hèchvane',
+'hebrew-calendar-m3' => 'Kislev',
+'hebrew-calendar-m4' => 'Téveth',
+'hebrew-calendar-m5' => 'Schébat',
+'hebrew-calendar-m6' => 'Adar',
+'hebrew-calendar-m7' => 'Nissane',
+'hebrew-calendar-m8' => 'Iyar',
+'hebrew-calendar-m9' => 'Sivane',
+'hebrew-calendar-m10' => 'Tamouz',
+'hebrew-calendar-m11' => 'Av',
+'hebrew-calendar-m12' => 'Éloul',
+'hebrew-calendar-m1-gen' => 'Tichri',
+'hebrew-calendar-m2-gen' => 'Hèchvane',
+'hebrew-calendar-m3-gen' => 'Kislev',
+'hebrew-calendar-m4-gen' => 'Téveth',
+'hebrew-calendar-m5-gen' => 'Schébat',
+'hebrew-calendar-m6-gen' => 'Adar',
+'hebrew-calendar-m7-gen' => 'Nissane',
+'hebrew-calendar-m8-gen' => 'Iyar',
+'hebrew-calendar-m9-gen' => 'Sivane',
+'hebrew-calendar-m10-gen' => 'Tamouz',
+'hebrew-calendar-m11-gen' => 'Av',
+'hebrew-calendar-m12-gen' => 'Éloul',
 
 # Signatures
 'signature' => '[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|discussion]])',
index 7e02042..d62107b 100644 (file)
@@ -145,149 +145,149 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#REDIRÈCCION', '#REDIRECTION', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__NION_SOMÈRO__', '__NIONA_TRÂBLA__', '__AUCUNSOMMAIRE__', '__AUCUNETDM__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__NIONA_GALERIE__', '__AUCUNEGALERIE__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__FORCIÉR_LO_SOMÈRO__', '__FORCIÉR_LA_TRÂBLA__', '__FORCERSOMMAIRE__', '__FORCERTDM__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__SOMÈRO__', '__TRÂBLA__', '__SOMMAIRE__', '__TDM__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__SÈCCION_QUE_PÔT_PAS_ÉTRE_CHANGIÊ__', '__SECTIONNONEDITABLE__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '__NION_EN_TÉTA__', '__AUCUNENTETE__', '__NOHEADER__' ),
-       'currentmonth'            => array( '1', 'MÊS_D_ORA', 'MÊS_D_ORA_2', 'MOISACTUEL', 'MOIS2ACTUEL', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', 'MÊS_D_ORA_1', 'MOIS1ACTUEL', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', 'NOM_DU_MÊS_D_ORA', 'NOMMOISACTUEL', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'GÈNITIF_DU_NOM_DU_MÊS_D_ORA', 'NOMGENMOISACTUEL', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'ABRÈV_DU_MÊS_D_ORA', 'ABREVMOISACTUEL', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'JORN_D_ORA', 'JOURACTUEL', 'JOUR1ACTUEL', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'JORN_D_ORA_2', 'JOUR2ACTUEL', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'NOM_DU_JORN_D_ORA', 'NOMJOURACTUEL', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'AN_D_ORA', 'ANNEEACTUELLE', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'HORÈRO_D_ORA', 'HORAIREACTUEL', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'HORA_D_ORA', 'HEUREACTUELLE', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'MÊS_LOCAL', 'MÊS_LOCAL_2', 'MOISLOCAL', 'MOIS2LOCAL', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', 'MÊS_LOCAL_1', 'MOIS1LOCAL', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'NOM_DU_MÊS_LOCAL', 'NOMMOISLOCAL', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'GÈNITIF_DU_NOM_DU_MÊS_LOCAL', 'NOMGENMOISLOCAL', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'ABRÈV_DU_MÊS_LOCAL', 'ABREVMOISLOCAL', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'JORN_LOCAL', 'JOURLOCAL', 'JOUR1LOCAL', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'JORN_LOCAL_2', 'JOUR2LOCAL', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'NOM_DU_JORN_LOCAL', 'NOMJOURLOCAL', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'AN_LOCAL', 'ANNEELOCALE', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'HORÈRO_LOCAL', 'HORAIRELOCAL', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'HORA_LOCALA', 'HEURELOCALE', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'NOMBRO_DE_PÂGES', 'NOMBREPAGES', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'NOMBRO_D_ARTICLLOS', 'NOMBREARTICLES', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'NOMBRO_DE_FICHIÉRS', 'NOMBREFICHIERS', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'NOMBRO_D_USANCIÉRS', 'NOMBREUTILISATEURS', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'NOMBRO_D_USANCIÉRS_ACTIFS', 'NOMBREUTILISATEURSACTIFS', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'NOMBRO_DE_CHANGEMENTS', 'NOMBREMODIFS', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'NOMBRO_DE_VUES', 'NOMBREVUES', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'NOM_DE_LA_PÂGE', 'NOMPAGE', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'NOM_DE_LA_PÂGE_URL', 'NOMPAGEX', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'ÈSPÂÇO_DE_NOMS', 'ESPACENOMMAGE', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'ÈSPÂÇO_DE_NOMS_URL', 'ESPACENOMMAGEX', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'ÈSPÂÇO_DE_DISCUSSION', 'ESPACEDISCUSSION', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'ÈSPÂÇO_DE_DISCUSSION_URL', 'ESPACEDISCUSSIONX', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'ÈSPÂÇO_DU_SUJÈT', 'ÈSPÂÇO_DE_L_ARTICLLO', 'ESPACESUJET', 'ESPACEARTICLE', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'ÈSPÂÇO_DU_SUJÈT_URL', 'ÈSPÂÇO_DE_L_ARTICLLO_URL', 'ESPACESUJETX', 'ESPACEARTICLEX', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'NOM_COMPLÈT_DE_LA_PÂGE', 'NOMPAGECOMPLET', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'NOM_COMPLÈT_DE_LA_PÂGE_URL', 'NOMPAGECOMPLETX', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'NOM_DE_LA_SOT_PÂGE', 'NOMSOUSPAGE', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'NOM_DE_LA_SOT_PÂGE_URL', 'NOMSOUSPAGEX', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'NOM_DE_LA_PÂGE_DE_BÂSA', 'NOMBASEDEPAGE', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'NOM_DE_LA_PÂGE_DE_BÂSA_URL', 'NOMBASEDEPAGEX', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'NOM_DE_LA_PÂGE_DE_DISCUSSION', 'NOMPAGEDISCUSSION', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'NOM_DE_LA_PÂGE_DE_DISCUSSION_URL', 'NOMPAGEDISCUSSIONX', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'NOM_DE_LA_PÂGE_DU_SUJÈT', 'NOM_DE_LA_PÂGE_DE_L_ARTICLLO', 'NOMPAGESUJET', 'NOMPAGEARTICLE', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'subjectpagenamee'        => array( '1', 'NOM_DE_LA_PÂGE_DU_SUJÈT_URL', 'NOM_DE_LA_PÂGE_DE_L_ARTICLLO_URL', 'NOMPAGESUJETX', 'NOMPAGEARTICLEX', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
-       'msg'                     => array( '0', 'MSJ:', 'MSG:' ),
-       'msgnw'                   => array( '0', 'MSJNV:', 'MSGNW:' ),
-       'img_thumbnail'           => array( '1', 'figura', 'vignette', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'figura=$1', 'vignette=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'drêta', 'droite', 'right' ),
-       'img_left'                => array( '1', 'gôche', 'gauche', 'left' ),
-       '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', 'pas_encâdrâ', '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_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' ),
-       'img_text_top'            => array( '1', 'tèxto-d\'amont', 'haut-texte', 'haut-txt', 'text-top' ),
-       'img_middle'              => array( '1', 'entre-mié', 'milieu', 'middle' ),
-       'img_bottom'              => array( '1', 'd\'avâl', 'bas', 'bottom' ),
-       'img_text_bottom'         => array( '1', 'tèxto-d\'avâl', 'bas-texte', 'bas-txt', 'text-bottom' ),
-       'img_link'                => array( '1', 'lim=$1', 'lien=$1', 'link=$1' ),
-       'int'                     => array( '0', 'ENT:', 'INT:' ),
-       'sitename'                => array( '1', 'NOM_DU_SETO', 'NOMSITE', 'SITENAME' ),
-       'ns'                      => array( '0', 'ÈDN:', 'ESPACEN:', 'NS:' ),
-       'nse'                     => array( '0', 'ÈDN_URL:', 'ESPACENX:', 'NSE:' ),
-       'localurl'                => array( '0', 'URL_LOCALA:', 'URLLOCALE:', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'URL_LOCALA_URL:', 'URLLOCALEX:', 'LOCALURLE:' ),
-       'articlepath'             => array( '0', 'CHEMIN_DE_L_ARTICLLO', 'CHEMINARTICLE', 'ARTICLEPATH' ),
-       'server'                  => array( '0', 'SÈRVOR', 'SERVEUR', 'SERVER' ),
-       'servername'              => array( '0', 'NOM_DU_SÈRVOR', 'NOMSERVEUR', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'CHEMIN_DU_SCRIPTE', 'CHEMINSCRIPT', 'SCRIPTPATH' ),
-       'stylepath'               => array( '0', 'CHEMIN_DU_STILO', 'CHEMINSTYLE', 'STYLEPATH' ),
-       'grammar'                 => array( '0', 'GRAMÈRE:', 'GRAMMAIRE:', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'GENRO:', 'GENRE:', 'GENDER:' ),
-       'notitleconvert'          => array( '0', '__SEN_CONVÈRSION_DE_TITRO__', '__SENCDT__', '__SANSCONVERSIONTITRE__', '__SANSCT__', '__NOTITLECONVERT__', '__NOTC__' ),
-       'nocontentconvert'        => array( '0', '__SEN_CONVÈRSION_DE_CONTEGNU__', '__SENCDC__', '__SANSCONVERSIONCONTENU__', '__SANSCC__', '__NOCONTENTCONVERT__', '__NOCC__' ),
-       'currentweek'             => array( '1', 'SEMANA_D_ORA', 'SEMAINEACTUELLE', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'JDS_D_ORA', 'JDSACTUEL', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'SEMANA_LOCALA', 'SEMAINELOCALE', 'LOCALWEEK' ),
-       'localdow'                => array( '1', 'JDS_LOCAL', 'JDSLOCAL', 'LOCALDOW' ),
-       'revisionid'              => array( '1', 'NUMERÔ_DE_LA_VÈRSION', 'IDVERSION', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'JORN_DE_LA_VÈRSION', 'JOURVERSION', 'JOUR1VERSION', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'JORN_DE_LA_VÈRSION_2', 'JOUR2VERSION', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'MÊS_DE_LA_VÈRSION', 'MOISVERSION', 'REVISIONMONTH' ),
-       'revisionmonth1'          => array( '1', 'MÊS_DE_LA_VÈRSION_1', 'MOISVERSION1', 'REVISIONMONTH1' ),
-       'revisionyear'            => array( '1', 'AN_DE_LA_VÈRSION', 'ANNEEVERSION', 'REVISIONYEAR' ),
-       'revisiontimestamp'       => array( '1', 'DÂTA_ET_HORA_DE_LA_VÈRSION', 'INSTANTVERSION', 'REVISIONTIMESTAMP' ),
-       'revisionuser'            => array( '1', 'USANCIÉR_DE_LA_VÈRSION', 'UTILISATEURVERSION', 'REVISIONUSER' ),
-       'plural'                  => array( '0', 'PLURÂL:', 'PLURIEL:', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'URL_COMPLÈTA:', 'URLCOMPLETE:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'URL_COMPLÈTA_URL:', 'URLCOMPLETEX:', 'FULLURLE:' ),
-       'lcfirst'                 => array( '0', 'PREMIÉRE_PETIÔTA_LÈTRA:', 'INITMINUS:', 'LCFIRST:' ),
-       'ucfirst'                 => array( '0', 'PREMIÉRE_GRANTA_LÈTRA:', 'INITMAJUS:', 'INITCAPIT:', 'UCFIRST:' ),
-       'lc'                      => array( '0', 'PETIÔTA_LÈTRA:', 'MINUS:', 'LC:' ),
-       'uc'                      => array( '0', 'GRANTA_LÈTRA:', 'MAJUS:', 'CAPIT:', 'UC:' ),
-       'raw'                     => array( '0', 'BRUTO:', 'BRUT:', 'RAW:' ),
-       'displaytitle'            => array( '1', 'FÂRE_VÊRE_LO_TITRO', 'AFFICHERTITRE', 'DISPLAYTITLE' ),
-       'rawsuffix'               => array( '1', 'B', 'BRUT', 'R' ),
-       'newsectionlink'          => array( '1', '__LIM_DE_NOVÈLA_SÈCCION__', '__LIENNOUVELLESECTION__', '__NEWSECTIONLINK__' ),
-       'nonewsectionlink'        => array( '1', '__NION_LIM_DE_NOVÈLA_SÈCCION__', '__AUCUNLIENNOUVELLESECTION__', '__NONEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', 'VÈRSION_D_ORA', 'VERSIONACTUELLE', 'CURRENTVERSION' ),
-       'urlencode'               => array( '0', 'URL_ENCODÂ:', 'ENCODEURL:', 'URLENCODE:' ),
-       'anchorencode'            => array( '0', 'ANCRO_ENCODÂ', 'ENCODEANCRE', 'ANCHORENCODE' ),
-       'currenttimestamp'        => array( '1', 'DÂTA_ET_HORA_D_ORA', 'INSTANTACTUEL', 'CURRENTTIMESTAMP' ),
-       'localtimestamp'          => array( '1', 'DÂTA_ET_HORA_LOCALA', 'INSTANTLOCAL', 'LOCALTIMESTAMP' ),
-       'directionmark'           => array( '1', 'MÂRCA_DE_DIRÈCCION', 'MARQUEDIRECTION', 'MARQUEDIR', 'DIRECTIONMARK', 'DIRMARK' ),
-       'language'                => array( '0', '#LENGOUA:', '#LANGUE:', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', 'LENGOUA_DU_CONTEGNU', 'LANGUECONTENU', 'LANGCONTENU', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'        => array( '1', 'PÂGES_DENS_L_ÈSPÂÇO_DE_NOMS:', 'PÂGES_DENS_L_ÈDN:', 'PAGESDANSESPACE:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'          => array( '1', 'NOMBRO_D_ADMINS', 'NOMBREADMINS', 'NUMBEROFADMINS' ),
-       'formatnum'               => array( '0', 'FORMAT_NOMBRO', 'FORMATNOMBRE', 'FORMATNUM' ),
-       'padleft'                 => array( '0', 'BORRÂJO_A_GÔCHE', 'BOURRAGEGAUCHE', 'BOURREGAUCHE', 'PADLEFT' ),
-       'padright'                => array( '0', 'BORRÂJO_A_DRÊTA', 'BOURRAGEDROITE', 'BOURREDROITE', 'PADRIGHT' ),
-       'special'                 => array( '0', 'spèciâl', 'spécial', 'special' ),
-       'defaultsort'             => array( '1', 'CLLÂF_DE_TRI:', 'CLEFDETRI:', 'CLEDETRI:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'filepath'                => array( '0', 'CHEMIN_D_ACCÈS:', 'CHEMIN:', 'FILEPATH:' ),
-       'tag'                     => array( '0', 'balisa', 'balise', 'tag' ),
-       'hiddencat'               => array( '1', '__CATÈGORIE_CACHIÊ__', '__CATCACHEE__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'PÂGES_DENS_LA_CATÈGORIE', 'PAGESDANSCAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'TALYE_DE_LA_PÂGE', 'TAILLEPAGE', 'PAGESIZE' ),
-       'index'                   => array( '1', '__ENDÈXE__', '__INDEX__' ),
-       'noindex'                 => array( '1', '__NION_ENDÈXE__', '__AUCUNINDEX__', '__NOINDEX__' ),
-       'numberingroup'           => array( '1', 'NOMBRO_D_USANCIÉRS_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' ),
-       'url_path'                => array( '0', 'CHEMIN', 'PATH' ),
-       'url_wiki'                => array( '0', 'VOUIQUI', 'WIKI' ),
+       'redirect'                  => array( '0', '#REDIRÈCCION', '#REDIRECTION', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__NION_SOMÈRO__', '__NIONA_TRÂBLA__', '__AUCUNSOMMAIRE__', '__AUCUNETDM__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__NIONA_GALERIE__', '__AUCUNEGALERIE__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__FORCIÉR_LO_SOMÈRO__', '__FORCIÉR_LA_TRÂBLA__', '__FORCERSOMMAIRE__', '__FORCERTDM__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__SOMÈRO__', '__TRÂBLA__', '__SOMMAIRE__', '__TDM__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__SÈCCION_QUE_PÔT_PAS_ÉTRE_CHANGIÊ__', '__SECTIONNONEDITABLE__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '__NION_EN_TÉTA__', '__AUCUNENTETE__', '__NOHEADER__' ),
+       'currentmonth'              => array( '1', 'MÊS_D_ORA', 'MÊS_D_ORA_2', 'MOISACTUEL', 'MOIS2ACTUEL', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'MÊS_D_ORA_1', 'MOIS1ACTUEL', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'NOM_DU_MÊS_D_ORA', 'NOMMOISACTUEL', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'GÈNITIF_DU_NOM_DU_MÊS_D_ORA', 'NOMGENMOISACTUEL', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'ABRÈV_DU_MÊS_D_ORA', 'ABREVMOISACTUEL', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'JORN_D_ORA', 'JOURACTUEL', 'JOUR1ACTUEL', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'JORN_D_ORA_2', 'JOUR2ACTUEL', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'NOM_DU_JORN_D_ORA', 'NOMJOURACTUEL', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'AN_D_ORA', 'ANNEEACTUELLE', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'HORÈRO_D_ORA', 'HORAIREACTUEL', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'HORA_D_ORA', 'HEUREACTUELLE', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'MÊS_LOCAL', 'MÊS_LOCAL_2', 'MOISLOCAL', 'MOIS2LOCAL', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'MÊS_LOCAL_1', 'MOIS1LOCAL', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'NOM_DU_MÊS_LOCAL', 'NOMMOISLOCAL', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'GÈNITIF_DU_NOM_DU_MÊS_LOCAL', 'NOMGENMOISLOCAL', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'ABRÈV_DU_MÊS_LOCAL', 'ABREVMOISLOCAL', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'JORN_LOCAL', 'JOURLOCAL', 'JOUR1LOCAL', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'JORN_LOCAL_2', 'JOUR2LOCAL', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'NOM_DU_JORN_LOCAL', 'NOMJOURLOCAL', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'AN_LOCAL', 'ANNEELOCALE', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'HORÈRO_LOCAL', 'HORAIRELOCAL', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'HORA_LOCALA', 'HEURELOCALE', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'NOMBRO_DE_PÂGES', 'NOMBREPAGES', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'NOMBRO_D_ARTICLLOS', 'NOMBREARTICLES', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'NOMBRO_DE_FICHIÉRS', 'NOMBREFICHIERS', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'NOMBRO_D_USANCIÉRS', 'NOMBREUTILISATEURS', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'NOMBRO_D_USANCIÉRS_ACTIFS', 'NOMBREUTILISATEURSACTIFS', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'NOMBRO_DE_CHANGEMENTS', 'NOMBREMODIFS', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'NOMBRO_DE_VUES', 'NOMBREVUES', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'NOM_DE_LA_PÂGE', 'NOMPAGE', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'NOM_DE_LA_PÂGE_URL', 'NOMPAGEX', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'ÈSPÂÇO_DE_NOMS', 'ESPACENOMMAGE', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'ÈSPÂÇO_DE_NOMS_URL', 'ESPACENOMMAGEX', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'ÈSPÂÇO_DE_DISCUSSION', 'ESPACEDISCUSSION', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'ÈSPÂÇO_DE_DISCUSSION_URL', 'ESPACEDISCUSSIONX', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'ÈSPÂÇO_DU_SUJÈT', 'ÈSPÂÇO_DE_L_ARTICLLO', 'ESPACESUJET', 'ESPACEARTICLE', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'ÈSPÂÇO_DU_SUJÈT_URL', 'ÈSPÂÇO_DE_L_ARTICLLO_URL', 'ESPACESUJETX', 'ESPACEARTICLEX', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'NOM_COMPLÈT_DE_LA_PÂGE', 'NOMPAGECOMPLET', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'NOM_COMPLÈT_DE_LA_PÂGE_URL', 'NOMPAGECOMPLETX', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'NOM_DE_LA_SOT_PÂGE', 'NOMSOUSPAGE', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'NOM_DE_LA_SOT_PÂGE_URL', 'NOMSOUSPAGEX', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'NOM_DE_LA_PÂGE_DE_BÂSA', 'NOMBASEDEPAGE', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'NOM_DE_LA_PÂGE_DE_BÂSA_URL', 'NOMBASEDEPAGEX', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'NOM_DE_LA_PÂGE_DE_DISCUSSION', 'NOMPAGEDISCUSSION', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'NOM_DE_LA_PÂGE_DE_DISCUSSION_URL', 'NOMPAGEDISCUSSIONX', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'NOM_DE_LA_PÂGE_DU_SUJÈT', 'NOM_DE_LA_PÂGE_DE_L_ARTICLLO', 'NOMPAGESUJET', 'NOMPAGEARTICLE', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'          => array( '1', 'NOM_DE_LA_PÂGE_DU_SUJÈT_URL', 'NOM_DE_LA_PÂGE_DE_L_ARTICLLO_URL', 'NOMPAGESUJETX', 'NOMPAGEARTICLEX', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+       'msg'                       => array( '0', 'MSJ:', 'MSG:' ),
+       'msgnw'                     => array( '0', 'MSJNV:', 'MSGNW:' ),
+       'img_thumbnail'             => array( '1', 'figura', 'vignette', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'figura=$1', 'vignette=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'drêta', 'droite', 'right' ),
+       'img_left'                  => array( '1', 'gôche', 'gauche', 'left' ),
+       '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', 'pas_encâdrâ', '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_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' ),
+       'img_text_top'              => array( '1', 'tèxto-d\'amont', 'haut-texte', 'haut-txt', 'text-top' ),
+       'img_middle'                => array( '1', 'entre-mié', 'milieu', 'middle' ),
+       'img_bottom'                => array( '1', 'd\'avâl', 'bas', 'bottom' ),
+       'img_text_bottom'           => array( '1', 'tèxto-d\'avâl', 'bas-texte', 'bas-txt', 'text-bottom' ),
+       'img_link'                  => array( '1', 'lim=$1', 'lien=$1', 'link=$1' ),
+       'int'                       => array( '0', 'ENT:', 'INT:' ),
+       'sitename'                  => array( '1', 'NOM_DU_SETO', 'NOMSITE', 'SITENAME' ),
+       'ns'                        => array( '0', 'ÈDN:', 'ESPACEN:', 'NS:' ),
+       'nse'                       => array( '0', 'ÈDN_URL:', 'ESPACENX:', 'NSE:' ),
+       'localurl'                  => array( '0', 'URL_LOCALA:', 'URLLOCALE:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'URL_LOCALA_URL:', 'URLLOCALEX:', 'LOCALURLE:' ),
+       'articlepath'               => array( '0', 'CHEMIN_DE_L_ARTICLLO', 'CHEMINARTICLE', 'ARTICLEPATH' ),
+       'server'                    => array( '0', 'SÈRVOR', 'SERVEUR', 'SERVER' ),
+       'servername'                => array( '0', 'NOM_DU_SÈRVOR', 'NOMSERVEUR', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'CHEMIN_DU_SCRIPTE', 'CHEMINSCRIPT', 'SCRIPTPATH' ),
+       'stylepath'                 => array( '0', 'CHEMIN_DU_STILO', 'CHEMINSTYLE', 'STYLEPATH' ),
+       'grammar'                   => array( '0', 'GRAMÈRE:', 'GRAMMAIRE:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'GENRO:', 'GENRE:', 'GENDER:' ),
+       'notitleconvert'            => array( '0', '__SEN_CONVÈRSION_DE_TITRO__', '__SENCDT__', '__SANSCONVERSIONTITRE__', '__SANSCT__', '__NOTITLECONVERT__', '__NOTC__' ),
+       'nocontentconvert'          => array( '0', '__SEN_CONVÈRSION_DE_CONTEGNU__', '__SENCDC__', '__SANSCONVERSIONCONTENU__', '__SANSCC__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+       'currentweek'               => array( '1', 'SEMANA_D_ORA', 'SEMAINEACTUELLE', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'JDS_D_ORA', 'JDSACTUEL', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'SEMANA_LOCALA', 'SEMAINELOCALE', 'LOCALWEEK' ),
+       'localdow'                  => array( '1', 'JDS_LOCAL', 'JDSLOCAL', 'LOCALDOW' ),
+       'revisionid'                => array( '1', 'NUMERÔ_DE_LA_VÈRSION', 'IDVERSION', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'JORN_DE_LA_VÈRSION', 'JOURVERSION', 'JOUR1VERSION', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'JORN_DE_LA_VÈRSION_2', 'JOUR2VERSION', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'MÊS_DE_LA_VÈRSION', 'MOISVERSION', 'REVISIONMONTH' ),
+       'revisionmonth1'            => array( '1', 'MÊS_DE_LA_VÈRSION_1', 'MOISVERSION1', 'REVISIONMONTH1' ),
+       'revisionyear'              => array( '1', 'AN_DE_LA_VÈRSION', 'ANNEEVERSION', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'DÂTA_ET_HORA_DE_LA_VÈRSION', 'INSTANTVERSION', 'REVISIONTIMESTAMP' ),
+       'revisionuser'              => array( '1', 'USANCIÉR_DE_LA_VÈRSION', 'UTILISATEURVERSION', 'REVISIONUSER' ),
+       'plural'                    => array( '0', 'PLURÂL:', 'PLURIEL:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'URL_COMPLÈTA:', 'URLCOMPLETE:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'URL_COMPLÈTA_URL:', 'URLCOMPLETEX:', 'FULLURLE:' ),
+       'lcfirst'                   => array( '0', 'PREMIÉRE_PETIÔTA_LÈTRA:', 'INITMINUS:', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', 'PREMIÉRE_GRANTA_LÈTRA:', 'INITMAJUS:', 'INITCAPIT:', 'UCFIRST:' ),
+       'lc'                        => array( '0', 'PETIÔTA_LÈTRA:', 'MINUS:', 'LC:' ),
+       'uc'                        => array( '0', 'GRANTA_LÈTRA:', 'MAJUS:', 'CAPIT:', 'UC:' ),
+       'raw'                       => array( '0', 'BRUTO:', 'BRUT:', 'RAW:' ),
+       'displaytitle'              => array( '1', 'FÂRE_VÊRE_LO_TITRO', 'AFFICHERTITRE', 'DISPLAYTITLE' ),
+       'rawsuffix'                 => array( '1', 'B', 'BRUT', 'R' ),
+       'newsectionlink'            => array( '1', '__LIM_DE_NOVÈLA_SÈCCION__', '__LIENNOUVELLESECTION__', '__NEWSECTIONLINK__' ),
+       'nonewsectionlink'          => array( '1', '__NION_LIM_DE_NOVÈLA_SÈCCION__', '__AUCUNLIENNOUVELLESECTION__', '__NONEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'VÈRSION_D_ORA', 'VERSIONACTUELLE', 'CURRENTVERSION' ),
+       'urlencode'                 => array( '0', 'URL_ENCODÂ:', 'ENCODEURL:', 'URLENCODE:' ),
+       'anchorencode'              => array( '0', 'ANCRO_ENCODÂ', 'ENCODEANCRE', 'ANCHORENCODE' ),
+       'currenttimestamp'          => array( '1', 'DÂTA_ET_HORA_D_ORA', 'INSTANTACTUEL', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', 'DÂTA_ET_HORA_LOCALA', 'INSTANTLOCAL', 'LOCALTIMESTAMP' ),
+       'directionmark'             => array( '1', 'MÂRCA_DE_DIRÈCCION', 'MARQUEDIRECTION', 'MARQUEDIR', 'DIRECTIONMARK', 'DIRMARK' ),
+       'language'                  => array( '0', '#LENGOUA:', '#LANGUE:', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'LENGOUA_DU_CONTEGNU', 'LANGUECONTENU', 'LANGCONTENU', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', 'PÂGES_DENS_L_ÈSPÂÇO_DE_NOMS:', 'PÂGES_DENS_L_ÈDN:', 'PAGESDANSESPACE:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', 'NOMBRO_D_ADMINS', 'NOMBREADMINS', 'NUMBEROFADMINS' ),
+       'formatnum'                 => array( '0', 'FORMAT_NOMBRO', 'FORMATNOMBRE', 'FORMATNUM' ),
+       'padleft'                   => array( '0', 'BORRÂJO_A_GÔCHE', 'BOURRAGEGAUCHE', 'BOURREGAUCHE', 'PADLEFT' ),
+       'padright'                  => array( '0', 'BORRÂJO_A_DRÊTA', 'BOURRAGEDROITE', 'BOURREDROITE', 'PADRIGHT' ),
+       'special'                   => array( '0', 'spèciâl', 'spécial', 'special' ),
+       'defaultsort'               => array( '1', 'CLLÂF_DE_TRI:', 'CLEFDETRI:', 'CLEDETRI:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'filepath'                  => array( '0', 'CHEMIN_D_ACCÈS:', 'CHEMIN:', 'FILEPATH:' ),
+       'tag'                       => array( '0', 'balisa', 'balise', 'tag' ),
+       'hiddencat'                 => array( '1', '__CATÈGORIE_CACHIÊ__', '__CATCACHEE__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'PÂGES_DENS_LA_CATÈGORIE', 'PAGESDANSCAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'TALYE_DE_LA_PÂGE', 'TAILLEPAGE', 'PAGESIZE' ),
+       'index'                     => array( '1', '__ENDÈXE__', '__INDEX__' ),
+       'noindex'                   => array( '1', '__NION_ENDÈXE__', '__AUCUNINDEX__', '__NOINDEX__' ),
+       'numberingroup'             => array( '1', 'NOMBRO_D_USANCIÉRS_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' ),
+       'url_path'                  => array( '0', 'CHEMIN', 'PATH' ),
+       'url_wiki'                  => array( '0', 'VOUIQUI', 'WIKI' ),
 );
 
 $linkTrail = '/^([a-zàâçéèêîœôû·’æäåāăëēïīòöōùü‘]+)(.*)$/sDu';
@@ -461,7 +461,7 @@ $messages = array(
 'faqpage' => 'Project:Quèstions sovent posâyes',
 
 # Vector skin
-'vector-action-addsection' => 'Apondre un sujèt',
+'vector-action-addsection' => 'Apondre na chousa',
 'vector-action-delete' => 'Suprimar',
 'vector-action-move' => 'Renomar',
 'vector-action-protect' => 'Protègiér',
@@ -643,7 +643,7 @@ La bâsa de donâs at retornâ la fôta « $3 : $4 ».',
 'laggedslavemode' => "'''Atencion :''' cela pâge pôt pas contegnir tôs los dèrriérs changements fêts.",
 'readonly' => 'Bâsa de donâs vèrrolyêye',
 'enterlockreason' => 'Balyéd la rêson du vèrroly et pués n’èstimacion de la sina durâ',
-'readonlytext' => 'Ora la bâsa de donâs est vèrrolyêye por les entrâs novèles et los ôtros changements, probâblament por pèrmetre la sina mantegnence, dês cen tot tornerat en ôrdre.
+'readonlytext' => 'Ora la bâsa de donâs est vèrrolyêye por les entrâs novèles et los ôtros changements, de sûr por pèrmetre la sina mantegnence, dês cen tot tornerat en ôrdre.
 
 L’administrator que l’at vèrrolyê at balyê cet’èxplicacion : $1',
 'missing-article' => 'La bâsa de donâs at pas trovâ lo tèxto d’una pâge qu’el arêt diu trovar, avouéc lo titro « $1 » $2.
@@ -772,24 +772,24 @@ Volyéd tornar èprovar.',
 'password-login-forbidden' => 'L’usâjo de cél nom d’utilisator et de cél contresegno est étâ dèfendu.',
 'mailmypassword' => 'Recêvre un contresegno novél per mèssageria èlèctronica',
 'passwordremindertitle' => 'Contresegno temporèro novél por {{SITENAME}}',
-'passwordremindertext' => 'Quârqu’un (probâblament vos, avouéc l’adrèce IP $1) at demandâ un contresegno
+'passwordremindertext' => 'Quârqu’un (probâblament vos, dês l’adrèce IP $1) at demandâ un contresegno
 novél por {{SITENAME}} ($4). Un contresegno temporèro est étâ fêt por
 l’utilisator « $2 » et est « $3 ». S’o ére voutra entencion, vos vos devréd
 branchiér et pués chouèsir un contresegno novél.
-Voutron contresegno temporèro èxpirerat dens $5 jorn{{PLURAL:$5||s}}.
+Voutron contresegno temporèro èxpirerat dens {{PLURAL:$5|yon jorn|$5 jorns}}.
 
-Se cela demanda vint pas de vos ou ben se vos vos rapelâd ora
-de voutron contresegno et que vos souhètâd pas més nen changiér, vos
+Se cela demanda vint pas de vos ou ben que vos vos éte rapelâ
+de voutron contresegno et que vos souhètâd pas més lo changiér, vos
 pouede ignorar ceti mèssâjo et continuar a empleyér voutron viely contresegno.',
 'noemail' => 'Niona adrèce èlèctronica est étâye encartâye por l’utilisator « $1 ».',
 'noemailcreate' => 'Vos dête balyér n’adrèce èlèctronica valida',
 'passwordsent' => 'Un contresegno novél est étâ mandâ a l’adrèce èlèctronica de l’utilisator « $1 ».
 Vos volyéd tornar branchiér aprés l’avêr reçu.',
-'blocked-mailpassword' => 'Voutron adrèce IP est blocâye en ècritura, la fonccion de rapèl du contresegno est vêr dèsactivâye por èvitar los abus.',
+'blocked-mailpassword' => 'Voutron adrèce IP est blocâye en ècritura, la fonccion de sovegnence du contresegno est vêr dèsactivâye por èvitar los abus.',
 'eauthentsent' => 'Un mèssâjo de confirmacion est étâ mandâ a l’adrèce endicâye.
 Devant qu’un ôtro mèssâjo seye mandâ a ceti compto, vos devréd siuvre les enstruccions du mèssâjo et pués confirmar que lo compto est franc lo voutro.',
-'throttled-mailpassword' => 'Un mèssâjo de rapèl de voutron contresegno est ja étâ mandâ pendent {{PLURAL:$1|l’hora passâye|les $1 hores passâyes}}.
-Por èvitar los abus, solament yon mèssâjo de rapèl serat mandâ per {{PLURAL:$1|hora|entèrvalo de $1 hores}}.',
+'throttled-mailpassword' => 'Un mèssâjo de sovegnence de voutron contresegno est ja étâ mandâ pendent {{PLURAL:$1|l’hora passâye|les $1 hores passâyes}}.
+Por èvitar los abus, solament yon mèssâjo de sovegnence serat mandâ per {{PLURAL:$1|hora|entèrvalo de $1 hores}}.',
 'mailerror' => 'Fôta pendent l’èxpèdicion du mèssâjo : $1',
 'acct_creation_throttle_hit' => 'Quârqu’un qu’empleye voutron adrèce IP at fêt {{PLURAL:$1|yon compto|$1 comptos}} pendent les 24 hores passâyes, cen qu’est la limita ôtorisâye dens ceti temps.
 Du côp la crèacion de compto est étâye dèsactivâye temporèrament por cel’adrèce IP.',
@@ -822,7 +822,7 @@ Volyéd atendre devant que tornar èprovar.',
 
 # Change password dialog
 'resetpass' => 'Changiér lo contresegno',
-'resetpass_announce' => 'Vos vos éte branchiê avouéc un contresegno temporèro mandâ per mèssageria èlèctronica.
+'resetpass_announce' => 'Vos vos éte branchiê{{GENDER:||ye|(ye)}} avouéc un contresegno temporèro mandâ per mèssageria èlèctronica.
 Por chavonar lo branchement, vos dête buchiér un contresegno novél ique :',
 'resetpass_text' => '<!-- Apondéd lo tèxto ique -->',
 'resetpass_header' => 'Changiér lo contresegno du compto',
@@ -830,59 +830,59 @@ Por chavonar lo branchement, vos dête buchiér un contresegno novél ique :',
 'newpassword' => 'Contresegno novél :',
 'retypenew' => 'Confirmar lo contresegno novél :',
 'resetpass_submit' => 'Changiér lo contresegno et sè branchiér',
-'resetpass_success' => 'Voutron contresegno at étâ changiê avouéc reusséta !
+'resetpass_success' => 'Voutron contresegno est étâ changiê avouéc reusséta !
 Branchement en cors...',
-'resetpass_forbidden' => 'Los contresegnos pôvont pas étre changiês.',
+'resetpass_forbidden' => 'Los contresegnos pôvont pas étre changiês',
 'resetpass-no-info' => 'Vos dête étre branchiê por avêr accès a cela pâge.',
 'resetpass-submit-loggedin' => 'Changiér lo contresegno',
 'resetpass-submit-cancel' => 'Anular',
-'resetpass-wrong-oldpass' => 'Contresegno temporèro ou ben d’ora fôx.
-Vos éd pôt-étre ja changiê voutron contresegno avouéc reusséta ou ben demandâ un contresegno temporèro novél.',
+'resetpass-wrong-oldpass' => 'Contresegno temporèro ou ben d’ora envalido.
+Pôt-étre vos éd ja changiê voutron contresegno avouéc reusséta ou ben demandâ un contresegno temporèro novél.',
 'resetpass-temp-password' => 'Contresegno temporèro :',
 
 # Special:PasswordReset
-'passwordreset' => 'Tornar inicialisar lo contresegno',
-'passwordreset-text' => 'Rempléd ceti formulèro por recêvre un mèssâjo de rapèl des dètalys de voutron compto.',
+'passwordreset' => 'Remisa a zérô du contresegno',
+'passwordreset-text' => 'Rempléd ceti formulèro por recêvre un mèssâjo de sovegnence des dètalys de voutron compto.',
 'passwordreset-legend' => 'Tornar inicialisar lo contresegno',
-'passwordreset-disabled' => 'La remisa a zérô des contresegnos at étâ dèsactivâ sur ceti vouiqui.',
-'passwordreset-pretext' => '{{PLURAL:$1||Buchiéd yon des bocons de balyês ce-desot}}',
-'passwordreset-username' => 'Nom d’usanciér :',
+'passwordreset-disabled' => 'La remisa a zérô des contresegnos est étâye dèsactivâye sur ceti vouiqui.',
+'passwordreset-pretext' => '{{PLURAL:$1||Buchiéd yona de les piéces de donâs ce-desot}}',
+'passwordreset-username' => 'Nom d’utilisator :',
 'passwordreset-domain' => 'Domêno :',
 'passwordreset-capture' => 'Vêre lo mèssâjo que rèsulte ?',
-'passwordreset-capture-help' => 'Se vos pouentâd cela câsa, lo mèssâjo (avouéc lo contresegno temporèro) vos serat montrâ en mémo temps que serat mandâ a l’usanciér.',
+'passwordreset-capture-help' => 'Se vos pouentâd cela câsa, lo mèssâjo (avouéc lo contresegno temporèro) vos serat fêt vêre quand serat mandâ a l’utilisator.',
 'passwordreset-email' => 'Adrèce èlèctronica :',
 'passwordreset-emailtitle' => 'Dètalys du compto dessus {{SITENAME}}',
-'passwordreset-emailtext-ip' => 'Quârqu’un (probâblament vos, avouéc l’adrèce IP $1) at demandâ un rapèl des dètalys
-de voutron compto por {{SITENAME}} ($4). {{PLURAL:$3|Ceti compto usanciér est associyê|Cetos comptos usanciérs sont associyês}}
-a celadrèce èlèctronica :
+'passwordreset-emailtext-ip' => 'Quârqu’un (probâblament vos, dês l’adrèce IP $1) at demandâ na sovegnence des dètalys
+de voutron compto por {{SITENAME}} ($4). {{PLURAL:$3|Ceti compto utilisator est associyê|Cetos comptos utilisators sont associyês}}
+a celadrèce èlèctronica :
 
 $2
 
-{{PLURAL:$3|Cél contresegno temporèro èxpirerat|Celos contresegnos temporèros èxpireront}} dens $5 jorn{{PLURAL:$5||s}}.
-Ora, vos vos dête branchiér et pués chouèsir un contresegno novél. Se cela demanda vint pas de vos,
-ou ben se vos vos rapelâd ora de voutron contresegno originâl 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 contresegno.',
-'passwordreset-emailtext-user' => 'L’usanciér $1 dessus {{SITENAME}} at demandâ un rapèl des dètalys
-de voutron compto por {{SITENAME}} ($4). {{PLURAL:$3|Ceti compto usanciér est associyê|Cetos comptos usanciérs sont associyês}}
-a celadrèce èlèctronica :
+{{PLURAL:$3|Cél contresegno temporèro èxpirerat|Celos contresegnos temporèros èxpireront}} dens {{PLURAL:$5|yon jorn|$5 jorns}}.
+Ora vos vos dête branchiér et pués chouèsir un contresegno novél. Se cela demanda vint pas de vos
+ou ben que vos vos éte rapelâ de voutron contresegno originâl et que vos souhètâd pas més lo changiér,
+vos pouede ignorar ceti mèssâjo et continuar a empleyér voutron viely contresegno.',
+'passwordreset-emailtext-user' => 'L’utilisator $1 dessus {{SITENAME}} at demandâ na sovegnence des dètalys
+de voutron compto por {{SITENAME}} ($4). {{PLURAL:$3|Ceti compto utilisator est associyê|Cetos comptos utilisators sont associyês}}
+a celadrèce èlèctronica :
 
 $2
 
-{{PLURAL:$3|Cél contresegno temporèro èxpirerat|Celos contresegnos temporèros èxpireront}} dens $5 jorn{{PLURAL:$5||s}}.
-Ora, vos vos dête branchiér et pués chouèsir un contresegno novél. Se cela demanda vint pas de vos,
-ou ben se vos vos rapelâd ora de voutron contresegno originâl 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 contresegno.',
-'passwordreset-emailelement' => 'Nom d’usanciér : $1
+{{PLURAL:$3|Cél contresegno temporèro èxpirerat|Celos contresegnos temporèros èxpireront}} dens {{PLURAL:$5|yon jorn|$5 jorns}}.
+Ora vos vos dête branchiér et pués chouèsir un contresegno novél. Se cela demanda vint pas de vos
+ou ben que vos vos éte rapelâ de voutron contresegno originâl et que vos souhètâd pas més lo changiér,
+vos pouede ignorar ceti mèssâjo et continuar a empleyér voutron viely contresegno.',
+'passwordreset-emailelement' => 'Nom d’utilisator : $1
 Contresegno temporèro : $2',
-'passwordreset-emailsent' => 'Un mèssâjo de rapèl at étâ mandâ.',
-'passwordreset-emailsent-capture' => 'Un mèssâjo de rapèl at étâ mandâ, qu’est montrâ ce-desot.',
-'passwordreset-emailerror-capture' => 'Un mèssâjo de rapèl at étâ fêt, qu’est montrâ ce-desot, mas l’èxpèdicion a l’usanciér at pas reussia : $1',
+'passwordreset-emailsent' => 'Un mèssâjo de sovegnence est étâ mandâ.',
+'passwordreset-emailsent-capture' => 'Un mèssâjo de sovegnence est étâ mandâ, qu’est fêt vêre ce-desot.',
+'passwordreset-emailerror-capture' => 'Un mèssâjo de sovegnence est étâ fêt, qu’est fêt vêre ce-desot, mas l’èxpèdicion a l’utilisator at pas reussi : $1',
 
 # Special:ChangeEmail
 'changeemail' => 'Changiér l’adrèce èlèctronica',
-'changeemail-header' => 'Changiér l’adrèce èlèctronica',
-'changeemail-text' => 'Rempléd ceti formulèro por changiér voutra adrèce èlèctronica. Vos devréd buchiér voutron contresegno por confirmar cél changement.',
-'changeemail-no-info' => 'Vos dête étre branchiê por avêr accès a cela pâge.',
+'changeemail-header' => 'Changiér l’adrèce èlèctronica du compto',
+'changeemail-text' => 'Rempléd ceti formulèro por changiér voutron adrèce èlèctronica. Vos devréd buchiér voutron contresegno por confirmar cél changement.',
+'changeemail-no-info' => 'Vos dête étre branchiê por arrevar tot drêt a cela pâge.',
 'changeemail-oldemail' => 'Adrèce èlèctronica d’ora :',
 'changeemail-newemail' => 'Novèla adrèce èlèctronica :',
 'changeemail-none' => '(niona)',
@@ -890,28 +890,28 @@ Contresegno temporèro : $2',
 'changeemail-cancel' => 'Anular',
 
 # Edit page toolbar
-'bold_sample' => 'Tèxto en grâs',
-'bold_tip' => 'Tèxto en grâs',
-'italic_sample' => 'Tèxto en étalico',
-'italic_tip' => 'Tèxto en étalico',
+'bold_sample' => 'Tèxto grâs',
+'bold_tip' => 'Tèxto grâs',
+'italic_sample' => 'Tèxto étalico',
+'italic_tip' => 'Tèxto étalico',
 'link_sample' => 'Titro du lim',
 'link_tip' => 'Lim de dedens',
 'extlink_sample' => 'http://www.example.com titro du lim',
 'extlink_tip' => 'Lim de defôr (oubliâd pas lo prèfixo http://)',
-'headline_sample' => 'Tèxto de sot-titro',
+'headline_sample' => 'Tèxto dtitro',
 'headline_tip' => 'Sot-titro nivél 2',
 'nowiki_sample' => 'Buchiéd lo tèxto pas formatâ ique',
 'nowiki_tip' => 'Ignorar lo formatâjo vouiqui',
 'image_sample' => 'Ègzemplo.jpg',
-'image_tip' => 'Fichiér entrebetâ',
+'image_tip' => 'Fichiér apondu',
 'media_sample' => 'Ègzemplo.ogg',
 'media_tip' => 'Lim de vers un fichiér',
-'sig_tip' => 'Voutra signatura avouéc la dâta',
+'sig_tip' => 'Voutra signatura avouéc la dâta et hora',
 'hr_tip' => 'Legne plana (pas nen abusar)',
 
 # Edit pages
 'summary' => 'Rèsumâ :',
-'subject' => 'Sujèt / titro :',
+'subject' => 'Chousa / titro :',
 'minoredit' => 'Petiôt changement',
 'watchthis' => 'Siuvre ceta pâge',
 'savearticle' => 'Sôvar la pâge',
@@ -992,12 +992,11 @@ Volyéd controlar que vos voléd fâre ou ben changiér cela pâge.',
 'userpage-userdoesnotexist-view' => 'Lo compto usanciér « $1 » est pas encartâ.',
 'blocked-notice-logextract' => 'Ceti usanciér est ora blocâ.
 La dèrriére entrâ du jornal des blocâjos est disponibla ce-desot :',
-'clearyourcache' => "'''Nota :''' aprés avêr encartâ, vos devréd forciér lo rechargement complèt du cache de voutron navigator por vêre los changements.
+'clearyourcache' => "'''Nota :''' aprés avêr encartâ, vos devréd forciér lo rechargement complèt du cacho de voutron navigator por vêre los changements.
 * '''Firefox / Safari :''' mantegnéd la toche ''Granta Lètra'' (''Shift'') en cliquent sur lo boton ''Rechargiér'' (''Reload'') ou ben prèssâd ''Ctrl-F5'' ou ''Ctrl-R'' (''⌘-R'' sur un Mac)
 * '''Google Chrome :''' prèssâd ''Ctrl-Shift-R'' (''⌘-Shift-R'' sur un Mac)
 * '''Internet Explorer :''' mantegnéd la toche ''Ctrl'' en cliquent sur lo boton ''Rafrèchir'' (''Refresh'') ou ben prèssâd ''Ctrl-F5''
-* '''Konqueror :''' clicâd sur lo boton ''Rechargiér'' ou ben prèssâd ''F5''
-* '''Opera :''' èfaciéd lo cache dens ''Outils → Prèferences''",
+* '''Opera :''' èfaciéd lo cacho dedens ''Outils → Prèferences''",
 'usercssyoucanpreview' => "'''Combina :''' utilisâd lo boton « {{int:showpreview}} » por èprovar voutra fôlye CSS novèla devant que la sôvar.",
 'userjsyoucanpreview' => "'''Combina :''' utilisâd lo boton « {{int:showpreview}} » por èprovar voutra fôlye JS novèla devant que la sôvar.",
 'usercsspreview' => "'''Rapelâd-vos que vos éte solament aprés prèvisualisar voutra prôpra fôlye CSS.'''
@@ -3125,11 +3124,11 @@ O est probâblament diu a un lim de vers un seto de defôr qu’aparêt sur la l
 
 # Info page
 'pageinfo-title' => 'Enformacions por « $1 »',
-'pageinfo-header-edits' => 'Changements',
+'pageinfo-header-edits' => 'Historico des changements',
 'pageinfo-views' => 'Nombro de visualisacions',
-'pageinfo-watchers' => 'Nombro de contributors qu’ont la pâge dens lor lista de survelyence',
-'pageinfo-edits' => 'Nombro de changements',
-'pageinfo-authors' => 'Nombro d’ôtors difèrents',
+'pageinfo-watchers' => 'Nombro de contributors qu’ont la pâge dedens lor lista de survelyence',
+'pageinfo-edits' => 'Soma totâla de changements',
+'pageinfo-authors' => 'Soma totâla d’ôtors difèrents',
 
 # Skin names
 'skinname-standard' => 'Estandârd',
index df96f18..522a976 100644 (file)
  */
 
 $magicWords = array(
-       'redirect'                => array( '0', '#athsheoladh', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__GANCÁ__', '__NOTOC__' ),
-       'forcetoc'                => array( '0', '__CÁGACHUAIR__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__CÁ__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__GANMHÍRATHRÚ__', '__NOEDITSECTION__' ),
-       'currentmonth'            => array( '1', 'MÍLÁITHREACH', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonthname'        => array( '1', 'AINMNAMÍOSALÁITHREAÍ', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'GINAINMNAMÍOSALÁITHREAÍ', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'GIORRÚNAMÍOSALÁITHREAÍ', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'LÁLÁITHREACH', 'CURRENTDAY' ),
-       'currentdayname'          => array( '1', 'AINMANLAELÁITHRIGH', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'BLIAINLÁITHREACH', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'AMLÁITHREACH', 'CURRENTTIME' ),
-       'numberofarticles'        => array( '1', 'LÍONNANALT', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'LÍONNAGCOMHAD', 'NUMBEROFFILES' ),
-       'pagename'                => array( '1', 'AINMANLGH', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'AINMANLGHB', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'AINMSPÁS', 'NAMESPACE' ),
-       'msg'                     => array( '0', 'TCHT:', 'MSG:' ),
-       'subst'                   => array( '0', 'IONAD:', 'SUBST:' ),
-       'msgnw'                   => array( '0', 'TCHTFS:', 'MSGNW:' ),
-       'img_thumbnail'           => array( '1', 'mionsamhail', 'mion', 'thumbnail', 'thumb' ),
-       'img_right'               => array( '1', 'deas', 'right' ),
-       'img_left'                => array( '1', 'clé', 'left' ),
-       'img_none'                => array( '1', 'faic', 'none' ),
-       'img_center'              => array( '1', 'lár', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'fráma', 'frámaithe', 'framed', 'enframed', 'frame' ),
-       'int'                     => array( '0', 'INMH:', 'INT:' ),
-       'sitename'                => array( '1', 'AINMANTSUÍMH', 'SITENAME' ),
-       'ns'                      => array( '0', 'AS:', 'NS:' ),
-       'localurl'                => array( '0', 'URLÁITIÚIL', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'URLÁITIÚILB', 'LOCALURLE:' ),
-       'server'                  => array( '0', 'FREASTALAÍ', 'SERVER' ),
-       'servername'              => array( '0', 'AINMANFHREASTALAÍ', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'SCRIPTCHOSÁN', 'SCRIPTPATH' ),
-       'grammar'                 => array( '0', 'GRAMADACH:', 'GRAMMAR:' ),
-       'notitleconvert'          => array( '0', '__GANTIONTÚNADTEIDEAL__', '__GANTT__', '__NOTITLECONVERT__', '__NOTC__' ),
-       'nocontentconvert'        => array( '0', '__GANTIONTÚNANÁBHAIR__', '__GANTA__', '__NOCONTENTCONVERT__', '__NOCC__' ),
-       'currentweek'             => array( '1', 'SEACHTAINLÁITHREACH', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'LÁLÁITHREACHNAS', 'CURRENTDOW' ),
-       'revisionid'              => array( '1', 'IDANLEASAITHE', 'REVISIONID' ),
+       'redirect'                  => array( '0', '#athsheoladh', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__GANCÁ__', '__NOTOC__' ),
+       'forcetoc'                  => array( '0', '__CÁGACHUAIR__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__CÁ__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__GANMHÍRATHRÚ__', '__NOEDITSECTION__' ),
+       'currentmonth'              => array( '1', 'MÍLÁITHREACH', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonthname'          => array( '1', 'AINMNAMÍOSALÁITHREAÍ', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'GINAINMNAMÍOSALÁITHREAÍ', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'GIORRÚNAMÍOSALÁITHREAÍ', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'LÁLÁITHREACH', 'CURRENTDAY' ),
+       'currentdayname'            => array( '1', 'AINMANLAELÁITHRIGH', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'BLIAINLÁITHREACH', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'AMLÁITHREACH', 'CURRENTTIME' ),
+       'numberofarticles'          => array( '1', 'LÍONNANALT', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'LÍONNAGCOMHAD', 'NUMBEROFFILES' ),
+       'pagename'                  => array( '1', 'AINMANLGH', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'AINMANLGHB', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'AINMSPÁS', 'NAMESPACE' ),
+       'msg'                       => array( '0', 'TCHT:', 'MSG:' ),
+       'subst'                     => array( '0', 'IONAD:', 'SUBST:' ),
+       'msgnw'                     => array( '0', 'TCHTFS:', 'MSGNW:' ),
+       'img_thumbnail'             => array( '1', 'mionsamhail', 'mion', 'thumbnail', 'thumb' ),
+       'img_right'                 => array( '1', 'deas', 'right' ),
+       'img_left'                  => array( '1', 'clé', 'left' ),
+       'img_none'                  => array( '1', 'faic', 'none' ),
+       'img_center'                => array( '1', 'lár', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'fráma', 'frámaithe', 'framed', 'enframed', 'frame' ),
+       'int'                       => array( '0', 'INMH:', 'INT:' ),
+       'sitename'                  => array( '1', 'AINMANTSUÍMH', 'SITENAME' ),
+       'ns'                        => array( '0', 'AS:', 'NS:' ),
+       'localurl'                  => array( '0', 'URLÁITIÚIL', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'URLÁITIÚILB', 'LOCALURLE:' ),
+       'server'                    => array( '0', 'FREASTALAÍ', 'SERVER' ),
+       'servername'                => array( '0', 'AINMANFHREASTALAÍ', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'SCRIPTCHOSÁN', 'SCRIPTPATH' ),
+       'grammar'                   => array( '0', 'GRAMADACH:', 'GRAMMAR:' ),
+       'notitleconvert'            => array( '0', '__GANTIONTÚNADTEIDEAL__', '__GANTT__', '__NOTITLECONVERT__', '__NOTC__' ),
+       'nocontentconvert'          => array( '0', '__GANTIONTÚNANÁBHAIR__', '__GANTA__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+       'currentweek'               => array( '1', 'SEACHTAINLÁITHREACH', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'LÁLÁITHREACHNAS', 'CURRENTDOW' ),
+       'revisionid'                => array( '1', 'IDANLEASAITHE', 'REVISIONID' ),
 );
 
 $namespaceNames = array(
index fd490b0..bb10a36 100644 (file)
@@ -93,7 +93,7 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#YÖNNENDİRMÄKLER', '#YÖNNENDİR', '#YÖNNENDİRMÄ', '#YÖNLENDİRME', '#YÖNLENDİR', '#REDIRECT' ),
+       'redirect'                  => array( '0', '#YÖNNENDİRMÄKLER', '#YÖNNENDİR', '#YÖNNENDİRMÄ', '#YÖNLENDİRME', '#YÖNLENDİR', '#REDIRECT' ),
 );
 
 $messages = array(
index decfa8b..64c800e 100644 (file)
 $fallback = 'gan-hant, zh-hant, zh-hans';
 
 $namespaceNames = array(
-       NS_MEDIA            => 'Media',
-       NS_SPECIAL          => 'Special',
-       NS_TALK             => 'Talk',
-       NS_USER             => 'User',
-       NS_USER_TALK        => 'User_talk',
-       NS_PROJECT_TALK     => '$1_talk',
-       NS_FILE             => 'File',
-       NS_FILE_TALK        => 'File_talk',
-       NS_MEDIAWIKI        => 'MediaWiki',
-       NS_MEDIAWIKI_TALK   => 'MediaWiki_talk',
-       NS_TEMPLATE         => 'Template',
-       NS_TEMPLATE_TALK    => 'Template_talk',
-       NS_HELP             => 'Help',
-       NS_HELP_TALK        => 'Help_talk',
-       NS_CATEGORY         => 'Category',
-       NS_CATEGORY_TALK    => 'Category_talk',
+       NS_MEDIA            => '媒體',
+       NS_SPECIAL          => '特別',
+       NS_TALK             => '談詑',
+       NS_USER             => '用戶',
+       NS_USER_TALK        => '用戶・談詑',
+       NS_PROJECT_TALK     => '$1_談詑',
+       NS_FILE             => '文檔',
+       NS_FILE_TALK        => '文檔・談詑',
+       NS_MEDIAWIKI_TALK   => 'MediaWiki・談詑',
+       NS_TEMPLATE         => '模板',
+       NS_TEMPLATE_TALK    => '模板・談詑',
+       NS_HELP             => '幫助',
+       NS_HELP_TALK        => '幫助・談詑',
+       NS_CATEGORY         => '分類',
+       NS_CATEGORY_TALK    => '分類・談詑',
 );
 
 $messages = array(
index c27cc54..cf837a4 100644 (file)
@@ -251,7 +251,7 @@ $messages = array(
 'otherlanguages' => 'Ann an cànain eile',
 'redirectedfrom' => '(Air ath-sheòladh o $1)',
 'redirectpagesub' => 'Ath-sheòl an duilleag',
-'lastmodifiedat' => 'Chaidh an duilleag seo a mhùthadh $1, aig $2 turas mu dheireadh.',
+'lastmodifiedat' => 'Chaidh an duilleag seo a mhùthadh $1 aig $2 turas mu dheireadh.',
 'viewcount' => 'Chaidh inntrigeadh a dhèanam dhan duilleag seo {{PLURAL:$1|aon turas|$1 thuras|$1 turas|$1 turais|$1 turas}}.',
 'protectedpage' => 'Duilleag fo dhìon',
 'jumpto' => 'Gearr leum gu:',
@@ -353,9 +353,9 @@ Gheibh thu liosta nan duilleagan sònraichte 's dligheach aig [[Special:SpecialP
 'dberrortext' => 'Thachair mearachd co-chàraidh rè iarrtas an stòir-dhàta.
 Faodaidh gu bheil seo a\' comharrachadh mearachd sa bhathar-bhog.
 Seo iarrtas an stòir-dhàta mu dheireadh a chaidh feuchainn ris:
-<blockquote><tt>$1</tt></blockquote>
-o bhroinn an fhoincsein "<tt>$2</tt>".
-Thill an stòr-dàta a\' mhearachd "<tt>$3: $4</tt>".',
+<blockquote><code>$1</code></blockquote>
+o bhroinn an fhoincsein "<code>$2</code>".
+Thill an stòr-dàta a\' mhearachd "<samp>$3: $4</samp>".',
 'dberrortextcl' => 'Thachair mearachd co-chàraidh rè iarrtas an stòir-dhàta.
 Seo iarrtas an stòir-dhàta mu dheireadh a chaidh feuchainn ris:
 "$1"
@@ -700,11 +700,10 @@ Dèan cinnteach gu bheil thu airson an duilleag seo a chruthachadh/dheasachadh.'
 'userpage-userdoesnotexist-view' => 'Cha deach an cunntas cleachdaiche "$1" a chlàradh.',
 'blocked-notice-logextract' => "Tha an cleachdaiche seo air a bhacadh an-dràsta fhèin.
 Chì thu loga a' bhacaidh mu dheireadh gu h-ìosal mar fhiosrachadh dhut:",
-'clearyourcache' => "''An aire:''' As dèidh dhut sàbhaladh, 's mathaid gum bi agad tasgadan a' bhrabhsair agad a chur air gleus mus fhaic thu na dh'atharraich thu.
+'clearyourcache' => "'''An aire:''' As dèidh dhut sàbhaladh, 's mathaid gum bi agad tasgadan a' bhrabhsair agad a chur air gleus mus fhaic thu na dh'atharraich thu.
 * '''Firefox / Safari:''' Cum 'shìos 'Shift'' is briog air ''Ath-luchdaich' no brùth ''Ctrl-F5'' no ''Ctrl-R'' (''⌘-R'' air Mac)
 * '''Google Chrome:''' Brùth ''Ctrl-Shift-R'' (''⌘-Shift-R'' air Mac)
 * '''Internet Explorer:''' Cum shìos ''Ctrl'' is briog air ''Ath-nuadhaich'' no brùth ''Ctrl-F5''
-* '''Konqueror:''' Briog air ''Reload'' no brùth ''F5''
 * '''Opera:''' Falamhaich an tasgadan ann an ''Innealan → Roghainnean''",
 'usercssyoucanpreview' => "'''Gliocas:''' Cleachd am putan \"{{int:showpreview}}\" airson an CSS agad a chur fo dheuchainn mus sàbhail thu e.",
 'userjsyoucanpreview' => "'''Gliocas:''' Cleachd am putan \"{{int:showpreview}}\" gus an JavaScript ùr agad a chur fo dheuchainn mus sàbhail thu e.",
@@ -716,11 +715,29 @@ Chì thu loga a' bhacaidh mu dheireadh gu h-ìosal mar fhiosrachadh dhut:",
 '''Cha deach a shàbhaladh fhathast!''''",
 'sitejspreview' => "'''Cuimhnich nach e seo ach ro-shealladh air còd a' JavaScript agad.'''
 '''Cha deach a shàbhaladh fhathast!''''",
+'userinvalidcssjstitle' => "'''Rabhadh:''' Chan eil an craiceann \"\$1\" ann.
+Cleachdaidh duilleagan gnàthaichte .css agus .js tiotal ann an litrichean beaga, m.e. {{ns:user}}:Foo/vector.css seach {{ns:user}}:Foo/Vector.css.",
 'updated' => '(Air ùrachadh)',
+'note' => "'''An aire:'''",
 'previewnote' => "'''Cuimhnich nach eil ann ach ro-shealladh.'''
 Cha deach na mùthaidhean agad a shàbhaladh fhathast!",
+'previewconflict' => "Tha an ro-shealladh seo a' sealltainn dhut an teacsa san raon teacsa gu h-àrd mar a nochdas e ma shàbhaileas tu an-dràsta.",
+'session_fail_preview' => "'''Duilich! Cha b' urrainn dhuinn na dheasaich thu a làimhseachadh air sgàth call dàta an t-seisein.'''
+Nach fheuch thu ris a-rithist?
+Mur obraich e fhathast, feuch is [[Special:UserLogout|clàraich a-mach]] is a-steach a-rithist an uairsin.",
+'session_fail_preview_html' => "'''Duilich! Cha b' urrainn dhuinn na dheasaich thu a làimhseachadh air sgàth call dàta an t-seisein.'''
+
+''A chionn 's gun do chuir {{SITENAME}} HTML amh an comas, tha an ro-shealladh falaichte mar dhìon an aghaidh ionnsaighean JavaScript.''
+
+'''Mas e deasachadh dligheach a tha seo, feuch ris a-rithist.'''
+Mur obraich e fhathast, feuch is [[Special:UserLogout|clàraich a-mach]] is a-steach a-rithist an uairsin.",
+'token_suffix_mismatch' => "'''Dhiùlt sinn na dheasaich thu a chionn 's gun do chuir an cliant agad na caractaran puingeachaidh tro chèile san tòcan deasachaidh.'''
+Dhiùlt sinn na dheasaich thu air eagal 's gun coirbeadh e teacsa na duilleige.
+Tachraidh seo uaireannan ma chleachdar seirbheis-lìn progsaidh gun urra a tha làn de mhearachdan.",
+'edit_form_incomplete' => "'''Cha do ràinig cuid dhen fhoirm deasachaidh am frithealaichte; dèan cinnteach gu bheil gach deasachadh agad slàn is feuch ris a-rithist.'''",
 'editing' => "A' deasachadh $1",
 'editingsection' => "A' deasachadh $1 (earrann)",
+'editingcomment' => "A' deasachadh $1 (earrann ùr)",
 'editconflict' => 'Còmhstri deasachaidh: $1',
 'explainconflict' => "Tha cuideigin eile air an duilleag seo a mhùthadh on a thòisich thu fhèin air a dheasachadh.
 Tha am bogsa teacsa gu h-àrd a' nochdadh na duilleige mar a tha i an-dràsta.
@@ -729,6 +746,8 @@ Bidh agad ris na mùthaidhean agad fhilleadh a-steach san teacsa làithreach.
 Cha dèid '''ach an teacsa gu h-àrd''' a shàbhaladh nuair a bhriogas tu air \"{{int:savearticle}}\".",
 'yourtext' => 'An teacsa agad',
 'storedversion' => 'Lethbhreac taisgte',
+'nonunicodebrowser' => "'''Rabhadh: Chan eil am brabhsair agad co-chòrdail le Unicode.'''
+Chuir sinn gleus air dòigh dhut a nì cinnteach gun urrainn dhut duilleagan a shàbhaladh gu tèarainte: Nochdaidh caractaran taobh a-muigh ASCII mar chòd sia-dheicheach sa bhogsa deasachaidh.",
 'editingold' => "'''RABHADH: Tha thu a' deasachadh lethbhreac seann-aimsireil na duilleige seo.
 Ma shàbhalas tu seo, thèid gach mùthadh air chall a rinneadh a-mach on mhùthadh seo.'''",
 'yourdiff' => 'Caochlaidhean',
@@ -740,13 +759,33 @@ Tha thu a' toirt geall cuideachd gun do sgrìobh thu fhèin seo no gun do rinn t
 Mur eil thu ag iarraidh an sgrìobhaidh agad a dheasaichear is a sgaoilear le càch, na cuir e.<br />
 Ma dh'fhoilleachas tu rudeigin an seo, bidh tu a' dearbhadh gun do sgrìobh thu fhèin e, no gur ann às an raon phòballach a thàinig e; thoir aire '''nach eil''' sin a' gabhail a-staigh duilleagan-lìn mar as àbhaist (seall $1 airson barrachd fiosrachaidh). <br />
 '''NA CLEACHDAIBH SAOTHAIR FO DHLIGHE-SGRÌOBHAIDH GUN CHEAD!'''",
+'longpageerror' => "'''Mearachd: Tha an teacsa a chur thu thugainn {{PLURAL:$1 kilobyte|$1 kilobyte|$1 kilobyte|$1 kilobyte|$1 kilobyte|$1 kilobyte|}} a dh'fhaid is tha sin nas fhaide na tha ceadaichte ({{PLURAL:$1 kilobyte|$2 kilobyte|$2 kilobyte|$2 kilobyte|$2 kilobyte|$2 kilobyte|}}).'''
+Cha ghabh a shàbhaladh.",
+'readonlywarning' => "'''Rabhadh: Chaidh an stòr-dàta a ghlasadh a chum obair-ghlèidhidh agus chan urrainn dhut na còraichean-deasachaidh agad a chur gu feum an-dràsta fhèin.'''
+'S mathaid gum b' fheairrde dhut lethbhreac a dhèanamh dhen teacsa agus a shàbhaladh ann am faidhle ach an urrainn dhut a chleachdadh as a dhèidh seo.
+
+Seo am mìneachadh a thug an rianaire a ghlais e: $1",
 'protectedpagewarning' => "'''Rabhadh: Chaidh an duilleag seo a dhìon 's chan urrainn ach dhan fheadhainn aig a bheil ùghdarras rianaire a dheasachadh.'''
 Chì thu an clàr mu dheireadh san loga mar fhiosrachadh dhut gu h-ìosal:",
+'semiprotectedpagewarning' => "'''An aire:''' Chaidh an duilleag seo a dhìon 's chan fhaod ach cleachdaichean clàraichte a dheasachadh.
+Seo an rud mu dheireadh san loga mar fhiosrachadh dhut:",
+'cascadeprotectedwarning' => "'''Rabhadh:''' Chaidh an duilleag seo a dhìon 's chan fhaod ach rianairean a dheasachadh a chionn 's gun robh e am broinn {{PLURAL:$1|na duilleige|nan duilleagan}} a leanas a tha cascade-protected.",
+'titleprotectedwarning' => "'''Rabhadh: Chaidh an duilleag seo a dhìon 's feumar [[Special:ListGroupRights|còraichean sònraichte]] gus a dheasachadh.'''
+Seo an rud mu dheireadh san loga mar fhiosrachadh dhut:",
 'templatesused' => "Tha {{PLURAL:$1|teamplaid|theamplaid||teamplaid|theamplaid|teamplaidean|teamplaid}} 'gan cleachdadh air an duilleag seo:",
 'templatesusedpreview' => "Tha {{PLURAL:$1|teamplaid 'ga cleachdadh|teamplaidean 'gan cleachdadh|teamplaidean 'gan cleachdadh|teamplaidean 'gan cleachdadh|teamplaidean 'gan cleachdadh|teamplaidean 'gan cleachdadh}} san ro-shealladh seo:",
+'templatesusedsection' => "Tha {{PLURAL:$1|teamplaid 'ga cleachdadh|teamplaidean 'gan cleachdadh|teamplaidean 'gan cleachdadh|teamplaidean 'gan cleachdadh|teamplaidean 'gan cleachdadh|teamplaidean 'gan cleachdadh}} san earrann seo:",
 'template-protected' => '(air a dhìon)',
 'template-semiprotected' => '(air a leth-dhìon)',
 'hiddencategories' => "Tha an duilleag seo 'na ball de {{PLURAL:$1|1 roinn-seòrsa fhalaichte|$1 roinn-seòrsa fhalaichte|1 roinn-seòrsa fhalaichte|$1 roinn-seòrsa fhalaichte|$1 roinnean-seòrsa falaichte|$1 roinn-seòrsa fhalaichte}}:",
+'nocreatetitle' => 'Tha cruthachadh dhuilleagan cuingichte',
+'nocreatetext' => "Chuir {{SITENAME}} bacadh air cruthachadh de dhuilleagan ùra.
+'S urrainn dhut tilleadh is duilleag a tha ann mu thràth a dheasachadh no [[Special:UserLogin|clàradh a-steach no cunntas a chruthachadh]].",
+'nocreate-loggedin' => 'Chan eil cead agad duilleagan ùra a chruthachadh.',
+'sectioneditnotsupported-title' => 'Chan eil taic ri deasachadh earrannan',
+'sectioneditnotsupported-text' => 'Chan eil taic ri deasachadh earrannan air an duilleag seo.',
+'permissionserrors' => "Meareachd leis a' chead",
+'permissionserrorstext' => 'Chan eil cead agad sin a dhèanamh air sgàth {{PLURAL:$1|an adhbhair|nan adhbharan|an adhbhair|nan adhbharan|nan adhbharan}} a leanas:',
 'permissionserrorstext-withaction' => 'Chan eil cead agad airson "$2" air sgàth {{PLURAL:$1|an adhbhair|nan adhbharan|an adhbhair|nan adhbharan|nan adhbharan}} a leanas:',
 'recreate-moveddeleted-warn' => "'''Rabhadh: Tha thu gu bhith ath-chruthachadh duilleag a chaidh a sguabadh às roimhe.'''
 
@@ -754,14 +793,31 @@ Saoil am bu chòir dhut leantainn air adhart le deasachadh na duilleige?.
 Seo dhut loga an sguabaidh às agus a' ghluasaid mar fhiosrachadh dhut:",
 'moveddeleted-notice' => "Chaidh an duilleag seo a sguabadh às.
 Chì thu loga an sguabaidh às agus a' ghluasaid gu h-ìosal mar fhiosrachadh dhut.",
+'log-fulllog' => 'Seall an loga slàn',
+'edit-hook-aborted' => 'Sguireadh dhen deasachadh ri linn dubhan.
+Cha deach adhbhar a thoirt seachad.',
+'edit-gone-missing' => "Cha b' urrainn dhuinn an duilleag ath-nuadhachadh.
+Tha coltas gun deach a sguabadh às.",
+'edit-conflict' => 'Còmhstri deasachaidh.',
+'edit-no-change' => "Chaidh an obair-dheasachaidh agad a leigeil seachad a chionn 's nach do dh'atharraich thu dad.",
+'edit-already-exists' => "Cha b' urrainn dhuinn an duilleag ùr a chruthachadh.
+Tha e ann mu thràth.",
 
 # Parser/template warnings
+'expensive-parserfunction-warning' => "'''Rabhadh:''' Tha cus expensive parser function calls san duilleag seo.
+
+Bu chòir nas lugha na $2 {{PLURAL:$2|call|calls}} a bhith ann ach tha {{PLURAL:$1|$1 call|$1 calls}} ann.",
+'expensive-parserfunction-category' => 'Duilleagan le cus expensive parser function calls',
 'post-expand-template-inclusion-warning' => "'''Rabhadh:''' Tha meud na teamplaide ro mhòr.
 Cha dèid cuid dhith a ghabhail a-steach.",
 'post-expand-template-inclusion-category' => "Duilleagan far a bheil meud nan teamplaidean a' dol thairis air na tha ceadaichte",
 'post-expand-template-argument-warning' => "'''Rabhadh:''' Tha aon argamaid teamplaid air a' char as lugha air an duilleag seo aig a bheil meud leudachaidh ro mhòr.
 Chaidh na h-argamaidean sinn a leigeil seachad.",
 'post-expand-template-argument-category' => 'Duilleagan air an deach argamaidean teamplaidean fhàgail às',
+'parser-template-loop-warning' => 'Mhothaicheadh do lùb teamplaid: [[$1]]',
+
+# Account creation failure
+'cantcreateaccounttitle' => 'Cha ghabh an cunntas a chruthachadh',
 
 # History pages
 'viewpagelogs' => 'Seall logaichean na duilleige seo',
@@ -782,16 +838,31 @@ Mìneachadh: '''({{int:cur}})''' = an diofar eadar e 's am mùthadh as ùire, ''
 'history-show-deleted' => 'Na chaidh sguabadh às a-mhàin',
 'histfirst' => 'As sine',
 'histlast' => 'As ùire',
+'historyempty' => '(falamh)',
 
 # Revision feed
+'history-feed-title' => 'Eachdraidh nam mùthaidhean',
+'history-feed-description' => 'Eachdraidh nam mùthaidhean airson na duilleige seo air an uici',
 'history-feed-item-nocomment' => '$1 $2',
+'history-feed-empty' => "Chan eil an duilleag a dh'iarr thu ann.
+Dh'fhaoidte gun deach a sguabadh às an uici no gun deach ainm ùr a chur air.
+Feuch is [[Special:Search|lorg duilleagan ùra iomachaidh air an uici]]",
 
 # Revision deletion
+'rev-deleted-comment' => '(chaidh gearr-chunntas an deasachaidh a thoirt air falbh)',
+'rev-deleted-user' => '(chaidh an t-ainm-cleachdaiche a thoirt air falbh)',
+'rev-deleted-event' => '(chaidh gnìomh an loga a thoirt air falbh)',
 'rev-delundel' => 'seall/falaich',
+'rev-showdeleted' => 'seall',
+'revdelete-hide-user' => 'Falaich ainm-cleachdaiche/seòladh IP an deasaiche',
 'revdel-restore' => 'mùth follaiseachd',
 'revdel-restore-deleted' => 'mùthaidhean a chaidh a sguabadh às',
 'revdel-restore-visible' => 'mùthaidhean faicsinneach',
 
+# History merging
+'mergehistory-from' => 'An duilleag thùsail:',
+'mergehistory-reason' => 'Adhbhar:',
+
 # Merge log
 'revertmerge' => 'Dì-aontaich',
 
@@ -839,6 +910,7 @@ Mìneachadh: '''({{int:cur}})''' = an diofar eadar e 's am mùthadh as ùire, ''
 'search-interwiki-more' => '(barrachd)',
 'search-mwsuggest-enabled' => 'le molaidhean',
 'search-mwsuggest-disabled' => 'gun mholaidhean',
+'search-relatedarticle' => 'Co-cheangailte',
 'searchrelated' => 'co-cheangailte',
 'searchall' => 'a h-uile',
 'showingresults' => "A' nochdadh suas gu $1 {{PLURAL:$1|toradh|thoradh|toradh|thoradh|toraidhean|toradh}} gu h-ìosal a' tòiseachadh le #'''$2'''.",
@@ -853,6 +925,9 @@ Feuch ri ''all:'' a chuir air beulaibh an iarrtais agad gus rannsachadh a dhèan
 'powersearch-redir' => 'Seall ath-sheòlaidhean',
 'powersearch-field' => 'Lorg',
 
+# Quickbar
+'qbsettings-none' => 'Chan eil gin',
+
 # Preferences page
 'preferences' => 'Roghainnean',
 'mypreferences' => 'Mo roghainnean',
@@ -860,22 +935,59 @@ Feuch ri ''all:'' a chuir air beulaibh an iarrtais agad gus rannsachadh a dhèan
 'prefs-skin' => 'Bian',
 'skin-preview' => 'Ro-shealladh',
 'prefs-beta' => 'Feartan Beta',
+'prefs-datetime' => 'Ceann-là is àm',
 'prefs-labs' => 'Feartan nan deuchainn-lannan',
 'prefs-personal' => "Pròifil a' chleachdaiche",
+'prefs-rc' => 'Mùthaidhean ùra',
+'prefs-watchlist' => 'An clàr-faire',
+'prefs-resetpass' => 'Atharraich am facal-faire',
+'prefs-changeemail' => 'Atharraich am post-d',
+'prefs-setemail' => 'Suidhich seòladh puist-d',
+'prefs-email' => "Roghainnean a' phuist-d",
+'prefs-rendering' => 'Coltas',
 'saveprefs' => 'Sàbhail',
 'resetprefs' => 'Falamhaich atharrachaidhean nach deach a shàbhaladh fhathast',
+'restoreprefs' => 'Aisig na roghainnean bunaiteach uile',
+'prefs-editing' => "A' deasachadh",
+'prefs-edit-boxsize' => 'Meud uinneag an deasachaidh.',
 'rows' => 'Sreathan',
 'columns' => 'Colbhan',
+'searchresultshead' => 'Lorg',
+'stub-threshold-disabled' => 'À comas',
 'savedprefs' => 'Tha na roghainnean agad air an sàbhaladh.',
+'timezonelegend' => 'Roinn-tìde:',
+'localtime' => 'An t-àm ionadail:',
+'servertime' => 'Àm an fhrithealaichte:',
+'timezoneregion-africa' => 'Afraga',
+'timezoneregion-america' => 'Aimeireaga',
+'timezoneregion-antarctica' => 'An Antartaig',
+'timezoneregion-arctic' => 'An Arctaig',
+'timezoneregion-asia' => 'Àisia',
+'timezoneregion-atlantic' => 'An Cuan Siar',
+'timezoneregion-australia' => 'Astràilia',
+'timezoneregion-europe' => 'An Roinn-Eòrpa',
+'timezoneregion-indian' => 'An Cuan Innseanach',
+'timezoneregion-pacific' => 'An Cuan Sèimh',
 'default' => 'an roghainn bhunaiteach',
+'prefs-custom-css' => 'CSS gnàthaichte',
 'youremail' => 'Post-dealain:',
 'username' => 'Ainm-cleachdaiche:',
 'yourrealname' => "An dearbh ainm a th' ort:",
 'yourlanguage' => 'Cànan:',
 'yournick' => 'Earr-sgrìobhadh ùr:',
+'yourgender' => 'Gnè:',
+'gender-unknown' => 'Gun innse',
+'gender-male' => 'Fireann',
+'gender-female' => 'Boireann',
+'email' => 'Post-d:',
 'prefs-help-email' => "Chan leig thu leas post-dealain a chur ann ach bidh feum air ma dhìochuimhnicheas tu am facal-faire agad 's ma dh'iarras tu fear ùr.",
 'prefs-help-email-others' => "'S urrainn dhut leigeil le daoine eile post-dealain a chur thugad tro cheangal air an duilleag agad.
 Chan fhaicear an seòladh fhèin nuair a chuireas cuideigin post-dealain thugad.",
+'prefs-advancedediting' => 'Roghainnean adhartach',
+'prefs-advancedrc' => 'Roghainnean adhartach',
+'prefs-advancedrendering' => 'Roghainnean adhartach',
+'prefs-advancedsearchoptions' => 'Roghainnean adhartach',
+'prefs-advancedwatchlist' => 'Roghainnean adhartach',
 
 # User rights
 'userrights-changeable-col' => 'Buidhnean as urrainn dhut atharrachadh',
@@ -883,10 +995,17 @@ Chan fhaicear an seòladh fhèin nuair a chuireas cuideigin post-dealain thugad.
 # Groups
 'group-sysop' => 'Rianadairean',
 
+'group-user-member' => '{{GENDER:$1|cleachdaiche}}',
+'group-bot-member' => '{{GENDER:$1|bot}}',
+'group-sysop-member' => '{{GENDER:$1|rianaire}}',
+'group-bureaucrat-member' => '{{GENDER:$1|biùrocrat}}',
+
+'grouppage-user' => '{{ns:project}}:Cleachdaichean',
 'grouppage-sysop' => '{{ns:project}}:Rianadairean',
 
 # User rights log
 'rightslog' => "Loga còraichean a' chleachdaiche",
+'rightsnone' => '(chan eil gin)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-edit' => 'deasaich an duilleag seo',
@@ -935,9 +1054,11 @@ Tha duilleagan air [[Special:Watchlist|do chlàr-faire]] ann an litrichean '''tr
 
 # Upload
 'upload' => 'Luchdaich suas faidhle',
+'uploadbtn' => 'Luchdaich suas faidhle',
 'uploadlogpage' => 'Loga an luchdaidh suas',
 'filename' => 'Ainm-faidhle',
 'filedesc' => 'Gearr-chunntas',
+'fileuploadsummary' => 'Gearr-chunntas:',
 'filestatus' => 'Cor dlighe-sgrìobhaidh:',
 'ignorewarning' => 'Leig seachad an rabhadh agus sàbhail am faidhle co-dhiù',
 'badfilename' => 'Ainm ìomhaigh air atharrachadh ri "$1".',
index 65f531c..83428da 100644 (file)
@@ -163,60 +163,60 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#REDIRECCIÓN', '#REDIRECIONAMENTO', '#REDIRECT' ),
-       '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__', '__SUMARIO__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__SECCIÓNSNONEDITABLES__', '__NÃOEDITARSEÇÃO__', '__SEMEDITARSEÇÃO__', '__NAOEDITARSECAO__', '__SEMEDITARSECAO__', '__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' ),
-       'currentday2'             => array( '1', 'DÍAACTUAL2', 'DIAATUAL2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'NOMEDODÍAACTUAL', 'NOMEDODIAATUAL', 'CURRENTDAYNAME' ),
-       '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' ),
-       'localday2'               => array( '1', 'DÍALOCAL2', 'DIALOCAL2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'NOMEDODÍALOCAL', 'NOMEDODIALOCAL', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'ANOLOCAL', 'LOCALYEAR' ),
-       'localhour'               => array( '1', 'HORALOCAL', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'NÚMERODEPÁXINAS', 'NUMERODEPAGINAS', 'NÚMERODEPÁGINAS', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'NÚMERODEARTIGOS', 'NUMERODEARTIGOS', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'NÚMERODEFICHEIROS', 'NUMERODEARQUIVOS', 'NÚMERODEARQUIVOS', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'NÚMERODEUSUARIOS', 'NUMERODEUSUARIOS', 'NÚMERODEUSUÁRIOS', 'NUMBEROFUSERS' ),
-       'numberofedits'           => array( '1', 'NÚMERODEEDICIÓNS', 'NUMERODEEDICOES', 'NÚMERODEEDIÇÕES', 'NUMBEROFEDITS' ),
-       'pagename'                => array( '1', 'NOMEDAPÁXINA', 'NOMEDAPAGINA', 'NOMEDAPÁGINA', 'PAGENAME' ),
-       'namespace'               => array( '1', 'ESPAZODENOMES', 'DOMINIO', 'DOMÍNIO', 'ESPACONOMINAL', 'ESPAÇONOMINAL', 'NAMESPACE' ),
-       'fullpagename'            => array( '1', 'NOMECOMPLETODAPÁXINA', 'NOMECOMPLETODAPAGINA', 'NOMECOMPLETODAPÁGINA', 'FULLPAGENAME' ),
-       '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', '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', '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__' ),
-       'language'                => array( '0', '#LINGUA:', '#IDIOMA:', '#LANGUAGE:' ),
-       'numberofadmins'          => array( '1', 'NÚMERODEADMINISTRADORES', 'NUMERODEADMINISTRADORES', 'NUMBEROFADMINS' ),
-       'special'                 => array( '0', 'especial', 'special' ),
-       'defaultsort'             => array( '1', 'ORDENAR:', 'ORDENACAOPADRAO', 'ORDENAÇÃOPADRÃO', 'ORDEMPADRAO', 'ORDEMPADRÃO', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'tag'                     => array( '0', 'etiqueta', 'tag' ),
-       'hiddencat'               => array( '1', '__CATEGORÍAOCULTA__', '__CATEGORIAOCULTA__', '__CATOCULTA__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'PÁXINASNACATEGORÍA', 'PAGINASNACATEGORIA', 'PÁGINASNACATEGORIA', 'PAGINASNACAT', 'PÁGINASNACAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'TAMAÑODAPÁXINA', 'TAMANHODAPAGINA', 'TAMANHODAPÁGINA', 'PAGESIZE' ),
+       'redirect'                  => array( '0', '#REDIRECCIÓN', '#REDIRECIONAMENTO', '#REDIRECT' ),
+       '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__', '__SUMARIO__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__SECCIÓNSNONEDITABLES__', '__NÃOEDITARSEÇÃO__', '__SEMEDITARSEÇÃO__', '__NAOEDITARSECAO__', '__SEMEDITARSECAO__', '__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' ),
+       'currentday2'               => array( '1', 'DÍAACTUAL2', 'DIAATUAL2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'NOMEDODÍAACTUAL', 'NOMEDODIAATUAL', 'CURRENTDAYNAME' ),
+       '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' ),
+       'localday2'                 => array( '1', 'DÍALOCAL2', 'DIALOCAL2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'NOMEDODÍALOCAL', 'NOMEDODIALOCAL', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'ANOLOCAL', 'LOCALYEAR' ),
+       'localhour'                 => array( '1', 'HORALOCAL', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'NÚMERODEPÁXINAS', 'NUMERODEPAGINAS', 'NÚMERODEPÁGINAS', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'NÚMERODEARTIGOS', 'NUMERODEARTIGOS', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'NÚMERODEFICHEIROS', 'NUMERODEARQUIVOS', 'NÚMERODEARQUIVOS', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'NÚMERODEUSUARIOS', 'NUMERODEUSUARIOS', 'NÚMERODEUSUÁRIOS', 'NUMBEROFUSERS' ),
+       'numberofedits'             => array( '1', 'NÚMERODEEDICIÓNS', 'NUMERODEEDICOES', 'NÚMERODEEDIÇÕES', 'NUMBEROFEDITS' ),
+       'pagename'                  => array( '1', 'NOMEDAPÁXINA', 'NOMEDAPAGINA', 'NOMEDAPÁGINA', 'PAGENAME' ),
+       'namespace'                 => array( '1', 'ESPAZODENOMES', 'DOMINIO', 'DOMÍNIO', 'ESPACONOMINAL', 'ESPAÇONOMINAL', 'NAMESPACE' ),
+       'fullpagename'              => array( '1', 'NOMECOMPLETODAPÁXINA', 'NOMECOMPLETODAPAGINA', 'NOMECOMPLETODAPÁGINA', 'FULLPAGENAME' ),
+       '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', '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', '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__' ),
+       'language'                  => array( '0', '#LINGUA:', '#IDIOMA:', '#LANGUAGE:' ),
+       'numberofadmins'            => array( '1', 'NÚMERODEADMINISTRADORES', 'NUMERODEADMINISTRADORES', 'NUMBEROFADMINS' ),
+       'special'                   => array( '0', 'especial', 'special' ),
+       'defaultsort'               => array( '1', 'ORDENAR:', 'ORDENACAOPADRAO', 'ORDENAÇÃOPADRÃO', 'ORDEMPADRAO', 'ORDEMPADRÃO', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'tag'                       => array( '0', 'etiqueta', 'tag' ),
+       'hiddencat'                 => array( '1', '__CATEGORÍAOCULTA__', '__CATEGORIAOCULTA__', '__CATOCULTA__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'PÁXINASNACATEGORÍA', 'PAGINASNACATEGORIA', 'PÁGINASNACATEGORIA', 'PAGINASNACAT', 'PÁGINASNACAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'TAMAÑODAPÁXINA', 'TAMANHODAPAGINA', 'TAMANHODAPÁGINA', 'PAGESIZE' ),
 );
 
 $separatorTransformTable = array( ',' => '.', '.' => ',' );
@@ -1932,6 +1932,7 @@ Poida que queira editar a descrición da [$2 páxina de descrición do 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 */',
+'upload-disallowed-here' => 'Por desgraza, non pode sobrescribir esta imaxe.',
 
 # File reversion
 'filerevert' => 'Reverter $1',
@@ -3057,6 +3058,8 @@ Isto, probabelmente, se debe a unha ligazón cara a un sitio externo que está n
 'pageinfo-length' => 'Lonxitude da páxina (en bytes)',
 'pageinfo-article-id' => 'ID da páxina',
 'pageinfo-robot-policy' => 'Estado do motor de procuras',
+'pageinfo-robot-index' => 'Indexable',
+'pageinfo-robot-noindex' => 'Non indexable',
 'pageinfo-views' => 'Número de visitas',
 'pageinfo-watchers' => 'Número de vixiantes da páxina',
 'pageinfo-redirects-name' => 'Redireccións cara a esta páxina',
@@ -3070,7 +3073,7 @@ Isto, probabelmente, se debe a unha ligazón cara a un sitio externo que está n
 'pageinfo-authors' => 'Número total de autores distintos',
 'pageinfo-recent-edits' => 'Número de edicións recentes (durante os últimos $1)',
 'pageinfo-recent-authors' => 'Número de autores distintos recentes',
-'pageinfo-restriction' => 'Protección da páxina (<code>$1</code>)',
+'pageinfo-restriction' => 'Protección da páxina (<code>{{lcfirst:$1}}</code>)',
 'pageinfo-magic-words' => '{{PLURAL:$1|Palabra máxica|Palabras máxicas}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Categoría agochada|Categorías agochadas}} ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|Modelo incluído|Modelos incluídos}} ($1)',
@@ -3122,11 +3125,12 @@ O seu sistema pode quedar comprometido se o executa.",
 'imagemaxsize' => "Límite de tamaño das imaxes:<br />''(nas páxinas de descrición de ficheiros)''",
 '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-pages' => '$1 × $2 píxeles, tamaño do ficheiro: $3, tipo MIME: $4, $5 {{PLURAL:$5|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-pages' => '$1 × $2 píxeles; tamaño do ficheiro: $3; tipo MIME: $4; $5 {{PLURAL:$5|páxina|páxinas}}',
 '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; resolución de $1 × $2 píxeles; tamaño do ficheiro: $3',
+'svg-long-desc-animated' => 'ficheiro SVG animado; resolución de $1 × $2 píxeles; tamaño do ficheiro: $3',
 'show-big-image' => 'Imaxe na máxima resolución',
 'show-big-image-preview' => 'Tamaño desta vista previa: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Outra resolución|Outras resolucións}}: $1.',
@@ -3136,6 +3140,8 @@ O seu sistema pode quedar comprometido se o executa.",
 '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}}',
+'file-no-thumb-animation' => "'''Nota: Debido a algunhas limitacións técnicas, non se ve a animación das miniaturas deste ficheiro.'''",
+'file-no-thumb-animation-gif' => "'''Nota: Debido a algunhas limitacións técnicas, non se ve a animación das miniaturas das imaxes GIF de alta resolución como este ficheiro.'''",
 
 # Special:NewFiles
 'newimages' => 'Galería de imaxes novas',
index a81a230..ea1c5b5 100644 (file)
  * @author Zylbath
  */
 
+$namespaceNames = array(
+       NS_USER             => '𐌽𐌹𐌿𐍄𐌰𐌽𐌳𐍃',
+       NS_USER_TALK        => '𐌽𐌹𐌿𐍄𐌰𐌽𐌳𐌹𐍃_𐌲𐌰𐍅𐌰𐌿𐍂𐌳𐌾𐌰',
+       NS_PROJECT_TALK     => '𐌸𐌹𐍃_$1_𐌲𐌰𐍅𐌰𐌿𐍂𐌳𐌾𐌰',
+       NS_FILE             => '𐍆𐌴𐌹𐌻𐌰',
+       NS_FILE_TALK        => '𐍆𐌴𐌹𐌻𐌹𐌽𐍃_𐌲𐌰𐍅𐌰𐌿𐍂𐌳𐌾𐌰',
+       NS_TEMPLATE         => '𐍆𐌰𐌿𐍂𐌰𐌼𐌴𐌻𐌴𐌹𐌽𐍃',
+       NS_TEMPLATE_TALK    => '𐍆𐌰𐌿𐍂𐌰𐌼𐌴𐌻𐌴𐌹𐌽𐌰𐌹𐍃_𐌲𐌰𐍅𐌰𐌿𐍂𐌳𐌾𐌰',
+       NS_HELP             => '𐌷𐌹𐌻𐍀𐌰',
+       NS_HELP_TALK        => '𐌷𐌹𐌻𐍀𐍉𐍃_𐌲𐌰𐍅𐌰𐌿𐍂𐌳𐌾𐌰',
+       NS_CATEGORY         => '𐌷𐌰𐌽𐍃𐌰',
+       NS_CATEGORY_TALK    => '𐌷𐌰𐌽𐍃𐍉𐍃_𐌲𐌰𐍅𐌰𐌿𐍂𐌳𐌾𐌰',
+);
+
+$specialPageAliases = array(
+       'Allpages'                  => array( '𐌰𐌻𐌻𐍃𐍃𐌴𐌹𐌳𐍉𐌽𐍃' ),
+       'Recentchanges'             => array( '𐌰𐍆𐍄𐌿𐌼𐌹𐍃𐍄𐍉𐍃𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐌴𐌹𐍃' ),
+);
+
 $messages = array(
 'underline-always' => 'Sinteino',
 'underline-never'  => 'Niu',
index 3644766..271cb56 100644 (file)
@@ -127,7 +127,7 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'displaytitle'            => array( '1', 'SYTETITEL', 'SEITENTITEL', 'DISPLAYTITLE' ),
+       'displaytitle'              => array( '1', 'SYTETITEL', 'SEITENTITEL', 'DISPLAYTITLE' ),
 );
 
 $linkTrail = '/^([äöüßa-z]+)(.*)$/sDu';
index ab1b0be..473f0c6 100644 (file)
@@ -862,7 +862,7 @@ $2
 જ્યારે તમે વેબ આધારિત  અજ્ઞાત પ્રોક્સી વાપરતા હોવ ત્યારે આવું બની શકે છે.",
 'edit_form_incomplete' => "'''ફેરફાર પત્રનો અમુક ભાગ સર્વર સુધી ન પહોંચ્યો; ખાત્રી કરો કે તમે કરેલા ફેરફાર બરાબર છે અને ફરી પ્રયત્ન કરો.'''",
 'editing' => '$1નો ફેરફાર કરી રહ્યા છે',
-'creating' => '$1 àª¬àª¨àª¾àªµà«\87 àª\9bà«\87',
+'creating' => '$1 àª¬àª¨àª¾àªµà«\80 àª°àª¹à«\8dયા àª\9bà«\8b',
 'editingsection' => '$1 (પરિચ્છેદ)નો ફેરફાર કરી રહ્યા છો',
 'editingcomment' => '$1 (પરિચ્છેદ)નો ફેરફાર કરી રહ્યા છો',
 'editconflict' => 'ફેરફારમાં વિસંગતતા: $1',
@@ -1506,7 +1506,7 @@ HTML નાકું ચકાસો',
 'rcshowhidepatr' => ' $1 ચોકીયાત ફેરફારો',
 'rcshowhidemine' => 'મારા ફેરફારો $1',
 'rclinks' => 'છેલ્લાં $2 દિવસમાં થયેલા છેલ્લાં $1 ફેરફારો દર્શાવો<br />$3',
-'diff' => 'તફાવત',
+'diff' => 'ભà«\87દ',
 'hist' => 'ઇતિહાસ',
 'hide' => 'છુપાવો',
 'show' => 'બતાવો',
@@ -2252,7 +2252,7 @@ Deleting it may disrupt database operations of {{SITENAME}};',
 'rollback' => 'ફેરફારો ઉલટાવો',
 'rollback_short' => 'ઉલટાવો',
 'rollbacklink' => 'પાછું વાળો',
-'rollbacklinkcount' => '$1 {{PLURAL:$1|ફેરફાર|ફેરફારો}} કરતાં વધુ પાછાં લાવો',
+'rollbacklinkcount' => '$1 {{PLURAL:$1|ફેરફાર પાછો વાળો|ફેરફારો પાછા વાળો}}',
 'rollbacklinkcount-morethan' => '$1 {{PLURAL:$1|ફેરફાર|ફેરફારો}} કરતાં ઓછું પાછું લાવો',
 'rollbackfailed' => 'ઉલટાવવું નિષ્ફળ',
 'cantrollback' => 'આ ફેરફારો ઉલટાવી નહી શકાય
index 3776098..45caf62 100644 (file)
@@ -63,27 +63,27 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'currentmonth'            => array( '1', 'KĒIAMAHINA', 'KEIAMAHINA', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonthname'        => array( '1', 'KĒIAINOAMAHINA', 'KEIAINOAMAHINA', 'CURRENTMONTHNAME' ),
-       'currentday'              => array( '1', 'KĒIALĀ', 'KEIALA', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'KĒIALĀ2', 'KEIALA2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'KĒIAINOALĀ', 'KEIAINOALA', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'KĒIAMAKAHIKI', 'KEIAMAKAHIKI', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'KĒIAMANAWA', 'KEIAMANAWA', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'KĒIAHOLA', 'KEIAHOLA', 'CURRENTHOUR' ),
-       'numberofpages'           => array( '1', 'HELUʻAOʻAO', 'HELUAOAO', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'HELUMEA', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'HELUWAIHONA', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'HELUMEAHOʻOHANA', 'HELUMEAHOOHANA', 'NUMBEROFUSERS' ),
-       'numberofedits'           => array( '1', 'HELULOLI', 'NUMBEROFEDITS' ),
-       'pagename'                => array( '1', 'INOAʻAOʻAO', 'INOAAOAO', 'PAGENAME' ),
-       'img_right'               => array( '1', 'ʻākau', 'ākau', 'akau', 'right' ),
-       'img_left'                => array( '1', 'hema', 'left' ),
-       'img_none'                => array( '1', 'ʻaʻohe', 'aohe', 'none' ),
-       'img_link'                => array( '1', 'loulou=$1', 'link=$1' ),
-       'currentweek'             => array( '1', 'KĒIAPULE', 'KEIAPULE', 'CURRENTWEEK' ),
-       'language'                => array( '0', '#ʻŌLELO', '#ŌLELO', '#OLELO', '#LANGUAGE:' ),
-       'numberofadmins'          => array( '1', 'HELUKAHU', 'NUMBEROFADMINS' ),
+       'currentmonth'              => array( '1', 'KĒIAMAHINA', 'KEIAMAHINA', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonthname'          => array( '1', 'KĒIAINOAMAHINA', 'KEIAINOAMAHINA', 'CURRENTMONTHNAME' ),
+       'currentday'                => array( '1', 'KĒIALĀ', 'KEIALA', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'KĒIALĀ2', 'KEIALA2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'KĒIAINOALĀ', 'KEIAINOALA', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'KĒIAMAKAHIKI', 'KEIAMAKAHIKI', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'KĒIAMANAWA', 'KEIAMANAWA', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'KĒIAHOLA', 'KEIAHOLA', 'CURRENTHOUR' ),
+       'numberofpages'             => array( '1', 'HELUʻAOʻAO', 'HELUAOAO', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'HELUMEA', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'HELUWAIHONA', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'HELUMEAHOʻOHANA', 'HELUMEAHOOHANA', 'NUMBEROFUSERS' ),
+       'numberofedits'             => array( '1', 'HELULOLI', 'NUMBEROFEDITS' ),
+       'pagename'                  => array( '1', 'INOAʻAOʻAO', 'INOAAOAO', 'PAGENAME' ),
+       'img_right'                 => array( '1', 'ʻākau', 'ākau', 'akau', 'right' ),
+       'img_left'                  => array( '1', 'hema', 'left' ),
+       'img_none'                  => array( '1', 'ʻaʻohe', 'aohe', 'none' ),
+       'img_link'                  => array( '1', 'loulou=$1', 'link=$1' ),
+       'currentweek'               => array( '1', 'KĒIAPULE', 'KEIAPULE', 'CURRENTWEEK' ),
+       'language'                  => array( '0', '#ʻŌLELO', '#ŌLELO', '#OLELO', '#LANGUAGE:' ),
+       'numberofadmins'            => array( '1', 'HELUKAHU', 'NUMBEROFADMINS' ),
 );
 
 $messages = array(
index 10fb729..2c878b1 100644 (file)
@@ -67,158 +67,158 @@ $bookstoreList = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#הפניה', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__ללא_תוכן_עניינים__', '__ללא_תוכן__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__ללא_גלריה__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__חייב_תוכן_עניינים__', '__חייב_תוכן__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__תוכן_עניינים__', '__תוכן__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__ללא_עריכה__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '__ללא_כותרת__', '__NOHEADER__' ),
-       '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' ),
-       'currentdayname'          => array( '1', 'שם יום נוכחי', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'שנה נוכחית', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'שעה נוכחית', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'שעות נוכחיות', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'חודש מקומי', 'חודש מקומי 2', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', 'חודש מקומי 1', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'שם חודש מקומי', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'שם חודש מקומי קניין', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'קיצור חודש מקומי', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'יום מקומי', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'יום מקומי 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' ),
-       'numberofusers'           => array( '1', 'מספר משתמשים', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'מספר משתמשים פעילים', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'מספר עריכות', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'מספר צפיות', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'שם הדף', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'שם הדף מקודד', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'מרחב השם', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'מרחב השם מקודד', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'מרחב השיחה', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'מרחב השיחה מקודד', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'מרחב הנושא', 'מרחב הערכים', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'מרחב הנושא מקודד', 'מרחב הערכים מקודד', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'שם הדף המלא', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'שם הדף המלא מקודד', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'שם דף המשנה', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'שם דף המשנה מקודד', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'שם דף הבסיס', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'שם דף הבסיס מקודד', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'שם דף השיחה', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'שם דף השיחה מקודד', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'שם דף הנושא', 'שם הערך', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       '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', '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_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', 'מרחב שם מקודד:', '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__' ),
-       '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:' ),
-       'fullurl'                 => array( '0', 'כתובת מלאה:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'כתובת מלאה מקודד:', 'FULLURLE:' ),
-       'canonicalurl'            => array( '0', 'כתובת קנונית:', 'CANONICALURL:' ),
-       'canonicalurle'           => array( '0', 'כתובת קנונית מקודד:', 'CANONICALURLE:' ),
-       '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', 'גרסה נוכחית', '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:' ),
-       '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:' ),
-       '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__' ),
-       'numberingroup'           => array( '1', 'מספר בקבוצה', 'NUMBERINGROUP', 'NUMINGROUP' ),
-       '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' ),
-       'defaultsort_noerror'     => array( '0', 'ללא שגיאה', 'noerror' ),
-       'defaultsort_noreplace'   => array( '0', 'ללא החלפה', 'noreplace' ),
+       'redirect'                  => array( '0', '#הפניה', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__ללא_תוכן_עניינים__', '__ללא_תוכן__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__ללא_גלריה__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__חייב_תוכן_עניינים__', '__חייב_תוכן__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__תוכן_עניינים__', '__תוכן__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__ללא_עריכה__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '__ללא_כותרת__', '__NOHEADER__' ),
+       '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' ),
+       'currentdayname'            => array( '1', 'שם יום נוכחי', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'שנה נוכחית', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'שעה נוכחית', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'שעות נוכחיות', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'חודש מקומי', 'חודש מקומי 2', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'חודש מקומי 1', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'שם חודש מקומי', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'שם חודש מקומי קניין', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'קיצור חודש מקומי', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'יום מקומי', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'יום מקומי 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' ),
+       'numberofusers'             => array( '1', 'מספר משתמשים', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'מספר משתמשים פעילים', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'מספר עריכות', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'מספר צפיות', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'שם הדף', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'שם הדף מקודד', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'מרחב השם', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'מרחב השם מקודד', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'מרחב השיחה', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'מרחב השיחה מקודד', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'מרחב הנושא', 'מרחב הערכים', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'מרחב הנושא מקודד', 'מרחב הערכים מקודד', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'שם הדף המלא', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'שם הדף המלא מקודד', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'שם דף המשנה', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'שם דף המשנה מקודד', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'שם דף הבסיס', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'שם דף הבסיס מקודד', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'שם דף השיחה', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'שם דף השיחה מקודד', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'שם דף הנושא', 'שם הערך', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       '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', '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_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', 'מרחב שם מקודד:', '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__' ),
+       '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:' ),
+       'fullurl'                   => array( '0', 'כתובת מלאה:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'כתובת מלאה מקודד:', 'FULLURLE:' ),
+       'canonicalurl'              => array( '0', 'כתובת קנונית:', 'CANONICALURL:' ),
+       'canonicalurle'             => array( '0', 'כתובת קנונית מקודד:', 'CANONICALURLE:' ),
+       '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', 'גרסה נוכחית', '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:' ),
+       '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:' ),
+       '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__' ),
+       'numberingroup'             => array( '1', 'מספר בקבוצה', 'NUMBERINGROUP', 'NUMINGROUP' ),
+       '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' ),
+       'defaultsort_noerror'       => array( '0', 'ללא שגיאה', 'noerror' ),
+       'defaultsort_noreplace'     => array( '0', 'ללא החלפה', 'noreplace' ),
 );
 
 $specialPageAliases = array(
@@ -675,7 +675,7 @@ $1',
 'databaseerror' => 'שגיאת בסיס נתונים',
 'dberrortext' => 'אירעה שגיאת תחביר בשאילתה לבסיס הנתונים.
 שגיאה זו עלולה להעיד על באג בתוכנה.
\94ש×\90×\99×\9cת×\94 ×\94×\90×\97ר×\95× ×\94 ×\9c×\91ס×\99ס ×\94נת×\95× ×\99×\9d ×©×\94ת×\9b×\95נה ניסתה להריץ הייתה:
\94ש×\90×\99×\9cת×\94 ×\94×\90×\97ר×\95× ×\94 ×\9c×\91ס×\99ס ×\94נת×\95× ×\99×\9d ×©×\94ת×\95×\9bנה ניסתה להריץ הייתה:
 <blockquote lang="en" dir="ltr"><code>$1</code></blockquote>
 מתוך הפונקציה "<code lang="en" dir="ltr">$2</code>".
 בסיס הנתונים החזיר את השגיאה הבאה: "<samp lang="en" dir="ltr">$3: $4</samp>".',
@@ -2050,6 +2050,7 @@ $1',
 'shared-repo' => 'מקום איחסון משותף',
 'shared-repo-name-wikimediacommons' => 'ויקישיתוף',
 'filepage.css' => '/* הסגנונות הנכתבים כאן יוכללו בדף תיאור הקובץ, כולל באתרי ויקי זרים */',
+'upload-disallowed-here' => 'למרבה הצער, אין לך הרשאה להעלות גרסה אחרת של התמונה הזאת.',
 
 # File reversion
 'filerevert' => 'שחזור $1',
@@ -2288,7 +2289,7 @@ $1',
 'linksearch-ok' => 'חיפוש',
 'linksearch-text' => 'ניתן להשתמש בתווים כלליים, לדוגמה <span dir="ltr">"*.wikipedia.org"</span>.
 נדרשת לפחות סיומת אינטרנט (TLD), למשל <span dir="ltr">"*.org"</span>.<br />
-פרוטוקולים נתמכים: <tt dir="ltr">$1</code> (אין להוסיף אותם בחיפוש).',
+פרוטוקולים נתמכים: <code dir="ltr">$1</code> (אין להוסיף אותם בחיפוש).',
 'linksearch-line' => '$1 מקושר מהדף $2',
 'linksearch-error' => 'תווים כלליים יכולים להופיע רק בתחילת שם השרת.',
 
@@ -2334,7 +2335,7 @@ $1',
 'mailnologin' => 'אין כתובת לשליחה',
 'mailnologintext' => 'עליכם [[Special:UserLogin|להיכנס לחשבון]] ולהגדיר לעצמכם כתובת דואר אלקטרוני תקינה ב[[Special:Preferences|העדפות המשתמש]] שלכם כדי לשלוח דואר למשתמש אחר.',
 'emailuser' => 'שליחת דואר אלקטרוני למשתמש זה',
-'emailuser-title-target' => 'ש×\9c×\99×\97ת ×\93×\95×\90\9c {{GENDER:$1|×\9c×\9eשת×\9eש ×\94×\96×\94\9c×\9eשת×\9eשת ×\94×\96×\90ת}}',
+'emailuser-title-target' => 'ש×\9c×\99×\97ת ×\93×\95×\90\9c {{GENDER:$1|×\9c×\9eשת×\9eש ×\96×\94\9c×\9eשת×\9eשת ×\96×\95}}',
 'emailuser-title-notarget' => 'שליחת דוא"ל למשתמש',
 'emailpage' => 'שליחת דואר למשתמש',
 'emailpagetext' => 'ניתן להשתמש בטופס כדי לשלוח הודעת דואר אלקטרוני למשתמש זה.
@@ -3166,29 +3167,31 @@ $1',
 'pageinfo-header-basic' => 'מידע בסיסי',
 'pageinfo-header-edits' => 'היסטוריית עריכות',
 'pageinfo-header-restrictions' => 'הגנה על הדף',
-'pageinfo-header-properties' => 'מאפייני דף',
-'pageinfo-display-title' => '×\94×\9b×\95תרת ×\94×\9e×\95צ×\92ת',
-'pageinfo-default-sort' => '×\9eפת×\97 ×\9e×\99×\95×\9f רגיל',
+'pageinfo-header-properties' => '×\9e×\90פ×\99×\99× ×\99 ×\94×\93×£',
+'pageinfo-display-title' => '×\9b×\95תרת ×\94תצ×\95×\92×\94',
+'pageinfo-default-sort' => '×\9eפת×\97 ×\94×\9e×\99×\95×\9f ×\94רגיל',
 'pageinfo-length' => 'אורך הדף (בבתים)',
-'pageinfo-article-id' => 'מזהה דף',
+'pageinfo-article-id' => '×\9e×\96×\94×\94 ×\94×\93×£',
 'pageinfo-robot-policy' => 'מצב מנוע חיפוש',
-'pageinfo-views' => 'מספר צפיות',
+'pageinfo-robot-index' => 'יכול להיאסף למפתחות חיפוש',
+'pageinfo-robot-noindex' => 'לא יכול להיאסף למפתחות חיפוש',
+'pageinfo-views' => 'מספר הצפיות',
 'pageinfo-watchers' => 'מספר העוקבים אחר הדף',
-'pageinfo-redirects-name' => '×\94פנ×\99×\95ת ×\9c×\93×£ ×\94×\96×\94',
-'pageinfo-subpages-name' => 'דפי־משנה',
+'pageinfo-redirects-name' => 'הפניות לדף זה',
+'pageinfo-subpages-name' => 'דפי־משנה של דף זה',
 'pageinfo-subpages-value' => '$1 ({{PLURAL:$2|הפניה אחת|$2 הפניות}}; {{PLURAL:$3|דף רגיל אחד|$3 דפים רגילים}})',
 'pageinfo-firstuser' => 'יוצר הדף',
 'pageinfo-firsttime' => 'תאריך יצירת הדף',
 'pageinfo-lastuser' => 'העורך האחרון',
 'pageinfo-lasttime' => 'תאריך העריכה האחרונה',
-'pageinfo-edits' => 'מספר העריכות',
-'pageinfo-authors' => '×\9b×\95ת×\91×\99×\9d ×\99×\99×\97×\95×\93×\99ים',
+'pageinfo-edits' => 'מספר העריכות הכולל',
+'pageinfo-authors' => '×\94×\9eספר ×\94×\9b×\95×\9c×\9c ×©×\9c ×\9b×\95ת×\91×\99×\9d ×©×\95× ים',
 'pageinfo-recent-edits' => 'מספר העריכות לאחרונה ($1)',
 'pageinfo-recent-authors' => 'מספר הכותבים הייחודיים לאחרונה',
-'pageinfo-restriction' => 'הגנה על דף (<code>$1</code>)',
-'pageinfo-magic-words' => '{{PLURAL:$1|מילת קסם|מילות קסם ($1)}}',
-'pageinfo-hidden-categories' => '{{PLURAL:$1|קטגוריה מוסתרת|קטגוריות מוסתרות ($1)}}',
-'pageinfo-templates' => '{{PLURAL:$1|תבנית מוכללת|תבניות מוכללות ($1)}}',
+'pageinfo-restriction' => '×\94×\92× ×\94 ×¢×\9c ×\94×\93×£ (<code>$1</code>)',
+'pageinfo-magic-words' => '{{PLURAL:$1|מילת קסם|מילות קסם}} ($1)',
+'pageinfo-hidden-categories' => '{{PLURAL:$1|קטגוריה מוסתרת|קטגוריות מוסתרות}} ($1)',
+'pageinfo-templates' => '{{PLURAL:$1|תבנית מוכללת|תבניות מוכללות}} ($1)',
 
 # Skin names
 'skinname-standard' => 'קלאסי',
@@ -3243,6 +3246,7 @@ $1',
 'file-info-size-pages' => '<span dir="ltr">$1 × $2</span> פיקסלים, גודל הקובץ: $3, סוג MIME‏: $4, {{PLURAL:$5|דף אחד|$5 דפים}}',
 'file-nohires' => 'אין גרסה ברזולוציה גבוהה יותר.',
 'svg-long-desc' => 'קובץ SVG, הגודל המקורי: <span dir="ltr">$1 × $2</span> פיקסלים, גודל הקובץ: $3',
+'svg-long-desc-animated' => 'קובץ SVG מונפש, הגודל המקורי: <span dir="ltr">$1 × $2</span> פיקסלים, גודל הקובץ: $3',
 'show-big-image' => 'תמונה ברזולוציה גבוהה יותר',
 'show-big-image-preview' => 'גודל תצוגה זו: $1.',
 'show-big-image-other' => '{{PLURAL:$2|רזולוציה אחרת|רזולוציות אחרות}}: $1.',
@@ -3252,6 +3256,8 @@ $1',
 'file-info-png-looped' => 'בלולאה',
 'file-info-png-repeat' => 'הוצג {{PLURAL:$1|פעם אחת|$1 פעמים|פעמיים}}',
 'file-info-png-frames' => '{{PLURAL:$1|תמונה אחת|$1 תמונות}}',
+'file-no-thumb-animation' => "'''לתשומת לבך: בשל מגבלות טכניות, תמונות ממוזערות של הקובץ הזה לא תהיינה מונפשות.'''",
+'file-no-thumb-animation-gif' => "'''לתשומת לבך: בשל מגבלות טכניות, תמונות ממוזערות של תמונות GIF בעלות רזולוציה גבוהה כמו זאת לא תהיינה מונפשות.'''",
 
 # Special:NewFiles
 'newimages' => 'גלריית קבצים חדשים',
index 6205132..261937c 100644 (file)
  * @author Thakurji
  */
 
+$namespaceNames = array(
+       NS_MEDIA            => 'saadhan',
+       NS_SPECIAL          => 'khaas',
+       NS_TALK             => 'baat',
+       NS_USER             => 'sadasya',
+       NS_USER_TALK        => 'sadasya_ke_baat',
+       NS_PROJECT_TALK     => '$1_baat',
+       NS_FILE             => 'file',
+       NS_FILE_TALK        => 'file_ke_baat',
+       NS_MEDIAWIKI_TALK   => 'Mediawiki_ke_baat',
+       NS_TEMPLATE_TALK    => 'Template_ke_baat',
+       NS_HELP             => 'madat',
+       NS_HELP_TALK        => 'madat_ke_baat',
+       NS_CATEGORY         => 'vibhag',
+       NS_CATEGORY_TALK    => 'voibhag_ke_baat',
+);
+
 $messages = array(
 # User preference toggles
 'tog-underline' => 'Jorr ke niche line khicho:',
index 66ee0b7..f58fa4f 100644 (file)
@@ -151,132 +151,132 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#PREUSMJERI', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__BEZSADRŽAJA__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__BEZGALERIJE__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__UKLJUČISADRŽAJ__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__SADRŽAJ__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__BEZUREĐIVANJAODLOMAKA__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '__BEZZAGLAVLJA__', '__NOHEADER__' ),
-       'currentmonth'            => array( '1', 'TRENUTAČNIMJESEC', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', 'TRENUTAČNIMJESEC1', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', 'TRENUTAČNIMJESECIME', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'TRENUTAČNIMJESECIMEGEN', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'TRENUTAČNIMJESECKRAT', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'TRENUTAČNIDAN', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'TRENUTAČNIDAN2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'TRENUTAČNIDANIME', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'TRENUTAČNAGODINA', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'TRENUTAČNOVRIJEME', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'TRENUTAČNISAT', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'MJESNIMJESEC', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', 'MJESNIMJESEC1', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'MJESNIMJESECIME', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'MJESNIMJESECIMEGEN', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'MJESNIMJESECKRAT', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'MJESNIDAN', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'MJESNIDAN2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'MJESNIDANIME', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'MJESNAGODINA', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'MJESNOVRIJEME', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'MJESNISAT', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'BROJSTRANICA', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'BROJČLANAKA', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'BROJDATOTEKA', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'BROJSURADNIKA', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'BROJAKTIVNIHSURADNIKA', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'BROJUREĐIVANJA', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'BROJPREGLEDA', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'IMESTRANICE', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'IMESTRANICEE', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'IMENSKIPROSTOR', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'IMENSKIPROSTORE', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'RAZGOVOR', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'RAZGOVORE', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'PROSTORSTRANICE', 'IMPSTRANICE', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'PROSTORSTRANICEE', 'IMPSTRANICEE', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'PUNOIMESTRANICE', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'PUNOIMESTRANICEE', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'IMEPODSTRANICE', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'IMEPODSTRANICEE', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'IMEOSNOVNESTRANICE', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'IMEOSNOVNESTRANICEE', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'IMERAZGOVORASTRANICE', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'IMERAZGOVORASTRANICEE', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'IMEGLAVNESTRANICE', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'subjectpagenamee'        => array( '1', 'IMEGLAVNESTRANICEE', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
-       'subst'                   => array( '0', 'ZAMJENA:', 'SUBST:' ),
-       'img_thumbnail'           => array( '1', 'minijatura', 'mini', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'minijatura=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'desno', 'right' ),
-       'img_left'                => array( '1', 'lijevo', 'left' ),
-       'img_none'                => array( '1', 'ništa', 'none' ),
-       'img_center'              => array( '1', 'središte', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'okvir', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', 'bezokvira', 'frameless' ),
-       'img_page'                => array( '1', 'stranica=$1', 'stranica $1', 'page=$1', 'page $1' ),
-       'img_upright'             => array( '1', 'uspravno=$1', 'uspravno $1', 'upright', 'upright=$1', 'upright $1' ),
-       'img_border'              => array( '1', 'obrub', 'border' ),
-       'img_baseline'            => array( '1', 'osnovnacrta', 'baseline' ),
-       'img_sub'                 => array( '1', 'potpis', 'ind', 'sub' ),
-       'img_super'               => array( '1', 'natpis', 'eks', 'super', 'sup' ),
-       'img_top'                 => array( '1', 'vrh', 'top' ),
-       'img_text_top'            => array( '1', 'tekst-vrh', 'text-top' ),
-       'img_middle'              => array( '1', 'pola', 'middle' ),
-       'img_bottom'              => array( '1', 'dno', 'bottom' ),
-       'img_text_bottom'         => array( '1', 'tekst-dno', 'text-bottom' ),
-       'sitename'                => array( '1', 'IMEPROJEKTA', 'SITENAME' ),
-       'ns'                      => array( '0', 'IMP:', 'NS:' ),
-       'localurl'                => array( '0', 'MJESNIURL:', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'MJESNIURLE:', 'LOCALURLE:' ),
-       'servername'              => array( '0', 'IMESERVERA', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'PUTANJASKRIPTE', 'SCRIPTPATH' ),
-       'grammar'                 => array( '0', 'GRAMATIKA:', 'GRAMMAR:' ),
-       'notitleconvert'          => array( '0', '__BEZPRETVARANJANASLOVA__', '__BPN__', '__NOTITLECONVERT__', '__NOTC__' ),
-       'nocontentconvert'        => array( '0', '__BEZPRETVARANJASADRŽAJA__', '__BPS__', '__NOCONTENTCONVERT__', '__NOCC__' ),
-       'currentweek'             => array( '1', 'TRENUTAČNITJEDAN', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'TRENUTAČNIDANTJEDNA', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'MJESNITJEDAN', 'LOCALWEEK' ),
-       'localdow'                => array( '1', 'MJESNIDANTJEDNA', 'LOCALDOW' ),
-       'revisionid'              => array( '1', 'IDIZMJENE', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'DANIZMJENE', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'DANIZMJENE2', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'MJESECIZMJENE', 'REVISIONMONTH' ),
-       'revisionyear'            => array( '1', 'GODINAIZMJENE', 'REVISIONYEAR' ),
-       'revisiontimestamp'       => array( '1', 'VREMENSKAOZNAKAIZMJENE', 'REVISIONTIMESTAMP' ),
-       'plural'                  => array( '0', 'MNOŽINA:', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'PUNIURL:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'PUNIURLE:', 'FULLURLE:' ),
-       'lcfirst'                 => array( '0', 'MSPRVO:', 'LCFIRST:' ),
-       'ucfirst'                 => array( '0', 'VSPRVO:', 'UCFIRST:' ),
-       'lc'                      => array( '0', 'MS:', 'LC:' ),
-       'uc'                      => array( '0', 'VS:', 'UC:' ),
-       'raw'                     => array( '0', 'NEOBRAĐENO:', 'RAW:' ),
-       'displaytitle'            => array( '1', 'POKAŽINASLOV', 'DISPLAYTITLE' ),
-       'rawsuffix'               => array( '1', 'NEO', 'R' ),
-       'newsectionlink'          => array( '1', '__NOVIODLOMAKPOVEZNICA__', '__NEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', 'TRENUTAČNAIZMJENA', 'CURRENTVERSION' ),
-       'urlencode'               => array( '0', 'URLKODIRANJE:', 'URLENCODE:' ),
-       'anchorencode'            => array( '0', 'SIDROKODIRANJE', 'ANCHORENCODE' ),
-       'currenttimestamp'        => array( '1', 'TRENUTAČNAOZNAKAVREMENA', 'CURRENTTIMESTAMP' ),
-       'localtimestamp'          => array( '1', 'MJESNAOZNAKAVREMENA', 'LOCALTIMESTAMP' ),
-       'language'                => array( '0', '#JEZIK:', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', 'JEZIKPROJEKTA', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'        => array( '1', 'STRANICEPOPROSTORU:', 'STRANICEUIMP', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'          => array( '1', 'BROJADMINA', 'NUMBEROFADMINS' ),
-       'formatnum'               => array( '0', 'OBLIKBROJA', 'FORMATNUM' ),
-       'padleft'                 => array( '0', 'POSTAVALIJEVO', 'PADLEFT' ),
-       'padright'                => array( '0', 'POSTAVADESNO', 'PADRIGHT' ),
-       'special'                 => array( '0', 'posebno', 'special' ),
-       'defaultsort'             => array( '1', 'GLAVNIRASPORED:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'filepath'                => array( '0', 'PUTANJADATOTEKE:', 'FILEPATH:' ),
-       'tag'                     => array( '0', 'oznaka', 'tag' ),
-       'hiddencat'               => array( '1', '__SKRIVENAKAT__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'STRANICEPOKATEGORIJI', 'STRANICEUKAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'VELIČINASTRANICE', 'PAGESIZE' ),
-       'index'                   => array( '1', '__KAZALO__', '__INDEX__' ),
-       'noindex'                 => array( '1', '__BEZKAZALA__', '__NOINDEX__' ),
-       'staticredirect'          => array( '1', '__NEPOMIČNOPREUSMJERAVANJE__', '__STATICREDIRECT__' ),
+       'redirect'                  => array( '0', '#PREUSMJERI', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__BEZSADRŽAJA__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__BEZGALERIJE__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__UKLJUČISADRŽAJ__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__SADRŽAJ__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__BEZUREĐIVANJAODLOMAKA__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '__BEZZAGLAVLJA__', '__NOHEADER__' ),
+       'currentmonth'              => array( '1', 'TRENUTAČNIMJESEC', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'TRENUTAČNIMJESEC1', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'TRENUTAČNIMJESECIME', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'TRENUTAČNIMJESECIMEGEN', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'TRENUTAČNIMJESECKRAT', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'TRENUTAČNIDAN', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'TRENUTAČNIDAN2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'TRENUTAČNIDANIME', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'TRENUTAČNAGODINA', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'TRENUTAČNOVRIJEME', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'TRENUTAČNISAT', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'MJESNIMJESEC', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'MJESNIMJESEC1', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'MJESNIMJESECIME', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'MJESNIMJESECIMEGEN', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'MJESNIMJESECKRAT', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'MJESNIDAN', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'MJESNIDAN2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'MJESNIDANIME', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'MJESNAGODINA', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'MJESNOVRIJEME', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'MJESNISAT', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'BROJSTRANICA', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'BROJČLANAKA', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'BROJDATOTEKA', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'BROJSURADNIKA', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'BROJAKTIVNIHSURADNIKA', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'BROJUREĐIVANJA', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'BROJPREGLEDA', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'IMESTRANICE', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'IMESTRANICEE', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'IMENSKIPROSTOR', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'IMENSKIPROSTORE', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'RAZGOVOR', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'RAZGOVORE', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'PROSTORSTRANICE', 'IMPSTRANICE', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'PROSTORSTRANICEE', 'IMPSTRANICEE', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'PUNOIMESTRANICE', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'PUNOIMESTRANICEE', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'IMEPODSTRANICE', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'IMEPODSTRANICEE', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'IMEOSNOVNESTRANICE', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'IMEOSNOVNESTRANICEE', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'IMERAZGOVORASTRANICE', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'IMERAZGOVORASTRANICEE', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'IMEGLAVNESTRANICE', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'          => array( '1', 'IMEGLAVNESTRANICEE', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+       'subst'                     => array( '0', 'ZAMJENA:', 'SUBST:' ),
+       'img_thumbnail'             => array( '1', 'minijatura', 'mini', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'minijatura=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'desno', 'right' ),
+       'img_left'                  => array( '1', 'lijevo', 'left' ),
+       'img_none'                  => array( '1', 'ništa', 'none' ),
+       'img_center'                => array( '1', 'središte', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'okvir', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'bezokvira', 'frameless' ),
+       'img_page'                  => array( '1', 'stranica=$1', 'stranica $1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', 'uspravno=$1', 'uspravno $1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_border'                => array( '1', 'obrub', 'border' ),
+       'img_baseline'              => array( '1', 'osnovnacrta', 'baseline' ),
+       'img_sub'                   => array( '1', 'potpis', 'ind', 'sub' ),
+       'img_super'                 => array( '1', 'natpis', 'eks', 'super', 'sup' ),
+       'img_top'                   => array( '1', 'vrh', 'top' ),
+       'img_text_top'              => array( '1', 'tekst-vrh', 'text-top' ),
+       'img_middle'                => array( '1', 'pola', 'middle' ),
+       'img_bottom'                => array( '1', 'dno', 'bottom' ),
+       'img_text_bottom'           => array( '1', 'tekst-dno', 'text-bottom' ),
+       'sitename'                  => array( '1', 'IMEPROJEKTA', 'SITENAME' ),
+       'ns'                        => array( '0', 'IMP:', 'NS:' ),
+       'localurl'                  => array( '0', 'MJESNIURL:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'MJESNIURLE:', 'LOCALURLE:' ),
+       'servername'                => array( '0', 'IMESERVERA', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'PUTANJASKRIPTE', 'SCRIPTPATH' ),
+       'grammar'                   => array( '0', 'GRAMATIKA:', 'GRAMMAR:' ),
+       'notitleconvert'            => array( '0', '__BEZPRETVARANJANASLOVA__', '__BPN__', '__NOTITLECONVERT__', '__NOTC__' ),
+       'nocontentconvert'          => array( '0', '__BEZPRETVARANJASADRŽAJA__', '__BPS__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+       'currentweek'               => array( '1', 'TRENUTAČNITJEDAN', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'TRENUTAČNIDANTJEDNA', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'MJESNITJEDAN', 'LOCALWEEK' ),
+       'localdow'                  => array( '1', 'MJESNIDANTJEDNA', 'LOCALDOW' ),
+       'revisionid'                => array( '1', 'IDIZMJENE', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'DANIZMJENE', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'DANIZMJENE2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'MJESECIZMJENE', 'REVISIONMONTH' ),
+       'revisionyear'              => array( '1', 'GODINAIZMJENE', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'VREMENSKAOZNAKAIZMJENE', 'REVISIONTIMESTAMP' ),
+       'plural'                    => array( '0', 'MNOŽINA:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'PUNIURL:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'PUNIURLE:', 'FULLURLE:' ),
+       'lcfirst'                   => array( '0', 'MSPRVO:', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', 'VSPRVO:', 'UCFIRST:' ),
+       'lc'                        => array( '0', 'MS:', 'LC:' ),
+       'uc'                        => array( '0', 'VS:', 'UC:' ),
+       'raw'                       => array( '0', 'NEOBRAĐENO:', 'RAW:' ),
+       'displaytitle'              => array( '1', 'POKAŽINASLOV', 'DISPLAYTITLE' ),
+       'rawsuffix'                 => array( '1', 'NEO', 'R' ),
+       'newsectionlink'            => array( '1', '__NOVIODLOMAKPOVEZNICA__', '__NEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'TRENUTAČNAIZMJENA', 'CURRENTVERSION' ),
+       'urlencode'                 => array( '0', 'URLKODIRANJE:', 'URLENCODE:' ),
+       'anchorencode'              => array( '0', 'SIDROKODIRANJE', 'ANCHORENCODE' ),
+       'currenttimestamp'          => array( '1', 'TRENUTAČNAOZNAKAVREMENA', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', 'MJESNAOZNAKAVREMENA', 'LOCALTIMESTAMP' ),
+       'language'                  => array( '0', '#JEZIK:', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'JEZIKPROJEKTA', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', 'STRANICEPOPROSTORU:', 'STRANICEUIMP', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', 'BROJADMINA', 'NUMBEROFADMINS' ),
+       'formatnum'                 => array( '0', 'OBLIKBROJA', 'FORMATNUM' ),
+       'padleft'                   => array( '0', 'POSTAVALIJEVO', 'PADLEFT' ),
+       'padright'                  => array( '0', 'POSTAVADESNO', 'PADRIGHT' ),
+       'special'                   => array( '0', 'posebno', 'special' ),
+       'defaultsort'               => array( '1', 'GLAVNIRASPORED:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'filepath'                  => array( '0', 'PUTANJADATOTEKE:', 'FILEPATH:' ),
+       'tag'                       => array( '0', 'oznaka', 'tag' ),
+       'hiddencat'                 => array( '1', '__SKRIVENAKAT__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'STRANICEPOKATEGORIJI', 'STRANICEUKAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'VELIČINASTRANICE', 'PAGESIZE' ),
+       'index'                     => array( '1', '__KAZALO__', '__INDEX__' ),
+       'noindex'                   => array( '1', '__BEZKAZALA__', '__NOINDEX__' ),
+       'staticredirect'            => array( '1', '__NEPOMIČNOPREUSMJERAVANJE__', '__STATICREDIRECT__' ),
 );
 
 $datePreferences = array(
@@ -577,6 +577,10 @@ $1',
 'youhavenewmessages' => 'Imate $1 ($2).',
 'newmessageslink' => 'nove poruke',
 'newmessagesdifflink' => 'zadnja promjena na stranici za razgovor',
+'youhavenewmessagesfromusers' => 'Imate $1 {{PLURAL:$3||od $3 suradnika|od $3 suradnika}} ($2).',
+'youhavenewmessagesmanyusers' => 'Imate $1 od više suradnika ($2).',
+'newmessageslinkplural' => '{{PLURAL:$1|novu poruku|$1 nove poruke|$1 novih poruka}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|posljednje uređivanje|$ posljednja uređivanja|$ posljednjih uređivanja}}',
 'youhavenewmessagesmulti' => 'Imate nove poruke na $1',
 'editsection' => 'uredi',
 'editold' => 'uredi',
@@ -628,12 +632,12 @@ Za popis svih posebnih stranica posjetite [[Special:SpecialPages|ovdje]].',
 # General errors
 'error' => 'Pogreška',
 'databaseerror' => 'Pogreška baze podataka',
-'dberrortext' => 'Došlo je do sintaksne pogreške u upitu bazi.
-Možda se radi o grešci u softveru.
-Posljednji pokušaj upita je glasio:
+'dberrortext' => 'Došlo je do sintaksne pogrješke u upitu bazi.
+Možda se radi o pogrješci u softveru.
+Posljednji je pokušaj upita glasio:
 <blockquote><tt>$1</tt></blockquote>
 iz funkcije "<tt>$2</tt>".
-Baza je vratila pogrešku "<tt>$3: $4</tt>".',
+Baza je vratila pogrješku "<tt>$3: $4</tt>".',
 'dberrortextcl' => 'Došlo je do sintaksne pogreške s upitom bazi.
 Posljednji pokušaj upita je glasio:
 "$1"
@@ -669,6 +673,8 @@ Ako to nije slučaj, možda se radi o softverskoj grešci. Molimo da u tom sluč
 'cannotdelete' => 'Ne može se obrisati stranica ili datoteka "$1".
 Moguće je da ju je netko drugi već obrisao.',
 'cannotdelete-title' => 'Brisanje stranice "$1" nije moguće',
+'delete-hook-aborted' => 'Brisanje prekinuto softverskim priključkom (hook).
+Nema obrazloženja ili poruke o pogrješci.',
 'badtitle' => 'Loš naslov',
 'badtitletext' => 'Navedeni naslov stranice nepravilan ili loše formirana interwiki poveznica.',
 'perfcached' => 'Sljedeći podaci su iz međuspremnika i možda nisu najsvježiji. A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.',
@@ -694,6 +700,8 @@ $2',
 'customjsprotected' => 'Ne možete uređivati ovu JavaScript stranicu zato što ona sadrži osobne postavke drugog suradnika.',
 'ns-specialprotected' => "Stranice u imenskom prostoru ''{{ns:special}}'' ne mogu se uređivati.",
 'titleprotected' => "Ovaj naslov je od kreiranja zaštitio suradnik [[User:$1|$1]], uz razlog: ''$2''.",
+'exception-nologin' => 'Niste prijavljeni',
+'exception-nologin-text' => 'Ova stranica ili aktivnost zahtijeva da budete prijavljeni na ovom wikiju.',
 
 # Virus scanner
 'virus-badscanner' => "Loša konfiguracija: nepoznati skener za viruse: ''$1''",
@@ -784,6 +792,7 @@ Ne možemo poslati e-mail ni u jednoj od sljedećih naredbi.',
 'invalidemailaddress' => 'Ne mogu prihvatiti e-mail adresu jer nije valjano oblikovana.
 Molim unesite ispravno oblikovanu adresu ili ostavite polje praznim.',
 'cannotchangeemail' => 'Na ovom wikiju ne možete promijeniti adresu e-pošte.',
+'emaildisabled' => 'Slanje e-pošte na ovom projektu nije moguće.',
 'accountcreated' => 'Suradnički račun otvoren',
 'accountcreatedtext' => 'Suradnički račun za $1 je otvoren.',
 'createaccount-title' => 'Otvaranje suradničkog računa za {{SITENAME}}',
@@ -960,10 +969,9 @@ ili [{{fullurl:{{FULLPAGENAME}}|action=edit}} urediti ovu stranicu]</span>.',
 'blocked-notice-logextract' => 'Ovaj suradnik je trenutačno blokiran.
 Posljednja stavka evidencije blokiranja navedena je niže kao napomena:',
 'clearyourcache' => "'''Napomena:''' Nakon snimanja možda ćete trebate očistiti međuspremnik svog preglednika kako biste vidjeli promjene.
-* '''Firefox / Safari:''' držite ''Shift'' i kliknite ''Reload'', ili pritisnite bilo ''Ctrl-F5'' ili ''Ctrl-R'' (''Command-R'' na Macu)
+* '''Firefox / Safari:''' držite ''Shift'' i pritisnite ''Reload'', ili pritisnite bilo ''Ctrl-F5'' ili ''Ctrl-R'' (''Command-R'' na Macu)
 * '''Google Chrome:''' pritisnite ''Ctrl-Shift-R'' (''Command-Shift-R'' na Macu)
 * '''Internet Explorer:''' držite ''Ctrl'' i kliknite ''Refresh'', ili pritisnite ''Ctrl-F5''
-* '''Konqueror:''' kliknite ''Reload'' ili pritisnite ''F5''
 * '''Opera:''' očistite međuspremnik u ''Tools → Preferences''",
 'usercssyoucanpreview' => "'''Savjet:''' Rabite dugme \"{{int:showpreview}}\" za testiranje svog CSS prije snimanja.",
 'userjsyoucanpreview' => "'''Savjet:''' Rabite dugme \"{{int:showpreview}}\" za testiranje svog novog JavaScripta prije snimanja.",
@@ -1053,6 +1061,7 @@ Razlog nije ponuđen.',
 'edit-no-change' => 'Vaše uređivanje je zanemareno, jer nikakva promjena sadržaja nije napravljena.',
 'edit-already-exists' => 'Neuspješno stvaranje nove stranice.
 Stranica već postoji.',
+'defaultmessagetext' => 'Prvotni tekst poruke',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => 'Upozorenje: Ova stranica sadrži previše opterećujućih poziva parserskih funkcija
@@ -1067,6 +1076,13 @@ Neki predlošci neće biti uključeni.',
 'parser-template-loop-warning' => 'Otkrivena petlja predloška: [[$1]]',
 'parser-template-recursion-depth-warning' => 'Dubina rekurzije predloška je izvan granice ($1)',
 'language-converter-depth-warning' => 'Prekoračena granica dubine jezičnog pretvarača ($1)',
+'node-count-exceeded-category' => 'Stranice s previše čvorova',
+'node-count-exceeded-warning' => 'Ova stranica ima previše čvorova',
+'expansion-depth-exceeded-category' => 'Stranice s prevelikom dubinom proširenja',
+'expansion-depth-exceeded-warning' => 'Na ovoj stranici dubina proširenja je prevelika',
+'parser-unstrip-loop-warning' => 'Nedopuštena petlja',
+'parser-unstrip-recursion-limit' => 'Dosegnuto je ograničenje rekurzije ($1)',
+'converter-manual-rule-error' => 'Pronađena je pogrješka u pravilu ručnog prijevoda',
 
 # "Undo" feature
 'undo-success' => 'Izmjena je uklonjena (tekst u okviru ispod ne sadrži zadnju izmjenu). Molim sačuvajte stranicu (provjerite sažetak).',
@@ -1243,7 +1259,7 @@ Primijetite da uporaba navigacijskih poveznica resetira Vaše izbore u stupcu.',
 
 # Diffs
 'history-title' => 'Povijest izmjena stranice "$1"',
-'difference-title' => '$1: Razlika između inačica',
+'difference-title' => 'Razlika između inačica stranice $1',
 'difference-multipage' => '(Razlika između stranica)',
 'lineno' => 'Redak $1:',
 'compareselectedversions' => 'Usporedi odabrane inačice',
@@ -1763,6 +1779,19 @@ Ako se problem ponovi, javite to [[Special:ListUsers/sysop|administratoru]].',
 'upload-too-many-redirects' => 'URL je sadržavao previše preusmjeravanja',
 'upload-unknown-size' => 'Nepoznata veličina',
 'upload-http-error' => 'HTTP pogreška: $1',
+'upload-copy-upload-invalid-domain' => 'Kopije postavljenih datoteka nisu dostupne s ove domene.',
+
+# File backend
+'backend-fail-stream' => 'Ne mogu prikazati datoteku $1.',
+'backend-fail-backup' => 'Izrada sigurnosne kopije datoteke "$1" nije uspjela.',
+'backend-fail-notexists' => 'Datoteka $1 ne postoji.',
+'backend-fail-hashes' => '"Hash" indeksi datoteka za usporedbu nisu nađeni.',
+'backend-fail-notsame' => 'Na lokaciji $1 već postoji datoteka koja se razlikuje.',
+'backend-fail-invalidpath' => "$1 nije valjana pričuvna putanja (''path'').",
+'backend-fail-delete' => 'Ne mogu obrisati datoteku $1.',
+'backend-fail-opentemp' => 'Ne mogu otvoriti privremenu datoteku.',
+'backend-fail-writetemp' => 'Ne mogu pisati u privremenu datoteku.',
+'backend-fail-closetemp' => 'Ne mogu zatvoriti privremenu datoteku.',
 
 # ZipDirectoryReader
 'zip-file-open-error' => 'Došlo je do pogreške pri otvaranju datoteke za ZIP provjeru.',
@@ -1954,7 +1983,7 @@ Slijedeći popis prikazuje {{PLURAL:$1|stranice koje|prvih $1 stranica koje}} vo
 'disambiguationspage' => 'Template:Razdvojba',
 'disambiguations-text' => "Sljedeće stranice povezuju na '''razdvojbenu stranicu'''.
 Umjesto toga bi trebale povezivati na prikladnu temu.<br />
-Stranica se tretira kao razdvojbena stranica ako koristi predložak na kojega vodi [[MediaWiki:Disambiguationspage]]",
+Stranica se tretira kao razdvojbena stranica ako rabi predložak na kojega vodi [[MediaWiki:Disambiguationspage]]",
 
 'doubleredirects' => 'Dvostruka preusmjeravanja',
 'doubleredirectstext' => 'Ova stranica sadrži popis stranica koje preusmjeravju na druge stranice za preusmjeravanje.
@@ -1980,6 +2009,7 @@ koja obično ukazuje na "pravu" odredišnu stranicu, na koju bi trebalo pokaziva
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|bajt|bajta|bajtova}}',
 'ncategories' => '$1 {{PLURAL:$1|kategorija|kategorije|kategorija}}',
+'ninterwikis' => '$1 međuwiki {{PLURAL:$1|poveznica|poveznice|poveznica}}',
 'nlinks' => '$1 {{PLURAL:$1|poveznica|poveznice|poveznica}}',
 'nmembers' => '$1 {{PLURAL:$1|član|članova}}',
 'nrevisions' => '$1 {{PLURAL:$1|inačica|inačice|inačica}}',
@@ -2006,6 +2036,7 @@ koja obično ukazuje na "pravu" odredišnu stranicu, na koju bi trebalo pokaziva
 'mostlinkedtemplates' => 'Predlošci na koje vodi najviše poveznica',
 'mostcategories' => 'Popis članaka po broju kategorija',
 'mostimages' => 'Slike na koje vodi najviše poveznica',
+'mostinterwikis' => 'Stranice s najviše međuwiki poveznica',
 'mostrevisions' => 'Popis članaka po broju uređivanja',
 'prefixindex' => 'Sve stranice prema početku naslova',
 'shortpages' => 'Kratke stranice',
@@ -2151,6 +2182,7 @@ Dodatne informacije o pojedinim pravim se mogu pronaći [[{{MediaWiki:Listgroupr
 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',
+'emailuser-title-notarget' => 'Pošalji e-poštu 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.',
@@ -2729,6 +2761,7 @@ Molimo odaberite drugo ime.',
 Za izvoz stranica unesite njihove naslove u polje ispod, jedan naslov po retku, i označite želite li trenutačnu inačicu zajedno sa svim prijašnjima, ili samo trenutačnu inačicu s informacijom o zadnjoj promjeni.
 
 U potonjem slučaju možete koristiti i poveznicu, npr. [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] za članak [[{{MediaWiki:Mainpage}}]].',
+'exportall' => 'Izvezi sve stranice',
 'exportcuronly' => 'Uključi samo trenutačnu inačicu, ne i sve prijašnje',
 'exportnohistory' => "----
 '''Napomena:''' izvoz cjelokupne stranice sa svim prethodnim izmjenama onemogućen je zbog opterećenja poslužitelja.",
@@ -2783,6 +2816,7 @@ Transwiki uvoz stranica je zabilježen u [[Special:Log/import|evidenciji uvoza s
 'import-interwiki-templates' => 'Uključi sve predloške',
 'import-interwiki-submit' => 'Uvezi',
 'import-interwiki-namespace' => 'Odredišni imenski prostor:',
+'import-interwiki-rootpage' => 'Odredišna početna stranica (parametar nije nužan):',
 'import-upload-filename' => 'Ime datoteke:',
 'import-comment' => 'Komentar:',
 'importtext' => 'Molimo izvezite datoteku iz izvorišnog wikija koristeći [[Special:Export|izvozno pomagalo]]. 
@@ -2821,6 +2855,10 @@ Snimite je na svoje računalo i postavite je ovdje.',
 'import-logentry-interwiki' => 'transwiki uvezeno $1',
 'import-logentry-interwiki-detail' => '$1 {{PLURAL:$1|promjena|promjene|promjena}} od $2',
 
+# JavaScriptTest
+'javascripttest' => 'Testiranje JavaScripta',
+'javascripttest-disabled' => 'Ova funkcija nije omogućena na ovom wikiprojektu.',
+
 # Tooltip help for the actions
 'tooltip-pt-userpage' => 'Moja suradnička stranica',
 'tooltip-pt-anonuserpage' => 'Suradnička stranica za IP adresu pod kojom uređujete',
@@ -2881,6 +2919,8 @@ Snimite je na svoje računalo i postavite je ovdje.',
 'tooltip-diff' => 'Prikaži promjene učinjene u tekstu.',
 'tooltip-compareselectedversions' => 'Prikaži usporedbu izabranih inačica ove stranice.',
 'tooltip-watch' => 'Dodaj na popis praćenja',
+'tooltip-watchlistedit-normal-submit' => 'Ukloni naslove',
+'tooltip-watchlistedit-raw-submit' => 'Osvježi popis praćenja',
 'tooltip-recreate' => 'Vrati stranicu unatoč tome što je obrisana',
 'tooltip-upload' => "Pokreni snimanje (''upload'')",
 'tooltip-rollback' => '"Ukloni" uklanja uređivanja zadnjeg suradnika na ovoj stranici.',
@@ -2919,12 +2959,26 @@ Razlog je vjerojatno vanjska poveznica koja se nalazi na crnom popisu.',
 'spambot_username' => 'MediaWiki zaštita od spama',
 'spam_reverting' => 'Vraćam na zadnju inačicu koja ne sadrži poveznice na $1',
 'spam_blanking' => 'Sve inačice sadrže poveznice na $1, brišem cjelokupni sadržaj',
+'spam_deleting' => 'Sve inačice sadržale su poveznice na $1, brišem cjelokupni sadržaj',
 
 # Info page
 'pageinfo-title' => 'Podatci o "$1"',
+'pageinfo-header-basic' => 'Osnovni podaci',
 'pageinfo-header-edits' => 'Uređivanja',
+'pageinfo-header-restrictions' => 'Zaštita stranice',
+'pageinfo-header-properties' => 'Svojstva stranice',
+'pageinfo-display-title' => 'Prikaži naslov',
+'pageinfo-default-sort' => 'Podrazumijevano sortiranje',
+'pageinfo-length' => 'Dužina stranice (u bajtovima)',
+'pageinfo-article-id' => 'ID stranice',
+'pageinfo-robot-policy' => 'Status tražilice',
+'pageinfo-robot-index' => 'Stranicu je moguće indeksirati',
 'pageinfo-views' => 'Broj pregleda',
 'pageinfo-watchers' => 'Broj pratitelja stranice',
+'pageinfo-firstuser' => 'Suradnik koji je stvorio stranicu',
+'pageinfo-firsttime' => 'Datum stvaranja stranice',
+'pageinfo-lastuser' => 'Posljednji urednik stranice',
+'pageinfo-lasttime' => 'Datum zadnjeg uređivanja',
 'pageinfo-edits' => 'Broj uređivanja',
 'pageinfo-authors' => 'Broj različitih autora',
 
@@ -3678,6 +3732,9 @@ Trebali ste primiti [{{SERVER}}{{SCRIPTPATH}}/COPYING kopiju GNU opće javne lic
 'version-software' => 'Instalirani softver',
 'version-software-product' => 'Proizvod',
 'version-software-version' => 'Verzija',
+'version-entrypoints' => 'URL adresa instalacije',
+'version-entrypoints-header-entrypoint' => 'Početna adresa',
+'version-entrypoints-header-url' => 'URL',
 
 # Special:FilePath
 'filepath' => 'Putanja datoteke',
@@ -3770,7 +3827,7 @@ Slike se na taj način prikazuju u punoj rezoluciji, a drugi tipovi datoteka se
 '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-required' => 'Ova je vrijednost potrebna',
 'htmlform-submit' => 'Pošalji',
 'htmlform-reset' => 'Poništi izmjene',
 'htmlform-selectorother-other' => 'Drugi',
@@ -3829,9 +3886,9 @@ Inače, možete ispuniti jednostavan obrazac u nastavku. Vaš komentar biti će
 
 # API errors
 'api-error-badaccess-groups' => 'Nemate ovlasti za postavljanje datoteka na ovu wiki.',
-'api-error-badtoken' => "''Token'' koji smo koristili za vašu identifikaciju na ovaj poslužitelj nije bio ispravan.",
-'api-error-copyuploaddisabled' => 'Postavljanja datoteka kopiranjem su onemogućena.',
-'api-error-duplicate' => 'Već postoji jedna datoteka na ovoj wiki s istim sadržajem',
+'api-error-badtoken' => 'Interna pogrješka: Token nije ispravan.',
+'api-error-copyuploaddisabled' => 'Postavljanje datoteka putem URL-a nije omogućeno na ovom projektu.',
+'api-error-duplicate' => '{{PLURAL:$1|Postoji [$2 druga datoteka]|Postoje $1 [$2 druge datoteke]|Postoji $1 [$2 drugih datoteka]}} istog sadržaja.',
 'api-error-empty-file' => 'Datoteka koju ste poslali je prazna.',
 'api-error-fetchfileerror' => 'Pojavio se neki problem pri dobivanju podataka o datoteci.',
 'api-error-file-too-large' => 'Datoteka koju ste poslali bila je prevelika.',
index c907cc0..b7c2b96 100644 (file)
@@ -1796,6 +1796,7 @@ Snano chceš wopisanje na jeje [$2 stronje datajoweho wopisanja] wobdźěłać.'
 'uploadnewversion-linktext' => 'nowu wersiju tuteje dataje nahrać',
 'shared-repo-from' => 'z $1',
 'shared-repo' => 'zhromadny repozitorij',
+'upload-disallowed-here' => 'Bohužel njemóžeš tutón wobraz přepisać.',
 
 # File reversion
 'filerevert' => 'Wersiju $1 cofnyć',
@@ -2853,6 +2854,8 @@ W poslednim padźe móžeš tež wotkaz wužiwać, na př. „[[{{#Special:Expor
 'pageinfo-length' => 'Dołhosć strony (w bajtach)',
 'pageinfo-article-id' => 'ID strony',
 'pageinfo-robot-policy' => 'Status pytawy',
+'pageinfo-robot-index' => 'Indeksujomny',
+'pageinfo-robot-noindex' => 'Njeindeksujomny',
 'pageinfo-views' => 'Ličba zwobraznjenjow',
 'pageinfo-watchers' => 'Ličba wobkedźbowarjow strony',
 'pageinfo-redirects-name' => 'Dalesposrědkowanja k tutej stronje',
@@ -2867,7 +2870,7 @@ W poslednim padźe móžeš tež wotkaz wužiwać, na př. „[[{{#Special:Expor
 'pageinfo-authors' => 'Cyłkowna ličba rozdźělnych awtorow',
 'pageinfo-recent-edits' => 'Ličba najnowšich změnow (za zańdźenych $1)',
 'pageinfo-recent-authors' => 'Najnowša ličba rozdźělnych awtorow',
-'pageinfo-restriction' => 'Škit strony (<code>$1</code>)',
+'pageinfo-restriction' => 'Škit strony (<code>{{lcfirst:$1}}</code>)',
 'pageinfo-magic-words' => '{{PLURAL:$1|Magiske słowo|Magiskej słowje|Magiske słowa|Magiske słowa}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Schowana kategorija|Schowanej kategoriji|Schowane kategorije|Schowane kategorije}} ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|Zapřijata předłoha|Zapřijatej předłoze|Zapřijate předłohi|Zapřijate předłohi}} ($1)',
@@ -2924,6 +2927,7 @@ $1',
 'file-info-size-pages' => '$1 × $2 pikselow, wulkosć dataje: $3, MIME-typ: $4, $5 {{PLURAL:$5|strona|stronje|strony|stronow}}',
 '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-animated' => 'Animěrowana SVG-dataja, zakładnej wotměraj $1 × $2 pikselow, datajowa wulkosć: $3',
 'show-big-image' => 'Wersija z wyšim rozeznaćom',
 'show-big-image-preview' => 'Wulkosć tutoho přehlada: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Druhe rozeznaće|Druhej rozeznaći|Druhe rozeznaća|Druhe rozeznaća}}: $1.',
@@ -2933,6 +2937,8 @@ $1',
 '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}}',
+'file-no-thumb-animation' => "'''Kedźbu: Techniskich wobmjezowanjow dla přehladne wobrazki tuteje dataje so njeaniměruja.'''",
+'file-no-thumb-animation-gif' => "'''Kedźbu: Techniskich wobmjezowanjow dla přehladne wobrazki wysokeho rozeznaća GIF-wobrazow kaž tutoho njebudu so animěrować.'''",
 
 # Special:NewFiles
 'newimages' => 'Nowe dataje',
index 551f971..6832d26 100644 (file)
@@ -185,128 +185,128 @@ $dateFormats = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#ÁTIRÁNYÍTÁS', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__NINCSTARTALOMJEGYZÉK__', '__NINCSTJ__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__NINCSGALÉRIA__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__LEGYENTARTALOMJEGYZÉK__', '__LEGYENTJ__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__TARTALOMJEGYZÉK__', '__TJ__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__NINCSSZERKESZTÉS__', '__NINCSSZERK__', '__NOEDITSECTION__' ),
-       'currentmonth'            => array( '1', 'HÓNAP', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', 'HÓNAP1', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', 'HÓNAPNEVE', 'CURRENTMONTHNAME' ),
-       'currentmonthabbrev'      => array( '1', 'HÓNAPRÖVID', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'MAINAP', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'MAINAP2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'MAINAPNEVE', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'ÉV', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'IDŐ', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'ÓRA', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'HELYIHÓNAP', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', 'HELYIHÓNAP1', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'HELYIHÓNAPNÉV', 'LOCALMONTHNAME' ),
-       'localmonthabbrev'        => array( '1', 'HELYIHÓNAPRÖVIDÍTÉS', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'HELYINAP', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'HELYINAP2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'HELYINAPNEVE', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'HELYIÉV', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'HELYIIDŐ', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'HELYIÓRA', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'OLDALAKSZÁMA', 'LAPOKSZÁMA', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'SZÓCIKKEKSZÁMA', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'FÁJLOKSZÁMA', 'KÉPEKSZÁMA', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'SZERKESZTŐKSZÁMA', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'AKTÍVSZERKESZTŐKSZÁMA', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'SZERKESZTÉSEKSZÁMA', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'MEGTEKINTÉSEKSZÁMA', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'OLDALNEVE', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'OLDALNEVEE', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'NÉVTERE', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'NÉVTEREE', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'VITATERE', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'VITATEREE', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'SZÓCIKKNÉVTERE', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'SZÓCIKKNÉVTEREE', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'LAPTELJESNEVE', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'LAPTELJESNEVEE', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'ALLAPNEVE', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'ALLAPNEVEE', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'ALAPLAPNEVE', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'ALAPLAPNEVEE', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'VITALAPNEVE', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'VITALAPNEVEE', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'SZÓCIKKNEVE', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'subjectpagenamee'        => array( '1', 'SZÓCIKKNEVEE', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
-       'msg'                     => array( '0', 'ÜZENET:', 'ÜZ:', 'MSG:' ),
-       'subst'                   => array( '0', 'BEILLESZT:', 'BEMÁSOL:', 'SUBST:' ),
-       'img_thumbnail'           => array( '1', 'bélyegkép', 'bélyeg', 'miniatűr', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'bélyegkép=$1', 'bélyeg=$1', 'miniatűr=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'jobb', 'jobbra', 'right' ),
-       'img_left'                => array( '1', 'bal', 'balra', 'left' ),
-       'img_none'                => array( '1', 'semmi', 'none' ),
-       'img_center'              => array( '1', 'közép', 'középre', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'keretezett', 'keretes', 'keretben', 'kerettel', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', 'keretnélküli', 'frameless' ),
-       'img_page'                => array( '1', 'oldal=$1', 'oldal $1', 'page=$1', 'page $1' ),
-       'img_upright'             => array( '1', 'fennjobbra', 'fennjobbra=$1', 'fennjobbra $1', 'upright', 'upright=$1', 'upright $1' ),
-       'img_border'              => array( '1', 'keret', 'border' ),
-       'img_baseline'            => array( '1', 'alapvonal', 'baseline' ),
-       'img_sub'                 => array( '1', 'ai', 'alsóindex', 'sub' ),
-       'img_super'               => array( '1', 'fi', 'felsőindex', 'super', 'sup' ),
-       'img_top'                 => array( '1', 'fenn', 'fent', 'top' ),
-       'img_text_top'            => array( '1', 'szöveg-fenn', 'szöveg-fent', 'text-top' ),
-       'img_middle'              => array( '1', 'vközépen', 'vközépre', 'middle' ),
-       'img_bottom'              => array( '1', 'lenn', 'lent', 'bottom' ),
-       'img_text_bottom'         => array( '1', 'szöveg-lenn', 'szöveg-lent', 'text-bottom' ),
-       'sitename'                => array( '1', 'WIKINEVE', 'SITENAME' ),
-       'ns'                      => array( '0', 'NÉVTÉR:', 'NS:' ),
-       'localurl'                => array( '0', 'HELYIURL:', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'HELYIURLE:', 'LOCALURLE:' ),
-       'server'                  => array( '0', 'SZERVER', 'KISZOLGÁLÓ', 'SERVER' ),
-       'servername'              => array( '0', 'SZERVERNEVE', 'KISZOLGÁLÓNEVE', 'SERVERNAME' ),
-       'grammar'                 => array( '0', 'NYELVTAN:', 'GRAMMAR:' ),
-       'currentweek'             => array( '1', 'HÉT', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'HÉTNAPJA', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'HELYIHÉT', 'LOCALWEEK' ),
-       'localdow'                => array( '1', 'HELYIHÉTNAPJA', 'LOCALDOW' ),
-       'revisionid'              => array( '1', 'VÁLTOZATAZON', 'VÁLTOZATAZONOSÍTÓ', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'VÁLTOZATNAPJA', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'VÁLTOZATNAPJA2', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'VÁLTOZATHÓNAPJA', 'REVISIONMONTH' ),
-       'revisionyear'            => array( '1', 'VÁLTOZATÉVE', 'REVISIONYEAR' ),
-       'revisiontimestamp'       => array( '1', 'VÁLTOZATIDŐBÉLYEG', 'VÁLTOZATIDEJE', 'REVISIONTIMESTAMP' ),
-       'revisionuser'            => array( '1', 'VÁLTOZATSZERKESZTŐJE', 'REVISIONUSER' ),
-       'plural'                  => array( '0', 'TÖBBESSZÁM:', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'TELJESURL:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'TELJESURLE:', 'FULLURLE:' ),
-       'lcfirst'                 => array( '0', 'KISKEZDŐ:', 'KISKEZDŐBETŰ:', 'LCFIRST:' ),
-       'ucfirst'                 => array( '0', 'NAGYKEZDŐ:', 'NAGYKEZDŐBETŰ:', 'UCFIRST:' ),
-       'lc'                      => array( '0', 'KISBETŰ:', 'KISBETŰK:', 'KB:', 'KISBETŰS:', 'LC:' ),
-       'uc'                      => array( '0', 'NAGYBETŰ:', 'NAGYBETŰK', 'NB:', 'NAGYBETŰS:', 'UC:' ),
-       'displaytitle'            => array( '1', 'MEGJELENÍTENDŐCÍM', 'CÍM', 'DISPLAYTITLE' ),
-       'newsectionlink'          => array( '1', '__ÚJSZAKASZHIV__', '__ÚJSZAKASZLINK__', '__NEWSECTIONLINK__' ),
-       'nonewsectionlink'        => array( '1', '__NINCSÚJSZAKASZHIV__', '__NINCSÚJSZAKASZLINK__', '__NONEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', 'JELENLEGIVÁLTOZAT', 'CURRENTVERSION' ),
-       'urlencode'               => array( '0', 'URLKÓDOLVA:', 'URLENCODE:' ),
-       'anchorencode'            => array( '0', 'HORGONYKÓDOLVA', 'ANCHORENCODE' ),
-       'currenttimestamp'        => array( '1', 'IDŐBÉLYEG', 'CURRENTTIMESTAMP' ),
-       'localtimestamp'          => array( '1', 'HELYIIDŐBÉLYEG', 'LOCALTIMESTAMP' ),
-       'directionmark'           => array( '1', 'IRÁNYJELZŐ', 'DIRECTIONMARK', 'DIRMARK' ),
-       'language'                => array( '0', '#NYELV:', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', 'TARTALOMNYELVE', 'TARTNYELVE', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'        => array( '1', 'OLDALAKNÉVTÉRBEN:', 'OLDALAKNBEN:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'          => array( '1', 'ADMINOKSZÁMA', 'NUMBEROFADMINS' ),
-       'formatnum'               => array( '0', 'FORMÁZOTTSZÁM', 'SZÁMFORMÁZÁS', 'SZÁMFORM', 'FORMATNUM' ),
-       'special'                 => array( '0', 'speciális', 'special' ),
-       'defaultsort'             => array( '1', 'RENDEZÉS:', 'KULCS:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'filepath'                => array( '0', 'ELÉRÉSIÚT:', 'FILEPATH:' ),
-       'hiddencat'               => array( '1', '__REJTETTKAT__', '__REJTETTKATEGÓRIA__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'LAPOKAKATEGÓRIÁBAN', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'LAPMÉRET', 'PAGESIZE' ),
-       'noindex'                 => array( '1', '__NINCSINDEX__', '__NOINDEX__' ),
-       'numberingroup'           => array( '1', 'CSOPORTTAGOK', 'NUMBERINGROUP', 'NUMINGROUP' ),
-       'staticredirect'          => array( '1', '__ÁLLANDÓÁTIRÁNYÍTÁS__', '__STATIKUSÁTIRÁNYÍTÁS__', '__STATICREDIRECT__' ),
-       'protectionlevel'         => array( '1', 'VÉDELMISZINT', 'PROTECTIONLEVEL' ),
-       'formatdate'              => array( '0', 'dátumformázás', 'formatdate', 'dateformat' ),
+       'redirect'                  => array( '0', '#ÁTIRÁNYÍTÁS', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__NINCSTARTALOMJEGYZÉK__', '__NINCSTJ__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__NINCSGALÉRIA__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__LEGYENTARTALOMJEGYZÉK__', '__LEGYENTJ__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__TARTALOMJEGYZÉK__', '__TJ__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__NINCSSZERKESZTÉS__', '__NINCSSZERK__', '__NOEDITSECTION__' ),
+       'currentmonth'              => array( '1', 'HÓNAP', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'HÓNAP1', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'HÓNAPNEVE', 'CURRENTMONTHNAME' ),
+       'currentmonthabbrev'        => array( '1', 'HÓNAPRÖVID', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'MAINAP', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'MAINAP2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'MAINAPNEVE', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'ÉV', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'IDŐ', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'ÓRA', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'HELYIHÓNAP', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'HELYIHÓNAP1', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'HELYIHÓNAPNÉV', 'LOCALMONTHNAME' ),
+       'localmonthabbrev'          => array( '1', 'HELYIHÓNAPRÖVIDÍTÉS', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'HELYINAP', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'HELYINAP2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'HELYINAPNEVE', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'HELYIÉV', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'HELYIIDŐ', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'HELYIÓRA', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'OLDALAKSZÁMA', 'LAPOKSZÁMA', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'SZÓCIKKEKSZÁMA', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'FÁJLOKSZÁMA', 'KÉPEKSZÁMA', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'SZERKESZTŐKSZÁMA', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'AKTÍVSZERKESZTŐKSZÁMA', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'SZERKESZTÉSEKSZÁMA', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'MEGTEKINTÉSEKSZÁMA', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'OLDALNEVE', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'OLDALNEVEE', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'NÉVTERE', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'NÉVTEREE', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'VITATERE', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'VITATEREE', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'SZÓCIKKNÉVTERE', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'SZÓCIKKNÉVTEREE', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'LAPTELJESNEVE', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'LAPTELJESNEVEE', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'ALLAPNEVE', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'ALLAPNEVEE', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'ALAPLAPNEVE', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'ALAPLAPNEVEE', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'VITALAPNEVE', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'VITALAPNEVEE', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'SZÓCIKKNEVE', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'          => array( '1', 'SZÓCIKKNEVEE', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+       'msg'                       => array( '0', 'ÜZENET:', 'ÜZ:', 'MSG:' ),
+       'subst'                     => array( '0', 'BEILLESZT:', 'BEMÁSOL:', 'SUBST:' ),
+       'img_thumbnail'             => array( '1', 'bélyegkép', 'bélyeg', 'miniatűr', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'bélyegkép=$1', 'bélyeg=$1', 'miniatűr=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'jobb', 'jobbra', 'right' ),
+       'img_left'                  => array( '1', 'bal', 'balra', 'left' ),
+       'img_none'                  => array( '1', 'semmi', 'none' ),
+       'img_center'                => array( '1', 'közép', 'középre', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'keretezett', 'keretes', 'keretben', 'kerettel', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'keretnélküli', 'frameless' ),
+       'img_page'                  => array( '1', 'oldal=$1', 'oldal $1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', 'fennjobbra', 'fennjobbra=$1', 'fennjobbra $1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_border'                => array( '1', 'keret', 'border' ),
+       'img_baseline'              => array( '1', 'alapvonal', 'baseline' ),
+       'img_sub'                   => array( '1', 'ai', 'alsóindex', 'sub' ),
+       'img_super'                 => array( '1', 'fi', 'felsőindex', 'super', 'sup' ),
+       'img_top'                   => array( '1', 'fenn', 'fent', 'top' ),
+       'img_text_top'              => array( '1', 'szöveg-fenn', 'szöveg-fent', 'text-top' ),
+       'img_middle'                => array( '1', 'vközépen', 'vközépre', 'middle' ),
+       'img_bottom'                => array( '1', 'lenn', 'lent', 'bottom' ),
+       'img_text_bottom'           => array( '1', 'szöveg-lenn', 'szöveg-lent', 'text-bottom' ),
+       'sitename'                  => array( '1', 'WIKINEVE', 'SITENAME' ),
+       'ns'                        => array( '0', 'NÉVTÉR:', 'NS:' ),
+       'localurl'                  => array( '0', 'HELYIURL:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'HELYIURLE:', 'LOCALURLE:' ),
+       'server'                    => array( '0', 'SZERVER', 'KISZOLGÁLÓ', 'SERVER' ),
+       'servername'                => array( '0', 'SZERVERNEVE', 'KISZOLGÁLÓNEVE', 'SERVERNAME' ),
+       'grammar'                   => array( '0', 'NYELVTAN:', 'GRAMMAR:' ),
+       'currentweek'               => array( '1', 'HÉT', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'HÉTNAPJA', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'HELYIHÉT', 'LOCALWEEK' ),
+       'localdow'                  => array( '1', 'HELYIHÉTNAPJA', 'LOCALDOW' ),
+       'revisionid'                => array( '1', 'VÁLTOZATAZON', 'VÁLTOZATAZONOSÍTÓ', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'VÁLTOZATNAPJA', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'VÁLTOZATNAPJA2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'VÁLTOZATHÓNAPJA', 'REVISIONMONTH' ),
+       'revisionyear'              => array( '1', 'VÁLTOZATÉVE', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'VÁLTOZATIDŐBÉLYEG', 'VÁLTOZATIDEJE', 'REVISIONTIMESTAMP' ),
+       'revisionuser'              => array( '1', 'VÁLTOZATSZERKESZTŐJE', 'REVISIONUSER' ),
+       'plural'                    => array( '0', 'TÖBBESSZÁM:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'TELJESURL:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'TELJESURLE:', 'FULLURLE:' ),
+       'lcfirst'                   => array( '0', 'KISKEZDŐ:', 'KISKEZDŐBETŰ:', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', 'NAGYKEZDŐ:', 'NAGYKEZDŐBETŰ:', 'UCFIRST:' ),
+       'lc'                        => array( '0', 'KISBETŰ:', 'KISBETŰK:', 'KB:', 'KISBETŰS:', 'LC:' ),
+       'uc'                        => array( '0', 'NAGYBETŰ:', 'NAGYBETŰK', 'NB:', 'NAGYBETŰS:', 'UC:' ),
+       'displaytitle'              => array( '1', 'MEGJELENÍTENDŐCÍM', 'CÍM', 'DISPLAYTITLE' ),
+       'newsectionlink'            => array( '1', '__ÚJSZAKASZHIV__', '__ÚJSZAKASZLINK__', '__NEWSECTIONLINK__' ),
+       'nonewsectionlink'          => array( '1', '__NINCSÚJSZAKASZHIV__', '__NINCSÚJSZAKASZLINK__', '__NONEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'JELENLEGIVÁLTOZAT', 'CURRENTVERSION' ),
+       'urlencode'                 => array( '0', 'URLKÓDOLVA:', 'URLENCODE:' ),
+       'anchorencode'              => array( '0', 'HORGONYKÓDOLVA', 'ANCHORENCODE' ),
+       'currenttimestamp'          => array( '1', 'IDŐBÉLYEG', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', 'HELYIIDŐBÉLYEG', 'LOCALTIMESTAMP' ),
+       'directionmark'             => array( '1', 'IRÁNYJELZŐ', 'DIRECTIONMARK', 'DIRMARK' ),
+       'language'                  => array( '0', '#NYELV:', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'TARTALOMNYELVE', 'TARTNYELVE', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', 'OLDALAKNÉVTÉRBEN:', 'OLDALAKNBEN:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', 'ADMINOKSZÁMA', 'NUMBEROFADMINS' ),
+       'formatnum'                 => array( '0', 'FORMÁZOTTSZÁM', 'SZÁMFORMÁZÁS', 'SZÁMFORM', 'FORMATNUM' ),
+       'special'                   => array( '0', 'speciális', 'special' ),
+       'defaultsort'               => array( '1', 'RENDEZÉS:', 'KULCS:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'filepath'                  => array( '0', 'ELÉRÉSIÚT:', 'FILEPATH:' ),
+       'hiddencat'                 => array( '1', '__REJTETTKAT__', '__REJTETTKATEGÓRIA__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'LAPOKAKATEGÓRIÁBAN', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'LAPMÉRET', 'PAGESIZE' ),
+       'noindex'                   => array( '1', '__NINCSINDEX__', '__NOINDEX__' ),
+       'numberingroup'             => array( '1', 'CSOPORTTAGOK', 'NUMBERINGROUP', 'NUMINGROUP' ),
+       'staticredirect'            => array( '1', '__ÁLLANDÓÁTIRÁNYÍTÁS__', '__STATIKUSÁTIRÁNYÍTÁS__', '__STATICREDIRECT__' ),
+       'protectionlevel'           => array( '1', 'VÉDELMISZINT', 'PROTECTIONLEVEL' ),
+       'formatdate'                => array( '0', 'dátumformázás', 'formatdate', 'dateformat' ),
 );
 
 $linkTrail = '/^([a-záéíóúöüőűÁÉÍÓÚÖÜŐŰ]+)(.*)$/sDu';
@@ -382,7 +382,7 @@ $messages = array(
 'tue' => 'kedd',
 'wed' => 'sze',
 'thu' => 'csü',
-'fri' => 'pé',
+'fri' => 'pén',
 'sat' => 'szo',
 'january' => 'január',
 'february' => 'február',
@@ -633,9 +633,9 @@ Az érvényes speciális lapok listáját a [[Special:SpecialPages|{{int:special
 'databaseerror' => 'Adatbázishiba',
 'dberrortext' => 'Szintaktikai hiba található az adatbázis-lekérdezésben.
 Ezt szoftverhiba okozhatta.
-Az utolsó adatbázis-lekérdezés a(z) „<tt>$2</tt>” függvényből történt, és a következő volt:
-<blockquote><tt>$1</tt></blockquote>
-Az adatbázis ezzel a hibával tért vissza: „<tt>$3: $4</tt>”.',
+Az utolsó adatbázis-lekérdezés a(z) „<code>$2</code>” függvényből történt, és a következő volt:
+<blockquote><code>$1</code></blockquote>
+Az adatbázis ezzel a hibával tért vissza: „<samp>$3: $4</samp>”.',
 'dberrortextcl' => 'Szintaktikai hiba található az adatbázis-lekérdezésben.
 Az utolsó adatbázis-lekérdezés a(z) „$2” függvényből történt, és a következő volt:
 „$1”
@@ -978,7 +978,6 @@ A blokkolási napló legutóbbi ide vonatkozó bejegyzése a következő:',
 '''Firefox / Safari:''' tartsd lenyomva a Shift gombot és kattints a ''Frissítés'' gombra a címsorban, vagy használd a ''Ctrl–F5'' vagy ''Ctrl–R'' billentyűkombinációt (Mac-en ''Command–R'');
 '''Google Chrome:''' használd a ''Ctrl–Shift–R'' billentyűkombinációt (Mac-en ''Command–Shift–R'');
 '''Internet Explorer:''' tartsd nyomva a ''Ctrl''-t, és kattints a ''Frissítés'' gombra, vagy nyomj ''Ctrl–F5''-öt;
-'''Konqueror: '''kattints a ''Frissítés'' gombra vagy nyomj ''F5''-öt;
 '''Opera:''' ürítsd ki a gyorsítótárat a ''Beállítások / Haladó / Előzmények→Törlés most'' gombbal, majd frissítsd az oldalt.",
 'usercssyoucanpreview' => "'''Tipp:''' mentés előtt használd az „{{int:showpreview}}” gombot az új CSS-ed teszteléséhez.",
 'userjsyoucanpreview' => "'''Tipp:''' mentés előtt használd az „{{int:showpreview}}” gombot az új JavaScipted teszteléséhez.",
@@ -3056,11 +3055,11 @@ Ez valószínűleg egy olyan link miatt van, ami egy feketelistán lévő oldalr
 
 # Info page
 'pageinfo-title' => 'Információk a(z) „$1” lapról',
-'pageinfo-header-edits' => 'Szerkesztések',
+'pageinfo-header-edits' => 'Szerkesztések története',
 'pageinfo-views' => 'Megtekintések száma',
 'pageinfo-watchers' => 'Figyelők száma',
-'pageinfo-edits' => 'Szerkesztések száma',
-'pageinfo-authors' => 'Egyedi szerkesztők száma',
+'pageinfo-edits' => 'Szerkesztések teljes száma',
+'pageinfo-authors' => 'Egyedi szerkesztők teljes száma',
 
 # Skin names
 'skinname-standard' => 'Klasszikus',
index 15107a3..abaa5fe 100644 (file)
@@ -92,109 +92,109 @@ $bookstoreList = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#ՎԵՐԱՀՂՈՒՄ', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__ԱՌԱՆՑ_ԲՈՎ__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__ԱՌԱՆՑ_ՍՐԱՀԻ__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__ՍՏԻՊԵԼ_ԲՈՎ__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__ԲՈՎ__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__ԱՌԱՆՑ_ԲԱԺՆԻ_ԽՄԲԱԳՐՄԱՆ__', '__NOEDITSECTION__' ),
-       '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' ),
-       'currentyear'             => array( '1', 'ԸՆԹԱՑԻՔ_ՏԱՐԻՆ', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'ԸՆԹԱՑԻՔ_ԺԱՄԱՆԱԿԸ', 'CURRENTTIME' ),
-       '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' ),
-       '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' ),
-       'numberofusers'           => array( '1', 'ՄԱՍՆԱԿԻՑՆԵՐԻ_ՔԱՆԱԿԸ', 'NUMBEROFUSERS' ),
-       'pagename'                => array( '1', 'ԷՋԻ_ԱՆՈՒՆԸ', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'ԷՋԻ_ԱՆՈՒՆԸ_2', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'ԱՆՎԱՆԱՏԱՐԱԾՔ', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'ԱՆՎԱՆԱՏԱՐԱԾՔ_2', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'ՔՆՆԱՐԿՄԱՆ_ՏԱՐԱԾՔԸ', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'ՔՆՆԱՐԿՄԱՆ_ՏԱՐԱԾՔԸ_2', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'ՀՈԴՎԱԾՆԵՐԻ_ՏԱՐԱԾՔԸ', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'ՀՈԴՎԱԾՆԵՐԻ_ՏԱՐԱԾՔԸ_2', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'ARTICLESPACE', 'ԷՋԻ_ԼՐԻՎ_ԱՆՎԱՆՈՒՄԸ', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'ԷՋԻ_ԼՐԻՎ_ԱՆՎԱՆՈՒՄԸ_2', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'ԵՆԹԱԷՋԻ_ԱՆՎԱՆՈՒՄԸ', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'ԵՆԹԱԷՋԻ_ԱՆՎԱՆՈՒՄԸ_2', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'ՀԻՄՆԱԿԱՆ_ԷՋԻ_ԱՆՎԱՆՈՒՄԸ', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'ՀԻՄՆԱԿԱՆ_ԷՋԻ_ԱՆՎԱՆՈՒՄԸ_2', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'ՔՆՆԱՐԿՄԱՆ_ԷՋԻ_ԱՆՎԱՆՈՒՄԸ', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'ՔՆՆԱՐԿՄԱՆ_ԷՋԻ_ԱՆՎԱՆՈՒՄԸ_2', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'ՀՈԴՎԱԾԻ_ԷՋԻ_ԱՆՎԱՆՈՒՄԸ', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'subjectpagenamee'        => array( '1', 'ՀՈԴՎԱԾԻ_ԷՋԻ_ԱՆՎԱՆՈՒՄԸ_2', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
-       'msg'                     => array( '0', 'ՀՈՂՈՐԴ՝', 'MSG:' ),
-       'msgnw'                   => array( '0', 'ՀՈՂՈՐԴ_ԱՌԱՆՑ_ՎԻՔԻԻ՝', 'MSGNW:' ),
-       '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_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' ),
-       'int'                     => array( '0', 'ՆԵՐՔ՝', 'INT:' ),
-       'sitename'                => array( '1', 'ԿԱՅՔԻ_ԱՆՈՒՆԸ', 'SITENAME' ),
-       'ns'                      => array( '0', 'ԱՏ՝', 'NS:' ),
-       'localurl'                => array( '0', 'ՏԵՂԱԿԱՆ_ՀԱՍՑԵՆ՝', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'ՏԵՂԱԿԱՆ_ՀԱՍՑԵՆ_2՝', 'LOCALURLE:' ),
-       'server'                  => array( '0', 'ՍԵՐՎԵՐԸ', 'SERVER' ),
-       'servername'              => array( '0', 'ՍԵՐՎԵՐԻ_ԱՆՈՒՆԸ', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'ՍՔՐԻՊՏԻ_ՃԱՆԱՊԱՐՀԸ', 'SCRIPTPATH' ),
-       'grammar'                 => array( '0', 'ՀՈԼՈՎ՛', 'GRAMMAR:' ),
-       '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', 'ՏԱՐԲԵՐԱԿԻ_ՀԱՄԱՐԸ', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'ՏԱՐԲԵՐԱԿԻ_ՕՐԸ', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'ՏԱՐԲԵՐԱԿԻ_ՕՐԸ_2', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'ՏԱՐԲԵՐԱԿԻ_ԱՄԻՍԸ', 'REVISIONMONTH' ),
-       'revisionyear'            => array( '1', 'ՏԱՐԲԵՐԱԿԻ_ՏԱՐԻՆ', 'REVISIONYEAR' ),
-       'plural'                  => array( '0', 'ՀՈԳՆԱԿԻ՝', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'ԼՐԻՎ_ՀԱՍՑԵՆ՝', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'ԼՐԻՎ_ՀԱՍՑԵՆ_2՝', 'FULLURLE:' ),
-       'lcfirst'                 => array( '0', 'ՓՈՔՐԱՏԱՌ_ՍԿԶԲՆԱՏԱՌ՝', 'LCFIRST:' ),
-       'ucfirst'                 => array( '0', 'ՄԵԾԱՏԱՌ_ՍԿԶԲՆԱՏԱՌ՝', 'UCFIRST:' ),
-       'lc'                      => array( '0', 'ՓՈՔՐԱՏԱՌ՝', 'LC:' ),
-       'uc'                      => array( '0', 'ՄԵԾԱՏԱՌ՝', 'UC:' ),
-       'displaytitle'            => array( '1', 'ՑՈՒՅՑ_ՏԱԼ_ՎԵՐՆԱԳԻՐԸ', 'DISPLAYTITLE' ),
-       'rawsuffix'               => array( '1', 'Չ', 'R' ),
-       'newsectionlink'          => array( '1', '__ՀՂՈՒՄ_ՆՈՐ_ԲԱԺՆԻ_ՎՐԱ__', '__NEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', 'ԸՆԹԱՑԻՔ_ՏԱՐԲԵՐԱԿԸ', 'CURRENTVERSION' ),
-       'urlencode'               => array( '0', 'ՄՇԱԿՎԱԾ_ՀԱՍՑԵ՛', 'URLENCODE:' ),
-       '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:' ),
+       'redirect'                  => array( '0', '#ՎԵՐԱՀՂՈՒՄ', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__ԱՌԱՆՑ_ԲՈՎ__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__ԱՌԱՆՑ_ՍՐԱՀԻ__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__ՍՏԻՊԵԼ_ԲՈՎ__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__ԲՈՎ__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__ԱՌԱՆՑ_ԲԱԺՆԻ_ԽՄԲԱԳՐՄԱՆ__', '__NOEDITSECTION__' ),
+       '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' ),
+       'currentyear'               => array( '1', 'ԸՆԹԱՑԻՔ_ՏԱՐԻՆ', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'ԸՆԹԱՑԻՔ_ԺԱՄԱՆԱԿԸ', 'CURRENTTIME' ),
+       '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' ),
+       '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' ),
+       'numberofusers'             => array( '1', 'ՄԱՍՆԱԿԻՑՆԵՐԻ_ՔԱՆԱԿԸ', 'NUMBEROFUSERS' ),
+       'pagename'                  => array( '1', 'ԷՋԻ_ԱՆՈՒՆԸ', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'ԷՋԻ_ԱՆՈՒՆԸ_2', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'ԱՆՎԱՆԱՏԱՐԱԾՔ', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'ԱՆՎԱՆԱՏԱՐԱԾՔ_2', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'ՔՆՆԱՐԿՄԱՆ_ՏԱՐԱԾՔԸ', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'ՔՆՆԱՐԿՄԱՆ_ՏԱՐԱԾՔԸ_2', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'ՀՈԴՎԱԾՆԵՐԻ_ՏԱՐԱԾՔԸ', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'ՀՈԴՎԱԾՆԵՐԻ_ՏԱՐԱԾՔԸ_2', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'ARTICLESPACE', 'ԷՋԻ_ԼՐԻՎ_ԱՆՎԱՆՈՒՄԸ', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'ԷՋԻ_ԼՐԻՎ_ԱՆՎԱՆՈՒՄԸ_2', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'ԵՆԹԱԷՋԻ_ԱՆՎԱՆՈՒՄԸ', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'ԵՆԹԱԷՋԻ_ԱՆՎԱՆՈՒՄԸ_2', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'ՀԻՄՆԱԿԱՆ_ԷՋԻ_ԱՆՎԱՆՈՒՄԸ', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'ՀԻՄՆԱԿԱՆ_ԷՋԻ_ԱՆՎԱՆՈՒՄԸ_2', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'ՔՆՆԱՐԿՄԱՆ_ԷՋԻ_ԱՆՎԱՆՈՒՄԸ', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'ՔՆՆԱՐԿՄԱՆ_ԷՋԻ_ԱՆՎԱՆՈՒՄԸ_2', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'ՀՈԴՎԱԾԻ_ԷՋԻ_ԱՆՎԱՆՈՒՄԸ', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'          => array( '1', 'ՀՈԴՎԱԾԻ_ԷՋԻ_ԱՆՎԱՆՈՒՄԸ_2', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+       'msg'                       => array( '0', 'ՀՈՂՈՐԴ՝', 'MSG:' ),
+       'msgnw'                     => array( '0', 'ՀՈՂՈՐԴ_ԱՌԱՆՑ_ՎԻՔԻԻ՝', 'MSGNW:' ),
+       '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_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' ),
+       'int'                       => array( '0', 'ՆԵՐՔ՝', 'INT:' ),
+       'sitename'                  => array( '1', 'ԿԱՅՔԻ_ԱՆՈՒՆԸ', 'SITENAME' ),
+       'ns'                        => array( '0', 'ԱՏ՝', 'NS:' ),
+       'localurl'                  => array( '0', 'ՏԵՂԱԿԱՆ_ՀԱՍՑԵՆ՝', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'ՏԵՂԱԿԱՆ_ՀԱՍՑԵՆ_2՝', 'LOCALURLE:' ),
+       'server'                    => array( '0', 'ՍԵՐՎԵՐԸ', 'SERVER' ),
+       'servername'                => array( '0', 'ՍԵՐՎԵՐԻ_ԱՆՈՒՆԸ', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'ՍՔՐԻՊՏԻ_ՃԱՆԱՊԱՐՀԸ', 'SCRIPTPATH' ),
+       'grammar'                   => array( '0', 'ՀՈԼՈՎ՛', 'GRAMMAR:' ),
+       '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', 'ՏԱՐԲԵՐԱԿԻ_ՀԱՄԱՐԸ', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'ՏԱՐԲԵՐԱԿԻ_ՕՐԸ', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'ՏԱՐԲԵՐԱԿԻ_ՕՐԸ_2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'ՏԱՐԲԵՐԱԿԻ_ԱՄԻՍԸ', 'REVISIONMONTH' ),
+       'revisionyear'              => array( '1', 'ՏԱՐԲԵՐԱԿԻ_ՏԱՐԻՆ', 'REVISIONYEAR' ),
+       'plural'                    => array( '0', 'ՀՈԳՆԱԿԻ՝', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'ԼՐԻՎ_ՀԱՍՑԵՆ՝', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'ԼՐԻՎ_ՀԱՍՑԵՆ_2՝', 'FULLURLE:' ),
+       'lcfirst'                   => array( '0', 'ՓՈՔՐԱՏԱՌ_ՍԿԶԲՆԱՏԱՌ՝', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', 'ՄԵԾԱՏԱՌ_ՍԿԶԲՆԱՏԱՌ՝', 'UCFIRST:' ),
+       'lc'                        => array( '0', 'ՓՈՔՐԱՏԱՌ՝', 'LC:' ),
+       'uc'                        => array( '0', 'ՄԵԾԱՏԱՌ՝', 'UC:' ),
+       'displaytitle'              => array( '1', 'ՑՈՒՅՑ_ՏԱԼ_ՎԵՐՆԱԳԻՐԸ', 'DISPLAYTITLE' ),
+       'rawsuffix'                 => array( '1', 'Չ', 'R' ),
+       'newsectionlink'            => array( '1', '__ՀՂՈՒՄ_ՆՈՐ_ԲԱԺՆԻ_ՎՐԱ__', '__NEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'ԸՆԹԱՑԻՔ_ՏԱՐԲԵՐԱԿԸ', 'CURRENTVERSION' ),
+       'urlencode'                 => array( '0', 'ՄՇԱԿՎԱԾ_ՀԱՍՑԵ՛', 'URLENCODE:' ),
+       '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:' ),
 );
 
 $specialPageAliases = array(
@@ -533,6 +533,8 @@ $1',
 'youhavenewmessages' => 'Դուք ունեք $1 ($2)։',
 'newmessageslink' => 'նոր ուղերձներ',
 'newmessagesdifflink' => 'վերջին փոփոխությունը',
+'newmessageslinkplural' => '{{PLURAL:$1|նոր հաղորդագրություն|նոր հաղորդագրություններ}}',
+'newmessagesdifflinkplural' => '$1 {{PLURAL:$1|փոփոխում|փոփոխումներ}}',
 'youhavenewmessagesmulti' => 'Դուք նոր ուղերձներ եք ստացել $1 վրա',
 'editsection' => 'խմբագրել',
 'editold' => 'խմբագրել',
index 07ea8f7..738b529 100644 (file)
@@ -1866,6 +1866,7 @@ Tu vole forsan modificar le description in le [$2 pagina de description del file
 'uploadnewversion-linktext' => 'Incargar un nove version de iste file',
 'shared-repo-from' => 'ab $1',
 'shared-repo' => 'un repositorio partite',
+'upload-disallowed-here' => 'Infortunatemente tu non pote superscriber iste imagine.',
 
 # File reversion
 'filerevert' => 'Reverter $1',
@@ -3007,6 +3008,8 @@ Le causa es probabilemente un ligamine verso un sito externe que es presente in
 'pageinfo-length' => 'Dimension del pagina (in bytes)',
 'pageinfo-article-id' => 'ID del pagina',
 'pageinfo-robot-policy' => 'Stato del motor de recerca',
+'pageinfo-robot-index' => 'Indexabile',
+'pageinfo-robot-noindex' => 'Non indexabile',
 'pageinfo-views' => 'Numero de visitas',
 'pageinfo-watchers' => 'Numero de observatores del pagina',
 'pageinfo-redirects-name' => 'Redirectiones verso iste pagina',
@@ -3020,7 +3023,7 @@ Le causa es probabilemente un ligamine verso un sito externe que es presente in
 'pageinfo-authors' => 'Numero total de autores distincte',
 'pageinfo-recent-edits' => 'Numero de modificationes recente (intra le ultime $1)',
 'pageinfo-recent-authors' => 'Numero de autores distincte recente',
-'pageinfo-restriction' => 'Protection del pagina (<code>$1</code>)',
+'pageinfo-restriction' => 'Protection del pagina (<code>{{lcfirst:$1}}</code>)',
 'pageinfo-magic-words' => '{{PLURAL:$1|Parola|Parolas}} magic ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Categoria|Categorias}} celate ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|Patrono|Patronos}} transcludite ($1)',
@@ -3077,6 +3080,7 @@ Le execution de illo pote compromitter le securitate de tu systema.",
 'file-info-size-pages' => '$1 × $2 pixels, dimension del file: $3, typo MIME: $4, $5 {{PLURAL:$5|pagina|paginas}}',
 '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-animated' => 'File SVG animate, dimensiones nominal: $1 × $2 pixels, grandor del file: $3',
 'show-big-image' => 'Plen resolution',
 'show-big-image-preview' => ' Dimension de iste previsualisation: $1.',
 'show-big-image-other' => 'Altere {{PLURAL:$2|resolution|resolutiones}}: $1.',
@@ -3086,6 +3090,8 @@ Le execution de illo pote compromitter le securitate de tu systema.",
 'file-info-png-looped' => 'repetente',
 'file-info-png-repeat' => 'repetite $1 {{PLURAL:$1|vice|vices}}',
 'file-info-png-frames' => '$1 {{PLURAL:$1|photogramma|photogrammas}}',
+'file-no-thumb-animation' => "'''Note: A causa de limitationes technic, le miniaturas de iste file non essera animate.'''",
+'file-no-thumb-animation-gif' => "'''Nota: A causa de limitationes technic, le miniaturas de imagines GIF in alte resolution como iste non essera animate.'''",
 
 # Special:NewFiles
 'newimages' => 'Galeria de nove files',
index 73ed0c0..ff96cb3 100644 (file)
@@ -74,144 +74,144 @@ $bookstoreList = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#ALIH', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__TANPADAFTARISI__', '__NIRDASI__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__TANPAGALERI__', '__NIRGAL__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__PAKSADAFTARISI__', '__PAKSADASI__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__DAFTARISI__', '__DASI__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__TANPASUNTINGANBAGIAN__', '__NIRSUBA__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '__TANPAKEPALA__', '__NIRLA__', '__NOHEADER__' ),
-       'currentmonth'            => array( '1', 'BULANKINI', 'BULANKINI2', 'BUKIN', 'BUKIN2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', 'BULANKINI1', 'BUKIN1', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', 'NAMABULANKINI', 'NAMBUKIN', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'NAMAJENDERBULANKINI', 'NAMJENBUKIN', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'NAMASINGKATBULANKINI', 'BULANINISINGKAT', 'NAMSINGBUKIN', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'HARIKINI', 'HARKIN', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'HARIKINI2', 'HARKIN2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'NAMAHARIKINI', 'NAMHARKIN', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'TAHUNKINI', 'TAKIN', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'WAKTUKINI', 'WAKIN', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'JAMKINI', 'JAKIN', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'BULANLOKAL', 'BULANLOKAL2', 'BULOK', 'BULOK2', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', 'BULANLOKAL1', 'BULOK1', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'NAMABULANLOKAL', 'NAMBULOK', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'NAMAJENDERBULANLOKAL', 'NAMJENBULOK', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'NAMASINGKATBULANLOKAL', 'NAMSINGBULOK', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'HARILOKAL', 'HALOK', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'HARILOKAL2', 'HALOK2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'NAMAHARILOKAL', 'NAMHALOK', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'TAHUNLOKAL', 'TALOK', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'WAKTULOKAL', 'WALOK', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'JAMLOKAL', 'JALOK', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'JUMLAHHALAMAN', 'JUMMAN', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'JUMLAHARTIKEL', 'JUMKEL', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'JUMLAHBERKAS', 'JUMKAS', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'JUMLAHPENGGUNA', 'JUMPENG', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'JUMLAHPENGGUNAAKTIF', 'JUMPENGTIF', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'JUMLAHSUNTINGAN', 'JUMTING', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'JUMLAHTAMPILAN', 'JUMTAM', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'NAMAHALAMAN', 'NAMMAN', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'NAMAHALAMANE', 'NAMMANE', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'RUANGNAMA', 'RUNAM', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'RUANGNAMAE', 'RUNAME', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'RUANGBICARA', 'RUBIR', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'RUANGBICARAE', 'RUBIRE', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'RUANGUTAMA', 'RUANGARTIKEL', 'RUTAMA', 'RUTIKEL', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'RUANGUTAMAE', 'RUANGARTIKELE', 'RUTAMAE', 'RUKELE', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'NAMAHALAMANLENGKAP', 'NAMALENGKAPHALAMAN', 'NAMMANKAP', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'AMAHALAMANLENGKAPE', 'NAMALENGKAPHALAMANE', 'NAMMANKAPE', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'NAMASUBHALAMAN', 'NAMAUPAHALAMAN', 'NAMUMAN', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'NAMASUBHALAMANE', 'NAMAUPAHALAMANE', 'NAMUMANE', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'NAMAHALAMANDASAR', 'NAMADASARHALAMAN', 'NAMMANSAR', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'NAMAHALAMANDASARE', 'NAMADASARHALAMANE', 'NAMMANSARE', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'NAMAHALAMANBICARA', 'NAMMANBIR', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'NAMAHALAMANBICARAE', 'NAMMANBIRE', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'NAMAHALAMANUTAMA', 'NAMAHALAMANARTIKEL', 'NAMMANTAMA', 'NAMMANTIKEL', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'subjectpagenamee'        => array( '1', 'NAMAHALAMANUTAMAE', 'NAMAHALAMANARTIKELE', 'NAMMANTAMAE', 'NAMMANTIKELE', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
-       'msg'                     => array( '0', 'PSN:', 'PESAN:', 'MSG:' ),
-       'subst'                   => array( '0', 'GNT:', 'GANTI:', 'SUBST:' ),
-       'msgnw'                   => array( '0', 'TPL:', 'MSGNW:' ),
-       'img_thumbnail'           => array( '1', 'jmpl', 'jempol', 'mini', 'miniatur', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'jmpl=$1', 'jempol=$1', 'mini=$1', 'miniatur=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'ka', 'kanan', 'right' ),
-       'img_left'                => array( '1', 'ki', 'kiri', 'left' ),
-       'img_none'                => array( '1', 'nir', 'tanpa', 'none' ),
-       'img_center'              => array( '1', 'pus', 'pusat', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'bing', 'bingkai', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', 'nirbing', 'tanpabingkai', 'frameless' ),
-       '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_sub'                 => array( '1', 'upa', 'sub' ),
-       'img_top'                 => array( '1', 'atas', 'top' ),
-       'img_text_top'            => array( '1', 'atek', 'atas-teks', 'text-top' ),
-       'img_middle'              => array( '1', 'tengah', 'middle' ),
-       'img_bottom'              => array( '1', 'bawah', 'bottom' ),
-       'img_text_bottom'         => array( '1', 'batek', 'bawah-teks', 'text-bottom' ),
-       'img_link'                => array( '1', 'pra=$1', 'pranala=$1', 'link=$1' ),
-       'img_alt'                 => array( '1', 'al=$1', 'alternatif=$1', 'alt=$1' ),
-       'sitename'                => array( '1', 'NAMASITUS', 'NAMSIT', 'SITENAME' ),
-       'ns'                      => array( '0', 'RN:', 'RUNAM:', 'NS:' ),
-       'localurl'                => array( '0', 'URLLOKAL', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'URLLOKALE', 'LOCALURLE:' ),
-       'server'                  => array( '0', 'PELADEN', 'SERVER' ),
-       'servername'              => array( '0', 'NAMAPELADEN', 'NAMASERVER', 'NAMPEL', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'LOKASISKRIP', 'SCRIPTPATH' ),
-       'grammar'                 => array( '0', 'TATABAHASA', 'TASA', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'JANTINA', 'GENDER:' ),
-       'notitleconvert'          => array( '0', '__TANPAKONVERSIJUDUL__', '__NIRKODUL__', '__NOTITLECONVERT__', '__NOTC__' ),
-       'nocontentconvert'        => array( '0', '__TANPAKONVERSIISI__', '__NIRKOSI__', '__NOCONTENTCONVERT__', '__NOCC__' ),
-       'currentweek'             => array( '1', 'MINGGUKINI', 'MIKIN', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'HARIDALAMMINGGU', 'HADAMI', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'MINGGULOKAL', 'MIKAL', 'LOCALWEEK' ),
-       'localdow'                => array( '1', 'HARIDALAMMINGGULOKAL', 'HADAMIKAL', 'LOCALDOW' ),
-       'revisionid'              => array( '1', 'IDREVISI', 'IREV', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'HARIREVISI', 'HAREV', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'HARIREVISI2', 'HAREV2', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'BULANREVISI', 'BUREV', 'REVISIONMONTH' ),
-       'revisionmonth1'          => array( '1', 'BULANREVISI1', 'REVISIONMONTH1' ),
-       'revisionyear'            => array( '1', 'TAHUNREVISI', 'TAREV', 'REVISIONYEAR' ),
-       'revisiontimestamp'       => array( '1', 'STEMPELWAKTUREVISI', 'REKAMWAKTUREVISI', 'REVISIONTIMESTAMP' ),
-       'revisionuser'            => array( '1', 'PENGGUNAREVISI', 'REVISIONUSER' ),
-       'plural'                  => array( '0', 'JAMAK:', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'URLLENGKAP:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'URLLENGKAPE', 'FULLURLE:' ),
-       'lcfirst'                 => array( '0', 'AKC:', 'AWALKECIL:', 'LCFIRST:' ),
-       'ucfirst'                 => array( '0', 'ABS:', 'AWALBESAR:', 'UCFIRST:' ),
-       'lc'                      => array( '0', 'KC:', 'KECIL:', 'HURUFKECIL:', 'LC:' ),
-       'uc'                      => array( '0', 'BS:', 'BESAR:', 'HURUFBESAR:', 'UC:' ),
-       'raw'                     => array( '0', 'MENTAH:', 'RAW:' ),
-       'displaytitle'            => array( '1', 'JUDULTAMPILAN', 'JUTAM', 'DISPLAYTITLE' ),
-       'rawsuffix'               => array( '1', 'M', 'R' ),
-       'newsectionlink'          => array( '1', '__PRANALABAGIANBARU__', '__PRABABA__', '__NEWSECTIONLINK__' ),
-       'nonewsectionlink'        => array( '1', '_TANPAPRANALABAGIANBARU__', '__NIRPRABABA__', '__NONEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', 'VERSIKINI', 'VERKIN', 'CURRENTVERSION' ),
-       'urlencode'               => array( '0', 'KODEURL:', 'KODU:', 'URLENCODE:' ),
-       'anchorencode'            => array( '0', 'KODEJANGKAR', 'KOJANG', 'ANCHORENCODE' ),
-       'currenttimestamp'        => array( '1', 'STEMPELWAKTUKINI', 'STEMWAKIN', 'CURRENTTIMESTAMP' ),
-       'localtimestamp'          => array( '1', 'STEMPELWAKTULOKAL', 'STEMWAKAL', 'LOCALTIMESTAMP' ),
-       'directionmark'           => array( '1', 'MARKAARAH', 'MARRAH', 'DIRECTIONMARK', 'DIRMARK' ),
-       'language'                => array( '0', '#BAHASA:', '#BHS:', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', 'BAHASAISI', 'BHSISI', 'BASI', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'        => array( '1', 'HALAMANDIRUANGNAMA:', 'HALDIRN', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'          => array( '1', 'JUMLAHADMIN', 'JUMLAHPENGURUS', 'JUMAD', 'JURUS', 'NUMBEROFADMINS' ),
-       'formatnum'               => array( '0', 'FORMATANGKA', 'FORANG', 'FORMATNUM' ),
-       'padleft'                 => array( '0', 'ISIKIRI', 'IKI', 'PADLEFT' ),
-       'padright'                => array( '0', 'ISIKANAN', 'IKA', 'PADRIGHT' ),
-       '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' ),
-       'hiddencat'               => array( '1', '__KATEGORITERSEMBUNYI__', '__KATSEM__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'HALAMANDIKATEGORI', 'HALDIKAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'BESARHALAMAN', 'BESMAN', 'PAGESIZE' ),
-       'index'                   => array( '1', '__INDEKS__', '__INDEX__' ),
-       'noindex'                 => array( '1', '__TANPAINDEKS__', '__NIRDEKS__', '__NOINDEX__' ),
-       'numberingroup'           => array( '1', 'JUMLAHDIKELOMPOK', 'JULDIPOK', 'NUMBERINGROUP', 'NUMINGROUP' ),
-       'staticredirect'          => array( '1', '__PENGALIHANSTATIK__', '__PENGALIHANSTATIS__', '__PETIK__', '__PETIS__', '__STATICREDIRECT__' ),
-       'protectionlevel'         => array( '1', 'TINGKATPERLINDUNGAN', 'TIPER', 'PROTECTIONLEVEL' ),
-       'formatdate'              => array( '0', 'formattanggal', 'formatdate', 'dateformat' ),
+       'redirect'                  => array( '0', '#ALIH', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__TANPADAFTARISI__', '__NIRDASI__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__TANPAGALERI__', '__NIRGAL__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__PAKSADAFTARISI__', '__PAKSADASI__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__DAFTARISI__', '__DASI__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__TANPASUNTINGANBAGIAN__', '__NIRSUBA__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '__TANPAKEPALA__', '__NIRLA__', '__NOHEADER__' ),
+       'currentmonth'              => array( '1', 'BULANKINI', 'BULANKINI2', 'BUKIN', 'BUKIN2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'BULANKINI1', 'BUKIN1', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'NAMABULANKINI', 'NAMBUKIN', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'NAMAJENDERBULANKINI', 'NAMJENBUKIN', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'NAMASINGKATBULANKINI', 'BULANINISINGKAT', 'NAMSINGBUKIN', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'HARIKINI', 'HARKIN', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'HARIKINI2', 'HARKIN2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'NAMAHARIKINI', 'NAMHARKIN', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'TAHUNKINI', 'TAKIN', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'WAKTUKINI', 'WAKIN', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'JAMKINI', 'JAKIN', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'BULANLOKAL', 'BULANLOKAL2', 'BULOK', 'BULOK2', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'BULANLOKAL1', 'BULOK1', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'NAMABULANLOKAL', 'NAMBULOK', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'NAMAJENDERBULANLOKAL', 'NAMJENBULOK', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'NAMASINGKATBULANLOKAL', 'NAMSINGBULOK', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'HARILOKAL', 'HALOK', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'HARILOKAL2', 'HALOK2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'NAMAHARILOKAL', 'NAMHALOK', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'TAHUNLOKAL', 'TALOK', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'WAKTULOKAL', 'WALOK', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'JAMLOKAL', 'JALOK', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'JUMLAHHALAMAN', 'JUMMAN', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'JUMLAHARTIKEL', 'JUMKEL', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'JUMLAHBERKAS', 'JUMKAS', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'JUMLAHPENGGUNA', 'JUMPENG', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'JUMLAHPENGGUNAAKTIF', 'JUMPENGTIF', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'JUMLAHSUNTINGAN', 'JUMTING', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'JUMLAHTAMPILAN', 'JUMTAM', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'NAMAHALAMAN', 'NAMMAN', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'NAMAHALAMANE', 'NAMMANE', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'RUANGNAMA', 'RUNAM', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'RUANGNAMAE', 'RUNAME', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'RUANGBICARA', 'RUBIR', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'RUANGBICARAE', 'RUBIRE', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'RUANGUTAMA', 'RUANGARTIKEL', 'RUTAMA', 'RUTIKEL', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'RUANGUTAMAE', 'RUANGARTIKELE', 'RUTAMAE', 'RUKELE', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'NAMAHALAMANLENGKAP', 'NAMALENGKAPHALAMAN', 'NAMMANKAP', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'AMAHALAMANLENGKAPE', 'NAMALENGKAPHALAMANE', 'NAMMANKAPE', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'NAMASUBHALAMAN', 'NAMAUPAHALAMAN', 'NAMUMAN', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'NAMASUBHALAMANE', 'NAMAUPAHALAMANE', 'NAMUMANE', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'NAMAHALAMANDASAR', 'NAMADASARHALAMAN', 'NAMMANSAR', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'NAMAHALAMANDASARE', 'NAMADASARHALAMANE', 'NAMMANSARE', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'NAMAHALAMANBICARA', 'NAMMANBIR', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'NAMAHALAMANBICARAE', 'NAMMANBIRE', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'NAMAHALAMANUTAMA', 'NAMAHALAMANARTIKEL', 'NAMMANTAMA', 'NAMMANTIKEL', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'          => array( '1', 'NAMAHALAMANUTAMAE', 'NAMAHALAMANARTIKELE', 'NAMMANTAMAE', 'NAMMANTIKELE', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+       'msg'                       => array( '0', 'PSN:', 'PESAN:', 'MSG:' ),
+       'subst'                     => array( '0', 'GNT:', 'GANTI:', 'SUBST:' ),
+       'msgnw'                     => array( '0', 'TPL:', 'MSGNW:' ),
+       'img_thumbnail'             => array( '1', 'jmpl', 'jempol', 'mini', 'miniatur', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'jmpl=$1', 'jempol=$1', 'mini=$1', 'miniatur=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'ka', 'kanan', 'right' ),
+       'img_left'                  => array( '1', 'ki', 'kiri', 'left' ),
+       'img_none'                  => array( '1', 'nir', 'tanpa', 'none' ),
+       'img_center'                => array( '1', 'pus', 'pusat', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'bing', 'bingkai', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'nirbing', 'tanpabingkai', 'frameless' ),
+       '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_sub'                   => array( '1', 'upa', 'sub' ),
+       'img_top'                   => array( '1', 'atas', 'top' ),
+       'img_text_top'              => array( '1', 'atek', 'atas-teks', 'text-top' ),
+       'img_middle'                => array( '1', 'tengah', 'middle' ),
+       'img_bottom'                => array( '1', 'bawah', 'bottom' ),
+       'img_text_bottom'           => array( '1', 'batek', 'bawah-teks', 'text-bottom' ),
+       'img_link'                  => array( '1', 'pra=$1', 'pranala=$1', 'link=$1' ),
+       'img_alt'                   => array( '1', 'al=$1', 'alternatif=$1', 'alt=$1' ),
+       'sitename'                  => array( '1', 'NAMASITUS', 'NAMSIT', 'SITENAME' ),
+       'ns'                        => array( '0', 'RN:', 'RUNAM:', 'NS:' ),
+       'localurl'                  => array( '0', 'URLLOKAL', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'URLLOKALE', 'LOCALURLE:' ),
+       'server'                    => array( '0', 'PELADEN', 'SERVER' ),
+       'servername'                => array( '0', 'NAMAPELADEN', 'NAMASERVER', 'NAMPEL', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'LOKASISKRIP', 'SCRIPTPATH' ),
+       'grammar'                   => array( '0', 'TATABAHASA', 'TASA', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'JANTINA', 'GENDER:' ),
+       'notitleconvert'            => array( '0', '__TANPAKONVERSIJUDUL__', '__NIRKODUL__', '__NOTITLECONVERT__', '__NOTC__' ),
+       'nocontentconvert'          => array( '0', '__TANPAKONVERSIISI__', '__NIRKOSI__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+       'currentweek'               => array( '1', 'MINGGUKINI', 'MIKIN', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'HARIDALAMMINGGU', 'HADAMI', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'MINGGULOKAL', 'MIKAL', 'LOCALWEEK' ),
+       'localdow'                  => array( '1', 'HARIDALAMMINGGULOKAL', 'HADAMIKAL', 'LOCALDOW' ),
+       'revisionid'                => array( '1', 'IDREVISI', 'IREV', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'HARIREVISI', 'HAREV', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'HARIREVISI2', 'HAREV2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'BULANREVISI', 'BUREV', 'REVISIONMONTH' ),
+       'revisionmonth1'            => array( '1', 'BULANREVISI1', 'REVISIONMONTH1' ),
+       'revisionyear'              => array( '1', 'TAHUNREVISI', 'TAREV', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'STEMPELWAKTUREVISI', 'REKAMWAKTUREVISI', 'REVISIONTIMESTAMP' ),
+       'revisionuser'              => array( '1', 'PENGGUNAREVISI', 'REVISIONUSER' ),
+       'plural'                    => array( '0', 'JAMAK:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'URLLENGKAP:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'URLLENGKAPE', 'FULLURLE:' ),
+       'lcfirst'                   => array( '0', 'AKC:', 'AWALKECIL:', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', 'ABS:', 'AWALBESAR:', 'UCFIRST:' ),
+       'lc'                        => array( '0', 'KC:', 'KECIL:', 'HURUFKECIL:', 'LC:' ),
+       'uc'                        => array( '0', 'BS:', 'BESAR:', 'HURUFBESAR:', 'UC:' ),
+       'raw'                       => array( '0', 'MENTAH:', 'RAW:' ),
+       'displaytitle'              => array( '1', 'JUDULTAMPILAN', 'JUTAM', 'DISPLAYTITLE' ),
+       'rawsuffix'                 => array( '1', 'M', 'R' ),
+       'newsectionlink'            => array( '1', '__PRANALABAGIANBARU__', '__PRABABA__', '__NEWSECTIONLINK__' ),
+       'nonewsectionlink'          => array( '1', '_TANPAPRANALABAGIANBARU__', '__NIRPRABABA__', '__NONEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'VERSIKINI', 'VERKIN', 'CURRENTVERSION' ),
+       'urlencode'                 => array( '0', 'KODEURL:', 'KODU:', 'URLENCODE:' ),
+       'anchorencode'              => array( '0', 'KODEJANGKAR', 'KOJANG', 'ANCHORENCODE' ),
+       'currenttimestamp'          => array( '1', 'STEMPELWAKTUKINI', 'STEMWAKIN', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', 'STEMPELWAKTULOKAL', 'STEMWAKAL', 'LOCALTIMESTAMP' ),
+       'directionmark'             => array( '1', 'MARKAARAH', 'MARRAH', 'DIRECTIONMARK', 'DIRMARK' ),
+       'language'                  => array( '0', '#BAHASA:', '#BHS:', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'BAHASAISI', 'BHSISI', 'BASI', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', 'HALAMANDIRUANGNAMA:', 'HALDIRN', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', 'JUMLAHADMIN', 'JUMLAHPENGURUS', 'JUMAD', 'JURUS', 'NUMBEROFADMINS' ),
+       'formatnum'                 => array( '0', 'FORMATANGKA', 'FORANG', 'FORMATNUM' ),
+       'padleft'                   => array( '0', 'ISIKIRI', 'IKI', 'PADLEFT' ),
+       'padright'                  => array( '0', 'ISIKANAN', 'IKA', 'PADRIGHT' ),
+       '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' ),
+       'hiddencat'                 => array( '1', '__KATEGORITERSEMBUNYI__', '__KATSEM__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'HALAMANDIKATEGORI', 'HALDIKAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'BESARHALAMAN', 'BESMAN', 'PAGESIZE' ),
+       'index'                     => array( '1', '__INDEKS__', '__INDEX__' ),
+       'noindex'                   => array( '1', '__TANPAINDEKS__', '__NIRDEKS__', '__NOINDEX__' ),
+       'numberingroup'             => array( '1', 'JUMLAHDIKELOMPOK', 'JULDIPOK', 'NUMBERINGROUP', 'NUMINGROUP' ),
+       'staticredirect'            => array( '1', '__PENGALIHANSTATIK__', '__PENGALIHANSTATIS__', '__PETIK__', '__PETIS__', '__STATICREDIRECT__' ),
+       'protectionlevel'           => array( '1', 'TINGKATPERLINDUNGAN', 'TIPER', 'PROTECTIONLEVEL' ),
+       'formatdate'                => array( '0', 'formattanggal', 'formatdate', 'dateformat' ),
 );
 
 $specialPageAliases = array(
index 282d871..fcc45d6 100644 (file)
@@ -61,16 +61,16 @@ $specialPageAliases = array(
 );
 
 $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' ),
+       '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(
index abbcd8c..aab9cf2 100644 (file)
@@ -298,6 +298,10 @@ $1',
 'youhavenewmessages' => 'Addaanka ti $1 ($2).',
 'newmessageslink' => 'dagiti baro a mensahe',
 'newmessagesdifflink' => 'naudi a sinukatan',
+'youhavenewmessagesfromusers' => 'Adda $1 manipud {{PLURAL:$3|ti sabali nga agar-aramat|$3 kadagiti sabsabali nga agar-aramat}} ($2).',
+'youhavenewmessagesmanyusers' => 'Adda $1 fmanipud kadagiti adu nga agar-aramat ($2).',
+'newmessageslinkplural' => '{{PLURAL:$1|baro a mensahem|dagiti baro a mensahem}}',
+'newmessagesdifflinkplural' => 'kinaudi {{PLURAL:$1|a sinukatan|a sinuksukatan}}',
 'youhavenewmessagesmulti' => 'Adda dagiti baro a mensahem iti $1',
 'editsection' => 'urnosen',
 'editold' => 'urnosen',
@@ -349,12 +353,12 @@ Masarakan ti listaan dagiti umisu nga espesial a pampanid iti [[Special:SpecialP
 # General errors
 'error' => 'Biddut',
 'databaseerror' => 'Biddut iti database',
-'dberrortext' => 'Adda biddut ti database ti  gramatika na a panagsapul.
+'dberrortext' => 'Adda napasamak a biddut ti nakaibatayan ti datos a panagsapul ti gramatika.
 Adda ngata  kiteb iti software.
-Ti kinaudia a panagpadas ti panagsapul ti database ket:
-<blockquote><tt>$1</tt></blockquote>
-naggapu ti uneg ti pamay-an "<tt>$2</tt>".
-Ti database ket nangipatulod ti biddut "<tt>$3: $4</tt>".',
+Ti kinaudi a panagpadas ti panagsapul ti nakaibatayan ti datos ket:
+<blockquote><code>$1</code></blockquote>
+naggapu ti uneg ti pamay-an "<code>$2</code>".
+Ti nakaibatayan ti datos ket nangipatulod ti biddut "<samp>$3: $4</samp>".',
 'dberrortextcl' => 'Adda biddut ti database ti  gramatika a panagsapul.
 Ti kinaudi a panagsapul ti database ket:
 "$1"
@@ -452,6 +456,7 @@ Dimo liplipatan a sukatan dagita kaykayatmo idiay [[Special:Preferences|{{SITENA
 'remembermypassword' => 'Laglagipem ti iseserrekko iti daytoy a pagbasabasa (para iti kapaut iti $1 {{PLURAL:$1|nga aldaw|nga al-aldaw}})',
 'securelogin-stick-https' => 'Agyan ka a nakasilpo iti HTTPS no nakastrekka',
 'yourdomainname' => 'Ti bukodmo a pagturayan:',
+'password-change-forbidden' => 'Saanmo a mabalin ti mangbaliw kadagiti kontrasenias iti daytoy a wiki.',
 'externaldberror' => 'Adda biddut idi ti panakapasingked ti database wenno saanmo a mabalin ti agpabaro ti bukodmo a ruar a pakabilangan.',
 'login' => 'Sumrek',
 'nav-login-createaccount' => 'Sumrek / agaramid ti pakabilangan',
@@ -712,16 +717,19 @@ wenno [{{fullurl:{{NAMESPACE}}:{{PAGENAME}}|action=edit}} urnosem daytoy a panid
 Mabalinmo ti [[Special:Search/{{PAGENAME}}|agsapul iti kastoy a titulo ti panid]] iti sabsabali a pampanid,
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} agbirukka],
 wenno <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} agbiruk ka kadagiti maikabagian a listaan]</span>.',
+'missing-revision' => 'Ti panagbalbaliw ti #$1 tipanid a nanaganan ti "{{PAGENAME}}" ket awan.
+
+Daytoy ket kadawyan agapuanan babaen ti samaganad a panilpo ti baak a pakasaritaan iti maysa a panid a naikkaten.
+Dagiti salaysay ket mabalin a mabirukan idiay [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} listaan ti panagikkat].',
 'userpage-userdoesnotexist' => 'Ti pakabilangan ti agar-aramat "$1" ket saan a nakarehistro. 
 Pangngaasi a kitaem no kayatmo ti agaramid/urnosen daytoy a panid.',
 'userpage-userdoesnotexist-view' => 'Ti pakabilangan ni agar-aramat "$1" ket saan a nakarehistro.',
 'blocked-notice-logextract' => 'Agdama a naserraan daytoy nga agar-aramat.
 Ti naudi a listaan ti panaka-serra ket adda dita baba tapno mausar a reperensia:',
-'clearyourcache' => "'''Pakaammo:''' No nalpas ka nga agidulin, kuma ket masapul nga ipalabas ti cahe ti pinagbasabasam tapno makita dagiti sinukatam.
+'clearyourcache' => "'''Pakaammo:''' No nalpaskan nga agiduldulin, kuma ket masapul nga ipalabas ti cahe ti pinagbasabasam tapno makita dagiti sinukatam.
 * '''Firefox / Safari:''' Tenglen ti ''Sukatan'' bayat nga agtakla ti ''Ikarga manen'', wenno itakla ti ''Ctrl-F5'' wenno''Ctrl-R'' (''⌘-R'' Mac)
 * '''Google Chrome:''' Itakla ti ''Ctrl-Shift-R'' (''⌘-Shift-R'' iti Mac)
 * '''Internet Explorer:''' Tenglen ti ''Ctrl'' bayat nga agtakla ti ''Ipasaradiwa'', wenno itakla ti ''Ctrl-F5''
-* '''Konqueror:''' Itakla ti ''Ikarga manen'' wenno itakla ti ''F5''
 * '''Opera:''' Dalusan ti cache iti ''Ramramit → Kakaykayatan''",
 'usercssyoucanpreview' => "'''Paammo:''' Usaren ti \"{{int:showpreview}}\" buton ti panagsubok ti baro a CSS sakbay nga idulinmo.",
 'userjsyoucanpreview' => "'''Paammo:''' Usaren ti \"{{int:showpreview}}\" buton ti panagsubok ti baro a JavaScript sakbay nga idulinmo.",
@@ -845,6 +853,7 @@ Dagitoy a panagpalawag  ket naikkaten.",
 'expansion-depth-exceeded-warning' => 'Ti panid ket nasurokanna ti kauneg ti panagpadakkel',
 'parser-unstrip-loop-warning' => 'Adda  nakita a di-naukisan a silo',
 'parser-unstrip-recursion-limit' => 'Ti di-naukisan a panagsumro manen a patingga ket nasurokan ($1)',
+'converter-manual-rule-error' => 'Adda biddut a naduktalan idiay manual nga alagaden ti panagbalbaliw ti pagsasao',
 
 # "Undo" feature
 'undo-success' => 'Ti panag-urnos ket saan a maisubli.
@@ -1033,6 +1042,10 @@ Usaren ti radio a buton a tukol ti pinagtipon iti laeng panagbaliw a naaramid id
 'editundo' => 'ibabawi',
 'diff-multi' => '({{PLURAL:$1|Maysa nga agtengnga a panangbalbaliw|Dagiti $1 nga agtennga a panangbalbaliw}} babaen {{PLURAL:$2|ti agararamat|dagiti $2 nga agararamat}} ti saan a naipakita)',
 'diff-multi-manyusers' => '({{PLURAL:$1|Maysa nga agtengnga a panangbalbaliw|Dagiti $1 nga agtengnga a panangbalbaliw}} babaen ti ad-adu ngem $2 {{PLURAL:$2|nga agar-aramat|kadagiti agar-aramat}} a saan a naipakita)',
+'difference-missing-revision' => '{{PLURAL:$2|Maysa a panagbalbaliw|$2 kadagiti panagbalbaliw}} iti daytoy a paggiddiatan ($1) {{PLURAL:$2|ket ti|ket dagiti}} saan a naburikan.
+
+Daytoy ket kadawyan a gapuanan babaen ti sumaganad a nabaak a panilpo tipaggiddiatan ti maysa a panid a naikkaten.
+Dagiti salaysay ket mabalin a mabirukan idiay [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} listaan ti panagikkat].',
 
 # Search results
 'searchresults' => 'Dagiti nagbanagan ti panagbiruk',
@@ -1306,6 +1319,7 @@ Ti e-surat a pagtaengam ket saan nga maipakita kadagiti agar-aramat nga agkontak
 'right-writeapi' => 'Panagusar ti panagsurat nga API',
 'right-delete' => 'Ikkaten dagiti panid',
 'right-bigdelete' => 'Ikkaten dagiti panid nga adda dagiti dakkel a pakasaritaanna',
+'right-deletelogentry' => 'Ikkaten ken isubli ti panagikkat dagiti naisangsangayan a naikabil ti listaan',
 'right-deleterevision' => 'Ikkaten ken ipasubli dagiti nainagan a pinagbaliwan ti panid',
 'right-deletedhistory' => 'Kitaen dagiti naikabil a pakasaritaan, nga awan kaniada kadagiti nairaman a testo',
 'right-deletedtext' => 'Kitaen dagiti naikkat a testo ken dagiti nasukatan a nagbaetan dagiti binaliwan',
@@ -1730,6 +1744,7 @@ Baka kayatmo nga urnosen ti bukodna a deskripsionna idiay [$2 deskripsion ti pap
 'uploadnewversion-linktext' => 'Mangipan ti kabarbaro a bersion iti daytoy a papeles',
 'shared-repo-from' => 'Naggapo iti $1',
 'shared-repo' => 'iti pagbingbingayan a nagikabilan',
+'upload-disallowed-here' => 'Daksanggasat a saanmo a mabalin a suratan manen daytoy nga imahen.',
 
 # File reversion
 'filerevert' => 'Isubli ti $1',
@@ -1811,9 +1826,10 @@ Laglagipem ti agkita kadagiti sabsabali a panilpo ti plantilia sakbay nga ikkate
 
 'disambiguations' => 'Dagiti panid a nakasilpo kadagiti panangilawlawag',
 'disambiguationspage' => 'Template:Panangilawlawag',
-'disambiguations-text' => "Dagiti sumaganad a panid ket nakasilpo iti '''panangilawlawag a panid'''.
-Ngem agpasilpo da kuma ti husto a topiko.<br />
-Ti panid ket matrato a kas panangilawlawag a panid no agusar ti plantilia a nakasilpo idiay [[MediaWiki:Disambiguationspage]]",
+'disambiguations-text' => "Dagiti sumaganad a panid ket aglaon ti saan a basbasit ngem maysa a panilpo iti '''panangilawlawag a panid'''.
+Dagitoy ket mabalinno a nasken nga isilpo kadagiti embes a nasaysayaat a panid.<br />
+Ti panid ket matrato a kas panangilawlawag a panid no agusar ti plantilia a nakasilpo idiay
+ [[MediaWiki:Disambiguationspage]]",
 
 'doubleredirects' => 'Dagiti namindua a naibaw-ing',
 'doubleredirectstext' => 'Daytoy a panid ket ilistana dagiti panid nga agbaw-ing kadagiti sabsabali a baw-ing a pampanid.
@@ -1839,6 +1855,7 @@ Tattan ket naibaw-ing idiay [[$2]].',
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|a byte|kadagiti byte}}',
 'ncategories' => '$1 {{PLURAL:$1|a kategoria|kadagiti kategoria}}',
+'ninterwikis' => '$1 {{PLURAL:$1|interwiki|dagiti interwiki}}',
 'nlinks' => '$1 {{PLURAL:$1|a panilpo|kadagiti panilpo}}',
 'nmembers' => '$1 {{PLURAL:$1|a kameng|kadagiti kameng}}',
 'nrevisions' => '$1 {{PLURAL:$1|a panagbalbaliw|kadagiti panagbalbaliw}}',
@@ -1867,6 +1884,7 @@ Tattan ket naibaw-ing idiay [[$2]].',
 'mostlinkedtemplates' => 'Dagiti plantilia a kaaduan iti nakasilpo',
 'mostcategories' => 'Dagiti panid a kaaduan kadagiti kategoria',
 'mostimages' => 'Dagiti papeles a kaaduan iti nakasilpo',
+'mostinterwikis' => 'Dagiti panid a kaaduan kadagiti interwiki',
 'mostrevisions' => 'Dagiti artikulo a kaaduan ti pannakabalbaliwna',
 'prefixindex' => 'Dagiti amin a panid nga adda ti pasaruno na',
 'prefixindex-namespace' => 'Amin a panid nga addaan ti pasaruno ($1 nagan ti luglugar)',
@@ -2012,6 +2030,8 @@ Adda pay ngata [[{{MediaWiki:Listgrouprights-helppage}}|adu pay a pakaammo]] a m
 'mailnologin' => 'Awan ti pagipatulodan a pagtaengan',
 'mailnologintext' => 'Masapul a [[Special:UserLogin|nakastrekka]] ken adda umisu nga e-surat a pagtaengan idiay [[Special:Preferences|kaykayatmo]] ti agipatulod ti e-surat kadagiti sabsabali nga agar-aramat.',
 'emailuser' => 'E-suratan daytoy nga agar-aramat',
+'emailuser-title-target' => 'E-suratam daytoy nga {{GENDER:$1|agar-aramat}}',
+'emailuser-title-notarget' => 'E-suratan ti agar-aramat',
 'emailpage' => 'E-suratan ti agar-aramat',
 'emailpagetext' => 'Mabalinmo nga usaren ti kinabuklan dita baba nga agipatulod ti e-surat a mensahe daytoy nga agar-aramat.
 Ti e-surat nga inkabilmo idiay  [[Special:Preferences|kakaykayatam]] ket agparang a kas "Naggapu" a pagtaengan ti e-surat, tapno ti nagipatulodam ket makasungbat kenka.',
@@ -2158,6 +2178,8 @@ agal-aluad ka a mangrugi.',
 'rollback' => 'Isubli dagiti panag-urnos',
 'rollback_short' => 'Isubli',
 'rollbacklink' => 'isubli',
+'rollbacklinkcount' => 'agisubli ti $1 {{PLURAL:$1|nga inurnos|nga inururnos}}',
+'rollbacklinkcount-morethan' => 'agisubli ti ad-adu ngem $1 {{PLURAL:$1|nga inurnos|nga inururnos}}',
 'rollbackfailed' => 'Napaay ti panangisubli',
 'cantrollback' => 'Saan a maisubli ti panagurnos;
 ti naudi a nakaaramid ket iti laeng nagsurat daytoy a panid..',
@@ -2665,6 +2687,7 @@ Amin a transwiki nga alaem ket mailista idiay [[Special:Log/import|listaan ti pi
 'import-interwiki-templates' => 'Ikabil amin dagiti plantilia',
 'import-interwiki-submit' => 'Agala',
 'import-interwiki-namespace' => 'Pangipanan ti nagan ti lugar:',
+'import-interwiki-rootpage' => 'Papanan a ramut ti panid (mapili):',
 'import-upload-filename' => 'Nagan ti papeles:',
 'import-comment' => 'Komentario:',
 'importtext' => 'Pangngaasi nga ipanmo ti papeles a naggapu iti nagtaudan a wiki nga agusar ti [[Special:Export|agipan]].',
@@ -2700,6 +2723,9 @@ Pangngaasi ta padasem manen.',
 'import-error-interwiki' => 'Ti panid ti "$1" ket saan a naala ngamin ket ti nagan ket nailasin para iti ruar a panagsilpo (interwiki).',
 'import-error-special' => 'Ti panid ti "$1" ket saan a naala ngamin ket bukod ti  espesial a nagan a lugar a saan nga agpalubos ti pampanid.',
 'import-error-invalid' => 'Ti panid ti "$1" ket saan a naala ngamin ket ti nagan ket imbalido.',
+'import-options-wrong' => 'Saan nga husto {{PLURAL:$2|a pagpilian|a pagpilpilian}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'Ti naited a ramut ti panid ket imbalido a titulo.',
+'import-rootpage-nosubpage' => 'Ti nagan ti lugar ti "$1" iti ramut ti panid ket saan amangpalubos kadagiti apo ti panid.',
 
 # Import log
 'importlogpage' => 'Alaen ti listaan',
@@ -2817,11 +2843,34 @@ Daytoy ket mabalin a gapuanan babaen ti panilpo a naiparit ti akin ruar a pagsaa
 
 # Info page
 'pageinfo-title' => 'Pakaammo para iti "$1"',
-'pageinfo-header-edits' => 'Dagiti inurnos',
+'pageinfo-header-basic' => 'Kangrunaan a pakaammuan',
+'pageinfo-header-edits' => 'Pakasaritaan ti inurnos',
+'pageinfo-header-restrictions' => 'Panagsalaknib ti panid',
+'pageinfo-header-properties' => 'Tagtagikua ti panid',
+'pageinfo-display-title' => 'Iparang ti titulo',
+'pageinfo-default-sort' => 'Kasisigud a kangrunaan a panagilasin',
+'pageinfo-length' => 'Kaatiddog ti panid (kadagiti bytes)',
+'pageinfo-article-id' => 'ID ti panid',
+'pageinfo-robot-policy' => 'Kasasaad ti panagbiruk a makina',
+'pageinfo-robot-index' => 'Mabalin a maipasurotan',
+'pageinfo-robot-noindex' => 'Saan a mabalin a maipasurotan',
 'pageinfo-views' => 'Bilang dagiti panagkita',
-'pageinfo-watchers' => 'Bilang dagiti agbuybuya',
-'pageinfo-edits' => 'Bilang dagiti inurnos:',
-'pageinfo-authors' => 'Ti bilang dagiti sabsabali a mannurat',
+'pageinfo-watchers' => 'Bilang dagiti agbuybuya ti panid',
+'pageinfo-redirects-name' => 'Maibaw-ing ti daytoy a panid',
+'pageinfo-subpages-name' => 'Apo dagiti panid ti daytoy a panid',
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|baw-ing|bawbaw-ing}}; $3 {{PLURAL:$3|saan a baw-ing|saan a bawbaw-ing}})',
+'pageinfo-firstuser' => 'Nagpartuat ti panid',
+'pageinfo-firsttime' => 'Petsa a panakapartuat ti panid',
+'pageinfo-lastuser' => 'Kinaudi a nagurnos',
+'pageinfo-lasttime' => 'Petsa ti kinaudi a panag-urnos',
+'pageinfo-edits' => 'Dagup a bilang dagiti inurnos',
+'pageinfo-authors' => 'Dagup a bilang dagiti naisangsangayn a mannurat',
+'pageinfo-recent-edits' => 'Itay nabiit a bilang dagiti inurnos (ti uneg ti napalabas ti $1)',
+'pageinfo-recent-authors' => 'Itay nabiit a bilang dagiti naisangsangayan a mannurat',
+'pageinfo-restriction' => 'Panagsalaknib ti panid (<code>{{lcfirst:$1}}</code>)',
+'pageinfo-magic-words' => 'Salamangka  {{PLURAL:$1|a balikas|a balbalikas}} ($1)',
+'pageinfo-hidden-categories' => 'Nailemmeng {{PLURAL:$1|a kategoria|a katkategoria}} ($1)',
+'pageinfo-templates' => 'Nailak-am  {{PLURAL:$1|a plantilia|a planplantilia}} ($1)',
 
 # Patrolling
 'markaspatrolleddiff' => 'Markaan a kas napatruliaan',
@@ -2865,6 +2914,7 @@ No usarem daytoy, baka makompromiso ti sistema.",
 'file-info-size-pages' => '$1 × $2 dagiti piksel, kadakkel ti papeles: $3, kita ti MIME: $4, $5 {{PLURAL:$5|panid|pampanid}}',
 'file-nohires' => 'Awan ti mabalin a nangatngato a resolusion.',
 'svg-long-desc' => 'SVG a papeles, babassit ngem $1 × $2 pixels, kadakkel ti papeles: $3',
+'svg-long-desc-animated' => 'Naanimado nga SVG a papeles, babassit ngem  $1 × $2 pixels, kadakkel ti papeles: $3',
 'show-big-image' => 'Sibubukel a resolusion',
 'show-big-image-preview' => 'Kadakkel na daytoy a pagpadas: $1.',
 'show-big-image-other' => 'Sabali  {{PLURAL:$2|a resolusion|kadagiti resolusion}}: $1.',
@@ -2874,6 +2924,8 @@ No usarem daytoy, baka makompromiso ti sistema.",
 'file-info-png-looped' => 'nasiluan',
 'file-info-png-repeat' => 'pinaayayam ti $1 {{PLURAL:$1|a beses|a beses}}',
 'file-info-png-frames' => '$1 {{PLURAL:$1|a kuadro| kadagiti kuadro}}',
+'file-no-thumb-animation' => "'''Paammo: Gapu kadagiti teknikal a panakaipatingga, dagiti bassit a ladawan ti daytoy a papeles ket saanto a maanimado.'''",
+'file-no-thumb-animation-gif' => "'''Paammo: Gapu kadagiti teknikal a panakaipatingga, dagiti bassit a ladawan ti nangato a resolusion dagiti  GIF nga imahen a kas daytoy ket saanto a maanimado.'''",
 
 # Special:NewFiles
 'newimages' => 'Galeria dagiti kabarbaro a papeles',
@@ -3536,7 +3588,7 @@ Dagiti imahen ket agparang iti kadakkelan a resolusion, dagiti sabali a kita ti
 * <span class="mw-specialpagecached">Cached nga espesial a pampanid (baka nagpaso).</span>',
 'specialpages-group-maintenance' => 'Dagiti pagsimpa a padamag',
 'specialpages-group-other' => 'Sabsabali pay nga espesial a pampanid',
-'specialpages-group-login' => 'Sumrek / agrehistro',
+'specialpages-group-login' => 'Sumrek / agaramid ti pakabilangan',
 'specialpages-group-changes' => 'Kaudian a sinukatan ken listaan',
 'specialpages-group-media' => 'Dagiti padamag ti media ken panag-ipan',
 'specialpages-group-users' => 'Dagiti agar-aramat ken karkarbengan',
@@ -3676,7 +3728,7 @@ Nupay kasta, mau-sarmo ti nakabuklan dita baba. Ti komentario nga itedmo ket mai
 'api-error-file-too-large' => 'Ti papeles nga intedmo ket dakkel unay.',
 'api-error-filename-tooshort' => 'Ti nagan daytoy a papeles ket bassit unay.',
 'api-error-filetype-banned' => 'Ti kita daytoy a papeles ket maiparit.',
-'api-error-filetype-banned-type' => 'Ti $1 {{PLURAL:$4|ket saan a mapalubusan a kita ti papeles|ket dagiti saan a mapalubusan a kita ti papeles}}. Ti mapalubusan{{PLURAL:$3|a kita ti papeles ket|kadagiti kita ti papeles ket}} $2.',
+'api-error-filetype-banned-type' => 'Ti $1 {{PLURAL:$4|ket saan a mapalubusan a kita ti papeles|ket dagiti saan a mapalubusan a kita ti papeles}}. Ti mapalubusan {{PLURAL:$3|a kita ti papeles ket|kadagiti kita ti papeles ket}} $2.',
 'api-error-filetype-missing' => 'Ti papeles ket agkurang ti pagpa-atiddog.',
 'api-error-hookaborted' => 'Ti panagbabaro a pinadasmo ket napasardeng iti pangpa-atiddog a kawit.',
 'api-error-http' => 'Kinauneg a biddut: Saan a makaikabit idiay server.',
index 8ac717a..b5eef99 100644 (file)
@@ -80,54 +80,54 @@ $dateFormats = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#tilvísun', '#TILVÍSUN', '#REDIRECT' ),
-       'nogallery'               => array( '0', '__EMSAFN__', '__NOGALLERY__' ),
-       'currentday'              => array( '1', 'NÚDAGUR', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'NÚDAGUR2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'NÚDAGNAFN', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'NÚÁR', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'NÚTÍMI', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'NÚKTÍMI', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'STMÁN', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonthname'          => array( '1', 'STMÁNNAFN', 'LOCALMONTHNAME' ),
-       'localmonthabbrev'        => array( '1', 'STMÁNST', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'STDAGUR', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'STDAGUR2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'STDAGNAFN', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'STÁR', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'STTÍMI', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'STKTÍMI', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'FJLSÍÐA', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'FJLGREINA', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'FJLSKJALA', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'FJLNOT', 'NUMBEROFUSERS' ),
-       'numberofedits'           => array( '1', 'FJLBREYT', 'NUMBEROFEDITS' ),
-       'pagename'                => array( '1', 'SÍÐUNAFN', 'PAGENAME' ),
-       'namespace'               => array( '1', 'NAFNSVÆÐI', 'NAMESPACE' ),
-       'talkspace'               => array( '1', 'SPJALLSVÆÐI', 'TALKSPACE' ),
-       'fullpagename'            => array( '1', 'FULLTSÍÐUNF', 'FULLPAGENAME' ),
-       'img_manualthumb'         => array( '1', 'þumall', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'hægri', 'right' ),
-       'img_left'                => array( '1', 'vinstri', 'left' ),
-       'img_none'                => array( '1', 'engin', 'none' ),
-       'img_width'               => array( '1', '$1dp', '$1px' ),
-       'img_center'              => array( '1', 'miðja', 'center', 'centre' ),
-       'img_sub'                 => array( '1', 'undir', 'sub' ),
-       'img_super'               => array( '1', 'yfir', 'super', 'sup' ),
-       'img_top'                 => array( '1', 'efst', 'top' ),
-       'img_bottom'              => array( '1', 'neðst', 'bottom' ),
-       'img_text_bottom'         => array( '1', 'texti-neðst', 'text-bottom' ),
-       'ns'                      => array( '0', 'NR:', 'NS:' ),
-       'server'                  => array( '0', 'VEFÞJ', 'SERVER' ),
-       'servername'              => array( '0', 'VEFÞJNF', 'SERVERNAME' ),
-       'grammar'                 => array( '0', 'MÁLFRÆÐI:', 'GRAMMAR:' ),
-       'currentweek'             => array( '1', 'NÚVIKA', 'CURRENTWEEK' ),
-       'localweek'               => array( '1', 'STVIKA', 'LOCALWEEK' ),
-       'plural'                  => array( '0', 'FLTALA:', 'PLURAL:' ),
-       'raw'                     => array( '0', 'HRÁ:', 'RAW:' ),
-       'displaytitle'            => array( '1', 'SÝNATITIL', 'DISPLAYTITLE' ),
-       'language'                => array( '0', '#TUNGUMÁL', '#LANGUAGE:' ),
-       'special'                 => array( '0', 'kerfissíða', 'special' ),
+       'redirect'                  => array( '0', '#tilvísun', '#TILVÍSUN', '#REDIRECT' ),
+       'nogallery'                 => array( '0', '__EMSAFN__', '__NOGALLERY__' ),
+       'currentday'                => array( '1', 'NÚDAGUR', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'NÚDAGUR2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'NÚDAGNAFN', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'NÚÁR', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'NÚTÍMI', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'NÚKTÍMI', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'STMÁN', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonthname'            => array( '1', 'STMÁNNAFN', 'LOCALMONTHNAME' ),
+       'localmonthabbrev'          => array( '1', 'STMÁNST', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'STDAGUR', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'STDAGUR2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'STDAGNAFN', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'STÁR', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'STTÍMI', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'STKTÍMI', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'FJLSÍÐA', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'FJLGREINA', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'FJLSKJALA', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'FJLNOT', 'NUMBEROFUSERS' ),
+       'numberofedits'             => array( '1', 'FJLBREYT', 'NUMBEROFEDITS' ),
+       'pagename'                  => array( '1', 'SÍÐUNAFN', 'PAGENAME' ),
+       'namespace'                 => array( '1', 'NAFNSVÆÐI', 'NAMESPACE' ),
+       'talkspace'                 => array( '1', 'SPJALLSVÆÐI', 'TALKSPACE' ),
+       'fullpagename'              => array( '1', 'FULLTSÍÐUNF', 'FULLPAGENAME' ),
+       'img_manualthumb'           => array( '1', 'þumall', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'hægri', 'right' ),
+       'img_left'                  => array( '1', 'vinstri', 'left' ),
+       'img_none'                  => array( '1', 'engin', 'none' ),
+       'img_width'                 => array( '1', '$1dp', '$1px' ),
+       'img_center'                => array( '1', 'miðja', 'center', 'centre' ),
+       'img_sub'                   => array( '1', 'undir', 'sub' ),
+       'img_super'                 => array( '1', 'yfir', 'super', 'sup' ),
+       'img_top'                   => array( '1', 'efst', 'top' ),
+       'img_bottom'                => array( '1', 'neðst', 'bottom' ),
+       'img_text_bottom'           => array( '1', 'texti-neðst', 'text-bottom' ),
+       'ns'                        => array( '0', 'NR:', 'NS:' ),
+       'server'                    => array( '0', 'VEFÞJ', 'SERVER' ),
+       'servername'                => array( '0', 'VEFÞJNF', 'SERVERNAME' ),
+       'grammar'                   => array( '0', 'MÁLFRÆÐI:', 'GRAMMAR:' ),
+       'currentweek'               => array( '1', 'NÚVIKA', 'CURRENTWEEK' ),
+       'localweek'                 => array( '1', 'STVIKA', 'LOCALWEEK' ),
+       'plural'                    => array( '0', 'FLTALA:', 'PLURAL:' ),
+       'raw'                       => array( '0', 'HRÁ:', 'RAW:' ),
+       'displaytitle'              => array( '1', 'SÝNATITIL', 'DISPLAYTITLE' ),
+       'language'                  => array( '0', '#TUNGUMÁL', '#LANGUAGE:' ),
+       'special'                   => array( '0', 'kerfissíða', 'special' ),
 );
 
 $specialPageAliases = array(
@@ -148,7 +148,7 @@ $specialPageAliases = array(
        'Contributions'             => array( 'Framlög' ),
        'CreateAccount'             => array( 'Búa_til_aðgang' ),
        'Deadendpages'              => array( 'Botnlangar' ),
-       'DeletedContributions'      => array( 'Edd_framlög' ),
+       'DeletedContributions'      => array( 'Eydd_framlög' ),
        'Disambiguations'           => array( 'Tenglar_í_aðgreiningarsíður' ),
        'DoubleRedirects'           => array( 'Tvöfaldar_tilvísanir' ),
        'EditWatchlist'             => array( 'Breyta_vaktlista' ),
@@ -200,6 +200,7 @@ $specialPageAliases = array(
        'Shortpages'                => array( 'Stuttar_síður' ),
        'Specialpages'              => array( 'Kerfissíður' ),
        'Statistics'                => array( 'Tölfræði' ),
+       'Tags'                      => array( 'Tög' ),
        'Unblock'                   => array( 'Afbönnun' ),
        'Uncategorizedcategories'   => array( 'Óflokkaðir_flokkar' ),
        'Uncategorizedimages'       => array( 'Óflokkaðar_myndir' ),
@@ -217,6 +218,7 @@ $specialPageAliases = array(
        'Userrights'                => array( 'Notandaréttindi' ),
        'Version'                   => array( 'Útgáfa' ),
        'Wantedcategories'          => array( 'Eftirsóttir_flokkar' ),
+       'Wantedfiles'               => array( 'Eftirsóttar_skrár' ),
        'Wantedpages'               => array( 'Eftirsóttar_síður' ),
        'Wantedtemplates'           => array( 'Eftirsótt_snið' ),
        'Watchlist'                 => array( 'Vaktlistinn' ),
@@ -1929,7 +1931,7 @@ Hún er tilvísun á [[$2]].',
 'fewestrevisions' => 'Greinar með fæstar breytingar',
 
 # Miscellaneous special pages
-'nbytes' => '$1 {{PLURAL:$1|bæt|bæt}}',
+'nbytes' => '$1 {{PLURAL:$1|bæt|bæti}}',
 'ncategories' => '$1 {{PLURAL:$1|flokkur|flokkar}}',
 'nlinks' => '$1 {{PLURAL:$1|tengill|tenglar}}',
 'nmembers' => '$1 {{PLURAL:$1|meðlimur|meðlimir}}',
@@ -2174,41 +2176,48 @@ Frekari breytingar á henni eða spallsíðu hennar munu verða sýndar þar, og
 'enotif_newpagetext' => 'Þetta er ný síða.',
 'enotif_impersonal_salutation' => '{{SITENAME}}notandi',
 'changed' => 'breytt',
-'created' => 'búið til',
+'created' => 'búin til',
 'enotif_subject' => '$PAGETITLE á {{SITENAME}} hefur verið $CHANGEDORCREATED af $PAGEEDITOR',
-'enotif_lastvisited' => 'Sjá $1 fyrir allar breytingar síðan þú sóttir síðuna síðast.',
-'enotif_lastdiff' => 'Sjá $1 til að skoða þessa breytingu.',
+'enotif_lastvisited' => 'Heimsóttu eftirfarandi tengil til að sjá allar breytingar síðan 
+þú heimsóttir síðuna síðast:
+  $1',
+'enotif_lastdiff' => 'Einnig getur þú heimsótt eftirfarandi tengil til að skoða þessa breytingu:
+  $1',
 'enotif_anon_editor' => 'ónefndur notandi $1',
 'enotif_body' => 'Kæri $WATCHINGUSERNAME,
 
+Það lítur út fyrir að þú hafir ný skilaboð á {{SITENAME}} $PAGETITLE.
+Hún hefur verið $CHANGEDORCREATED $PAGEEDITDATE af 
+$PAGEEDITOR. Breytingarágripið var:
 
-Síðan $PAGETITLE á {{SITENAME}} hefur verið $CHANGEDORCREATED þann $PAGEEDITDATE eftir $PAGEEDITOR, sjá $PAGETITLE_URL fyrir núverandi útgáfu.
+   $PAGESUMMARY
+
+Þetta er tengill á spjallsíðuna þína:
+
+   $PAGETITLE_URL
 
 $NEWPAGE
 
-Breytingarágrip notandans: $PAGESUMMARY $PAGEMINOREDIT
+Til þess að hafa samband við $PAGEEDITOR, heimsóttu:
 
-Samskipta upplýsingar notandans:
-netfang: $PAGEEDITOR_EMAIL
-wiki: $PAGEEDITOR_WIKI
+   $PAGEEDITOR_WIKI
 
-Engar frekari tilkynningar verða sendar nema þú heimsækir síðuna.
-Þú getur einnig endursett tilkynninga merkingar fyrir allar síður á vaktlistanum.
+Athugaðu að frekari breytingar á $PAGETITLE leiða
+ekki af sér fleiri tilkynningar fyrr en þú hefur heimsótt síðuna.
 
-                        Vingjarnlega {{SITENAME}} tilkynningar kerfið
+Kveðja,
+{{SITENAME}}
 
 --
-Til þess að breyta tilkynningum sem sendast á netfangið, smelltu á
+
+Til þess að breyta stillingum um hvenær þú færð sendar tilkynningar, heimsóttu:
+
 {{canonicalurl:{{#special:Preferences}}}}
 
-Til þess að breyta stillingum vaktlistans, smelltu á
-{{canonicalurl:{{#special:EditWatchlist}}}}
 
-Til þess að eyða síðunni af vaktlistanum, smelltu á
-$UNWATCHURL
+Til þess að hætta að fylgjast með $PAGETITLE, heimsóttu:
 
-Svörun og frekari aðstoð:
-{{canonicalurl:{{MediaWiki:Helppage}}}}',
+$UNWATCHURL',
 
 # Delete
 'deletepage' => 'Eyða',
index 88e9a20..a97ec76 100644 (file)
@@ -127,7 +127,7 @@ $specialPageAliases = array(
        'DeletedContributions'      => array( 'ContributiCancellati' ),
        'Disambiguations'           => array( 'Disambigua' ),
        'DoubleRedirects'           => array( 'RedirectDoppi' ),
-       'EditWatchlist'             => array( 'ModificaListaSeguiti' ),
+       'EditWatchlist'             => array( 'ModificaOsservati', 'ModificaOsservatiSpeciali', 'ModificaListaSeguiti' ),
        'Emailuser'                 => array( 'InviaEMail' ),
        'Export'                    => array( 'Esporta' ),
        'Fewestrevisions'           => array( 'PagineConMenoRevisioni' ),
@@ -205,59 +205,63 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#RINVIA', '#RINVIO', '#RIMANDO', '#REDIRECT' ),
-       'currentmonth'            => array( '1', 'MESECORRENTE', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonthname'        => array( '1', 'NOMEMESECORRENTE', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'NOMEMESECORRENTEGEN', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'MESECORRENTEABBREV', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'GIORNOCORRENTE', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'GIORNOCORRENTE2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'NOMEGIORNOCORRENTE', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'ANNOCORRENTE', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'ORARIOATTUALE', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'ORACORRENTE', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'MESELOCALE', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonthname'          => array( '1', 'NOMEMESELOCALE', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'NOMEMESELOCALEGEN', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'MESELOCALEABBREV', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'GIORNOLOCALE', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'GIORNOLOCALE2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'NOMEGIORNOLOCALE', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'ANNOLOCALE', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'ORARIOLOCALE', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'ORALOCALE', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'NUMEROPAGINE', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'NUMEROARTICOLI', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'NUMEROFILE', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'NUMEROUTENTI', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'NUMEROUTENTIATTIVI', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'NUMEROEDIT', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'NUMEROVISITE', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'TITOLOPAGINA', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'TITOLOPAGINAE', 'PAGENAMEE' ),
-       'subpagename'             => array( '1', 'NOMESOTTOPAGINA', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'NOMESOTTOPAGINAE', 'SUBPAGENAMEE' ),
-       'subst'                   => array( '0', 'SOST:', 'SUBST:' ),
-       'img_right'               => array( '1', 'destra', 'right' ),
-       'img_left'                => array( '1', 'sinistra', 'left' ),
-       'img_none'                => array( '1', 'nessuno', 'none' ),
-       'img_center'              => array( '1', 'centro', 'center', 'centre' ),
-       'img_page'                => array( '1', 'pagina=$1', 'pagina $1', 'page=$1', 'page $1' ),
-       'img_border'              => array( '1', 'bordo', 'border' ),
-       'sitename'                => array( '1', 'NOMESITO', 'SITENAME' ),
-       'servername'              => array( '0', 'NOMESERVER', 'SERVERNAME' ),
-       'gender'                  => array( '0', 'GENERE:', 'GENDER:' ),
-       'currentweek'             => array( '1', 'SETTIMANACORRENTE', 'CURRENTWEEK' ),
-       'localweek'               => array( '1', 'SETTIMANALOCALE', 'LOCALWEEK' ),
-       'plural'                  => array( '0', 'PLURALE:', 'PLURAL:' ),
-       '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' ),
+       'redirect'                  => array( '0', '#RINVIA', '#RINVIO', '#RIMANDO', '#REDIRECT' ),
+       'currentmonth'              => array( '1', 'MESEATTUALE', 'MESECORRENTE', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonthname'          => array( '1', 'NOMEMESEATTUALE', 'NOMEMESECORRENTE', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'NOMEMESEATTUALEGEN', 'NOMEMESECORRENTEGEN', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'MESEATTUALEABBREV', 'MESECORRENTEABBREV', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'GIORNOATTUALE', 'GIORNOCORRENTE', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'GIORNOATTUALE2', 'GIORNOCORRENTE2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'NOMEGIORNOATTUALE', 'NOMEGIORNOCORRENTE', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'ANNOATTUALE', 'ANNOCORRENTE', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'ORARIOATTUALE', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'ORAATTUALE', 'ORACORRENTE', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'MESELOCALE', 'MESELOCALE2', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'MESELOCALE1', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'NOMEMESELOCALE', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'NOMEMESELOCALEGEN', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'MESELOCALEABBREV', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'GIORNOLOCALE', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'GIORNOLOCALE2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'NOMEGIORNOLOCALE', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'ANNOLOCALE', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'ORARIOLOCALE', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'ORALOCALE', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'NUMEROPAGINE', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'NUMEROVOCI', 'NUMEROARTICOLI', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'NUMEROFILE', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'NUMEROUTENTI', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'NUMEROUTENTIATTIVI', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'NUMEROMODIFICHE', 'NUMEROEDIT', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'NUMEROVISITE', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'TITOLOPAGINA', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'TITOLOPAGINAE', 'PAGENAMEE' ),
+       'subpagename'               => array( '1', 'NOMESOTTOPAGINA', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'NOMESOTTOPAGINAE', 'SUBPAGENAMEE' ),
+       'subst'                     => array( '0', 'SOST:', 'SUBST:' ),
+       'img_thumbnail'             => array( '1', 'miniatura', 'min', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'miniatura=$1', 'min=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'destra', 'right' ),
+       'img_left'                  => array( '1', 'sinistra', 'left' ),
+       'img_none'                  => array( '1', 'nessuno', 'none' ),
+       'img_center'                => array( '1', 'centro', 'center', 'centre' ),
+       'img_page'                  => array( '1', 'pagina=$1', 'pagina_$1', 'page=$1', 'page $1' ),
+       'img_border'                => array( '1', 'bordo', 'border' ),
+       'sitename'                  => array( '1', 'NOMESITO', 'SITENAME' ),
+       'servername'                => array( '0', 'NOMESERVER', 'SERVERNAME' ),
+       'gender'                    => array( '0', 'GENERE:', 'GENDER:' ),
+       'currentweek'               => array( '1', 'SETTIMANACORRENTE', 'CURRENTWEEK' ),
+       'localweek'                 => array( '1', 'SETTIMANALOCALE', 'LOCALWEEK' ),
+       'plural'                    => array( '0', 'PLURALE:', 'PLURAL:' ),
+       'language'                  => array( '0', '#LINGUA', '#LANGUAGE:' ),
+       'numberofadmins'            => array( '1', 'NUMEROADMIN', 'NUMBEROFADMINS' ),
+       'special'                   => array( '0', 'speciale', 'special' ),
+       'tag'                       => array( '0', 'etichetta', 'tag' ),
+       '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' ),
 );
 
 $linkTrail = '/^([a-zàéèíîìóòúù]+)(.*)$/sDu';
@@ -688,7 +692,7 @@ L'account è stato creato correttamente. Non dimenticare di personalizzare le [[
 'userlogin' => 'Entra / registrati',
 'userloginnocreate' => 'Entra',
 'logout' => 'Esci',
-'userlogout' => 'Esci',
+'userlogout' => 'esci',
 'notloggedin' => 'Accesso non effettuato',
 'nologin' => "Non hai ancora un accesso? '''$1'''.",
 'nologinlink' => 'Registrati',
@@ -1904,6 +1908,7 @@ Probabilmente vuoi modificare la descrizione presente nella [$2 pagina di descri
 'shared-repo-from' => 'da $1',
 'shared-repo' => 'un archivio condiviso',
 'filepage.css' => '/* Il CSS messo qui viene incluso nella pagina di descrizione del file, inclusa anche su wiki client esterni */',
+'upload-disallowed-here' => 'Impossibile sovrascrivere questa immagine.',
 
 # File reversion
 'filerevert' => 'Ripristina $1',
@@ -2021,7 +2026,7 @@ I redirect <del>cancellati</del> sono stati corretti.',
 '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.',
 'uncategorizedpages' => 'Pagine prive di categorie',
-'uncategorizedcategories' => 'Categorie non categorizzate',
+'uncategorizedcategories' => 'Categorie prive di categorie',
 'uncategorizedimages' => 'File privi di categorie',
 'uncategorizedtemplates' => 'Template privi di categorie',
 'unusedcategories' => 'Categorie vuote',
@@ -2151,7 +2156,7 @@ Protocolli supportati: <code>$1</code> (non aggiungere nessuno di questi nella t
 'listusers-blocked' => '(bloccato)',
 
 # Special:ActiveUsers
-'activeusers' => 'Lista degli utenti attivi',
+'activeusers' => 'Elenco degli utenti attivi',
 'activeusers-intro' => 'Questo è un elenco di utenti che hanno avuto qualche tipo di attività da $1 {{PLURAL:$1|giorno|giorni}} a questa parte.',
 'activeusers-count' => "$1 {{PLURAL:$1|modifica|modifiche}} {{PLURAL:$3|nell'ultimo giorno|negli ultimi $3 giorni}}",
 'activeusers-from' => 'Mostra gli utenti a partire da:',
@@ -3012,7 +3017,7 @@ Tutte le operazioni di importazione trans-wiki sono registrate nel [[Special:Log
 'pageinfo-authors' => 'Numero totale di autori diversi',
 'pageinfo-recent-edits' => 'Numero di modifiche recenti (negli ultimi $1)',
 'pageinfo-recent-authors' => 'Numero di autori diversi recenti',
-'pageinfo-restriction' => 'Protezione della pagina (<code>$1</code>)',
+'pageinfo-restriction' => 'Protezione della pagina (<code>{{lcfirst:$1}}</code>)',
 'pageinfo-magic-words' => '{{PLURAL:$1|Parola magica|Parole magiche}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Categoria nascosta|Categorie nascoste}} ($1)',
 'pageinfo-templates' => 'Template {{PLURAL:$1|incluso|inclusi}}  ($1)',
@@ -3058,6 +3063,7 @@ $1',
 'file-info-size-pages' => '$1 × $2 pixel, dimensione del file: $3, tipo MIME: $4, $5 {{PLURAL:$5|pagina|pagine}}',
 '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-animated' => 'file in formato SVG animato, dimensioni nominali $1 × $2 pixel, dimensione del file: $3',
 'show-big-image' => 'Versione ad alta risoluzione',
 'show-big-image-preview' => 'Dimensioni di questa anteprima: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Altra risoluzione|Altre risoluzioni}}: $1.',
@@ -3067,6 +3073,8 @@ $1',
 'file-info-png-looped' => 'ciclico',
 'file-info-png-repeat' => 'ripetuto $1 {{PLURAL:$1|volta|volte}}',
 'file-info-png-frames' => '$1 {{PLURAL:$1|frame|frame}}',
+'file-no-thumb-animation' => "'''Nota: a causa di limitazioni tecniche, le miniature di questo file non saranno animate.'''",
+'file-no-thumb-animation-gif' => "'''Nota: a causa di limitazioni tecniche, le miniature delle immagini GIF ad alta risoluzione come questa non saranno animate.'''",
 
 # Special:NewFiles
 'newimages' => 'Galleria dei nuovi file',
@@ -3640,7 +3648,7 @@ Per favore, conferma che desideri veramente ricreare questa pagina.",
 'size-bytes' => '$1 byte',
 
 # Live preview
-'livepreview-loading' => 'Caricamento in corso',
+'livepreview-loading' => 'Caricamento in corso...',
 'livepreview-ready' => 'Caricamento in corso… Pronto.',
 'livepreview-failed' => "Errore nella funzione Live preview.
 Usare l'anteprima standard.",
index 45d6ca6..f85531f 100644 (file)
@@ -119,7 +119,7 @@ $specialPageAliases = array(
        'Blankpage'                 => array( '白紙ページ' ),
        'Block'                     => array( '投稿ブロック', 'ブロック' ),
        'Blockme'                   => array( '自己ブロック' ),
-       'Booksources'               => array( '文献資料' ),
+       'Booksources'               => array( '文献資料', '書籍情報源' ),
        'BrokenRedirects'           => array( '迷子のリダイレクト', '壊れたリダイレクト' ),
        'Categories'                => array( 'カテゴリ', 'カテゴリ一覧' ),
        'ChangeEmail'               => array( 'メールアドレスの変更' ),
@@ -212,159 +212,159 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#転送', '#リダイレクト', '#転送', '#リダイレクト', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__目次非表示__', '__目次非表示__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__ギャラリー非表示__', '__ギャラリー非表示__', '__NOGALLERY__' ),
-       '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', '協定月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' ),
-       'numberofusers'           => array( '1', '利用者数', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', '活動利用者数', '有効な利用者数', '有効利用者数', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', '編集回数', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', '閲覧回数', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'ページ名', 'PAGENAME' ),
-       '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', 'トークスペース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' ),
-       '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' ),
-       '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', '右上', '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' ),
-       '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:' ),
-       '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:' ),
-       '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:' ),
-       '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__' ),
-       'numberingroup'           => array( '1', 'グループ人数', 'グループ所属人数', 'NUMBERINGROUP', 'NUMINGROUP' ),
-       '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' ),
+       'redirect'                  => array( '0', '#転送', '#リダイレクト', '#転送', '#リダイレクト', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__目次非表示__', '__目次非表示__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__ギャラリー非表示__', '__ギャラリー非表示__', '__NOGALLERY__' ),
+       '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', '協定月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' ),
+       'numberofusers'             => array( '1', '利用者数', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', '活動利用者数', '有効な利用者数', '有効利用者数', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', '編集回数', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', '閲覧回数', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'ページ名', 'PAGENAME' ),
+       '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', 'トークスペース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' ),
+       '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' ),
+       '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', '右上', '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' ),
+       '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:' ),
+       '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:' ),
+       '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:' ),
+       '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__' ),
+       'numberingroup'             => array( '1', 'グループ人数', 'グループ所属人数', 'NUMBERINGROUP', 'NUMINGROUP' ),
+       '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(
 # User preference toggles
-'tog-underline' => 'リンクの下線',
+'tog-underline' => 'リンクの下線:',
 'tog-justify' => '段落に均等割り付けを設定',
 'tog-hideminor' => '最近の更新に細部の編集を表示しない',
 'tog-hidepatrolled' => '最近の更新に巡回済みの編集を表示しない',
@@ -378,7 +378,7 @@ $messages = array(
 'tog-editsectiononrightclick' => '節見出しの右クリックで節を編集できるようにする(JavaScriptが必要)',
 'tog-showtoc' => '目次を表示(ページに見出しが4つ以上ある場合)',
 'tog-rememberpassword' => 'このブラウザーにログイン情報を記憶(最大 $1 {{PLURAL:$1|日間}})',
-'tog-watchcreations' => 'è\87ªå\88\86ã\81\8cä½\9cæ\88\90ã\81\97ã\81\9fã\83\9aã\83¼ã\82¸ã\81¨アップロードしたファイルをウォッチリストに追加',
+'tog-watchcreations' => 'è\87ªå\88\86ã\81\8cä½\9cæ\88\90ã\81\97ã\81\9fã\83\9aã\83¼ã\82¸ã\82\84アップロードしたファイルをウォッチリストに追加',
 'tog-watchdefault' => '自分が編集したページやファイルをウォッチリストに追加',
 'tog-watchmoves' => '自分が移動したページやファイルをウォッチリストに追加',
 'tog-watchdeletion' => '自分が削除したページやファイルをウォッチリストに追加',
@@ -391,8 +391,8 @@ $messages = array(
 'tog-enotifminoredits' => 'ページやファイルへの細部の編集でもメールを受け取る',
 'tog-enotifrevealaddr' => '通知メールで自分のメールアドレスを明示',
 'tog-shownumberswatching' => 'ページをウォッチしている利用者数を表示',
-'tog-oldsig' => '既存の署名',
-'tog-fancysig' => '署名をウィキ文として扱う(自動リンクなし)',
+'tog-oldsig' => '既存の署名:',
+'tog-fancysig' => '署名をウィキ文として扱う (自動リンクなし)',
 'tog-externaleditor' => '既定で編集に外部アプリケーションを使用(上級者向け、コンピューターに特殊な設定が必要。[//www.mediawiki.org/wiki/Manual:External_editors 詳細])',
 'tog-externaldiff' => '差分表示に外部アプリケーションを使用(上級者向け、コンピューターに特殊な設定が必要。[//www.mediawiki.org/wiki/Manual:External_editors 詳細])',
 'tog-showjumplinks' => '利用しやすさ向上のための「{{int:jumpto}}」リンクを有効にする',
@@ -401,8 +401,8 @@ $messages = array(
 'tog-watchlisthideown' => 'ウォッチリストに自分の編集を表示しない',
 'tog-watchlisthidebots' => 'ウォッチリストにボットによる編集を表示しない',
 'tog-watchlisthideminor' => 'ウォッチリストに細部の編集を表示しない',
-'tog-watchlisthideliu' => 'ã\82¦ã\82©ã\83\83ã\83\81ã\83ªã\82¹ã\83\88ã\81«ã\83­ã\82°ã\82¤ã\83³å\88©ç\94¨è\80\85ã\81®編集を表示しない',
-'tog-watchlisthideanons' => 'ã\82¦ã\82©ã\83\83ã\83\81ã\83ªã\82¹ã\83\88ã\81«å\8c¿å\90\8då\88©ç\94¨è\80\85ã\81®編集を表示しない',
+'tog-watchlisthideliu' => 'ã\82¦ã\82©ã\83\83ã\83\81ã\83ªã\82¹ã\83\88ã\81«ã\83­ã\82°ã\82¤ã\83³å\88©ç\94¨è\80\85ã\81«ã\82\88ã\82\8b編集を表示しない',
+'tog-watchlisthideanons' => 'ã\82¦ã\82©ã\83\83ã\83\81ã\83ªã\82¹ã\83\88ã\81«å\8c¿å\90\8då\88©ç\94¨è\80\85ã\81«ã\82\88ã\82\8b編集を表示しない',
 'tog-watchlisthidepatrolled' => 'ウォッチリストに巡回済みの編集を表示しない',
 'tog-ccmeonemails' => '他の利用者に送信したメールの控えを自分にも送信',
 'tog-diffonly' => '差分の下にページ内容を表示しない',
@@ -415,7 +415,7 @@ $messages = array(
 'underline-default' => 'ブラウザーの設定を使用',
 
 # Font style option in Special:Preferences
-'editfont-style' => '編集エリアのフォントスタイル:',
+'editfont-style' => '編集エリアのフォント:',
 'editfont-default' => 'ブラウザーの設定を使用',
 'editfont-monospace' => '等幅フォント',
 'editfont-sansserif' => 'Sans Serif フォント',
@@ -655,8 +655,8 @@ $1',
 'page-rss-feed' => '「$1」のRSSフィード',
 'page-atom-feed' => '「$1」のAtomフィード',
 'red-link-title' => '$1(存在しないページ)',
-'sort-descending' => '降順に整列',
-'sort-ascending' => '昇順に整列',
+'sort-descending' => '降順に並べ替え',
+'sort-ascending' => '昇順に並べ替え',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main' => 'ページ',
@@ -777,12 +777,12 @@ $2',
 'welcomecreation' => '== ようこそ、$1 さん! ==
 アカウントが作成されました。
 [[Special:Preferences|{{SITENAME}}の個人設定]]の変更も忘れないようにしてください。',
-'yourname' => '利用者名',
-'yourpassword' => 'パスワード',
-'yourpasswordagain' => 'パスワード再入力',
+'yourname' => '利用者名:',
+'yourpassword' => 'パスワード:',
+'yourpasswordagain' => 'パスワード再入力:',
 'remembermypassword' => 'このブラウザーにログイン情報を保存 (最長 $1 {{PLURAL:$1|日|日間}})',
 'securelogin-stick-https' => 'ログイン後にHTTPS接続を維持',
-'yourdomainname' => 'ドメイン',
+'yourdomainname' => 'ドメイン:',
 'password-change-forbidden' => 'このウィキではパスワードを変更できません。',
 'externaldberror' => '外部の認証データベースでエラーが発生したか、または外部アカウント情報の更新が許可されていません。',
 'login' => 'ログイン',
@@ -815,6 +815,7 @@ Cookieを無効にしているようです。
 Cookieを有効にしてから、もう一度試してください。',
 'nocookiesfornew' => '発信元を確認できなかったため、アカウントは作成されませんでした。
 Cookieを有効にしていることを確認して、このページを再読込してもう一度試してください。',
+'nocookiesforlogin' => '{{int:nocookieslogin}}',
 'noname' => '利用者名を正しく指定していません。',
 'loginsuccesstitle' => 'ログイン成功',
 'loginsuccess' => "'''{{SITENAME}}に「$1」としてログインしました。'''",
@@ -886,9 +887,9 @@ Cookieを有効にしていることを確認して、このページを再読
 'resetpass_announce' => 'メールでお送りした仮パスワードでログインしました。
 ログインを完了するには、ここで新しいパスワードを設定する必要があります:',
 'resetpass_text' => '<!-- ここに文を挿入 -->',
-'resetpass_header' => 'ã\82¢ã\82«ã\82¦ã\83³ã\83\88ã\81®ã\83\91ã\82¹ã\83¯ã\83¼ã\83\89ã\82\92変更',
-'oldpassword' => '古いパスワード',
-'newpassword' => '新しいパスワード',
+'resetpass_header' => 'ã\82¢ã\82«ã\82¦ã\83³ã\83\88ã\81®ã\83\91ã\82¹ã\83¯ã\83¼ã\83\89ã\81®変更',
+'oldpassword' => '古いパスワード:',
+'newpassword' => '新しいパスワード:',
 'retypenew' => '新しいパスワードを再入力:',
 'resetpass_submit' => '再設定してログイン',
 'resetpass_success' => 'パスワードの変更に成功しました!
@@ -899,7 +900,7 @@ Cookieを有効にしていることを確認して、このページを再読
 'resetpass-submit-cancel' => '中止',
 'resetpass-wrong-oldpass' => '仮パスワードまたは現在のパスワードが正しくありません。
 パスワードを既に変更した、または新しい仮パスワードを依頼した可能性があります。',
-'resetpass-temp-password' => '仮パスワード',
+'resetpass-temp-password' => '仮パスワード:',
 
 # Special:PasswordReset
 'passwordreset' => 'パスワードの再設定',
@@ -907,11 +908,11 @@ Cookieを有効にしていることを確認して、このページを再読
 'passwordreset-legend' => 'パスワードの再設定',
 'passwordreset-disabled' => 'パスワードの再設定は、このウィキでは無効になっています。',
 'passwordreset-pretext' => '{{PLURAL:$1||下記のデータのいずれか 1 つを入力してください}}',
-'passwordreset-username' => '利用者名',
-'passwordreset-domain' => 'ドメイン',
+'passwordreset-username' => '利用者名:',
+'passwordreset-domain' => 'ドメイン:',
 'passwordreset-capture' => '送信されるメールの内容を表示しますか?',
 'passwordreset-capture-help' => 'このボックスにチェックを入れると、利用者に送信されるメールの内容(仮パスワードを含む)をあなたも閲覧できます。',
-'passwordreset-email' => 'メールアドレス',
+'passwordreset-email' => 'メールアドレス:',
 'passwordreset-emailtitle' => '{{SITENAME}}上のアカウントの詳細',
 'passwordreset-emailtext-ip' => 'どなたか(おそらくあなた、IP アドレス $1)が {{SITENAME}} ($4) での
 あなたのアカウントの詳細情報を送信するよう申請しました。
@@ -1075,7 +1076,7 @@ IP アドレスは複数の利用者で共有されている場合がありま
 'previewnote' => "'''これはプレビューです。'''
 変更箇所はまだ保存されていません!",
 'continue-editing' => '編集を続行',
-'previewconflict' => 'ã\81\93ã\81®ã\83\97ã\83¬ã\83\93ã\83¥ã\83¼ã\81¯ã\80\81ä¸\8aã\81®æ\96\87ç« ç·¨é\9b\86ã\82¨ã\83ªã\82¢ã\81®æ\96\87ç« ã\82\92ä¿\9då­\98ã\81\97ã\81\9få ´å\90\88ã\81«ã\81©ã\81\86è¦\8bã\81\88ã\82\8bã\82\88ã\81\86ã\81«ã\81ªã\82\8bã\81\8bã\82\92示ã\81\99ã\82\82ã\81®です。',
+'previewconflict' => 'ã\81\93ã\82\8cã\81¯ã\80\81ä¸\8aã\81®ç·¨é\9b\86ã\82¨ã\83ªã\82¢ã\81®æ\96\87ç« ã\82\92ä¿\9då­\98ã\81\97ã\81\9få ´å\90\88ã\81«ã\81©ã\81\86表示ã\81\95ã\82\8cã\82\8bã\81\8bã\82\92示ã\81\99ã\83\97ã\83¬ã\83\93ã\83¥ã\83¼です。',
 'session_fail_preview' => "'''申し訳ありません!セッションデータが消失したため編集を処理できませんでした。'''
 もう一度やり直してください。
 それでも失敗する場合、[[Special:UserLogout|ログアウト]]してからログインし直してください。",
@@ -1146,7 +1147,7 @@ IP アドレスは複数の利用者で共有されている場合がありま
 'recreate-moveddeleted-warn' => "'''警告:以前削除されたページを再作成しようとしています。'''
 
 このページの編集を続行するのが適切かどうかご確認ください。
\8f\82è\80\83ã\81®ã\81\9fã\82\81以ä¸\8bã\81«ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\81®å\89\8aé\99¤ã\81¨ç§»å\8b\95ã\81®è¨\98é\8c²ã\82\92表示します:",
\8f\82è\80\83ã\81¾ã\81§ã\81«ã\80\81ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\81®å\89\8aé\99¤ã\81¨ç§»å\8b\95ã\81®è¨\98é\8c²ã\82\92以ä¸\8bã\81«示します:",
 'moveddeleted-notice' => 'このページは削除されています。
 参考のため、このページの削除と移動の記録を以下に表示します。',
 'log-fulllog' => '完全な記録を閲覧',
@@ -1229,8 +1230,8 @@ $3が示した理由:''$2''",
 
 # Revision deletion
 'rev-deleted-comment' => '(要約は除去されています)',
-'rev-deleted-user' => '(利用者名は除去されています)',
-'rev-deleted-event' => '(記録は除去されています)',
+'rev-deleted-user' => '(利用者名は除去されています)',
+'rev-deleted-event' => '(記録は除去されています)',
 'rev-deleted-user-contribs' => '[利用者名またはIPアドレスは除去されました - その編集は投稿記録で非表示にされています]',
 'rev-deleted-text-permission' => "この版は'''削除されています'''。
 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 削除記録]に詳細情報があるかもしれません。",
@@ -1329,7 +1330,7 @@ $1",
 現在操作できる追放とブロックの一覧については[[Special:BlockList|ブロックの一覧]]を参照してください。',
 
 # History merging
-'mergehistory' => 'ページ履歴の統合',
+'mergehistory' => 'ページ履歴の統合',
 'mergehistory-header' => 'このページでは、ある元ページの履歴を新しいページに統合できます。
 この変更を行ってもページの履歴の連続性が確実に保たれるようにしてください。',
 'mergehistory-box' => '2ページの過去の版を統合する:',
@@ -1450,7 +1451,7 @@ $1",
 # Preferences page
 'preferences' => '個人設定',
 'mypreferences' => '個人設定',
-'prefs-edits' => '編集回数',
+'prefs-edits' => '編集回数:',
 'prefsnologin' => 'ログインしていません',
 'prefsnologintext' => '個人設定を変更するためには<span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} ログイン]</span>する必要があります。',
 'changepassword' => 'パスワードの変更',
@@ -1464,11 +1465,11 @@ $1",
 'prefs-personal' => '利用者情報',
 'prefs-rc' => '最近の更新',
 'prefs-watchlist' => 'ウォッチリスト',
-'prefs-watchlist-days' => 'ウォッチリストの表示日数',
+'prefs-watchlist-days' => 'ウォッチリストの表示日数:',
 'prefs-watchlist-days-max' => '最大 $1 {{PLURAL:$1|日間}}',
-'prefs-watchlist-edits' => '拡張ウォッチリストの表示件数',
+'prefs-watchlist-edits' => '拡張ウォッチリストの表示件数:',
 'prefs-watchlist-edits-max' => '最大数:1000',
-'prefs-watchlist-token' => 'ウォッチリストのトークン',
+'prefs-watchlist-token' => 'ウォッチリストのトークン:',
 'prefs-misc' => 'その他',
 'prefs-resetpass' => 'パスワードの変更',
 'prefs-changeemail' => 'メールアドレスを変更',
@@ -1480,26 +1481,26 @@ $1",
 'restoreprefs' => '初期設定に戻す',
 'prefs-editing' => '編集',
 'prefs-edit-boxsize' => '編集ウィンドウのサイズ。',
-'rows' => '行数',
-'columns' => '列数',
+'rows' => '行数:',
+'columns' => '列数:',
 'searchresultshead' => '検索',
 'resultsperpage' => '1ページあたりの表示件数:',
 'stub-threshold' => '<a href="#" class="stub">スタブリンク</a>として表示する閾値 (バイト):',
 'stub-threshold-disabled' => '無効',
-'recentchangesdays' => '最近の更新に表示する日数',
-'recentchangesdays-max' => '(最大 $1 {{PLURAL:$1|日間}})',
-'recentchangescount' => '既定で表示する件数',
+'recentchangesdays' => '最近の更新に表示する日数:',
+'recentchangesdays-max' => '(最大 $1 {{PLURAL:$1|日|日間}})',
+'recentchangescount' => '既定で表示する件数:',
 'prefs-help-recentchangescount' => 'この設定は最近の更新、ページの履歴、および記録に適用されます。',
 'prefs-help-watchlist-token' => 'この欄に秘密鍵を入力すると、あなたのウォッチリストのRSSフィードが生成されます。
 この欄に入力されている鍵を知っている人は誰でもこのウォッチリストを閲覧できるようになるため、他人に分からない値を選んでください。
 乱数によって生成された次の値を使うこともできます:$1',
 'savedprefs' => '個人設定を保存しました。',
-'timezonelegend' => 'タイムゾーン',
-'localtime' => 'ローカルの時刻',
+'timezonelegend' => 'タイムゾーン:',
+'localtime' => 'ローカルの時刻:',
 'timezoneuseserverdefault' => 'ウィキの既定を使用 ($1)',
 'timezoneuseoffset' => 'その他(時差を指定)',
 'timezoneoffset' => '時差¹:',
-'servertime' => 'サーバーの時刻',
+'servertime' => 'サーバーの時刻:',
 'guesstimezone' => 'ブラウザーの設定から入力',
 'timezoneregion-africa' => 'アフリカ',
 'timezoneregion-america' => 'アメリカ',
@@ -1514,32 +1515,32 @@ $1",
 'allowemail' => '他の利用者からのメールを受け取る',
 'prefs-searchoptions' => '検索設定',
 'prefs-namespaces' => '名前空間',
-'defaultns' => 'または次の名前空間のみを検索:',
+'defaultns' => '指定した名前空間のみを検索:',
 'default' => '既定',
 'prefs-files' => 'ファイル',
 'prefs-custom-css' => 'カスタムCSS',
 'prefs-custom-js' => 'カスタムJS',
-'prefs-common-css-js' => '全外装に共通のCSSとJavaScript:',
+'prefs-common-css-js' => 'すべての外装に共通のCSSとJavaScript:',
 'prefs-reset-intro' => 'このページを使用すると、自分の個人設定をこのサイトの初期設定に戻せます。
 この操作は取り消せません。',
-'prefs-emailconfirm-label' => 'メール確認:',
+'prefs-emailconfirm-label' => 'メールアドレスの確認:',
 'prefs-textboxsize' => '編集画面の大きさ',
-'youremail' => 'メールアドレス',
-'username' => '利用者名',
-'uid' => '利用者ID:',
-'prefs-memberingroups' => '所属する{{PLURAL:$1|グループ}}:',
-'prefs-registration' => '登録日時',
-'yourrealname' => '本名',
-'yourlanguage' => '使用言語',
-'yourvariant' => 'コンテンツ言語変種',
+'youremail' => 'メールアドレス:',
+'username' => '利用者名:',
+'uid' => '利用者 ID:',
+'prefs-memberingroups' => '所属{{PLURAL:$1|グループ}}:',
+'prefs-registration' => '登録日時:',
+'yourrealname' => '本名:',
+'yourlanguage' => '使用言語:',
+'yourvariant' => 'コンテンツ言語変種:',
 'prefs-help-variant' => 'このウィキのコンテンツに表示に使用したい言語変種または正書法。',
-'yournick' => '新しい署名',
+'yournick' => '新しい署名:',
 'prefs-help-signature' => 'トークページ上での発言には「<nowiki>~~~~</nowiki>」と付けて署名すべきです。これは自分の署名に時刻印を付けたものに変換されます。',
 'badsig' => '署名用のソースが正しくありません。
 HTMLタグを見直してください。',
 'badsiglength' => '署名が長すぎます。
 $1 {{PLURAL:$1|文字}}以下である必要があります。',
-'yourgender' => '性別',
+'yourgender' => '性別:',
 'gender-unknown' => '未指定',
 'gender-male' => '男',
 'gender-female' => '女',
@@ -1624,31 +1625,31 @@ $1 {{PLURAL:$1|文字}}以下である必要があります。',
 'right-createtalk' => '議論ページを作成',
 'right-createaccount' => '新しい利用者アカウントを作成',
 'right-minoredit' => '細部の編集の印を付ける',
-'right-move' => 'ã\83\9aã\83¼ã\82¸ã\81®移動',
+'right-move' => 'ã\83\9aã\83¼ã\82¸ã\82\92移動',
 'right-move-subpages' => '下位ページを含めてページを移動',
 'right-move-rootuserpages' => '利用者ページ本体を移動',
-'right-movefile' => 'ã\83\95ã\82¡ã\82¤ã\83«ã\81®移動',
-'right-suppressredirect' => 'ã\83\9aã\83¼ã\82¸ã\81®ç§»å\8b\95ã\81®é\9a\9bã\81«å\85\83ã\81®ã\83\9aã\83¼ã\82¸å\90\8dã\81\8bã\82\89ã\81®ã\83ªã\83\80ã\82¤ã\83¬ã\82¯ã\83\88ã\82\92ä½\9cæ\88\90ã\81\97ã\81ªã\81\84',
+'right-movefile' => 'ã\83\95ã\82¡ã\82¤ã\83«ã\82\92移動',
+'right-suppressredirect' => 'ã\83ªã\83\80ã\82¤ã\83¬ã\82¯ã\83\88ã\82\92æ®\8bã\81\95ã\81\9aã\81«ã\83\9aã\83¼ã\82¸ã\82\92移å\8b\95',
 'right-upload' => 'ファイルをアップロード',
 'right-reupload' => '既存のファイルに上書き',
 'right-reupload-own' => '自分自身がアップロードした既存のファイルに上書き',
-'right-reupload-shared' => 'å\85±æ\9c\89ã\83¡ã\83\87ã\82£ã\82¢ã\83ªã\83\9dã\82¸ã\83\88ã\83ªä¸\8aã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\81®ã\83­ã\83¼ã\82«ã\83«ã\81§ã\81®上書き',
-'right-upload_by_url' => 'URLからファイルをアップロード',
-'right-purge' => '確èª\8dã\82\92ç\9c\81ç\95¥ã\81\97ã\81¦サイトのキャッシュを破棄',
+'right-reupload-shared' => 'å\85±æ\9c\89ã\83¡ã\83\87ã\82£ã\82¢ã\83ªã\83\9dã\82¸ã\83\88ã\83ªä¸\8aã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\81«ã\83­ã\83¼ã\82«ã\83«ã\81§上書き',
+'right-upload_by_url' => 'URL からファイルをアップロード',
+'right-purge' => '確èª\8dã\81ªã\81\97ã\81§サイトのキャッシュを破棄',
 'right-autoconfirmed' => '半保護されたページを編集',
 'right-bot' => '自動処理と認識させる',
-'right-nominornewtalk' => 'è­°è«\96ã\83\9aã\83¼ã\82¸ã\81¸ç´°é\83¨ã\81®ç·¨é\9b\86ã\82\92ã\81\97ã\81\9fã\81¨ã\81\8dã\81«ã\80\81æ\96°ã\81\97ã\81\84ã\83¡ã\83\83ã\82»ã\83¼ã\82¸ã\81®ã\81\8aç\9f¥ã\82\89ã\81\9bã\82\92表示しない',
-'right-apihighlimits' => 'APIè¦\81æ±\82ã\81§ã\82\88ã\82\8aé«\98ã\81\84å\88¶é\99\90å\80¤ã\81®使用',
-'right-writeapi' => 'æ\9b¸ã\81\8dè¾¼ã\81¿APIã\81®使用',
-'right-delete' => 'ã\83\9aã\83¼ã\82¸ã\81®削除',
+'right-nominornewtalk' => 'è­°è«\96ã\83\9aã\83¼ã\82¸ã\81®ç´°é\83¨ã\81®ç·¨é\9b\86ã\82\92ã\81\97ã\81\9fé\9a\9bã\81«ã\80\81æ\96°ç\9d\80ã\83¡ã\83\83ã\82»ã\83¼ã\82¸ã\81¨ã\81\97ã\81¦é\80\9aç\9f¥しない',
+'right-apihighlimits' => 'APIè¦\81æ±\82ã\81§ã\82\88ã\82\8aé«\98ã\81\84å\88¶é\99\90å\80¤ã\82\92使用',
+'right-writeapi' => 'æ\9b¸ã\81\8dè¾¼ã\81¿APIã\82\92使用',
+'right-delete' => 'ã\83\9aã\83¼ã\82¸ã\82\92削除',
 'right-bigdelete' => '大きな履歴があるページを削除',
-'right-deletelogentry' => 'ç\89¹å®\9aã\81®è¨\98é\8c²é \85ç\9b®ã\81®å\89\8aé\99¤ã\81¨復帰',
-'right-deleterevision' => 'ã\83\9aã\83¼ã\82¸ã\81®ç\89¹å®\9aã\81®ç\89\88ã\81®å\89\8aé\99¤ã\81¨復帰',
+'right-deletelogentry' => 'ç\89¹å®\9aã\81®è¨\98é\8c²é \85ç\9b®ã\82\92å\89\8aé\99¤/復帰',
+'right-deleterevision' => 'ã\83\9aã\83¼ã\82¸ã\81®ç\89¹å®\9aã\81®ç\89\88ã\82\92å\89\8aé\99¤/復帰',
 'right-deletedhistory' => '削除された履歴項目(関連する本文を除く)を閲覧',
 'right-deletedtext' => '削除された本文と削除された版間の差分を閲覧',
 'right-browsearchive' => '削除されたページを検索',
-'right-undelete' => 'ã\83\9aã\83¼ã\82¸ã\81®復帰',
-'right-suppressrevision' => '管ç\90\86è\80\85ã\81\8bã\82\89é\9a ã\81\95ã\82\8cã\81\9fç\89\88ã\81®ç¢ºèª\8dã\81¨復元',
+'right-undelete' => 'ã\83\9aã\83¼ã\82¸ã\82\92復帰',
+'right-suppressrevision' => '管ç\90\86è\80\85ã\81\8bã\82\89é\9a ã\81\95ã\82\8cã\81\9fç\89\88ã\82\92確èª\8d/復元',
 'right-suppressionlog' => '非公開記録を閲覧',
 'right-block' => '他の利用者の編集をブロック',
 'right-blockemail' => '利用者のメール送信をブロック',
@@ -1659,22 +1660,22 @@ $1 {{PLURAL:$1|文字}}以下である必要があります。',
 'right-protect' => '保護レベルを変更し、保護されたページを編集',
 'right-editprotected' => '保護ページ(カスケード保護を除く)を編集',
 'right-editinterface' => 'ユーザーインターフェイスを編集',
-'right-editusercssjs' => 'ä»\96ã\81®å\88©ç\94¨è\80\85ã\81®CSSã\81¨JavaScriptファイルを編集',
+'right-editusercssjs' => 'ä»\96ã\81®å\88©ç\94¨è\80\85ã\81®CSSã\83\95ã\82¡ã\82¤ã\83«/JavaScriptファイルを編集',
 'right-editusercss' => '他の利用者のCSSファイルを編集',
 'right-edituserjs' => '他の利用者のJavaScriptファイルを編集',
 'right-rollback' => '特定ページを最後に編集した利用者の編集を即時巻き戻し',
 'right-markbotedits' => '巻き戻しをボットの編集として扱う',
 'right-noratelimit' => '速度制限を受けない',
-'right-import' => 'ä»\96ã\81®ã\82¦ã\82£ã\82­ã\81\8bã\82\89ã\81®ã\83\9aã\83¼ã\82¸取り込み',
-'right-importupload' => 'ã\83\95ã\82¡ã\82¤ã\83«ã\82¢ã\83\83ã\83\97ã\83­ã\83¼ã\83\89ã\81«ã\82\88ã\82\8bã\83\9aã\83¼ã\82¸取り込み',
+'right-import' => 'ä»\96ã\81®ã\82¦ã\82£ã\82­ã\81\8bã\82\89ã\83\9aã\83¼ã\82¸ã\82\92取り込み',
+'right-importupload' => 'ã\83\95ã\82¡ã\82¤ã\83«ã\82¢ã\83\83ã\83\97ã\83­ã\83¼ã\83\89ã\81§ã\83\9aã\83¼ã\82¸ã\82\92取り込み',
 'right-patrol' => '他人の編集を巡回済みにする',
 'right-autopatrol' => '自分の編集を自動的に巡回済みにする',
 'right-patrolmarks' => '最近の更新で巡回済み印を閲覧',
 'right-unwatchedpages' => 'ウォッチされていないページ一覧を閲覧',
-'right-mergehistory' => 'ページ履歴の統合',
+'right-mergehistory' => 'ページの履歴を統合',
 'right-userrights' => '全利用者権限を編集',
 'right-userrights-interwiki' => '他のウィキの利用者の利用者権限を編集',
-'right-siteadmin' => 'ã\83\87ã\83¼ã\82¿ã\83\99ã\83¼ã\82¹ã\81®ロックおよびロック解除',
+'right-siteadmin' => 'ã\83\87ã\83¼ã\82¿ã\83\99ã\83¼ã\82¹ã\82\92ロックおよびロック解除',
 'right-override-export-depth' => 'リンク先ページを5階層まで含めて書き出す',
 'right-sendemail' => '他の利用者にメールを送信',
 'right-passwordreset' => 'パスワード再設定メールを閲覧',
@@ -1682,46 +1683,46 @@ $1 {{PLURAL:$1|文字}}以下である必要があります。',
 # User rights log
 'rightslog' => '利用者権限変更記録',
 'rightslogtext' => '以下は利用者権限の変更記録です。',
-'rightslogentry' => '$1の所属グループを$2から$3へ変更しました',
-'rightslogentry-autopromote' => '$2 から $3 に自動的に昇格',
+'rightslogentry' => '$1の所属グループを $2 から $3 に変更しました',
+'rightslogentry-autopromote' => '$2 から $3 に自動的に昇格しました',
 'rightsnone' => '(なし)',
 
 # Associated actions - in the sentence "You do not have permission to X"
-'action-read' => 'ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\82\92閲覧',
-'action-edit' => 'ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\82\92編集',
-'action-createpage' => 'ã\83\9aã\83¼ã\82¸ã\82\92作成',
-'action-createtalk' => 'トークページを作成',
-'action-createaccount' => 'ã\81\93ã\81®å\88©ç\94¨è\80\85ã\82¢ã\82«ã\82¦ã\83³ã\83\88ã\82\92作成',
+'action-read' => 'ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\81®閲覧',
+'action-edit' => 'ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\81®編集',
+'action-createpage' => 'ã\83\9aã\83¼ã\82¸ã\81®作成',
+'action-createtalk' => '議論ページの作成',
+'action-createaccount' => 'ã\81\93ã\81®å\88©ç\94¨è\80\85ã\82¢ã\82«ã\82¦ã\83³ã\83\88ã\81®作成',
 'action-minoredit' => '細部の編集の印を付ける',
 'action-move' => 'このページの移動',
-'action-move-subpages' => 'このページと下位ページの移動',
+'action-move-subpages' => 'このページとその下位ページの移動',
 'action-move-rootuserpages' => '利用者ページ本体の移動',
 'action-movefile' => 'このファイルの移動',
-'action-upload' => 'ã\81\93ã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\82\92アップロード',
-'action-reupload' => 'ã\81\93ã\81®æ\97¢å­\98ã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\81«上書き',
-'action-reupload-shared' => 'å\85±æ\9c\89ã\83ªã\83\9dã\82¸ã\83\88ã\83ªã\81«ã\81\82ã\82\8bã\81\93ã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\81«上書き',
-'action-upload_by_url' => 'URLからこのファイルをアップロード',
-'action-writeapi' => 'æ\9b¸ã\81\8dè¾¼ã\81¿APIã\82\92使用',
-'action-delete' => 'ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\82\92削除',
-'action-deleterevision' => 'ã\81\93ã\81®ç\89\88ã\82\92削除',
-'action-deletedhistory' => 'ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\81®å\89\8aé\99¤å±¥æ­´ã\82\92表示',
+'action-upload' => 'ã\81\93ã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\81®アップロード',
+'action-reupload' => 'ã\81\93ã\81®æ\97¢å­\98ã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\81¸ã\81®上書き',
+'action-reupload-shared' => 'å\85±æ\9c\89ã\83ªã\83\9dã\82¸ã\83\88ã\83ªã\81«ã\81\82ã\82\8bã\81\93ã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\81¸ã\81®上書き',
+'action-upload_by_url' => 'URL からのこのファイルのアップロード',
+'action-writeapi' => 'æ\9b¸ã\81\8dè¾¼ã\81¿APIã\81®使用',
+'action-delete' => 'ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\81®削除',
+'action-deleterevision' => 'ã\81\93ã\81®ç\89\88ã\81®削除',
+'action-deletedhistory' => 'ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\81®å\89\8aé\99¤å±¥æ­´ã\81®é\96²è¦§',
 'action-browsearchive' => '削除されたページの検索',
-'action-undelete' => 'ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\82\92復帰',
+'action-undelete' => 'ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\81®復帰',
 'action-suppressrevision' => '隠された版の確認と復元',
-'action-suppressionlog' => 'この非公開記録の表示',
-'action-block' => 'ã\81\93ã\81®å\88©ç\94¨è\80\85ã\81®ç·¨é\9b\86ã\82\92ã\83\96ã\83­ã\83\83ã\82¯',
-'action-protect' => 'ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\81®ä¿\9dè­·ã\83¬ã\83\99ã\83«ã\82\92変更',
-'action-rollback' => 'ç\89¹å®\9aã\83\9aã\83¼ã\82¸ã\82\92æ\9c\80å¾\8cã\81«ç·¨é\9b\86ã\81\97ã\81\9få\88©ç\94¨è\80\85ã\81®ç·¨é\9b\86ã\82\92即時巻き戻し',
-'action-import' => 'このページを他のウィキから取り込む',
-'action-importupload' => 'ã\83\95ã\82¡ã\82¤ã\83«ã\82¢ã\83\83ã\83\97ã\83­ã\83¼ã\83\89ã\81§ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\81«å\8f\96ã\82\8aè¾¼ã\82\80',
+'action-suppressionlog' => 'この非公開記録の閲覧',
+'action-block' => 'この利用者の編集ブロック',
+'action-protect' => 'ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\81®ä¿\9dè­·ã\83¬ã\83\99ã\83«ã\81®変更',
+'action-rollback' => 'ç\89¹å®\9aã\83\9aã\83¼ã\82¸ã\82\92æ\9c\80å¾\8cã\81«ç·¨é\9b\86ã\81\97ã\81\9få\88©ç\94¨è\80\85ã\81®ç·¨é\9b\86ã\81®即時巻き戻し',
+'action-import' => '他のウィキからのこのページの取り込み',
+'action-importupload' => 'ã\83\95ã\82¡ã\82¤ã\83«ã\82¢ã\83\83ã\83\97ã\83­ã\83¼ã\83\89ã\81§ã\81®ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\81¸ã\81®å\8f\96ã\82\8aè¾¼ã\81¿',
 'action-patrol' => '他の利用者の編集を巡回済みにする',
 'action-autopatrol' => '自分の編集を巡回済みにする',
-'action-unwatchedpages' => 'ã\82¦ã\82©ã\83\83ã\83\81ã\81\95ã\82\8cã\81¦ã\81\84ã\81ªã\81\84ã\83\9aã\83¼ã\82¸ä¸\80覧ã\82\92表示',
-'action-mergehistory' => 'ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\81®å±¥æ­´ã\82\92統合',
-'action-userrights' => '全利用者権限の変更',
-'action-userrights-interwiki' => '他のウィキの利用者の利用者権限変更',
-'action-siteadmin' => 'ã\83\87ã\83¼ã\82¿ã\83\99ã\83¼ã\82¹ã\82\92ロックまたはロック解除',
-'action-sendemail' => 'ã\83¡ã\83¼ã\83«ã\82\92送信',
+'action-unwatchedpages' => 'ã\82¦ã\82©ã\83\83ã\83\81ã\81\95ã\82\8cã\81¦ã\81\84ã\81ªã\81\84ã\83\9aã\83¼ã\82¸ä¸\80覧ã\81®é\96²è¦§',
+'action-mergehistory' => 'ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\81®å±¥æ­´ã\81®統合',
+'action-userrights' => '全利用者権限の編集',
+'action-userrights-interwiki' => '他のウィキの利用者の利用者権限変更',
+'action-siteadmin' => 'ã\83\87ã\83¼ã\82¿ã\83\99ã\83¼ã\82¹ã\81®ロックまたはロック解除',
+'action-sendemail' => 'ã\83¡ã\83¼ã\83«ã\81®送信',
 
 # Recent changes
 'nchanges' => '$1 {{PLURAL:$1|回の変更}}',
@@ -1766,10 +1767,10 @@ $1 {{PLURAL:$1|文字}}以下である必要があります。',
 'recentchangeslinked-toolbox' => '関連ページの更新状況',
 'recentchangeslinked-title' => '「$1」と関連する変更',
 'recentchangeslinked-noresult' => '指定期間中に指定ページのリンク先に変更はありませんでした。',
-'recentchangeslinked-summary' => "これはã\80\81æ\8c\87å®\9aã\81\97ã\81\9fã\83\9aã\83¼ã\82¸ã\81\8bã\82\89ã\83ªã\83³ã\82¯ã\81\95ã\82\8cã\81¦ã\81\84ã\82\8bï¼\88ã\81¾ã\81\9fã\81¯æ\8c\87å®\9aã\81\97ã\81\9fã\82«ã\83\86ã\82´ã\83ªã\81«å\90«ã\81¾ã\82\8cã\81¦ã\81\84ã\82\8bï¼\89ã\83\9aã\83¼ã\82¸ã\81¸ã\81®æ\9c\80è¿\91ã\81®å¤\89æ\9b´ã\81®ä¸\80覧ã\81§ã\81\99ã\80\82
-[[Special:Watchlist|è\87ªå\88\86ã\81®ã\82¦ã\82©ã\83\83ã\83\81ã\83ªã\82¹ã\83\88]]ã\81«ã\81\82ã\82\8bã\83\9aã\83¼ã\82¸ã\81¯'''太å­\97'''ã\81«ã\81ªã\82\8aます。",
+'recentchangeslinked-summary' => "これはæ\8c\87å®\9aã\81\97ã\81\9fã\83\9aã\83¼ã\82¸ã\81\8bã\82\89ã\83ªã\83³ã\82¯ã\81\95ã\82\8cã\81¦ã\81\84ã\82\8bï¼\88ã\81¾ã\81\9fã\81¯æ\8c\87å®\9aã\81\97ã\81\9fã\82«ã\83\86ã\82´ã\83ªã\81«å\90«ã\81¾ã\82\8cã\81¦ã\81\84ã\82\8bï¼\89ã\83\9aã\83¼ã\82¸ã\81®æ\9c\80è¿\91ã\81®å¤\89æ\9b´ã\81®ä¸\80覧ã\81§ã\81\99ã\80\82
+[[Special:Watchlist|è\87ªå\88\86ã\81®ã\82¦ã\82©ã\83\83ã\83\81ã\83ªã\82¹ã\83\88]]ã\81«ã\81\82ã\82\8bã\83\9aã\83¼ã\82¸ã\81¯'''太å­\97'''ã\81§è¡¨ç¤ºã\81\95ã\82\8cます。",
 'recentchangeslinked-page' => 'ページ名:',
-'recentchangeslinked-to' => '代わりに、指定したページへのリンク元での変更を表示',
+'recentchangeslinked-to' => '指定したページの「リンク元」ページの変更を表示',
 
 # Upload
 'upload' => 'ファイルをアップロード',
@@ -1791,19 +1792,19 @@ $1 {{PLURAL:$1|文字}}以下である必要があります。',
 * '''<code><nowiki>[[</nowiki>{{ns:file}}:<nowiki>File.jpg]]</nowiki></code>'''とすると、ファイルが完全なままで使用されます
 * '''<code><nowiki>[[</nowiki>{{ns:file}}:<nowiki>File.png|200px|thumb|left|代替文]]</nowiki></code>'''とすると、200ピクセルの幅に修正された状態で、左寄せの枠内に、「代替文」が説明として使用されます。
 * '''<code><nowiki>[[</nowiki>{{ns:media}}:<nowiki>File.ogg]]</nowiki></code>'''とするとファイルを表示せずに直接ファイルへリンクします",
-'upload-permitted' => '許可されているファイル形式$1。',
-'upload-preferred' => '推奨されているファイル形式$1。',
-'upload-prohibited' => '禁止されているファイル形式$1。',
+'upload-permitted' => '許可されているファイル形式$1。',
+'upload-preferred' => '推奨されているファイル形式$1。',
+'upload-prohibited' => '禁止されているファイル形式$1。',
 'uploadlog' => 'アップロード記録',
 'uploadlogpage' => 'アップロード記録',
 'uploadlogpagetext' => '以下はファイルアップロードの最近の記録です。
 画像付きで見るには[[Special:NewFiles|新規ファイルの一覧]]をご覧ください。',
 'filename' => 'ファイル名',
 'filedesc' => '概要',
-'fileuploadsummary' => '概要',
-'filereuploadsummary' => 'ファイルの変更',
-'filestatus' => '著作権情報',
-'filesource' => '出典',
+'fileuploadsummary' => '概要:',
+'filereuploadsummary' => 'ファイルの変更:',
+'filestatus' => '著作権情報:',
+'filesource' => '出典:',
 'uploadedfiles' => 'アップロードされたファイル',
 'ignorewarning' => '警告を無視してファイルを保存',
 'ignorewarnings' => '警告を無視',
@@ -1881,11 +1882,11 @@ file_uploadsの設定を確認してください。',
 'uploadjava' => 'このファイルは、Javaの.classファイルを含むZIPファイルです。
 セキュリティの制限を回避されるおそれがあるため、Javaファイルのアップロードは許可されていません。',
 'upload-source' => 'アップロード元ファイル',
-'sourcefilename' => 'アップロード元のファイル名',
-'sourceurl' => 'アップロード元のURL:',
-'destfilename' => '登録するファイル名',
-'upload-maxfilesize' => 'ファイルの最大サイズ$1',
-'upload-description' => 'ファイル説明',
+'sourcefilename' => 'アップロード元のファイル名:',
+'sourceurl' => 'アップロード元の URL:',
+'destfilename' => '登録するファイル名:',
+'upload-maxfilesize' => 'ファイルの最大サイズ$1',
+'upload-description' => 'ファイル説明',
 'upload-options' => 'アップロードのオプション',
 'watchthisupload' => 'このファイルをウォッチ',
 'filewasdeleted' => 'この名前のファイルは一度アップロードされ、その後削除されています。
@@ -2025,7 +2026,7 @@ URLが正しいものであり、ウェブサイトが稼働していること
 ウェブサイトが現在稼働していることを確認し、しばらく待ってからもう一度お試しください。
 混雑していない時間帯に試すことをおすすめします。',
 
-'license' => 'ライセンス',
+'license' => 'ライセンス:',
 'license-header' => 'ライセンス',
 'nolicense' => '選択なし',
 'license-nopreview' => '(プレビューはありません)',
@@ -2088,6 +2089,7 @@ $1での[$2 ファイル解説ページ]にある説明を編集したほうが
 'shared-repo' => '共有リポジトリ',
 'shared-repo-name-wikimediacommons' => 'ウィキメディア・コモンズ',
 'filepage.css' => '/* ここに記述したCSSはファイル解説ページにて読み込まれます。また外部のクライアントウィキにも影響します */',
+'upload-disallowed-here' => '残念ながらこの画像には上書きできません。',
 
 # File reversion
 'filerevert' => '$1を差し戻す',
@@ -2169,9 +2171,9 @@ contenttype/subtypeの形式で入力してください(例:<code>image/jpeg
 
 'disambiguations' => '曖昧さ回避ページにリンクしているページ',
 'disambiguationspage' => 'Template:曖昧回避',
-'disambiguations-text' => "以下のページには、'''曖昧さ回避ページ'''へのリンクが1個以上あります。
\81\9dã\81®ã\82\88ã\81\86ã\81ªリンクは、より適切なページへのリンクに変更する必要があります。<br />
-[[MediaWiki:Disambiguationspage]]からリンクされたテンプレートを使用しているページが、曖昧さ回避ページと見なされます。",
+'disambiguations-text' => "以下のページには'''曖昧さ回避ページ'''へのリンクが 1 個以上あります。
\81\93ã\82\8cã\82\89ã\81®リンクは、より適切なページへのリンクに変更する必要があります。<br />
+[[MediaWiki:Disambiguationspage]] にリンクがあるテンプレートを使用しているページを、曖昧さ回避ページと見なします。",
 
 'doubleredirects' => '二重転送',
 'doubleredirectstext' => 'これは他のリダイレクトページへのリダイレクトの一覧です。
@@ -2267,6 +2269,7 @@ contenttype/subtypeの形式で入力してください(例:<code>image/jpeg
 # Book sources
 'booksources' => '書籍情報源',
 'booksources-search-legend' => '書籍情報源を検索',
+'booksources-isbn' => 'ISBN:',
 'booksources-go' => '検索',
 'booksources-text' => 'お探しの書籍の新品/中古品を販売している外部サイトへのリンクを以下に列挙します。この書籍についてさらに詳しい情報があるかもしれません:',
 'booksources-invalid-isbn' => '指定したISBN番号は有効ではないようです。情報源から写し間違えていないか確認してください。',
@@ -2323,7 +2326,7 @@ contenttype/subtypeの形式で入力してください(例:<code>image/jpeg
 # Special:LinkSearch
 'linksearch' => '外部リンクの検索',
 'linksearch-pat' => '検索パターン:',
-'linksearch-ns' => '名前空間',
+'linksearch-ns' => '名前空間:',
 'linksearch-ok' => '検索',
 'linksearch-text' => '"*.wikipedia.org" のようにワイルドカードを使用できます。
 少なくとも "*.org" のようなトップレベルドメインが必要です。<br />
@@ -2360,6 +2363,8 @@ contenttype/subtypeの形式で入力してください(例:<code>image/jpeg
 'listgrouprights-rights' => '権限',
 'listgrouprights-helppage' => 'Help:グループ権限',
 'listgrouprights-members' => '(該当者一覧)',
+'listgrouprights-right-display' => '<span class="listgrouprights-granted">$1 (<code>$2</code>)</span>',
+'listgrouprights-right-revoked' => '<span class="listgrouprights-revoked">$1 (<code>$2</code>)</span>',
 'listgrouprights-addgroup' => '{{PLURAL:$2|グループ}}を追加:$1',
 'listgrouprights-removegroup' => '{{PLURAL:$2|グループ}}を除去:$1',
 'listgrouprights-addgroup-all' => '全グループを追加可能',
@@ -2664,7 +2669,7 @@ $1',
 'undelete-show-file-submit' => 'はい',
 
 # Namespace form on various pages
-'namespace' => '名前空間',
+'namespace' => '名前空間:',
 'invert' => '選択したものを除く',
 'tooltip-invert' => '選択した名前空間(チェックされている場合は、関連付けられた名前空間も)のページの変更を非表示にするには、このボックスにチェックを入れる',
 'namespace_association' => '対応付けられた名前空間',
@@ -2840,6 +2845,7 @@ $1のブロックの理由は「''$2''」です。",
 'proxyblockreason' => 'ご使用中のIPアドレスは公開プロキシであるため投稿ブロックされています。
 使用中のインターネットサービスプロバイダー、または所属組織の技術担当者に連絡して、これが深刻なセキュリティ問題であることを伝えてください。',
 'proxyblocksuccess' => '完了。',
+'sorbs' => 'DNSBL',
 'sorbsreason' => 'ご使用中のIPアドレスが、{{SITENAME}}の使用しているDNSBLに公開プロキシとして記載されています。',
 'sorbs_create_account_reason' => 'ご使用中のIPアドレスが、{{SITENAME}}の使用しているDNSBLに公開プロキシとして記載されています。
 アカウント作成はできません',
@@ -2922,8 +2928,8 @@ hideuser権限を持っていないため、この利用者のブロックを閲
 手動で統合してください。'''",
 'movedto' => '移動先:',
 'movetalk' => '付随するトークページも移動',
-'move-subpages' => '下位ページも移動($1ページまで)',
-'move-talk-subpages' => 'トークページの下位ページも移動($1まで)',
+'move-subpages' => '下位ページも移動($1 件まで)',
+'move-talk-subpages' => 'トークページの下位ページも移動($1 件まで)',
 'movepage-page-exists' => 'ページ「$1」は既に存在するため、自動的な上書きはできませんでした。',
 'movepage-page-moved' => 'ページ「$1」は「$2」に移動しました。',
 'movepage-page-unmoved' => 'ページ「$1」は「$2」に移動できませんでした。',
@@ -2931,7 +2937,7 @@ hideuser権限を持っていないため、この利用者のブロックを閲
 'movelogpage' => '移動記録',
 'movelogpagetext' => '以下はすべてのページ移動の一覧です。',
 'movesubpage' => '{{PLURAL:$1|下位ページ}}',
-'movesubpagetext' => 'このページには{{PLURAL:$1|下位ページ}}が以下の $1 件あります。',
+'movesubpagetext' => 'このページには、以下の $1 {{PLURAL:$1|下位ページ}}があります。',
 'movenosubpage' => 'このページに下位ページはありません。',
 'movereason' => '理由:',
 'revertmove' => '差し戻し',
@@ -2994,12 +3000,12 @@ hideuser権限を持っていないため、この利用者のブロックを閲
 MediaWiki 全般のローカライズ(地域化)に貢献したい場合は、[//www.mediawiki.org/wiki/Localisation/ja MediaWiki のローカライズ] や [//translatewiki.net?setlang=ja translatewiki.net] をご覧ください。',
 'allmessagesnotsupportedDB' => "'''\$wgUseDatabaseMessages'''が無効のため、このページを使用できません。",
 'allmessages-filter-legend' => '絞り込み',
-'allmessages-filter' => '変更状態により絞り込む',
+'allmessages-filter' => '変更状態により絞り込む:',
 'allmessages-filter-unmodified' => '変更なし',
 'allmessages-filter-all' => 'すべて',
 'allmessages-filter-modified' => '変更あり',
-'allmessages-prefix' => '名前の先頭部分で絞り込む',
-'allmessages-language' => '言語',
+'allmessages-prefix' => '名前の先頭部分で絞り込む:',
+'allmessages-language' => '言語:',
 'allmessages-filter-submit' => '表示',
 
 # Thumbnails
@@ -3152,13 +3158,13 @@ MediaWiki 全般のローカライズ(地域化)に貢献したい場合は
 'tooltip-watchlistedit-raw-submit' => 'ウォッチリストを更新する',
 'tooltip-recreate' => '削除されていても、ページを再作成する',
 'tooltip-upload' => 'アップロードを開始する',
-'tooltip-rollback' => '「巻き戻し」はã\80\81æ\9c\80å¾\8cã\81«ç·¨é\9b\86ã\81\97ã\81\9f人ã\81«ã\82\88ã\82\8bã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\81¸ã\81®è¤\87æ\95°ã\81®ç·¨é\9b\86ã\82\92\82¯ã\83ªã\83\83ã\82¯ã\81§å·®ã\81\97æ\88»ã\81\97ã\81¾ã\81\99',
-'tooltip-undo' => '「取り消し」はこの編集を差し戻し、編集画面をプレビューを付けて開きます。要約欄に取り消しの理由を追加できます。',
+'tooltip-rollback' => '「巻き戻し」はæ\9c\80å¾\8cã\81®ç·¨é\9b\86è\80\85ã\81«ã\82\88ã\82\8bã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\81®è¤\87æ\95°ã\81®ç·¨é\9b\86ã\82\92\82¯ã\83ªã\83\83ã\82¯ã\81§å·®ã\81\97æ\88»ã\81\97ã\81¾ã\81\99',
+'tooltip-undo' => '「取り消し」はこの編集を差し戻し、編集画面をプレビュー付きで開きます。要約欄に理由を追加できます。',
 'tooltip-preferences-save' => '設定を保存する',
 'tooltip-summary' => '短い要約を入力してください',
 
 # Stylesheets
-'common.css' => '/* ここに書いたCSSはすべての外装に反映されます */',
+'common.css' => '/* ここに記述したCSSはすべての外装に反映されます */',
 'standard.css' => '/* ここに記述したCSSはスタンダード外装の利用者に影響します */',
 'nostalgia.css' => '/* ここに記述したCSSはノスタルジア外装の利用者に影響します */',
 'cologneblue.css' => '/* ここに記述したCSSはケルンブルー外装の利用者に影響します */',
@@ -3188,9 +3194,9 @@ MediaWiki 全般のローカライズ(地域化)に貢献したい場合は
 'modern.js' => '/* ここにあるすべてのJavaScriptは、モダン外装を使用している利用者に対して読み込まれます */',
 'vector.js' => '/* ここにあるすべてのJavaScriptは、ベクター外装を使用している利用者に対して読み込まれます */',
 'group-autoconfirmed.js' => '/* ここにあるすべてのJavaScriptは、自動承認された利用者に対して読み込まれます */',
-'group-bot.js' => '/* ここにあるすべてのJavaScriptは、ボットのみに対して読み込まれます */',
-'group-sysop.js' => '/* ここにあるすべてのJavaScriptは、管理者のみに対して読み込まれます */',
-'group-bureaucrat.js' => '/* ここにあるすべてのJavaScriptは、ビューロクラットのみに対して読み込まれます */',
+'group-bot.js' => '/* ここにあるすべてのJavaScriptは、ボットのみに読み込まれます */',
+'group-sysop.js' => '/* ここにあるすべてのJavaScriptは、管理者のみに読み込まれます */',
+'group-bureaucrat.js' => '/* ここにあるすべてのJavaScriptは、ビューロクラットのみに読み込まれます */',
 
 # Metadata
 'notacceptable' => 'ウィキサーバーは、ご使用中のクライアントが読める形式では情報を提供できません。',
@@ -3223,9 +3229,13 @@ MediaWiki 全般のローカライズ(地域化)に貢献したい場合は
 'pageinfo-header-edits' => '編集履歴',
 'pageinfo-header-restrictions' => 'ページの保護',
 'pageinfo-header-properties' => 'ページのプロパティ',
+'pageinfo-display-title' => '表示されるページ名',
 'pageinfo-default-sort' => '既定のソートキー',
 'pageinfo-length' => 'ページの長さ (バイト単位)',
 'pageinfo-article-id' => 'ページ ID',
+'pageinfo-robot-policy' => '検索エンジンの状態',
+'pageinfo-robot-index' => 'インデックス可能',
+'pageinfo-robot-noindex' => 'インデックス不可',
 'pageinfo-views' => '閲覧回数',
 'pageinfo-watchers' => 'ページをウォッチリストに入れている人数',
 'pageinfo-redirects-name' => 'このページへのリダイレクト',
@@ -3238,8 +3248,10 @@ MediaWiki 全般のローカライズ(地域化)に貢献したい場合は
 'pageinfo-edits' => '総編集回数',
 'pageinfo-authors' => '総投稿者数',
 'pageinfo-recent-edits' => '最近の編集回数 (過去 $1)',
+'pageinfo-restriction' => 'ページ保護 (<code>{{lcfirst:$1}}</code>)',
 'pageinfo-magic-words' => 'マジック {{PLURAL:$1|ワード}} ($1)',
 'pageinfo-hidden-categories' => '隠し{{PLURAL:$1|カテゴリ}} ($1)',
+'pageinfo-templates' => '参照読み込みされた{{PLURAL:$1|テンプレート}} ($1)',
 
 # Skin names
 'skinname-standard' => 'クラシック',
@@ -3294,7 +3306,8 @@ $1',
 'file-info-size' => '$1 × $2 ピクセル、ファイルサイズ:$3、MIMEタイプ:$4',
 'file-info-size-pages' => '$1 × $2 ピクセル、ファイルサイズ:$3、MIMEタイプ:$4、$5 {{PLURAL:$5|ページ}}',
 'file-nohires' => '高解像度版はありません。',
-'svg-long-desc' => 'SVG ファイル、$1 × $2 ピクセル、ファイルサイズ:$3',
+'svg-long-desc' => 'SVG ファイル、$1 × $2 ピクセル、ファイルサイズ: $3',
+'svg-long-desc-animated' => 'アニメーション SVG ファイル、$1 × $2 ピクセル、ファイルサイズ: $3',
 'show-big-image' => '高解像度での画像',
 'show-big-image-preview' => 'このプレビューのサイズ:$1。',
 'show-big-image-other' => 'その他の{{PLURAL:$2|解像度}}:$1。',
@@ -3304,6 +3317,8 @@ $1',
 'file-info-png-looped' => '繰り返し',
 'file-info-png-repeat' => '$1 {{PLURAL:$1|回再生しました}}',
 'file-info-png-frames' => '$1 {{PLURAL:$1|フレーム}}',
+'file-no-thumb-animation' => "'''注意: 技術的な制限により、このファイルのサムネイルはアニメーションされません。'''",
+'file-no-thumb-animation-gif' => "'''注意: 技術的な制限により、この画像のような高解像度の GIF 画像の、サムネイルはアニメーションされません。'''",
 
 # Special:NewFiles
 'newimages' => '新しいファイルのギャラリー',
@@ -3382,6 +3397,11 @@ Variants for Chinese language
 'variantname-ike-latn' => 'イヌクティトゥット語 (ラテン文字)',
 'variantname-iu' => 'イヌクティトゥット語',
 
+# Variants for Tachelhit language
+'variantname-shi-tfng' => 'シルハ語 (ティフィナグ文字)',
+'variantname-shi-latn' => 'シルハ語 (ラテン文字)',
+'variantname-shi' => 'シルハ語',
+
 # Metadata
 'metadata' => 'メタデータ',
 'metadata-help' => 'このファイルには、追加情報があります(おそらく、作成やデジタル化する際に使用したデジタルカメラやスキャナーが追加したものです)。
@@ -3807,10 +3827,10 @@ Variants for Chinese language
 # E-mail address confirmation
 'confirmemail' => 'メールアドレスの確認',
 'confirmemail_noemail' => '[[Special:Preferences|個人設定]]で有効なメールアドレスが指定されていません。',
-'confirmemail_text' => '{{SITENAME}}では、メール機能を利用する前にメールアドレスの確認が必要です。
-以ä¸\8bã\81®ã\83\9cã\82¿ã\83³ã\82\92æ\8a¼ã\81\99ã\81¨ã\83¡ã\83¼ã\83«ã\82¢ã\83\89ã\83¬ã\82¹ã\81«ç¢ºèª\8dã\83¡ã\83¼ã\83«ã\81\8cé\80\81ã\82\89ã\82\8cます。
\83¡ã\83¼ã\83«ã\81«ã\81¯ç¢ºèª\8dç\94¨ã\82³ã\83¼ã\83\89ã\82\92å\90«ã\82\80ã\83ªã\83³ã\82¯ã\81\8cæ\9b¸ã\81\8bã\82\8cã\81¦ã\81\84ます。
\81\9dã\81®ã\83ªã\83³ã\82¯ã\82\92ã\83\96ã\83©ã\82¦ã\82¶ã\83¼ã\81§èª­ã\81¿è¾¼ã\82\93ã\81§ã\80\81ã\83¡ã\83¼ã\83«ã\82¢ã\83\89ã\83¬ã\82¹ã\81®æ­£å½\93æ\80§ã\82\92確èª\8dã\81\97てください。',
+'confirmemail_text' => '{{SITENAME}}では、メール機能を使用する前にメールアドレスの検証が必要です。
+以ä¸\8bã\81®ã\83\9cã\82¿ã\83³ã\82\92æ\8a¼ã\81\99ã\81¨ã\80\81ã\81\82ã\81ªã\81\9fã\81®ã\83¡ã\83¼ã\83«ã\82¢ã\83\89ã\83¬ã\82¹ã\81«ç¢ºèª\8dç\94¨ã\83¡ã\83¼ã\83«ã\82\92ã\81\8aé\80\81ã\82\8aã\81\97ます。
\81\9dã\81®ã\83¡ã\83¼ã\83«å\86\85ã\81«ã\80\81確èª\8dç\94¨ã\82³ã\83¼ã\83\89ã\82\92å\90«ã\82\80ã\83ªã\83³ã\82¯ã\81\8cã\81\82ã\82\8aます。
\83¡ã\83¼ã\83«ã\82¢ã\83\89ã\83¬ã\82¹ã\81\8cæ\9c\89å\8a¹ã\81§ã\81\82ã\82\8bã\81\93ã\81¨ã\82\92確èª\8dã\81\99ã\82\8bã\81\9fã\82\81ã\81«ã\80\81ã\81\9dã\81®ã\83ªã\83³ã\82¯ã\82\92ã\83\96ã\83©ã\82¦ã\82¶ã\83¼ã\81§é\96\8bã\81\84てください。',
 'confirmemail_pending' => '確認用コードをメールで既にお送りしました。
 アカウントを作成したばかりの場合は、メールが届くまでしばらくお待ちください。届かない場合は新しいコードを再度申請してください。',
 'confirmemail_send' => '確認用コードをメールで送信',
@@ -3838,7 +3858,7 @@ Variants for Chinese language
 $3
 
 もしアカウントの登録をした覚えがない場合は、
-次のURLをブラウザーで開いて、メール確認を中止してください:
+次のURLをブラウザーで開いて、メールアドレスの確認を中止してください:
 
 $5
 
@@ -3890,7 +3910,7 @@ $5
 # action=purge
 'confirm_purge_button' => 'OK',
 'confirm-purge-top' => 'このページのキャッシュを破棄しますか?',
-'confirm-purge-bottom' => 'ページをパージすると、キャッシュが破棄され、強制的に最新版が表示されます。',
+'confirm-purge-bottom' => 'ページをパージすると、キャッシュが破棄され、強制的に最新版が表示されます。',
 
 # action=watch/unwatch
 'confirm-watch-button' => 'OK',
@@ -3920,7 +3940,7 @@ $5
 'table_pager_first' => '最初のページ',
 'table_pager_last' => '最後のページ',
 'table_pager_limit' => '1ページに$1項目を表示',
-'table_pager_limit_label' => 'ページあたりの項目数',
+'table_pager_limit_label' => 'ページあたりの項目数:',
 'table_pager_limit_submit' => '実行',
 'table_pager_empty' => '結果なし',
 
index f9052f7..2308b5c 100644 (file)
@@ -88,8 +88,8 @@ $specialPageAliases = array(
        'Listgrouprights'           => array( 'ჯგუფის_უფლებათა_სია' ),
        'Listredirects'             => array( 'გადამისამართებების_სია' ),
        'Listusers'                 => array( 'მომხმარებელთა_სია' ),
-       'Lonelypages'               => array( 'ობოლიგვერდები' ),
-       'Longpages'                 => array( 'გრძელიგვერდები' ),
+       'Lonelypages'               => array( 'ობოლი_გვერდები' ),
+       'Longpages'                 => array( 'გრძელი_გვერდები' ),
        'Movepage'                  => array( 'გვერდის_გადატანა' ),
        'Mycontributions'           => array( 'ჩემი_წვლილი' ),
        'Mypage'                    => array( 'ჩემი_გვერდი' ),
@@ -101,10 +101,10 @@ $specialPageAliases = array(
        'Preferences'               => array( 'კონფიგურაცია' ),
        'Protectedpages'            => array( 'დაცული_გვერდები' ),
        'Protectedtitles'           => array( 'დაცული_სათაურები' ),
-       'Randompage'                => array( 'შემთხვევით', 'შემთხვევითიგვერდი' ),
+       'Randompage'                => array( 'შემთხვევით', 'შემთხვევითი_გვერდი' ),
        'Recentchanges'             => array( 'ბოლოცვლილებები' ),
        'Search'                    => array( 'ძიება' ),
-       'Shortpages'                => array( 'მოკლეგვერდები' ),
+       'Shortpages'                => array( 'მოკლე_გვერდები' ),
        'Specialpages'              => array( 'განსაკუთრებული_გვერდები' ),
        'Statistics'                => array( 'სტატისტიკა' ),
        'Unblock'                   => array( 'ბლოკის_მოხსნა' ),
@@ -113,36 +113,54 @@ $specialPageAliases = array(
        'Uncategorizedpages'        => array( 'უკატეგორიო_გვერდები' ),
        'Uncategorizedtemplates'    => array( 'უკატეგორიო_თარგები' ),
        'Undelete'                  => array( 'აღდგენა' ),
-       'Unusedcategories'          => array( 'გამოუყკატეგორიები' ),
-       'Unusedimages'              => array( 'გამოუყსურათები' ),
+       'Unusedcategories'          => array( 'á\83\92á\83\90á\83\9bá\83\9dá\83£á\83§á\83\94á\83\9cá\83\94á\83\91á\83\94á\83\9aá\83\98\83\99á\83\90á\83¢á\83\94á\83\92á\83\9dá\83 á\83\98á\83\94á\83\91á\83\98' ),
+       'Unusedimages'              => array( 'á\83\92á\83\90á\83\9bá\83\9dá\83£á\83§á\83\94á\83\9cá\83\94á\83\91á\83\94á\83\9aá\83\98\83¡á\83£á\83 á\83\90á\83\97á\83\94á\83\91á\83\98' ),
        'Upload'                    => array( 'ატვირთვა' ),
        'Userlogin'                 => array( 'შესვლა' ),
        'Userlogout'                => array( 'გასვლა' ),
        'Userrights'                => array( 'მომხმარებელთა_უფლებები' ),
        'Version'                   => array( 'ვერსია' ),
-       'Wantedcategories'          => array( 'მოთხოვნილიკატეგორიები' ),
+       'Wantedcategories'          => array( 'მოთხოვნილი_კატეგორიები' ),
        'Wantedfiles'               => array( 'საჭირო_ფაილები' ),
        'Wantedpages'               => array( 'საჭირო_გვერდები' ),
        'Wantedtemplates'           => array( 'საჭირო_თარგები' ),
-       'Watchlist'                 => array( 'კონტროლსია' ),
-       'Withoutinterwiki'          => array( 'ინტერვიკისგარეშე' ),
+       'Watchlist'                 => array( 'á\83\99á\83\9dá\83\9cá\83¢á\83 á\83\9dá\83\9aá\83\98á\83¡_á\83¡á\83\98á\83\90' ),
+       'Withoutinterwiki'          => array( 'ინტერვიკის_გარეშე' ),
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#გადამისამართება', '#REDIRECT' ),
-       'nogallery'               => array( '0', '__უგალერეო__', '__NOGALLERY__' ),
-       'subst'                   => array( '0', 'მიდგმ:', 'SUBST:' ),
-       'img_thumbnail'           => array( '1', 'მინიატიურა', 'მინი', 'მინიასლი', 'ცეროდენა', 'thumbnail', 'thumb' ),
-       '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_top'                 => array( '1', 'ზედა', 'top' ),
-       'img_middle'              => array( '1', 'შუა', 'middle' ),
-       'img_bottom'              => array( '1', 'ქვედა', 'bottom' ),
-       'special'                 => array( '0', 'სპეციალური', 'special' ),
+       'redirect'                  => array( '0', '#გადამისამართება', '#REDIRECT' ),
+       'nogallery'                 => array( '0', '__უგალერეო__', '__NOGALLERY__' ),
+       'currentmonth'              => array( '1', 'მიმდინარე_თვე', 'მიმდინარე_თვე2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'მიმდინარე_თვე1', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'მიმდინარე_თვის_სახელი', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'მიმდინარე_თვის_სახელის_აბრევიატურა', 'CURRENTMONTHNAMEGEN' ),
+       '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' ),
+       'pagename'                  => array( '1', 'გვერდის_სახელი', 'PAGENAME' ),
+       'namespace'                 => array( '1', 'სახელთა_სივრცე', 'NAMESPACE' ),
+       'fullpagename'              => array( '1', 'გვერდის_სრული_სახელი', 'FULLPAGENAME' ),
+       'subst'                     => array( '0', 'მიდგმ:', 'SUBST:' ),
+       'img_thumbnail'             => array( '1', 'მინიატიურა', 'მინი', 'მინიასლი', 'ცეროდენა', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '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_page'                  => array( '1', 'გვერდი=$1', 'გვერდი_$1', 'page=$1', 'page $1' ),
+       'img_border'                => array( '1', 'საზღვარი', 'border' ),
+       'img_top'                   => array( '1', 'ზედა', 'top' ),
+       'img_middle'                => array( '1', 'შუა', 'middle' ),
+       'img_bottom'                => array( '1', 'ქვედა', 'bottom' ),
+       'img_link'                  => array( '1', 'ბმული=$1', 'link=$1' ),
+       'img_alt'                   => array( '1', 'ალტ=$1', 'alt=$1' ),
+       'sitename'                  => array( '1', 'საიტის_სახელი', 'SITENAME' ),
+       'special'                   => array( '0', 'სპეციალური', 'special' ),
 );
 
 $linkPrefixExtension = true;
@@ -399,7 +417,7 @@ $1',
 'policy-url' => 'Project:პოლიტიკა',
 'portal' => 'საზოგადოების გვერდები',
 'portal-url' => 'Project:საზოგადოების გვერდები',
-'privacy' => 'á\83\90á\83\9cá\83\9dá\83\9cá\83\98á\83\9bურობის პოლიტიკა',
+'privacy' => 'á\83\99á\83\9dá\83\9cá\83¤á\83\98á\83\93á\83\94á\83\9cá\83ªá\83\98á\83\90á\83\9aურობის პოლიტიკა',
 'privacypage' => 'Project:ანონიმურობის პოლიტიკა',
 
 'badaccess' => 'ნებართვის შეცდომა',
@@ -417,6 +435,8 @@ $1',
 'youhavenewmessages' => 'თქვენ გაქვთ $1 ($2).',
 'newmessageslink' => 'ახალი შეტყობინებები',
 'newmessagesdifflink' => 'განსხვავება წინა ვერსიასთან',
+'youhavenewmessagesfromusers' => 'თქვენ გაქვთ $1 {{PLURAL:$3|სხვა მომხმარებლისგან|$3 მომხმარებლებისგან}} ($2).',
+'youhavenewmessagesmanyusers' => 'თქვენ გაქვთ $1 ბევრი მომხმარებლისგან ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|ახალი შეტყობინება|ახალი შეტყობინება}}',
 'newmessagesdifflinkplural' => 'ბოლო {{PLURAL:$1|ცვლილება|ცვლილება}}',
 'youhavenewmessagesmulti' => 'თქვენ გაქვთ ახალი შეტყობინება $1-ზე',
@@ -1830,6 +1850,7 @@ $1',
 'shared-repo-from' => ' $1-დან',
 'shared-repo' => 'საერთო საცავიდან',
 'shared-repo-name-wikimediacommons' => 'ვიკისაწყობი',
+'upload-disallowed-here' => 'სამწუხაროდ, თქვენ არ შეგიძლიათ ამ სურათზე გადაწერა.',
 
 # File reversion
 'filerevert' => 'დააბრუნე $1',
@@ -1938,6 +1959,7 @@ $1',
 # Miscellaneous special pages
 'nbytes' => '$1 ბაიტი',
 'ncategories' => '$1 კატეგორია',
+'ninterwikis' => '$1 {{PLURAL:$1|ინტერვიკი|ინტერვიკი}}',
 'nlinks' => '$1 ბმული',
 'nmembers' => '$1 წევრი',
 'nrevisions' => '$1 რედაქტირება',
@@ -1966,6 +1988,7 @@ $1',
 'mostlinkedtemplates' => 'ყველაზე მეტი ბმულების მქონე თარგები',
 'mostcategories' => 'ყველაზე მეტი კატეგორიის მქონე სტატიები',
 'mostimages' => 'ყველაზე მეტი ბმულების მქონე ფაილები',
+'mostinterwikis' => 'ყველაზე მეტი ინტერვიკის მქონე სტატია',
 'mostrevisions' => 'ყველაზე მეტად რედაქტირებული სტატიები',
 'prefixindex' => 'ყველა გვერდი (თავსართით)',
 'prefixindex-namespace' => 'ყველა პრეფიქსიანი გვერდი ($1 სახელთა სივრცე)',
@@ -2115,6 +2138,8 @@ $1',
 'mailnologin' => 'გამგზავნი მისამართი არ არის მითითებული.',
 'mailnologintext' => 'თქვენ უნდა [[Special:UserLogin|წარადგენილი იყოთ სისტემისადმი]] და გქონდეთ წესიერი ელექტრონული ფოსტის მისამართი თქვენს [[Special:Preferences|კონფიგურაციაში]] იმისთვის, რომ გაუგზავნოთ წერილების სხვა მომხმარებლებს.',
 'emailuser' => 'გაუგზავნეთ იმეილი ამ მომხმარებელს',
+'emailuser-title-target' => 'ელ. ფოსტის მიწერა {{GENDER:$1|მომხმარებელთან}}',
+'emailuser-title-notarget' => 'ელ. ფოსტის გაგზავნა მომხმარებელთან',
 'emailpage' => 'ელ. ფოსტა მომხმარებელს',
 'emailpagetext' => 'თუ ამ მომხმარებელმა თავის პარამეტრებში ელ. ფოსტის მოქმედი მისამართი მიუთითა, ქვემოთ მოყვანილი ფორმის შევსებისას შეგიძლიათ მისთვის შეტყობინების გაგზავნა. ელ. ფოსტის მისამართი, რომელიც [[Special:Preferences|თქვენს პარამეტრებში]] მიუთითეთ, დაფიქსირდება „გამომგზავნის“ ველში, რათა ადრესატმა პასუხის გაცემა შეძლოს.',
 'usermailererror' => 'ელ. ფოსტა დაბრუნდა შეცდომის გამო:',
@@ -2260,8 +2285,8 @@ $UNWATCHURL
 'rollback' => 'რცვლილებების გაუქმება',
 'rollback_short' => 'სწრაფი გაუქმება',
 'rollbacklink' => 'სწრაფი გაუქმება',
-'rollbacklinkcount' => '$1 {{PLURAL:$1|á\83ªá\83\95á\83\9aá\83\98á\83\9aá\83\94á\83\91á\83\98á\83¡|á\83ªá\83\95á\83\9aá\83\98á\83\9aá\83\94á\83\91á\83\98á\83¡}} á\83\93á\83\90á\83\91á\83 á\83£á\83\9cება',
-'rollbacklinkcount-morethan' => '$1-á\83\96á\83\94 á\83\9bá\83\94á\83¢á\83\98 {{PLURAL:$1|á\83ªá\83\95á\83\9aá\83\98á\83\9aá\83\94á\83\91á\83\98á\83¡|á\83ªá\83\95á\83\9aá\83\98á\83\9aá\83\94á\83\91á\83\98á\83¡}} á\83\93á\83\90á\83\91á\83 á\83£á\83\9cება',
+'rollbacklinkcount' => '$1 {{PLURAL:$1|á\83ªá\83\95á\83\9aá\83\98á\83\9aá\83\94á\83\91á\83\98á\83¡|á\83ªá\83\95á\83\9aá\83\98á\83\9aá\83\94á\83\91á\83\98á\83¡}} á\83\92á\83\90á\83£á\83¥á\83\9bება',
+'rollbacklinkcount-morethan' => '$1-á\83\96á\83\94 á\83\9bá\83\94á\83¢á\83\98 {{PLURAL:$1|á\83ªá\83\95á\83\9aá\83\98á\83\9aá\83\94á\83\91á\83\98á\83¡|á\83ªá\83\95á\83\9aá\83\98á\83\9aá\83\94á\83\91á\83\98á\83¡}} á\83\92á\83\90á\83£á\83¥á\83\9bება',
 'rollbackfailed' => 'შეცდომა გაუქმებისას',
 'cantrollback' => 'შეუძლებელია უწინდელი რედაქციის აღდგენა; ის, ვინც უკანასკნელი ცვლილებები შეიტანა, ამ სტატიის ერთადერთი ავტორია.',
 'alreadyrolled' => 'შეუძლებელია ბოლო ცვლილების გაუქმება [[:$1]], გაკეებული [[User:$2|$2]] ([[User talk:$2|განხილვა]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);
@@ -2308,7 +2333,7 @@ $UNWATCHURL
 თქვენ შეგიძლიათ ამ გვერდის დაცვის დონე შეცვალოთ, თუმცა ეს კასკადურ დაცვაზე გავლენას არ იქონიებს.',
 'protect-default' => 'ყველა მომხმარებელი',
 'protect-fallback' => 'საჭიროა „$1-ის“ უფლება',
-'protect-level-autoconfirmed' => 'ახალი და არარეგისტრირებული მომხმარებლების დაბლოკვა',
+'protect-level-autoconfirmed' => 'ახალი და არარეგისტრირებული მომხმარებლებისაგან დაცვა',
 'protect-level-sysop' => 'მხოლოდ ადმინისტრატორები',
 'protect-summary-cascade' => 'იერარქიული',
 'protect-expiring' => 'ვადა გასდის: $1 (UTC)',
@@ -2385,7 +2410,7 @@ $UNWATCHURL
 'undelete-no-results' => 'არ არის ნაპოვნი შესაბამისი გვერდები წაშლათა არქივში.',
 'undelete-filename-mismatch' => 'შეუძლებელია წაშლილი ფაილის აღდგენა $1-ში – განსხვავებები წაშლამდე.',
 'undelete-bad-store-key' => 'შეუძლებელია წაშლილი ფაილის აღდგენა $1-ში – იგი არ არსებობდა წაშლამდე.',
-'undelete-cleanup-error' => 'გამოუყენებელი სარქივო ფაილის «$1» წაშლის შეცდომა:',
+'undelete-cleanup-error' => 'გამოუყენებელი სარქივო ფაილის „$1“ წაშლის შეცდომა:',
 'undelete-missing-filearchive' => 'შეუძლებელია ფაილის აღდგენა არქივის იდენტიფიკატორით $1, რადგანაც ის არ არის მონაცემთა ბაზაში. შესაძლებელია ფაილი უკვე აღდგენილია.',
 'undelete-error' => 'შეცდომა გვერდის აღდგენისას',
 'undelete-error-short' => 'შეცდომა ფაილის წაშლის გაუქმებაში: $1',
@@ -2432,7 +2457,7 @@ $1',
 
 # What links here
 'whatlinkshere' => 'ბმული გვერდზე',
-'whatlinkshere-title' => 'გვერდები, რომლებიც შეიცავენ ბმულებს "$1"-ზე',
+'whatlinkshere-title' => 'გვერდები, რომლებიც შეიცავენ ბმულებს „$1“-ზე',
 'whatlinkshere-page' => 'გვერდი:',
 'linkshere' => "მომდევნო გვერდები შეიცავენ ბმულებს '''[[:$1]]'''-ზე:",
 'nolinkshere' => "'''[[:$1]]'''-ზე ბმული არ არის.",
@@ -2558,7 +2583,7 @@ $1',
 'ipb_expiry_invalid' => 'მოქმედების მიუღებელი პერიოდი',
 'ipb_expiry_temp' => 'ბლოკირება მომხმარებლის სახელის დამალვით უვადო უნდა იყოს',
 'ipb_hide_invalid' => 'შეუძლებელია მოხემული ანგარიშის დამალვა, სავარაუდოდ მის მიერ განხორციელებულია ძალიან ბევრი შესწორება',
-'ipb_already_blocked' => '"$1" უკვე ბლოკირებულია',
+'ipb_already_blocked' => '„$1“ უკვე ბლოკირებულია',
 'ipb-needreblock' => 'მომხმარებელი $1 უკვე დაიბლოკა. გსურთ დაბლოკვის პარამეტრების შესწორება?',
 'ipb-otherblocks-header' => 'სხვა {{PLURAL:$1|დაბლოკვა|დაბლოკვები}}',
 'unblock-hideuser' => 'თქვენ არ შეგიძლიათ მოხსნათ ბლოკი ამ მომხმარებელს, რადგან მისი მომხმარებლის სახელი დამალულია.',
@@ -2657,12 +2682,12 @@ $1',
 'delete_and_move' => 'წაშლა და გადატანა',
 'delete_and_move_text' => '==საჭიროა წაშლა==
 
-სტატია დასახელებით "[[:$1]]" უკვე არსებობს. გსურთ მისი წაშლა გადატანისთვის ადგილის დასათმობად?',
+სტატია დასახელებით „[[:$1]]“ უკვე არსებობს. გსურთ მისი წაშლა გადატანისთვის ადგილის დასათმობად?',
 'delete_and_move_confirm' => 'დიახ, წაშალეთ ეს გვერდი',
-'delete_and_move_reason' => 'წაშლილია "[[$1]]"-á\83\93á\83\90á\83\9c á\83\92á\83\90á\83\93á\83\90á\83¢á\83\90á\83\9cá\83\98á\83¡á\83\97á\83\95á\83\98á\83¡ á\83\90á\83\93á\83\92á\83\98á\83\9aá\83\98á\83¡ á\83\93á\83\90á\83¡á\83\90á\83\97á\83\9bá\83\9dá\83\91á\83\90á\83\93',
+'delete_and_move_reason' => 'წაშლილია â\80\9e[[$1]]-á\83\93á\83\90á\83\9câ\80\9c á\83\92á\83\90á\83\93á\83\90á\83¢á\83\90á\83\9cá\83\98á\83¡á\83\97á\83\95á\83\98á\83¡ á\83\90á\83\93á\83\92á\83\98á\83\9aá\83\98á\83¡ á\83\93á\83\90á\83¡á\83\90á\83\97á\83\9bá\83\9dá\83\91á\83\90á\83\93',
 'selfmove' => 'წყარო და დანიშნულების სათაურები მსგავსია; შეუძლებელია გვერდის საკუთარ თავზე გადატანა.',
-'immobile-source-namespace' => 'შეუძლებელია სახელის გადარქმევა «$1» სახელთა სივრცეში',
-'immobile-target-namespace' => 'შეუძლებელია გვერდის გადატანა «$1» სახელთა სივრცეში',
+'immobile-source-namespace' => 'შეუძლებელია სახელის გადარქმევა „$1“ სახელთა სივრცეში',
+'immobile-target-namespace' => 'შეუძლებელია გვერდის გადატანა „$1“ სახელთა სივრცეში',
 'immobile-target-namespace-iw' => 'ინტერვიკის ბმული შეუძლებელია გამოყენებული იქნას გადარქმევისთვის.',
 'immobile-source-page' => 'ამ გვეერდის გადატანა შეუძლებელია.',
 'immobile-target-page' => 'შეუძლებელია მოცემულ სახელზე გადატანა.',
@@ -2744,6 +2769,7 @@ $1',
 'import-interwiki-templates' => 'ყველა თარგის ჩართვა',
 'import-interwiki-submit' => 'იმპორტირება',
 'import-interwiki-namespace' => 'სამიზნე სახელთა სივრცე',
+'import-interwiki-rootpage' => 'ძირეული გვერდი (არასავალდებულო):',
 'import-upload-filename' => 'ფაილის სახელი:',
 'import-comment' => 'კომენტარი:',
 'importtext' => 'გთხოვთ, მოახდინოთ გვერდის ექსპორტი თავდაპირველი ვიკიდან, [[Special:Export|შესაბამისი ხელსაწყოს]] გამოყენებით. ფაილი შეინახეთ დისკზე, ხოლო შემდეგ ატვირთეთ აქ.',
@@ -2770,18 +2796,20 @@ $1',
 'import-upload' => 'XML მონაცემების ატვირთვა',
 'import-token-mismatch' => 'სეანსის მონაცემები დაიკარგა. კიდევ ერთხელ სცადეთ!',
 'import-invalid-interwiki' => 'შეუძლებელია იმპორტირება მოცემული ვიკიდან.',
-'import-error-edit' => 'გვერდი "$1" იმპორტირება არ მოხდა, რადგან თქვენ არ გაქვთ მისი რედაქტირების უფლება.',
-'import-error-create' => 'გვერდი "$1" იმპორტირება არ მოხდა, რადგან თქვენ არ გაქვთ მისი შექმნის უფლება.',
-'import-error-interwiki' => 'გვერდი "$1" არ იქნა იმპორტირებული, რადგანაც მისი სახელი დარეგისტრირებულია გარე ბმულებისათვის (interwiki).',
-'import-error-special' => 'გვერდი "$1" არ იქნა იმპორტირებული, რადგანაც ის განეკუთვნება განსაკუთრებულ სახელთა სივრცეს, რომელიც კრძალავს გვერდების შექმნას.',
+'import-error-edit' => 'გვერდი „$1“ იმპორტირება არ მოხდა, რადგან თქვენ არ გაქვთ მისი რედაქტირების უფლება.',
+'import-error-create' => 'გვერდი „$1“ იმპორტირება არ მოხდა, რადგან თქვენ არ გაქვთ მისი შექმნის უფლება.',
+'import-error-interwiki' => 'გვერდი „$1“ არ იქნა იმპორტირებული, რადგანაც მისი სახელი დარეგისტრირებულია გარე ბმულებისათვის (interwiki).',
+'import-error-special' => 'გვერდი „$1“ არ იქნა იმპორტირებული, რადგანაც ის განეკუთვნება განსაკუთრებულ სახელთა სივრცეს, რომელიც კრძალავს გვერდების შექმნას.',
 'import-error-invalid' => 'გვერდი "$1" იმპორტირება არ მოხდა მიუღებელი სახელის გამო.',
+'import-options-wrong' => 'არასწორი {{PLURAL:$2|პარამეტრი|პარამეტრი}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'ძირეული გვერდის მითითებული სახელი არასწორია.',
 
 # Import log
 'importlogpage' => 'იმპორტის ჟურნალი',
 'importlogpagetext' => 'ადმინისტრატორთა მიერ გვერდების იმპორტირება  ცვლილებების ჩათვლით სხვა ვიკიდან.',
-'import-logentry-upload' => '«[[$1]]» — ფაილის იმპორტი',
+'import-logentry-upload' => '„[[$1]]“ — ფაილის იმპორტი',
 'import-logentry-upload-detail' => '$1 ცვლილება',
-'import-logentry-interwiki' => '«$1» — ტრანსვიკი იმპორტი',
+'import-logentry-interwiki' => '„$1“ — ტრანსვიკი იმპორტი',
 'import-logentry-interwiki-detail' => '$1 ცვლილება $2-დან',
 
 # JavaScriptTest
@@ -2789,7 +2817,7 @@ $1',
 'javascripttest-disabled' => 'ეს ფუნქცია ამ ვიკიში არ ჩართულა.',
 'javascripttest-title' => 'მიმდინარეობს $1-ის ტესტირება',
 'javascripttest-pagetext-noframework' => 'ეს გვერდი დარეგისტრირებულია JavaScript-ის ტესტების გასაშვებად.',
-'javascripttest-pagetext-unknownframework' => '"$1"-ის ტესტირების უცნობი გარემო.',
+'javascripttest-pagetext-unknownframework' => '„$1-ის“ ტესტირების უცნობი გარემო.',
 'javascripttest-pagetext-frameworks' => 'გთხოვთ, აირჩიეთ ტესტირების ერთ-ერთი შემდეგი გარემო: $1',
 'javascripttest-pagetext-skins' => 'ტესტების გასაშვებად აირჩიეთ გაფორმების თემა:',
 'javascripttest-qunit-intro' => 'იხილეთ [$1 ტესტირების დოკუმენტები] mediawiki.org-ზე.',
@@ -2913,7 +2941,9 @@ $1',
 'pageinfo-header-basic' => 'საბაზისო ინფორმაცია',
 'pageinfo-header-edits' => 'რედაქტირების ისტორია',
 'pageinfo-header-restrictions' => 'გვერდის დაცვა',
+'pageinfo-header-properties' => 'გვერდის თვისებები',
 'pageinfo-article-id' => 'გვერდის ID',
+'pageinfo-robot-policy' => 'საძიებო სისტემის სტატუსი',
 'pageinfo-views' => 'ხილვების რაოდენობა',
 'pageinfo-watchers' => 'გვერდის დამკვირვებელთა რაოდენობა',
 'pageinfo-firstuser' => 'გვერდის შემქნელი',
@@ -2922,9 +2952,10 @@ $1',
 'pageinfo-lasttime' => 'ბოლო რედაქტირების თარიღი',
 'pageinfo-edits' => 'რედაქტირებების ჯამური რაოდენობა',
 'pageinfo-authors' => 'განსხვავებულ ავტორთა ჯამური რაოდენობა',
-'pageinfo-restriction' => 'გვერდის დაცვა (<code>$1</code>)',
+'pageinfo-restriction' => 'გვერდის დაცვა (<code>{{lcfirst:$1}}</code>)',
 'pageinfo-magic-words' => 'ჯადოსნური {{PLURAL:$1|სიტყვა|სიტყვა}} ($1)',
 'pageinfo-hidden-categories' => 'დამალული {{PLURAL:$1|კატეგორია|კატეგორია}} ($1)',
+'pageinfo-templates' => 'ინტეგრირებულია {{PLURAL:$1|თარგი|თარგი}} ($1)',
 
 # Skin names
 'skinname-standard' => 'კლასიკური',
@@ -2980,6 +3011,7 @@ $1',
 'file-info-size-pages' => '$1 × $2 პიქსელი, ფაილის ზომა: $3, MIME ტიპი: $4, $5 გვერდი',
 'file-nohires' => 'უფრო მაღალი გარჩევადობა არ არის შესაძლებელი.',
 'svg-long-desc' => 'ფაილი SVG, ნომინალურად $1 × $2 პიქსელი, ფაილის ზომა: $3',
+'svg-long-desc-animated' => 'ანიმირებული SVG ფაილი, ნომინალური $1 × $2 პიქსელი, ფაილის ზომა: $3',
 'show-big-image' => 'სრული გარჩევადობა',
 'show-big-image-preview' => 'ზომა წინასწარი გადახედვისას: $1.',
 'show-big-image-other' => 'სხვა {{PLURAL:$2|გაფართოება|გაფართოება}}: $1.',
@@ -3821,12 +3853,12 @@ MediaWiki ვრცელდება იმ იმედით, რომ ი
 'revdelete-uname-unhid' => 'მომხმარებლის სახელი გახსნილია',
 'revdelete-restricted' => 'შეზღუდვა ადმინისტრატორთათვის',
 'revdelete-unrestricted' => 'ადმინისტრატორთათვის შეზღუდვები მოხსნილია',
-'logentry-move-move' => '$1 á\83\92á\83\90á\83\93á\83\90á\83\98á\83¢á\83\90á\83\9cá\83\90 á\83\92á\83\95á\83\94á\83 á\83\93á\83\98 $3 â\86\92 $4-á\83\96á\83\94',
-'logentry-move-move-noredirect' => '$1 á\83\92á\83\90á\83\93á\83\90á\83\98á\83¢á\83\90á\83\9cá\83\90 á\83\92á\83\95á\83\94á\83 á\83\93á\83\98 $3 $4-á\83¨á\83\98 გადამისამართების დატოვების გარეშე',
-'logentry-move-move_redir' => '$1 á\83\92á\83\90á\83\93á\83\90á\83\98á\83¢á\83\90á\83\9cá\83\90 á\83\92á\83\95á\83\94á\83 á\83\93á\83\98 $3 $4-á\83¨á\83\98 გადამისამართებაზე',
+'logentry-move-move' => '$1 á\83\92á\83\95á\83\94á\83 á\83\93á\83\98 â\80\9e$3â\80\9c á\83\92á\83\90á\83\93á\83\90á\83\98á\83¢á\83\90á\83\9cá\83\90 á\83\92á\83\95á\83\94á\83 á\83\93á\83\96á\83\94 â\80\9e$4â\80\9c',
+'logentry-move-move-noredirect' => '$1 á\83\92á\83\95á\83\94á\83 á\83\93á\83\98 â\80\9e$3â\80\9c á\83\92á\83\90á\83\93á\83\90á\83\98á\83¢á\83\90á\83\9cá\83\90 á\83\92á\83\95á\83\94á\83 á\83\93á\83\96á\83\94 â\80\9e$4â\80\9c გადამისამართების დატოვების გარეშე',
+'logentry-move-move_redir' => '$1 á\83\92á\83\95á\83\94á\83 á\83\93á\83\98 â\80\9e$3â\80\9c á\83\92á\83\90á\83\93á\83\90á\83\98á\83¢á\83\90á\83\9cá\83\90 á\83\92á\83\95á\83\94á\83 á\83\93á\83\96á\83\94 â\80\9e$4â\80\9c გადამისამართებაზე',
 'logentry-move-move_redir-noredirect' => '$1 გადაიტანა გვერდი $3 $4-ში გადამისამართების დატოვების გარეშე',
-'logentry-patrol-patrol' => '$1 გააკეთა გვერდი $3-ის $4 ვერსიის პატრულირება',
-'logentry-patrol-patrol-auto' => '$1 ავტომატურად გააკეთა გვერდი $3-ის $4 ვერსიის პატრულირება',
+'logentry-patrol-patrol' => '$1 გააკეთა გვერდის „$3“ $4 ვერსიის პატრულირება',
+'logentry-patrol-patrol-auto' => '$1 ავტომატურად გააკეთა გვერდის „$3“ $4 ვერსიის პატრულირება',
 'logentry-newusers-newusers' => '$1 შექმნა მომხმარებლის ანგარიში',
 'logentry-newusers-create' => '$1 შექმნა მომხმარებლის ანგარიში',
 'logentry-newusers-create2' => '$1 შექმნა მომხმარებელ $3 ანგარიში',
index 69e8cb8..d28025d 100644 (file)
@@ -234,7 +234,7 @@ $messages = array(
 'jumptonavigation' => 'رہنمائی',
 'jumptosearch' => 'تلاش',
 'view-pool-error' => 'معذرت: تمام سرورا موجودہ وختہ اِضافی بوجھ شیر.
ہت زیادہ صارفین موجودہ وختہ ھیہ صفحو لاڑینیان 
و زیادہ صارفین موجودہ وختہ ھیہ صفحو لاڑینیان 
 برائے مہربانی! صفحو لوڑیکو بچے دوبارہ کوشش کوریکاری پروشٹی پھوکرو انتظار کورے.
 
 $1',
@@ -715,7 +715,7 @@ HTML tags لوڑے.',",
 'recentchangeslinked-summary' => "ھیہ ھتے تبدیلیان لسٹ شیر کہ ھیتان پھوک مدا پروشٹی ساوزینو بیتی شینی وا ھے صفحان سوم جستہ خور کیہ صفحہ چوکی شینی یا کیہ خاص زمرہ جاتو ممبرانن سوم چوکی شینی<br />
 ساوزیرو [[Special:Watchlist|موڑا صفحہ]] '''بولڈ''' شینی",
 'recentchangeslinked-page' => 'کھوار ویکیپیڈیو منصوبو صفحو لوڑے',
-'recentchangeslinked-to' => 'Ú©Ú¾Ù\84Ù\88Ù\84اÙ\88 Ø¨Û\8cرÙ\88 ØµÙ\81Ø­Ù\88 Ø¨Ø¬Ø§Û\8cا Ú¾Ù\85Ù\88 Ø³Ù\88Ù\85 Ú\86Ù\88Ú©Û\8cرÙ\88 ØµÙ\81Ø­Ù\88 Ù\86Ù\88غ ØªØ¨Ø¯Û\8cÙ\84Û\8cاÙ\86 Ù¾Ø´Ø§Ù\88Û\92',
+'recentchangeslinked-to' => 'کھولاو بیرو صفحو بجایا ھمو سوم چوکیرو صفحو نوغ تبدیلیان پشاوے',
 
 # Upload
 'upload' => 'فائل انځاوے',
index 28cdd6e..cf9fff0 100644 (file)
 
 $fallback = 'tr';
 
+$namespaceNames = array(
+       NS_MEDIA            => 'Medya',
+       NS_SPECIAL          => 'Xısusi',
+       NS_TALK             => 'Werênayış',
+       NS_USER             => 'Karber',
+       NS_USER_TALK        => 'Karber_werênayış',
+       NS_PROJECT_TALK     => '$1_werênayış',
+       NS_FILE             => 'Dosye',
+       NS_FILE_TALK        => 'Dosya_werênayış',
+       NS_MEDIAWIKI        => 'MediaWiki',
+       NS_MEDIAWIKI_TALK   => 'MediaWiki_werênayış',
+       NS_TEMPLATE         => 'Şablon',
+       NS_TEMPLATE_TALK    => 'Şablon_werênayış',
+       NS_HELP             => 'Peşti',
+       NS_HELP_TALK        => 'Peşti_werênayış',
+       NS_CATEGORY         => 'Kategoriye',
+       NS_CATEGORY_TALK    => 'Kategori_werênayış',
+);
+
+$namespaceAliases = array(
+       // Turkish namespace names.
+       'Medya'              => NS_MEDIA,
+       'Özel'               => NS_SPECIAL,
+       'Tartışma'           => NS_TALK,
+       'Kullanıcı'          => NS_USER,
+       'Kullanıcı_mesaj'    => NS_USER_TALK,
+       '$1_tartışma'        => NS_PROJECT_TALK,
+       'Dosya'              => NS_FILE,
+       'Dosya_tartışma'     => NS_FILE_TALK,
+       'MediaWiki_tartışma' => NS_MEDIAWIKI_TALK,
+       'Şablon'             => NS_TEMPLATE,
+       'Şablon_tartışma'    => NS_TEMPLATE_TALK,
+       'Yardım'             => NS_HELP,
+       'Yardım_tartışma'    => NS_HELP_TALK,
+       'Kategori'           => NS_CATEGORY,
+       'Kategori_tartışma'  => NS_CATEGORY_TALK,
+);
+
 $messages = array(
 # User preference toggles
 'tog-underline' => 'Bınê girey de xete bonce:',
index acbf8de..bf7d354 100644 (file)
@@ -180,130 +180,130 @@ $dateFormats = array(
  * This array can be modified at runtime with the LanguageGetMagic hook
  */
 $magicWords = array(
-       'redirect'                => array( '0', '#ايداۋ', '#АЙДАУ', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__مازمۇنسىز__', '__مسىز__', '__МАЗМҰНСЫЗ__', '__МСЫЗ__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__قويماسىز__', '__قسىز__', '__ҚОЙМАСЫЗ__', '__ҚСЫЗ__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__مازمۇنداتقىزۋ__', '__مقىزۋ__', '__МАЗМҰНДАТҚЫЗУ__', '__МҚЫЗУ__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__مازمۇنى__', '__مزمن__', '__МАЗМҰНЫ__', '__МЗМН__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__بولىدىموندەمەۋ__', '__بولىموندەتكىزبەۋ__', '__БӨЛІДІМӨНДЕМЕУ__', '__БӨЛІМӨНДЕТКІЗБЕУ__', '__NOEDITSECTION__' ),
-       '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', 'АҒЫМДАҒЫКҮН2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'اعىمداعىكۇناتاۋى', 'АҒЫМДАҒЫКҮНАТАУЫ', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'اعىمداعىجىل', 'АҒЫМДАҒЫЖЫЛ', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'اعىمداعىۋاقىت', 'АҒЫМДАҒЫУАҚЫТ', 'CURRENTTIME' ),
-       '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', 'ЖЕРГІЛІКТІКҮН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' ),
-       'numberofusers'           => array( '1', 'قاتىسۋشىسانى', 'ҚАТЫСУШЫСАНЫ', 'NUMBEROFUSERS' ),
-       'numberofedits'           => array( '1', 'وڭدەمەسانى', 'تۇزەتۋسانى', 'ӨҢДЕМЕСАНЫ', 'ТҮЗЕТУСАНЫ', 'NUMBEROFEDITS' ),
-       'pagename'                => array( '1', 'بەتاتاۋى', 'БЕТАТАУЫ', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'بەتاتاۋى2', 'БЕТАТАУЫ2', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'ەسىماياسى', 'ЕСІМАЯСЫ', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'ەسىماياسى2', 'ЕСІМАЯСЫ2', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'تالقىلاۋاياسى', 'ТАЛҚЫЛАУАЯСЫ', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'تالقىلاۋاياسى2', 'ТАЛҚЫЛАУАЯСЫ2', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'تاقىرىپبەتى', 'ماقالابەتى', 'ТАҚЫРЫПБЕТІ', 'МАҚАЛАБЕТІ', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'تاقىرىپبەتى2', 'ماقالابەتى2', 'ТАҚЫРЫПБЕТІ2', 'МАҚАЛАБЕТІ2', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'تولىقبەتاتاۋى', 'ТОЛЫҚБЕТАТАУЫ', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'تولىقبەتاتاۋى2', 'ТОЛЫҚБЕТАТАУЫ2', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'بەتشەاتاۋى', 'استىڭعىبەتاتاۋى', 'БЕТШЕАТАУЫ', 'АСТЫҢҒЫБЕТАТАУЫ', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'بەتشەاتاۋى2', 'استىڭعىبەتاتاۋى2', 'БЕТШЕАТАУЫ2', 'АСТЫҢҒЫБЕТАТАУЫ2', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'نەگىزگىبەتاتاۋى', 'НЕГІЗГІБЕТАТАУЫ', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'نەگىزگىبەتاتاۋى2', 'НЕГІЗГІБЕТАТАУЫ2', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'تالقىلاۋبەتاتاۋى', 'ТАЛҚЫЛАУБЕТАТАУЫ', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'تالقىلاۋبەتاتاۋى2', 'ТАЛҚЫЛАУБЕТАТАУЫ2', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'تاقىرىپبەتاتاۋى', 'ماقالابەتاتاۋى', 'ТАҚЫРЫПБЕТАТАУЫ', 'МАҚАЛАБЕТАТАУЫ', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'subjectpagenamee'        => array( '1', 'تاقىرىپبەتاتاۋى2', 'ماقالابەتاتاۋى2', 'ТАҚЫРЫПБЕТАТАУЫ2', 'МАҚАЛАБЕТАТАУЫ2', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
-       'msg'                     => array( '0', 'حبر:', 'ХБР:', 'MSG:' ),
-       'subst'                   => array( '0', 'بادەل:', 'БӘДЕЛ:', 'SUBST:' ),
-       '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' ),
-       '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', 'بەت=$1', 'بەت $1', 'бет=$1', 'бет $1', 'page=$1', 'page $1' ),
-       'img_upright'             => array( '1', 'تىكتى', 'تىكتىك=$1', 'تىكتىك $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_text_bottom'         => array( '1', 'ماتىن-استىندا', 'мәтін-астында', 'text-bottom' ),
-       'int'                     => array( '0', 'ىشكى:', 'ІШКІ:', 'INT:' ),
-       'sitename'                => array( '1', 'توراپاتاۋى', 'ТОРАПАТАУЫ', 'SITENAME' ),
-       'ns'                      => array( '0', 'ەا:', 'ەسىمايا:', 'ЕА:', 'ЕСІМАЯ:', 'NS:' ),
-       'localurl'                => array( '0', 'جەرگىلىكتىجاي:', 'ЖЕРГІЛІКТІЖАЙ:', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'جەرگىلىكتىجاي2:', 'ЖЕРГІЛІКТІЖАЙ2:', 'LOCALURLE:' ),
-       'server'                  => array( '0', 'سەرۆەر', 'СЕРВЕР', 'SERVER' ),
-       'servername'              => array( '0', 'سەرۆەراتاۋى', 'СЕРВЕРАТАУЫ', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'امىرجولى', 'ӘМІРЖОЛЫ', 'SCRIPTPATH' ),
-       'grammar'                 => array( '0', 'سەپتىگى:', 'سەپتىك:', 'СЕПТІГІ:', 'СЕПТІК:', 'GRAMMAR:' ),
-       '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', 'تۇزەتۋنومىرٴى', 'نۇسقانومىرٴى', 'ТҮЗЕТУНӨМІРІ', 'НҰСҚАНӨМІРІ', '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' ),
-       'plural'                  => array( '0', 'كوپشەتۇرى:', 'كوپشە:', 'КӨПШЕТҮРІ:', 'КӨПШЕ:', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'تولىقجايى:', 'تولىقجاي:', 'ТОЛЫҚЖАЙЫ:', 'ТОЛЫҚЖАЙ:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'تولىقجايى2:', 'تولىقجاي2:', 'ТОЛЫҚЖАЙЫ2:', 'ТОЛЫҚЖАЙ2:', 'FULLURLE:' ),
-       'lcfirst'                 => array( '0', 'كا1:', 'كىشىارىپپەن1:', 'КӘ1:', 'КІШІӘРІППЕН1:', 'LCFIRST:' ),
-       'ucfirst'                 => array( '0', 'با1:', 'باسارىپپەن1:', 'БӘ1:', 'БАСӘРІППЕН1:', '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__' ),
-       '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:' ),
-       '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:' ),
-       'tag'                     => array( '0', 'بەلگى', 'белгі', 'tag' ),
-       'hiddencat'               => array( '1', '__جاسىرىنسانات__', '__ЖАСЫРЫНСАНАТ__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'ساناتتاعىبەتتەر', 'САНАТТАҒЫБЕТТЕР', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'بەتمولشەرى', 'БЕТМӨЛШЕРІ', 'PAGESIZE' ),
+       'redirect'                  => array( '0', '#ايداۋ', '#АЙДАУ', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__مازمۇنسىز__', '__مسىز__', '__МАЗМҰНСЫЗ__', '__МСЫЗ__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__قويماسىز__', '__قسىز__', '__ҚОЙМАСЫЗ__', '__ҚСЫЗ__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__مازمۇنداتقىزۋ__', '__مقىزۋ__', '__МАЗМҰНДАТҚЫЗУ__', '__МҚЫЗУ__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__مازمۇنى__', '__مزمن__', '__МАЗМҰНЫ__', '__МЗМН__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__بولىدىموندەمەۋ__', '__بولىموندەتكىزبەۋ__', '__БӨЛІДІМӨНДЕМЕУ__', '__БӨЛІМӨНДЕТКІЗБЕУ__', '__NOEDITSECTION__' ),
+       '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', 'АҒЫМДАҒЫКҮН2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'اعىمداعىكۇناتاۋى', 'АҒЫМДАҒЫКҮНАТАУЫ', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'اعىمداعىجىل', 'АҒЫМДАҒЫЖЫЛ', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'اعىمداعىۋاقىت', 'АҒЫМДАҒЫУАҚЫТ', 'CURRENTTIME' ),
+       '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', 'ЖЕРГІЛІКТІКҮН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' ),
+       'numberofusers'             => array( '1', 'قاتىسۋشىسانى', 'ҚАТЫСУШЫСАНЫ', 'NUMBEROFUSERS' ),
+       'numberofedits'             => array( '1', 'وڭدەمەسانى', 'تۇزەتۋسانى', 'ӨҢДЕМЕСАНЫ', 'ТҮЗЕТУСАНЫ', 'NUMBEROFEDITS' ),
+       'pagename'                  => array( '1', 'بەتاتاۋى', 'БЕТАТАУЫ', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'بەتاتاۋى2', 'БЕТАТАУЫ2', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'ەسىماياسى', 'ЕСІМАЯСЫ', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'ەسىماياسى2', 'ЕСІМАЯСЫ2', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'تالقىلاۋاياسى', 'ТАЛҚЫЛАУАЯСЫ', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'تالقىلاۋاياسى2', 'ТАЛҚЫЛАУАЯСЫ2', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'تاقىرىپبەتى', 'ماقالابەتى', 'ТАҚЫРЫПБЕТІ', 'МАҚАЛАБЕТІ', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'تاقىرىپبەتى2', 'ماقالابەتى2', 'ТАҚЫРЫПБЕТІ2', 'МАҚАЛАБЕТІ2', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'تولىقبەتاتاۋى', 'ТОЛЫҚБЕТАТАУЫ', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'تولىقبەتاتاۋى2', 'ТОЛЫҚБЕТАТАУЫ2', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'بەتشەاتاۋى', 'استىڭعىبەتاتاۋى', 'БЕТШЕАТАУЫ', 'АСТЫҢҒЫБЕТАТАУЫ', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'بەتشەاتاۋى2', 'استىڭعىبەتاتاۋى2', 'БЕТШЕАТАУЫ2', 'АСТЫҢҒЫБЕТАТАУЫ2', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'نەگىزگىبەتاتاۋى', 'НЕГІЗГІБЕТАТАУЫ', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'نەگىزگىبەتاتاۋى2', 'НЕГІЗГІБЕТАТАУЫ2', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'تالقىلاۋبەتاتاۋى', 'ТАЛҚЫЛАУБЕТАТАУЫ', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'تالقىلاۋبەتاتاۋى2', 'ТАЛҚЫЛАУБЕТАТАУЫ2', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'تاقىرىپبەتاتاۋى', 'ماقالابەتاتاۋى', 'ТАҚЫРЫПБЕТАТАУЫ', 'МАҚАЛАБЕТАТАУЫ', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'          => array( '1', 'تاقىرىپبەتاتاۋى2', 'ماقالابەتاتاۋى2', 'ТАҚЫРЫПБЕТАТАУЫ2', 'МАҚАЛАБЕТАТАУЫ2', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+       'msg'                       => array( '0', 'حبر:', 'ХБР:', 'MSG:' ),
+       'subst'                     => array( '0', 'بادەل:', 'БӘДЕЛ:', 'SUBST:' ),
+       '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' ),
+       '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', 'بەت=$1', 'بەت $1', 'бет=$1', 'бет $1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', 'تىكتى', 'تىكتىك=$1', 'تىكتىك $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_text_bottom'           => array( '1', 'ماتىن-استىندا', 'мәтін-астында', 'text-bottom' ),
+       'int'                       => array( '0', 'ىشكى:', 'ІШКІ:', 'INT:' ),
+       'sitename'                  => array( '1', 'توراپاتاۋى', 'ТОРАПАТАУЫ', 'SITENAME' ),
+       'ns'                        => array( '0', 'ەا:', 'ەسىمايا:', 'ЕА:', 'ЕСІМАЯ:', 'NS:' ),
+       'localurl'                  => array( '0', 'جەرگىلىكتىجاي:', 'ЖЕРГІЛІКТІЖАЙ:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'جەرگىلىكتىجاي2:', 'ЖЕРГІЛІКТІЖАЙ2:', 'LOCALURLE:' ),
+       'server'                    => array( '0', 'سەرۆەر', 'СЕРВЕР', 'SERVER' ),
+       'servername'                => array( '0', 'سەرۆەراتاۋى', 'СЕРВЕРАТАУЫ', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'امىرجولى', 'ӘМІРЖОЛЫ', 'SCRIPTPATH' ),
+       'grammar'                   => array( '0', 'سەپتىگى:', 'سەپتىك:', 'СЕПТІГІ:', 'СЕПТІК:', 'GRAMMAR:' ),
+       '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', 'تۇزەتۋنومىرٴى', 'نۇسقانومىرٴى', 'ТҮЗЕТУНӨМІРІ', 'НҰСҚАНӨМІРІ', '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' ),
+       'plural'                    => array( '0', 'كوپشەتۇرى:', 'كوپشە:', 'КӨПШЕТҮРІ:', 'КӨПШЕ:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'تولىقجايى:', 'تولىقجاي:', 'ТОЛЫҚЖАЙЫ:', 'ТОЛЫҚЖАЙ:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'تولىقجايى2:', 'تولىقجاي2:', 'ТОЛЫҚЖАЙЫ2:', 'ТОЛЫҚЖАЙ2:', 'FULLURLE:' ),
+       'lcfirst'                   => array( '0', 'كا1:', 'كىشىارىپپەن1:', 'КӘ1:', 'КІШІӘРІППЕН1:', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', 'با1:', 'باسارىپپەن1:', 'БӘ1:', 'БАСӘРІППЕН1:', '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__' ),
+       '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:' ),
+       '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:' ),
+       'tag'                       => array( '0', 'بەلگى', 'белгі', 'tag' ),
+       'hiddencat'                 => array( '1', '__جاسىرىنسانات__', '__ЖАСЫРЫНСАНАТ__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'ساناتتاعىبەتتەر', 'САНАТТАҒЫБЕТТЕР', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'بەتمولشەرى', 'БЕТМӨЛШЕРІ', 'PAGESIZE' ),
 );
 
 $specialPageAliases = array(
index 1c042d3..28dec21 100644 (file)
@@ -147,130 +147,130 @@ $dateFormats = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#АЙДАУ', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__МАЗМҰНСЫЗ__', '__МСЫЗ__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__ҚОЙМАСЫЗ__', '__ҚСЫЗ__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__МАЗМҰНДАТҚЫЗУ__', '__МҚЫЗУ__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__МАЗМҰНЫ__', '__МЗМН__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__БӨЛІДІМӨНДЕМЕУ__', '__БӨЛІМӨНДЕТКІЗБЕУ__', '__NOEDITSECTION__' ),
-       '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' ),
-       'currentyear'             => array( '1', 'АҒЫМДАҒЫЖЫЛ', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'АҒЫМДАҒЫУАҚЫТ', 'CURRENTTIME' ),
-       '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' ),
-       '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' ),
-       'numberofusers'           => array( '1', 'ҚАТЫСУШЫСАНЫ', 'NUMBEROFUSERS' ),
-       'numberofedits'           => array( '1', 'ӨҢДЕМЕСАНЫ', 'ТҮЗЕТУСАНЫ', 'NUMBEROFEDITS' ),
-       'pagename'                => array( '1', 'БЕТАТАУЫ', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'БЕТАТАУЫ2', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'ЕСІМАЯСЫ', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'ЕСІМАЯСЫ2', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'ТАЛҚЫЛАУАЯСЫ', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'ТАЛҚЫЛАУАЯСЫ2', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'ТАҚЫРЫПБЕТІ', 'МАҚАЛАБЕТІ', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'ТАҚЫРЫПБЕТІ2', 'МАҚАЛАБЕТІ2', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'ТОЛЫҚБЕТАТАУЫ', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'ТОЛЫҚБЕТАТАУЫ2', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'БЕТШЕАТАУЫ', 'АСТЫҢҒЫБЕТАТАУЫ', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'БЕТШЕАТАУЫ2', 'АСТЫҢҒЫБЕТАТАУЫ2', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'НЕГІЗГІБЕТАТАУЫ', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'НЕГІЗГІБЕТАТАУЫ2', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'ТАЛҚЫЛАУБЕТАТАУЫ', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'ТАЛҚЫЛАУБЕТАТАУЫ2', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'ТАҚЫРЫПБЕТАТАУЫ', 'МАҚАЛАБЕТАТАУЫ', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'subjectpagenamee'        => array( '1', 'ТАҚЫРЫПБЕТАТАУЫ2', 'МАҚАЛАБЕТАТАУЫ2', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
-       'msg'                     => array( '0', 'ХБР:', 'MSG:' ),
-       'subst'                   => array( '0', 'БӘДЕЛ:', 'SUBST:' ),
-       'msgnw'                   => array( '0', 'УИКИСІЗХБР:', 'MSGNW:' ),
-       '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_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_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' ),
-       'int'                     => array( '0', 'ІШКІ:', 'INT:' ),
-       'sitename'                => array( '1', 'ТОРАПАТАУЫ', 'SITENAME' ),
-       'ns'                      => array( '0', 'ЕА:', 'ЕСІМАЯ:', 'NS:' ),
-       'localurl'                => array( '0', 'ЖЕРГІЛІКТІЖАЙ:', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'ЖЕРГІЛІКТІЖАЙ2:', 'LOCALURLE:' ),
-       'server'                  => array( '0', 'СЕРВЕР', 'SERVER' ),
-       'servername'              => array( '0', 'СЕРВЕРАТАУЫ', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'ӘМІРЖОЛЫ', 'SCRIPTPATH' ),
-       'grammar'                 => array( '0', 'СЕПТІГІ:', 'СЕПТІК:', 'GRAMMAR:' ),
-       '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', 'ТҮЗЕТУНӨМІРІ', 'НҰСҚАНӨМІРІ', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'ТҮЗЕТУКҮНІ', 'НҰСҚАКҮНІ', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'ТҮЗЕТУКҮНІ2', 'НҰСҚАКҮНІ2', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'ТҮЗЕТУАЙЫ', 'НҰСҚААЙЫ', 'REVISIONMONTH' ),
-       'revisionyear'            => array( '1', 'ТҮЗЕТУЖЫЛЫ', 'НҰСҚАЖЫЛЫ', 'REVISIONYEAR' ),
-       'revisiontimestamp'       => array( '1', 'ТҮЗЕТУУАҚЫТЫТАҢБАСЫ', 'НҰСҚАУАҚЫТТҮЙІНДЕМЕСІ', 'REVISIONTIMESTAMP' ),
-       'plural'                  => array( '0', 'КӨПШЕТҮРІ:', 'КӨПШЕ:', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'ТОЛЫҚЖАЙЫ:', 'ТОЛЫҚЖАЙ:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'ТОЛЫҚЖАЙЫ2:', 'ТОЛЫҚЖАЙ2:', 'FULLURLE:' ),
-       'lcfirst'                 => array( '0', 'КӘ1:', 'КІШІӘРІППЕН1:', 'LCFIRST:' ),
-       'ucfirst'                 => array( '0', 'БӘ1:', 'БАСӘРІППЕН1:', '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__' ),
-       '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:' ),
-       '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:' ),
-       'tag'                     => array( '0', 'белгі', 'tag' ),
-       'hiddencat'               => array( '1', '__ЖАСЫРЫНСАНАТ__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'САНАТТАҒЫБЕТТЕР', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'БЕТМӨЛШЕРІ', 'PAGESIZE' ),
+       'redirect'                  => array( '0', '#АЙДАУ', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__МАЗМҰНСЫЗ__', '__МСЫЗ__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__ҚОЙМАСЫЗ__', '__ҚСЫЗ__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__МАЗМҰНДАТҚЫЗУ__', '__МҚЫЗУ__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__МАЗМҰНЫ__', '__МЗМН__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__БӨЛІДІМӨНДЕМЕУ__', '__БӨЛІМӨНДЕТКІЗБЕУ__', '__NOEDITSECTION__' ),
+       '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' ),
+       'currentyear'               => array( '1', 'АҒЫМДАҒЫЖЫЛ', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'АҒЫМДАҒЫУАҚЫТ', 'CURRENTTIME' ),
+       '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' ),
+       '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' ),
+       'numberofusers'             => array( '1', 'ҚАТЫСУШЫСАНЫ', 'NUMBEROFUSERS' ),
+       'numberofedits'             => array( '1', 'ӨҢДЕМЕСАНЫ', 'ТҮЗЕТУСАНЫ', 'NUMBEROFEDITS' ),
+       'pagename'                  => array( '1', 'БЕТАТАУЫ', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'БЕТАТАУЫ2', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'ЕСІМАЯСЫ', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'ЕСІМАЯСЫ2', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'ТАЛҚЫЛАУАЯСЫ', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'ТАЛҚЫЛАУАЯСЫ2', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'ТАҚЫРЫПБЕТІ', 'МАҚАЛАБЕТІ', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'ТАҚЫРЫПБЕТІ2', 'МАҚАЛАБЕТІ2', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'ТОЛЫҚБЕТАТАУЫ', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'ТОЛЫҚБЕТАТАУЫ2', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'БЕТШЕАТАУЫ', 'АСТЫҢҒЫБЕТАТАУЫ', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'БЕТШЕАТАУЫ2', 'АСТЫҢҒЫБЕТАТАУЫ2', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'НЕГІЗГІБЕТАТАУЫ', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'НЕГІЗГІБЕТАТАУЫ2', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'ТАЛҚЫЛАУБЕТАТАУЫ', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'ТАЛҚЫЛАУБЕТАТАУЫ2', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'ТАҚЫРЫПБЕТАТАУЫ', 'МАҚАЛАБЕТАТАУЫ', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'          => array( '1', 'ТАҚЫРЫПБЕТАТАУЫ2', 'МАҚАЛАБЕТАТАУЫ2', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+       'msg'                       => array( '0', 'ХБР:', 'MSG:' ),
+       'subst'                     => array( '0', 'БӘДЕЛ:', 'SUBST:' ),
+       'msgnw'                     => array( '0', 'УИКИСІЗХБР:', 'MSGNW:' ),
+       '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_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_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' ),
+       'int'                       => array( '0', 'ІШКІ:', 'INT:' ),
+       'sitename'                  => array( '1', 'ТОРАПАТАУЫ', 'SITENAME' ),
+       'ns'                        => array( '0', 'ЕА:', 'ЕСІМАЯ:', 'NS:' ),
+       'localurl'                  => array( '0', 'ЖЕРГІЛІКТІЖАЙ:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'ЖЕРГІЛІКТІЖАЙ2:', 'LOCALURLE:' ),
+       'server'                    => array( '0', 'СЕРВЕР', 'SERVER' ),
+       'servername'                => array( '0', 'СЕРВЕРАТАУЫ', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'ӘМІРЖОЛЫ', 'SCRIPTPATH' ),
+       'grammar'                   => array( '0', 'СЕПТІГІ:', 'СЕПТІК:', 'GRAMMAR:' ),
+       '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', 'ТҮЗЕТУНӨМІРІ', 'НҰСҚАНӨМІРІ', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'ТҮЗЕТУКҮНІ', 'НҰСҚАКҮНІ', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'ТҮЗЕТУКҮНІ2', 'НҰСҚАКҮНІ2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'ТҮЗЕТУАЙЫ', 'НҰСҚААЙЫ', 'REVISIONMONTH' ),
+       'revisionyear'              => array( '1', 'ТҮЗЕТУЖЫЛЫ', 'НҰСҚАЖЫЛЫ', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'ТҮЗЕТУУАҚЫТЫТАҢБАСЫ', 'НҰСҚАУАҚЫТТҮЙІНДЕМЕСІ', 'REVISIONTIMESTAMP' ),
+       'plural'                    => array( '0', 'КӨПШЕТҮРІ:', 'КӨПШЕ:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'ТОЛЫҚЖАЙЫ:', 'ТОЛЫҚЖАЙ:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'ТОЛЫҚЖАЙЫ2:', 'ТОЛЫҚЖАЙ2:', 'FULLURLE:' ),
+       'lcfirst'                   => array( '0', 'КӘ1:', 'КІШІӘРІППЕН1:', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', 'БӘ1:', 'БАСӘРІППЕН1:', '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__' ),
+       '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:' ),
+       '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:' ),
+       'tag'                       => array( '0', 'белгі', 'tag' ),
+       'hiddencat'                 => array( '1', '__ЖАСЫРЫНСАНАТ__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'САНАТТАҒЫБЕТТЕР', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'БЕТМӨЛШЕРІ', 'PAGESIZE' ),
 );
 
 $specialPageAliases = array(
index 82b4cfb..c2524b7 100644 (file)
@@ -146,129 +146,129 @@ $dateFormats = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#AÝDAW', '#АЙДАУ', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__MAZMUNSIZ__', '__MSIZ__', '__МАЗМҰНСЫЗ__', '__МСЫЗ__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__QOÝMASIZ__', '__QSIZ__', '__ҚОЙМАСЫЗ__', '__ҚСЫЗ__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__MAZMUNDATQIZW__', '__MQIZW__', '__МАЗМҰНДАТҚЫЗУ__', '__МҚЫЗУ__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__MAZMUNI__', '__MZMN__', '__МАЗМҰНЫ__', '__МЗМН__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__BÖLİDİMÖNDEMEW__', '__BÖLİMÖNDETKİZBEW__', '__БӨЛІДІМӨНДЕМЕУ__', '__БӨЛІМӨНДЕТКІЗБЕУ__', '__NOEDITSECTION__' ),
-       'currentmonth'            => array( '1', 'AĞIMDAĞIAÝ', 'АҒЫМДАҒЫАЙ', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonthname'        => array( '1', 'AĞIMDAĞIAÝATAWI', 'АҒЫМДАҒЫАЙАТАУЫ', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'AĞIMDAĞIAÝİLİKATAWI', 'АҒЫМДАҒЫАЙІЛІКАТАУЫ', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'AĞIMDAĞIAÝJÏIR', 'AĞIMDAĞIAÝQISQA', 'АҒЫМДАҒЫАЙЖИЫР', 'АҒЫМДАҒЫАЙҚЫСҚА', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'AĞIMDAĞIKÜN', 'АҒЫМДАҒЫКҮН', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'AĞIMDAĞIKÜN2', 'АҒЫМДАҒЫКҮН2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'AĞIMDAĞIKÜNATAWI', 'АҒЫМДАҒЫКҮНАТАУЫ', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'AĞIMDAĞIJIL', 'АҒЫМДАҒЫЖЫЛ', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'AĞIMDAĞIWAQIT', 'АҒЫМДАҒЫУАҚЫТ', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'AĞIMDAĞISAĞAT', 'АҒЫМДАҒЫСАҒАТ', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'JERGİLİKTİAÝ', 'ЖЕРГІЛІКТІАЙ', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonthname'          => array( '1', 'JERGİLİKTİAÝATAWI', 'ЖЕРГІЛІКТІАЙАТАУЫ', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'JERGİLİKTİAÝİLİKATAWI', 'ЖЕРГІЛІКТІАЙІЛІКАТАУЫ', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'JERGİLİKTİAÝJÏIR', 'JERGİLİKTİAÝQISQAŞA', 'JERGİLİKTİAÝQISQA', 'ЖЕРГІЛІКТІАЙЖИЫР', 'ЖЕРГІЛІКТІАЙҚЫСҚАША', 'ЖЕРГІЛІКТІАЙҚЫСҚА', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'JERGİLİKTİKÜN', 'ЖЕРГІЛІКТІКҮН', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'JERGİLİKTİKÜN2', 'ЖЕРГІЛІКТІКҮН2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'JERGİLİKTİKÜNATAWI', 'ЖЕРГІЛІКТІКҮНАТАУЫ', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'JERGİLİKTİJIL', 'ЖЕРГІЛІКТІЖЫЛ', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'JERGİLİKTİWAQIT', 'ЖЕРГІЛІКТІУАҚЫТ', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'JERGİLİKTİSAĞAT', 'ЖЕРГІЛІКТІСАҒАТ', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'BETSANI', 'БЕТСАНЫ', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'MAQALASANI', 'МАҚАЛАСАНЫ', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'FAÝLSANI', 'ФАЙЛСАНЫ', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'QATISWŞISANI', 'ҚАТЫСУШЫСАНЫ', 'NUMBEROFUSERS' ),
-       'numberofedits'           => array( '1', 'ÖÑDEMESANI', 'TÜZETWSANI', 'ӨҢДЕМЕСАНЫ', 'ТҮЗЕТУСАНЫ', 'NUMBEROFEDITS' ),
-       'pagename'                => array( '1', 'BETATAWI', 'БЕТАТАУЫ', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'BETATAWI2', 'БЕТАТАУЫ2', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'ESİMAYASI', 'ЕСІМАЯСЫ', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'ESİMAYASI2', 'ЕСІМАЯСЫ2', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'TALQILAWAYASI', 'ТАЛҚЫЛАУАЯСЫ', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'TALQILAWAYASI2', 'ТАЛҚЫЛАУАЯСЫ2', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'TAQIRIPBETİ', 'MAQALABETİ', 'ТАҚЫРЫПБЕТІ', 'МАҚАЛАБЕТІ', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'TAQIRIPBETİ2', 'MAQALABETİ2', 'ТАҚЫРЫПБЕТІ2', 'МАҚАЛАБЕТІ2', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'TOLIQBETATAWI', 'ТОЛЫҚБЕТАТАУЫ', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'TOLIQBETATAWI2', 'ТОЛЫҚБЕТАТАУЫ2', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'BETŞEATAWI', 'ASTIÑĞIBETATAWI', 'БЕТШЕАТАУЫ', 'АСТЫҢҒЫБЕТАТАУЫ', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'BETŞEATAWI2', 'ASTIÑĞIBETATAWI2', 'БЕТШЕАТАУЫ2', 'АСТЫҢҒЫБЕТАТАУЫ2', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'NEGİZGİBETATAWI', 'НЕГІЗГІБЕТАТАУЫ', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'NEGİZGİBETATAWI2', 'НЕГІЗГІБЕТАТАУЫ2', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'TALQILAWBETATAWI', 'ТАЛҚЫЛАУБЕТАТАУЫ', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'TALQILAWBETATAWI2', 'ТАЛҚЫЛАУБЕТАТАУЫ2', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'TAQIRIPBETATAWI', 'MAQALABETATAWI', 'ТАҚЫРЫПБЕТАТАУЫ', 'МАҚАЛАБЕТАТАУЫ', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'subjectpagenamee'        => array( '1', 'TAQIRIPBETATAWI2', 'MAQALABETATAWI2', 'ТАҚЫРЫПБЕТАТАУЫ2', 'МАҚАЛАБЕТАТАУЫ2', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
-       'msg'                     => array( '0', 'XBR:', 'ХБР:', 'MSG:' ),
-       'subst'                   => array( '0', 'BÄDEL:', 'БӘДЕЛ:', 'SUBST:' ),
-       'msgnw'                   => array( '0', 'WÏKÏSİZXBR:', 'УИКИСІЗХБР:', 'MSGNW:' ),
-       'img_thumbnail'           => array( '1', 'nobaý', 'нобай', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'nobaý=$1', 'нобай=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'oñğa', 'oñ', 'оңға', 'оң', 'right' ),
-       'img_left'                => array( '1', 'solğa', 'sol', 'солға', 'сол', 'left' ),
-       'img_none'                => array( '1', 'eşqandaý', 'joq', 'ешқандай', 'жоқ', 'none' ),
-       'img_width'               => array( '1', '$1 nükte', '$1 нүкте', '$1px' ),
-       'img_center'              => array( '1', 'ortağa', 'orta', 'ортаға', 'орта', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'sürmeli', 'сүрмелі', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', 'sürmesiz', 'сүрмесіз', 'frameless' ),
-       'img_page'                => array( '1', 'bet=$1', 'bet $1', 'бет=$1', 'бет $1', 'page=$1', 'page $1' ),
-       'img_upright'             => array( '1', 'tikti', 'tiktik=$1', 'tiktik $1', 'тікті', 'тіктік=$1', 'тіктік $1', 'upright', 'upright=$1', 'upright $1' ),
-       'img_border'              => array( '1', 'jïekti', 'жиекті', 'border' ),
-       'img_baseline'            => array( '1', 'tirekjol', 'тірекжол', 'baseline' ),
-       'img_sub'                 => array( '1', 'astılığı', 'ast', 'астылығы', 'аст', 'sub' ),
-       'img_super'               => array( '1', 'üstiligi', 'üst', 'үстілігі', 'үст', 'super', 'sup' ),
-       'img_top'                 => array( '1', 'üstine', 'үстіне', 'top' ),
-       'img_text_top'            => array( '1', 'mätin-üstinde', 'мәтін-үстінде', 'text-top' ),
-       'img_middle'              => array( '1', 'aralığına', 'аралығына', 'middle' ),
-       'img_bottom'              => array( '1', 'astına', 'астына', 'bottom' ),
-       'img_text_bottom'         => array( '1', 'mätin-astında', 'мәтін-астында', 'text-bottom' ),
-       'int'                     => array( '0', 'İŞKİ:', 'ІШКІ:', 'INT:' ),
-       'sitename'                => array( '1', 'TORAPATAWI', 'ТОРАПАТАУЫ', 'SITENAME' ),
-       'ns'                      => array( '0', 'EA:', 'ESİMAYA:', 'ЕА:', 'ЕСІМАЯ:', 'NS:' ),
-       'localurl'                => array( '0', 'JERGİLİKTİJAÝ:', 'ЖЕРГІЛІКТІЖАЙ:', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'JERGİLİKTİJAÝ2:', 'ЖЕРГІЛІКТІЖАЙ2:', 'LOCALURLE:' ),
-       'servername'              => array( '0', 'SERVERATAWI', 'СЕРВЕРАТАУЫ', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'ÄMİRJOLI', 'ӘМІРЖОЛЫ', 'SCRIPTPATH' ),
-       'grammar'                 => array( '0', 'SEPTİGİ:', 'SEPTİK:', 'СЕПТІГІ:', 'СЕПТІК:', 'GRAMMAR:' ),
-       'notitleconvert'          => array( '0', '__TAQIRIPATINTÜRLENDİRGİZBEW__', '__TATJOQ__', '__ATAWALMASTIRĞIZBAW__', '__AABAW__', '__ТАҚЫРЫПАТЫНТҮРЛЕНДІРГІЗБЕУ__', '__ТАТЖОҚ__', '__АТАУАЛМАСТЫРҒЫЗБАУ__', '__ААБАУ__', '__NOTITLECONVERT__', '__NOTC__' ),
-       'nocontentconvert'        => array( '0', '__MAĞLUMATINTÜRLENDİRGİZBEW__', '__MATJOQ__', '__MAĞLUMATALMASTIRĞIZBAW__', '__MABAW__', '__МАҒЛҰМАТЫНТҮРЛЕНДІРГІЗБЕУ__', '__МАТЖОҚ__', '__МАҒЛҰМАТАЛМАСТЫРҒЫЗБАУ__', '__МАБАУ__', '__NOCONTENTCONVERT__', '__NOCC__' ),
-       'currentweek'             => array( '1', 'AĞIMDAĞIAPTASI', 'AĞIMDAĞIAPTA', 'АҒЫМДАҒЫАПТАСЫ', 'АҒЫМДАҒЫАПТА', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'AĞIMDAĞIAPTAKÜNİ', 'АҒЫМДАҒЫАПТАКҮНІ', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'JERGİLİKTİAPTASI', 'JERGİLİKTİAPTA', 'ЖЕРГІЛІКТІАПТАСЫ', 'ЖЕРГІЛІКТІАПТА', 'LOCALWEEK' ),
-       'localdow'                => array( '1', 'JERGİLİKTİAPTAKÜNİ', 'ЖЕРГІЛІКТІАПТАКҮНІ', 'LOCALDOW' ),
-       'revisionid'              => array( '1', 'TÜZETWNÖMİRİ', 'NUSQANÖMİRİ', 'ТҮЗЕТУНӨМІРІ', 'НҰСҚАНӨМІРІ', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'TÜZETWKÜNİ', 'NUSQAKÜNİ', 'ТҮЗЕТУКҮНІ', 'НҰСҚАКҮНІ', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'TÜZETWKÜNİ2', 'NUSQAKÜNİ2', 'ТҮЗЕТУКҮНІ2', 'НҰСҚАКҮНІ2', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'TÜZETWAÝI', 'NUSQAAÝI', 'ТҮЗЕТУАЙЫ', 'НҰСҚААЙЫ', 'REVISIONMONTH' ),
-       'revisionyear'            => array( '1', 'TÜZETWJILI', 'NUSQAJILI', 'ТҮЗЕТУЖЫЛЫ', 'НҰСҚАЖЫЛЫ', 'REVISIONYEAR' ),
-       'revisiontimestamp'       => array( '1', 'TÜZETWWAQITITAÑBASI', 'NUSQAWAQITTÜÝİNDEMESİ', 'ТҮЗЕТУУАҚЫТЫТАҢБАСЫ', 'НҰСҚАУАҚЫТТҮЙІНДЕМЕСІ', 'REVISIONTIMESTAMP' ),
-       'plural'                  => array( '0', 'KÖPŞETÜRİ:', 'KÖPŞE:', 'КӨПШЕТҮРІ:', 'КӨПШЕ:', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'TOLIQJAÝI:', 'TOLIQJAÝ:', 'ТОЛЫҚЖАЙЫ:', 'ТОЛЫҚЖАЙ:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'TOLIQJAÝI2:', 'TOLIQJAÝ2:', 'ТОЛЫҚЖАЙЫ2:', 'ТОЛЫҚЖАЙ2:', 'FULLURLE:' ),
-       'lcfirst'                 => array( '0', 'KÄ1:', 'KİŞİÄRİPPEN1:', 'КӘ1:', 'КІШІӘРІППЕН1:', 'LCFIRST:' ),
-       'ucfirst'                 => array( '0', 'BÄ1:', 'BASÄRİPPEN1:', 'БӘ1:', 'БАСӘРІППЕН1:', 'UCFIRST:' ),
-       'lc'                      => array( '0', 'KÄ:', 'KİŞİÄRİPPEN:', 'КӘ:', 'КІШІӘРІППЕН:', 'LC:' ),
-       'uc'                      => array( '0', 'BÄ:', 'BASÄRİPPEN:', 'БӘ:', 'БАСӘРІППЕН:', 'UC:' ),
-       'raw'                     => array( '0', 'QAM:', 'ҚАМ:', 'RAW:' ),
-       'displaytitle'            => array( '1', 'KÖRİNETİNTAQIRIAPATI', 'KÖRSETİLETİNATAW', 'КӨРІНЕТІНТАҚЫРЫАПАТЫ', 'КӨРСЕТІЛЕТІНАТАУ', 'DISPLAYTITLE' ),
-       'rawsuffix'               => array( '1', 'Q', 'Қ', 'R' ),
-       'newsectionlink'          => array( '1', '__JAÑABÖLİMSİLTEMESİ__', '__ЖАҢАБӨЛІМСІЛТЕМЕСІ__', '__NEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', 'BAĞDARLAMANUSQASI', 'БАҒДАРЛАМАНҰСҚАСЫ', 'CURRENTVERSION' ),
-       'urlencode'               => array( '0', 'JAÝDIMUQAMDAW:', 'ЖАЙДЫМҰҚАМДАУ:', 'URLENCODE:' ),
-       'anchorencode'            => array( '0', 'JÄKİRDİMUQAMDAW', 'ЖӘКІРДІМҰҚАМДАУ', 'ANCHORENCODE' ),
-       'currenttimestamp'        => array( '1', 'AĞIMDAĞIWAQITTÜÝİNDEMESİ', 'AĞIMDAĞIWAQITTÜÝİN', 'АҒЫМДАҒЫУАҚЫТТҮЙІНДЕМЕСІ', 'АҒЫМДАҒЫУАҚЫТТҮЙІН', 'CURRENTTIMESTAMP' ),
-       'localtimestamp'          => array( '1', 'JERGİLİKTİWAQITTÜÝİNDEMESİ', 'JERGİLİKTİWAQITTÜÝİN', 'ЖЕРГІЛІКТІУАҚЫТТҮЙІНДЕМЕСІ', 'ЖЕРГІЛІКТІУАҚЫТТҮЙІН', 'LOCALTIMESTAMP' ),
-       'directionmark'           => array( '1', 'BAĞITBELGİSİ', 'БАҒЫТБЕЛГІСІ', 'DIRECTIONMARK', 'DIRMARK' ),
-       'language'                => array( '0', '#TİL:', '#ТІЛ:', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', 'MAĞLUMATTİLİ', 'МАҒЛҰМАТТІЛІ', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'        => array( '1', 'ESİMAYABETSANI:', 'EABETSANI:', 'AYABETSANI:', 'ЕСІМАЯБЕТСАНЫ:', 'ЕАБЕТСАНЫ:', 'АЯБЕТСАНЫ:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'          => array( '1', 'ÄKİMŞİSANI', 'ӘКІМШІСАНЫ', 'NUMBEROFADMINS' ),
-       'formatnum'               => array( '0', 'SANPİŞİMİ', 'САНПІШІМІ', 'FORMATNUM' ),
-       'padleft'                 => array( '0', 'SOLĞAIĞIS', 'SOLIĞIS', 'СОЛҒАЫҒЫС', 'СОЛЫҒЫС', 'PADLEFT' ),
-       'padright'                => array( '0', 'OÑĞAIĞIS', 'OÑIĞIS', 'ОҢҒАЫҒЫС', 'ОҢЫҒЫС', 'PADRIGHT' ),
-       'special'                 => array( '0', 'arnaýı', 'арнайы', 'special' ),
-       'defaultsort'             => array( '1', 'ÄDEPKİSURIPTAW:', 'ÄDEPKİSANATSURIPTAW:', 'ÄDEPKİSURIPTAWKİLTİ:', 'ÄDEPKİSURIP:', 'ӘДЕПКІСҰРЫПТАУ:', 'ӘДЕПКІСАНАТСҰРЫПТАУ:', 'ӘДЕПКІСҰРЫПТАУКІЛТІ:', 'ӘДЕПКІСҰРЫП:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'filepath'                => array( '0', 'FAÝLMEKENİ:', 'ФАЙЛМЕКЕНІ:', 'FILEPATH:' ),
-       'tag'                     => array( '0', 'belgi', 'белгі', 'tag' ),
-       'hiddencat'               => array( '1', '__JASIRINSANAT__', '__ЖАСЫРЫНСАНАТ__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'SANATTAĞIBETTER', 'САНАТТАҒЫБЕТТЕР', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'BETMÖLŞERİ', 'БЕТМӨЛШЕРІ', 'PAGESIZE' ),
+       'redirect'                  => array( '0', '#AÝDAW', '#АЙДАУ', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__MAZMUNSIZ__', '__MSIZ__', '__МАЗМҰНСЫЗ__', '__МСЫЗ__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__QOÝMASIZ__', '__QSIZ__', '__ҚОЙМАСЫЗ__', '__ҚСЫЗ__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__MAZMUNDATQIZW__', '__MQIZW__', '__МАЗМҰНДАТҚЫЗУ__', '__МҚЫЗУ__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__MAZMUNI__', '__MZMN__', '__МАЗМҰНЫ__', '__МЗМН__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__BÖLİDİMÖNDEMEW__', '__BÖLİMÖNDETKİZBEW__', '__БӨЛІДІМӨНДЕМЕУ__', '__БӨЛІМӨНДЕТКІЗБЕУ__', '__NOEDITSECTION__' ),
+       'currentmonth'              => array( '1', 'AĞIMDAĞIAÝ', 'АҒЫМДАҒЫАЙ', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonthname'          => array( '1', 'AĞIMDAĞIAÝATAWI', 'АҒЫМДАҒЫАЙАТАУЫ', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'AĞIMDAĞIAÝİLİKATAWI', 'АҒЫМДАҒЫАЙІЛІКАТАУЫ', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'AĞIMDAĞIAÝJÏIR', 'AĞIMDAĞIAÝQISQA', 'АҒЫМДАҒЫАЙЖИЫР', 'АҒЫМДАҒЫАЙҚЫСҚА', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'AĞIMDAĞIKÜN', 'АҒЫМДАҒЫКҮН', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'AĞIMDAĞIKÜN2', 'АҒЫМДАҒЫКҮН2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'AĞIMDAĞIKÜNATAWI', 'АҒЫМДАҒЫКҮНАТАУЫ', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'AĞIMDAĞIJIL', 'АҒЫМДАҒЫЖЫЛ', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'AĞIMDAĞIWAQIT', 'АҒЫМДАҒЫУАҚЫТ', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'AĞIMDAĞISAĞAT', 'АҒЫМДАҒЫСАҒАТ', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'JERGİLİKTİAÝ', 'ЖЕРГІЛІКТІАЙ', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonthname'            => array( '1', 'JERGİLİKTİAÝATAWI', 'ЖЕРГІЛІКТІАЙАТАУЫ', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'JERGİLİKTİAÝİLİKATAWI', 'ЖЕРГІЛІКТІАЙІЛІКАТАУЫ', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'JERGİLİKTİAÝJÏIR', 'JERGİLİKTİAÝQISQAŞA', 'JERGİLİKTİAÝQISQA', 'ЖЕРГІЛІКТІАЙЖИЫР', 'ЖЕРГІЛІКТІАЙҚЫСҚАША', 'ЖЕРГІЛІКТІАЙҚЫСҚА', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'JERGİLİKTİKÜN', 'ЖЕРГІЛІКТІКҮН', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'JERGİLİKTİKÜN2', 'ЖЕРГІЛІКТІКҮН2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'JERGİLİKTİKÜNATAWI', 'ЖЕРГІЛІКТІКҮНАТАУЫ', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'JERGİLİKTİJIL', 'ЖЕРГІЛІКТІЖЫЛ', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'JERGİLİKTİWAQIT', 'ЖЕРГІЛІКТІУАҚЫТ', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'JERGİLİKTİSAĞAT', 'ЖЕРГІЛІКТІСАҒАТ', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'BETSANI', 'БЕТСАНЫ', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'MAQALASANI', 'МАҚАЛАСАНЫ', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'FAÝLSANI', 'ФАЙЛСАНЫ', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'QATISWŞISANI', 'ҚАТЫСУШЫСАНЫ', 'NUMBEROFUSERS' ),
+       'numberofedits'             => array( '1', 'ÖÑDEMESANI', 'TÜZETWSANI', 'ӨҢДЕМЕСАНЫ', 'ТҮЗЕТУСАНЫ', 'NUMBEROFEDITS' ),
+       'pagename'                  => array( '1', 'BETATAWI', 'БЕТАТАУЫ', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'BETATAWI2', 'БЕТАТАУЫ2', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'ESİMAYASI', 'ЕСІМАЯСЫ', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'ESİMAYASI2', 'ЕСІМАЯСЫ2', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'TALQILAWAYASI', 'ТАЛҚЫЛАУАЯСЫ', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'TALQILAWAYASI2', 'ТАЛҚЫЛАУАЯСЫ2', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'TAQIRIPBETİ', 'MAQALABETİ', 'ТАҚЫРЫПБЕТІ', 'МАҚАЛАБЕТІ', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'TAQIRIPBETİ2', 'MAQALABETİ2', 'ТАҚЫРЫПБЕТІ2', 'МАҚАЛАБЕТІ2', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'TOLIQBETATAWI', 'ТОЛЫҚБЕТАТАУЫ', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'TOLIQBETATAWI2', 'ТОЛЫҚБЕТАТАУЫ2', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'BETŞEATAWI', 'ASTIÑĞIBETATAWI', 'БЕТШЕАТАУЫ', 'АСТЫҢҒЫБЕТАТАУЫ', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'BETŞEATAWI2', 'ASTIÑĞIBETATAWI2', 'БЕТШЕАТАУЫ2', 'АСТЫҢҒЫБЕТАТАУЫ2', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'NEGİZGİBETATAWI', 'НЕГІЗГІБЕТАТАУЫ', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'NEGİZGİBETATAWI2', 'НЕГІЗГІБЕТАТАУЫ2', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'TALQILAWBETATAWI', 'ТАЛҚЫЛАУБЕТАТАУЫ', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'TALQILAWBETATAWI2', 'ТАЛҚЫЛАУБЕТАТАУЫ2', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'TAQIRIPBETATAWI', 'MAQALABETATAWI', 'ТАҚЫРЫПБЕТАТАУЫ', 'МАҚАЛАБЕТАТАУЫ', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'          => array( '1', 'TAQIRIPBETATAWI2', 'MAQALABETATAWI2', 'ТАҚЫРЫПБЕТАТАУЫ2', 'МАҚАЛАБЕТАТАУЫ2', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+       'msg'                       => array( '0', 'XBR:', 'ХБР:', 'MSG:' ),
+       'subst'                     => array( '0', 'BÄDEL:', 'БӘДЕЛ:', 'SUBST:' ),
+       'msgnw'                     => array( '0', 'WÏKÏSİZXBR:', 'УИКИСІЗХБР:', 'MSGNW:' ),
+       'img_thumbnail'             => array( '1', 'nobaý', 'нобай', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'nobaý=$1', 'нобай=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'oñğa', 'oñ', 'оңға', 'оң', 'right' ),
+       'img_left'                  => array( '1', 'solğa', 'sol', 'солға', 'сол', 'left' ),
+       'img_none'                  => array( '1', 'eşqandaý', 'joq', 'ешқандай', 'жоқ', 'none' ),
+       'img_width'                 => array( '1', '$1 nükte', '$1 нүкте', '$1px' ),
+       'img_center'                => array( '1', 'ortağa', 'orta', 'ортаға', 'орта', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'sürmeli', 'сүрмелі', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'sürmesiz', 'сүрмесіз', 'frameless' ),
+       'img_page'                  => array( '1', 'bet=$1', 'bet $1', 'бет=$1', 'бет $1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', 'tikti', 'tiktik=$1', 'tiktik $1', 'тікті', 'тіктік=$1', 'тіктік $1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_border'                => array( '1', 'jïekti', 'жиекті', 'border' ),
+       'img_baseline'              => array( '1', 'tirekjol', 'тірекжол', 'baseline' ),
+       'img_sub'                   => array( '1', 'astılığı', 'ast', 'астылығы', 'аст', 'sub' ),
+       'img_super'                 => array( '1', 'üstiligi', 'üst', 'үстілігі', 'үст', 'super', 'sup' ),
+       'img_top'                   => array( '1', 'üstine', 'үстіне', 'top' ),
+       'img_text_top'              => array( '1', 'mätin-üstinde', 'мәтін-үстінде', 'text-top' ),
+       'img_middle'                => array( '1', 'aralığına', 'аралығына', 'middle' ),
+       'img_bottom'                => array( '1', 'astına', 'астына', 'bottom' ),
+       'img_text_bottom'           => array( '1', 'mätin-astında', 'мәтін-астында', 'text-bottom' ),
+       'int'                       => array( '0', 'İŞKİ:', 'ІШКІ:', 'INT:' ),
+       'sitename'                  => array( '1', 'TORAPATAWI', 'ТОРАПАТАУЫ', 'SITENAME' ),
+       'ns'                        => array( '0', 'EA:', 'ESİMAYA:', 'ЕА:', 'ЕСІМАЯ:', 'NS:' ),
+       'localurl'                  => array( '0', 'JERGİLİKTİJAÝ:', 'ЖЕРГІЛІКТІЖАЙ:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'JERGİLİKTİJAÝ2:', 'ЖЕРГІЛІКТІЖАЙ2:', 'LOCALURLE:' ),
+       'servername'                => array( '0', 'SERVERATAWI', 'СЕРВЕРАТАУЫ', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'ÄMİRJOLI', 'ӘМІРЖОЛЫ', 'SCRIPTPATH' ),
+       'grammar'                   => array( '0', 'SEPTİGİ:', 'SEPTİK:', 'СЕПТІГІ:', 'СЕПТІК:', 'GRAMMAR:' ),
+       'notitleconvert'            => array( '0', '__TAQIRIPATINTÜRLENDİRGİZBEW__', '__TATJOQ__', '__ATAWALMASTIRĞIZBAW__', '__AABAW__', '__ТАҚЫРЫПАТЫНТҮРЛЕНДІРГІЗБЕУ__', '__ТАТЖОҚ__', '__АТАУАЛМАСТЫРҒЫЗБАУ__', '__ААБАУ__', '__NOTITLECONVERT__', '__NOTC__' ),
+       'nocontentconvert'          => array( '0', '__MAĞLUMATINTÜRLENDİRGİZBEW__', '__MATJOQ__', '__MAĞLUMATALMASTIRĞIZBAW__', '__MABAW__', '__МАҒЛҰМАТЫНТҮРЛЕНДІРГІЗБЕУ__', '__МАТЖОҚ__', '__МАҒЛҰМАТАЛМАСТЫРҒЫЗБАУ__', '__МАБАУ__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+       'currentweek'               => array( '1', 'AĞIMDAĞIAPTASI', 'AĞIMDAĞIAPTA', 'АҒЫМДАҒЫАПТАСЫ', 'АҒЫМДАҒЫАПТА', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'AĞIMDAĞIAPTAKÜNİ', 'АҒЫМДАҒЫАПТАКҮНІ', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'JERGİLİKTİAPTASI', 'JERGİLİKTİAPTA', 'ЖЕРГІЛІКТІАПТАСЫ', 'ЖЕРГІЛІКТІАПТА', 'LOCALWEEK' ),
+       'localdow'                  => array( '1', 'JERGİLİKTİAPTAKÜNİ', 'ЖЕРГІЛІКТІАПТАКҮНІ', 'LOCALDOW' ),
+       'revisionid'                => array( '1', 'TÜZETWNÖMİRİ', 'NUSQANÖMİRİ', 'ТҮЗЕТУНӨМІРІ', 'НҰСҚАНӨМІРІ', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'TÜZETWKÜNİ', 'NUSQAKÜNİ', 'ТҮЗЕТУКҮНІ', 'НҰСҚАКҮНІ', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'TÜZETWKÜNİ2', 'NUSQAKÜNİ2', 'ТҮЗЕТУКҮНІ2', 'НҰСҚАКҮНІ2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'TÜZETWAÝI', 'NUSQAAÝI', 'ТҮЗЕТУАЙЫ', 'НҰСҚААЙЫ', 'REVISIONMONTH' ),
+       'revisionyear'              => array( '1', 'TÜZETWJILI', 'NUSQAJILI', 'ТҮЗЕТУЖЫЛЫ', 'НҰСҚАЖЫЛЫ', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'TÜZETWWAQITITAÑBASI', 'NUSQAWAQITTÜÝİNDEMESİ', 'ТҮЗЕТУУАҚЫТЫТАҢБАСЫ', 'НҰСҚАУАҚЫТТҮЙІНДЕМЕСІ', 'REVISIONTIMESTAMP' ),
+       'plural'                    => array( '0', 'KÖPŞETÜRİ:', 'KÖPŞE:', 'КӨПШЕТҮРІ:', 'КӨПШЕ:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'TOLIQJAÝI:', 'TOLIQJAÝ:', 'ТОЛЫҚЖАЙЫ:', 'ТОЛЫҚЖАЙ:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'TOLIQJAÝI2:', 'TOLIQJAÝ2:', 'ТОЛЫҚЖАЙЫ2:', 'ТОЛЫҚЖАЙ2:', 'FULLURLE:' ),
+       'lcfirst'                   => array( '0', 'KÄ1:', 'KİŞİÄRİPPEN1:', 'КӘ1:', 'КІШІӘРІППЕН1:', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', 'BÄ1:', 'BASÄRİPPEN1:', 'БӘ1:', 'БАСӘРІППЕН1:', 'UCFIRST:' ),
+       'lc'                        => array( '0', 'KÄ:', 'KİŞİÄRİPPEN:', 'КӘ:', 'КІШІӘРІППЕН:', 'LC:' ),
+       'uc'                        => array( '0', 'BÄ:', 'BASÄRİPPEN:', 'БӘ:', 'БАСӘРІППЕН:', 'UC:' ),
+       'raw'                       => array( '0', 'QAM:', 'ҚАМ:', 'RAW:' ),
+       'displaytitle'              => array( '1', 'KÖRİNETİNTAQIRIAPATI', 'KÖRSETİLETİNATAW', 'КӨРІНЕТІНТАҚЫРЫАПАТЫ', 'КӨРСЕТІЛЕТІНАТАУ', 'DISPLAYTITLE' ),
+       'rawsuffix'                 => array( '1', 'Q', 'Қ', 'R' ),
+       'newsectionlink'            => array( '1', '__JAÑABÖLİMSİLTEMESİ__', '__ЖАҢАБӨЛІМСІЛТЕМЕСІ__', '__NEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'BAĞDARLAMANUSQASI', 'БАҒДАРЛАМАНҰСҚАСЫ', 'CURRENTVERSION' ),
+       'urlencode'                 => array( '0', 'JAÝDIMUQAMDAW:', 'ЖАЙДЫМҰҚАМДАУ:', 'URLENCODE:' ),
+       'anchorencode'              => array( '0', 'JÄKİRDİMUQAMDAW', 'ЖӘКІРДІМҰҚАМДАУ', 'ANCHORENCODE' ),
+       'currenttimestamp'          => array( '1', 'AĞIMDAĞIWAQITTÜÝİNDEMESİ', 'AĞIMDAĞIWAQITTÜÝİN', 'АҒЫМДАҒЫУАҚЫТТҮЙІНДЕМЕСІ', 'АҒЫМДАҒЫУАҚЫТТҮЙІН', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', 'JERGİLİKTİWAQITTÜÝİNDEMESİ', 'JERGİLİKTİWAQITTÜÝİN', 'ЖЕРГІЛІКТІУАҚЫТТҮЙІНДЕМЕСІ', 'ЖЕРГІЛІКТІУАҚЫТТҮЙІН', 'LOCALTIMESTAMP' ),
+       'directionmark'             => array( '1', 'BAĞITBELGİSİ', 'БАҒЫТБЕЛГІСІ', 'DIRECTIONMARK', 'DIRMARK' ),
+       'language'                  => array( '0', '#TİL:', '#ТІЛ:', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'MAĞLUMATTİLİ', 'МАҒЛҰМАТТІЛІ', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', 'ESİMAYABETSANI:', 'EABETSANI:', 'AYABETSANI:', 'ЕСІМАЯБЕТСАНЫ:', 'ЕАБЕТСАНЫ:', 'АЯБЕТСАНЫ:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', 'ÄKİMŞİSANI', 'ӘКІМШІСАНЫ', 'NUMBEROFADMINS' ),
+       'formatnum'                 => array( '0', 'SANPİŞİMİ', 'САНПІШІМІ', 'FORMATNUM' ),
+       'padleft'                   => array( '0', 'SOLĞAIĞIS', 'SOLIĞIS', 'СОЛҒАЫҒЫС', 'СОЛЫҒЫС', 'PADLEFT' ),
+       'padright'                  => array( '0', 'OÑĞAIĞIS', 'OÑIĞIS', 'ОҢҒАЫҒЫС', 'ОҢЫҒЫС', 'PADRIGHT' ),
+       'special'                   => array( '0', 'arnaýı', 'арнайы', 'special' ),
+       'defaultsort'               => array( '1', 'ÄDEPKİSURIPTAW:', 'ÄDEPKİSANATSURIPTAW:', 'ÄDEPKİSURIPTAWKİLTİ:', 'ÄDEPKİSURIP:', 'ӘДЕПКІСҰРЫПТАУ:', 'ӘДЕПКІСАНАТСҰРЫПТАУ:', 'ӘДЕПКІСҰРЫПТАУКІЛТІ:', 'ӘДЕПКІСҰРЫП:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'filepath'                  => array( '0', 'FAÝLMEKENİ:', 'ФАЙЛМЕКЕНІ:', 'FILEPATH:' ),
+       'tag'                       => array( '0', 'belgi', 'белгі', 'tag' ),
+       'hiddencat'                 => array( '1', '__JASIRINSANAT__', '__ЖАСЫРЫНСАНАТ__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'SANATTAĞIBETTER', 'САНАТТАҒЫБЕТТЕР', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'BETMÖLŞERİ', 'БЕТМӨЛШЕРІ', 'PAGESIZE' ),
 );
 
 $specialPageAliases = array(
index b7329fe..c9c09ff 100644 (file)
@@ -189,76 +189,76 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#បញ្ជូនបន្ត', '#ប្ដូរទីតាំងទៅ', '#ប្តូរទីតាំងទៅ', '#ប្ដូរទីតាំង', '#ប្តូរទីតាំង', '#ប្ដូរចំណងជើង', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__លាក់មាតិកា__', '__លាក់បញ្ជីអត្ថបទ__', '__គ្មានមាតិកា__', '__គ្មានបញ្ជីអត្ថបទ__', '__កុំបង្ហាញមាតិកា__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__លាក់វិចិត្រសាល__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__បង្ខំមាតិកា__', '__បង្ខំបញ្ជីអត្ថបទ__', '__បង្ខំអោយបង្ហាញមាតិកា__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__មាតិកា__', '__បញ្ជីអត្ថបទ__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__ផ្នែកមិនត្រូវកែប្រែ__', '__មិនមានផ្នែកកែប្រែ__', '__លាក់ផ្នែកកែប្រែ__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '__លាក់បឋមកថា__', '__NOHEADER__' ),
-       'currentmonth'            => array( '1', 'ខែនេះ', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonthname'        => array( '1', 'ឈ្មោះខែនេះ', 'CURRENTMONTHNAME' ),
-       'currentday'              => array( '1', 'ថ្ងៃនេះ', 'CURRENTDAY' ),
-       'currentdayname'          => array( '1', 'ឈ្មោះថ្ងៃនេះ', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'ឆ្នាំនេះ', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'ពេលនេះ', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'ម៉ោងនេះ', 'ម៉ោងឥឡូវ', 'CURRENTHOUR' ),
-       'localyear'               => array( '1', 'LOCALDAYNAME', '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' ),
-       'numberofedits'           => array( '1', 'ចំនួនកំណែប្រែ', 'NUMBEROFEDITS' ),
-       'pagename'                => array( '1', 'ឈ្មោះទំព័រ', 'PAGENAME' ),
-       'namespace'               => array( '1', 'លំហឈ្មោះ', 'NAMESPACE' ),
-       'talkspace'               => array( '1', 'លំហឈ្មោះទំព័រពិភាក្សា', 'TALKSPACE' ),
-       'fullpagename'            => array( '1', 'ឈ្មោះទំព័រពេញ', 'FULLPAGENAME' ),
-       'subpagename'             => array( '1', 'ឈ្មោះទំព័ររង', 'SUBPAGENAME' ),
-       'talkpagename'            => array( '1', 'ឈ្មោះទំព័រពិភាក្សា', 'TALKPAGENAME' ),
-       'msg'                     => array( '0', 'សារ:', 'MSG:' ),
-       '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' ),
-       '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', 'ទំព័រ=$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' ),
-       'img_link'                => array( '1', 'តំនភ្ជាប់=$1', 'តំណភ្ជាប់=$1', 'link=$1' ),
-       'sitename'                => array( '1', 'ឈ្មោះវិបសាយ', 'ឈ្មោះគេហទំព័រ', 'SITENAME' ),
-       'ns'                      => array( '0', 'លឈ:', 'NS:' ),
-       'server'                  => array( '0', 'ម៉ាស៊ីនបម្រើសេវា', 'SERVER' ),
-       'servername'              => array( '0', 'ឈ្មោះម៉ាស៊ីនបម្រើសេវា', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'ផ្លូវស្រ្គីប', 'SCRIPTPATH' ),
-       'grammar'                 => array( '0', 'វេយ្យាករណ៍:', 'GRAMMAR:' ),
-       'currentweek'             => array( '1', 'សប្ដាហ៍នេះ', 'CURRENTWEEK' ),
-       'plural'                  => array( '0', 'ពហុវចនៈ:', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'URLពេញ:', 'FULLURL:' ),
-       'displaytitle'            => array( '1', 'បង្ហាញចំណងជើង', 'បង្ហាញចំនងជើង', 'DISPLAYTITLE' ),
-       'rawsuffix'               => array( '1', 'រ', 'R' ),
-       'newsectionlink'          => array( '1', '__តំនភ្ជាប់ផ្នែកថ្មី__', '__តំណភ្ជាប់ផ្នែកថ្មី__', '__NEWSECTIONLINK__' ),
-       'language'                => array( '0', '#ភាសា:', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', 'កូដភាសា', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'numberofadmins'          => array( '1', 'ចំនួនអ្នកអភិបាល', 'ចំនួនអ្នកថែទាំប្រព័ន្ធ', 'NUMBEROFADMINS' ),
-       'special'                 => array( '0', 'ពិសេស', 'special' ),
-       '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__' ),
+       'redirect'                  => array( '0', '#បញ្ជូនបន្ត', '#ប្ដូរទីតាំងទៅ', '#ប្តូរទីតាំងទៅ', '#ប្ដូរទីតាំង', '#ប្តូរទីតាំង', '#ប្ដូរចំណងជើង', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__លាក់មាតិកា__', '__លាក់បញ្ជីអត្ថបទ__', '__គ្មានមាតិកា__', '__គ្មានបញ្ជីអត្ថបទ__', '__កុំបង្ហាញមាតិកា__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__លាក់វិចិត្រសាល__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__បង្ខំមាតិកា__', '__បង្ខំបញ្ជីអត្ថបទ__', '__បង្ខំអោយបង្ហាញមាតិកា__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__មាតិកា__', '__បញ្ជីអត្ថបទ__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__ផ្នែកមិនត្រូវកែប្រែ__', '__មិនមានផ្នែកកែប្រែ__', '__លាក់ផ្នែកកែប្រែ__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '__លាក់បឋមកថា__', '__NOHEADER__' ),
+       'currentmonth'              => array( '1', 'ខែនេះ', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonthname'          => array( '1', 'ឈ្មោះខែនេះ', 'CURRENTMONTHNAME' ),
+       'currentday'                => array( '1', 'ថ្ងៃនេះ', 'CURRENTDAY' ),
+       'currentdayname'            => array( '1', 'ឈ្មោះថ្ងៃនេះ', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'ឆ្នាំនេះ', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'ពេលនេះ', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'ម៉ោងនេះ', 'ម៉ោងឥឡូវ', 'CURRENTHOUR' ),
+       'localyear'                 => array( '1', 'LOCALDAYNAME', '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' ),
+       'numberofedits'             => array( '1', 'ចំនួនកំណែប្រែ', 'NUMBEROFEDITS' ),
+       'pagename'                  => array( '1', 'ឈ្មោះទំព័រ', 'PAGENAME' ),
+       'namespace'                 => array( '1', 'លំហឈ្មោះ', 'NAMESPACE' ),
+       'talkspace'                 => array( '1', 'លំហឈ្មោះទំព័រពិភាក្សា', 'TALKSPACE' ),
+       'fullpagename'              => array( '1', 'ឈ្មោះទំព័រពេញ', 'FULLPAGENAME' ),
+       'subpagename'               => array( '1', 'ឈ្មោះទំព័ររង', 'SUBPAGENAME' ),
+       'talkpagename'              => array( '1', 'ឈ្មោះទំព័រពិភាក្សា', 'TALKPAGENAME' ),
+       'msg'                       => array( '0', 'សារ:', 'MSG:' ),
+       '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' ),
+       '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', 'ទំព័រ=$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' ),
+       'img_link'                  => array( '1', 'តំនភ្ជាប់=$1', 'តំណភ្ជាប់=$1', 'link=$1' ),
+       'sitename'                  => array( '1', 'ឈ្មោះវិបសាយ', 'ឈ្មោះគេហទំព័រ', 'SITENAME' ),
+       'ns'                        => array( '0', 'លឈ:', 'NS:' ),
+       'server'                    => array( '0', 'ម៉ាស៊ីនបម្រើសេវា', 'SERVER' ),
+       'servername'                => array( '0', 'ឈ្មោះម៉ាស៊ីនបម្រើសេវា', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'ផ្លូវស្រ្គីប', 'SCRIPTPATH' ),
+       'grammar'                   => array( '0', 'វេយ្យាករណ៍:', 'GRAMMAR:' ),
+       'currentweek'               => array( '1', 'សប្ដាហ៍នេះ', 'CURRENTWEEK' ),
+       'plural'                    => array( '0', 'ពហុវចនៈ:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'URLពេញ:', 'FULLURL:' ),
+       'displaytitle'              => array( '1', 'បង្ហាញចំណងជើង', 'បង្ហាញចំនងជើង', 'DISPLAYTITLE' ),
+       'rawsuffix'                 => array( '1', 'រ', 'R' ),
+       'newsectionlink'            => array( '1', '__តំនភ្ជាប់ផ្នែកថ្មី__', '__តំណភ្ជាប់ផ្នែកថ្មី__', '__NEWSECTIONLINK__' ),
+       'language'                  => array( '0', '#ភាសា:', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'កូដភាសា', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'numberofadmins'            => array( '1', 'ចំនួនអ្នកអភិបាល', 'ចំនួនអ្នកថែទាំប្រព័ន្ធ', 'NUMBEROFADMINS' ),
+       'special'                   => array( '0', 'ពិសេស', 'special' ),
+       '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__' ),
 );
 
 $messages = array(
@@ -287,7 +287,7 @@ $messages = array(
 'tog-nocache' => 'មិនប្រើសតិភ្ជាប់​នៃ​ទំព័រ',
 'tog-enotifwatchlistpages' => 'ផ្ញើអ៊ីមែល​មកខ្ញុំ​កាលបើ​មានបំលាស់ប្ដូរនៃទំព័រ​ណាមួយដែលមានក្នុងបញ្ជីតាមដានរបស់ខ្ញុំ',
 'tog-enotifusertalkpages' => 'ផ្ញើអ៊ីមែល​មកខ្ញុំ​កាលបើ​មានបំលាស់ប្ដូរ​នៅ​ក្នុងទំព័រពិភាក្សា​របស់ខ្ញុំ',
-'tog-enotifminoredits' => 'á\9e\95á\9f\92á\9e\89á\9e¾á\9e¢á\9f\8aá\9e¸á\9e\98á\9f\82á\9e\9bâ\80\8bá\9e\98á\9e\80á\9e\81á\9f\92á\9e\89á\9e»á\9f\86á\9e\95á\9e\84á\9e\8aá\9f\82á\9e\9aâ\80\8bá\9e\85á\9f\86á\9e\96á\9f\84á\9f\87â\80\8bá\9e\94á\9f\86á\9e\9bá\9e¶á\9e\9fá\9f\8bá\9e\94á\9f\92á\9e\8aá\9e¼á\9e\9aá\9e\8fá\9e·á\9e\85á\9e\8fá\9e½á\9e\85​',
+'tog-enotifminoredits' => 'á\9e\95á\9f\92á\9e\89á\9e¾á\9e¢á\9f\8aá\9e¸á\9e\98á\9f\82á\9e\9bâ\80\8bá\9e\98á\9e\80á\9e\81á\9f\92á\9e\89á\9e»á\9f\86á\9e\96á\9f\81á\9e\9bá\9e\98á\9e¶á\9e\93á\9e\94á\9f\86á\9e\9bá\9e¶á\9e\9fá\9f\8bá\9e\94á\9f\92á\9e\8aá\9e¼á\9e\9aá\9e\8fá\9e·á\9e\85á\9e\8fá\9e½á\9e\85â\80\8bá\9e\9bá\9e¾á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e¬á\9e¯á\9e\80á\9e\9fá\9e¶á\9e\9aá\9e\95á\9e\84á\9e\8aá\9f\82á\9e\9a​',
 'tog-enotifrevealaddr' => 'បង្ហាញ​អាសយដ្ឋានអ៊ីមែល​របស់ខ្ញុំ​ក្នុង​​មែល​ក្រើនរំលឹក​នានា',
 'tog-shownumberswatching' => 'បង្ហាញ​ចំនួនអ្នកប្រើប្រាស់​ដែលតាមដាន​ទំព័រនេះ',
 'tog-oldsig' => 'ហត្ថលេខាមានហើយ៖',
@@ -528,6 +528,10 @@ $1',
 'youhavenewmessages' => 'អ្នកមាន $1 ($2)។',
 'newmessageslink' => 'សារថ្មីៗ',
 'newmessagesdifflink' => 'បំលាស់ប្ដូរចុងក្រោយ',
+'youhavenewmessagesfromusers' => 'អ្នកមាន $1 ទទួលបានពី {{PLURAL:$3|អ្នកប្រើប្រាស់ម្នាក់|អុ្នកប្រើប្រាស់ចំនួន $3 នាក់}} ($2)។',
+'youhavenewmessagesmanyusers' => 'អ្នកមាន $1 ទទួលបានពីអ្នកប្រើប្រាស់ជាច្រើន ($2)។',
+'newmessageslinkplural' => '{{PLURAL:$1|សារថ្មីមួយ|សារថ្មី}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|បំលាស់ប្ដូរ|បំលាស់ប្ដូរ}}ចុងក្រោយ',
 'youhavenewmessagesmulti' => 'អ្នកមានសារថ្មីៗនៅ $1',
 'editsection' => 'កែប្រែ',
 'editold' => 'កែប្រែ',
@@ -612,8 +616,8 @@ $1',
 'cannotdelete-title' => 'មិនអាចលុបទំព័រ "$1"',
 'badtitle' => 'ចំណងជើង​មិនល្អ',
 'badtitletext' => 'ចំណងជើងទំព័រដែលបានស្នើ គ្មានសុពលភាព, ទទេ, ឬ ចំណងជើងតំណភ្ជាប់អន្តរភាសាឬអន្តរវិគី មិនត្រឹមត្រូវ ។ ប្រហែលជាមានតួអក្សរមួយឬច្រើន ដែលជាតួអក្សរហាមប្រើ​ក្នុង​ចំណងជើង។',
-'perfcached' => 'ទិន្នន័យទាំងនេះត្រូវបានដាក់ទៅសតិភ្ជាប់និងប្រហែលជាមិនទាន់សម័យ ។ A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.',
-'perfcachedts' => 'ទិន្នន័យខាងក្រោមនេះត្រូវបានដាក់ក្នុងសតិភ្ជាប់ និង បានត្រូវបន្ទាន់សម័យចុងក្រោយនៅ $1។ A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.',
+'perfcached' => 'ទិន្នន័យទាំងនេះត្រូវបានដាក់ទៅសតិភ្ជាប់និងប្រហែលជាមិនទាន់សម័យ ។ ជាអតិបរមា {{PLURAL:$1|លទ្ធផលមួយ|លទ្ធផលចំនួន $1}} អាចប្រើបាននៅក្នុងសតិភ្ជាប់។',
+'perfcachedts' => 'ទិន្នន័យខាងក្រោមនេះត្រូវបានដាក់ក្នុងសតិភ្ជាប់ និង បានត្រូវបន្ទាន់សម័យចុងក្រោយនៅ $1។ ជាអតិបរមា {{PLURAL:$4|លទ្ធផលមួយ|លទ្ធផលចំនួន $4}} អាចប្រើបាននៅក្នុងសតិភ្ជាប់។',
 'querypage-no-updates' => 'ការបន្ទាន់សម័យសម្រាប់ទំព័រនេះគឺមិនអាចធ្វើទៅរួចទេនាពេលឥឡូវទេ។
 
 ទិន្នន័យនៅទីនេះនឹងមិនត្រូវផ្លាស់ប្ដូរថ្មីនាពេលបច្ចុប្បន្នទេ។',
@@ -640,6 +644,10 @@ $2',
 'ns-specialprotected' => 'ទំព័រពិសេសៗមិនអាចកែប្រែបានទេ។',
 'titleprotected' => "ចំណងជើងនេះត្រូវបានការពារមិនឱ្យបង្កើត​ដោយ [[User:$1|$1]]។
 ហេតុផលលើកឡើងគឺ ''$2''។",
+'filereadonlyerror' => 'មិនអាចកែប្រែឯកសារ "$1" បានទេពីព្រោះថតឯកសារ "$2" ស្ថិតក្នុងម៉ូដសំរាប់តែអានប៉ុណ្ណោះ។
+
+អភិបាលដែលបានចាក់សោរវាបានផ្ដល់សេចក្ដីពន្យល់បែបនេះ៖ "$3"។',
+'exception-nologin-text' => 'ទំព័រឬសកម្មភាពនេះតំរូវអោយអ្នកធ្វើការកត់ឈ្មោះចូលទៅក្នុងវិគីនេះ។',
 
 # Virus scanner
 'virus-badscanner' => "ការ​កំណត់​រចនា​សម្ព័ន្ធ​មិន​ល្អ​៖ កម្មវិធី​ស្កេន​មេរោគមិន​ស្គាល់​៖ ''$1''",
@@ -662,6 +670,7 @@ $2',
 'remembermypassword' => 'ចងចាំកំណត់ឈ្មោះចូលរបស់ខ្ញុំក្នុងកុំព្យូទ័រនេះ (សំរាប់រយៈពេលយូរបំផុត $1 {{PLURAL:$1|ថ្ងៃ|ថ្ងៃ}})',
 'securelogin-stick-https' => 'នៅភ្ជាប់ទៅ HTTPS ដដែលបន្ទាប់ពីចុះឈ្មោះចូលហើយក៏ដោយ',
 'yourdomainname' => 'ដូម៉ែនរបស់អ្នក៖',
+'password-change-forbidden' => 'អ្នកមិនអាចផ្លាស់ប្ដូរពាក្យសំងាត់ក្នុងវិគីនេះទេ។',
 'externaldberror' => 'មាន​​បញ្ហាក្នុងការ​បញ្ជាក់​ផ្ទៀង​ផ្ទាត់​​មូលដ្ឋាន​ទិន្នន័យ​ ឬ​អ្នក​មិន​ត្រូវ​បាន​អនុញ្ញាត​ឲ្យ​បន្ទាន់​សម័យ​គណនី​ខាង​ក្រៅ​របស់​អ្នក​។​
 ​',
 'login' => 'កត់ឈ្មោះចូល',
@@ -750,6 +759,7 @@ $2',
 
 សូមបញ្ចូល​អាសយដ្ឋានមួយ​ដែលមាន​ទម្រង់​ត្រឹមត្រូវ ឬមួយក៏ទុកវាលនោះឱ្យនៅទំនេរ​​។',
 'cannotchangeemail' => 'អាសយដ្ឋានអ៊ីមែលរបស់គណនីមិនអាចប្ដូរបានទេនៅលើវិគីនេះ។',
+'emaildisabled' => 'វិបសៃថ៍នេះមិនអាចផ្ញើអ៊ីមែលបានទេ។',
 'accountcreated' => 'គណនីរបស់លោកអ្នកត្រូវបានបង្កើតហើយ',
 'accountcreatedtext' => 'គណនីឈ្មោះ $1 ត្រូវបានបង្កើតហើយ។',
 'createaccount-title' => 'ការបង្កើតគណនីសម្រាប់{{SITENAME}}',
@@ -802,6 +812,25 @@ $2',
 'passwordreset-capture-help' => 'ប្រសិនបើអ្នកគូសធីកប្រអប់នេះ អ៊ីមែល (ដែលមានពាក្យសំងាត់បណ្ដោះអាសន្ន) មិនត្រូវបានបង្ហាញដូចគ្នានឹងអ៊ីមែលដែលនឹងត្រូវផ្ញើទៅទៅកាន់អ្នកប្រើប្រាស់ដែរ។',
 'passwordreset-email' => 'អាសយដ្ឋានអ៊ីមែល៖',
 'passwordreset-emailtitle' => 'ព័ត៌មានលំអិតពីគណនីនៅលើ {{SITENAME}}',
+'passwordreset-emailtext-ip' => 'មាននរណាម្នាក់ (ប្រហែលជាខ្លួនអ្នកផ្ទាល់, មកពីអាស័យដ្ឋាន IP $1) បានស្នើសុំសារក្រើនរំលឹកពីព័ត៌មានពិស្ដារ
+អំពីគណនីរបស់អ្នកសំរាប់ {{SITENAME}} ($4)។ {{PLURAL:$3|គណនី|គណនី}}អ្នកប្រើប្រាស់ដូចតទៅនេះ
+មានជាប់ទាក់ទិននឹងអាស័យដ្ឋានអ៊ីមែលនេះ៖
+
+$2
+
+{{PLURAL:$3|ពាក្យសំងាត់បណ្ដោះអាសន្ននេះ|ពាក្យសំងាត់បណ្ដោះអាសន្នទាំងនេះ}} និងហួសសុពលភាពក្នុងរយៈពេល {{PLURAL:$5|មួយថ្ងៃ|$5 ថ្ងៃ}}។
+យកល្អអ្នកគួរតែកត់ឈ្មោះរួចជ្រើសរើសពាក្យសំងាត់ថ្មីមួយ។ ប្រសិនបើមាននរណាម្នាក់ផ្សេងធ្វើការស្នើសុំនេះ 
+ឬប្រសិនបើអ្នកនឹកឃើញពាក្យសំងាត់ដើមរបស់អ្នកហើយអ្នកមិនប្រាថ្នាផ្លាស់ប្ដូរវាទៀតទេនោះ អ្នកគ្រាន់តែ
+កុំខ្វល់ជាមួយសារមួយនេះ ហើយបន្តប្រើប្រាស់ពាក្យសំងាត់ចាស់របស់អ្នកទៅបានហើយ។',
+'passwordreset-emailtext-user' => 'អ្នកប្រើប្រាស់ $1 នៅក្នុង {{SITENAME}} បានស្នើសុំសារក្រើនរំលឹកអំពីព័ត៌មានពិស្ដាររបស់គណនីរបស់អ្នកនៅក្នុង {{SITENAME}} ($4)។
+ {{PLURAL:$3|គណនី|គណនី}}អ្នកប្រើប្រាស់ដូចតទៅនេះមានជាប់ទាក់ទិននឹងអាស័យដ្ឋានអ៊ីមែលនេះ៖
+
+$2
+
+{{PLURAL:$3|ពាក្យសំងាត់បណ្ដោះអាសន្ននេះ|ពាក្យសំងាត់បណ្ដោះអាសន្នទាំងនេះ}} និងហួសសុពលភាពក្នុងរយៈពេល {{PLURAL:$5|មួយថ្ងៃ|$5 ថ្ងៃ}}។
+យកល្អអ្នកគួរតែកត់ឈ្មោះរួចជ្រើសរើសពាក្យសំងាត់ថ្មីមួយ។ ប្រសិនបើមាននរណាម្នាក់ផ្សេងធ្វើការស្នើសុំនេះ 
+ឬប្រសិនបើអ្នកនឹកឃើញពាក្យសំងាត់ដើមរបស់អ្នកហើយអ្នកមិនប្រាថ្នាផ្លាស់ប្ដូរវាទៀតទេនោះ អ្នកគ្រាន់តែ
+កុំខ្វល់ជាមួយសារមួយនេះ ហើយបន្តប្រើប្រាស់ពាក្យសំងាត់ចាស់របស់អ្នកទៅបានហើយ។',
 'passwordreset-emailelement' => 'ឈ្មោះអ្នកប្រើប្រាស់៖ $1
 លេខសម្ងាត់បណ្ដោះអាសន្ន៖ $2',
 'passwordreset-emailsent' => 'អីុមែលរំលឹកមួយបានផ្ញើទៅហើយ។',
@@ -930,12 +959,12 @@ $2',
 'userpage-userdoesnotexist-view' => 'គណនីអ្នកប្រើប្រាស់ដែលមានឈ្មោះ "$1"មិនទាន់បានចុះឈ្មោះទេ។',
 'blocked-notice-logextract' => 'អ្នកប្រើប្រាស់នេះត្រូវបានហាមឃាត់ហើយនាពេលនេះ។
 កំណត់ត្រាស្ដីពីការហាមឃាត់ចុងក្រោយមានបង្ហាញដូចខាងក្រោមនេះ៖',
-'clearyourcache' => "!'''សម្គាល់:''' បន្ទាប់ពីបានរក្សាទុករួចហើយ លោកអ្នកគួរតែសំអាត browser's cache របស់លោកអ្នកដើម្បីមើលការផ្លាស់ប្តូរ។ ខាងក្រោមនេះជាវិធីសំអាត browser's cache ចំពោះកម្មវិធីរុករក(Browser)មួយចំនួន។
-* ''' Firefox / Safari:''' សង្កត់ [Shift] ឱ្យជាប់រួចចុចប៊ូតុង ''Reload'' ឬក៏ចុច  ''Ctrl-F5'' ឬ ''Ctrl-R'' (ចំពោះApple Mac វិញ​ចុច ''Command-R'')
-* '''Google Chrome:''' ចុច ''Ctrl-Shift-R'' (''Command-Shift-R'' សំរាប់ Mac)
+'clearyourcache' => "'''សម្គាល់:''' បន្ទាប់ពីបានរក្សាទុករួចហើយ លោកអ្នកគួរតែសំអាត browser's cache របស់លោកអ្នកដើម្បីមើលការផ្លាស់ប្តូរ។ ខាងក្រោមនេះជាវិធីសំអាត browser's cache ចំពោះកម្មវិធីរុករក(Browser)មួយចំនួន។
+* ''' Firefox / Safari:''' សង្កត់ [Shift] ឱ្យជាប់រួចចុចប៊ូតុង ''Reload'' ឬក៏ចុច  ''Ctrl-F5'' ឬ ''Ctrl-R'' ( ''⌘-R'' សំរាប់ Mac)
+* '''Google Chrome:''' ចុច ''Ctrl-Shift-R'' (''-Shift-R'' សំរាប់ Mac)
 * '''IE(Internet Explorer):''' សង្កត់ [Ctrl] ឱ្យជាប់ រួចចុច ''Refresh''ប៊ូតុង ឬក៏ចុច ''Ctrl-F5''​។
 * '''Konqueror:''' ចុចប៊ូតុង  ''Reload'' ឬក៏ចុច ''F5''
-* '''Opera:''' á\9e\9fá\9e¼á\9e\98á\9e\85á\9e»á\9e\85  ''[Tools]â\86\92[Preferences]''â\80\8bá\9f\94",
+* '''Opera:''' á\9e\9fá\9e¼á\9e\98á\9e\9fá\9f\86á\9e¢á\9e¶á\9e\8fcacheá\9e\93á\9f\85á\9e\80á\9f\92á\9e\93á\9e»á\9e\84  ''[Tools]â\86\92[Preferences]''â\80\8b",
 'usercssyoucanpreview' => "'''គន្លឹះ ៖ ''' សូមប្រើប្រាស់ប៊ូតុង\"{{int:showpreview}}\"ដើម្បី​ធ្វើតេស្ត​សន្លឹក CSS ថ្មីរបស់អ្នក​មុននឹង​រក្សាទុកវា ។",
 'userjsyoucanpreview' => "'''គន្លឹះ ៖ ''' សូមប្រើប្រាស់​ប៊ូតុង \"{{int:showpreview}}\" ដើម្បី​ធ្វើតេស្ត​សន្លឹក JS ថ្មីរបស់អ្នក​មុននឹង​រក្សាទុកវា ។",
 'usercsspreview' => "'''កុំភ្លេចថា​អ្នកគ្រាន់តែ​កំពុងមើលជាមុនសន្លឹក CSS របស់អ្នក។
@@ -949,6 +978,7 @@ $2',
 'updated' => '(បានបន្ទាន់សម័យ)',
 'note' => "'''ចំណាំ៖'''",
 'previewnote' => "'''សូមចាំថានេះគ្រាន់តែជា​ការបង្ហាញការមើលជាមុនប៉ុណ្ណោះ។ បំលាស់ប្ដូរ​របស់អ្នកមិនទាន់បាន​រក្សាទុកទេ!'''",
+'continue-editing' => 'បន្តធ្វើការកែប្រែ',
 'previewconflict' => 'ការមើលមុននេះយោងតាមអត្ថបទក្នុងប្រអប់កែប្រែខាងលើ។ ទំព័រអត្ថបទនឹងបង្ហាញចេញបែបនេះប្រសិនបើអ្នកជ្រើសរើសរក្សាទុក។',
 'session_fail_preview' => "'''សូមអភ័យទោស! យើងមិនអាចរក្សាទុកការកែប្រែរបស់អ្នកបានទេ ដោយសារបាត់ទិន្នន័យវេនការងារ។
 
@@ -963,6 +993,7 @@ $2',
 
 បើនៅតែមិនបានទេ សូមព្យាយាម[[Special:UserLogout|កត់ឈ្មោះចេញ]] រួចកត់ឈ្មោះចូលឡើងវិញ។'''",
 'editing' => 'កំពុងកែប្រែ​ $1',
+'creating' => 'កំពុងបង្កើត $1',
 'editingsection' => "កំពុងកែប្រែ'''$1'''(ផ្នែក)",
 'editingcomment' => 'កែប្រែ $1 (ផ្នែកថ្មី)',
 'editconflict' => 'ភាពឆ្គងនៃកំណែប្រែ៖ $1',
@@ -1031,6 +1062,7 @@ $2',
 'edit-already-exists' => 'មិនអាចបង្កើតទំព័រថ្មីមួយទេ។
 
 ទំព័រនេះមានរួចហើយ។',
+'defaultmessagetext' => 'អត្ថបទសារតាមលំនាំដើម',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => "'''ប្រយ័ត្ន៖''' ទំព័រនេះមានប្រើអនុគមន៍ញែកច្រើនពេកហើយ។
@@ -1180,7 +1212,7 @@ $1",
 'suppressionlog' => 'កំណត់​ហេតុ​នៃ​ការ​ហាម​ឃាត់​',
 'suppressionlogtext' => 'ខាងក្រោមនេះជាបញ្ជីការលុបចោលនិងការហាមឃាត់ទាក់ទិននឹងខ្លឹមសារដែលអ្នកអភិបាលបានលាក់។
 
-សូមមើលបំរាមនិងការហាមឃាត់ដែលនៅជាធរមាននាពេលបច្ចុប្បន្ននៅក្នុង[[Special:BlockList|បញ្ជីនៃការហាមឃាត់ IP]]។',
+សូមមើលបំរាមនិងការហាមឃាត់ដែលនៅជាធរមាននាពេលបច្ចុប្បន្ននៅក្នុង[[Special:BlockList|បញ្ជីនៃការហាមឃាត់]]។',
 
 # History merging
 'mergehistory' => 'ច្របាច់ប្រវត្តិទាំងឡាយរបស់ទំព័របញ្ចូលគ្នា',
@@ -1212,7 +1244,9 @@ $1",
 'mergelogpagetext' => 'ខាងក្រោមគឺជាតារាងនៃការច្របាច់បញ្ចូលគ្នាថ្មីៗបំផុតរបស់ប្រវត្តិនៃទំព័រមួយទៅក្នុងប្រវត្តិនៃទំព័រមួយទៀត។',
 
 # Diffs
-'history-title' => 'ប្រវត្តិកំណែប្រែនានានៃ "$1"',
+'history-title' => 'ប្រវត្តិកំណែប្រែរបស់ "$1"',
+'difference-title' => 'ភាពខុសគ្នារវាងកំណែនានារបស់ "$1"',
+'difference-title-multipage' => 'ភាពខុសគ្នារបស់ទំព័រ "$1" និង "$2"',
 'difference-multipage' => '(ភាពខុសគ្នារវាងទំព័រនានា)',
 'lineno' => 'បន្ទាត់ទី$1៖',
 'compareselectedversions' => 'ប្រៀបធៀប​កំណែដែលបាន​ជ្រើសយក',
@@ -1220,6 +1254,10 @@ $1",
 'editundo' => 'មិនធ្វើវិញ',
 'diff-multi' => '({{PLURAL:$1|កំណែប្រែកម្រិតបង្គួរមួយ|កំណែប្រែកម្រិតបង្គួរចំនួន $1}}មិនត្រូវបានបង្ហាញ)',
 'diff-multi-manyusers' => '({{PLURAL:$1|កំណែប្រែកម្រិតបង្គួរមួយ|កំណែប្រែកម្រិតបង្គួរចំនួន $1}}មិនត្រូវបានបង្ហាញ)',
+'difference-missing-revision' => ' {{PLURAL:$2|រកមិនឃើញ|រកមិនឃើញ}}{{PLURAL:$2|កំណែមួយ|កំណែចំនួន $2}} របស់ភាពខុសគ្នានេះ ($1) ទេ។
+
+ជាធម្មតានេះបណ្ដាលមកពីការតាមទៅកាន់តំនភ្ជាប់ភាពខុសគ្នារបស់ទំព័រដែលត្រូវបានលុបចោល។
+ព័ត៌មានលំអិតអាចរកបាននៅក្នុង [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} កំណត់ហេតុនៃការលុបចោល]។',
 
 # Search results
 'searchresults' => 'លទ្ធផលស្វែងរក',
@@ -1310,6 +1348,7 @@ $1",
 'prefs-beta' => 'មុខងារពិសេសថ្មីៗរបស់ស៊េរីបេតា',
 'prefs-datetime' => 'កាលបរិច្ឆេទនិងល្វែងម៉ោង',
 'prefs-labs' => 'មុខងារពិសេសថ្មីៗដែលស្ថិតក្រោមការពិសោធន៍នៅឡើយ',
+'prefs-user-pages' => 'ទំព័រអ្នកប្រើប្រាស់',
 'prefs-personal' => 'ប្រវត្តិរូប',
 'prefs-rc' => 'បំលាស់ប្ដូរថ្មីៗ',
 'prefs-watchlist' => 'បញ្ជីតាមដាន',
@@ -1558,6 +1597,7 @@ $1",
 'action-userrights' => 'កែប្រែសិទ្ធិរបស់អ្នកប្រើប្រាស់ទាំងអស់',
 'action-userrights-interwiki' => 'កែប្រែសិទ្ធិនានារបស់អ្នកប្រើប្រាស់នៅលើវិគីដទៃ',
 'action-siteadmin' => 'ចាក់សោឬដោះសោមូលដ្ឋានទិន្នន័យ',
+'action-sendemail' => 'ផ្ញើអ៊ីមែល',
 
 # Recent changes
 'nchanges' => '$1 {{PLURAL:$1|បំលាស់ប្ដូរ|បំលាស់ប្ដូរ}}',
@@ -1590,9 +1630,11 @@ $1",
 'rc_categories' => 'កម្រិតទីតាំងចំណាត់ថ្នាក់ក្រុម(ខណ្ឌដោយសញ្ញា "|")',
 'rc_categories_any' => 'មួយណាក៏បាន',
 'rc-change-size' => '$1',
+'rc-change-size-new' => '$1 {{PLURAL:$1|បៃ|បៃ}} បន្ទាប់ពីបំលាស់ប្ដូរ',
 'newsectionsummary' => '/* $1 */ ផ្នែកថ្មី',
 'rc-enhanced-expand' => 'បង្ហាញព័ត៌មានលំអិត (តម្រូវអោយមាន JavaScript)',
 'rc-enhanced-hide' => 'លាក់ព័ត៌មានលំអិត',
+'rc-old-title' => 'បង្កើតឡើងដំបូងដោយ "$1"',
 
 # Recent changes linked
 'recentchangeslinked' => 'បន្លាស់ប្ដូរពាក់ព័ន្ធ',
@@ -1769,6 +1811,21 @@ $1',
 'upload-unknown-size' => 'មិនដឹងទំហំ',
 'upload-http-error' => 'មានកំហុសHTTPមួយបានកើតឡើង៖ $1',
 
+# File backend
+'backend-fail-notexists' => 'គ្មានឯកសារ "$1" ទេ។',
+'backend-fail-notsame' => 'ឯកសារដែលមិនដូចគ្នាបេះបិទមួយមានរួចហើយនៅ "$1"។',
+'backend-fail-delete' => 'មិនអាចលុបឯកសារ "$1" បានទេ។',
+'backend-fail-alreadyexists' => 'ឯកសារ "$1" មានរួចហើយ។',
+'backend-fail-store' => 'មិនអាចស្តុកឯកសារ "$1" នៅ "$2" បានទេ។',
+'backend-fail-copy' => 'មិនអាចចំលងឯកសារ "$1" ទៅ "$2" បានទេ។',
+'backend-fail-move' => 'មិនអាចផ្លាស់ប្ដូរទីតាំងឯកសារ "$1" ទៅ "$2"​ បានទេ។',
+'backend-fail-opentemp' => 'មិនអាចបើកឯកសារបណ្ដោះអាសន្ន។',
+'backend-fail-writetemp' => 'មិនអាចសរសេរទៅក្នុងឯកសារបណ្ដោះអាសន្ន។',
+'backend-fail-closetemp' => 'មិនអាចបិទឯកសារបណ្ដោះអាសន្ន។',
+'backend-fail-read' => 'មិនអាចអានឯកសារ "$1" បានទេ។',
+'backend-fail-create' => 'មិនអាចសរសេរឯកសារ "$1" បានទេ។',
+'backend-fail-maxsize' => 'មិនអាចសរសេរឯកសារ "$1" បានទេពីព្រោះវាមានទំហំធំជាង {{PLURAL:$2|មួយបៃ|$2 បៃ}}.',
+
 # Special:UploadStash
 'uploadstash-errclear' => 'ការសំអាតឯកសារមិនបានសំរេច។',
 'uploadstash-refresh' => 'ផ្ទុកបញ្ជីឯកសារឡើងវិញ',
@@ -2128,6 +2185,8 @@ $1',
 'mailnologin' => 'មិនមានអាសយដ្ឋានផ្ញើទេ',
 'mailnologintext' => 'អ្នកត្រូវតែ [[Special:UserLogin|កត់ឈ្មោះចូល]] និង មានអាសយដ្ឋានអ៊ីមែលមានសុពលភាពមួយ ក្នុង[[Special:Preferences|ចំណង់ចំណូលចិត្ត]]របស់អ្នក ដើម្បីមានសិទ្ធិផ្ញើអ៊ីមែលទៅអ្នកប្រើប្រាស់ដទៃទៀត។',
 'emailuser' => 'ផ្ញើអ៊ីមែល​ទៅកាន់​អ្នក​ប្រើប្រាស់នេះ',
+'emailuser-title-target' => 'ផ្ញើសារទៅកាន់ {{GENDER:$1|អ្នកប្រើប្រាស់}} នេះ',
+'emailuser-title-notarget' => 'ផ្ញើអ៊ីមែលទៅកាន់អ្នកប្រើប្រាស់',
 'emailpage' => 'ផ្ញើអ៊ីមែលទៅកាន់អ្នកប្រើប្រាស់',
 'emailpagetext' => 'អ្នក​អាច​ប្រើសំនុំ​បែប​បទ​ខាង​ក្រោម​ក្នុង​ការ​ផ្ញើ​សារ​ជា​អ៊ីមែល​ទៅ​កាន់​អ្នក​ប្រើប្រាស់​នេះ​។
 អាសយដ្ឋាន​អ៊ីមែល​ដែល​អ្នក​បាន​វាយ​បញ្ចូល​ក្នុង​[[Special:Preferences|ចំណង់ចំណូល​ចិត្ត​]]​របស់​អ្នក នឹង​បង្ហាញ​ជា​អាសយដ្ឋាន​អ៊ីមែល "From" ដូច្នោះ​អ្នក​ទទួល​នឹង​អាច​ឆ្លើយ​តប​ទៅ​អ្នក​វិញ​ដោយ​ផ្ទាល់​។',
@@ -2510,6 +2569,8 @@ $1',
 'ipb-confirm' => 'បញ្ជាក់ទទួលស្គាល់ការហាមឃាត់',
 'badipaddress' => 'អាសយដ្ឋានIPមិនត្រឹមត្រូវ',
 'blockipsuccesssub' => 'ដាក់ការហាមឃាត់បានសំរេច',
+'ipb-blockingself' => 'អ្នករៀបនឹងរាំងខ្ទប់ខ្លួនឯងហើយ! តើអ្នកប្រាកដថាចង់ធ្វើបែបនេះមែនទេ?',
+'ipb-confirmhideuser' => 'អ្នករៀបនឹងរាំងខ្ទប់អ្នកប្រើប្រាស់ម្នាក់ដែលមានប្រើមុខងារ "អ្នកប្រើប្រាស់លាក់មុខ"។ ការធ្វើបែបនេះនឹងលាក់ឈ្មោះរបស់អ្នកប្រើប្រាស់នេះនៅក្នុងបញ្ជីនិងកំណត់ហេតុទាំងអស់។ តើអ្នកប្រាកដថាចង់ធ្វើបែបនេះមែនទេ?',
 'ipb-edit-dropdown' => 'កែប្រែមូលហេតុនៃការហាមឃាត់',
 'ipb-unblock-addr' => 'ដកការហាមឃាត់លើ $1',
 'ipb-unblock' => 'ដកការហាមឃាត់លើអ្នកប្រើប្រាស់ ឬ អាសយដ្ឋាន IP',
@@ -2553,7 +2614,7 @@ $1',
 'blocklog-showlog' => 'អ្នកប្រើប្រាស់នេះត្រូវបានរាំងខ្ទប់មុននេះម្ដងហើយ។
 កំណត់ហេតុស្ដីពីការរាំងខ្ទប់ត្រូវបានផ្ដល់អោយដូចខាងក្រោម៖',
 'blocklogentry' => 'បានហាមឃាត់ [[$1]]​ដោយរយៈពេលផុតកំណត់$2 $3',
-'blocklogtext' => 'នេះជាកំណត់ហេតុនៃការហាមឃាត់និងឈប់ហាមឃាត់អ្នកប្រើប្រាស់។ អាសយដ្ឋានIPដែលត្រូវបានហាមឃាត់ដោយស្វ័យប្រវត្តិមិនត្រូវបានដាក់ក្នុងបញ្ជីនេះទេ។ សូមមើល[[Special:BlockList|បញ្ជីនៃការហាមឃាត់IP]]ចំពោះបញ្ជីនៃហាមឃាត់នាថ្មីៗ។',
+'blocklogtext' => 'នេះជាកំណត់ហេតុនៃការហាមឃាត់និងឈប់ហាមឃាត់អ្នកប្រើប្រាស់។ អាសយដ្ឋានIPដែលត្រូវបានហាមឃាត់ដោយស្វ័យប្រវត្តិមិនត្រូវបានដាក់ក្នុងបញ្ជីនេះទេ។ សូមមើល[[Special:BlockList|បញ្ជីនៃការហាមឃាត់]]ចំពោះបញ្ជីនៃហាមឃាត់នាថ្មីៗ។',
 'unblocklogentry' => 'បានឈប់ហាមឃាត់ $1',
 'block-log-flags-anononly' => 'សម្រាប់​តែ​អ្នកប្រើប្រាស់​អនាមិក​ប៉ុណ្ណោះ',
 'block-log-flags-nocreate' => 'ការបង្កើតគណនីត្រូវបានហាមឃាត់',
@@ -2869,11 +2930,30 @@ $1',
 
 # Info page
 'pageinfo-title' => 'ព័ត៌មានសម្រាប់ "$1"',
-'pageinfo-header-edits' => 'កែប្រែ',
+'pageinfo-header-basic' => 'ព័ត៌មាន​មូលដ្ឋាន​',
+'pageinfo-header-edits' => 'ប្រវត្តិកែប្រែ',
+'pageinfo-header-restrictions' => 'ការការពារទំព័រ',
+'pageinfo-header-properties' => 'លក្ខណៈសម្បត្តិទំព័រ',
+'pageinfo-display-title' => 'បង្ហាញចំណងជើង',
+'pageinfo-length' => 'ប្រវែងទំព័រ (គិតជាបៃ)',
+'pageinfo-article-id' => 'អត្តលេខទំព័រ',
+'pageinfo-robot-policy' => 'ស្ថានភាពម៉ាស៊ីនស្វែងរក',
 'pageinfo-views' => 'ចំនួនការបើកមើល',
-'pageinfo-watchers' => 'ចំនួនអ្នកតាមដាន',
-'pageinfo-edits' => 'ចំនួនកំណែប្រែ',
-'pageinfo-authors' => 'ចំនួនអ្នកនិពន្ធ',
+'pageinfo-watchers' => 'ចំនួនអ្នកតាមដានទំព័រ',
+'pageinfo-redirects-name' => 'ចំនួនការបញ្ជូនបន្តមកកាន់ទំព័រនេះ',
+'pageinfo-subpages-name' => 'ទំព័ររងរបស់ទំព័រនេះ',
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|ទំព័របញ្ជូនបន្ត|ទំព័របញ្ជូនបន្ត}}; $3 {{PLURAL:$3|ទំព័រមិនបញ្ជូនបន្ត|ទំព័រមិនបញ្ជូនបន្ត}})',
+'pageinfo-firstuser' => 'អ្នកបង្កើតទំព័រ',
+'pageinfo-firsttime' => 'កាលបរិច្ឆេទបង្កើតទំព័រ',
+'pageinfo-lastuser' => 'អ្នកកែប្រែចុងក្រោយ',
+'pageinfo-lasttime' => 'កាលបរិច្ឆេទនៃការកែប្រែចុងក្រោយ',
+'pageinfo-edits' => 'ចំនួនកំណែប្រែសរុប',
+'pageinfo-authors' => 'ចំនួនអ្នកនិពន្ធសរុប',
+'pageinfo-recent-edits' => 'ចំនួនការកែប្រែថ្មីៗ (ក្នុងរយៈពេល $1 កន្លងទៅនេះ)',
+'pageinfo-recent-authors' => 'ចំនួនអ្នកនិពន្ធថ្មីៗនេះ',
+'pageinfo-restriction' => 'ការការពារទំព័រ (<code>{{$1}}</code>)',
+'pageinfo-magic-words' => '{{PLURAL:$1|ពាក្យ|ពាក្យ}} វេទមន្ត ($1)',
+'pageinfo-hidden-categories' => '{{PLURAL:$1|ចំណាត់ថ្នាក់ក្រុម|ចំណាត់ថ្នាក់ក្រុម}}ដែលបានលាក់ ($1)',
 
 # Skin names
 'skinname-standard' => 'បុរាណ',
@@ -2920,9 +3000,12 @@ $1',
 'widthheightpage' => '$1 × $2, $3{{PLURAL:$3|ទំព័រ|ទំព័រ}}',
 'file-info' => 'ទំហំឯកសារ៖ $1, ប្រភេទ MIME ៖ $2',
 'file-info-size' => '$1 × $2 ភីកសែល ទំហំឯកសារ៖ $3 ប្រភេទ MIME៖ $4',
+'file-info-size-pages' => '$1 × $2 ភិចសែល, ទំហំឯកសារ: $3, ប្រភេទ MIME: $4, $5 {{PLURAL:$5|ទំព័រ|ទំព័រ}}',
 'file-nohires' => 'គ្មានភាពម៉ត់ ដែលខ្ពស់ជាង។',
 'svg-long-desc' => 'ឯកសារប្រភេទSVG  $1 × $2 ភីកសែល ទំហំឯកសារ៖ $3',
+'svg-long-desc-animated' => 'ឯកសារជីវចល SVG, ជាធម្មតា $1 × $2 ភិចសែល, ទំហំឯកសារ: $3',
 'show-big-image' => 'រូបភាពពេញ',
+'show-big-image-preview' => 'ទំហំរបស់ការមើលមុននេះ: $1។',
 'show-big-image-size' => '$1 × $2 ភីកសែ',
 'file-info-gif-looped' => 'រង្វិល',
 'file-info-gif-frames' => '$1 {{PLURAL:$1|ផ្ទាំង|ផ្ទាំង}}',
@@ -3054,6 +3137,33 @@ $1',
 'exif-specialinstructions' => 'ការណែនាំពិសេស',
 'exif-credit' => 'អ្នកផ្ដល់',
 'exif-source' => 'ប្រភព',
+'exif-contact' => 'ព័ត៌មានសំរាប់ធ្វើការទាក់ទង',
+'exif-writer' => 'អ្នកសរសេរ',
+'exif-languagecode' => 'ភាសា​',
+'exif-iimcategory' => 'ចំណាត់ថ្នាក់ក្រុម',
+'exif-iimsupplementalcategory' => 'ចំណាត់ថ្នាក់ក្រុមបំពេញ',
+'exif-datetimeexpires' => 'កុំប្រើបន្ទាប់ពី',
+'exif-datetimereleased' => 'ចេញផ្សាយនៅ',
+'exif-lens' => 'ឡង់ទីដែលបានប្រើ',
+'exif-cameraownername' => 'ម្ចាស់កាមេរ៉ា',
+'exif-label' => 'ផ្លាក',
+'exif-rating' => 'រង្វាយតំលៃ (ធំបំផុត ៥)',
+'exif-rightscertificate' => 'លិខិត្របញ្ជាក់ការគ្រប់គ្រងកម្មសិទ្ធបញ្ញា',
+'exif-copyrighted' => 'ស្ថានភាពកម្មសិទ្ធបញ្ញា',
+'exif-copyrightowner' => 'ម្ចាស់កម្មសិទ្ធិបញ្ញា',
+'exif-usageterms' => 'លក្ខខណ្ឌប្រើប្រាស់',
+'exif-webstatement' => 'សេចក្ដីប្រកាសកម្មសិទ្ធបញ្ញាលើអ៊ីនធើណិត',
+'exif-licenseurl' => 'URL សំរាប់អាជ្ញាបណ្ឌកម្មសិទ្ធបញ្ញា',
+'exif-morepermissionsurl' => 'ព័ត៌មានអាជ្ញាបណ្ឌជំនួស',
+'exif-attributionurl' => 'នៅពេលកែច្នៃស្នាដៃនេះយកទៅប្រើ សូមដាក់តំណភ្ជាប់ទៅ',
+'exif-preferredattributionname' => 'នៅពេលកែច្នៃស្នាដៃនេះយកទៅប្រើ សូមថ្លែងអំណរគុណដល់ម្ចាស់ដើម',
+'exif-pngfilecomment' => 'វិចារលើឯកសារ PNG',
+'exif-disclaimer' => 'ការបដិសេធ',
+'exif-contentwarning' => 'ការព្រមានអំពីខ្លឹមសារ',
+'exif-giffilecomment' => 'វិចារលើឯកសារ GIF',
+'exif-intellectualgenre' => 'ប្រភេទរបស់',
+'exif-originalimageheight' => 'កំពស់របស់រូបភាពមុនពេលកាត់តំរឹម',
+'exif-originalimagewidth' => 'ទទឹងរបស់រូបភាពមុនពេលកាត់តំរឹម',
 
 # EXIF attributes
 'exif-compression-1' => 'លែងបានបង្ហាប់',
@@ -3248,6 +3358,34 @@ $3
 
 $5
 
+កូដដើម្បីទទួលស្គាល់នេះនឹងផុតកំណត់នៅ  $4 ។',
+'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' => 'បោះបង់ចោលការបញ្ជាក់ទទួលស្គាល់អ៊ីមែល',
@@ -3400,7 +3538,7 @@ $5
 * <span class="mw-specialpagecached">ទំព័រពិសេសៗសំរាប់រក្សាទុក។</span>',
 'specialpages-group-maintenance' => 'របាយការណ៍នានាអំពីតំហែទាំ',
 'specialpages-group-other' => 'ទំព័រពិសេសៗផ្សេងៗទៀត',
-'specialpages-group-login' => 'á\9e\80á\9e\8fá\9f\8bá\9e\88á\9f\92á\9e\98á\9f\84á\9f\87á\9e\85á\9e¼á\9e\9b / á\9e\85á\9e»á\9f\87á\9e\88á\9f\92á\9e\98á\9f\84á\9f\87',
+'specialpages-group-login' => 'á\9e\80á\9e\8fá\9f\8bá\9e\88á\9f\92á\9e\98á\9f\84á\9f\87á\9e\85á\9e¼á\9e\9b / á\9e\94á\9e\84á\9f\92á\9e\80á\9e¾á\9e\8fá\9e\82á\9e\8eá\9e\93á\9e¸',
 'specialpages-group-changes' => 'បំលាស់ប្តូរថ្មីៗនិងកំណត់ហេតុ',
 'specialpages-group-media' => 'របាយការណ៍មេឌានិងការផ្ទុកឯកសារ',
 'specialpages-group-users' => 'អ្នកប្រើប្រាស់និងសិទ្ធិ',
@@ -3461,6 +3599,14 @@ $5
 'htmlform-selectorother-other' => 'ផ្សេងទៀត',
 
 # New logging system
+'logentry-delete-delete' => '$1 បានលុបទំព័រ $3 ចោល',
+'logentry-delete-restore' => '$1 បានស្ដារទំព័រ $3 ឡើងវិញ',
+'revdelete-content-hid' => 'ខ្លឹមសារត្រូវបានលាក់',
+'revdelete-summary-hid' => 'ចំណារពន្យល់ការកែប្រែត្រូវបានលាក់',
+'revdelete-uname-hid' => 'អត្តនាមត្រូវបានលាក់',
+'revdelete-content-unhid' => 'ខ្លឹមសារត្រូវបានបង្ហាញ',
+'revdelete-summary-unhid' => 'ចំណារពន្យល់ការកែប្រែត្រូវបានបង្ហាញ',
+'revdelete-uname-unhid' => 'អត្តនាមត្រូវបានបង្ហាញ',
 'revdelete-restricted' => 'បានអនុវត្តការដាក់កំហិតចំពោះអ្នកអភិបាល',
 'revdelete-unrestricted' => 'បានដកការដាក់កំហិតចេញសម្រាប់អ្នកអភិបាល',
 'logentry-move-move' => '$1 បានប្ដូរទីតាំងទំព័រ $3 ពី $4',
@@ -3473,7 +3619,35 @@ $5
 'logentry-newusers-autocreate' => 'គណនី $1 ត្រូវ បានបង្កើត ដោយស្វ័យប្រវត្តិ',
 'newuserlog-byemail' => 'ពាក្យសំងាត់ត្រូវបានផ្ញើតាមអ៊ីមែល',
 
+# Feedback
+'feedback-subject' => 'កម្មវត្ថុ ៖',
+'feedback-message' => 'សារ​៖',
+'feedback-cancel' => 'បោះបង់​',
+'feedback-submit' => 'ដាក់ស្នើមតិយោបល់',
+'feedback-adding' => 'កំពុងបន្ថែមមតិយោបល់ទៅលើទំព័រ...',
+'feedback-thanks' => 'សូមអរគុណ! មតិយោបល់របស់អ្នកត្រូវបានដាក់ផ្សាយនៅលើទំព័រ "[$2 $1]"។',
+'feedback-close' => 'រួចរាល់',
+
 # API errors
+'api-error-badaccess-groups' => 'អ្នកគ្មានការអនុញ្ញាតអោយផ្ទុកឯកសារឡើងទៅក្នុងវិគីនេះទេ។',
+'api-error-empty-file' => 'ឯកសារដែលអ្នកបានដាក់ស្នើគឺទទេ។',
+'api-error-emptypage' => 'ការអនុញ្ញាតអោយបង្កើតទំព័រថ្មីដែលគ្មានសរសេរអ្វីទេ',
+'api-error-fileexists-forbidden' => 'ឯកសារដែលមានឈ្មោះ "$1" មានរួចហើយ ហើយមិនអាចសរសេរជាន់ពីលើបានទេ។',
+'api-error-fileexists-shared-forbidden' => 'ឯកសារដែលមានឈ្មោះ "$1" មានរួចហើយនៅក្នុងថតឯកសាររួម ហើយមិនអាចសរសេរជាន់ពីលើបានទេ។',
+'api-error-file-too-large' => 'ឯកសារដែលអ្នកបានដាក់ស្នើធំពេកហើយ។',
+'api-error-filename-tooshort' => 'ឈ្មោះឯកសារខ្លីពេកហើយ។',
+'api-error-filetype-banned' => 'ឯកសារប្រភេទនេះត្រូវបានហាមប្រាម។',
+'api-error-filetype-banned-type' => '$1 {{PLURAL:$4|មិនមែនជា​ប្រភេទ​ឯកសារ​ដែល​ត្រូវ​បាន​គេ​អនុញ្ញាត​ទេ|មិនមែនជា​ប្រភេទ​ឯកសារ​ដែល​ត្រូវ​បាន​គេ​អនុញ្ញាត​ទេ​}}។
+{{PLURAL:$3|ប្រភេទឯកសារ​|ប្រភេទឯកសារ​}}ដែល​ត្រូវ​បាន​គេ​អនុញ្ញាត​គឺ $2 ។',
+'api-error-filetype-missing' => 'ឈ្មោះឯកសារបាត់កន្ទុយ។',
+'api-error-http' => 'បញ្ហាខាងក្នុង៖ មិនអាចភ្ជាប់ទោកាន់ម៉ាស៊ីនបំរើការ។',
+'api-error-illegal-filename' => 'មិនអនុញ្ញាតអោយប្រើឈ្មោះឯកសារនេះ។',
+'api-error-internal-error' => 'បញ្ហាខាងក្នុង៖ មានបញ្ហាណាមួយកើតឡើងពេលកំពុងដំណើរការផ្ទុកឯកសារអ្នកឡើងទៅក្នុងវិគី។',
+'api-error-missingresult' => 'បញ្ហាខាងក្នុង៖ មិនអាចកំណត់បានថាការថតចំលងបានសំរេចទេ។',
+'api-error-mustbeloggedin' => 'អ្នកត្រូវតែកត់ឈ្មោះចូលដើម្បីផ្ទុកឯកសារឡើង។',
+'api-error-ok-but-empty' => 'បញ្ហាខាងក្នុង៖ គ្មានចំលើយពីម៉ាស៊ីនបំរើការ។',
+'api-error-overwrite' => 'មិនអនុញ្ញាតអោយសរសេរជាន់ពីលើឯកសារដែលមានស្រាប់ហើយ។',
+'api-error-timeout' => 'ម៉ាស៊ីនបំរើការមិនបានឆ្លើយតបក្នុងរយៈពេលដែលយើងរំពឹងទុក។',
 'api-error-unclassified' => 'បញ្ហាមិនស្គាល់មួយបានកើតឡើង។',
 'api-error-unknown-code' => 'បញ្ហាមិនស្គាល់៖ "$1" ។',
 'api-error-unknown-error' => 'បញ្ហាខាងក្នុង៖ មានបញ្ហាមិនស្រួលពេលកំពុងព្យាយាមផ្ទុកឯកសាររបស់អ្នកឡើង។',
@@ -3482,4 +3656,14 @@ $5
 'api-error-uploaddisabled' => 'ការផ្ទុកឡើងត្រូវបានបិទមិនអោយប្រើនៅលើវិគីនេះទេ។',
 'api-error-verification-error' => 'ឯកសារនេះប្រហែលជាខូច ឯមានកន្ទុយមិនត្រឹមត្រូវ។',
 
+# Durations
+'duration-seconds' => '$1 {{PLURAL:$1|វិនាទី|វិនាទី}}',
+'duration-minutes' => '$1 {{PLURAL:$1|នាទី|នាទី}}',
+'duration-hours' => '$1 {{PLURAL:$1|ម៉ោង|ម៉ោង}}',
+'duration-days' => '$1 {{PLURAL:$1|ថ្ងៃ|ថ្ងៃ}}',
+'duration-weeks' => '$1 {{PLURAL: $1|សប្តាហ៍|សប្តាហ៍}}',
+'duration-years' => '$1 {{PLURAL:$1|ឆ្នាំ|ឆ្នាំ}}',
+'duration-decades' => '$1 {{PLURAL:$1|ទសវត្សរ៍|ទសវត្សរ៍}}',
+'duration-centuries' => '$1 {{PLURAL:$1|សតវត្សរ៍|សតវត្សរ៍}}',
+
 );
index a620255..68b3e9b 100644 (file)
@@ -21,6 +21,7 @@
  * @author IRTC1015
  * @author ITurtle
  * @author Idh0854
+ * @author Jmkim dot com
  * @author Kaganer
  * @author Klutzy
  * @author Kwj2772
@@ -73,8 +74,8 @@ $specialPageAliases = array(
        'Booksources'               => array( '책찾기' ),
        'BrokenRedirects'           => array( '끊긴넘겨주기' ),
        'Categories'                => array( '분류' ),
-       'ChangeEmail'               => array( 'ì\9d´ë©\94ì\9d¼ë³\80ê²½', 'ì\9d´ë©\94ì\9d¼ë°\94꾸기' ),
-       'ChangePassword'            => array( 'ë¹\84ë°\80ë²\88í\98¸ë³\80ê²½', 'ë¹\84ë°\80ë²\88í\98¸ë°\94꾸기', 'ë¹\84ë°\80ë\8b¨ì\96´ë³\80ê²½', 'ë¹\84ë°\80ë\8b¨ì\96´ë°\94꾸기' ),
+       'ChangeEmail'               => array( 'ì\9d´ë©\94ì\9d¼ë°\94꾸기', 'ì\9d´ë©\94ì\9d¼ë³\80ê²½' ),
+       'ChangePassword'            => array( 'ë¹\84ë°\80ë²\88í\98¸ë°\94꾸기', 'ë¹\84ë°\80ë²\88í\98¸ë³\80ê²½', 'ë¹\84ë°\80ë\8b¨ì\96´ë°\94꾸기', 'ë¹\84ë°\80ë\8b¨ì\96´ë³\80ê²½' ),
        'ComparePages'              => array( '문서비교' ),
        'Confirmemail'              => array( '이메일인증' ),
        'Contributions'             => array( '기여', '기여목록', '사용자기여' ),
@@ -108,6 +109,7 @@ $specialPageAliases = array(
        'MIMEsearch'                => array( 'MIME찾기', 'MIME검색' ),
        'Mostcategories'            => array( '많이분류된문서' ),
        'Mostimages'                => array( '많이쓰는파일', '많이쓰는그림' ),
+       'Mostinterwikis'            => array( '인터위키많은문서' ),
        'Mostlinked'                => array( '많이링크된문서' ),
        'Mostlinkedcategories'      => array( '많이쓰는분류' ),
        'Mostlinkedtemplates'       => array( '많이쓰는틀' ),
@@ -119,13 +121,13 @@ $specialPageAliases = array(
        'Myuploads'                 => array( '내가올린파일' ),
        'Newimages'                 => array( '새파일', '새그림' ),
        'Newpages'                  => array( '새문서' ),
-       'PasswordReset'             => array( '비밀번호초기화', '비밀단어초기화' ),
+       'PasswordReset'             => array( 'ë¹\84ë°\80ë²\88í\98¸ì\9e¬ì\84¤ì \95', 'ë¹\84ë°\80ë\8b¨ì\96´ì\9e¬ì\84¤ì \95', 'ë¹\84ë°\80ë²\88í\98¸ì´\88기í\99\94', 'ë¹\84ë°\80ë\8b¨ì\96´ì´\88기í\99\94' ),
        'PermanentLink'             => array( '고유링크', '영구링크' ),
        'Popularpages'              => array( '인기있는문서' ),
        'Preferences'               => array( '환경설정' ),
        'Prefixindex'               => array( '접두어찾기' ),
        'Protectedpages'            => array( '보호된문서' ),
-       'Protectedtitles'           => array( '생성보호된문서' ),
+       'Protectedtitles'           => array( '생성보호된문서', '만들기보호된문서' ),
        'Randompage'                => array( '임의문서' ),
        'Randomredirect'            => array( '임의넘겨주기' ),
        'Recentchanges'             => array( '최근바뀜' ),
@@ -164,159 +166,164 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#넘겨주기', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__목차숨김__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__화랑숨김__', '__갤러리숨김__', '__NOGALLERY__' ),
-       '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' ),
-       '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' ),
-       'localmonth'              => array( '1', '지역월', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', '지역월1', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', '지역월이름', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', '지역월이름소유격', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', '지역월이름약자', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', '지역일', 'LOCALDAY' ),
-       'localday2'               => array( '1', '지역일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' ),
-       'numberofusers'           => array( '1', '사용자수', '계정수', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', '활동중인사용자수', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', '편집수', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', '조회수', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', '문서이름', 'PAGENAME' ),
-       'pagenamee'               => array( '1', '문서이름E', 'PAGENAMEE' ),
-       'namespace'               => array( '1', '이름공간', 'NAMESPACE' ),
-       'namespacee'              => array( '1', '이름공간E', 'NAMESPACEE' ),
-       'namespacenumber'         => array( '1', '이름공간수', 'NAMESPACENUMBER' ),
-       'talkspace'               => array( '1', '토론이름공간', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', '토론이름공간E', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', '본문서이름공간', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', '본문서이름공간E', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', '전체문서이름', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', '전체문서이름E', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', '하위문서이름', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', '하위문서이름E', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', '상위문서이름', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', '상위문서이름E', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', '토론문서이름', 'TALKPAGENAME' ),
-       '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:' ),
-       'msgnw'                   => array( '0', '위키잘못메시지:', 'MSGNW:' ),
-       'img_thumbnail'           => array( '1', '섬네일', '썸네일', '축소판', 'thumbnail', 'thumb' ),
-       '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', 'page=$1', 'page $1' ),
-       'img_upright'             => array( '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_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:', '이름공간E:', 'NSE:' ),
-       'localurl'                => array( '0', '지역주소:', 'LOCALURL:' ),
-       'localurle'               => array( '0', '지역주소E:', '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' ),
-       '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:' ),
-       'fullurl'                 => array( '0', '전체주소:', 'FULLURL:' ),
-       'fullurle'                => array( '0', '전체주소E:', 'FULLURLE:' ),
-       'canonicalurl'            => array( '0', '표준주소:', 'CANONICALURL:' ),
-       'canonicalurle'           => array( '0', '표준주소E:', 'CANONICALURLE:' ),
-       'lcfirst'                 => array( '0', '첫소문자:', 'LCFIRST:' ),
-       'ucfirst'                 => array( '0', '첫대문자:', 'UCFIRST:' ),
-       'lc'                      => array( '0', '소문자:', 'LC:' ),
-       'uc'                      => array( '0', '대문자:', 'UC:' ),
-       'raw'                     => array( '0', '원시:', 'RAW:' ),
-       'displaytitle'            => array( '1', '제목보이기', '제목표시', 'DISPLAYTITLE' ),
-       '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:' ),
-       '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' ),
-       'speciale'                => array( '0', '특수기능E', '특수기능e', 'speciale' ),
-       '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__' ),
-       'numberingroup'           => array( '1', '권한별사용자수', '그룹별사용자수', 'NUMBERINGROUP', 'NUMINGROUP' ),
-       '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' ),
-       'defaultsort_noerror'     => array( '0', '오류없음', 'noerror' ),
-       'defaultsort_noreplace'   => array( '0', '바꾸기없음', 'noreplace' ),
+       'redirect'                  => array( '0', '#넘겨주기', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__목차숨김__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__화랑숨김__', '__갤러리숨김__', '__NOGALLERY__' ),
+       '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' ),
+       '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' ),
+       'localmonth'                => array( '1', '지역월', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', '지역월1', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', '지역월이름', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', '지역월이름소유격', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', '지역월이름약자', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', '지역일', 'LOCALDAY' ),
+       'localday2'                 => array( '1', '지역일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' ),
+       'numberofusers'             => array( '1', '사용자수', '계정수', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', '활동중인사용자수', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', '편집수', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', '조회수', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', '문서이름', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', '문서이름E', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', '이름공간', 'NAMESPACE' ),
+       'namespacee'                => array( '1', '이름공간E', 'NAMESPACEE' ),
+       'namespacenumber'           => array( '1', '이름공간수', 'NAMESPACENUMBER' ),
+       'talkspace'                 => array( '1', '토론이름공간', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', '토론이름공간E', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', '본문서이름공간', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', '본문서이름공간E', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', '전체문서이름', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', '전체문서이름E', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', '하위문서이름', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', '하위문서이름E', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', '상위문서이름', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', '상위문서이름E', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', '토론문서이름', 'TALKPAGENAME' ),
+       '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:' ),
+       'msgnw'                     => array( '0', '위키잘못메시지:', 'MSGNW:' ),
+       'img_thumbnail'             => array( '1', '섬네일', '썸네일', '축소판', 'thumbnail', 'thumb' ),
+       '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', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '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_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:', '이름공간E:', 'NSE:' ),
+       'localurl'                  => array( '0', '지역주소:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', '지역주소E:', 'LOCALURLE:' ),
+       'articlepath'               => array( '0', '항목경로', '기사경로', 'ARTICLEPATH' ),
+       'pageid'                    => array( '0', '문서번호', 'PAGEID' ),
+       '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' ),
+       '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:' ),
+       'fullurl'                   => array( '0', '전체주소:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', '전체주소E:', 'FULLURLE:' ),
+       'canonicalurl'              => array( '0', '표준주소:', 'CANONICALURL:' ),
+       'canonicalurle'             => array( '0', '표준주소E:', 'CANONICALURLE:' ),
+       'lcfirst'                   => array( '0', '첫소문자:', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', '첫대문자:', 'UCFIRST:' ),
+       'lc'                        => array( '0', '소문자:', 'LC:' ),
+       'uc'                        => array( '0', '대문자:', 'UC:' ),
+       'raw'                       => array( '0', '원본:', 'RAW:' ),
+       'displaytitle'              => array( '1', '제목보이기', '제목표시', 'DISPLAYTITLE' ),
+       '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:' ),
+       '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' ),
+       'speciale'                  => array( '0', '특수기능E', '특수기능e', 'speciale' ),
+       '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__' ),
+       'numberingroup'             => array( '1', '권한별사용자수', '그룹별사용자수', 'NUMBERINGROUP', 'NUMINGROUP' ),
+       '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' ),
+       'defaultsort_noerror'       => array( '0', '오류없음', 'noerror' ),
+       'defaultsort_noreplace'     => array( '0', '바꾸기없음', 'noreplace' ),
+       'pagesincategory_all'       => array( '0', '모두', 'all' ),
+       'pagesincategory_pages'     => array( '0', '문서', 'pages' ),
+       'pagesincategory_subcats'   => array( '0', '하위분류', 'subcats' ),
+       'pagesincategory_files'     => array( '0', '파일', 'files' ),
 );
 
 $bookstoreList = array(
@@ -601,9 +608,9 @@ $1',
 'youhavenewmessages' => '다른 사용자가 $1란에 글을 남겼습니다. ($2)',
 'newmessageslink' => '사용자 토론',
 'newmessagesdifflink' => '바뀐 내용 비교',
-'youhavenewmessagesfromusers' => '{{PLURAL:$3|다른 사용자|$3 사용자}}가 $1란에 글을 남겼습니다. ($2)',
+'youhavenewmessagesfromusers' => '{{PLURAL:$3|다른 사용자가|사용자 $3명이}} $1란에 글을 남겼습니다. ($2)',
 'youhavenewmessagesmanyusers' => '여러 사용자가 $1란에 글을 남겼습니다. ($2)',
-'newmessageslinkplural' => '{{PLURAL:$1|ì\83\88 ë©\94ì\8b\9cì§\80}}',
+'newmessageslinkplural' => '{{PLURAL:$1|ì\82¬ì\9a©ì\9e\90 í\86 ë¡ }}',
 'newmessagesdifflinkplural' => '최근 {{PLURAL:$1|바뀜}}',
 'youhavenewmessagesmulti' => '다른 사용자가 $1란에 글을 남겼습니다.',
 'editsection' => '편집',
@@ -1330,7 +1337,7 @@ $1",
 'mergelogpagetext' => '다음은 한 문서의 역사를 다른 문서의 역사와 합친 최근 기록입니다.',
 
 # Diffs
-'history-title' => '"$1"  문서의 바뀜 내역',
+'history-title' => '"$1" 문서의 바뀜 내역',
 'difference-title' => '"$1"의 두 판 사이의 차이',
 'difference-title-multipage' => '문서 "$1"(와)과 "$2" 사이의 차이',
 'difference-multipage' => '(문서 사이의 차이)',
@@ -1382,7 +1389,7 @@ $1",
 'search-result-score' => '유사도: $1%',
 'search-redirect' => '($1에서 넘어옴)',
 'search-section' => '($1 문단)',
-'search-suggest' => '$1 문서를 찾고 있요?',
+'search-suggest' => '$1 문서를 찾고 있으신가요?',
 'search-interwiki-caption' => '자매 프로젝트',
 'search-interwiki-default' => '$1 결과:',
 'search-interwiki-more' => '(더 보기)',
@@ -1422,7 +1429,7 @@ $1",
 
 # Preferences page
 'preferences' => '사용자 환경 설정',
-'mypreferences' => '내 사용자 환경 설정',
+'mypreferences' => '사용자 환경 설정',
 'prefs-edits' => '편집 횟수:',
 'prefsnologin' => '로그인하지 않음',
 'prefsnologintext' => '사용자 환경 설정을 바꾸려면 먼저 <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} 로그인]</span>해야 합니다.',
@@ -1492,7 +1499,7 @@ $1",
 'prefs-files' => '파일',
 'prefs-custom-css' => '사용자 CSS',
 'prefs-custom-js' => '사용자 자바스크립트',
-'prefs-common-css-js' => '모든 스킨에 대한 공통 CSS/JavaScript:',
+'prefs-common-css-js' => '모든 스킨에 대한 공통 CSS/자바스크립트:',
 'prefs-reset-intro' => '이 사이트의 기본값으로 환경 설정을 되돌릴 수 있습니다.
 복구할 수 없습니다.',
 'prefs-emailconfirm-label' => '이메일 인증:',
@@ -2060,6 +2067,7 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'shared-repo' => '공용 저장소',
 'shared-repo-name-wikimediacommons' => '위키미디어 공용',
 'filepage.css' => '/* 이 CSS 설정은 파일 설명 문서에 포함되며, 또한 해외 클라이언트 위키에 포함됩니다 */',
+'upload-disallowed-here' => '죄송하지만 이 그림을 덮어 쓸 수 없습니다.',
 
 # File reversion
 'filerevert' => '$1 되돌리기',
@@ -2148,7 +2156,7 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'doubleredirects' => '이중 넘겨주기 목록',
 'doubleredirectstext' => '이 문서는 다른 넘겨주기 문서로 넘겨주고 있는 문서의 목록입니다.
 매 줄에는 첫 번째 문서와 두 번째 문서의 링크가 있습니다. 그리고 보통 첫 번째 문서가 넘겨주어야 할 "실제" 문서인 두 번째 넘겨주기의 대상이 있습니다.
-<del>ì·¨ì\86\8cì\84 ì\9d´ ê·¸ì\9d¸</del> 부분은 이미 해결되었습니다.',
+<del>ì·¨ì\86\8cì\84 ì\9d´ ê·¸ì\96´ì§\84</del> 부분은 이미 해결되었습니다.',
 'double-redirect-fixed-move' => '[[$1]] 문서를 옮겼습니다.
 이 문서는 이제 [[$2]] 문서로 넘겨줍니다.',
 'double-redirect-fixed-maintenance' => '[[$1]]에서 [[$2]]로 이중 넘겨주기를 고치는 중',
@@ -3066,7 +3074,7 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 'tooltip-pt-anonuserpage' => '현재 사용하는 IP의 사용자 문서',
 'tooltip-pt-mytalk' => '내 토론 문서',
 'tooltip-pt-anontalk' => '현재 사용하는 IP를 위한 사용자 토론 문서',
-'tooltip-pt-preferences' => '내 사용자 환경 설정',
+'tooltip-pt-preferences' => '사용자 환경 설정',
 'tooltip-pt-watchlist' => '주시문서에 대한 바뀜 목록',
 'tooltip-pt-mycontris' => '내가 편집한 글',
 'tooltip-pt-login' => '꼭 로그인해야 하는 것은 아니지만, 로그인을 권장합니다.',
@@ -3202,6 +3210,8 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 'pageinfo-length' => '문서 길이 (바이트)',
 'pageinfo-article-id' => '문서 ID',
 'pageinfo-robot-policy' => '검색 엔진 통계',
+'pageinfo-robot-index' => '색인 가능',
+'pageinfo-robot-noindex' => '색인 불가능',
 'pageinfo-views' => '읽힌 횟수',
 'pageinfo-watchers' => '문서를 주시하는 사용자 수',
 'pageinfo-redirects-name' => '이 문서로 넘겨주기',
@@ -3216,9 +3226,9 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 'pageinfo-authors' => '총 서로 다른 편집자 수',
 'pageinfo-recent-edits' => '최근 편집 수 (지난 $1일 이내)',
 'pageinfo-recent-authors' => '최근 기여자 수',
-'pageinfo-restriction' => '문서 보호 ($1)',
-'pageinfo-magic-words' => '매직 워드 ($1개)',
-'pageinfo-hidden-categories' => '숨은 분류 ($1개)',
+'pageinfo-restriction' => '문서 보호 (<code>{{lcfirst:$1}}</code>)',
+'pageinfo-magic-words' => '매직 {{PLURAL:$1|워드}} ($1개)',
+'pageinfo-hidden-categories' => '숨은 {{PLURAL:$1|분류}} ($1개)',
 'pageinfo-templates' => '포함한 {{PLURAL:$1|틀}} ($1개)',
 
 # Skin names
@@ -3274,6 +3284,7 @@ $1',
 'file-info-size-pages' => '$1 × $2 픽셀, 파일 크기: $3, MIME 형식: $4, $5{{PLURAL:$5|쪽}}',
 'file-nohires' => '최대 해상도입니다.',
 'svg-long-desc' => 'SVG 파일, 실제 크기 $1 × $2 픽셀, 파일 크기: $3',
+'svg-long-desc-animated' => '애니메이션 SVG 파일, 실제 크기 $1 × $2 픽셀, 파일 크기: $3',
 'show-big-image' => '최대 해상도',
 'show-big-image-preview' => '미리 보기 크기: $1.',
 'show-big-image-other' => '다른 {{PLURAL:$2|해상도}}: $1.',
@@ -3283,6 +3294,8 @@ $1',
 'file-info-png-looped' => '반복됨',
 'file-info-png-repeat' => '$1번 재생됨',
 'file-info-png-frames' => '$1 프레임',
+'file-no-thumb-animation' => "'''참고: 기술적인 제한으로 인해 이 파일의 섬네일은 애니메이션을 지원하지 않습니다.'''",
+'file-no-thumb-animation-gif' => "'''참고: 기술적인 제한으로 인해 고해상도 GIF 그림 섬네일은 애니메이션을 지원하지 않습니다.'''",
 
 # Special:NewFiles
 'newimages' => '새 파일 목록',
index 66fe9b1..87015da 100644 (file)
@@ -197,13 +197,13 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#ÖMLEIDE_OP', '#ÖMLEIDE', '#LEIDT_ÖM_OP', '#ÖMLEIDUNG', '#WEITERLEITUNG', '#REDIRECT' ),
-       'nogallery'               => array( '0', '__KEIN_JALLERIE__', '__KEINE_GALERIE__', '__KEINEGALERIE__', '__NOGALLERY__' ),
-       'toc'                     => array( '0', '__ENHALLT__', '__INHALTSVERZEICHNIS__', '__TOC__' ),
-       'img_right'               => array( '1', 'rähß', 'räts', 'rechts', 'right' ),
-       'img_left'                => array( '1', 'lengks', 'lenks', 'links', 'left' ),
-       'language'                => array( '0', '#SHPROOCH:', '#SPROCH:', '#SPRACHE:', '#LANGUAGE:' ),
-       'hiddencat'               => array( '1', '__VERSHTOCHE_SAACHJRUPP__', '__VERSTECKTE_KATEGORIE__', '__WARTUNGSKATEGORIE__', '__HIDDENCAT__' ),
+       'redirect'                  => array( '0', '#ÖMLEIDE_OP', '#ÖMLEIDE', '#LEIDT_ÖM_OP', '#ÖMLEIDUNG', '#WEITERLEITUNG', '#REDIRECT' ),
+       'nogallery'                 => array( '0', '__KEIN_JALLERIE__', '__KEINE_GALERIE__', '__KEINEGALERIE__', '__NOGALLERY__' ),
+       'toc'                       => array( '0', '__ENHALLT__', '__INHALTSVERZEICHNIS__', '__TOC__' ),
+       'img_right'                 => array( '1', 'rähß', 'räts', 'rechts', 'right' ),
+       'img_left'                  => array( '1', 'lengks', 'lenks', 'links', 'left' ),
+       'language'                  => array( '0', '#SHPROOCH:', '#SPROCH:', '#SPRACHE:', '#LANGUAGE:' ),
+       'hiddencat'                 => array( '1', '__VERSHTOCHE_SAACHJRUPP__', '__VERSTECKTE_KATEGORIE__', '__WARTUNGSKATEGORIE__', '__HIDDENCAT__' ),
 );
 
 $imageFiles = array(
index 47e7f57..311aad5 100644 (file)
 $namespaceNames = array(
        NS_MEDIA            => 'Medya',
        NS_SPECIAL          => 'Taybet',
-       NS_TALK             => 'Nîqaş',
+       NS_TALK             => 'Gotûbêj',
        NS_USER             => 'Bikarhêner',
-       NS_USER_TALK        => 'Bikarhêner_nîqaş',
-       NS_PROJECT_TALK     => '$1_nîqaş',
+       NS_USER_TALK        => 'Gotûbêja_bikarhêner',
+       NS_PROJECT_TALK     => '$1_gotûbêj',
        NS_FILE             => 'Wêne',
-       NS_FILE_TALK        => 'Wêne_nîqaş',
+       NS_FILE_TALK        => 'Gotûbêja_wêneyî',
        NS_MEDIAWIKI        => 'MediaWiki',
-       NS_MEDIAWIKI_TALK   => 'MediaWiki_nîqaş',
+       NS_MEDIAWIKI_TALK   => 'Gotûbêja_MediaWiki',
        NS_TEMPLATE         => 'Şablon',
-       NS_TEMPLATE_TALK    => 'Şablon_nîqaş',
+       NS_TEMPLATE_TALK    => 'Gotûbêja_şablonê',
        NS_HELP             => 'Alîkarî',
-       NS_HELP_TALK        => 'Alîkarî_nîqaş',
+       NS_HELP_TALK        => 'Gotûbêja_alîkariyê',
        NS_CATEGORY         => 'Kategorî',
-       NS_CATEGORY_TALK    => 'Kategorî_nîqaş',
+       NS_CATEGORY_TALK    => 'Gotûbêja_kategoriyê',
 );
 
+$namespaceAliases = array(
+       'Nîqaş'            => NS_TALK,
+       'Bikarhêner_nîqaş' => NS_USER_TALK,
+       '$1_nîqaş'         => NS_PROJECT_TALK,
+       'Wêne_nîqaş'       => NS_FILE_TALK,
+       'MediaWiki_nîqaş'  => NS_MEDIAWIKI_TALK,
+       'Şablon_nîqaş'     => NS_TEMPLATE_TALK,
+       'Alîkarî_nîqaş'    => NS_HELP_TALK,
+       'Kategorî_nîqaş'   => NS_CATEGORY_TALK,
+);
 
 $specialPageAliases = array(
        'Categories'                => array( 'Dara_kategoriyan' ),
@@ -49,7 +59,8 @@ $specialPageAliases = array(
        'Randompage'                => array( 'Rûpela_tesadufî' ),
        'Randomredirect'            => array( 'Redirecta_tasadufî' ),
        'Recentchanges'             => array( 'Guherandinên_dawî' ),
-       'Search'                    => array( 'Lê_bigere' ),
+       'Search'                    => array( 'Lêgerîn' ),
+       'Shortpages'                => array( 'Rûpelên_kurt' ),
        'Statistics'                => array( 'Statîstîk' ),
        'Uncategorizedcategories'   => array( 'Kategoriyên_bê_kategorî' ),
        'Uncategorizedpages'        => array( 'Rûpelên_bê_kategorî' ),
@@ -59,33 +70,33 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#BERALÎKIRIN', '#REDIRECT' ),
-       'notoc'                   => array( '0', '_NAVEROKTUNE_', '__NOTOC__' ),
-       'nogallery'               => array( '0', '_GALERÎTUNE_', '__NOGALLERY__' ),
-       'toc'                     => array( '0', '_NAVEROK_', '__TOC__' ),
-       'noheader'                => array( '0', '_SERÎTUNE_', '__NOHEADER__' ),
-       'currentmonth1'           => array( '1', 'MEHANIHA1', 'CURRENTMONTH1' ),
-       'currentday'              => array( '1', 'ROJA_NIHA', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'ROJA_NIHA2', 'CURRENTDAY2' ),
-       'currenttime'             => array( '1', 'DEMA_NIHA', 'CURRENTTIME' ),
-       'numberofpages'           => array( '1', 'HEJMARA_RÛPELAN', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'HEJMARA_GOTARAN', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'HEJMARA_DOSYEYAN', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'HEJMARA_BIKARHÊNERAN', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'HEJMARA_BIKARHÊNERÊN_ÇALAK', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'HEJMARA_GUHERTINAN', 'NUMBEROFEDITS' ),
-       'subpagename'             => array( '1', 'BINRÛPEL', 'SUBPAGENAME' ),
-       'img_right'               => array( '1', 'rast', 'right' ),
-       'img_left'                => array( '1', 'çep', 'left' ),
-       'img_link'                => array( '1', 'girêdan=$', 'link=$1' ),
-       'sitename'                => array( '1', 'NAVÊ_PROJEYÊ', 'SITENAME' ),
-       'grammar'                 => array( '0', 'RÊZIMAN.', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'ZAYEND.', 'GENDER:' ),
-       'plural'                  => array( '0', 'PIRRJIMAR:', 'PLURAL:' ),
-       'currentversion'          => array( '1', 'VERSIYONA_NIHA', 'CURRENTVERSION' ),
-       'language'                => array( '0', '#ZIMAN', '#LANGUAGE:' ),
-       'numberofadmins'          => array( '1', 'HEJMARA_RÊVEBERAN', 'NUMBEROFADMINS' ),
-       'special'                 => array( '0', 'taybet', 'special' ),
+       'redirect'                  => array( '0', '#BERALÎKIRIN', '#REDIRECT' ),
+       'notoc'                     => array( '0', '_NAVEROKTUNE_', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '_GALERÎTUNE_', '__NOGALLERY__' ),
+       'toc'                       => array( '0', '_NAVEROK_', '__TOC__' ),
+       'noheader'                  => array( '0', '_SERÎTUNE_', '__NOHEADER__' ),
+       'currentmonth1'             => array( '1', 'MEHANIHA1', 'CURRENTMONTH1' ),
+       'currentday'                => array( '1', 'ROJA_NIHA', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'ROJA_NIHA2', 'CURRENTDAY2' ),
+       'currenttime'               => array( '1', 'DEMA_NIHA', 'CURRENTTIME' ),
+       'numberofpages'             => array( '1', 'HEJMARA_RÛPELAN', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'HEJMARA_GOTARAN', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'HEJMARA_DOSYEYAN', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'HEJMARA_BIKARHÊNERAN', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'HEJMARA_BIKARHÊNERÊN_ÇALAK', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'HEJMARA_GUHERTINAN', 'NUMBEROFEDITS' ),
+       'subpagename'               => array( '1', 'BINRÛPEL', 'SUBPAGENAME' ),
+       'img_right'                 => array( '1', 'rast', 'right' ),
+       'img_left'                  => array( '1', 'çep', 'left' ),
+       'img_link'                  => array( '1', 'girêdan=$', 'link=$1' ),
+       'sitename'                  => array( '1', 'NAVÊ_PROJEYÊ', 'SITENAME' ),
+       'grammar'                   => array( '0', 'RÊZIMAN.', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'ZAYEND.', 'GENDER:' ),
+       'plural'                    => array( '0', 'PIRRJIMAR:', 'PLURAL:' ),
+       'currentversion'            => array( '1', 'VERSIYONA_NIHA', 'CURRENTVERSION' ),
+       'language'                  => array( '0', '#ZIMAN', '#LANGUAGE:' ),
+       'numberofadmins'            => array( '1', 'HEJMARA_RÊVEBERAN', 'NUMBEROFADMINS' ),
+       'special'                   => array( '0', 'taybet', 'special' ),
 );
 
 $messages = array(
@@ -1566,7 +1577,7 @@ Ji bo jêbirinan û çêkirinên nû, ji kerema xwe li [[{{ns:special}}:Log/dele
 'sp-contributions-newbies' => 'Tenê beşdariyên bikarhênerên nû nîşan bide',
 'sp-contributions-newbies-sub' => 'Ji bikarhênerên nû re',
 'sp-contributions-newbies-title' => 'Tevkariyên bikarhêner ji bo hesabên nû',
-'sp-contributions-blocklog' => 'Astengkirina têketinê',
+'sp-contributions-blocklog' => 'astengkirina têketinê',
 'sp-contributions-deleted' => 'beşdariyên bikarhêner yên jêbirî',
 'sp-contributions-uploads' => 'yên barkirî',
 'sp-contributions-logs' => 'têketin',
index d41c07b..f22569b 100644 (file)
 
 $namespaceNames = array(
        NS_MEDIA            => 'Media',
-       NS_SPECIAL          => 'Arbennek',
-       NS_TALK             => 'Kescows',
+       NS_SPECIAL          => 'Arbednek',
+       NS_TALK             => 'Keskows',
        NS_USER             => 'Devnydhyer',
-       NS_USER_TALK        => 'Kescows_Devnydhyer',
-       NS_PROJECT_TALK     => 'Kescows_$1',
+       NS_USER_TALK        => 'Keskows_Devnydhyer',
+       NS_PROJECT_TALK     => 'Keskows_$1',
        NS_FILE             => 'Restren',
-       NS_FILE_TALK        => 'Kescows_Restren',
+       NS_FILE_TALK        => 'Keskows_Restren',
        NS_MEDIAWIKI        => 'MediaWiki',
-       NS_MEDIAWIKI_TALK   => 'Kescows_MediaWiki',
-       NS_TEMPLATE         => 'Scantlyn',
-       NS_TEMPLATE_TALK    => 'Kescows_Scantlyn',
+       NS_MEDIAWIKI_TALK   => 'Keskows_MediaWiki',
+       NS_TEMPLATE         => 'Skantlyn',
+       NS_TEMPLATE_TALK    => 'Keskows_Skantlyn',
        NS_HELP             => 'Gweres',
-       NS_HELP_TALK        => 'Kescows_Gweres',
-       NS_CATEGORY         => 'Class',
-       NS_CATEGORY_TALK    => 'Kescows_Class',
+       NS_HELP_TALK        => 'Keskows_Gweres',
+       NS_CATEGORY         => 'Klass',
+       NS_CATEGORY_TALK    => 'Keskows_Klass',
 );
 
 $namespaceAliases = array(
-       'Arbednek'           => NS_SPECIAL,
+       'Arbennek'           => NS_SPECIAL,
        'Cows'               => NS_TALK,
-       'Keskows'            => NS_TALK,
+       'Kescows'            => NS_TALK,
        'Cows_Devnydhyer'    => NS_USER_TALK,
-       'Keskows_Devnydhyer' => NS_USER_TALK,
+       'Kescows_Devnydhyer' => NS_USER_TALK,
        'Cows_$1'            => NS_PROJECT_TALK,
-       'Keskows_$1'         => NS_PROJECT_TALK,
+       'Kescows_$1'         => NS_PROJECT_TALK,
        'Cows_Restren'       => NS_FILE_TALK,
-       'Keskows_Restren'    => NS_FILE_TALK,
+       'Kescows_Restren'    => NS_FILE_TALK,
        'Cows_MediaWiki'     => NS_MEDIAWIKI_TALK,
-       'Keskows_MediaWiki'  => NS_MEDIAWIKI_TALK,
+       'Kescows_MediaWiki'  => NS_MEDIAWIKI_TALK,
        'Cows_Scantlyn'      => NS_TEMPLATE_TALK,
-       'Skantlyn'           => NS_TEMPLATE,
-       'Keskows_Skantlyn'   => NS_TEMPLATE_TALK,
+       'Scantlyn'           => NS_TEMPLATE,
+       'Kescows_Skantlyn'   => NS_TEMPLATE_TALK,
        'Cows_Gweres'        => NS_HELP_TALK,
-       'Keskows_Gweres'     => NS_HELP_TALK,
+       'Kescows_Gweres'     => NS_HELP_TALK,
        'Cows_Class'         => NS_CATEGORY_TALK,
-       'Klass'              => NS_CATEGORY,
-       'Keskows_Klass'      => NS_CATEGORY_TALK,
+       'Class'              => NS_CATEGORY,
+       'Kescows_Class'      => NS_CATEGORY_TALK,
 );
 
 $specialPageAliases = array(
index 5a877bc..961b81f 100644 (file)
@@ -400,6 +400,10 @@ Vide [[Special:Version|paginam versionis]].',
 'youhavenewmessages' => 'Habes $1 ($2).',
 'newmessageslink' => 'nuntia nova',
 'newmessagesdifflink' => 'dissimilia post mutationem ultimam',
+'youhavenewmessagesfromusers' => 'Habes $1 ab {{PLURAL:$3|uno usore alio|usoribus $3}} ($2).',
+'youhavenewmessagesmanyusers' => 'Habes $1 a multis usoribus ($2).',
+'newmessageslinkplural' => '{{PLURAL:$1|nuntium novum|nuntia nova}}',
+'newmessagesdifflinkplural' => 'dissimilitudo post mutationem ultimam',
 'youhavenewmessagesmulti' => 'Habes nuntia nova in $1',
 'editsection' => 'recensere',
 'editold' => 'recensere',
index 58bae9e..f2bccbf 100644 (file)
@@ -172,12 +172,12 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#DIRIJAR', '#DIRECCIÓN', '#REDIRECCIÓN', '#REDIRECCION', '#REDIRECT' ),
-       'fullpagename'            => array( '1', 'NOMBREDEHOJACOMPLETA', 'NOMBREDEPÁGINACOMPLETA', 'NOMBREDEPAGINACOMPLETA', 'NOMBREDEPÁGINAENTERA', 'NOMBREDEPAGINAENTERA', 'NOMBRECOMPLETODEPÁGINA', 'NOMBRECOMPLETODEPAGINA', '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' ),
+       'redirect'                  => array( '0', '#DIRIJAR', '#DIRECCIÓN', '#REDIRECCIÓN', '#REDIRECCION', '#REDIRECT' ),
+       'fullpagename'              => array( '1', 'NOMBREDEHOJACOMPLETA', 'NOMBREDEPÁGINACOMPLETA', 'NOMBREDEPAGINACOMPLETA', 'NOMBREDEPÁGINAENTERA', 'NOMBREDEPAGINAENTERA', 'NOMBRECOMPLETODEPÁGINA', 'NOMBRECOMPLETODEPAGINA', '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(
index a70bc6d..36efed7 100644 (file)
@@ -27,7 +27,7 @@ $namespaceNames = array(
        NS_TALK             => 'Diskussioun',
        NS_USER             => 'Benotzer',
        NS_USER_TALK        => 'Benotzer_Diskussioun',
-       NS_PROJECT_TALK     => '$1 Diskussioun',
+       NS_PROJECT_TALK     => '$1_Diskussioun',
        NS_FILE             => 'Fichier',
        NS_FILE_TALK        => 'Fichier_Diskussioun',
        NS_MEDIAWIKI        => 'MediaWiki',
@@ -147,31 +147,36 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#VIRULEEDUNG', '#WEITERLEITUNG', '#REDIRECT' ),
-       'numberofpages'           => array( '1', 'Säitenzuel', 'SEITENANZAHL', 'NUMBEROFPAGES' ),
-       '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_thumbnail'           => array( '1', 'Miniatur', 'miniatur', 'mini', 'thumbnail', 'thumb' ),
-       '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_page'                => array( '1', 'Säit=$1', 'Säit_$1', 'seite=$1', 'seite $1', 'page=$1', 'page $1' ),
-       'img_border'              => array( '1', 'bord', 'rand', 'border' ),
-       'img_top'                 => array( '1', 'uewen', 'oben', 'top' ),
-       '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', '__VERSTOPPT_KATEGORIE__', '__VERSTECKTE_KATEGORIE__', '__WARTUNGSKATEGORIE__', '__HIDDENCAT__' ),
+       'redirect'                  => array( '0', '#VIRULEEDUNG', '#WEITERLEITUNG', '#REDIRECT' ),
+       'numberofpages'             => array( '1', 'Säitenzuel', 'SEITENANZAHL', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'Artikelen', 'ARTIKELANZAHL', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'Zuel_vu_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_thumbnail'             => array( '1', 'Miniatur', 'miniatur', 'mini', 'thumbnail', 'thumb' ),
+       '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_page'                  => array( '1', 'Säit=$1', 'Säit_$1', 'seite=$1', 'seite $1', 'page=$1', 'page $1' ),
+       'img_border'                => array( '1', 'bord', 'rand', 'border' ),
+       'img_top'                   => array( '1', 'uewen', 'oben', 'top' ),
+       'img_bottom'                => array( '1', 'ënnen', 'unten', 'bottom' ),
+       'grammar'                   => array( '0', 'GRAMMAIRE', 'GRAMMATIK:', 'GRAMMAR:' ),
+       'plural'                    => array( '0', 'PLURAL', 'PLURAL:' ),
+       'currentversion'            => array( '1', 'AKTUELL_VERSIOUN', 'JETZIGE_VERSION', 'CURRENTVERSION' ),
+       'language'                  => array( '0', '#SPROOCH:', '#SPRACHE:', '#LANGUAGE:' ),
+       'formatnum'                 => array( '0', 'ZUELEFORMAT', 'ZAHLENFORMAT', 'FORMATNUM' ),
+       'special'                   => array( '0', 'spezial', 'special' ),
+       'hiddencat'                 => array( '1', '__VERSTOPPT_KATEGORIE__', '__VERSTECKTE_KATEGORIE__', '__WARTUNGSKATEGORIE__', '__HIDDENCAT__' ),
+       'pagesincategory_pages'     => array( '0', 'Säiten', 'pages' ),
+       'pagesincategory_files'     => array( '0', 'Fichieren', 'files' ),
 );
 
 $messages = array(
@@ -939,6 +944,7 @@ Et däerfen net méi wéi $2 {{PLURAL:$2|Ufro|Ufroe}} sinn, aktuell {{PLURAL:$2|
 'parser-template-loop-warning' => 'Endlos Schleef an der Schabloun: [[$1]] entdeckt',
 'parser-template-recursion-depth-warning' => "D'Limit vun der Zuel vun de Verschachtelunge vu Schabloune gouf iwwerschratt ($1)",
 'language-converter-depth-warning' => "D'Limite vun der déift vun der Sproochëmwandlung gouf iwwerschratt ($1)",
+'converter-manual-rule-error' => 'An der Regel iwwer déi manuell Ëmwandlung vun der Sprooch gouf e Feeler fonnt',
 
 # "Undo" feature
 'undo-success' => "D'Ännerung gëtt réckgängeg gemaach. Iwwerpréift w.e.g. de Verglach ënnendrënner fir nozekuckeen ob et esou richteg ass, duerno späichert w.e.g d'Ännerungen of, fir dës Aktioun ofzeschléissen.",
@@ -1802,6 +1808,7 @@ Dir kënnt seng Beschreiwung op senger [$2 Beschreiwungssäit] änneren.',
 'shared-repo-from' => 'vu(n) $1',
 'shared-repo' => 'e gemeinsam genotzte Medienarchiv',
 'shared-repo-name-wikimediacommons' => 'Wikimedia-Commons',
+'upload-disallowed-here' => 'Leider kënnt Dir dëst Bild net iwwerschreiwen.',
 
 # File reversion
 'filerevert' => '"$1" zrécksetzen',
@@ -2082,6 +2089,8 @@ Et ginn [[{{MediaWiki:Listgrouprights-helppage}}|zousätzlech Informatiounen]] i
 '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',
+'emailuser-title-target' => '{{GENDER:$1|Dëser Benotzerin|Dësem Benotzer}} eng Mail schécken',
+'emailuser-title-notarget' => 'Dem 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.',
@@ -2883,11 +2892,22 @@ Dëst warscheinlech duerch en externe Link den op der schwaarzer Lëscht (blackl
 
 # Info page
 'pageinfo-title' => 'Informatioun iwwer "$1"',
-'pageinfo-header-edits' => 'Ännerungen',
+'pageinfo-header-basic' => 'Basisinformatiounen',
+'pageinfo-header-edits' => 'Historique vun den Ännerungen',
+'pageinfo-display-title' => 'Titel dee gewise gëtt',
 'pageinfo-views' => 'Zuel vun de Kéieren déi dës Säit gekuckt gouf',
-'pageinfo-watchers' => 'Zuel vun de Benotzer déi iwwerwaachen',
-'pageinfo-edits' => 'Zuel vun den Ännerungen',
-'pageinfo-authors' => 'Zuel vun de verschiddenen Auteuren',
+'pageinfo-watchers' => "Zuel vun de Benotzer déi d'Säit iwwerwaachen",
+'pageinfo-redirects-name' => 'Viruleedungen op dës Säit',
+'pageinfo-subpages-name' => 'Ënnersäite vun dëser Säit',
+'pageinfo-firsttime' => 'Datum vum Uleeë vun der Säit',
+'pageinfo-lastuser' => 'Leschte Benotzer deen eppes geännert huet',
+'pageinfo-lasttime' => 'Datum vun der leschter Ännerung',
+'pageinfo-edits' => 'Gesamtzuel vun den Ännerungen',
+'pageinfo-authors' => 'Gesamtzuel vun de verschiddenen Auteuren',
+'pageinfo-recent-edits' => 'Zuel vun de rezenten Ännerungen (an de leschten $1)',
+'pageinfo-restriction' => 'Protectioun vun der Säit (<code>{{lcfirst:$1}}</code>)',
+'pageinfo-magic-words' => '{{PLURAL:$1|Magescht Wuert|Magesch Wierder}} ($1)',
+'pageinfo-hidden-categories' => 'Verstoppte {{PLURAL:$1|Kategorie|Kategorien}} ($1)',
 
 # Skin names
 'skinname-standard' => 'Klassesch',
index 1625953..5c281d7 100644 (file)
@@ -96,10 +96,10 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'img_right'               => array( '1', 'drita', 'destra', 'right' ),
-       'img_left'                => array( '1', 'manzína', 'sinistra', 'left' ),
-       'img_none'                => array( '1', 'nissön', 'nessuno', 'none' ),
-       'sitename'                => array( '1', 'NUMSIT', 'NOMESITO', 'SITENAME' ),
+       'img_right'                 => array( '1', 'drita', 'destra', 'right' ),
+       'img_left'                  => array( '1', 'manzína', 'sinistra', 'left' ),
+       'img_none'                  => array( '1', 'nissön', 'nessuno', 'none' ),
+       'sitename'                  => array( '1', 'NUMSIT', 'NOMESITO', 'SITENAME' ),
 );
 
 $messages = array(
index f7a8728..0e446f3 100644 (file)
@@ -144,28 +144,28 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#PERADRESAVIMAS', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__BETURIN__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__BEGALERIJOS__', '__NOGALLERY__' ),
-       'toc'                     => array( '0', '__TURINYS__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__BEREDAGSEKC__', '__NOEDITSECTION__' ),
-       'currentmonth'            => array( '1', 'DABARTINISMĖNESIS', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonthname'        => array( '1', 'DABARTINIOMĖNESIOPAVADINIMAS', 'CURRENTMONTHNAME' ),
-       'currentday'              => array( '1', 'DABARTINĖDIENA', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'DABARTINĖDIENA2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'DABARTINĖSDIENOSPAVADINIMAS', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'DABARTINIAIMETAI', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'DABARTINISLAIKAS', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'DABARTINĖVALANDA', 'CURRENTHOUR' ),
-       'numberofpages'           => array( '1', 'PUSLAPIŲSKAIČIUS', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'STRAIPSNIŲSKAIČIUS', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'FAILŲSKAIČIUS', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'NAUDOTOJŲSKAIČIUS', 'NUMBEROFUSERS' ),
-       'numberofedits'           => array( '1', 'KEITIMŲSKAIČIUS', 'NUMBEROFEDITS' ),
-       'img_thumbnail'           => array( '1', 'miniatiūra', 'mini', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'miniatiūra=$1', 'mini=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'dešinėje', 'right' ),
-       'img_left'                => array( '1', 'kairėje', 'left' ),
+       'redirect'                  => array( '0', '#PERADRESAVIMAS', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__BETURIN__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__BEGALERIJOS__', '__NOGALLERY__' ),
+       'toc'                       => array( '0', '__TURINYS__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__BEREDAGSEKC__', '__NOEDITSECTION__' ),
+       'currentmonth'              => array( '1', 'DABARTINISMĖNESIS', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonthname'          => array( '1', 'DABARTINIOMĖNESIOPAVADINIMAS', 'CURRENTMONTHNAME' ),
+       'currentday'                => array( '1', 'DABARTINĖDIENA', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'DABARTINĖDIENA2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'DABARTINĖSDIENOSPAVADINIMAS', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'DABARTINIAIMETAI', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'DABARTINISLAIKAS', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'DABARTINĖVALANDA', 'CURRENTHOUR' ),
+       'numberofpages'             => array( '1', 'PUSLAPIŲSKAIČIUS', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'STRAIPSNIŲSKAIČIUS', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'FAILŲSKAIČIUS', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'NAUDOTOJŲSKAIČIUS', 'NUMBEROFUSERS' ),
+       'numberofedits'             => array( '1', 'KEITIMŲSKAIČIUS', 'NUMBEROFEDITS' ),
+       'img_thumbnail'             => array( '1', 'miniatiūra', 'mini', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'miniatiūra=$1', 'mini=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'dešinėje', 'right' ),
+       'img_left'                  => array( '1', 'kairėje', 'left' ),
 );
 
 $fallback8bitEncoding = 'windows-1257';
@@ -445,9 +445,9 @@ $1',
 'youhavenewmessages' => 'Jūs turite $1 ($2).',
 'newmessageslink' => 'naujų žinučių',
 'newmessagesdifflink' => 'paskutinis pakeitimas',
-'youhavenewmessagesfromusers' => 'Jūs turite $1 nuo {{PLURAL:$3|kito vartotojo|$3 vartotojų}} ($2).',
+'youhavenewmessagesfromusers' => 'Jūs gavote $1 nuo {{PLURAL:$3|kito vartotojo|$3 vartotojų}} ($2).',
 'youhavenewmessagesmanyusers' => 'Jūs turite $1 iš daugelio vartotojų ( $2 ) .',
-'newmessageslinkplural' => '{{PLURAL:$1|nauja žinutė|naujos žinutės}}',
+'newmessageslinkplural' => '{{PLURAL:$1|naują žinutę|naujų žinučių}}',
 'newmessagesdifflinkplural' => 'paskutinis {{PLURAL:$1|pakeitimas|pakeitimai}}',
 'youhavenewmessagesmulti' => 'Turite naujų žinučių $1',
 'editsection' => 'redaguoti',
index 469b493..cbc2a32 100644 (file)
 
 $fallback = 'tr';
 
+$namespaceNames = array(
+       NS_MEDIA            => 'Medya',
+       NS_SPECIAL          => 'Doxmeli',
+       NS_TALK             => 'Ğarğala',
+       NS_USER             => 'Maxmare',
+       NS_USER_TALK        => 'Maxmare_mesaji',
+       NS_PROJECT_TALK     => '$1_ğarğala',
+       NS_FILE             => 'Dosya',
+       NS_FILE_TALK        => 'Dosya_ğarğala',
+       NS_MEDIAWIKI        => 'MediaWiki',
+       NS_MEDIAWIKI_TALK   => 'MediaWiki_ğarğala',
+       NS_TEMPLATE         => 'Şabloni',
+       NS_TEMPLATE_TALK    => 'Şabloni_ğarğala',
+       NS_HELP             => 'Meşvela',
+       NS_HELP_TALK        => 'Meşvela_ğarğala',
+       NS_CATEGORY         => 'Kʼatʼegori',
+       NS_CATEGORY_TALK    => 'Kʼatʼegori_ğarğala',
+);
+
+$namespaceAliases = array(
+       // Turkish namespace names.
+       'Medya'              => NS_MEDIA,
+       'Özel'               => NS_SPECIAL,
+       'Tartışma'           => NS_TALK,
+       'Kullanıcı'          => NS_USER,
+       'Kullanıcı_mesaj'    => NS_USER_TALK,
+       '$1_tartışma'        => NS_PROJECT_TALK,
+       'Dosya'              => NS_FILE,
+       'Dosya_tartışma'     => NS_FILE_TALK,
+       'MediaWiki_tartışma' => NS_MEDIAWIKI_TALK,
+       'Şablon'             => NS_TEMPLATE,
+       'Şablon_tartışma'    => NS_TEMPLATE_TALK,
+       'Yardım'             => NS_HELP,
+       'Yardım_tartışma'    => NS_HELP_TALK,
+       'Kategori'           => NS_CATEGORY,
+       'Kategori_tartışma'  => NS_CATEGORY_TALK,
+);
+
 $messages = array(
 # User preference toggles
 'tog-underline' => "Link'iş tude kogu3’uxaçki:",
index e243293..a7f6209 100644 (file)
  */
 
 $magicWords = array(
-       'redirect'                => array( '0', '#FIHODINANA', '#REDIRECTION', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__TSYASIANALAHATRA__', '__AUCUNSOMMAIRE__', '__AUCUNETDM__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__TSYASIANAGALLERY__', '__AUCUNEGALERIE__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__TEREONYLAHATRA__', '__FORCERSOMMAIRE__', '__FORCERTDM__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__LAHATRA__', '__LAHAT__', '__SOMMAIRE__', '__TDM__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__TSYAZOOVAINA__', '__SECTIONNONEDITABLE__', '__NOEDITSECTION__' ),
-       'currentmonth'            => array( '1', 'VOLANA', 'MOISACTUEL', 'MOIS2ACTUEL', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', 'VOLANA1', 'MOIS1ACTUEL', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', 'ANARAMBOLANA', 'NOMMOISACTUEL', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'ANARAMBOLANAGEN', 'ANARANAVOLANA', 'CURRENTMONTHNAME', 'NOMGENMOISACTUEL', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'ANARAMBOLANAFOHY', 'ANARANAVOLANAFOHY', 'ABREVMOISACTUEL', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'ANDRO', 'JOURACTUEL', 'JOUR1ACTUEL', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'ANDRO2', 'JOUR2ACTUEL', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'ANARANANDRO', 'ANARANAANDRO', 'NOMJOURACTUEL', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'TAONA', 'ANNEEACTUELLE', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'LERA', 'HORAIREACTUEL', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'ORA', 'HEUREACTUELLE', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'VOLANAANTOERANA', 'MOISLOCAL', 'MOIS2LOCAL', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', 'VOLANAANTOERANA1', 'MOIS1LOCAL', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'ANARAMBOLANAANTOERANA', 'NOMMOISLOCAL', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'ANARAMBOLANAANTOERANAGEN', 'NOMGENMOISLOCAL', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'ANARAMBOLANAANTOERANAFOHY', 'ABREVMOISLOCAL', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'ANDROANTOERANA', 'JOURLOCAL', 'JOUR1LOCAL', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'ANDROANTOERANA2', 'JOUR2LOCAL', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'ANARANANDROANTOERANA', 'NOMJOURLOCAL', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'TAONAANTOERANA', 'ANNEELOCALE', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'LERAANTOERANA', 'HORAIRELOCAL', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'ORAANTOERANA', 'HEURELOCALE', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'ISAPEJY', 'NOMBREPAGES', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'ISALAHATSORATRA', 'NOMBREARTICLES', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'ISARAKITRA', 'NOMBREFICHIERS', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'ISAMPIKAMBANA', 'NOMBREUTILISATEURS', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'ISAMPIKAMBANAMANOVA', 'NOMBREUTILISATEURSACTIFS', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'ISAFANOVANA', 'NOMBREMODIFS', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'ISATOPIMASO', 'NOMBREVUES', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'ANARAMPEJY', 'ANARANAPEJY', 'NOMPAGE', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'ANARAMPEJYX', 'ANARANAPEJYX', 'NOMPAGEX', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'ANARANTSEHATRA', 'ANARANASEHATRA', 'ESPACENOMMAGE', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'ANARANTSEHATRAX', 'ANARANASEHATRAX', 'ESPACENOMMAGEX', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'PEJINDRESAKA', 'PEJYRESAKA', 'DINIKA', 'ESPACEDISCUSSION', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'PEJINDRESAKAX', 'PEJYRESAKAX', 'DINIKAX', 'ESPACEDISCUSSIONX', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'TOERANALAHATSORATRA', 'ESPACESUJET', 'ESPACEARTICLE', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'TOERANNYLAHATSORATRA', 'ESPACESUJETX', 'ESPACEARTICLEX', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'ANARAMPEJYFENO', 'ANARANAPEJYFENO', 'NOMPAGECOMPLET', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'ANARAMPEJYFENOX', 'ANARANAPEJYFENOX', 'NOMPAGECOMPLETX', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'ANARANAZANAPEJY', 'ANARANJANAPEJY', 'NOMSOUSPAGE', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'ANARANJANAPEJYX', 'ANARANAZANAPEJYX', 'NOMSOUSPAGEX', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'ANARANAFOTOPEJY', 'ANARAMPOTOPEJY', 'NOMBASEDEPAGE', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'ANARANAFOTOPEJYE', 'ANARAMPOTOPEJYE', 'NOMBASEDEPAGEX', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'ANARAMPEJINDRESAKA', 'ANARANAPEJINDRESAKA', 'NOMPAGEDISCUSSION', 'TALKPAGENAME' ),
-       'img_right'               => array( '1', 'ankavanana', 'droite', 'right' ),
-       'img_left'                => array( '1', 'ankavia', 'gauche', 'left' ),
-       'img_none'                => array( '1', 'tsymisy', 'néant', 'neant', 'none' ),
-       'img_center'              => array( '1', 'ampivoany', 'anivony', 'centré', 'center', 'centre' ),
-       'img_page'                => array( '1', 'pejy $1', 'page=$1', 'page $1' ),
-       'img_border'              => array( '1', 'sisiny', 'bordure', 'border' ),
-       'img_top'                 => array( '1', 'ambony', 'haut', 'top' ),
-       'img_middle'              => array( '1', 'anivo', 'milieu', 'middle' ),
-       'img_bottom'              => array( '1', 'ambany', 'bas', 'bottom' ),
-       'currentweek'             => array( '1', 'HERINANDRO', 'SEMAINEACTUELLE', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'ALAHADY', 'JDSACTUEL', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'HERINANDROANTOERANA', 'SEMAINELOCALE', 'LOCALWEEK' ),
-       'localdow'                => array( '1', 'ALAHADYANTOERANA', 'JDSLOCAL', 'LOCALDOW' ),
-       'fullurl'                 => array( '0', 'URLREHETRA:', 'URLCOMPLETE:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'URLREHETRAX:', 'URLCOMPLETEX:', 'FULLURLE:' ),
-       'displaytitle'            => array( '1', 'ASEHOLOHATENY', 'AFFICHERTITRE', 'DISPLAYTITLE' ),
+       'redirect'                  => array( '0', '#FIHODINANA', '#REDIRECTION', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__TSYASIANALAHATRA__', '__AUCUNSOMMAIRE__', '__AUCUNETDM__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__TSYASIANAGALLERY__', '__AUCUNEGALERIE__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__TEREONYLAHATRA__', '__FORCERSOMMAIRE__', '__FORCERTDM__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__LAHATRA__', '__LAHAT__', '__SOMMAIRE__', '__TDM__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__TSYAZOOVAINA__', '__SECTIONNONEDITABLE__', '__NOEDITSECTION__' ),
+       'currentmonth'              => array( '1', 'VOLANA', 'MOISACTUEL', 'MOIS2ACTUEL', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'VOLANA1', 'MOIS1ACTUEL', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'ANARAMBOLANA', 'NOMMOISACTUEL', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'ANARAMBOLANAGEN', 'ANARANAVOLANA', 'CURRENTMONTHNAME', 'NOMGENMOISACTUEL', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'ANARAMBOLANAFOHY', 'ANARANAVOLANAFOHY', 'ABREVMOISACTUEL', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'ANDRO', 'JOURACTUEL', 'JOUR1ACTUEL', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'ANDRO2', 'JOUR2ACTUEL', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'ANARANANDRO', 'ANARANAANDRO', 'NOMJOURACTUEL', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'TAONA', 'ANNEEACTUELLE', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'LERA', 'HORAIREACTUEL', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'ORA', 'HEUREACTUELLE', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'VOLANAANTOERANA', 'MOISLOCAL', 'MOIS2LOCAL', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'VOLANAANTOERANA1', 'MOIS1LOCAL', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'ANARAMBOLANAANTOERANA', 'NOMMOISLOCAL', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'ANARAMBOLANAANTOERANAGEN', 'NOMGENMOISLOCAL', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'ANARAMBOLANAANTOERANAFOHY', 'ABREVMOISLOCAL', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'ANDROANTOERANA', 'JOURLOCAL', 'JOUR1LOCAL', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'ANDROANTOERANA2', 'JOUR2LOCAL', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'ANARANANDROANTOERANA', 'NOMJOURLOCAL', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'TAONAANTOERANA', 'ANNEELOCALE', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'LERAANTOERANA', 'HORAIRELOCAL', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'ORAANTOERANA', 'HEURELOCALE', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'ISAPEJY', 'NOMBREPAGES', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'ISALAHATSORATRA', 'NOMBREARTICLES', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'ISARAKITRA', 'NOMBREFICHIERS', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'ISAMPIKAMBANA', 'NOMBREUTILISATEURS', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'ISAMPIKAMBANAMANOVA', 'NOMBREUTILISATEURSACTIFS', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'ISAFANOVANA', 'NOMBREMODIFS', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'ISATOPIMASO', 'NOMBREVUES', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'ANARAMPEJY', 'ANARANAPEJY', 'NOMPAGE', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'ANARAMPEJYX', 'ANARANAPEJYX', 'NOMPAGEX', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'ANARANTSEHATRA', 'ANARANASEHATRA', 'ESPACENOMMAGE', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'ANARANTSEHATRAX', 'ANARANASEHATRAX', 'ESPACENOMMAGEX', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'PEJINDRESAKA', 'PEJYRESAKA', 'DINIKA', 'ESPACEDISCUSSION', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'PEJINDRESAKAX', 'PEJYRESAKAX', 'DINIKAX', 'ESPACEDISCUSSIONX', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'TOERANALAHATSORATRA', 'ESPACESUJET', 'ESPACEARTICLE', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'TOERANNYLAHATSORATRA', 'ESPACESUJETX', 'ESPACEARTICLEX', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'ANARAMPEJYFENO', 'ANARANAPEJYFENO', 'NOMPAGECOMPLET', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'ANARAMPEJYFENOX', 'ANARANAPEJYFENOX', 'NOMPAGECOMPLETX', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'ANARANAZANAPEJY', 'ANARANJANAPEJY', 'NOMSOUSPAGE', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'ANARANJANAPEJYX', 'ANARANAZANAPEJYX', 'NOMSOUSPAGEX', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'ANARANAFOTOPEJY', 'ANARAMPOTOPEJY', 'NOMBASEDEPAGE', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'ANARANAFOTOPEJYE', 'ANARAMPOTOPEJYE', 'NOMBASEDEPAGEX', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'ANARAMPEJINDRESAKA', 'ANARANAPEJINDRESAKA', 'NOMPAGEDISCUSSION', 'TALKPAGENAME' ),
+       'img_right'                 => array( '1', 'ankavanana', 'droite', 'right' ),
+       'img_left'                  => array( '1', 'ankavia', 'gauche', 'left' ),
+       'img_none'                  => array( '1', 'tsymisy', 'néant', 'neant', 'none' ),
+       'img_center'                => array( '1', 'ampivoany', 'anivony', 'centré', 'center', 'centre' ),
+       'img_page'                  => array( '1', 'pejy $1', 'page=$1', 'page $1' ),
+       'img_border'                => array( '1', 'sisiny', 'bordure', 'border' ),
+       'img_top'                   => array( '1', 'ambony', 'haut', 'top' ),
+       'img_middle'                => array( '1', 'anivo', 'milieu', 'middle' ),
+       'img_bottom'                => array( '1', 'ambany', 'bas', 'bottom' ),
+       'currentweek'               => array( '1', 'HERINANDRO', 'SEMAINEACTUELLE', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'ALAHADY', 'JDSACTUEL', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'HERINANDROANTOERANA', 'SEMAINELOCALE', 'LOCALWEEK' ),
+       'localdow'                  => array( '1', 'ALAHADYANTOERANA', 'JDSLOCAL', 'LOCALDOW' ),
+       'fullurl'                   => array( '0', 'URLREHETRA:', 'URLCOMPLETE:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'URLREHETRAX:', 'URLCOMPLETEX:', 'FULLURLE:' ),
+       'displaytitle'              => array( '1', 'ASEHOLOHATENY', 'AFFICHERTITRE', 'DISPLAYTITLE' ),
 );
 
 $fallback = 'fr';
@@ -529,12 +529,11 @@ Mitaky version $1-n'i MediaWiki",
 # General errors
 'error' => 'Tsy mety',
 'databaseerror' => "Tsy fetezana eo amin'ny toby",
-'dberrortext' => 'Nisy tsy fetezana ao amin\'ny fangatahana tany amin\'ny database.
-Inoana fa ny rindrankajy no misy olana (bug).
-Ny fangatahana farany dia:
-<blockquote><tt>$1</tt></blockquote>
-tao amin\'ny tao "<tt>$2</tt>".
-Toy izao no navalin\'ny MySQL "<tt>$3: $4</tt>".',
+'dberrortext' => "Nitranga ny hadisoana ara-pirafi-kataka (syntax error).
+Mety noho ny tsifandehanan'ny rindrankajy tsara izany.
+<blockquote><code>$1</code></blockquote>
+avy amin'ny tao « <code>$2</code> ».
+ary « <samp>$3 : $4</samp> » no hadisoana naverinn'ny banky angona.",
 'dberrortextcl' => "Ao amin'ny fangatahana tao amin'ny banky angona dia misy tsi-fetezana ara-pehezanteny.
 Ny fangatahana farany nalefa dia :
 « $1 »
@@ -869,10 +868,9 @@ Azonao atao ny [[Special:Search/{{PAGENAME}}|Mikaroka momba ny lohatenin'io pejy
 'blocked-notice-logextract' => "Ankehitriny ity mpikambana ity dia voasakana.
 Ny fampidirana faran'ny laogin'ny fanakanam-pikambana dia naseho teo ambany ho an'ny fampahalalàna :",
 'clearyourcache' => "'''Fantaro :''' Rehefa avy mitahiry, dia mila terenao ny fanavaozana ny voatakon'ny mpitety tranonkalanao hahafahanao mahita ny fanovana.
-'''Firefox/Safari:''' Tazomy ho voapotsitra ny kitika ''Maj'' na ''Shift'', dia tsindrio eo amin'i ''Actualiser'', na tsindrio Ctrl+F5
-'''Google Chrome:''' Miaraka tsindrio Ctrl, Maj ary R.
-'''Internet Explorer''': Miaraka tsindrio Ctrl sy F5
-'''Konqueror''': Tsindrio F5
+'''Firefox/Safari:''' Tazomy ho voapotsitra ny kitika ''Maj'' na ''Shift'', dia tsindrio eo amin'i ''Actualiser'', na Ctrl+F5
+'''Google Chrome:''' Tsindrio miaraka ny Ctrl, Maj ary R.
+'''Internet Explorer''': Tsindrio miaraka Ctrl sy F5
 '''Opera''': Esory ny voatatoka ao amin'ny ''Outils → Préférences'' (''Fitaovana  → Safidy'').",
 'usercssyoucanpreview' => "'''Fika:''' Ampiasao ny bokotra 'Tsipalotra' mialoha ny hitehirizanao ny CSS-nao vaovao.",
 'userjsyoucanpreview' => "'''Fika:''' Ampiasao ny bokotra 'Tsipalotra' mialoha ny hitehirizanao ny JS-nao vaovao.",
@@ -1268,7 +1266,7 @@ ihany no miseho amin'ny vokatry ny karoka).",
 'prefs-rc' => 'Vao niova',
 'prefs-watchlist' => 'Lisitry ny pejy arahana-maso',
 'prefs-watchlist-days' => "Isa ny andro haseho anatin'ny lisitra ny pejy arahana-maso",
-'prefs-watchlist-days-max' => 'Maximum $1 {{PLURAL:$1|day|days}}',
+'prefs-watchlist-days-max' => '$1 {{PLURAL:$1|}} andro farafahabetsany',
 'prefs-watchlist-edits' => "Isa ny fanovana aseho eo amin'ny fanaraha-maso navelatra:",
 'prefs-watchlist-edits-max' => 'Isa fara-fahabetsany : 1000',
 'prefs-watchlist-token' => "token ho an'ny lisitry ny pejy arahi-maso:",
@@ -1398,7 +1396,7 @@ Tsy haseho ny adiresy imailakao rehefa manoratra any aminao ny mpikambana hafa."
 'group-autoconfirmed' => 'Mpikambana voamarina',
 'group-bot' => 'Mpikambana rôbô',
 'group-sysop' => 'Mpandrindra',
-'group-bureaucrat' => 'Borōkraty',
+'group-bureaucrat' => 'Borôkraty',
 'group-suppress' => 'Mpitondra',
 'group-all' => '(izy rehetra)',
 
@@ -1413,7 +1411,7 @@ Tsy haseho ny adiresy imailakao rehefa manoratra any aminao ny mpikambana hafa."
 'grouppage-autoconfirmed' => '{{ns:project}}:Mpikambana Voamafy',
 'grouppage-bot' => '{{ns:project}}:Mpikambana rôbô',
 'grouppage-sysop' => '{{ns:project}}:Mpandrindra',
-'grouppage-bureaucrat' => '{{ns:project}}:Borōkraty',
+'grouppage-bureaucrat' => '{{ns:project}}:Borôkraty',
 'grouppage-suppress' => '{{ns:project}}:Oversight',
 
 # Rights
@@ -1603,13 +1601,13 @@ Raha hanisy sary ao anaty pejy, dia mampiasà rohy toy ny iray amin'ireto
 'illegalfilename' => 'Misy litera tsy mety amin\'ny lohateny ny anaran\'ilay rakita "$1". Azafady soloy ny anaran\'ny rakitra dia andramo alefa indray.',
 'filename-toolong' => 'Tsy afaka mihoatra ny 240 oktety ny anaran-drakitra.',
 'badfilename' => 'Novana ho "$1" ny anaran\'ny rakitra.',
-'filetype-mime-mismatch' => "Ny karazan-drakitra dia tsy miady amin'ny karazana MIME.",
+'filetype-mime-mismatch' => 'Ny karazan-drakitra ".$1" dia tsy miady amin\'ny karazana MIME novinavinaina ho azy ho an\'ilay rakitra ($2).',
 'filetype-badmime' => 'Ny karazan-drakitra MIME « $1 » dia tsy afaka ampidirina.',
 'filetype-bad-ie-mime' => "Tsy afaka ampidirina ilay rakitra satria hitan'i Internet Explorer faha « $1 » izy, midika rakitra voarara satria mety mampidi-doza",
 'filetype-unwanted-type' => "Karazan-drakitra tsy tiana ny karazan-drakitra '''« .$1 »'''.
 {{PLURAL:$3||}}Ny karazan-drakitra fidiana dia $2.",
-'filetype-banned-type' => "Rarana ato ny karazan-drakitra '''« .$1 »'''
-{{PLURAL:$3||}}Ny karazan-drakitra ekena dia $2.",
+'filetype-banned-type' => "'''\".\$1\"'''dia {{PLURAL:\$4|anisan'ny|}} karazan-drakitra voarara.
+Karazan-drakitra azo alefa {{PLURAL:\$3||}} \$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.',
@@ -1638,9 +1636,8 @@ Mba hanao azy, tsy maintsy ovainao manokana ilay pejy [[$1|thumb]]",
 * Anaran-drakitra ho ampidirina : <strong>[[:$1]]</strong>
 * Anaran-drakitra misy : <strong>[[:$2]]</strong>
 Misafidia anarana hafa.',
-'fileexists-thumbnail-yes' => "
-Hoatry ny saritapaka ''(vignette)'' ilay sary. [[$1|thumb]]
-Marino ilay rakitra <strong>[[:$1]]</strong>.
+'fileexists-thumbnail-yes' => "Ohatry ny sary nakelezina ilay rakitra. [[$1|thumb]]
+Mba marino ilay rakitra <strong>[[:$1]]</strong>.
 Raha mitovy amin'ny sary voalohany ny sarin'ilay rakitra marinina, tsy ilaina ny mampiditra santiôna nakelezina.",
 'file-thumbnail-no' => "Manomboka amin'ny <strong>$1</strong> ny anaran'ilay rakitra.
 Mety saritapaka ''(vignette)'' io sary io.
@@ -1680,7 +1677,7 @@ Tokony marina ny $1 aloha ny manao fampidirana vaovao.',
 '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-success-msg' => "Vita soa aman-tsara ilay fandefasan-drakitra avy amin'i [$2]. Eto ny toerana mety ahitanao ny rakitrao : [[:{{ns:file}}:$1]]",
 'upload-failure-subj' => 'Olana nitranga teo am-pandefasana',
 'upload-failure-msg' => "Nisy olana tamin'ny fampidiranao [$2] :
 
@@ -1703,6 +1700,8 @@ Raha mbola misy foana ilay  olana, manorata any amin'ny [[Special:ListUsers/syso
 'backend-fail-stream' => 'Tsy afaka mamaky ilay rakitra $1.',
 'backend-fail-backup' => 'Tsy afaka mitahiry ilay rakitra $1.',
 'backend-fail-hashes' => "Tsy azo ilay hash an-drakitra ho an'ny fampitahana.",
+'backend-fail-notsame' => "Efa misy rakitra samihafa ho an'i $1",
+'backend-fail-invalidpath' => '$1 dia lalam-pitahirizana tsy azo raisina.',
 'backend-fail-delete' => 'Tsy afaka mamafa ilay rakitra $1.',
 'backend-fail-alreadyexists' => 'Efa misy ilay rakitra $1.',
 'backend-fail-store' => 'Tsy afaka mitahiry ilay rakitra $1 anaty $2.',
@@ -1824,6 +1823,7 @@ Tsindrio eo amin'ny lohan-tsanganana raha hanova ny laharam-pisehoana.",
 'linkstoimage' => "Ireto avy no {{PLURAL:$1|pejy mirohy|pejy mirohy}} ($1) amin'io rakitra io:",
 'nolinkstoimage' => "Tsy misy pejy mirohy amin'ity sary ity.",
 'morelinkstoimage' => "Hijery [[Special:WhatLinksHere/$1|rohy fanampiny]] makany amin'io rakitra io.",
+'linkstoimage-redirect' => '$1 (fihodinana) $2',
 'sharedupload' => "Mety ho rakitra itambarana amin'ny tetikasa hafa ny rakitra $1.",
 'sharedupload-desc-here' => "Avy amin'i $1 io rakitra io ary mety ampiasain'ny tetikasa hafa.
 Aseho eo ambany ny [$2 famisavisana ilay rakitra].",
@@ -2004,8 +2004,8 @@ wiki ity aza izy.</p>",
 'booksources-invalid-isbn' => 'Ny ISBN nomena dia mety diso ; marino raha diso ianao teo am-pandikanana ny loharano fotony.',
 
 # Special:Log
-'specialloguserlabel' => 'Mpikambana:',
-'speciallogtitlelabel' => 'Lohateny:',
+'specialloguserlabel' => 'Mpikambana nanao :',
+'speciallogtitlelabel' => 'Tanjona (lohateny na mpikambana) :',
 'log' => 'Tatitr’asa',
 'all-logs-page' => 'Ny tatitr’asa',
 'alllogstext' => "Seho nakambana ho an'ny laogy rehetra azo jerena eto amin'ny {{SITENAME}}.
@@ -2045,12 +2045,13 @@ Vangio koa ny [[Special:WantedCategories|sokajy ilaina]].",
 'sp-deletedcontributions-contribs' => "fandraisan'anjara",
 
 # Special:LinkSearch
-'linksearch' => 'Rohy ivelany',
+'linksearch' => 'Fikarohana rohy ivelany',
 'linksearch-pat' => 'Volana tadiavina :',
 'linksearch-ns' => 'Anaran-tsehatra :',
 'linksearch-ok' => 'Fikarohana',
-'linksearch-text' => 'Ny soratra « joker » dia azo soratana ohatra <code>*.wikipedia.org</code>. br />
-Prôtôkôly zaka : <code>$1</code>.',
+'linksearch-text' => "Azo ampiasaina ny soratra joker toa i « *.wikipedia.org ».
+Mila top-level domain ambonimbony kokoa izy ireo, sahala « *.org » <br />
+Protokoly zaka <code>$1</code> aza ampiana ao amin'ny karokao izy ireo.",
 'linksearch-line' => "$1 dia voarohy amin'ny $2",
 'linksearch-error' => "Ny soratra joker dia ampiasaina anatin'ny fanombohan'ny anaran-tsehatry ny milina hôte ihany.",
 
@@ -2061,8 +2062,8 @@ Prôtôkôly zaka : <code>$1</code>.',
 'listusers-blocked' => '(voasakana)',
 
 # Special:ActiveUsers
-'activeusers' => 'lisitra ny mpikambana miasa',
-'activeusers-intro' => "Ity ny lisitra ny mpikambana niasa teto tanatin'ny $1 andro farany {{PLURAL:}}",
+'activeusers' => 'Lisitry ny mpikambana mavitrika',
+'activeusers-intro' => 'Ity ny lisitry ny mpikambana izay nanao zavatra iray nandritry ny andro $1 farany. {{PLURAL:}}',
 'activeusers-count' => "Nanova in-$1 tao anatin'ny $3 andro{{PLURAL:}}",
 'activeusers-from' => 'Aseho ny mpikambana hatry ny :',
 'activeusers-hidebots' => 'Asitriho ny robo',
@@ -2078,7 +2079,7 @@ Prôtôkôly zaka : <code>$1</code>.',
 'listgrouprights-group' => 'Vondrona/Gropy',
 'listgrouprights-rights' => 'Fahefana miaraka aminy',
 'listgrouprights-helppage' => "Help:Fahefan'ny vondrona",
-'listgrouprights-members' => '(lisitra ny mpikambana)',
+'listgrouprights-members' => '(lisitry ny mpikambana)',
 'listgrouprights-addgroup' => '{{PLURAL:$2}}Manampy ny mpikambana : $1',
 'listgrouprights-removegroup' => "Manala ny mpikambana {{PLURAL:$2}}amin'ny gropy : $1",
 'listgrouprights-addgroup-all' => 'Manampy mpikambana anaty vondrona rehetra',
@@ -2096,7 +2097,7 @@ 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}}",
+'defemailsubject' => '{{SITENAME}} Mailaky ny mpikambana "$1"',
 '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',
@@ -2154,7 +2155,7 @@ Aoriana, raha irinao ny hanaisotra azy ao amin'ny pejy arahanao maso, dia tsindr
 'watchmethod-list' => 'fanamarinana ny pejy arahana ahitana fanovana farany',
 'watchlistcontains' => "Ao amin'ny pejy arahanao dia ahitana pejy $1{{PLURAL:}}.",
 'iteminvalidname' => "Olana amin'ny zavatra « $1 » : tsy ara-dalàna ny anarana...",
-'wlnote' => "Eo ambany eo ny {{PLURAL:}}fanovana farany $1 natao tanatin'ny $2 ora farany teo.",
+'wlnote' => "Eo ambany dia ahitana ny  {{PLURAL:$1|fanovana farany indrindra|ny fanovana ''$1'' farany}} natao tanatin'ny adin'ny {{PLURAL:$2|iray|'''$2'''}}, nanomboka ny $3, $4.",
 'wlshowlast' => 'Haneho ny $1 ora farany, ny $2 andro farany na $3',
 'watchlist-options' => 'Safidy ny lisitry ny pejy arahana',
 
@@ -2263,6 +2264,7 @@ Ho ann'y fanazavana fanampiny, jereo [[Special:ProtectedPages|ny lisitry ny pejy
 'protect-title-notallowed' => "Hijery ny lentam-piarovana ho an'i « [[$1]] »",
 'prot_1movedto2' => '[[$1]] voaova anarana ho [[$2]]',
 'protect-badnamespace-title' => 'Anaran-tsehatra tsy azo arovana',
+'protect-badnamespace-text' => "Tsy afaka arovana ny pejy ao amin'io anaran-tsehatra io.",
 'protect-legend' => 'Fanekena ny fiarovana pejy',
 'protectcomment' => 'Antony :',
 'protectexpiry' => 'Daty fitsaharana :',
@@ -2466,6 +2468,7 @@ Ampiasao ity fisy eto ambany ity hanalana ny sakana
 mihatra amin'ny adiresy IP na solonanarana iray.",
 'ipusubmit' => 'Esory ny sakana',
 'unblocked' => "voaala ny sakan'i [[User:$1|$1]]",
+'unblocked-range' => "Afaka ny sakan'i $1.",
 'unblocked-id' => "Niala ny sakan'i $1",
 'blocklist' => 'Mpikambana voasakana',
 'ipblocklist' => 'Lisitry ny adiresy IP sy mpikambana voasakana',
@@ -2630,7 +2633,7 @@ mifanaraka amin'ilay anarana vaovao. Azafady mba atambaro izay pejin-dresaka iza
 
 Efa misy ny lahatsoratra hoe "[[:$1]]". Irinao ve ny hamafana azy mba hahafahana mamindra toerana ity lahatsoratra ity?',
 'delete_and_move_confirm' => 'Eny, fafao io pejy io',
-'delete_and_move_reason' => 'Fafao mba hamindrana toerana ny anankiray',
+'delete_and_move_reason' => "Pejy voafafa hahafahana manolo ny anaran'i ''[[$1]]''",
 'selfmove' => 'Mitovy ny anarana taloha sy anarana vaovao; tsy afaka afindra ny pejy.',
 'immobile-source-namespace' => "Tsy afaka ovaina anarana ny pejy ao amin'ny anaran-tsehatra « $1 »",
 'immobile-target-namespace' => "Tsy afaka ovainao ny pejy makany amin'ny anaran-sehatra « $1 »",
@@ -2678,7 +2681,8 @@ Etsy amin'ny toerana farany dia afaka mampiasa rohy ihany koa ianao, ohatra [[{{
 'allmessagesname' => 'Anarana',
 'allmessagesdefault' => 'Dikan-teny tany am-boalohany',
 'allmessagescurrent' => 'Dikan-teny miasa ankehitriny',
-'allmessagestext' => "Ity no lisitry ny system messages misy eto amin'ity MediaWiki: namespace ity.",
+'allmessagestext' => "Ity dia lisitry ny hafatra hita ao amin'ny anaran-tsehatra MediaWiki.
+Andana vangio ny [//www.mediawiki.org/wiki/Localisation Fandikana an'i Mediawiki] ary [//translatewiki.net/ translatewiki.net] raha tia handray anjara amin'ny fandikana an'i Mediawiki amin'ny ankapobeny.",
 'allmessagesnotsupportedDB' => "Tsy mbola mandeha ny '''{{ns:special}}:Allmessages''' satria tsy mandeha koa ny '''\$wgUseDatabaseMessages'''.",
 'allmessages-filter-legend' => 'Tantavanina',
 'allmessages-filter' => 'Hanasivana araka ny satam-panovana :',
@@ -2809,6 +2813,7 @@ Ampesao ny topi-maso aloha no mihatiry.",
 'tooltip-diff' => "Asehoy izay novainao tamin'ny lahatsoratra.",
 'tooltip-compareselectedversions' => "Jereo ny fahasamihafana amin'ireo votoatin'ny pejy anankiroa ireo.",
 'tooltip-watch' => "Ampidiro amin'ny lisitry ny pejy arahinao maso ity pejy ity",
+'tooltip-watchlistedit-normal-submit' => 'Hanala ny lohateny',
 'tooltip-recreate' => 'Hamorona ilay pejy fanindroany raha efa voafafa izy',
 'tooltip-upload' => 'Hanomboka ny fampidirana',
 'tooltip-rollback' => "Manala ny fanovan'ny mpikambana farany nanova azy ilay asa « foano » (Rollback) .",
@@ -2843,11 +2848,11 @@ Mamerina ny version taloha io asa io ary afaka manometraka ny antony anatin'ny a
 
 # Info page
 'pageinfo-title' => 'Fampahalalana ho an\'i "$1"',
-'pageinfo-header-edits' => 'Fanovana',
+'pageinfo-header-edits' => "Tantaran'ny fanovana",
 'pageinfo-views' => "Isan'ny jery",
-'pageinfo-watchers' => "Isan'ny mpikambana manaraka an'ity pejy ity",
-'pageinfo-edits' => "Isan'ny fanovana",
-'pageinfo-authors' => "Isan'ny mpanoratra tokana",
+'pageinfo-watchers' => "Isan'ny mpandray anjara manaraka",
+'pageinfo-edits' => "Isa manontolon'ny fanovana",
+'pageinfo-authors' => "Isa manontolon'ny mpandray anjara",
 
 # Patrolling
 'markaspatrolleddiff' => 'Marihana ho voamarina',
@@ -2888,6 +2893,7 @@ Raha alefanao ilay izy, mety ho simban'io renifango io ny solosainao.",
 'widthheightpage' => '$1 × $2, pejy $3{{PLURAL:}}',
 'file-info' => 'Haben-drakitra : $1, karazana MIME : $2',
 'file-info-size' => "$1 × $2 teboka, haben'ilay rakitra : $3, endrika MIME : $4",
+'file-info-size-pages' => '$1 × $2 teboka, haben-drakitra : $3, karazana MIME $4, pejy $5 {{PLURAL:}}',
 'file-nohires' => "Tsy misy sary ngeza non'io",
 'svg-long-desc' => 'rakitra SVG, habe $1 × $2 teboka, habe : $3',
 'show-big-image' => "Hijery ny tena haben'ny sary",
index 4c3a3f6..2e6cc29 100644 (file)
@@ -72,14 +72,14 @@ $specialPageAliases = 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' ),
+       '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(
index a71605a..483f77e 100644 (file)
@@ -214,12 +214,12 @@ $messages = array(
 'unprotectthispage' => 'Bukak palindungan laman iko',
 'newpage' => 'Laman baru',
 'talkpage' => 'Musyawarahkan laman ko',
-'talkpagelinktext' => 'Kecek',
+'talkpagelinktext' => 'Maota',
 'specialpage' => 'Laman istimewa',
 'personaltools' => 'Peralatan pribadi',
 'postcomment' => 'Bagian baru',
 'articlepage' => 'Liek isi laman',
-'talk' => 'Pembicaraan',
+'talk' => 'Ota',
 'views' => 'Tampilan',
 'toolbox' => 'Kotak pakakeh',
 'userpage' => 'Liek laman pangguno',
@@ -302,12 +302,12 @@ $1',
 '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)',
+'red-link-title' => '$1 (halaman alun babuek)',
 'sort-descending' => 'Urutkan manurun',
 'sort-ascending' => 'Urutkan manaik',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main' => 'Laman',
+'nstab-main' => 'Halaman',
 'nstab-user' => 'Laman pangguno',
 'nstab-media' => 'Laman Media',
 'nstab-special' => 'Laman istimewa',
@@ -778,7 +778,7 @@ Legend: '''({{int:kini}})''' = perbedaan jo revisi terakhir, '''({{int:dulu}})''
 
 # Search results
 'searchresults' => 'Hasil pencarian',
-'searchresults-title' => 'Hasil pencarian untuak "$1"',
+'searchresults-title' => 'Hasil pancarian 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'''",
@@ -1142,13 +1142,13 @@ Awak hanyo buliah lihek sumber se',
 '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-search-fulltext' => 'Cari halaman nan mamuek teks ko',
 'tooltip-p-logo' => '↓ Kunjungi laman utamo',
 '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-recentchanges' => 'Daftar panyuntiangan 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',
@@ -1158,7 +1158,7 @@ Awak hanyo buliah lihek sumber se',
 '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-specialpages' => 'Sadoalah 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',
index 48a5e96..b664588 100644 (file)
@@ -139,6 +139,7 @@ $specialPageAliases = array(
        'MIMEsearch'                => array( 'MIMEПребарување' ),
        'Mostcategories'            => array( 'НајмногуКатегории' ),
        'Mostimages'                => array( 'НајмногуСлики', 'НајмногуПодатотеки', 'ПодатотекиСоНајмногуВрски' ),
+       'Mostinterwikis'            => array( 'НајмногуМеѓувикија' ),
        'Mostlinked'                => array( 'СоНајмногуВрски', 'СтранициСоНајмногуВрски' ),
        'Mostlinkedcategories'      => array( 'НајупотребуваниКатегории' ),
        'Mostlinkedtemplates'       => array( 'НајупотребуваниШаблони' ),
@@ -195,132 +196,148 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#пренасочување', '#види', '#Пренасочување', '#ПРЕНАСОЧУВАЊЕ', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__БЕЗСОДРЖИНА__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__БЕЗГАЛЕРИЈА__', '__NOGALLERY__' ),
-       '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' ),
-       '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' ),
-       'localmonth'              => array( '1', 'МЕСЕЦ_ЛОКАЛНО', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', 'МЕСЕЦ_ЛОКАЛНО1', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'МЕСЕЦИМЕ_ЛОКАЛНО', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'МЕСЕЦИМЕ_ЛОКАЛНО_ГЕНИТИВ', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'МЕСЕЦИМЕ_ЛОКАЛНО_КРАТЕНКА', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'ДЕН_ЛОКАЛНО', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'ДЕН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' ),
-       'numberofusers'           => array( '1', 'БРОЈНАКОРИСНИЦИ', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'БРОЈНААКТИВНИКОРИСНИЦИ', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'БРОЈНАУРЕДУВАЊА', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'БРОЈНАПРЕГЛЕДУВАЊА', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'СТРАНИЦА', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'СТРАНИЦАИ', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'ИМЕПРОСТОР', 'ИМЕНСКИПРОСТОР', 'NAMESPACE' ),
-       'talkspace'               => array( '1', 'РАЗГОВОРПРОСТОР', 'TALKSPACE' ),
-       'fullpagename'            => array( '1', 'ЦЕЛОСНОИМЕНАСТРАНИЦА', 'FULLPAGENAME' ),
-       'subpagename'             => array( '1', 'ИМЕНАПОТСТРАНИЦА', 'SUBPAGENAME' ),
-       'basepagename'            => array( '1', 'ИМЕНАОСНОВНАСТРАНИЦА', 'BASEPAGENAME' ),
-       'talkpagename'            => array( '1', 'СТРАНИЦАЗАРАЗГОВОР', 'TALKPAGENAME' ),
-       'subjectpagename'         => array( '1', 'ИМЕНАСТАТИЈА', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       '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' ),
-       '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', 'страница=$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' ),
-       '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' ),
-       'sitename'                => array( '1', 'ИМЕНАМРЕЖНОМЕСТО', 'SITENAME' ),
-       'localurl'                => array( '0', 'ЛОКАЛНААДРЕСА:', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'ЛОКАЛНААДРЕСАИ:', 'LOCALURLE:' ),
-       'server'                  => array( '0', 'ОПСЛУЖУВАЧ', 'SERVER' ),
-       'servername'              => array( '0', 'ИМЕНАОПСЛУЖУВАЧ', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'ПАТЕКАНАСКРИПТА', 'SCRIPTPATH' ),
-       '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:' ),
-       'fullurl'                 => array( '0', 'ПОЛНАURL:', 'FULLURL:' ),
-       'raw'                     => array( '0', 'СИРОВО:', 'РЕД:', 'RAW:' ),
-       'displaytitle'            => array( '1', 'ПРИКАЖИНАСЛОВ', 'DISPLAYTITLE' ),
-       'rawsuffix'               => array( '1', 'П', 'R' ),
-       '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' ),
-       '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__' ),
-       'numberingroup'           => array( '1', 'БРОЈВОГРУПА', 'NUMBERINGROUP', 'NUMINGROUP' ),
-       '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' ),
-       'defaultsort_noerror'     => array( '0', 'безгрешки', 'noerror' ),
-       'defaultsort_noreplace'   => array( '0', 'беззамена', 'noreplace' ),
+       'redirect'                  => array( '0', '#пренасочување', '#види', '#Пренасочување', '#ПРЕНАСОЧУВАЊЕ', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__БЕЗСОДРЖИНА__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__БЕЗГАЛЕРИЈА__', '__NOGALLERY__' ),
+       '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' ),
+       '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' ),
+       'localmonth'                => array( '1', 'МЕСЕЦ_ЛОКАЛНО', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'МЕСЕЦ_ЛОКАЛНО1', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'МЕСЕЦИМЕ_ЛОКАЛНО', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'МЕСЕЦИМЕ_ЛОКАЛНО_ГЕНИТИВ', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'МЕСЕЦИМЕ_ЛОКАЛНО_КРАТЕНКА', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'ДЕН_ЛОКАЛНО', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'ДЕН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' ),
+       'numberofusers'             => array( '1', 'БРОЈНАКОРИСНИЦИ', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'БРОЈНААКТИВНИКОРИСНИЦИ', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'БРОЈНАУРЕДУВАЊА', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'БРОЈНАПРЕГЛЕДУВАЊА', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'СТРАНИЦА', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'СТРАНИЦАИ', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'ИМЕПРОСТОР', 'ИМЕНСКИПРОСТОР', 'NAMESPACE' ),
+       'talkspace'                 => array( '1', 'РАЗГОВОРПРОСТОР', 'TALKSPACE' ),
+       'fullpagename'              => array( '1', 'ЦЕЛОСНОИМЕНАСТРАНИЦА', 'FULLPAGENAME' ),
+       'subpagename'               => array( '1', 'ПОТСТРАНИЦА', 'SUBPAGENAME' ),
+       'basepagename'              => array( '1', 'ИМЕНАОСНОВНАСТРАНИЦА', 'BASEPAGENAME' ),
+       'talkpagename'              => array( '1', 'СТРАНИЦАЗАРАЗГОВОР', 'TALKPAGENAME' ),
+       'subjectpagename'           => array( '1', 'ИМЕНАСТАТИЈА', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       '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' ),
+       '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', 'страница=$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' ),
+       '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' ),
+       'img_class'                 => array( '1', 'класа=$1', 'class=$1' ),
+       'sitename'                  => array( '1', 'ИМЕНАМРЕЖНОМЕСТО', 'SITENAME' ),
+       'localurl'                  => array( '0', 'ЛОКАЛНААДРЕСА:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'ЛОКАЛНААДРЕСАИ:', 'LOCALURLE:' ),
+       'articlepath'               => array( '0', 'ПАТЕКАНАСТАТИЈА', 'ARTICLEPATH' ),
+       'pageid'                    => array( '0', 'НАЗНАКАНАСТРАНИЦА', 'PAGEID' ),
+       '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' ),
+       '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:' ),
+       'fullurl'                   => array( '0', 'ПОЛНАURL:', 'FULLURL:' ),
+       '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', 'ТЕКОВНАВЕРЗИЈА', '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' ),
+       '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__' ),
+       'numberingroup'             => array( '1', 'БРОЈВОГРУПА', 'NUMBERINGROUP', 'NUMINGROUP' ),
+       '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' ),
+       'defaultsort_noerror'       => array( '0', 'безгрешки', 'noerror' ),
+       'defaultsort_noreplace'     => array( '0', 'беззамена', 'noreplace' ),
+       'pagesincategory_all'       => array( '0', 'сите', 'all' ),
+       'pagesincategory_pages'     => array( '0', 'страници', 'pages' ),
+       'pagesincategory_subcats'   => array( '0', 'поткатегории', 'subcats' ),
+       'pagesincategory_files'     => array( '0', 'податотеки', 'files' ),
 );
 
 $linkTrail = '/^([a-zабвгдѓежзѕијклљмнњопрстќуфхцчџш]+)(.*)$/sDu';
@@ -1040,7 +1057,7 @@ $2
 'updated' => '(Подновено)',
 'note' => "'''Напомена:'''",
 'previewnote' => "'''Имајте предвид дека ова е само преглед.'''
\92аÑ\88иÑ\82е Ð¿Ñ\80омени сè уште не се зачувани!",
\9fÑ\80омениÑ\82е сè уште не се зачувани!",
 'continue-editing' => 'Продолжете со уредување',
 'previewconflict' => 'Овој преглед прикажува како ќе изгледа текстот внесен во горниот дел откако ќе се зачува страницата.',
 'session_fail_preview' => "'''Жалиме! Не можевме да го обработиме вашето уредување поради загуба на сесиски податоци.'''
@@ -1082,8 +1099,8 @@ $2
 '''НЕ ПРАЌАЈТЕ ТЕКСТОВИ ЗАШТИТЕНИ СО АВТОРСКИ ПРАВА БЕЗ ДОЗВОЛА!'''",
 'longpageerror' => "'''Грешка: Текстот што го внесовте е голем {{PLURAL:$1|еден килобајт|$1 килобајти}}, што ја надминува границата од {{PLURAL:$2|еден килобајт|$2 килобајти}}.'''
 Затоа нема да може да се зачува.",
-'readonlywarning' => "'''Ð\9fРÐ\95Ð\94УÐ\9fРÐ\95Ð\94УÐ\92Ð\90Ð\8aÐ\95: Ð\91азаÑ\82а Ð½Ð° Ð¿Ð¾Ð´Ð°Ñ\82оÑ\86и Ðµ Ð·Ð°ÐºÐ»Ñ\83Ñ\87ена Ð·Ð°Ñ\80ади Ð¾Ð´Ñ\80жÑ\83ваÑ\9aе, Ð¿Ð° Ð½ÐµÐ¼Ð° Ð´Ð° Ð¼Ð¾Ð¶ÐµÑ\82е Ð´Ð° Ð³Ð¸ Ð·Ð°Ñ\87Ñ\83ваÑ\82е Ð²Ð°Ñ\88иÑ\82е Ð¿Ñ\80омени сега.
\9fÑ\80обаÑ\98Ñ\82е Ð´Ð° Ð³Ð¾ Ð·Ð°Ñ\87Ñ\83ваÑ\82е Ñ\82екÑ\81Ñ\82оÑ\82 Ð»Ð¾ÐºÐ°Ð»Ð½Ð¾ (cut & paste) Ð²Ð¾ Ð½ÐµÐºÐ¾Ñ\98а Ð¿Ð¾Ð´Ð°Ñ\82оÑ\82ека Ð¸ Ð´Ð° Ð³Ð¾ Ð¿Ñ\80аÑ\82иÑ\82е Ð¿Ð¾Ð´Ð¾Ñ\86на.'''
+'readonlywarning' => "'''Ð\9fРÐ\95Ð\94УÐ\9fРÐ\95Ð\94УÐ\92Ð\90Ð\8aÐ\95: Ð\91азаÑ\82а Ð½Ð° Ð¿Ð¾Ð´Ð°Ñ\82оÑ\86и Ðµ Ð·Ð°ÐºÐ»Ñ\83Ñ\87ена Ð·Ð°Ñ\80ади Ð¾Ð´Ñ\80жÑ\83ваÑ\9aе, Ð¿Ð° Ð½ÐµÐ¼Ð° Ð´Ð° Ð¼Ð¾Ð¶ÐµÑ\82е Ð´Ð° Ð³Ð¸ Ð·Ð°Ñ\87Ñ\83ваÑ\82е Ð¿Ñ\80омениÑ\82е сега.
\9fÑ\80обаÑ\98Ñ\82е Ð´Ð° Ð³Ð¾ Ð·Ð°Ñ\87Ñ\83ваÑ\82е Ñ\82екÑ\81Ñ\82оÑ\82 Ð·Ð° Ð¿Ð¾Ð´Ð¾Ñ\86на, Ð»Ð¾ÐºÐ°Ð»Ð½Ð¾ (Ñ\81о Ð¿Ñ\80екопиÑ\80аÑ\9aе) Ð²Ð¾ Ð½ÐµÐºÐ¾Ñ\98а Ð¿Ð¾Ð´Ð°Ñ\82оÑ\82ека.'''
 
 Администраторот кој ја заклучил базата на податоци го дал следново објаснување: $1",
 'protectedpagewarning' => "'''Предупредување:  Оваа страница е заклучена, така што само корисници со администраторски привилегии можат да ја уредуваат.'''
@@ -2047,6 +2064,7 @@ $1',
 'shared-repo' => 'заедничко складиште',
 'shared-repo-name-wikimediacommons' => 'Заедничката Ризница',
 'filepage.css' => '/* Тука поставените каскадни стилски страници (CSS) се вклучени во страницата за опис на податотеката, како и на клиентските викија */',
+'upload-disallowed-here' => 'Нажалост, не можете да ја замените сликава со нова.',
 
 # File reversion
 'filerevert' => 'Врати $1',
@@ -3101,8 +3119,8 @@ $1',
 'tooltip-ca-nstab-help' => 'Преглед на страницата за помош',
 'tooltip-ca-nstab-category' => 'Преглед на категоријата',
 'tooltip-minoredit' => 'Обележи ја промената како ситна',
-'tooltip-save' => 'Ð\97аÑ\87Ñ\83ваÑ\98Ñ\82е Ð³Ð¸ Ð²Ð°Ñ\88иÑ\82е Ð¿Ñ\80омени',
-'tooltip-preview' => 'Прегледајте ги вашите промени, ве молиме користете го ова пред зачувување!',
+'tooltip-save' => 'Ð\97аÑ\87Ñ\83ваÑ\98Ñ\82е Ð³Ð¸ Ð¿Ñ\80омениÑ\82е',
+'tooltip-preview' => 'Преглед на промените - ве молиме користете го ова пред зачувување!',
 'tooltip-diff' => 'Покажи кои промени ги направи во текстот.',
 'tooltip-compareselectedversions' => 'Видете ја разликата помеѓу двете избрани верзии на оваа страница.',
 'tooltip-watch' => 'Додај ја страницава во списокот на набљудувања',
@@ -3186,6 +3204,8 @@ $1',
 'pageinfo-length' => 'Должина на страницата (во бајти)',
 'pageinfo-article-id' => 'Назнака на страницата',
 'pageinfo-robot-policy' => 'Статус на прелистувачот',
+'pageinfo-robot-index' => 'Се индексира',
+'pageinfo-robot-noindex' => 'Не се индексира',
 'pageinfo-views' => 'Број на посети',
 'pageinfo-watchers' => 'Број на набљудувачи',
 'pageinfo-redirects-name' => 'Пренасочувања кон страницата',
@@ -3200,9 +3220,9 @@ $1',
 'pageinfo-authors' => 'Број на засебни автори',
 'pageinfo-recent-edits' => 'Број на скорешни уредувања (во последните $1)',
 'pageinfo-recent-authors' => 'Број на скорешни засебни автори',
-'pageinfo-restriction' => 'Заштита на страницата ($1)',
-'pageinfo-magic-words' => 'Волшебни зборови ($1)',
-'pageinfo-hidden-categories' => 'Скриени категории ($1)',
+'pageinfo-restriction' => 'Заштита на страницата (<code>{{lcfirst:$1}}</code>)',
+'pageinfo-magic-words' => '{{PLURAL:$1|Волшебен збор|Волшебни зборови}} ($1)',
+'pageinfo-hidden-categories' => '{{PLURAL:$1|Скриена категорија|Скриени категории}} ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|Превметнат шаблон|Превметнати шаблони}} ($1)',
 
 # Skin names
@@ -3259,6 +3279,7 @@ $1',
 'file-info-size-pages' => '$1 × $2 пиксели, големина: $3, MIME-тип: $4, $5 {{PLURAL:$5|страница|страници}}',
 'file-nohires' => 'Не е достапна поголема резолуција.',
 'svg-long-desc' => 'SVG податотека, номинално $1 × $2 пиксели, големина: $3',
+'svg-long-desc-animated' => 'Анимирана SVG-податотека, номинално: $1 × $2 пиксели, големина: $3',
 'show-big-image' => 'Вистинска големина',
 'show-big-image-preview' => 'Големина на овој преглед: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Друга резолуција|Други резолуции}}: $1.',
@@ -3268,6 +3289,8 @@ $1',
 'file-info-png-looped' => 'кружно',
 'file-info-png-repeat' => 'пуштено {{PLURAL:$1|еднаш|$1 пати}}',
 'file-info-png-frames' => '$1 {{PLURAL:$1|кадар|кадри}}',
+'file-no-thumb-animation' => "'''Напомена: Поради технички ограничувања, минијатурите на оваа податотека нема да се анимираат.'''",
+'file-no-thumb-animation-gif' => "'''Напомена: Поради технички ограничувања, минијатурите на GIF-слики со висока резолуција како оваа нема да се анимираат.'''",
 
 # Special:NewFiles
 'newimages' => 'Галерија на нови податотеки',
index 05ec30d..f2f8323 100644 (file)
@@ -16,6 +16,7 @@
  * @author Junaidpv
  * @author Jyothis
  * @author Kaganer
+ * @author Krenair
  * @author Manjith Joseph <manjithkaini@gmail.com>
  * @author Naveen Sankar
  * @author Praveen Prakash <me.praveen@gmail.com>
@@ -181,147 +182,147 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#തിരിച്ചുവിടുക', '#തിരിച്ചുവിടൽ', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__ഉള്ളടക്കംവേണ്ട__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__ചിത്രസഞ്ചയംവേണ്ട__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__ഉള്ളടക്കംഇടുക__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__ഉള്ളടക്കം__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__സംശോധിക്കേണ്ട__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '__തലക്കെട്ടുവേണ്ട__', '__NOHEADER__' ),
-       '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' ),
-       'currentdayname'          => array( '1', 'ഈദിവസത്തിന്റെപേര്‌', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'ഈവർഷം', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'ഈസമയം', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'ഈമണിക്കൂർ', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'പ്രാദേശികമാസം', 'പ്രാദേശികമാസം2', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', 'പ്രാദേശികമാസം1', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'പ്രാദേശികമാസത്തിന്റെപേര്‌', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'പ്രാദേശികമാസത്തിന്റെപേരുസൃഷ്ടിക്കുക', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'പ്രാദേശികമാസത്തിന്റെപേര്‌സംഗ്രഹം', 'പ്രാദേശികമാസത്തിന്റെപേര്‌ചുരുക്കം', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'പ്രാദേശികദിവസം', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'പ്രാദേശികദിവസം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' ),
-       'numberofusers'           => array( '1', 'ഉപയോക്താക്കളുടെയെണ്ണം', 'അംഗങ്ങളുടെയെണ്ണം', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'സജീവോപയാക്താക്കളുടെയെണ്ണം', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'തിരുത്തലുകളുടെണ്ണം', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'എടുത്തുനോക്കലുകളുടെണ്ണം', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'താളിന്റെപേര്‌', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'താളിന്റെപേര്‌സമഗ്രം', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'നാമമേഖല', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'നാമമേഖലസമഗ്രം', 'NAMESPACEE' ),
-       'namespacenumber'         => array( '1', 'നാമമേഖലാസംഖ്യ', 'NAMESPACENUMBER' ),
-       'talkspace'               => array( '1', 'സംവാദമേഖല', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'സംവാദമേഖലസമഗ്രം', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'വിഷയമേഖല', 'ലേഖനമേഖല', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'വിഷയമേഖലസമഗ്രം', 'ലേഖനമേഖലസമഗ്രം', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'താളിന്റെമുഴുവൻപേര്‌', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'താളിന്റെമുഴുവൻപേര്സമഗ്രം', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'അനുബന്ധതാളിന്റെപേര്‌', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'അനുബന്ധതാളിന്റെപേര്സമഗ്രം', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'അടിസ്ഥാനതാളിന്റെപേര്‌', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'അടിസ്ഥാനതാളിന്റെപേര്‌സമഗ്രം', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'സംവാദതാളിന്റെപേര്‌', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'സംവാദതാളിന്റെപേര്‌സമഗ്രം', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'ലേഖനതാളിന്റെപേര്‌', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       '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' ),
-       '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_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' ),
-       'sitename'                => array( '1', 'സൈറ്റിന്റെപേര്', 'SITENAME' ),
-       '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' ),
-       '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' ),
-       'currentdow'              => array( '1', 'ദിവസത്തിന്റെപേര്‌അക്കത്തിൽ', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'പ്രാദേശികആഴ്ച', 'പ്രാദേശികആഴ്‌ച', 'LOCALWEEK' ),
-       'localdow'                => array( '1', 'ആഴ്ചയുടെപേര്‌അക്കത്തിൽ', 'ആഴ്‌ചയുടെപേര്‌അക്കത്തിൽ', 'LOCALDOW' ),
-       'revisionid'              => array( '1', 'തിരുത്തൽഅടയാളം', 'REVISIONID' ),
-       '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:' ),
-       'displaytitle'            => array( '1', 'ശീർഷകംപ്രദർശിപ്പിക്കുക', 'തലക്കെട്ട്പ്രദർശിപ്പിക്കുക', 'DISPLAYTITLE' ),
-       'rawsuffix'               => array( '1', 'വ', 'R' ),
-       'newsectionlink'          => array( '1', '__പുതിയവിഭാഗംകണ്ണി__', '__പുതിയഖണ്ഡിക്കണ്ണി__', '__NEWSECTIONLINK__' ),
-       'nonewsectionlink'        => array( '1', '__പുതിയവിഭാഗംകണ്ണിവേണ്ട__', '__പുതിയഖണ്ഡിക്കണ്ണിവേണ്ട__', '__NONEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', 'ഈപതിപ്പ്', 'CURRENTVERSION' ),
-       '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:' ),
-       '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' ),
-       'defaultsort_noerror'     => array( '0', 'പിഴവില്ല', 'noerror' ),
-       'defaultsort_noreplace'   => array( '0', 'മാറ്റേണ്ടതില്ല', 'noreplace' ),
+       'redirect'                  => array( '0', '#തിരിച്ചുവിടുക', '#തിരിച്ചുവിടൽ', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__ഉള്ളടക്കംവേണ്ട__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__ചിത്രസഞ്ചയംവേണ്ട__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__ഉള്ളടക്കംഇടുക__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__ഉള്ളടക്കം__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__സംശോധിക്കേണ്ട__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '__തലക്കെട്ടുവേണ്ട__', '__NOHEADER__' ),
+       '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' ),
+       'currentdayname'            => array( '1', 'ഈദിവസത്തിന്റെപേര്‌', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'ഈവർഷം', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'ഈസമയം', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'ഈമണിക്കൂർ', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'പ്രാദേശികമാസം', 'പ്രാദേശികമാസം2', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'പ്രാദേശികമാസം1', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'പ്രാദേശികമാസത്തിന്റെപേര്‌', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'പ്രാദേശികമാസത്തിന്റെപേരുസൃഷ്ടിക്കുക', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'പ്രാദേശികമാസത്തിന്റെപേര്‌സംഗ്രഹം', 'പ്രാദേശികമാസത്തിന്റെപേര്‌ചുരുക്കം', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'പ്രാദേശികദിവസം', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'പ്രാദേശികദിവസം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' ),
+       'numberofusers'             => array( '1', 'ഉപയോക്താക്കളുടെയെണ്ണം', 'അംഗങ്ങളുടെയെണ്ണം', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'സജീവോപയാക്താക്കളുടെയെണ്ണം', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'തിരുത്തലുകളുടെണ്ണം', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'എടുത്തുനോക്കലുകളുടെണ്ണം', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'താളിന്റെപേര്‌', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'താളിന്റെപേര്‌സമഗ്രം', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'നാമമേഖല', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'നാമമേഖലസമഗ്രം', 'NAMESPACEE' ),
+       'namespacenumber'           => array( '1', 'നാമമേഖലാസംഖ്യ', 'NAMESPACENUMBER' ),
+       'talkspace'                 => array( '1', 'സംവാദമേഖല', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'സംവാദമേഖലസമഗ്രം', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'വിഷയമേഖല', 'ലേഖനമേഖല', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'വിഷയമേഖലസമഗ്രം', 'ലേഖനമേഖലസമഗ്രം', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'താളിന്റെമുഴുവൻപേര്‌', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'താളിന്റെമുഴുവൻപേര്സമഗ്രം', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'അനുബന്ധതാളിന്റെപേര്‌', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'അനുബന്ധതാളിന്റെപേര്സമഗ്രം', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'അടിസ്ഥാനതാളിന്റെപേര്‌', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'അടിസ്ഥാനതാളിന്റെപേര്‌സമഗ്രം', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'സംവാദതാളിന്റെപേര്‌', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'സംവാദതാളിന്റെപേര്‌സമഗ്രം', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'ലേഖനതാളിന്റെപേര്‌', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       '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' ),
+       '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_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' ),
+       'sitename'                  => array( '1', 'സൈറ്റിന്റെപേര്', 'SITENAME' ),
+       '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' ),
+       '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' ),
+       'currentdow'                => array( '1', 'ദിവസത്തിന്റെപേര്‌അക്കത്തിൽ', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'പ്രാദേശികആഴ്ച', 'പ്രാദേശികആഴ്‌ച', 'LOCALWEEK' ),
+       'localdow'                  => array( '1', 'ആഴ്ചയുടെപേര്‌അക്കത്തിൽ', 'ആഴ്‌ചയുടെപേര്‌അക്കത്തിൽ', 'LOCALDOW' ),
+       'revisionid'                => array( '1', 'തിരുത്തൽഅടയാളം', 'REVISIONID' ),
+       '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:' ),
+       'displaytitle'              => array( '1', 'ശീർഷകംപ്രദർശിപ്പിക്കുക', 'തലക്കെട്ട്പ്രദർശിപ്പിക്കുക', 'DISPLAYTITLE' ),
+       'rawsuffix'                 => array( '1', 'വ', 'R' ),
+       'newsectionlink'            => array( '1', '__പുതിയവിഭാഗംകണ്ണി__', '__പുതിയഖണ്ഡിക്കണ്ണി__', '__NEWSECTIONLINK__' ),
+       'nonewsectionlink'          => array( '1', '__പുതിയവിഭാഗംകണ്ണിവേണ്ട__', '__പുതിയഖണ്ഡിക്കണ്ണിവേണ്ട__', '__NONEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'ഈപതിപ്പ്', 'CURRENTVERSION' ),
+       '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:' ),
+       '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' ),
+       'defaultsort_noerror'       => array( '0', 'പിഴവില്ല', 'noerror' ),
+       'defaultsort_noreplace'     => array( '0', 'മാറ്റേണ്ടതില്ല', 'noreplace' ),
 );
 
 $digitGroupingPattern = "##,##,###";
@@ -962,8 +963,8 @@ $1 ആണ് ഈ തടയൽ നടത്തിയത്. ''$2'' എന്ന
 'newarticle' => '(പുതിയത്)',
 'newarticletext' => 'ഇതുവരെ നിലവിലില്ലാത്ത ഒരു താൾ സൃഷ്ടിക്കാനുള്ള ശ്രമത്തിലാണ് താങ്കൾ. അതിനായി താഴെ ആവശ്യമുള്ള വിവരങ്ങൾ എഴുതിച്ചേർത്ത് സേവ് ചെയ്യുക (കൂടുതൽ വിവരങ്ങൾക്ക് [[{{MediaWiki:Helppage}}|സഹായം താൾ]] കാണുക). താങ്കളിവിടെ അബദ്ധത്തിൽ വന്നതാണെങ്കിൽ ബ്രൗസറിന്റെ ബാക്ക് ബട്ടൺ ഞെക്കിയാൽ തിരിച്ചുപോകാം.',
 'anontalkpagetext' => "----
-{| class=\"messagebox standard-talk\" style=\"border: 1px solid #B3B300; background-color:#FFFFBF;\"
-|align=\"left\" |
+{| class=\"messagebox standard-talk\" style=\"border: 1px solid #B3B300; background-color:#FFFFBF; text-align: left;\"
+|
 ''ഇതുവരെ അംഗത്വം എടുക്കാതിരിക്കുകയോ, നിലവിലുള്ള അംഗത്വം ഉപയോഗിക്കാതിരിക്കുകയോ ചെയ്യുന്ന '''ഒരു അജ്ഞാത ഉപയോക്താവിന്റെ സം‌വാദം താളാണിത്'''.
 അതിനാൽ അദ്ദേഹത്തെ തിരിച്ചറിയുവാൻ അക്കരൂപത്തിലുള്ള ഐ.പി. വിലാസം ഉപയോഗിക്കേണ്ടതുണ്ട്. ഇത്തരം ഒരു ഐ.പി. വിലാസം പല ഉപയോക്താക്കൾ പങ്കുവെക്കുന്നുണ്ടാവാം.
 താങ്കൾ ഈ സന്ദേശം ലഭിച്ച ഒരു അജ്ഞാത ഉപയോക്താവാണെങ്കിൽ, ഭാവിയിൽ ഇതര ഉപയോക്താക്കളുമായി ഉണ്ടായേക്കാവുന്ന ആശയക്കുഴപ്പം ഒഴിവാക്കാൻ ദയവായി [[Special:UserLogin/signup|ഒരു അംഗത്വമെടുക്കുക]] അല്ലെങ്കിൽ  [[Special:UserLogin|പ്രവേശിക്കുക]].
@@ -984,9 +985,8 @@ $1 ആണ് ഈ തടയൽ നടത്തിയത്. ''$2'' എന്ന
 'clearyourcache' => "'''ശ്രദ്ധിക്കുക:''' സേവ് ചെയ്തശേഷം മാറ്റങ്ങൾ കാണാനായി താങ്കൾക്ക് ബ്രൗസറിന്റെ കാഷെ ഒഴിവാക്കേണ്ടി വന്നേക്കാം.
 * '''ഫയർഫോക്സ് / സഫാരി:'''  ''Reload'' ബട്ടൺ അമർത്തുമ്പോൾ ''Shift'' കീ അമർത്തി പിടിക്കുകയോ, ''Ctrl-F5'' അല്ലെങ്കിൽ  ''Ctrl-R''  (മാക്കിന്റോഷിൽ ''⌘-R'' ) എന്ന് ഒരുമിച്ച് അമർത്തുകയോ ചെയ്യുക
 * '''ഗൂഗിൾ ക്രോം:'''  ''Ctrl-Shift-R'' (മാക്കിന്റോഷിൽ ''⌘-Shift-R'' ) അമർത്തുക
-* '''ഇന്റർനെറ്റ് എക്സ്പ്ലോറർ:''' ''Refresh'' ബട്ടൺ അമർത്തുമ്പോൾ ''Ctrl'' കീ അമർത്തിപിടിക്കുക. അല്ലെങ്കിൽ ''Ctrl-F5'' അമർത്തുക;
-* '''ഓപ്പറ:'''  ''Tools→Preferences'' ഉപയോഗിച്ച് കാഷെ പൂർണ്ണമായും ക്ലിയർ ചെയ്യുക;
-* '''കോൺക്വറർ:''' ''Reload'' ബട്ടൺ അമർത്തുകയോ ''F5'' കീ അമർത്തുകയോ ചെയ്യുക.",
+* '''ഇന്റർനെറ്റ് എക്സ്പ്ലോറർ:''' ''Refresh'' ബട്ടൺ അമർത്തുമ്പോൾ ''Ctrl'' കീ അമർത്തിപിടിക്കുക. അല്ലെങ്കിൽ ''Ctrl-F5'' അമർത്തുക
+* '''ഓപ്പറ:'''  ''Tools→Preferences'' ഉപയോഗിച്ച് കാഷെ പൂർണ്ണമായും ക്ലിയർ ചെയ്യുക",
 'usercssyoucanpreview' => "'''വഴികാട്ടി:''' താങ്കളുടെ പുതിയ CSS സേവ് ചെയ്യുന്നതിനു മുമ്പ് \"{{int:showpreview}}\" എന്ന ബട്ടൻ ഉപയോഗിച്ച് പരിശോധിക്കുക.",
 'userjsyoucanpreview' => "'''വഴികാട്ടി:''' താങ്കളുടെ പുതിയ ജാവാസ്ക്രിപ്റ്റ് സേവ് ചെയ്യുന്നതിനു മുമ്പ് \"{{int:showpreview}}\" എന്ന ബട്ടൻ ഉപയോഗിച്ച് പരിശോധിക്കുക.",
 'usercsspreview' => "'''താങ്കൾ താങ്കളുടെ സ്വന്തം സി.എസ്.എസ്. പ്രിവ്യൂ ചെയ്യുക മാത്രമേ ചെയ്യുന്നുള്ളൂ എന്ന കാര്യം ഓർമ്മിക്കുക.'''
@@ -1975,6 +1975,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization കാണുക.',
 'shared-repo' => 'ഒരു പങ്കുവെക്കപ്പെട്ട സംഭരണി',
 'shared-repo-name-wikimediacommons' => 'വിക്കിമീഡിയ കോമൺസ്',
 'filepage.css' => '/* ഇവിടെ നൽകുന്ന സി.എസ്.എസ്. പ്രമാണ വിവരണ താളുകളിൽ ഉൾപ്പെടുത്തപ്പെടുന്നതായിരിക്കും, ബാഹ്യ ക്ലൈന്റ് വിക്കികളിലും അത് ലഭ്യമായിരിക്കും */',
+'upload-disallowed-here' => 'നിർഭാഗ്യവശാൽ ഈ ചിത്രത്തിനു മുകളിൽ മറ്റൊരു ചിത്രം ചേർക്കാൻ താങ്കൾക്ക് കഴിയില്ല.',
 
 # File reversion
 'filerevert' => '$1 തിരസ്ക്കരിക്കുക',
@@ -2082,6 +2083,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization കാണുക.',
 # Miscellaneous special pages
 'nbytes' => '{{PLURAL:$1|ഒരു ബൈറ്റ്|$1 ബൈറ്റുകൾ}}',
 'ncategories' => '{{PLURAL:$1|ഒരു വർഗ്ഗം|$1 വർഗ്ഗങ്ങൾ}}',
+'ninterwikis' => '{{PLURAL:$1|ഒരു അന്തർവിക്കി|$1 അന്തർവിക്കികൾ}}',
 'nlinks' => '{{PLURAL:$1|ഒരു കണ്ണി|$1 കണ്ണികൾ}}',
 'nmembers' => '{{PLURAL:$1|ഒരു അംഗം|$1 അംഗങ്ങൾ}}',
 'nrevisions' => '{{PLURAL:$1|ഒരു പതിപ്പ്|$1 പതിപ്പുകൾ}}',
@@ -2110,6 +2112,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization കാണുക.',
 'mostlinkedtemplates' => 'ഏറ്റവുമധികം കണ്ണി ചേർത്തിരിക്കുന്ന ഫലകങ്ങൾ',
 'mostcategories' => 'ഏറ്റവുമധികം വർഗ്ഗങ്ങൾ ഉൾപ്പെടുത്തിയിരിക്കുന്ന താളുകൾ',
 'mostimages' => 'ഏറ്റവുമധികം കണ്ണി ചേർത്തിരിക്കുന്ന പ്രമാണങ്ങൾ',
+'mostinterwikis' => 'ഏറ്റവുമധികം അന്തർവിക്കികളുള്ള താളുകൾ',
 'mostrevisions' => 'ഏറ്റവുമധികം തിരുത്തപ്പെട്ട താളുകൾ',
 'prefixindex' => 'പൂർവ്വപദത്തോടു കൂടിയ എല്ലാ താളുകളും',
 'prefixindex-namespace' => 'പൂർവ്വപദമുള്ള എല്ലാ താളുകളും (നാമമേഖല $1)',
@@ -2256,6 +2259,8 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization കാണുക.',
 'mailnologin' => 'അയയ്ക്കാനുള്ള വിലാസം ലഭ്യമല്ല',
 'mailnologintext' => 'മറ്റ് ഉപയോക്താക്കൾക്കു ഇമെയിലയക്കുവാൻ താങ്കൾ [[Special:UserLogin|ലോഗിൻ]] ചെയ്തിരിക്കുകയും, സാധുവായ ഒരു ഇമെയിൽ വിലാസം താങ്കളുടെ [[Special:Preferences|ക്രമീകരണങ്ങൾ]] താളിൽ സജ്ജീകരിച്ചിരിക്കുകയും വേണം.',
 'emailuser' => 'ഈ ഉപയോക്താവിനു ഇമെയിൽ അയക്കുക',
+'emailuser-title-target' => 'ഈ {{GENDER:$1|ഉപയോക്താവിന്}} ഇമെയിൽ അയയ്ക്കുക',
+'emailuser-title-notarget' => 'ഉപയോക്താവിന് ഇമെയിൽ അയക്കുക',
 'emailpage' => 'ഉപയോക്താവിന് ഇമെയിൽ അയക്കുക',
 'emailpagetext' => 'താഴെ കാണുന്ന ഫോം മറ്റൊരു ഉപയോക്താവിന്‌ ഇമെയിൽ അയക്കാൻ ഉപയോഗിക്കാവുന്നതാണ്.
 [[Special:Preferences|ഉപയോക്താവിന്റെ ക്രമീകരണങ്ങളിൽ]] കൊടുത്തിട്ടുള്ള ഇമെയിൽ വിലാസം "ദാതാവ്" ആയി വരുന്നതാണ്‌, അതുകൊണ്ട് സ്വീകർത്താവിന്‌ താങ്കൾക്ക് നേരിട്ട് മറുപടി അയക്കാൻ കഴിയും.',
@@ -2395,8 +2400,8 @@ $UNWATCHURL
 'rollback' => 'തിരുത്തലുകൾ റോൾബാക്ക് ചെയ്യുക',
 'rollback_short' => 'റോൾബാക്ക്',
 'rollbacklink' => 'റോൾബാക്ക്',
-'rollbacklinkcount' => '{{PLURAL:$1|à´\92à´°àµ\81 à´¤à´¿à´°àµ\81à´¤àµ\8dതൽ|$1 à´¤à´¿à´°àµ\81à´¤àµ\8dതലുകൾ}} മുൻപ്രാപനം ചെയ്യുക',
-'rollbacklinkcount-morethan' => '{{PLURAL:$1|à´\92à´¨àµ\8dനിലധിà´\95à´\82 à´¤à´¿à´°àµ\81à´¤àµ\8dതൽ|$1 à´\8eà´£àµ\8dണതàµ\8dതിലധിà´\95à´\82 à´¤à´¿à´°àµ\81à´¤àµ\8dതലുകൾ}} മുൻപ്രാപനം ചെയ്യുക',
+'rollbacklinkcount' => '{{PLURAL:$1|à´\92à´°àµ\81 à´¤à´¿à´°àµ\81à´¤àµ\8dà´¤àµ\8d|$1 à´¤à´¿à´°àµ\81à´¤àµ\8dà´¤ുകൾ}} മുൻപ്രാപനം ചെയ്യുക',
+'rollbacklinkcount-morethan' => '{{PLURAL:$1|à´\92à´¨àµ\8dനിലധിà´\95à´\82 à´¤à´¿à´°àµ\81à´¤àµ\8dà´¤àµ\81à´\95ൾ|$1 à´\8eà´£àµ\8dണതàµ\8dതിലധിà´\95à´\82 à´¤à´¿à´°àµ\81à´¤àµ\8dà´¤ുകൾ}} മുൻപ്രാപനം ചെയ്യുക',
 'rollbackfailed' => 'റോൾബാക്ക് പരാജയപ്പെട്ടു',
 'cantrollback' => 'തിരുത്തൽ തിരസ്കരിക്കുവാൻ സാധിക്കുകയില്ല. ഒരു ഉപയോക്താവ് മാത്രമാണ് ഈ താളിൽ സം‌ഭാവന ചെയ്തിരിക്കുന്നത്.',
 'alreadyrolled' => '[[:$1]] എന്ന താളിൽ [[User:$2|$2]] ([[User talk:$2|സംവാദം]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) നടത്തിയ തിരുത്തലുകൾ മുൻപ്രാപനം ചെയ്യാൻ സാധിക്കുന്നതല്ല. മറ്റാരോ താൾ തിരുത്തുകയോ മുൻപ്രാപനം ചെയ്യുകയോ ചെയ്തിരിക്കുന്നു.
@@ -2892,6 +2897,7 @@ $1',
 'import-interwiki-templates' => 'എല്ലാ ഫലകങ്ങളും ഉൾപ്പെടുത്തുക',
 'import-interwiki-submit' => 'ഇറക്കുമതി',
 'import-interwiki-namespace' => 'ഉദ്ദിഷ്ട നാമമേഖല:',
+'import-interwiki-rootpage' => 'ലക്ഷ്യമിട്ട മൂലതാൾ (ഐച്ഛികം):',
 'import-upload-filename' => 'പ്രമാണത്തിന്റെ പേര്‌',
 'import-comment' => 'കുറിപ്പ്:',
 'importtext' => 'ദയവായി സ്രോതസ്സ് വിക്കിയിൽ നിന്ന് [[Special:Export|കയറ്റുമതി ഉപകരണം]] ഉപയോഗിച്ച് പ്രമാണം കയറ്റുമതി ചെയ്യുക.
@@ -2927,6 +2933,9 @@ $1',
 'import-error-interwiki' => 'ബാഹ്യ കണ്ണിചേർക്കലിനു (അന്തർവിക്കി) കരുതിവെച്ചിരിക്കുന്ന പേര് ആയതിനാൽ, "$1" എന്ന താൾ ഇറക്കുമതി ചെയ്തില്ല.',
 'import-error-special' => 'താളുകൾ അനുവദിക്കാത്ത പ്രത്യേക നാമമേഖലയിൽ പെടുന്നതായതിനാൽ "$1" എന്ന താൾ ഇറക്കുമതി ചെയ്തില്ല.',
 'import-error-invalid' => 'പേര് അസാധുവായതിനാൽ "$1" എന്ന താൾ ഇറക്കുമതി ചെയ്യില്ല.',
+'import-options-wrong' => 'തെറ്റായ {{PLURAL:$2|ഐച്ഛികം|ഐച്ഛികങ്ങൾ}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'നൽകിയ മൂലതാൾ അസാധുവാണ്.',
+'import-rootpage-nosubpage' => 'മൂലതാളിന്റെ നാമമേഖലയായ "$1" ഉപതാളുകൾ അനുവദിക്കുന്നില്ല.',
 
 # Import log
 'importlogpage' => 'ഇറക്കുമതി പ്രവർത്തനരേഖ',
@@ -3068,11 +3077,34 @@ $1',
 
 # Info page
 'pageinfo-title' => '"$1" എന്ന താളിന്റെ വിവരങ്ങൾ',
-'pageinfo-header-edits' => 'തിരുത്തലുകൾ',
+'pageinfo-header-basic' => 'അടിസ്ഥാനവിവരങ്ങൾ',
+'pageinfo-header-edits' => 'തിരുത്തൽചരിത്രം',
+'pageinfo-header-restrictions' => 'സംരക്ഷണം',
+'pageinfo-header-properties' => 'താളിന്റെ ഗുണഗണങ്ങൾ',
+'pageinfo-display-title' => 'പ്രദർശിപ്പിക്കേണ്ട തലക്കെട്ട്',
+'pageinfo-default-sort' => 'സ്വതേയുള്ള ക്രമപ്പെടുത്തൽ ചാവി',
+'pageinfo-length' => 'താളിന്റെ നീളം (ബൈറ്റിൽ)',
+'pageinfo-article-id' => 'താളിന്റെ ഐ.ഡി.',
+'pageinfo-robot-policy' => 'തിരച്ചിൽ പ്രവർത്തനത്തിന്റെ സ്ഥിതി',
+'pageinfo-robot-index' => 'സൂചികാവത്കരിക്കാവുന്നത്',
+'pageinfo-robot-noindex' => 'സൂചികാവത്കരിക്കാനാവാത്തത്',
 'pageinfo-views' => 'എടുത്തുനോക്കലുകളുടെ എണ്ണം',
-'pageinfo-watchers' => 'ശ്രദ്ധിക്കുന്നവരുടെ എണ്ണം',
-'pageinfo-edits' => 'ആകെ തിരുത്തലുകൾ',
-'pageinfo-authors' => 'ആകെ രചയിതാക്കളുടെ എണ്ണം',
+'pageinfo-watchers' => 'താൾ ശ്രദ്ധിക്കുന്നവരുടെ എണ്ണം',
+'pageinfo-redirects-name' => 'ഈ താളിലേക്കുള്ള തിരിച്ചുവിടലുകൾ',
+'pageinfo-subpages-name' => 'ഈ താളിന്റെ ഉപതാളുകൾ',
+'pageinfo-subpages-value' => '$1 ({{PLURAL:$2|ഒരു തിരിച്ചുവിടൽ|$2 തിരിച്ചുവിടലുകൾ}}; {{PLURAL:$3|തിരിച്ചുവിടലല്ലാത്ത ഒരെണ്ണം|തിരിച്ചുവിടലല്ലാത്ത $3}})',
+'pageinfo-firstuser' => 'താളിന്റെ നിർമ്മാതാവ്',
+'pageinfo-firsttime' => 'താൾ നിർമ്മിച്ച ദിവസം',
+'pageinfo-lastuser' => 'ഏറ്റവും പുതിയ രചയിതാവ്',
+'pageinfo-lasttime' => 'അവസാനത്തെ തിരുത്തുനടന്ന ദിവസം',
+'pageinfo-edits' => 'മൊത്തം തിരുത്തുകളുടെ എണ്ണം',
+'pageinfo-authors' => 'ആകെ വ്യത്യസ്തരചയിതാക്കളുടെ എണ്ണം',
+'pageinfo-recent-edits' => 'സമീപകാലത്തെ തിരുത്തുകൾ (കഴിഞ്ഞ $1 കാലയളവിനുള്ളിൽ)',
+'pageinfo-recent-authors' => 'സമീപകാലത്തെ വ്യത്യസ്തരചയിതാക്കളുടെ എണ്ണം',
+'pageinfo-restriction' => 'താൾ സംരക്ഷണം (<code>$1</code>)',
+'pageinfo-magic-words' => 'മാന്ത്രിക{{PLURAL:$1|വാക്ക്|വാക്കുകൾ}} ($1)',
+'pageinfo-hidden-categories' => 'മറഞ്ഞിരിക്കുന്ന {{PLURAL:$1|വർഗ്ഗം|വർഗ്ഗങ്ങൾ}} ($1)',
+'pageinfo-templates' => 'ഉൾപ്പെടുത്തിയിട്ടുള്ള {{PLURAL:$1|ഫലകം|ഫലകങ്ങൾ}} ($1)',
 
 # Skin names
 'skinname-standard' => 'സാർവത്രികം',
@@ -3125,7 +3157,8 @@ $1',
 'file-info-size' => '$1 × $2 പിക്സൽ, പ്രമാണത്തിന്റെ വലിപ്പം: $3, മൈം തരം: $4',
 'file-info-size-pages' => '$1 × $2 പിക്സൽ, പ്രമാണത്തിന്റെ വലിപ്പം: $3, മൈം തരം: $4, {{PLURAL:$5|ഒരു താൾ|$5 താളുകൾ}}',
 'file-nohires' => 'കൂടുതൽ വ്യക്തതയുള്ള ചിത്രം ലഭ്യമല്ല.',
-'svg-long-desc' => 'SVG പ്രമാണം, നാമമാത്രമായ $1 × $2 പിക്സലുകൾ, പ്രമാണത്തിന്റെ വലിപ്പം: $3',
+'svg-long-desc' => 'എസ്.വി.ജി. പ്രമാണം, നാമമാത്രമായ $1 × $2 പിക്സലുകൾ, പ്രമാണത്തിന്റെ വലിപ്പം: $3',
+'svg-long-desc-animated' => 'ചലിക്കുന്ന എസ്.വി.ജി. പ്രമാണം, നാമമാത്രമായ $1 × $2 പിക്സലുകൾ, പ്രമാണത്തിന്റെ വലിപ്പം: $3',
 'show-big-image' => 'പൂർണ്ണ റെസലൂഷൻ',
 'show-big-image-preview' => 'ഈ പ്രിവ്യൂവിന്റെ വലിപ്പം: $1.',
 'show-big-image-other' => 'മറ്റ് {{PLURAL:$2|റെസലൂഷൻ|റെസലൂഷനുകൾ}}: $1.',
@@ -3135,6 +3168,8 @@ $1',
 'file-info-png-looped' => 'പുനരാവർത്തിതം',
 'file-info-png-repeat' => '{{PLURAL:$1|ഒരു തവണ|$1 തവണ}} പ്രവർത്തിപ്പിച്ചു',
 'file-info-png-frames' => '{{PLURAL:$1|ഒരു ഫ്രെയിം|$1 ഫ്രെയിം}}',
+'file-no-thumb-animation' => "'''ശ്രദ്ധിക്കുക: സാങ്കേതികപരിമിതികൾ മൂലം, ഈ പ്രമാണത്തിന്റെ ലഘുചിത്രങ്ങൾ ചലനാത്മകമല്ല.'''",
+'file-no-thumb-animation-gif' => "'''കുറിപ്പ്: സാങ്കേതികമായ പരിമിതികളാൽ, ഇങ്ങനെയുള്ള ഉയർന്ന റെസലൂഷൻ ജി.ഐ.എഫ്. ചിത്രങ്ങളുടെ ലഘുചിത്രങ്ങൾ ചലിക്കുന്നതായിരിക്കുകയില്ല.'''",
 
 # Special:NewFiles
 'newimages' => 'പുതിയ പ്രമാണങ്ങളുടെ ചിത്രശാല',
index 57c8314..f0ade8f 100644 (file)
@@ -163,143 +163,143 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#पुनर्निर्देशन', '#पुर्ननिर्देशन', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__अनुक्रमणिकानको__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__प्रदर्शननको__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__अनुक्रमणिकाहवीच__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__अनुक्रमणिका__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__असंपादनक्षम__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '__शीर्षकनाही__', '__NOHEADER__' ),
-       'currentmonth'            => array( '1', 'सद्यमहिना', 'सद्यमहिना२', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', 'सद्यमहिना१', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', 'सद्यमहिनानाव', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'सद्यमहिनासाधारण', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'सद्यमहिनासंक्षीप्त', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'सद्यदिवस', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'सद्यदिवस२', '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', 'स्थानिकमहिना१', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'स्थानिकमहिनानाव', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'स्थानिकमहिनासाधारण', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'स्थानिकमहिनासंक्षीप्त', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'स्थानिकदिवस', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'स्थानिकदिवस२', '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' ),
-       'numberofusers'           => array( '1', 'सदस्यसंख्या', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'सक्रीयसदस्यसंख्या', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'संपादनसंख्या', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'धडकसंख्या', 'प्रेक्षासंख्या', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'लेखनाव', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'लेखानावव', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'नामविश्व', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'नामविश्वा', 'नामविश्वाचे', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'चर्चाविश्व', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'चर्चाविश्वा', 'चर्चाविश्वाचे', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'विषयविश्व', 'लेखविश्व', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'विषयविश्वा', 'लेखविश्वा', 'विषयविश्वाचे', 'लेखविश्वाचे', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'पूर्णलेखनाव', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'पूर्णलेखनावे', 'अंशदुवा', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'उपपाननाव', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'उपपाननावे', 'उपपाननावाचे', 'उपौंशदुवा', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'मूळपाननाव', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'मूळपाननावे', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'चर्चापाननाव', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'चर्चापाननावे', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'विषयपाननाव', 'लेखपाननाव', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'subjectpagenamee'        => array( '1', 'विषयपाननावे', 'लेखपाननावे', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
-       'msg'                     => array( '0', 'संदेश:', 'निरोप:', 'MSG:' ),
-       'subst'                   => array( '0', 'पर्याय:', 'समाविष्टी:', 'अबाह्य:', 'निरकंसबिंब:', 'कंसत्याग:', 'साचाहिन:', 'साचान्तर:', 'साचापरिस्फोट:', 'साचोद्घाटन:', 'SUBST:' ),
-       'msgnw'                   => array( '0', 'संदेशनवा:', 'निरोपनवा:', 'MSGNW:' ),
-       '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_width'               => array( '1', '$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', 'पान=$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' ),
-       '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', 'नाविअरिक्त:', 'नाव्यारिक्त:', 'नाव्याख:', 'NSE:' ),
-       'localurl'                => array( '0', 'स्थानिकस्थळ:', 'स्थानिकसंकेतस्थळ:', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'स्थानिकस्थली:', 'LOCALURLE:' ),
-       'server'                  => array( '0', 'विदादाता', 'SERVER' ),
-       'servername'              => array( '0', 'विदादातानाव', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'संहीतामार्ग', 'SCRIPTPATH' ),
-       'grammar'                 => array( '0', 'व्याकरण:', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'लिंग:', 'GENDER:' ),
-       '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', 'आवृत्तीक्र्मांक', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'आवृत्तीदिन', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'आवृत्तीदिन२', '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', 'संपूर्णसंस्थली:', 'संपूर्णसंस्थळी:', '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:' ),
-       '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:' ),
-       '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__' ),
-       'numberingroup'           => array( '1', 'गटक्रमांक', 'NUMBERINGROUP', 'NUMINGROUP' ),
-       'staticredirect'          => array( '1', '__अविचलपुर्ननिर्देश__', '__STATICREDIRECT__' ),
-       'protectionlevel'         => array( '1', 'सुरक्षास्तर', 'PROTECTIONLEVEL' ),
-       'formatdate'              => array( '0', 'दिनांकनपद्धती', 'formatdate', 'dateformat' ),
+       'redirect'                  => array( '0', '#पुनर्निर्देशन', '#पुर्ननिर्देशन', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__अनुक्रमणिकानको__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__प्रदर्शननको__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__अनुक्रमणिकाहवीच__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__अनुक्रमणिका__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__असंपादनक्षम__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '__शीर्षकनाही__', '__NOHEADER__' ),
+       'currentmonth'              => array( '1', 'सद्यमहिना', 'सद्यमहिना२', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'सद्यमहिना१', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'सद्यमहिनानाव', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'सद्यमहिनासाधारण', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'सद्यमहिनासंक्षीप्त', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'सद्यदिवस', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'सद्यदिवस२', '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', 'स्थानिकमहिना१', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'स्थानिकमहिनानाव', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'स्थानिकमहिनासाधारण', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'स्थानिकमहिनासंक्षीप्त', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'स्थानिकदिवस', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'स्थानिकदिवस२', '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' ),
+       'numberofusers'             => array( '1', 'सदस्यसंख्या', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'सक्रीयसदस्यसंख्या', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'संपादनसंख्या', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'धडकसंख्या', 'प्रेक्षासंख्या', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'लेखनाव', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'लेखानावव', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'नामविश्व', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'नामविश्वा', 'नामविश्वाचे', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'चर्चाविश्व', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'चर्चाविश्वा', 'चर्चाविश्वाचे', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'विषयविश्व', 'लेखविश्व', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'विषयविश्वा', 'लेखविश्वा', 'विषयविश्वाचे', 'लेखविश्वाचे', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'पूर्णलेखनाव', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'पूर्णलेखनावे', 'अंशदुवा', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'उपपाननाव', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'उपपाननावे', 'उपपाननावाचे', 'उपौंशदुवा', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'मूळपाननाव', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'मूळपाननावे', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'चर्चापाननाव', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'चर्चापाननावे', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'विषयपाननाव', 'लेखपाननाव', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'          => array( '1', 'विषयपाननावे', 'लेखपाननावे', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+       'msg'                       => array( '0', 'संदेश:', 'निरोप:', 'MSG:' ),
+       'subst'                     => array( '0', 'पर्याय:', 'समाविष्टी:', 'अबाह्य:', 'निरकंसबिंब:', 'कंसत्याग:', 'साचाहिन:', 'साचान्तर:', 'साचापरिस्फोट:', 'साचोद्घाटन:', 'SUBST:' ),
+       'msgnw'                     => array( '0', 'संदेशनवा:', 'निरोपनवा:', 'MSGNW:' ),
+       '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_width'                 => array( '1', '$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', 'पान=$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' ),
+       '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', 'नाविअरिक्त:', 'नाव्यारिक्त:', 'नाव्याख:', 'NSE:' ),
+       'localurl'                  => array( '0', 'स्थानिकस्थळ:', 'स्थानिकसंकेतस्थळ:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'स्थानिकस्थली:', 'LOCALURLE:' ),
+       'server'                    => array( '0', 'विदादाता', 'SERVER' ),
+       'servername'                => array( '0', 'विदादातानाव', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'संहीतामार्ग', 'SCRIPTPATH' ),
+       'grammar'                   => array( '0', 'व्याकरण:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'लिंग:', 'GENDER:' ),
+       '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', 'आवृत्तीक्र्मांक', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'आवृत्तीदिन', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'आवृत्तीदिन२', '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', 'संपूर्णसंस्थली:', 'संपूर्णसंस्थळी:', '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:' ),
+       '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:' ),
+       '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__' ),
+       'numberingroup'             => array( '1', 'गटक्रमांक', 'NUMBERINGROUP', 'NUMINGROUP' ),
+       'staticredirect'            => array( '1', '__अविचलपुर्ननिर्देश__', '__STATICREDIRECT__' ),
+       'protectionlevel'           => array( '1', 'सुरक्षास्तर', 'PROTECTIONLEVEL' ),
+       'formatdate'                => array( '0', 'दिनांकनपद्धती', 'formatdate', 'dateformat' ),
 );
 
 $digitTransformTable = array(
index ee9609c..da1ea47 100644 (file)
@@ -68,36 +68,36 @@ $namespaceAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#LENCONG', '#REDIRECT' ),
-       'currentmonth'            => array( '1', 'BULANSEMASA', 'BULANSEMASA2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', 'BULANSEMASA1', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', 'NAMABULANSEMASA', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'NAMABULANSEMASAGEN', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'SINGBULANSEMASA', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'HARISEMASA', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'HARISEMASA2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'NAMAHARISEMASA', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'TAHUNSEMASA', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'WAKTUSEMASA', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'JAMSEMASA', 'CURRENTHOUR' ),
-       'pagename'                => array( '1', 'NAMALAMAN', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'NAMALAMANE', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'RUANGNAMA', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'RUANGNAMAE', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'RUANGBINCANG', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'RUANGBINCANGE', 'TALKSPACEE' ),
-       'fullpagename'            => array( '1', 'NAMALAMANPENUH', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'NAMALAMANPENUHE', 'FULLPAGENAMEE' ),
-       'msg'                     => array( '0', 'PESAN:', 'MSG:' ),
-       'subst'                   => array( '0', 'TUKAR:', 'SUBST:' ),
-       'img_right'               => array( '1', 'kiri', 'right' ),
-       'img_left'                => array( '1', 'kanan', 'left' ),
-       'img_none'                => array( '1', 'tiada', 'none' ),
-       'img_center'              => array( '1', 'tengah', 'center', 'centre' ),
-       'sitename'                => array( '1', 'NAMATAPAK', 'SITENAME' ),
-       'ns'                      => array( '0', 'RN:', 'NS:' ),
-       'nse'                     => array( '0', 'RNE:', 'NSE:' ),
-       'currentweek'             => array( '1', 'MINGGUSEMASA', 'CURRENTWEEK' ),
+       'redirect'                  => array( '0', '#LENCONG', '#REDIRECT' ),
+       'currentmonth'              => array( '1', 'BULANSEMASA', 'BULANSEMASA2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'BULANSEMASA1', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'NAMABULANSEMASA', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'NAMABULANSEMASAGEN', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'SINGBULANSEMASA', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'HARISEMASA', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'HARISEMASA2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'NAMAHARISEMASA', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'TAHUNSEMASA', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'WAKTUSEMASA', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'JAMSEMASA', 'CURRENTHOUR' ),
+       'pagename'                  => array( '1', 'NAMALAMAN', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'NAMALAMANE', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'RUANGNAMA', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'RUANGNAMAE', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'RUANGBINCANG', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'RUANGBINCANGE', 'TALKSPACEE' ),
+       'fullpagename'              => array( '1', 'NAMALAMANPENUH', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'NAMALAMANPENUHE', 'FULLPAGENAMEE' ),
+       'msg'                       => array( '0', 'PESAN:', 'MSG:' ),
+       'subst'                     => array( '0', 'TUKAR:', 'SUBST:' ),
+       'img_right'                 => array( '1', 'kiri', 'right' ),
+       'img_left'                  => array( '1', 'kanan', 'left' ),
+       'img_none'                  => array( '1', 'tiada', 'none' ),
+       'img_center'                => array( '1', 'tengah', 'center', 'centre' ),
+       'sitename'                  => array( '1', 'NAMATAPAK', 'SITENAME' ),
+       'ns'                        => array( '0', 'RN:', 'NS:' ),
+       'nse'                       => array( '0', 'RNE:', 'NSE:' ),
+       'currentweek'               => array( '1', 'MINGGUSEMASA', 'CURRENTWEEK' ),
 );
 
 $specialPageAliases = array(
@@ -515,12 +515,12 @@ Senarai laman khas yang sah boleh dilihat di [[Special:SpecialPages]].',
 # General errors
 'error' => 'Ralat',
 'databaseerror' => 'Ralat pangkalan data',
-'dberrortext' => 'Ralat sintaks pertanyaan pangkalan data telah terjadi.
-Ini mungkin menandakan pepijat dalam perisian wiki ini.
-Pertanyaan pangkalan data yang terakhir ialah:
-<blockquote><tt>$1</tt></blockquote>
-daripada fungsi "<tt>$2</tt>".
-Pangkalan data memulangkan ralat "<tt>$3: $4</tt>".',
+'dberrortext' => 'Terjadinya ralat sintaks pertanyaan pangkalan data.
+Ini mungkin menandakan adanya pepijat dalam perisian ini.
+Pertanyaan pangkalan data terakhir yang dicuba ialah:
+<blockquote><code>$1</code></blockquote>
+daripada dalam fungsi "<samp>$2</samp>".
+Pangkalan data memulangkan ralat "<samp>$3: $4</samp>".',
 'dberrortextcl' => 'Terdapat ralat sintaks pertanyaan pangkalan data.
 Pertanyaan terakhir ialah:
 "$1"
@@ -854,11 +854,10 @@ Butirannya boleh didapati di [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGEN
 'userpage-userdoesnotexist-view' => 'Akaun pengguna "$1" tidak berdaftar.',
 'blocked-notice-logextract' => 'Pengguna ini sedang disekat.
 Masukan log sekatan terakhir disediakan di bawah sebagai rujukan:',
-'clearyourcache' => "'''Catatan: Selepas menyimpan laman ini, anda mungkin perlu membersihkan cache pelayar web anda terlebih dahulu untuk mengenakan perubahan.'''
+'clearyourcache' => "'''Catatan:''' Selepas menyimpan laman ini, anda mungkin perlu membersihkan cache pelayar web anda terlebih dahulu untuk mengenakan perubahan.
 *'''Firefox/Safari:''' Tekan terus ''Shift'' sambil klik ''Reload'', atau tekan ''Ctrl+F5'' atau tekan ''Ctrl+R''  (''⌘+R'' bagi Mac)
 *'''Google Chrome:''' Tekan ''Ctrl+Shift+R''  (''⌘+Shift+R'' bagi Mac)
 *'''Internet Explorer:''' Tekan terus ''Ctrl'' sambil klik ''Refresh'', atau tekan ''Ctrl+F5''
-*'''Konqueror:''' Klik butang ''Reload'', atau tekan ''F5''
 *'''Opera:''' Kosongkan cache di menu ''Tools → Preferences''",
 'usercssyoucanpreview' => "'''Petua:''' Gunakan butang \"{{int:showpreview}}\" untuk menguji CSS baru anda sebelum menyimpan.",
 'userjsyoucanpreview' => "'''Petua:''' Gunakan butang \"{{int:showpreview}}\" untuk menguji JavaScript baru anda sebelum menyimpan.",
@@ -1860,6 +1859,7 @@ Mungkin anda ingin menyunting keterangan pada [$2 laman penerangan failnya] di s
 'shared-repo' => 'sebuah gedung kongsi',
 'shared-repo-name-wikimediacommons' => 'Wikimedia Commons',
 'filepage.css' => '/* CSS yang ditempatkan di sini disertakan pada laman keterangan fail, dan juga pada klien wiki asing */',
+'upload-disallowed-here' => 'Maaf, anda tidak boleh menggantikan imej ini.',
 
 # File reversion
 'filerevert' => 'Balikkan $1',
@@ -1966,6 +1966,7 @@ Masukan yang <del>dipotong</del> telah diselesaikan.',
 # Miscellaneous special pages
 'nbytes' => '{{PLURAL:$1|$1 bait}}',
 'ncategories' => '$1 kategori',
+'ninterwikis' => '$1 pautan antara wiki',
 'nlinks' => '$1 pautan',
 'nmembers' => '$1 ahli',
 'nrevisions' => '$1 semakan',
@@ -1994,6 +1995,7 @@ Masukan yang <del>dipotong</del> telah diselesaikan.',
 'mostlinkedtemplates' => 'Templat dipaut terbanyak',
 'mostcategories' => 'Rencana dengan kategori terbanyak',
 'mostimages' => 'Imej dipaut terbanyak',
+'mostinterwikis' => 'Halaman yang paling banyak pautan antara wiki',
 'mostrevisions' => 'Rencana dengan semakan terbanyak',
 'prefixindex' => 'Indeks awalan',
 'prefixindex-namespace' => 'Semua laman dengan awalan (ruang nama $1)',
@@ -2141,6 +2143,8 @@ Anda boleh mengetahui [[{{MediaWiki:Listgrouprights-helppage}}|maklumat tambahan
 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',
+'emailuser-title-target' => 'E-mel {{GENDER:$1|pengguna}} ini',
+'emailuser-title-notarget' => 'E-mel pengguna',
 'emailpage' => 'E-mel pengguna',
 'emailpagetext' => 'Gunakan borang berikut untuk mengirim pesanan e-mel kepada pengguna ini.
 
@@ -2948,11 +2952,34 @@ Simpan dalam komputer anda dan muat naiknya di sini.',
 
 # Info page
 'pageinfo-title' => 'Maklumat untuk "$1"',
-'pageinfo-header-edits' => 'Suntingan',
+'pageinfo-header-basic' => 'Maklumat asas',
+'pageinfo-header-edits' => 'Sunting sejarah',
+'pageinfo-header-restrictions' => 'Perlindungan halaman',
+'pageinfo-header-properties' => 'Sifat halaman',
+'pageinfo-display-title' => 'Tajuk paparan',
+'pageinfo-default-sort' => 'Kunci isih azali',
+'pageinfo-length' => 'Kepanjangan halaman (bait)',
+'pageinfo-article-id' => 'ID halaman',
+'pageinfo-robot-policy' => 'Status enjin pencarian',
+'pageinfo-robot-index' => 'Boleh diindekskan',
+'pageinfo-robot-noindex' => 'Tidak boleh diindekskan',
 'pageinfo-views' => 'Bilangan kunjungan',
-'pageinfo-watchers' => 'Bilangan pemantau',
-'pageinfo-edits' => 'Bilangan suntingan',
-'pageinfo-authors' => 'Bilangan pengarang yang berlainan',
+'pageinfo-watchers' => 'Bilangan pemantau halaman',
+'pageinfo-redirects-name' => 'Lencongan ke halaman ini',
+'pageinfo-subpages-name' => 'Subhalaman untuk halaman ini',
+'pageinfo-subpages-value' => '$1 ($2 lencongan; $3 bukan lencongan)',
+'pageinfo-firstuser' => 'Pembuat halaman',
+'pageinfo-firsttime' => 'Tarikh halaman dibuat',
+'pageinfo-lastuser' => 'Penyunting terkini',
+'pageinfo-lasttime' => 'Tarikh suntingan terkini',
+'pageinfo-edits' => 'Jumlah suntingan',
+'pageinfo-authors' => 'Jumlah pengarang yang berlainan',
+'pageinfo-recent-edits' => 'Bilangan suntingan terkini (dalam $1 yang lalu)',
+'pageinfo-recent-authors' => 'Bilangan pengarang berbeza yang terkini',
+'pageinfo-restriction' => 'Perlindungan halaman (<code>{{lcfirst:$1}}</code>)',
+'pageinfo-magic-words' => 'Kata sakti ($1)',
+'pageinfo-hidden-categories' => 'Kategori tersembunyi ($1)',
+'pageinfo-templates' => 'Templat tertransklusi ($1)',
 
 # Skin names
 'skinname-standard' => 'Klasik',
@@ -3008,6 +3035,7 @@ Dengan menjalankannya, komputer anda mungkin akan terjejas.",
 'file-info-size-pages' => '$1 × $2 piksel, saiz fail: $3, jenis MIME: $4, $5 laman',
 'file-nohires' => 'Tiada leraian lebih besar.',
 'svg-long-desc' => 'Fail SVG, ukuran dasar $1 × $2 piksel, saiz fail: $3',
+'svg-long-desc-animated' => 'Fail SVG animasi, ukuran dasar $1 × $2 piksel, saiz fail: $3',
 'show-big-image' => 'Leraian penuh',
 'show-big-image-preview' => 'Saiz pralihat ini: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Leraian|Leraian-leraian}} lain: $1.',
@@ -3017,6 +3045,8 @@ Dengan menjalankannya, komputer anda mungkin akan terjejas.",
 'file-info-png-looped' => 'berulang',
 'file-info-png-repeat' => 'dimainkan {{PLURAL:$1|sekali|sebanyak $1 kali}}',
 'file-info-png-frames' => '$1 bingkai',
+'file-no-thumb-animation' => "'''Perhatian: Disebabkan had teknikal, gambar kenit untuk fail ini tidak beranimasi.'''",
+'file-no-thumb-animation-gif' => "''''''Perhatian: Disebabkan had teknikal, gambar kenit untuk imej GIF beresolusi tinggi seperti ini tidak beranimasi.'''",
 
 # Special:NewFiles
 'newimages' => 'Galeri fail baru',
index f5bc99b..fd59cc0 100644 (file)
@@ -142,133 +142,133 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#RINDIRIZZA', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__EBDAWERREJ__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__EBDAGALLERIJA__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__SFORZAWERREJ__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__WERREJ__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__EBDASEZZJONIMODIFIKA__', '__NOEDITSECTION__' ),
-       'currentmonth'            => array( '1', 'XAHARKURRENTI', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonthname'        => array( '1', 'ISEMXAHARKURRENTI', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'ĠENISEMXAHARKURRENTI', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'ABBREVXAHARKURRENTI', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'ĠURNATAKURRENTI', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'ĠURNATAKURRENTI2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'ISEMĠURNATAKURRENTI', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'SENAKURRENTI', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'ĦINKURRENTI', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'SIEGĦAKURRENTI', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'XAHARLOKALI', 'XAHARLOKALI2', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', 'XAHARLOKALI1', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'ISEMXAHARLOKALI', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'ĠENISEMXAHARLOKALI', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'ABBREVXAHARLOKALI', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'ĠURNATALOKALI', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'ĠURNATALOKALI2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'ISEMTAL-ĠURNATALOKALI', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'SENALOKALI', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'ĦINLOKALI', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'SIEGĦALOKALI', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'NUMRUTA\'PAĠNI', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'NUMRUTA\'ARTIKLI', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'NUMRUTA\'FAJLS', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'NUMRUTA\'UTENTI', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'NUMRUTA\'UTENTIATTIVI', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'NUMBRUTA\'MODIFIKI', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'NUMRUTA\'VISTI', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'ISEMTAL-PAĠNA', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'ISEMTAL-PAĠNAE', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'SPAZJUTAL-ISEM', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'SPAZJUTAL-ISEME', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'SPAZJUTA\'DISKUSSJONI', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'SPAZJUTA\'DISKUSSJONIE', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'SPAZJUTAS-SUĠĠETT', 'SPAZJUTAL-ARTIKLU', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'fullpagename'            => array( '1', 'ISEMSĦIĦTAL-PAĠNA', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'ISEMTAL-PAĠNASĦIĦAE', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'ISEMTAS-SOTTOPAĠNA', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'ISEMTAS-SUBPAĠNAE', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'ISEMBAŻIKUTAL-PAĠNA', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'ISEMTAL-PAĠNATAL-BAŻIE', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'ISEMPAĠNATA\'DISKUSSJONI', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'ISEMTAL-PAĠNATAD-DISKUSSJONIE', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'ISEMTAS-SUĠĠETTTAL-PAĠNA', 'ISEMTAL-ARTIKLUTAL-PAĠNA', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'subjectpagenamee'        => array( '1', 'ISEMTAS-SUĠĠETTTAL-PAĠNAE', 'ISEMTAL-ARTIKLUTAL-PAĠNAE', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
-       'msg'                     => array( '0', 'MSĠ:', 'MSG:' ),
-       'subst'                   => array( '0', 'BIDDEL:', 'SUBST:' ),
-       'msgnw'                   => array( '0', 'MSĠEW:', 'MSGNW:' ),
-       'img_thumbnail'           => array( '1', 'daqsminuri', 'minuri', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'daqsminuri=$1', 'minuri=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'lemin', 'right' ),
-       'img_left'                => array( '1', 'xellug', 'left' ),
-       '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_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_sub'                 => array( '1', 'bid', 'sub' ),
-       'img_super'               => array( '1', 'tajjeb', 'super', 'sup' ),
-       'img_top'                 => array( '1', 'fuq', 'top' ),
-       'img_text_top'            => array( '1', 'test-fuq', 'text-top' ),
-       'img_bottom'              => array( '1', 'taħt', 'bottom' ),
-       'img_text_bottom'         => array( '1', 'test-taħt', 'text-bottom' ),
-       'img_link'                => array( '1', 'ħolqa=$1', 'link=$1' ),
-       'sitename'                => array( '1', 'ISEMTAS-SIT', 'SITENAME' ),
-       'ns'                      => array( '0', 'IS:', 'NS:' ),
-       'localurl'                => array( '0', 'URLLOKALI:', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'URLLOKALIE:', 'LOCALURLE:' ),
-       'servername'              => array( '0', 'ISEMTAS-SERVER', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'DESTINAZZJONITA\'SKRITT', 'SCRIPTPATH' ),
-       'grammar'                 => array( '0', 'GRAMMATIKA:', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'SESS:', 'GENDER:' ),
-       'notitleconvert'          => array( '0', '__EBDAKONVERTURTITLU__', '__EBDAKT__', '__NOTITLECONVERT__', '__NOTC__' ),
-       'nocontentconvert'        => array( '0', '__EBDAKONVERTURKONTENUT__', '__EBDAKK__', '__NOCONTENTCONVERT__', '__NOCC__' ),
-       'currentweek'             => array( '1', 'ĠIMGĦAKURRENTI', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'ĠTĠKURRENTI', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'ĠIMGĦALOKALI', 'LOCALWEEK' ),
-       'localdow'                => array( '1', 'ĠTĠLOKALI', 'LOCALDOW' ),
-       'revisionid'              => array( '1', 'IDTAR-REVIŻJONI', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'ĠURNATATAR-REVIŻJONI', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'ĠURNATATAR-REVIŻJONI2', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'XAHARTAR-REVIŻJONI', 'REVISIONMONTH' ),
-       'revisionyear'            => array( '1', 'SENATAR-REVIŻJONI', 'REVISIONYEAR' ),
-       'revisiontimestamp'       => array( '1', 'TIMBRUTAR-REVIŻJONI', 'REVISIONTIMESTAMP' ),
-       'fullurl'                 => array( '0', 'URLSĦIĦA:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'URLSĦIĦAE:', 'FULLURLE:' ),
-       'lcfirst'                 => array( '0', 'IBDAKŻ:', 'LCFIRST:' ),
-       'ucfirst'                 => array( '0', 'IBDAKK:', 'UCFIRST:' ),
-       'lc'                      => array( '0', 'KŻ:', 'LC:' ),
-       'uc'                      => array( '0', 'KK:', 'UC:' ),
-       'displaytitle'            => array( '1', 'URITITLU', 'DISPLAYTITLE' ),
-       'newsectionlink'          => array( '1', '__ĦOLQASEZZJONIĠDIDA__', '__NEWSECTIONLINK__' ),
-       'nonewsectionlink'        => array( '1', '__EBDAĦOLQASEZZJONIĠDIDA__', '__NONEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', 'VERŻJONIKURRENTI', 'CURRENTVERSION' ),
-       'urlencode'               => array( '0', 'URLKODIĊI:', 'URLENCODE:' ),
-       'anchorencode'            => array( '0', 'ANKRAKODIĊI', 'ANCHORENCODE' ),
-       'currenttimestamp'        => array( '1', 'TIMBRUTAL-ĦINKURRENTI', 'CURRENTTIMESTAMP' ),
-       'localtimestamp'          => array( '1', 'TIMBRUTAL-ĦINLOKALI', 'LOCALTIMESTAMP' ),
-       'directionmark'           => array( '1', 'MARKATAD-DIREZZJONI', 'MARKADIRE', 'DIRECTIONMARK', 'DIRMARK' ),
-       'language'                => array( '0', '#LINGWA:', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', 'LINGWATAL-KONTENUT', 'LINGKONTENUT', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'        => array( '1', 'PAĠNIFL-ISPAZJUTAL-ISEM:', 'PAĠNISI:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'          => array( '1', 'NUMRUTA\'AMMIN', 'NUMBEROFADMINS' ),
-       'padleft'                 => array( '0', 'PADXELLUG', 'PADLEFT' ),
-       'padright'                => array( '0', 'PADLEMIN', 'PADRIGHT' ),
-       'special'                 => array( '0', 'speċjali', 'special' ),
-       'defaultsort'             => array( '1', 'DEFAULTSORTJA:', 'DEFAULTSORTJAĊAVETTA:', 'DEFAULTKATEGORIJISORTJA:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'filepath'                => array( '0', 'DESTINAZZJONITAL-FAJL:', 'FILEPATH:' ),
-       'tag'                     => array( '0', 'tabella', 'tag' ),
-       'hiddencat'               => array( '1', '__KATMOĦBIJA__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'PAĠNIFIL-KATEGORIJA', 'PAĠNIFILK', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'DAQSTAL-PAĠNI', 'PAGESIZE' ),
-       'index'                   => array( '1', '__INDIĊI__', '__INDEX__' ),
-       'noindex'                 => array( '1', '__EBDAINDIĊI__', '__NOINDEX__' ),
-       'numberingroup'           => array( '1', 'NUMRUFIL-GRUPP', 'NUMFIL-GRUPP', 'NUMBERINGROUP', 'NUMINGROUP' ),
-       'staticredirect'          => array( '1', '__RIINDIRIZZSTATIKU__', '__STATICREDIRECT__' ),
-       'protectionlevel'         => array( '1', 'LIVELLITA\'PROTEZZJONI', 'PROTECTIONLEVEL' ),
-       'formatdate'              => array( '0', 'formatdata', 'dataformat', 'formatdate', 'dateformat' ),
+       'redirect'                  => array( '0', '#RINDIRIZZA', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__EBDAWERREJ__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__EBDAGALLERIJA__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__SFORZAWERREJ__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__WERREJ__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__EBDASEZZJONIMODIFIKA__', '__NOEDITSECTION__' ),
+       'currentmonth'              => array( '1', 'XAHARKURRENTI', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonthname'          => array( '1', 'ISEMXAHARKURRENTI', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'ĠENISEMXAHARKURRENTI', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'ABBREVXAHARKURRENTI', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'ĠURNATAKURRENTI', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'ĠURNATAKURRENTI2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'ISEMĠURNATAKURRENTI', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'SENAKURRENTI', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'ĦINKURRENTI', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'SIEGĦAKURRENTI', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'XAHARLOKALI', 'XAHARLOKALI2', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'XAHARLOKALI1', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'ISEMXAHARLOKALI', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'ĠENISEMXAHARLOKALI', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'ABBREVXAHARLOKALI', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'ĠURNATALOKALI', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'ĠURNATALOKALI2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'ISEMTAL-ĠURNATALOKALI', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'SENALOKALI', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'ĦINLOKALI', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'SIEGĦALOKALI', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'NUMRUTA\'PAĠNI', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'NUMRUTA\'ARTIKLI', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'NUMRUTA\'FAJLS', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'NUMRUTA\'UTENTI', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'NUMRUTA\'UTENTIATTIVI', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'NUMBRUTA\'MODIFIKI', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'NUMRUTA\'VISTI', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'ISEMTAL-PAĠNA', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'ISEMTAL-PAĠNAE', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'SPAZJUTAL-ISEM', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'SPAZJUTAL-ISEME', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'SPAZJUTA\'DISKUSSJONI', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'SPAZJUTA\'DISKUSSJONIE', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'SPAZJUTAS-SUĠĠETT', 'SPAZJUTAL-ARTIKLU', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'fullpagename'              => array( '1', 'ISEMSĦIĦTAL-PAĠNA', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'ISEMTAL-PAĠNASĦIĦAE', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'ISEMTAS-SOTTOPAĠNA', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'ISEMTAS-SUBPAĠNAE', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'ISEMBAŻIKUTAL-PAĠNA', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'ISEMTAL-PAĠNATAL-BAŻIE', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'ISEMPAĠNATA\'DISKUSSJONI', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'ISEMTAL-PAĠNATAD-DISKUSSJONIE', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'ISEMTAS-SUĠĠETTTAL-PAĠNA', 'ISEMTAL-ARTIKLUTAL-PAĠNA', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'          => array( '1', 'ISEMTAS-SUĠĠETTTAL-PAĠNAE', 'ISEMTAL-ARTIKLUTAL-PAĠNAE', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+       'msg'                       => array( '0', 'MSĠ:', 'MSG:' ),
+       'subst'                     => array( '0', 'BIDDEL:', 'SUBST:' ),
+       'msgnw'                     => array( '0', 'MSĠEW:', 'MSGNW:' ),
+       'img_thumbnail'             => array( '1', 'daqsminuri', 'minuri', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'daqsminuri=$1', 'minuri=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'lemin', 'right' ),
+       'img_left'                  => array( '1', 'xellug', 'left' ),
+       '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_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_sub'                   => array( '1', 'bid', 'sub' ),
+       'img_super'                 => array( '1', 'tajjeb', 'super', 'sup' ),
+       'img_top'                   => array( '1', 'fuq', 'top' ),
+       'img_text_top'              => array( '1', 'test-fuq', 'text-top' ),
+       'img_bottom'                => array( '1', 'taħt', 'bottom' ),
+       'img_text_bottom'           => array( '1', 'test-taħt', 'text-bottom' ),
+       'img_link'                  => array( '1', 'ħolqa=$1', 'link=$1' ),
+       'sitename'                  => array( '1', 'ISEMTAS-SIT', 'SITENAME' ),
+       'ns'                        => array( '0', 'IS:', 'NS:' ),
+       'localurl'                  => array( '0', 'URLLOKALI:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'URLLOKALIE:', 'LOCALURLE:' ),
+       'servername'                => array( '0', 'ISEMTAS-SERVER', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'DESTINAZZJONITA\'SKRITT', 'SCRIPTPATH' ),
+       'grammar'                   => array( '0', 'GRAMMATIKA:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'SESS:', 'GENDER:' ),
+       'notitleconvert'            => array( '0', '__EBDAKONVERTURTITLU__', '__EBDAKT__', '__NOTITLECONVERT__', '__NOTC__' ),
+       'nocontentconvert'          => array( '0', '__EBDAKONVERTURKONTENUT__', '__EBDAKK__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+       'currentweek'               => array( '1', 'ĠIMGĦAKURRENTI', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'ĠTĠKURRENTI', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'ĠIMGĦALOKALI', 'LOCALWEEK' ),
+       'localdow'                  => array( '1', 'ĠTĠLOKALI', 'LOCALDOW' ),
+       'revisionid'                => array( '1', 'IDTAR-REVIŻJONI', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'ĠURNATATAR-REVIŻJONI', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'ĠURNATATAR-REVIŻJONI2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'XAHARTAR-REVIŻJONI', 'REVISIONMONTH' ),
+       'revisionyear'              => array( '1', 'SENATAR-REVIŻJONI', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'TIMBRUTAR-REVIŻJONI', 'REVISIONTIMESTAMP' ),
+       'fullurl'                   => array( '0', 'URLSĦIĦA:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'URLSĦIĦAE:', 'FULLURLE:' ),
+       'lcfirst'                   => array( '0', 'IBDAKŻ:', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', 'IBDAKK:', 'UCFIRST:' ),
+       'lc'                        => array( '0', 'KŻ:', 'LC:' ),
+       'uc'                        => array( '0', 'KK:', 'UC:' ),
+       'displaytitle'              => array( '1', 'URITITLU', 'DISPLAYTITLE' ),
+       'newsectionlink'            => array( '1', '__ĦOLQASEZZJONIĠDIDA__', '__NEWSECTIONLINK__' ),
+       'nonewsectionlink'          => array( '1', '__EBDAĦOLQASEZZJONIĠDIDA__', '__NONEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'VERŻJONIKURRENTI', 'CURRENTVERSION' ),
+       'urlencode'                 => array( '0', 'URLKODIĊI:', 'URLENCODE:' ),
+       'anchorencode'              => array( '0', 'ANKRAKODIĊI', 'ANCHORENCODE' ),
+       'currenttimestamp'          => array( '1', 'TIMBRUTAL-ĦINKURRENTI', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', 'TIMBRUTAL-ĦINLOKALI', 'LOCALTIMESTAMP' ),
+       'directionmark'             => array( '1', 'MARKATAD-DIREZZJONI', 'MARKADIRE', 'DIRECTIONMARK', 'DIRMARK' ),
+       'language'                  => array( '0', '#LINGWA:', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'LINGWATAL-KONTENUT', 'LINGKONTENUT', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', 'PAĠNIFL-ISPAZJUTAL-ISEM:', 'PAĠNISI:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', 'NUMRUTA\'AMMIN', 'NUMBEROFADMINS' ),
+       'padleft'                   => array( '0', 'PADXELLUG', 'PADLEFT' ),
+       'padright'                  => array( '0', 'PADLEMIN', 'PADRIGHT' ),
+       'special'                   => array( '0', 'speċjali', 'special' ),
+       'defaultsort'               => array( '1', 'DEFAULTSORTJA:', 'DEFAULTSORTJAĊAVETTA:', 'DEFAULTKATEGORIJISORTJA:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'filepath'                  => array( '0', 'DESTINAZZJONITAL-FAJL:', 'FILEPATH:' ),
+       'tag'                       => array( '0', 'tabella', 'tag' ),
+       'hiddencat'                 => array( '1', '__KATMOĦBIJA__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'PAĠNIFIL-KATEGORIJA', 'PAĠNIFILK', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'DAQSTAL-PAĠNI', 'PAGESIZE' ),
+       'index'                     => array( '1', '__INDIĊI__', '__INDEX__' ),
+       'noindex'                   => array( '1', '__EBDAINDIĊI__', '__NOINDEX__' ),
+       'numberingroup'             => array( '1', 'NUMRUFIL-GRUPP', 'NUMFIL-GRUPP', 'NUMBERINGROUP', 'NUMINGROUP' ),
+       'staticredirect'            => array( '1', '__RIINDIRIZZSTATIKU__', '__STATICREDIRECT__' ),
+       'protectionlevel'           => array( '1', 'LIVELLITA\'PROTEZZJONI', 'PROTECTIONLEVEL' ),
+       'formatdate'                => array( '0', 'formatdata', 'dataformat', 'formatdate', 'dateformat' ),
 );
 
 $messages = array(
@@ -1701,7 +1701,7 @@ It-tlugħ ta' fajls tal-Java mhuwiex permess, minħabba li jistgħu jaqbżu rest
 'upload-source' => 'Sors tal-fajl',
 'sourcefilename' => 'L-isem tal-fajl tal-oriġini:',
 'sourceurl' => 'Sors tal-URL:',
-'destfilename' => 'L-Isem tal-fajl tad-destinazzjoni:',
+'destfilename' => "Isem tal-fajl ta' destinazzjoni:",
 'upload-maxfilesize' => 'Daqs massimu tal-fajl: $1',
 'upload-description' => 'Deskrizzjoni tal-fajl',
 'upload-options' => 'Opzjonijiet għat-tlugħ tal-fajl',
index 8047db0..ac69cb0 100644 (file)
@@ -64,17 +64,17 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#ANCAMINAR', '#REDIRECIONAMENTO', '#REDIRECT' ),
-       'img_right'               => array( '1', 'dreita', 'direita', 'right' ),
-       'img_left'                => array( '1', 'squierda', 'esquerda', 'left' ),
-       'img_none'                => array( '1', 'nanhun', 'nenhum', 'none' ),
-       'img_center'              => array( '1', 'centro', 'center', 'centre' ),
-       'img_middle'              => array( '1', 'meio', 'middle' ),
-       'language'                => array( '0', '#LHENGUA:', '#IDIOMA:', '#LANGUAGE:' ),
-       'filepath'                => array( '0', 'CAMINOFEXEIRO:', 'CAMINHODOARQUIVO', 'FILEPATH:' ),
-       'tag'                     => array( '0', 'eitiqueta', 'tag' ),
-       'pagesize'                => array( '1', 'TAMANHOFEXEIRO', 'TAMANHODAPAGINA', 'TAMANHODAPÁGINA', 'PAGESIZE' ),
-       'staticredirect'          => array( '1', '_ANCAMINARSTATICO_', '__REDIRECIONAMENTOESTATICO__', '__REDIRECIONAMENTOESTÁTICO__', '__STATICREDIRECT__' ),
+       'redirect'                  => array( '0', '#ANCAMINAR', '#REDIRECIONAMENTO', '#REDIRECT' ),
+       'img_right'                 => array( '1', 'dreita', 'direita', 'right' ),
+       'img_left'                  => array( '1', 'squierda', 'esquerda', 'left' ),
+       'img_none'                  => array( '1', 'nanhun', 'nenhum', 'none' ),
+       'img_center'                => array( '1', 'centro', 'center', 'centre' ),
+       'img_middle'                => array( '1', 'meio', 'middle' ),
+       'language'                  => array( '0', '#LHENGUA:', '#IDIOMA:', '#LANGUAGE:' ),
+       'filepath'                  => array( '0', 'CAMINOFEXEIRO:', 'CAMINHODOARQUIVO', 'FILEPATH:' ),
+       'tag'                       => array( '0', 'eitiqueta', 'tag' ),
+       'pagesize'                  => array( '1', 'TAMANHOFEXEIRO', 'TAMANHODAPAGINA', 'TAMANHODAPÁGINA', 'PAGESIZE' ),
+       'staticredirect'            => array( '1', '_ANCAMINARSTATICO_', '__REDIRECIONAMENTOESTATICO__', '__REDIRECIONAMENTOESTÁTICO__', '__STATICREDIRECT__' ),
 );
 
 $messages = array(
index 4868a46..f908fdc 100644 (file)
@@ -114,75 +114,75 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'currentmonth'            => array( '1', 'МОЛИЦЯКОВ', 'ТЕКУЩИЙ_МЕСЯЦ', 'ТЕКУЩИЙ_МЕСЯЦ_2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonthname'        => array( '1', 'МОЛИЦЯКОВЛЕМ', 'НАЗВАНИЕ_ТЕКУЩЕГО_МЕСЯЦА', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'МОЛИЦЯКОВЛЕМГЕН', 'НАЗВАНИЕ_ТЕКУЩЕГО_МЕСЯЦА_РОД', 'CURRENTMONTHNAMEGEN' ),
-       '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', 'ТЕСКЭНЬКОВ', 'МЕСТНЫЙ_МЕСЯЦ', 'МЕСТНЫЙ_МЕСЯЦ_2', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonthname'          => array( '1', 'ТЕСКЭНЬКОВЛЕМ', 'НАЗВАНИЕ_МЕСТНОГО_МЕСЯЦА', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'ТЕСКЭНЬКОВЛЕМГЕН', 'НАЗВАНИЕ_МЕСТНОГО_МЕСЯЦА_РОД', 'LOCALMONTHNAMEGEN' ),
-       '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' ),
-       'numberofpages'           => array( '1', 'ЗЯРОЛОПАТ', 'КОЛИЧЕСТВО_СТРАНИЦ', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'ЗЯРОСЁРМАДОВКСТ', 'КОЛИЧЕСТВО_СТАТЕЙ', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'ЗЯРОФАЙЛАТ', 'КОЛИЧЕСТВО_ФАЙЛОВ', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'ЗЯРОТЕИЦЯТ', 'КОЛИЧЕСТВО_УЧАСТНИКОВ', 'NUMBEROFUSERS' ),
-       'numberofedits'           => array( '1', 'ЗЯРОВИТНЕМАТПЕТНЕМАТ', 'КОЛИЧЕСТВО_ПРАВОК', 'NUMBEROFEDITS' ),
-       'pagename'                => array( '1', 'ЛОПАЛЕМ', 'НАЗВАНИЕ_СТРАНИЦЫ', 'PAGENAME' ),
-       'namespace'               => array( '1', 'ЛЕМПОТМО', 'ПРОСТРАНСТВО_ИМЁН', 'NAMESPACE' ),
-       'talkspace'               => array( '1', 'КОРТАМОПОТМО', 'ПРОСТРАНСТВО_ОБСУЖДЕНИЙ', 'TALKSPACE' ),
-       'fullpagename'            => array( '1', 'ЛОПАЛЕМКУВАКАСТО', 'ПОЛНОЕ_НАЗВАНИЕ_СТРАНИЦЫ', 'FULLPAGENAME' ),
-       'talkpagename'            => array( '1', 'КОРТАМОЛОПАЛЕМ', 'НАЗВАНИЕ_СТРАНИЦЫ_ОБСУЖДЕНИЯ', 'TALKPAGENAME' ),
-       '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', 'страница $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' ),
-       'revisionday2'            => array( '1', 'ЛИЯКСТОМТОМАЧЫ2', 'ДЕНЬ_ВЕРСИИ_2', 'REVISIONDAY2' ),
-       '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:' ),
-       'numberofadmins'          => array( '1', 'ЗЯРОАДМИНТНЭДЕ', 'КОЛИЧЕСТВО_АДМИНИСТРАТОРОВ', 'NUMBEROFADMINS' ),
-       'special'                 => array( '0', 'башка_тевень', 'служебная', 'special' ),
-       'filepath'                => array( '0', 'ФАЙЛАНЬКИ', 'ПУТЬ_К_ФАЙЛУ:', 'FILEPATH:' ),
-       'pagesize'                => array( '1', 'ЛОПАКУВАЛМО', 'РАЗМЕР_СТРАНИЦЫ', 'PAGESIZE' ),
-       'url_path'                => array( '0', 'ЯН', 'ПУТЬ', 'PATH' ),
-       'url_wiki'                => array( '0', 'ВИКИ', 'WIKI' ),
+       'currentmonth'              => array( '1', 'МОЛИЦЯКОВ', 'ТЕКУЩИЙ_МЕСЯЦ', 'ТЕКУЩИЙ_МЕСЯЦ_2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonthname'          => array( '1', 'МОЛИЦЯКОВЛЕМ', 'НАЗВАНИЕ_ТЕКУЩЕГО_МЕСЯЦА', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'МОЛИЦЯКОВЛЕМГЕН', 'НАЗВАНИЕ_ТЕКУЩЕГО_МЕСЯЦА_РОД', 'CURRENTMONTHNAMEGEN' ),
+       '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', 'ТЕСКЭНЬКОВ', 'МЕСТНЫЙ_МЕСЯЦ', 'МЕСТНЫЙ_МЕСЯЦ_2', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonthname'            => array( '1', 'ТЕСКЭНЬКОВЛЕМ', 'НАЗВАНИЕ_МЕСТНОГО_МЕСЯЦА', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'ТЕСКЭНЬКОВЛЕМГЕН', 'НАЗВАНИЕ_МЕСТНОГО_МЕСЯЦА_РОД', 'LOCALMONTHNAMEGEN' ),
+       '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' ),
+       'numberofpages'             => array( '1', 'ЗЯРОЛОПАТ', 'КОЛИЧЕСТВО_СТРАНИЦ', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'ЗЯРОСЁРМАДОВКСТ', 'КОЛИЧЕСТВО_СТАТЕЙ', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'ЗЯРОФАЙЛАТ', 'КОЛИЧЕСТВО_ФАЙЛОВ', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'ЗЯРОТЕИЦЯТ', 'КОЛИЧЕСТВО_УЧАСТНИКОВ', 'NUMBEROFUSERS' ),
+       'numberofedits'             => array( '1', 'ЗЯРОВИТНЕМАТПЕТНЕМАТ', 'КОЛИЧЕСТВО_ПРАВОК', 'NUMBEROFEDITS' ),
+       'pagename'                  => array( '1', 'ЛОПАЛЕМ', 'НАЗВАНИЕ_СТРАНИЦЫ', 'PAGENAME' ),
+       'namespace'                 => array( '1', 'ЛЕМПОТМО', 'ПРОСТРАНСТВО_ИМЁН', 'NAMESPACE' ),
+       'talkspace'                 => array( '1', 'КОРТАМОПОТМО', 'ПРОСТРАНСТВО_ОБСУЖДЕНИЙ', 'TALKSPACE' ),
+       'fullpagename'              => array( '1', 'ЛОПАЛЕМКУВАКАСТО', 'ПОЛНОЕ_НАЗВАНИЕ_СТРАНИЦЫ', 'FULLPAGENAME' ),
+       'talkpagename'              => array( '1', 'КОРТАМОЛОПАЛЕМ', 'НАЗВАНИЕ_СТРАНИЦЫ_ОБСУЖДЕНИЯ', 'TALKPAGENAME' ),
+       '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', 'страница $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' ),
+       'revisionday2'              => array( '1', 'ЛИЯКСТОМТОМАЧЫ2', 'ДЕНЬ_ВЕРСИИ_2', 'REVISIONDAY2' ),
+       '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:' ),
+       'numberofadmins'            => array( '1', 'ЗЯРОАДМИНТНЭДЕ', 'КОЛИЧЕСТВО_АДМИНИСТРАТОРОВ', 'NUMBEROFADMINS' ),
+       'special'                   => array( '0', 'башка_тевень', 'служебная', 'special' ),
+       'filepath'                  => array( '0', 'ФАЙЛАНЬКИ', 'ПУТЬ_К_ФАЙЛУ:', 'FILEPATH:' ),
+       'pagesize'                  => array( '1', 'ЛОПАКУВАЛМО', 'РАЗМЕР_СТРАНИЦЫ', 'PAGESIZE' ),
+       'url_path'                  => array( '0', 'ЯН', 'ПУТЬ', 'PATH' ),
+       'url_wiki'                  => array( '0', 'ВИКИ', 'WIKI' ),
 );
 
 $messages = array(
@@ -193,7 +193,7 @@ $messages = array(
 'tog-hidepatrolled' => 'Кекшемс лувонь кирдиень витнеметнень-петнематнень чыяконь полавтнематнестэ',
 'tog-newpageshidepatrolled' => 'Кекшемс лувонь кирдиень ванстома лопатнень од лопань керьксэнть эйстэ',
 'tog-extendwatchlist' => 'Келейгавтомс сёрмадовксонь мельга ваномань сёрмалевксэнть невтевест весе полавтнематне, аволь ансяк чыеньсетне.',
-'tog-usenewrc' => 'Ð\9dолдак Ñ\82евÑ\81 Ð²Ð°Ð´Ñ\80Ñ\8fлгавÑ\82озÑ\8c Ð¾Ð´ Ð»Ð¸Ñ\8fкÑ\81Ñ\82омаÑ\82  (веши JavaScript)',
+'tog-usenewrc' => 'Ð\9fÑ\83Ñ\80намÑ\81 Ð»Ð¸Ñ\8fкÑ\81Ñ\82омÑ\82омаÑ\82 Ð»Ð¾Ð¿Ð°Ð½Ñ\8c ÐºÐ¾Ñ\80Ñ\8fÑ\81 ÐºÑ\83Ñ\80онÑ\8c-кÑ\83Ñ\80онÑ\8c Ñ\87иенÑ\8c Ð¿Ð¾Ð»Ð°Ð²Ñ\82немаÑ\82неÑ\81Ñ\8d-ванома Ð»ÐµÐ¼Ñ\80иÑ\81Ñ\8cмеÑ\82неÑ\81Ñ\8d  (веши JavaScript)',
 'tog-numberheadings' => 'Сёрмадовкс коняксос кадык сынсь ловома валтнэ путовить',
 'tog-showtoolbar' => 'Кедьёнкс лазнэнть невтемс сёрмадома шкасто (JavaScript)',
 'tog-editondblclick' => 'Кавксть лепштязь совамс сёрмадовксонь витнеме-петнеме (JavaScript)',
@@ -201,7 +201,7 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Витнемс секциятнень-пелькстнэнь, лепштямс сёрмадовксонть лемензэ лангс чэерень витьёнсе повнэсэ  (JavaScript)',
 'tog-showtoc' => 'Невтемс сёрмадовкс потмокс (лопатненень, конатнесэ 3-до ламо сёрмадовкст)',
 'tog-rememberpassword' => 'Ледстемс совамо валом те бравзерсэнть (сех кувать $1 {{PLURAL:$1|чи|чить}})',
-'tog-watchcreations' => 'СовавÑ\82омÑ\81 Ð¼Ð¾Ð½Ñ\8c Ñ\82еевÑ\82Ñ\8c Ð»Ð¾Ð¿Ð°Ñ\82ненÑ\8c Ð²Ð°Ð½Ð¾Ð¼Ð° Ð»ÐµÐ¼ Ñ\80иÑ\81Ñ\8cмезÑ\8dнÑ\8c',
+'tog-watchcreations' => 'СовавÑ\82омÑ\81 Ð²Ð°Ð½Ð¾Ð¼Ð° Ð»ÐµÐ¼Ñ\80иÑ\81Ñ\8cмезÑ\8dнÑ\8c Ð¼Ð¾Ð½Ñ\8c Ñ\82еевÑ\82Ñ\8c Ð»Ð¾Ð¿Ð°Ñ\82ненÑ\8c Ð´Ñ\8b Ñ\81енÑ\8c, Ð¼ÐµÐ·Ðµ Ð¹Ð¾Ð²ÐºÑ\81Ñ\82ан',
 'tog-watchdefault' => 'Совавтомс монь витевть лопатнень ванома лем рисьмезэнь',
 'tog-watchmoves' => 'Лопанть лиякстомтса, совавтык ванома лем рисьмезэнь',
 'tog-watchdeletion' => 'Лопанть нардаса, совавтык сонзэ ванома лем рисьмезэнь',
@@ -214,6 +214,7 @@ $messages = array(
 'tog-enotifminoredits' => 'Пачтямс е-сёрмасо лиякстомтоматнеде, сестэяк зярдо апокшкынеть',
 'tog-enotifrevealaddr' => 'Штавтомс е-сёрмань адресэм яволявтомань сёрмадовкстнэсэ',
 'tog-shownumberswatching' => 'Невтемс зяро теицятнеде, конат аравтызь лопанть эсест ванома лемрисьментень',
+'tog-oldsig' => 'Уликс кедьпутовксось:',
 'tog-fancysig' => 'Лемпутовксось прок викитекст (сонсь теевиця сюлмавома певтеме)',
 'tog-externaleditor' => 'Нолдамс тевс ушоёнонь витнемканть, зярс лиякс апак аравто (ансяк тевень содыйтненень, арсий машинасот эрявить башка ёнкст-аравтомат [//www.mediawiki.org/wiki/Manual:External_editors подробнее])',
 'tog-externaldiff' => 'Нолдамс тевс ушоёнонь diff, зярс лиякс апак аравто (ансяк тевень содыйтненень, арсий машинасот эрявить башка ёнкст-аравтомат [//www.mediawiki.org/wiki/Manual:External_editors подробнее])',
@@ -310,6 +311,7 @@ $messages = array(
 'listingcontinuesabbrev' => 'поладксозо моли',
 'index-category' => 'Индекс марто лопатне',
 'noindex-category' => 'Индекстэме лопатне',
+'broken-file-category' => 'Лопат, конатнесэ файлань яжазь сюлмавомапеть',
 
 'about' => 'Эстедензэ',
 'article' => 'Потмокслопа',
@@ -689,7 +691,7 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 {{FULLPAGENAME}}|action=edit}} витнемс-петнемс те лопанть]</span>.',
 'updated' => '(Одолгавтозь)',
 'note' => "'''Явт мель:'''",
-'previewnote' => "'''Ð\9aиÑ\80дÑ\82Ñ\8c Ð¼ÐµÐ»Ñ\8cÑ\81Ñ\8d, Ð¢е ансяк васнянь невтевкс.'''
+'previewnote' => "'''Ð\9aиÑ\80дÑ\82Ñ\8fÑ\8f Ð¼ÐµÐ»Ñ\8cÑ\81Ñ\8d, Ñ\82е ансяк васнянь невтевкс.'''
 Полавтоматне зярс апак вансто!",
 'editing' => 'Витнят-петнят $1',
 'editingsection' => 'Витнеме-петнеме $1 (секциянть)',
@@ -728,6 +730,7 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 '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]]',
 
@@ -811,7 +814,7 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'revertmerge' => 'Явомс логонть мекев, кода ульнесь вейтьсэндямодо икеле',
 
 # Diffs
-'history-title' => 'Историясь ламо вановксонть "$1"',
+'history-title' => '"$1"-нь полавтнемань историязо',
 'lineno' => 'Киксэсь $1:',
 'compareselectedversions' => 'Кочказь версиятнень аравтомс карадо-каршо',
 'editundo' => 'Велявтомс мекев мезе витнинь-петнинь',
@@ -945,6 +948,8 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'gender-female' => 'Авань сыме',
 'email' => 'Е-сёрма',
 'prefs-help-realname' => 'Алкуксонь леметь (арась мелеть, иляк путо): путсак, ды сон карми неявомо не таркатнесэ, косо тон тев теят.',
+'prefs-help-email' => 'Е-сёрмапаргот а эряви тешкстамс. Сон карми эрявомо ансяк салававалонь одов пачтямсто ёмавтындерясак неень салавань валот.',
+'prefs-help-email-others' => 'Мелеть сайтянзат, путыка кортамо лопазот е-сёрмапаргот, конань вельде лия ломантне сёрмадовить тенть. Минек вельде е-сёрмапаргот зярдояк а неяви, зярдо лия совицятне сёрмалить тенть.',
 'prefs-help-email-required' => 'Е-сёрмань адресэть эряви.',
 'prefs-signature' => 'Кедь путовкс',
 'prefs-dateformat' => 'Ков чинь форматозо',
index f94221b..68482db 100644 (file)
@@ -74,56 +74,56 @@ $namespaceAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#بور', '#تغییرمسیر', '#تغییر_مسیر', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__بی‌فهرست__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__بی‌نگارخنه__', '__بی‌نگارخانه__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__بافهرست__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__فهرست__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__بی‌بخش__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', 'بی‌عنوان__', '__بی‌عنوان__', '__NOHEADER__' ),
-       'currentmonth'            => array( '1', 'ماه', 'ماه‌کنونی', 'ماه_کنونی', 'ماه‌کنونی۲', 'ماه_اسایی۲', 'ماه_کنونی۲', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', 'ماه۱', 'ماه‌کنونی۱', 'ماه_کنونی۱', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', 'نام‌ماه', 'نام_ماه', 'نام‌ماه‌کنونی', 'نام_ماه_کنونی', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'نام‌ماه‌اضافه', 'نام_ماه_اضافه', 'نام‌ماه‌کنونی‌اضافه', 'نام_ماه_کنونی_اضافه', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'مخفف‌نام‌ماه', 'مخفف_نام_ماه', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'روز', 'روزکنونی', 'روز_کنونی', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'روز۲', 'روز_۲', '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', 'ماه‌محلی۱', 'ماه_محلی۱', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'نام‌ماه‌محلی', 'نام_ماه_محلی', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'نام‌ماه‌محلی‌اضافه', 'نام_ماه_محلی_اضافه', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'مخفف‌ماه‌محلی', 'مخفف_ماه_محلی', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'روزمحلی', 'روز_محلی', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'روزمحلی۲', 'روز_محلی_۲', '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' ),
-       'numberofusers'           => array( '1', 'تعدادکارورون', 'تعدادکاربران', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'کارورون_فعال', 'کاربران_فعال', 'کاربران‌فعال', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'تعداددچی‌یه‌ئون', 'تعدادویرایش‌ها', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'تعدادبازدید', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'نام‌صفحه', 'نام_صفحه', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'نام‌صفحه‌کد', 'نام_صفحه_کد', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'فضای‌نام', 'فضای_نام', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'فضای‌نام‌کد', 'فضای_نام_کد', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'فضای‌گپ', 'فضای_گپ', 'فضای‌بحث', 'فضای_بحث', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'فضای‌گپ_کد', 'فضای_گپ_کد', 'فضای‌بحث‌کد', 'فضای_بحث_کد', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'فضای‌موضوع', 'فضای‌مقاله', 'فضای_موضوع', 'فضای_مقاله', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'int'                     => array( '0', 'ترجمه:', 'INT:' ),
-       'sitename'                => array( '1', 'نام‌وبگاه', 'نام_وبگاه', 'SITENAME' ),
-       'ns'                      => array( '0', 'فن:', 'NS:' ),
-       'nse'                     => array( '0', 'فنک:', 'NSE:' ),
-       'localurl'                => array( '0', 'نشونی:', 'نشانی:', 'LOCALURL:' ),
-       'grammar'                 => array( '0', 'دستور_زبون:', 'دستور_زوون:', 'دستورزبان:', 'دستور_زبان:', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'جنسیت:', 'جنس:', 'GENDER:' ),
+       'redirect'                  => array( '0', '#بور', '#تغییرمسیر', '#تغییر_مسیر', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__بی‌فهرست__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__بی‌نگارخنه__', '__بی‌نگارخانه__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__بافهرست__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__فهرست__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__بی‌بخش__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', 'بی‌عنوان__', '__بی‌عنوان__', '__NOHEADER__' ),
+       'currentmonth'              => array( '1', 'ماه', 'ماه‌کنونی', 'ماه_کنونی', 'ماه‌کنونی۲', 'ماه_اسایی۲', 'ماه_کنونی۲', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'ماه۱', 'ماه‌کنونی۱', 'ماه_کنونی۱', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'نام‌ماه', 'نام_ماه', 'نام‌ماه‌کنونی', 'نام_ماه_کنونی', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'نام‌ماه‌اضافه', 'نام_ماه_اضافه', 'نام‌ماه‌کنونی‌اضافه', 'نام_ماه_کنونی_اضافه', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'مخفف‌نام‌ماه', 'مخفف_نام_ماه', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'روز', 'روزکنونی', 'روز_کنونی', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'روز۲', 'روز_۲', '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', 'ماه‌محلی۱', 'ماه_محلی۱', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'نام‌ماه‌محلی', 'نام_ماه_محلی', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'نام‌ماه‌محلی‌اضافه', 'نام_ماه_محلی_اضافه', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'مخفف‌ماه‌محلی', 'مخفف_ماه_محلی', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'روزمحلی', 'روز_محلی', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'روزمحلی۲', 'روز_محلی_۲', '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' ),
+       'numberofusers'             => array( '1', 'تعدادکارورون', 'تعدادکاربران', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'کارورون_فعال', 'کاربران_فعال', 'کاربران‌فعال', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'تعداددچی‌یه‌ئون', 'تعدادویرایش‌ها', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'تعدادبازدید', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'نام‌صفحه', 'نام_صفحه', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'نام‌صفحه‌کد', 'نام_صفحه_کد', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'فضای‌نام', 'فضای_نام', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'فضای‌نام‌کد', 'فضای_نام_کد', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'فضای‌گپ', 'فضای_گپ', 'فضای‌بحث', 'فضای_بحث', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'فضای‌گپ_کد', 'فضای_گپ_کد', 'فضای‌بحث‌کد', 'فضای_بحث_کد', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'فضای‌موضوع', 'فضای‌مقاله', 'فضای_موضوع', 'فضای_مقاله', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'int'                       => array( '0', 'ترجمه:', 'INT:' ),
+       'sitename'                  => array( '1', 'نام‌وبگاه', 'نام_وبگاه', 'SITENAME' ),
+       'ns'                        => array( '0', 'فن:', 'NS:' ),
+       'nse'                       => array( '0', 'فنک:', 'NSE:' ),
+       'localurl'                  => array( '0', 'نشونی:', 'نشانی:', 'LOCALURL:' ),
+       'grammar'                   => array( '0', 'دستور_زبون:', 'دستور_زوون:', 'دستورزبان:', 'دستور_زبان:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'جنسیت:', 'جنس:', 'GENDER:' ),
 );
 
 $messages = array(
index 044a768..9ad4238 100644 (file)
@@ -84,15 +84,15 @@ $messages = array(
 'tog-hidepatrolled' => 'Motlàtìs tlapîpialli tlayèktlàlilistli ìpan welok tlapảtlalistli',
 'tog-newpageshidepatrolled' => 'Mokintlàtis tlapîpialtlaìxtlapaltìn ìwikpa ìtlapòpòwaltekpànal in yâyankuik tlaìxtlapaltìn',
 'tog-extendwatchlist' => 'Mìxmảnas in tlapòpòwaltekpàntlachialli ìka mỏtas nochi in tlapảtlalistli, âmò in san okachi yankuik.',
-'tog-usenewrc' => 'Okachi kualli yankuik tlapảtlalistli (ìpan kineki JavaScript)',
+'tog-usenewrc' => 'Colōloāz in tlapatlaiztli īca yancuīc tlapatlaliztli īhuān in tlachiyaliztli tlapōhualāmatl (monequi JavaScript)',
 '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 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',
-'tog-watchdeletion' => 'Tiquintlachiyāz zāzaniltin tiquimpoloa',
+'tog-watchcreations' => 'Moaquiāz in āmatl mā niquinyōcoya īhuān in tlahcuilōlli mā niquinquetza īpan notlachiyaliz',
+'tog-watchdefault' => 'Moaquiāz āmatl īhuān tlahcuilōlli mā niquinpatla in notlachiyaliz',
+'tog-watchmoves' => 'Moaquiāz āmatl īhuān tlahcuilōlli mā niquinzaca in notlachiyaliz',
+'tog-watchdeletion' => 'Moaquiāz āmatl īhuān tlahcuilōlli mā niquimpolo in notlachiyaliz',
 'tog-minordefault' => 'Ticmachiyōtīz mochīntīn tlapatlalitzintli ic default',
 'tog-previewontop' => 'Tiquittāz achtochīhualiztli achtopa tlapatlaliztli caxitl',
 'tog-previewonfirst' => 'Xiquitta achtochīhualiztli inic cē tlapatlalizpan',
@@ -169,7 +169,7 @@ $messages = array(
 'sep' => 'ic chiucnāuh',
 'oct' => 'ic mahtlāc',
 'nov' => 'ic mahtlāctli oncē',
-'dec' => 'ic mahtlāctli onōme',
+'dec' => 'ic mahtlāctli omōme',
 
 # Categories related messages
 'pagecategories' => '{{PLURAL:$1|Tlaìxmatkàtlàlilòtl|Tlaìxmatkàtlàlilòmë}}',
@@ -206,7 +206,7 @@ $messages = array(
 'qbpageinfo' => 'Tlahcuilōltechcopa',
 'qbmyoptions' => 'Nozāzanil',
 'qbspecialpages' => 'Nònkuâkìskàtlaìxtlapaltìn',
-'faq' => 'FAQ',
+'faq' => 'Zan īc tētlatlanīliztli',
 'faqpage' => 'Project:FAQ',
 
 # Vector skin
@@ -301,7 +301,7 @@ $messages = array(
 'badaccess-groups' => 'Inōn tiquiēlēhuia zan quichīhuah tlatequitiltilīlli {{PLURAL:$2|oncān|oncān}}: $1.',
 
 'ok' => 'Nopan iti',
-'retrievedfrom' => 'Īhuīcpa "$1"',
+'retrievedfrom' => 'Ōquīzqui ītech  "$1"',
 'youhavenewmessages' => 'Tiquimpiya $1 ($2).',
 'newmessageslink' => 'yancuīc tlahcuilōltzintli',
 'newmessagesdifflink' => 'achto tlapatlaliztli',
@@ -451,9 +451,9 @@ Occeppa xicalaqui niman ticmatīz.',
 'italic_sample' => 'Cōliuhqui tlahcuilōliztli',
 'italic_tip' => 'Cōliuhqui tlahcuilōliztli',
 'link_sample' => 'Tzonhuiliztli ītōcā',
-'link_tip' => 'Tzonhuiliztli tlahtic',
-'extlink_sample' => 'http://www.example.com Tōcāitl',
-'extlink_tip' => 'Tzonhuilizcallān (xitequitiltia http://)',
+'link_tip' => 'Tlahtic tzonhuiliztli',
+'extlink_sample' => 'http://www.machiyōtl.com Tzonhuiliztōcāitl',
+'extlink_tip' => 'Calān tzonhuiliztli (xiquilnamiqui ticaquiāz in http://)',
 'headline_sample' => 'Cuātlahcuilōlli',
 'headline_tip' => 'Iuhcāyōtl 2 tōcāyōtl',
 'image_sample' => 'Machiyōtl.jpg',
@@ -465,7 +465,7 @@ Occeppa xicalaqui niman ticmatīz.',
 # Edit pages
 'summary' => 'Mopatlaliz:',
 'subject' => 'Tōcāitl/Āmoxmachiyōtl:',
-'minoredit' => 'Inīn cah tlapatlalitzintli',
+'minoredit' => 'Inīn tlapatlaliztli tepitōn',
 'watchthis' => 'Tictlachiyāz inīn zāzanilli',
 'savearticle' => 'Ticpiyāz',
 'preview' => 'Xiquitta achtochīhualiztli',
@@ -497,7 +497,8 @@ Tihuelīti [[Special:Search/{{PAGENAME}}|tictēmoa inīn zāzaniltōcācopa]] oc
 '''¡Ahmo ōmochīuh nozan!'''",
 'updated' => '(Ōmoyancuīli)',
 'note' => "'''Tlahtōlcaquiliztilōni:'''",
-'previewnote' => "'''¡Ca inīn moachtochīhualiz, auh mopatlaliz ahmō cateh ōmochīhuah nozan!'''",
+'previewnote' => "'''Xiquilnamiqui tein inīn zan tlaachtopaittaliztli.'''
+¡Motlapatlaliz ayamo ōquinpix!",
 'editing' => 'Ticpatlacah $1',
 'editingsection' => 'Ticpatlacah $1 (tlahtōltzintli)',
 'editingcomment' => 'Ticpatlacah $1 (tlahtōltzintli)',
@@ -587,7 +588,7 @@ Hueliz ōmopolo huiqui nozo ōmozacac.
 'revertmerge' => 'Tiquīxipehuaz',
 
 # Diffs
-'history-title' => '"$1" ītlachiyaliz tlahcuilōlloh',
+'history-title' => '«$1» tlahcuilōlloh ītlaihittaliz',
 'lineno' => 'Pāntli $1:',
 'editundo' => 'Tichuelōz',
 '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}})',
@@ -614,7 +615,7 @@ Hueliz ōmopolo huiqui nozo ōmozacac.
 'search-result-size' => '$1 ({{PLURAL:$2|1 tlahtōl|$2 tlahtōltin}})',
 'search-redirect' => '(tlacuepaliztli $1)',
 'search-section' => '(tlahtōltzintli $1)',
-'search-suggest' => 'Mohtoa ahnozo: $1',
+'search-suggest' => 'Ahnōceh tiquihtōznequiya: $1',
 'search-interwiki-caption' => 'Tlachīhualiztli īcnīhuān',
 'search-interwiki-more' => '(huehca ōmpa)',
 'search-relatedarticle' => 'Ītechcopa',
@@ -849,7 +850,7 @@ Timitztlātlauhtiah, xitlahcuiloa occē tōcāitl.',
 'filehist-dimensions' => 'Octacayōtl',
 'filehist-comment' => 'TlahtōIcaquiliztīlōni',
 'imagelinks' => 'Tlahcuilōlli tlanemītīliztli',
-'linkstoimage' => 'Inīn {{PLURAL:$1|zāzanilli tzonhuilia|$1 zāzaniltin tzonhuiliah}} inīn tlahcuilōlhuīc:',
+'linkstoimage' => 'Inīn {{PLURAL:$1|zāzanilli motzonhuilia|$1 zāzanilli motzonhuiliah}} inīn tlahcuilōlhuīc:',
 'nolinkstoimage' => 'Ahmo cateh zāzaniltin tlein tzonhuiliah inīn tlahcuilōlhuīc.',
 'morelinkstoimage' => 'Tiquinttāz [[Special:WhatLinksHere/$1|achi tzonhuiliztli]] inīn tlahcuilōlhuīc.',
 'duplicatesoffile' => 'Inōn {{PLURAL:$1|tlahcuilōlli cah|$1 tlahcuilōlli cateh}} ōntiah inīn zāzanilli ([[Special:FileDuplicateSearch/$2|ocahci]]):',
@@ -1116,9 +1117,9 @@ Xiquitta $2 ic yancuīc tlapololiztli.',
 'undelete-show-file-submit' => 'Quemah',
 
 # Namespace form on various pages
-'namespace' => 'Tōcātzin:',
+'namespace' => 'Tōcātlacāuhtli:',
 'invert' => 'Tlacuepāz motlahtōl',
-'blanknamespace' => '(Huēyi)',
+'blanknamespace' => '(Tāchcāuh)',
 
 # Contributions
 'contributions' => 'Ītlahcuilōl',
@@ -1163,7 +1164,7 @@ Xiquitta $2 ic yancuīc tlapololiztli.',
 'ipbreasonotherlist' => 'Occē īxtlamatiliztli',
 'ipbsubmit' => 'Tiquitzacuilīz inīn tlatequitiltilīlli',
 'ipbother' => 'Occē cāuhpan:',
-'ipboptions' => '2 yēmpōhualminutl:2 hours,1 tōnalli:1 day,3 tōnaltin:3 days,7 tōnaltin:1 week,14 tōnaltin:2 weeks,1 mētztli:1 month,3 mētztli:3 months,6 mētztli:6 months,1 xihuitl:1 year,Mochipa:infinite',
+'ipboptions' => '2 cāhuitl:2 hours,1 tōnalli:1 day,3 tōnaltin:3 days,1 chicuēyilhuitl:1 week,2 chicuēyilhuitl:2 weeks,1 mētztli:1 month,3 mētztli:3 months,6 mētztli:6 months,1 xihuitl:1 year,mochipa:infinite',
 'ipbotheroption' => 'occē',
 'ipbotherreason' => 'Occē īxtlamatiliztli:',
 'ipbwatchuser' => 'Tiquinchiyāz inīn tlatequitiltilīlli in ītlatequitiltilīlzāzanil auh in ītēixnāmiquiliz',
@@ -1275,7 +1276,7 @@ Hueliz cah inīn huēyi tlapatlaliztli. Timitztlātlauhtia ticmatīz cuallōtl a
 'tooltip-search' => 'Tlatēmōz īpan {{SITENAME}}',
 'tooltip-search-go' => 'Tiyaz in zāzanilhuīc īca inīn huel melāhuac tōcaitl intlā yez',
 'tooltip-p-logo' => 'Calīxatl',
-'tooltip-n-mainpage' => 'Tictlahpolōz in Calīxatl',
+'tooltip-n-mainpage' => 'Tiquittaz in calīxatl',
 'tooltip-n-mainpage-description' => 'Tiquittaz in calīxatl',
 'tooltip-n-portal' => 'Tlachīhualiztechcopa, inōn tihuelīti titlachīhua, tlatēmoyān',
 'tooltip-n-recentchanges' => 'Yancuīc tlapatlaliztli huiquipan',
@@ -1301,7 +1302,7 @@ Hueliz cah inīn huēyi tlapatlaliztli. Timitztlātlauhtia ticmatīz cuallōtl a
 'tooltip-ca-nstab-category' => 'Mà mỏta ìtlaìxtlapal in tlaìxmatkàtlàlilòtl',
 'tooltip-minoredit' => 'Ticmachiyōz quemeh tlapatlalitzintli',
 'tooltip-save' => 'Ticpiyāz mopatlaliz',
-'tooltip-preview' => 'Xiquitta achtopa mopatlaliz, ¡timitztlātlauhtiah quitēquitiltilia achto ticpiya!',
+'tooltip-preview' => 'Xachtopaitta mopatlaliz ¡Timitztlahtlauhtiliah, xicchīhua yēppa mā tiquimpiya!',
 'tooltip-diff' => 'Xiquitta in tlein ōticpatlāz tlahcuilōlco.',
 'tooltip-compareselectedversions' => 'Tiquinttāz ahneneuhquiliztli ōme zāzanilli tlapatlaliznepantlah.',
 'tooltip-watch' => 'Ticcēntilīz inīn zāzanilli motlachiyalizhuīc',
index 6a8a941..b1f60f1 100644 (file)
@@ -192,124 +192,124 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#OMDIRIGERING', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__INGENINNHOLDSFORTEGNELSE__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__INTETGALLERI__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__TVINGINNHOLDSFORTEGNELSE__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__INNHOLDSFORTEGNELSE__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__INGENSEKSJONSREDIGERING__', '__NOEDITSECTION__' ),
-       'currentmonth'            => array( '1', 'NÅVÆRENDEMÅNED', 'NÅVÆRENDEMÅNED2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', 'NÅVÆRENDEMÅNED1', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', 'NÅVÆRENDEMÅNEDSNAVN', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'NÅVÆRENDEMÅNEDSNAVNGEN', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'NÅVÆRENDEMÅNEDSNAVNKORT', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'NÅVÆRENDEDAG', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'NÅVÆRENDEDAG2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'NÅVÆRENDEDAGSNAVN', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'NÅVÆRENDEÅR', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'NÅVÆRENDETID', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'NÅVÆRENDETIME', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'LOKALMÅNED', 'LOKALMÅNED2', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', 'LOKALMÅNED1', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'LOKALMÅNEDSNAVN', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'LOKALMÅNEDSNAVNGEN', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'LOKALMÅNEDSNAVNKORT', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'LOKALDAG', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'LOKALDAG2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'LOKALDAGSNAVN', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'LOKALTÅR', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'LOKALTID', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'LOKALTIME', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'ANTALLSIDER', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'ANTALLARTIKLER', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'ANTALLFILER', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'ANTALLBRUKERE', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'ANTALLAKTIVEBRUKERE', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'ANTALLREDIGERINGER', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'ANTALLVISNINGER', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'SIDENAVN', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'SIDENAVNE', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'NAVNEROM', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'NAVNEROME', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'DISKUSJONSROM', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'DISKUSJONSROME', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'SUBJEKTROM', 'ARTIKKELROM', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'SUBJEKTROME', 'ARTIKKELROME', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'FULLTSIDENAVN', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'FULLTSIDENAVNE', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'UNDERSIDENAVN', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'UNDERSIDENAVNE', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'GRUNNSIDENAVN', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'GRUNNSIDENAVNE', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'DISKUSJONSSIDENAVN', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'DISKUSJONSSIDENAVNE', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'SUBJEKTSIDENAVN', 'ARTIKKELSIDENAVN', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'subjectpagenamee'        => array( '1', 'SUBJEKTSIDENAVNE', 'ARTIKKELSIDENAVNE', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
-       'img_thumbnail'           => array( '1', 'miniatyr', 'mini', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'miniatyr=$1', 'mini=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'høyre', 'right' ),
-       'img_left'                => array( '1', 'venstre', 'left' ),
-       'img_none'                => array( '1', 'ingen', 'none' ),
-       'img_center'              => array( '1', 'sentrer', 'senter', 'midtstilt', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'ramme', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', 'rammeløs', 'ingenramme', 'frameless' ),
-       'img_page'                => array( '1', 'side=$1', 'side $1', 'page=$1', 'page $1' ),
-       'img_upright'             => array( '1', 'portrett', 'portrett=$1', 'portrett_$1', 'upright', 'upright=$1', 'upright $1' ),
-       'img_baseline'            => array( '1', 'grunnlinje', 'baseline' ),
-       'img_top'                 => array( '1', 'topp', 'top' ),
-       'img_middle'              => array( '1', 'midt', 'middle' ),
-       'img_bottom'              => array( '1', 'bunn', 'bottom' ),
-       'img_text_bottom'         => array( '1', 'tekst-bunn', 'text-bottom' ),
-       'img_link'                => array( '1', 'lenke=$1', 'link=$1' ),
-       'ns'                      => array( '0', 'NR:', 'NS:' ),
-       'localurl'                => array( '0', 'LOKALURL:', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'LOKALURLE:', 'LOCALURLE:' ),
-       'articlepath'             => array( '0', 'ARTIKKELSTI', 'ARTICLEPATH' ),
-       'server'                  => array( '0', 'TJENER', 'SERVER' ),
-       'servername'              => array( '0', 'TJENERNAVN', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'SKRIPTSTI', 'SCRIPTPATH' ),
-       'stylepath'               => array( '0', 'STILSTI', 'STYLEPATH' ),
-       'grammar'                 => array( '0', 'GRAMMATIKK:', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'KJØNN:', 'GENDER:' ),
-       'notitleconvert'          => array( '0', '__INGENTITTELKONVERTERING__', '__NOTITLECONVERT__', '__NOTC__' ),
-       'nocontentconvert'        => array( '0', '__INGENINNHOLDSKONVERTERING__', '__NOCONTENTCONVERT__', '__NOCC__' ),
-       'currentweek'             => array( '1', 'NÅVÆRENDEUKE', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'NÅVÆRENDEUKEDAG', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'LOKALUKE', 'LOCALWEEK' ),
-       'localdow'                => array( '1', 'LOKALUKEDAG', 'LOCALDOW' ),
-       'revisionid'              => array( '1', 'REVISJONSID', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'REVISJONSDAG', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'REVISJONSDAG2', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'REVISJONSMÅNED', 'REVISIONMONTH' ),
-       'revisionmonth1'          => array( '1', 'REVISJONSMÅNED1', 'REVISIONMONTH1' ),
-       'revisionyear'            => array( '1', 'REVISJONSÅR', 'REVISIONYEAR' ),
-       'revisiontimestamp'       => array( '1', 'REVISJONSTIDSSTEMPEL', 'REVISIONTIMESTAMP' ),
-       'revisionuser'            => array( '1', 'REVISJONSBRUKER', 'REVISIONUSER' ),
-       'plural'                  => array( '0', 'FLERTALL:', 'PLURAL:' ),
-       'raw'                     => array( '0', 'RÅ:', 'RAW:' ),
-       'displaytitle'            => array( '1', 'VISTITTEL', 'DISPLAYTITLE' ),
-       'newsectionlink'          => array( '1', '__NYSEKSJONSLENKE__', '__NEWSECTIONLINK__' ),
-       'nonewsectionlink'        => array( '1', '__INGENNYSEKSJONSLENKE__', '__NONEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', 'NÅVÆRENDEVERSJON', 'CURRENTVERSION' ),
-       'currenttimestamp'        => array( '1', 'NÅVÆRENDETIDSSTEMPEL', 'CURRENTTIMESTAMP' ),
-       'localtimestamp'          => array( '1', 'LOKALTTIDSSTEMPEL', 'LOCALTIMESTAMP' ),
-       'contentlanguage'         => array( '1', 'INNHOLDSSPRÅK', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'        => array( '1', 'SIDERINAVNEROM:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'          => array( '1', 'ANTALLADMINISTRATORER', 'NUMBEROFADMINS' ),
-       'special'                 => array( '0', 'spesial', 'special' ),
-       'defaultsort'             => array( '1', 'STANDARDSORTERING', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'filepath'                => array( '0', 'FILSTI:', 'FILEPATH:' ),
-       'hiddencat'               => array( '1', '__SKJULTKATEGORI__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'SIDERIKATEGORI', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'SIDESTØRRELSE', 'PAGESIZE' ),
-       'index'                   => array( '1', '__INDEKSER__', '__INDEX__' ),
-       'noindex'                 => array( '1', '__INGENINDEKSERING__', '__NOINDEX__' ),
-       'numberingroup'           => array( '1', 'NUMMERIGRUPPE', 'NUMBERINGROUP', 'NUMINGROUP' ),
-       'staticredirect'          => array( '1', '__STATISTOMDIRIGERING__', '__STATICREDIRECT__' ),
-       'protectionlevel'         => array( '1', 'BESKYTTELSESNIVÅ', 'PROTECTIONLEVEL' ),
-       'formatdate'              => array( '0', 'datoformat', 'formatdate', 'dateformat' ),
-       'url_path'                => array( '0', 'STI', 'PATH' ),
-       'url_query'               => array( '0', 'SPØRRING', 'QUERY' ),
+       'redirect'                  => array( '0', '#OMDIRIGERING', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__INGENINNHOLDSFORTEGNELSE__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__INTETGALLERI__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__TVINGINNHOLDSFORTEGNELSE__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__INNHOLDSFORTEGNELSE__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__INGENSEKSJONSREDIGERING__', '__NOEDITSECTION__' ),
+       'currentmonth'              => array( '1', 'NÅVÆRENDEMÅNED', 'NÅVÆRENDEMÅNED2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'NÅVÆRENDEMÅNED1', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'NÅVÆRENDEMÅNEDSNAVN', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'NÅVÆRENDEMÅNEDSNAVNGEN', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'NÅVÆRENDEMÅNEDSNAVNKORT', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'NÅVÆRENDEDAG', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'NÅVÆRENDEDAG2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'NÅVÆRENDEDAGSNAVN', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'NÅVÆRENDEÅR', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'NÅVÆRENDETID', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'NÅVÆRENDETIME', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'LOKALMÅNED', 'LOKALMÅNED2', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'LOKALMÅNED1', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'LOKALMÅNEDSNAVN', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'LOKALMÅNEDSNAVNGEN', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'LOKALMÅNEDSNAVNKORT', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'LOKALDAG', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'LOKALDAG2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'LOKALDAGSNAVN', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'LOKALTÅR', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'LOKALTID', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'LOKALTIME', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'ANTALLSIDER', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'ANTALLARTIKLER', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'ANTALLFILER', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'ANTALLBRUKERE', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'ANTALLAKTIVEBRUKERE', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'ANTALLREDIGERINGER', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'ANTALLVISNINGER', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'SIDENAVN', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'SIDENAVNE', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'NAVNEROM', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'NAVNEROME', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'DISKUSJONSROM', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'DISKUSJONSROME', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'SUBJEKTROM', 'ARTIKKELROM', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'SUBJEKTROME', 'ARTIKKELROME', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'FULLTSIDENAVN', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'FULLTSIDENAVNE', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'UNDERSIDENAVN', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'UNDERSIDENAVNE', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'GRUNNSIDENAVN', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'GRUNNSIDENAVNE', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'DISKUSJONSSIDENAVN', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'DISKUSJONSSIDENAVNE', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'SUBJEKTSIDENAVN', 'ARTIKKELSIDENAVN', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'          => array( '1', 'SUBJEKTSIDENAVNE', 'ARTIKKELSIDENAVNE', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+       'img_thumbnail'             => array( '1', 'miniatyr', 'mini', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'miniatyr=$1', 'mini=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'høyre', 'right' ),
+       'img_left'                  => array( '1', 'venstre', 'left' ),
+       'img_none'                  => array( '1', 'ingen', 'none' ),
+       'img_center'                => array( '1', 'sentrer', 'senter', 'midtstilt', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'ramme', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'rammeløs', 'ingenramme', 'frameless' ),
+       'img_page'                  => array( '1', 'side=$1', 'side $1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', 'portrett', 'portrett=$1', 'portrett_$1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_baseline'              => array( '1', 'grunnlinje', 'baseline' ),
+       'img_top'                   => array( '1', 'topp', 'top' ),
+       'img_middle'                => array( '1', 'midt', 'middle' ),
+       'img_bottom'                => array( '1', 'bunn', 'bottom' ),
+       'img_text_bottom'           => array( '1', 'tekst-bunn', 'text-bottom' ),
+       'img_link'                  => array( '1', 'lenke=$1', 'link=$1' ),
+       'ns'                        => array( '0', 'NR:', 'NS:' ),
+       'localurl'                  => array( '0', 'LOKALURL:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'LOKALURLE:', 'LOCALURLE:' ),
+       'articlepath'               => array( '0', 'ARTIKKELSTI', 'ARTICLEPATH' ),
+       'server'                    => array( '0', 'TJENER', 'SERVER' ),
+       'servername'                => array( '0', 'TJENERNAVN', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'SKRIPTSTI', 'SCRIPTPATH' ),
+       'stylepath'                 => array( '0', 'STILSTI', 'STYLEPATH' ),
+       'grammar'                   => array( '0', 'GRAMMATIKK:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'KJØNN:', 'GENDER:' ),
+       'notitleconvert'            => array( '0', '__INGENTITTELKONVERTERING__', '__NOTITLECONVERT__', '__NOTC__' ),
+       'nocontentconvert'          => array( '0', '__INGENINNHOLDSKONVERTERING__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+       'currentweek'               => array( '1', 'NÅVÆRENDEUKE', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'NÅVÆRENDEUKEDAG', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'LOKALUKE', 'LOCALWEEK' ),
+       'localdow'                  => array( '1', 'LOKALUKEDAG', 'LOCALDOW' ),
+       'revisionid'                => array( '1', 'REVISJONSID', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'REVISJONSDAG', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'REVISJONSDAG2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'REVISJONSMÅNED', 'REVISIONMONTH' ),
+       'revisionmonth1'            => array( '1', 'REVISJONSMÅNED1', 'REVISIONMONTH1' ),
+       'revisionyear'              => array( '1', 'REVISJONSÅR', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'REVISJONSTIDSSTEMPEL', 'REVISIONTIMESTAMP' ),
+       'revisionuser'              => array( '1', 'REVISJONSBRUKER', 'REVISIONUSER' ),
+       'plural'                    => array( '0', 'FLERTALL:', 'PLURAL:' ),
+       'raw'                       => array( '0', 'RÅ:', 'RAW:' ),
+       'displaytitle'              => array( '1', 'VISTITTEL', 'DISPLAYTITLE' ),
+       'newsectionlink'            => array( '1', '__NYSEKSJONSLENKE__', '__NEWSECTIONLINK__' ),
+       'nonewsectionlink'          => array( '1', '__INGENNYSEKSJONSLENKE__', '__NONEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'NÅVÆRENDEVERSJON', 'CURRENTVERSION' ),
+       'currenttimestamp'          => array( '1', 'NÅVÆRENDETIDSSTEMPEL', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', 'LOKALTTIDSSTEMPEL', 'LOCALTIMESTAMP' ),
+       'contentlanguage'           => array( '1', 'INNHOLDSSPRÅK', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', 'SIDERINAVNEROM:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', 'ANTALLADMINISTRATORER', 'NUMBEROFADMINS' ),
+       'special'                   => array( '0', 'spesial', 'special' ),
+       'defaultsort'               => array( '1', 'STANDARDSORTERING', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'filepath'                  => array( '0', 'FILSTI:', 'FILEPATH:' ),
+       'hiddencat'                 => array( '1', '__SKJULTKATEGORI__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'SIDERIKATEGORI', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'SIDESTØRRELSE', 'PAGESIZE' ),
+       'index'                     => array( '1', '__INDEKSER__', '__INDEX__' ),
+       'noindex'                   => array( '1', '__INGENINDEKSERING__', '__NOINDEX__' ),
+       'numberingroup'             => array( '1', 'NUMMERIGRUPPE', 'NUMBERINGROUP', 'NUMINGROUP' ),
+       'staticredirect'            => array( '1', '__STATISTOMDIRIGERING__', '__STATICREDIRECT__' ),
+       'protectionlevel'           => array( '1', 'BESKYTTELSESNIVÅ', 'PROTECTIONLEVEL' ),
+       'formatdate'                => array( '0', 'datoformat', 'formatdate', 'dateformat' ),
+       'url_path'                  => array( '0', 'STI', 'PATH' ),
+       'url_query'                 => array( '0', 'SPØRRING', 'QUERY' ),
 );
 
 $messages = array(
@@ -1994,6 +1994,7 @@ Kanskje du vil redigere beskrivelsen på dens [$2 filbeskrivelsesside].',
 'uploadnewversion-linktext' => 'Last opp en ny versjon av denne filen',
 'shared-repo-from' => 'fra $1',
 'shared-repo' => 'et delt fillager',
+'upload-disallowed-here' => 'Beklageligvis kan du ikke overskrive dette bildet.',
 
 # File reversion
 'filerevert' => 'Tilbakestill $1',
@@ -2275,6 +2276,8 @@ Mer informasjon om de enkelte rettighetstypene kan finnes [[{{MediaWiki:Listgrou
 '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',
+'emailuser-title-target' => 'Send epost til denne {{GENDER:$1|brukeren}}',
+'emailuser-title-notarget' => 'E-post til bruker',
 '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.',
@@ -3078,11 +3081,34 @@ Dette er sannsynligvis forårsaket av en lenke til et svartelistet eksternt nett
 
 # Info page
 'pageinfo-title' => 'Informasjon om «$1»',
-'pageinfo-header-edits' => 'Redigeringer',
+'pageinfo-header-basic' => 'Grunnleggende informasjon',
+'pageinfo-header-edits' => 'Redigeringshistorikk',
+'pageinfo-header-restrictions' => 'Sidebeskyttelse',
+'pageinfo-header-properties' => 'Sideegenskaper',
+'pageinfo-display-title' => 'Visningstittel',
+'pageinfo-default-sort' => 'Standardsorteringsnøkkel',
+'pageinfo-length' => 'Sidelengde (i bytes)',
+'pageinfo-article-id' => 'Side-ID',
+'pageinfo-robot-policy' => 'Søkemotorstatus',
+'pageinfo-robot-index' => 'Indekserbar',
+'pageinfo-robot-noindex' => 'Ikke indekserbar',
 'pageinfo-views' => 'Antall visninger',
-'pageinfo-watchers' => 'Antall overvåkere',
-'pageinfo-edits' => 'Antall redigeringer',
-'pageinfo-authors' => 'Antall forskjellige forfattere',
+'pageinfo-watchers' => 'Antall overvåkere av siden',
+'pageinfo-redirects-name' => 'Omdirigeringer til siden',
+'pageinfo-subpages-name' => 'Undersider av siden',
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|omdirigering|omdirigeringer}}; $3 {{PLURAL:$3|ikke-omdirigering|ikke-omdirigeringer}})',
+'pageinfo-firstuser' => 'Sideoppretter',
+'pageinfo-firsttime' => 'Dato for opprettelse av siden',
+'pageinfo-lastuser' => 'Siste forfatter',
+'pageinfo-lasttime' => 'Dato for siste redigering',
+'pageinfo-edits' => 'Totalt antall redigeringer',
+'pageinfo-authors' => 'Totalt antall forskjellige forfattere',
+'pageinfo-recent-edits' => 'Antall nylige redigeringer (innen siste $1)',
+'pageinfo-recent-authors' => 'Antall nylige forfattere',
+'pageinfo-restriction' => 'Sidebeskyttelse (<code>{{lcfirst:$1}}</code>)',
+'pageinfo-magic-words' => '{{PLURAL:$1|Magisk|Magiske}} ord ($1)',
+'pageinfo-hidden-categories' => '{{PLURAL:$1|Skjult kategori|Skjulte kategorier}} ($1)',
+'pageinfo-templates' => 'Transkludert {{PLURAL:$1|mal|maler}} ($1)',
 
 # Skin names
 'skinname-standard' => 'Standard',
@@ -3134,7 +3160,8 @@ Ved å åpne den kan systemet ditt kompromitteres.",
 'file-info-size' => '$1 × $2 piksler, filstørrelse: $3, MIME-type: $4',
 'file-info-size-pages' => '$1 × $2 piksler, filstørrelse: $3, MIME-type: $4, $5 {{PLURAL:$5|side|sider}}',
 '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, standardstørrelse $1 × $2 piksler, filstørrelse: $3',
+'svg-long-desc-animated' => 'Animert SVG-fil, standardstørrelse $1 × $2 piksler, filstørrelse: $3',
 'show-big-image' => 'Full oppløsning',
 'show-big-image-preview' => 'Størrelse på denne forhåndsvisningen: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Annen oppløsning|Andre oppløsninger}}: $1.',
@@ -3144,6 +3171,8 @@ Ved å åpne den kan systemet ditt kompromitteres.",
 'file-info-png-looped' => 'loopet',
 'file-info-png-repeat' => 'avspilt $1 {{PLURAL:$1|gang|ganger}}',
 'file-info-png-frames' => '$1 {{PLURAL:$1|bilde|bilder}}',
+'file-no-thumb-animation' => "'''Merk: På grunn av tekniske begrensninger vil ikke miniatyrbilder av denne filen bli animert.'''",
+'file-no-thumb-animation-gif' => "'''Merk: På grunn av tekniske begrensninger vil ikke miniatyrbilder av høyoppløselige GIF-bilder, slik som denne, bli animert.'''",
 
 # Special:NewFiles
 'newimages' => 'Galleri over nye filer',
index 2c5b1cf..db850eb 100644 (file)
@@ -56,33 +56,33 @@ $namespaceAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#wiederleiden', '#WEITERLEITUNG', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__KEENINHOLTVERTEKEN__', '__KEIN_INHALTSVERZEICHNIS__', '__KEININHALTSVERZEICHNIS__', '__NOTOC__' ),
-       'forcetoc'                => array( '0', '__WIESINHOLTVERTEKEN__', '__INHALTSVERZEICHNIS_ERZWINGEN__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__INHOLTVERTEKEN__', '__INHALTSVERZEICHNIS__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__KEENÄNNERNLINK__', '__ABSCHNITTE_NICHT_BEARBEITEN__', '__NOEDITSECTION__' ),
-       'currentmonth'            => array( '1', 'AKTMAAND', 'JETZIGER_MONAT', 'JETZIGER_MONAT_2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonthname'        => array( '1', 'AKTMAANDNAAM', 'JETZIGER_MONATSNAME', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'AKTMAANDNAAMGEN', 'JETZIGER_MONATSNAME_GENITIV', 'CURRENTMONTHNAMEGEN' ),
-       'currentday'              => array( '1', 'AKTDAG', 'JETZIGER_KALENDERTAG', 'CURRENTDAY' ),
-       'currentdayname'          => array( '1', 'AKTDAGNAAM', 'JETZIGER_WOCHENTAG', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'AKTJOHR', 'JETZIGES_JAHR', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'AKTTIED', 'JETZIGE_UHRZEIT', 'CURRENTTIME' ),
-       'numberofarticles'        => array( '1', 'ARTIKELTALL', 'ARTIKELANZAHL', 'NUMBEROFARTICLES' ),
-       'pagename'                => array( '1', 'SIETNAAM', 'SEITENNAME', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'SIETNAAME', 'SEITENNAME_URL', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'NAAMRUUM', 'NAMENSRAUM', 'NAMESPACE' ),
-       'img_thumbnail'           => array( '1', 'duum', 'miniatur', 'mini', 'thumbnail', 'thumb' ),
-       'img_right'               => array( '1', 'rechts', 'right' ),
-       'img_left'                => array( '1', 'links', 'left' ),
-       'img_none'                => array( '1', 'keen', 'ohne', 'none' ),
-       'img_center'              => array( '1', 'merrn', 'zentriert', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'rahmt', 'gerahmt', 'framed', 'enframed', 'frame' ),
-       'sitename'                => array( '1', 'STEEDNAAM', 'PROJEKTNAME', 'SITENAME' ),
-       'ns'                      => array( '0', 'NR:', 'NS:' ),
-       'localurl'                => array( '0', 'STEEDURL:', 'LOKALE_URL:', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'STEEDURLE:', 'LOKALE_URL_C:', 'LOCALURLE:' ),
-       'grammar'                 => array( '0', 'GRAMMATIK:', 'GRAMMAR:' ),
+       'redirect'                  => array( '0', '#wiederleiden', '#WEITERLEITUNG', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__KEENINHOLTVERTEKEN__', '__KEIN_INHALTSVERZEICHNIS__', '__KEININHALTSVERZEICHNIS__', '__NOTOC__' ),
+       'forcetoc'                  => array( '0', '__WIESINHOLTVERTEKEN__', '__INHALTSVERZEICHNIS_ERZWINGEN__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__INHOLTVERTEKEN__', '__INHALTSVERZEICHNIS__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__KEENÄNNERNLINK__', '__ABSCHNITTE_NICHT_BEARBEITEN__', '__NOEDITSECTION__' ),
+       'currentmonth'              => array( '1', 'AKTMAAND', 'JETZIGER_MONAT', 'JETZIGER_MONAT_2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonthname'          => array( '1', 'AKTMAANDNAAM', 'JETZIGER_MONATSNAME', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'AKTMAANDNAAMGEN', 'JETZIGER_MONATSNAME_GENITIV', 'CURRENTMONTHNAMEGEN' ),
+       'currentday'                => array( '1', 'AKTDAG', 'JETZIGER_KALENDERTAG', 'CURRENTDAY' ),
+       'currentdayname'            => array( '1', 'AKTDAGNAAM', 'JETZIGER_WOCHENTAG', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'AKTJOHR', 'JETZIGES_JAHR', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'AKTTIED', 'JETZIGE_UHRZEIT', 'CURRENTTIME' ),
+       'numberofarticles'          => array( '1', 'ARTIKELTALL', 'ARTIKELANZAHL', 'NUMBEROFARTICLES' ),
+       'pagename'                  => array( '1', 'SIETNAAM', 'SEITENNAME', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'SIETNAAME', 'SEITENNAME_URL', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'NAAMRUUM', 'NAMENSRAUM', 'NAMESPACE' ),
+       'img_thumbnail'             => array( '1', 'duum', 'miniatur', 'mini', 'thumbnail', 'thumb' ),
+       'img_right'                 => array( '1', 'rechts', 'right' ),
+       'img_left'                  => array( '1', 'links', 'left' ),
+       'img_none'                  => array( '1', 'keen', 'ohne', 'none' ),
+       'img_center'                => array( '1', 'merrn', 'zentriert', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'rahmt', 'gerahmt', 'framed', 'enframed', 'frame' ),
+       'sitename'                  => array( '1', 'STEEDNAAM', 'PROJEKTNAME', 'SITENAME' ),
+       'ns'                        => array( '0', 'NR:', 'NS:' ),
+       'localurl'                  => array( '0', 'STEEDURL:', 'LOKALE_URL:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'STEEDURLE:', 'LOKALE_URL_C:', 'LOCALURLE:' ),
+       'grammar'                   => array( '0', 'GRAMMATIK:', 'GRAMMAR:' ),
 );
 
 
index c4fd173..714892d 100644 (file)
@@ -74,139 +74,139 @@ $bookstoreList = array(
 
 #!!# Translation <b>HLEERSTE:</b> is used more than once for <a href="#mw-sp-magic-lcfirst">lcfirst</a> and <a href="#mw-sp-magic-ucfirst">ucfirst</a>.
 $magicWords = array(
-       'redirect'                => array( '0', '#DEURVERWIEZING', '#DOORVERWIJZING', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__GIENONDERWARPEN__', '__GEENINHOUD__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__GIENGALLERIEJE__', '__GEEN_GALERIJ__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__FORSEERONDERWARPEN__', '__INHOUD_DWINGEN__', '__FORCEERINHOUD__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__ONDERWARPEN__', '__INHOUD__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__GIENBEWARKSEKSIE__', '__NIETBEWERKBARESECTIE__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '__GIENKOPJEN__', '__GEENKOP__', '__NOHEADER__' ),
-       'currentmonth'            => array( '1', 'DISSEMAOND', 'HUIDIGEMAAND', 'HUIDIGEMAAND2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonthname'        => array( '1', 'DISSEMAONDNAAM', 'HUIDIGEMAANDNAAM', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'DISSEMAONDGEN', 'HUIDIGEMAANDGEN', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'DISSEMAONDAOFK', 'HUIDIGEMAANDAFK', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'DISSEDAG', 'HUIDIGEDAG', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'DISSEDAG2', 'HUIDIGEDAG2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'DISSEDAGNAAM', 'HUIDIGEDAGNAAM', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'DITJAOR', 'HUIDIGJAAR', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'DISSETIED', 'HUIDIGETIJD', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'DITURE', 'HUIDIGUUR', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'LOKALEMAOND', 'PLAATSELIJKEMAAND', 'LOKALEMAAND', 'LOKALEMAAND2', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', 'LOKALEMAOND1', 'LOKALEMAAND1', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'LOKALEMAONDNAAM', 'PLAATSELIJKEMAANDNAAM', 'LOKALEMAANDNAAM', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'LOKALEMAONDNAAMGEN', 'PLAATSELIJKEMAANDNAAMGEN', 'LOKALEMAANDNAAMGEN', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'LOKALEMAONDAOFK', 'PLAATSELIJKEMAANDAFK', 'LOKALEMAANDAFK', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'LOKALEDAG', 'PLAATSELIJKEDAG', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'LOKALEDAG2', 'PLAATSELIJKEDAG2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'LOKALEDAGNAAM', 'PLAATSELIJKEDAGNAAM', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'LOKAALJAOR', 'PLAATSELIJKJAAR', 'LOKAALJAAR', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'LOKALETIED', 'PLAATSELIJKETIJD', 'LOKALETIJD', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'LOKAALURE', 'PLAATSELIJKUUR', 'LOKAALUUR', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'ANTALPAGINAS', 'ANTALPAGINA\'S', 'ANTALPAGINA’S', 'AANTALPAGINAS', 'AANTALPAGINA\'S', 'AANTALPAGINA’S', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'ANTALARTIKELS', 'AANTALARTIKELEN', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'ANTALBESTANDEN', 'AANTALBESTANDEN', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'ANTALGEBRUKERS', 'AANTALGEBRUIKERS', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'ANTALAKTIEVEGEBRUKERS', 'AANTALACTIEVEGEBRUIKERS', 'ACTIEVEGEBRUIKERS', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'ANTALBEWARKINGEN', 'AANTALBEWERKINGEN', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'ANTALKERENBEKEKEN', 'AANTALKERENBEKEKEN', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'PAGINANAAM', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'PAGINANAAME', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'NAAMRUUMTE', 'NAAMRUIMTE', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'NAAMRUUMTEE', 'NAAMRUIMTEE', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'OVERLEGRUUMTE', 'OVERLEGRUIMTE', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'OVERLEGRUUMTEE', 'OVERLEGRUIMTEE', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'ONDERWARPRUUMTE', 'ARTIKELRUUMTE', 'ONDERWERPRUIMTE', 'ARTIKELRUIMTE', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'ONDERWARPRUUMTEE', 'ARTIKELRUUMTEE', 'ONDERWERPRUIMTEE', 'ARTIKELRUIMTEE', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'HELEPAGINANAAM', 'VOLLEDIGEPAGINANAAM', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'HELEPAGINANAAME', 'VOLLEDIGEPAGINANAAME', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'DEELPAGINANAAM', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'DEELPAGINANAAME', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'BAOSISPAGINANAAM', 'BASISPAGINANAAM', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'BAOSISPAGINANAAME', 'BASISPAGINANAAME', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'OVERLEGPAGINANAAM', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'OVERLEGPAGINANAAME', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'ONDERWARPPAGINANAAM', 'ARTIKELPAGINANAAM', 'ONDERWERPPAGINANAAM', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'subjectpagenamee'        => array( '1', 'ONDERWARPPAGINANAAME', 'ARTIKELPAGINANAAME', 'ONDERWERPPAGINANAAME', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
-       'msg'                     => array( '0', 'BERICHT:', 'MSG:' ),
-       'subst'                   => array( '0', 'VERVANG:', 'VERV:', 'SUBST:' ),
-       'msgnw'                   => array( '0', 'BERICHTNW', 'MSGNW:' ),
-       'img_thumbnail'           => array( '1', 'miniatuur', 'duumnegel', 'doemnaegel', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'miniatuur=$1', 'duumnegel=$1', 'doemnaegel=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'rechts', 'right' ),
-       'img_left'                => array( '1', 'links', 'left' ),
-       'img_none'                => array( '1', 'gien', 'geen', 'none' ),
-       'img_center'              => array( '1', 'esentreerd', 'gecentreerd', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'umraand', 'omkaderd', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', 'kaoderloos', 'kaderloos', 'frameless' ),
-       'img_page'                => array( '1', 'pagina=$1', 'pagina_$1', 'pagina $1', 'page=$1', 'page $1' ),
-       'img_upright'             => array( '1', 'rechtop', 'rechtop=$1', 'rechtop$1', 'upright', 'upright=$1', 'upright $1' ),
-       'img_border'              => array( '1', 'raand', 'rand', 'border' ),
-       'img_baseline'            => array( '1', 'grondliende', 'grondlijn', 'baseline' ),
-       'img_top'                 => array( '1', 'boven', 'top' ),
-       'img_text_top'            => array( '1', 'tekste-boven', 'tekst-boven', 'text-top' ),
-       'img_middle'              => array( '1', 'midden', 'middle' ),
-       'img_bottom'              => array( '1', 'benejen', 'beneden', 'bottom' ),
-       'img_text_bottom'         => array( '1', 'tekste-benejen', 'tekst-beneden', 'text-bottom' ),
-       'img_link'                => array( '1', 'verwiezing=$', 'verwijzing=$1', 'link=$1' ),
-       'sitename'                => array( '1', 'WEBSTEENAAM', 'SITENAAM', 'SITENAME' ),
-       'ns'                      => array( '0', 'NR:', 'NS:' ),
-       'localurl'                => array( '0', 'LOKALEURL', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'LOKALEURLE', 'LOCALURLE:' ),
-       'servername'              => array( '0', 'SERVERNAAM', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'SKRIPTPAD', 'SCRIPTPAD', 'SCRIPTPATH' ),
-       'stylepath'               => array( '0', 'STIELPAD', 'STIJLPAD', 'STYLEPATH' ),
-       'grammar'                 => array( '0', 'GRAMMATIKA:', 'GRAMMATICA:', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'GESLACHTE:', 'GESLACHT:', 'GENDER:' ),
-       'notitleconvert'          => array( '0', '__GIENTITELKONVERSIE__', '__GIENTC__', '__GEENTITELCONVERSIE__', '__GEENTC__', '__GEENPAGINANAAMCONVERSIE__', '__NOTITLECONVERT__', '__NOTC__' ),
-       'nocontentconvert'        => array( '0', '__GIENINHOUDKONVERSIE__', '__GIENIC__', '__GEENINHOUDCONVERSIE__', '__GEENIC__', '__NOCONTENTCONVERT__', '__NOCC__' ),
-       'currentweek'             => array( '1', 'DISSEWEKE', 'HUIDIGEWEEK', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'DISSEDVDW', 'HUIDIGEDVDW', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'LOKALEWEKE', 'PLAATSELIJKEWEEK', 'LOKALEWEEK', 'LOCALWEEK' ),
-       'localdow'                => array( '1', 'LOKALEDVDW', 'PLAATSELIJKEDVDW', 'LOCALDOW' ),
-       'revisionid'              => array( '1', 'REVISIEID', 'REVISIE-ID', 'VERSIEID', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'REVISIEDAG', 'VERSIEDAG', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'REVISIEDAG2', 'VERSIEDAG2', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'REVISIEMAOND', 'VERSIEMAAND', 'REVISIONMONTH' ),
-       'revisionyear'            => array( '1', 'REVISIEJAOR', 'VERSIEJAAR', 'REVISIONYEAR' ),
-       'revisiontimestamp'       => array( '1', 'REVISIETIEDSTEMPEL', 'VERSIETIJD', 'REVISIONTIMESTAMP' ),
-       'revisionuser'            => array( '1', 'VERSIEGEBRUKER', 'VERSIEGEBRUIKER', 'REVISIONUSER' ),
-       'plural'                  => array( '0', 'MEERVOUD:', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'HELEURL', 'VOLLEDIGEURL', 'VOLLEDIGEURL:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'HELEURLE', 'VOLLEDIGEURLE', 'VOLLEDIGEURLE:', 'FULLURLE:' ),
-       'lcfirst'                 => array( '0', 'KLEERSTE:', 'LCFIRST:' ),
-       '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', 'WEERGEGEVENTITEL', 'DISPLAYTITLE' ),
-       'newsectionlink'          => array( '1', '__NIEJESECTIEVERWIEZING__', '__NIEUWESECTIELINK__', '__NIEUWESECTIEKOPPELING__', '__NEWSECTIONLINK__' ),
-       'nonewsectionlink'        => array( '1', '__GIENNIEJKOPJENVERWIEZING__', '__GEENNIEUWKOPJEVERWIJZING__', '__GEENNIEUWESECTIELINK__', '__NONEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', 'DISSEVERSIE', 'HUIDIGEVERSIE', 'CURRENTVERSION' ),
-       'urlencode'               => array( '0', 'URLKODEREN', 'URLCODEREN', 'CODEERURL', 'URLENCODE:' ),
-       'anchorencode'            => array( '0', 'ANKERKODEREN', 'ANKERCODEREN', 'CODEERANKER', 'ANCHORENCODE' ),
-       'currenttimestamp'        => array( '1', 'DISSETIEDSTEMPEL', 'HUIDIGETIJDSTEMPEL', 'CURRENTTIMESTAMP' ),
-       'localtimestamp'          => array( '1', 'LOKALETIEDSTEMPEL', 'PLAATSELIJKETIJDSTEMPEL', 'LOKALETIJDSTEMPEL', 'LOCALTIMESTAMP' ),
-       'directionmark'           => array( '1', 'RICHTINGMARKERING', 'RICHTINGSMARKERING', 'DIRECTIONMARK', 'DIRMARK' ),
-       'language'                => array( '0', '#TAAL:', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', 'INHOUDSTAAL', 'INHOUDTAAL', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'        => array( '1', 'PAGINASINNAAMRUUMTE', 'PAGINA’SINNAAMRUUMTE', 'PAGINA\'SINNAAMRUUMTE', 'PAGINASINNAAMRUIMTE', 'PAGINA’SINNAAMRUIMTE', 'PAGINA\'SINNAAMRUIMTE', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'          => array( '1', 'ANTALBEHEERDERS', 'AANTALBEHEERDERS', 'AANTALADMINS', 'NUMBEROFADMINS' ),
-       'formatnum'               => array( '0', 'FORMATTEERNUM', 'NUMFORMATTEREN', 'FORMATNUM' ),
-       'padleft'                 => array( '0', 'LINKSOPVULLEN', 'PADLEFT' ),
-       'padright'                => array( '0', 'RECHTSOPVULLEN', 'PADRIGHT' ),
-       'special'                 => array( '0', 'spesiaal', 'speciaal', 'special' ),
-       'defaultsort'             => array( '1', 'STANDARDSORTERING:', 'STANDAARDSORTERING:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'filepath'                => array( '0', 'BESTAANDSPAD:', 'BESTANDSPAD:', 'FILEPATH:' ),
-       'tag'                     => array( '0', 'etiket', 'label', 'tag' ),
-       'hiddencat'               => array( '1', '__VERBÖRGENKAT__', '__VERBORGENCAT__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'PAGINASINKATEGORIE', 'PAGINASINKAT', 'PAGINASINCATEGORIE', 'PAGINASINCAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'PAGINAGROOTTE', 'PAGESIZE' ),
-       'noindex'                 => array( '1', '__GIENINDEX__', '__GEENINDEX__', '__NOINDEX__' ),
-       'numberingroup'           => array( '1', 'ANTALINGROEP', 'AANTALINGROEP', 'NUMBERINGROUP', 'NUMINGROUP' ),
-       'staticredirect'          => array( '1', '__STAOTIESEDEURVERWIEZING__', '__STATISCHEDOORVERWIJZING__', '__STATISCHEREDIRECT__', '__STATICREDIRECT__' ),
-       'protectionlevel'         => array( '1', 'BEVEILIGINGSNIVO', 'BEVEILIGINGSNIVEAU', 'PROTECTIONLEVEL' ),
-       'formatdate'              => array( '0', 'daotumopmaak', 'datumopmaak', 'formatdate', 'dateformat' ),
-       'url_query'               => array( '0', 'ZEUKOPDRACHTE', 'ZOEKOPDRACHT', 'QUERY' ),
+       'redirect'                  => array( '0', '#DEURVERWIEZING', '#DOORVERWIJZING', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__GIENONDERWARPEN__', '__GEENINHOUD__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__GIENGALLERIEJE__', '__GEEN_GALERIJ__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__FORSEERONDERWARPEN__', '__INHOUD_DWINGEN__', '__FORCEERINHOUD__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__ONDERWARPEN__', '__INHOUD__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__GIENBEWARKSEKSIE__', '__NIETBEWERKBARESECTIE__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '__GIENKOPJEN__', '__GEENKOP__', '__NOHEADER__' ),
+       'currentmonth'              => array( '1', 'DISSEMAOND', 'HUIDIGEMAAND', 'HUIDIGEMAAND2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonthname'          => array( '1', 'DISSEMAONDNAAM', 'HUIDIGEMAANDNAAM', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'DISSEMAONDGEN', 'HUIDIGEMAANDGEN', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'DISSEMAONDAOFK', 'HUIDIGEMAANDAFK', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'DISSEDAG', 'HUIDIGEDAG', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'DISSEDAG2', 'HUIDIGEDAG2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'DISSEDAGNAAM', 'HUIDIGEDAGNAAM', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'DITJAOR', 'HUIDIGJAAR', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'DISSETIED', 'HUIDIGETIJD', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'DITURE', 'HUIDIGUUR', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'LOKALEMAOND', 'PLAATSELIJKEMAAND', 'LOKALEMAAND', 'LOKALEMAAND2', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'LOKALEMAOND1', 'LOKALEMAAND1', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'LOKALEMAONDNAAM', 'PLAATSELIJKEMAANDNAAM', 'LOKALEMAANDNAAM', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'LOKALEMAONDNAAMGEN', 'PLAATSELIJKEMAANDNAAMGEN', 'LOKALEMAANDNAAMGEN', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'LOKALEMAONDAOFK', 'PLAATSELIJKEMAANDAFK', 'LOKALEMAANDAFK', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'LOKALEDAG', 'PLAATSELIJKEDAG', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'LOKALEDAG2', 'PLAATSELIJKEDAG2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'LOKALEDAGNAAM', 'PLAATSELIJKEDAGNAAM', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'LOKAALJAOR', 'PLAATSELIJKJAAR', 'LOKAALJAAR', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'LOKALETIED', 'PLAATSELIJKETIJD', 'LOKALETIJD', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'LOKAALURE', 'PLAATSELIJKUUR', 'LOKAALUUR', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'ANTALPAGINAS', 'ANTALPAGINA\'S', 'ANTALPAGINA’S', 'AANTALPAGINAS', 'AANTALPAGINA\'S', 'AANTALPAGINA’S', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'ANTALARTIKELS', 'AANTALARTIKELEN', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'ANTALBESTANDEN', 'AANTALBESTANDEN', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'ANTALGEBRUKERS', 'AANTALGEBRUIKERS', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'ANTALAKTIEVEGEBRUKERS', 'AANTALACTIEVEGEBRUIKERS', 'ACTIEVEGEBRUIKERS', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'ANTALBEWARKINGEN', 'AANTALBEWERKINGEN', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'ANTALKERENBEKEKEN', 'AANTALKERENBEKEKEN', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'PAGINANAAM', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'PAGINANAAME', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'NAAMRUUMTE', 'NAAMRUIMTE', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'NAAMRUUMTEE', 'NAAMRUIMTEE', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'OVERLEGRUUMTE', 'OVERLEGRUIMTE', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'OVERLEGRUUMTEE', 'OVERLEGRUIMTEE', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'ONDERWARPRUUMTE', 'ARTIKELRUUMTE', 'ONDERWERPRUIMTE', 'ARTIKELRUIMTE', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'ONDERWARPRUUMTEE', 'ARTIKELRUUMTEE', 'ONDERWERPRUIMTEE', 'ARTIKELRUIMTEE', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'HELEPAGINANAAM', 'VOLLEDIGEPAGINANAAM', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'HELEPAGINANAAME', 'VOLLEDIGEPAGINANAAME', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'DEELPAGINANAAM', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'DEELPAGINANAAME', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'BAOSISPAGINANAAM', 'BASISPAGINANAAM', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'BAOSISPAGINANAAME', 'BASISPAGINANAAME', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'OVERLEGPAGINANAAM', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'OVERLEGPAGINANAAME', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'ONDERWARPPAGINANAAM', 'ARTIKELPAGINANAAM', 'ONDERWERPPAGINANAAM', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'          => array( '1', 'ONDERWARPPAGINANAAME', 'ARTIKELPAGINANAAME', 'ONDERWERPPAGINANAAME', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+       'msg'                       => array( '0', 'BERICHT:', 'MSG:' ),
+       'subst'                     => array( '0', 'VERVANG:', 'VERV:', 'SUBST:' ),
+       'msgnw'                     => array( '0', 'BERICHTNW', 'MSGNW:' ),
+       'img_thumbnail'             => array( '1', 'miniatuur', 'duumnegel', 'doemnaegel', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'miniatuur=$1', 'duumnegel=$1', 'doemnaegel=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'rechts', 'right' ),
+       'img_left'                  => array( '1', 'links', 'left' ),
+       'img_none'                  => array( '1', 'gien', 'geen', 'none' ),
+       'img_center'                => array( '1', 'esentreerd', 'gecentreerd', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'umraand', 'omkaderd', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'kaoderloos', 'kaderloos', 'frameless' ),
+       'img_page'                  => array( '1', 'pagina=$1', 'pagina_$1', 'pagina $1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', 'rechtop', 'rechtop=$1', 'rechtop$1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_border'                => array( '1', 'raand', 'rand', 'border' ),
+       'img_baseline'              => array( '1', 'grondliende', 'grondlijn', 'baseline' ),
+       'img_top'                   => array( '1', 'boven', 'top' ),
+       'img_text_top'              => array( '1', 'tekste-boven', 'tekst-boven', 'text-top' ),
+       'img_middle'                => array( '1', 'midden', 'middle' ),
+       'img_bottom'                => array( '1', 'benejen', 'beneden', 'bottom' ),
+       'img_text_bottom'           => array( '1', 'tekste-benejen', 'tekst-beneden', 'text-bottom' ),
+       'img_link'                  => array( '1', 'verwiezing=$', 'verwijzing=$1', 'link=$1' ),
+       'sitename'                  => array( '1', 'WEBSTEENAAM', 'SITENAAM', 'SITENAME' ),
+       'ns'                        => array( '0', 'NR:', 'NS:' ),
+       'localurl'                  => array( '0', 'LOKALEURL', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'LOKALEURLE', 'LOCALURLE:' ),
+       'servername'                => array( '0', 'SERVERNAAM', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'SKRIPTPAD', 'SCRIPTPAD', 'SCRIPTPATH' ),
+       'stylepath'                 => array( '0', 'STIELPAD', 'STIJLPAD', 'STYLEPATH' ),
+       'grammar'                   => array( '0', 'GRAMMATIKA:', 'GRAMMATICA:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'GESLACHTE:', 'GESLACHT:', 'GENDER:' ),
+       'notitleconvert'            => array( '0', '__GIENTITELKONVERSIE__', '__GIENTC__', '__GEENTITELCONVERSIE__', '__GEENTC__', '__GEENPAGINANAAMCONVERSIE__', '__NOTITLECONVERT__', '__NOTC__' ),
+       'nocontentconvert'          => array( '0', '__GIENINHOUDKONVERSIE__', '__GIENIC__', '__GEENINHOUDCONVERSIE__', '__GEENIC__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+       'currentweek'               => array( '1', 'DISSEWEKE', 'HUIDIGEWEEK', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'DISSEDVDW', 'HUIDIGEDVDW', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'LOKALEWEKE', 'PLAATSELIJKEWEEK', 'LOKALEWEEK', 'LOCALWEEK' ),
+       'localdow'                  => array( '1', 'LOKALEDVDW', 'PLAATSELIJKEDVDW', 'LOCALDOW' ),
+       'revisionid'                => array( '1', 'REVISIEID', 'REVISIE-ID', 'VERSIEID', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'REVISIEDAG', 'VERSIEDAG', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'REVISIEDAG2', 'VERSIEDAG2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'REVISIEMAOND', 'VERSIEMAAND', 'REVISIONMONTH' ),
+       'revisionyear'              => array( '1', 'REVISIEJAOR', 'VERSIEJAAR', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'REVISIETIEDSTEMPEL', 'VERSIETIJD', 'REVISIONTIMESTAMP' ),
+       'revisionuser'              => array( '1', 'VERSIEGEBRUKER', 'VERSIEGEBRUIKER', 'REVISIONUSER' ),
+       'plural'                    => array( '0', 'MEERVOUD:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'HELEURL', 'VOLLEDIGEURL', 'VOLLEDIGEURL:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'HELEURLE', 'VOLLEDIGEURLE', 'VOLLEDIGEURLE:', 'FULLURLE:' ),
+       'lcfirst'                   => array( '0', 'KLEERSTE:', 'LCFIRST:' ),
+       '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', 'WEERGEGEVENTITEL', 'DISPLAYTITLE' ),
+       'newsectionlink'            => array( '1', '__NIEJESECTIEVERWIEZING__', '__NIEUWESECTIELINK__', '__NIEUWESECTIEKOPPELING__', '__NEWSECTIONLINK__' ),
+       'nonewsectionlink'          => array( '1', '__GIENNIEJKOPJENVERWIEZING__', '__GEENNIEUWKOPJEVERWIJZING__', '__GEENNIEUWESECTIELINK__', '__NONEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'DISSEVERSIE', 'HUIDIGEVERSIE', 'CURRENTVERSION' ),
+       'urlencode'                 => array( '0', 'URLKODEREN', 'URLCODEREN', 'CODEERURL', 'URLENCODE:' ),
+       'anchorencode'              => array( '0', 'ANKERKODEREN', 'ANKERCODEREN', 'CODEERANKER', 'ANCHORENCODE' ),
+       'currenttimestamp'          => array( '1', 'DISSETIEDSTEMPEL', 'HUIDIGETIJDSTEMPEL', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', 'LOKALETIEDSTEMPEL', 'PLAATSELIJKETIJDSTEMPEL', 'LOKALETIJDSTEMPEL', 'LOCALTIMESTAMP' ),
+       'directionmark'             => array( '1', 'RICHTINGMARKERING', 'RICHTINGSMARKERING', 'DIRECTIONMARK', 'DIRMARK' ),
+       'language'                  => array( '0', '#TAAL:', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'INHOUDSTAAL', 'INHOUDTAAL', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', 'PAGINASINNAAMRUUMTE', 'PAGINA’SINNAAMRUUMTE', 'PAGINA\'SINNAAMRUUMTE', 'PAGINASINNAAMRUIMTE', 'PAGINA’SINNAAMRUIMTE', 'PAGINA\'SINNAAMRUIMTE', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', 'ANTALBEHEERDERS', 'AANTALBEHEERDERS', 'AANTALADMINS', 'NUMBEROFADMINS' ),
+       'formatnum'                 => array( '0', 'FORMATTEERNUM', 'NUMFORMATTEREN', 'FORMATNUM' ),
+       'padleft'                   => array( '0', 'LINKSOPVULLEN', 'PADLEFT' ),
+       'padright'                  => array( '0', 'RECHTSOPVULLEN', 'PADRIGHT' ),
+       'special'                   => array( '0', 'spesiaal', 'speciaal', 'special' ),
+       'defaultsort'               => array( '1', 'STANDARDSORTERING:', 'STANDAARDSORTERING:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'filepath'                  => array( '0', 'BESTAANDSPAD:', 'BESTANDSPAD:', 'FILEPATH:' ),
+       'tag'                       => array( '0', 'etiket', 'label', 'tag' ),
+       'hiddencat'                 => array( '1', '__VERBÖRGENKAT__', '__VERBORGENCAT__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'PAGINASINKATEGORIE', 'PAGINASINKAT', 'PAGINASINCATEGORIE', 'PAGINASINCAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'PAGINAGROOTTE', 'PAGESIZE' ),
+       'noindex'                   => array( '1', '__GIENINDEX__', '__GEENINDEX__', '__NOINDEX__' ),
+       'numberingroup'             => array( '1', 'ANTALINGROEP', 'AANTALINGROEP', 'NUMBERINGROUP', 'NUMINGROUP' ),
+       'staticredirect'            => array( '1', '__STAOTIESEDEURVERWIEZING__', '__STATISCHEDOORVERWIJZING__', '__STATISCHEREDIRECT__', '__STATICREDIRECT__' ),
+       'protectionlevel'           => array( '1', 'BEVEILIGINGSNIVO', 'BEVEILIGINGSNIVEAU', 'PROTECTIONLEVEL' ),
+       'formatdate'                => array( '0', 'daotumopmaak', 'datumopmaak', 'formatdate', 'dateformat' ),
+       'url_query'                 => array( '0', 'ZEUKOPDRACHTE', 'ZOEKOPDRACHT', 'QUERY' ),
 );
 
 $specialPageAliases = array(
index dff5001..b30c2fb 100644 (file)
@@ -95,151 +95,153 @@ $bookstoreList = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#DOORVERWIJZING', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__GEENINHOUD__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__GEEN_GALERIJ__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__INHOUD_DWINGEN__', '__FORCEERINHOUD__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__INHOUD__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__NIETBEWERKBARESECTIE__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '__GEENKOP__', '__NOHEADER__' ),
-       'currentmonth'            => array( '1', 'HUIDIGEMAAND', 'HUIDIGEMAAND2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', 'HUIDIGEMAAND1', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', 'HUIDIGEMAANDNAAM', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'HUIDIGEMAANDGEN', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'HUIDIGEMAANDAFK', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'HUIDIGEDAG', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'HUIDIGEDAG2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'HUIDIGEDAGNAAM', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'HUIDIGJAAR', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'HUIDIGETIJD', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'HUIDIGUUR', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'PLAATSELIJKEMAAND', 'LOKALEMAAND', 'LOKALEMAAND2', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', 'LOKALEMAAND1', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'PLAATSELIJKEMAANDNAAM', 'LOKALEMAANDNAAM', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'PLAATSELIJKEMAANDNAAMGEN', 'LOKALEMAANDNAAMGEN', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'PLAATSELIJKEMAANDAFK', 'LOKALEMAANDAFK', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'PLAATSELIJKEDAG', 'LOKALEDAG', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'PLAATSELIJKEDAG2', 'LOKALEDAG2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'PLAATSELIJKEDAGNAAM', 'LOKALEDAGNAAM', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'PLAATSELIJKJAAR', 'LOKAALJAAR', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'PLAATSELIJKETIJD', 'LOKALETIJD', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'PLAATSELIJKUUR', 'LOKAALUUR', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'AANTALPAGINAS', 'AANTALPAGINA\'S', 'AANTALPAGINA’S', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'AANTALARTIKELEN', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'AANTALBESTANDEN', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'AANTALGEBRUIKERS', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'AANTALACTIEVEGEBRUIKERS', 'ACTIEVEGEBRUIKERS', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'AANTALBEWERKINGEN', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'AANTALKERENBEKEKEN', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'PAGINANAAM', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'PAGINANAAME', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'NAAMRUIMTE', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'NAAMRUIMTEE', 'NAMESPACEE' ),
-       'namespacenumber'         => array( '1', 'NAAMRUIMTENUMMER', 'NAMESPACENUMBER' ),
-       'talkspace'               => array( '1', 'OVERLEGRUIMTE', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'OVERLEGRUIMTEE', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'ONDERWERPRUIMTE', 'ARTIKELRUIMTE', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'ONDERWERPRUIMTEE', 'ARTIKELRUIMTEE', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'VOLLEDIGEPAGINANAAM', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'VOLLEDIGEPAGINANAAME', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'DEELPAGINANAAM', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'DEELPAGINANAAME', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'BASISPAGINANAAM', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'BASISPAGINANAAME', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'OVERLEGPAGINANAAM', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'OVERLEGPAGINANAAME', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'ONDERWERPPAGINANAAM', 'ARTIKELPAGINANAAM', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       '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' ),
-       'img_right'               => array( '1', 'rechts', 'right' ),
-       'img_left'                => array( '1', 'links', 'left' ),
-       'img_none'                => array( '1', 'geen', 'none' ),
-       'img_center'              => array( '1', 'gecentreerd', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'omkaderd', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', 'kaderloos', 'frameless' ),
-       'img_page'                => array( '1', 'pagina=$1', 'pagina $1', 'page=$1', 'page $1' ),
-       'img_upright'             => array( '1', 'rechtop', 'rechtop=$1', 'rechtop$1', 'upright', 'upright=$1', 'upright $1' ),
-       'img_border'              => array( '1', 'rand', 'border' ),
-       'img_baseline'            => array( '1', 'grondlijn', 'baseline' ),
-       'img_top'                 => array( '1', 'boven', 'top' ),
-       'img_text_top'            => array( '1', 'tekst-boven', 'text-top' ),
-       'img_middle'              => array( '1', 'midden', 'middle' ),
-       'img_bottom'              => array( '1', 'beneden', 'bottom' ),
-       'img_text_bottom'         => array( '1', 'tekst-beneden', 'text-bottom' ),
-       'img_link'                => array( '1', 'verwijzing=$1', 'link=$1' ),
-       'sitename'                => array( '1', 'SITENAAM', 'SITENAME' ),
-       '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' ),
-       'grammar'                 => array( '0', 'GRAMMATICA:', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'GESLACHT:', 'GENDER:' ),
-       'notitleconvert'          => array( '0', '__GEENPAGINANAAMCONVERSIE__', '__GEENTITELCONVERSIE__', '__GEENTC__', '__NOTITLECONVERT__', '__NOTC__' ),
-       'nocontentconvert'        => array( '0', '__GEENINHOUDCONVERSIE__', '__GEENIC__', '__NOCONTENTCONVERT__', '__NOCC__' ),
-       'currentweek'             => array( '1', 'HUIDIGEWEEK', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'HUIDIGEDVDW', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'PLAATSELIJKEWEEK', 'LOKALEWEEK', 'LOCALWEEK' ),
-       'localdow'                => array( '1', 'PLAATSELIJKEDVDW', 'LOKALEDVDW', 'LOCALDOW' ),
-       'revisionid'              => array( '1', 'VERSIEID', 'REVISIONID' ),
-       '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' ),
-       'plural'                  => array( '0', 'MEERVOUD:', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'VOLLEDIGEURL:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'VOLLEDIGEURLE:', 'FULLURLE:' ),
-       'canonicalurl'            => array( '0', 'CANOIEKEURL:', 'CANONICALURL:' ),
-       'canonicalurle'           => array( '0', 'CANONIEKEURLE:', 'CANONICALURLE:' ),
-       'lcfirst'                 => array( '0', 'KLEERSTE:', 'LCFIRST:' ),
-       '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', 'WEERGEGEVENTITEL', 'TOONTITEL', 'DISPLAYTITLE' ),
-       'rawsuffix'               => array( '1', 'V', 'R' ),
-       'newsectionlink'          => array( '1', '__NIEUWESECTIELINK__', '__NIEUWESECTIEKOPPELING__', '__NEWSECTIONLINK__' ),
-       'nonewsectionlink'        => array( '1', '__GEENNIEUWESECTIELINK__', '__GEENNIEUWKOPJEVERWIJZING__', '__NONEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', 'HUIDIGEVERSIE', 'CURRENTVERSION' ),
-       'urlencode'               => array( '0', 'URLCODEREN', 'CODEERURL', 'URLENCODE:' ),
-       'anchorencode'            => array( '0', 'ANKERCODEREN', 'CODEERANKER', 'ANCHORENCODE' ),
-       'currenttimestamp'        => array( '1', 'HUIDIGETIJDSTEMPEL', 'CURRENTTIMESTAMP' ),
-       'localtimestamp'          => array( '1', 'PLAATSELIJKETIJDSTEMPEL', 'LOKALETIJDSTEMPEL', 'LOCALTIMESTAMP' ),
-       'directionmark'           => array( '1', 'RICHTINGMARKERING', 'RICHTINGSMARKERING', 'DIRECTIONMARK', 'DIRMARK' ),
-       'language'                => array( '0', '#TAAL:', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', 'INHOUDSTAAL', 'INHOUDTAAL', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'        => array( '1', 'PAGINASINNAAMRUIMTE', 'PAGINA’SINNAAMRUIMTE', 'PAGINA\'SINNAAMRUIMTE', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'          => array( '1', 'AANTALBEHEERDERS', 'AANTALADMINS', 'NUMBEROFADMINS' ),
-       'formatnum'               => array( '0', 'FORMATTEERNUM', 'NUMFORMATTEREN', 'FORMATNUM' ),
-       'padleft'                 => array( '0', 'LINKSOPVULLEN', 'PADLEFT' ),
-       'padright'                => array( '0', 'RECHTSOPVULLEN', 'PADRIGHT' ),
-       'special'                 => array( '0', 'speciaal', 'special' ),
-       'speciale'                => array( '0', 'speciaale', 'speciale' ),
-       'defaultsort'             => array( '1', 'STANDAARDSORTERING:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'filepath'                => array( '0', 'BESTANDSPAD:', 'FILEPATH:' ),
-       'tag'                     => array( '0', 'label', 'tag' ),
-       'hiddencat'               => array( '1', '__VERBORGENCAT__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'PAGINASINCATEGORIE', 'PAGINASINCAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'PAGINAGROOTTE', 'PAGESIZE' ),
-       'noindex'                 => array( '1', '__GEENINDEX__', '__NOINDEX__' ),
-       'numberingroup'           => array( '1', 'AANTALINGROEP', 'NUMBERINGROUP', 'NUMINGROUP' ),
-       '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' ),
-       'defaultsort_noerror'     => array( '0', 'geenfout', 'noerror' ),
-       'defaultsort_noreplace'   => array( '0', 'nietvervangen', 'noreplace' ),
+       'redirect'                  => array( '0', '#DOORVERWIJZING', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__GEENINHOUD__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__GEEN_GALERIJ__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__INHOUD_DWINGEN__', '__FORCEERINHOUD__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__INHOUD__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__NIETBEWERKBARESECTIE__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '__GEENKOP__', '__NOHEADER__' ),
+       'currentmonth'              => array( '1', 'HUIDIGEMAAND', 'HUIDIGEMAAND2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'HUIDIGEMAAND1', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'HUIDIGEMAANDNAAM', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'HUIDIGEMAANDGEN', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'HUIDIGEMAANDAFK', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'HUIDIGEDAG', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'HUIDIGEDAG2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'HUIDIGEDAGNAAM', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'HUIDIGJAAR', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'HUIDIGETIJD', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'HUIDIGUUR', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'PLAATSELIJKEMAAND', 'LOKALEMAAND', 'LOKALEMAAND2', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'LOKALEMAAND1', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'PLAATSELIJKEMAANDNAAM', 'LOKALEMAANDNAAM', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'PLAATSELIJKEMAANDNAAMGEN', 'LOKALEMAANDNAAMGEN', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'PLAATSELIJKEMAANDAFK', 'LOKALEMAANDAFK', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'PLAATSELIJKEDAG', 'LOKALEDAG', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'PLAATSELIJKEDAG2', 'LOKALEDAG2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'PLAATSELIJKEDAGNAAM', 'LOKALEDAGNAAM', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'PLAATSELIJKJAAR', 'LOKAALJAAR', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'PLAATSELIJKETIJD', 'LOKALETIJD', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'PLAATSELIJKUUR', 'LOKAALUUR', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'AANTALPAGINAS', 'AANTALPAGINA\'S', 'AANTALPAGINA’S', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'AANTALARTIKELEN', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'AANTALBESTANDEN', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'AANTALGEBRUIKERS', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'AANTALACTIEVEGEBRUIKERS', 'ACTIEVEGEBRUIKERS', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'AANTALBEWERKINGEN', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'AANTALKERENBEKEKEN', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'PAGINANAAM', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'PAGINANAAME', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'NAAMRUIMTE', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'NAAMRUIMTEE', 'NAMESPACEE' ),
+       'namespacenumber'           => array( '1', 'NAAMRUIMTENUMMER', 'NAMESPACENUMBER' ),
+       'talkspace'                 => array( '1', 'OVERLEGRUIMTE', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'OVERLEGRUIMTEE', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'ONDERWERPRUIMTE', 'ARTIKELRUIMTE', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'ONDERWERPRUIMTEE', 'ARTIKELRUIMTEE', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'VOLLEDIGEPAGINANAAM', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'VOLLEDIGEPAGINANAAME', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'DEELPAGINANAAM', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'DEELPAGINANAAME', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'BASISPAGINANAAM', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'BASISPAGINANAAME', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'OVERLEGPAGINANAAM', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'OVERLEGPAGINANAAME', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'ONDERWERPPAGINANAAM', 'ARTIKELPAGINANAAM', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       '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' ),
+       'img_right'                 => array( '1', 'rechts', 'right' ),
+       'img_left'                  => array( '1', 'links', 'left' ),
+       'img_none'                  => array( '1', 'geen', 'none' ),
+       'img_center'                => array( '1', 'gecentreerd', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'omkaderd', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'kaderloos', 'frameless' ),
+       'img_page'                  => array( '1', 'pagina=$1', 'pagina $1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', 'rechtop', 'rechtop=$1', 'rechtop$1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_border'                => array( '1', 'rand', 'border' ),
+       'img_baseline'              => array( '1', 'grondlijn', 'baseline' ),
+       'img_top'                   => array( '1', 'boven', 'top' ),
+       'img_text_top'              => array( '1', 'tekst-boven', 'text-top' ),
+       'img_middle'                => array( '1', 'midden', 'middle' ),
+       'img_bottom'                => array( '1', 'beneden', 'bottom' ),
+       'img_text_bottom'           => array( '1', 'tekst-beneden', 'text-bottom' ),
+       'img_link'                  => array( '1', 'verwijzing=$1', 'link=$1' ),
+       'sitename'                  => array( '1', 'SITENAAM', 'SITENAME' ),
+       'ns'                        => array( '0', 'NR:', 'NS:' ),
+       'nse'                       => array( '0', 'NRE:', 'NSE:' ),
+       'localurl'                  => array( '0', 'LOKALEURL', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'LOKALEURLE', 'LOCALURLE:' ),
+       'articlepath'               => array( '0', 'ARTIKELPAD', 'ARTICLEPATH' ),
+       'pageid'                    => array( '0', 'PAGINAID', 'PAGEID' ),
+       'servername'                => array( '0', 'SERVERNAAM', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'SCRIPTPAD', 'SCRIPTPATH' ),
+       'stylepath'                 => array( '0', 'STIJLPAD', 'STYLEPATH' ),
+       'grammar'                   => array( '0', 'GRAMMATICA:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'GESLACHT:', 'GENDER:' ),
+       'notitleconvert'            => array( '0', '__GEENPAGINANAAMCONVERSIE__', '__GEENTITELCONVERSIE__', '__GEENTC__', '__NOTITLECONVERT__', '__NOTC__' ),
+       'nocontentconvert'          => array( '0', '__GEENINHOUDCONVERSIE__', '__GEENIC__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+       'currentweek'               => array( '1', 'HUIDIGEWEEK', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'HUIDIGEDVDW', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'PLAATSELIJKEWEEK', 'LOKALEWEEK', 'LOCALWEEK' ),
+       'localdow'                  => array( '1', 'PLAATSELIJKEDVDW', 'LOKALEDVDW', 'LOCALDOW' ),
+       'revisionid'                => array( '1', 'VERSIEID', 'REVISIONID' ),
+       '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' ),
+       'plural'                    => array( '0', 'MEERVOUD:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'VOLLEDIGEURL:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'VOLLEDIGEURLE:', 'FULLURLE:' ),
+       'canonicalurl'              => array( '0', 'CANOIEKEURL:', 'CANONICALURL:' ),
+       'canonicalurle'             => array( '0', 'CANONIEKEURLE:', 'CANONICALURLE:' ),
+       'lcfirst'                   => array( '0', 'KLEERSTE:', 'LCFIRST:' ),
+       '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', 'WEERGEGEVENTITEL', 'TOONTITEL', 'DISPLAYTITLE' ),
+       'rawsuffix'                 => array( '1', 'V', 'R' ),
+       'newsectionlink'            => array( '1', '__NIEUWESECTIELINK__', '__NIEUWESECTIEKOPPELING__', '__NEWSECTIONLINK__' ),
+       'nonewsectionlink'          => array( '1', '__GEENNIEUWESECTIELINK__', '__GEENNIEUWKOPJEVERWIJZING__', '__NONEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'HUIDIGEVERSIE', 'CURRENTVERSION' ),
+       'urlencode'                 => array( '0', 'URLCODEREN', 'CODEERURL', 'URLENCODE:' ),
+       'anchorencode'              => array( '0', 'ANKERCODEREN', 'CODEERANKER', 'ANCHORENCODE' ),
+       'currenttimestamp'          => array( '1', 'HUIDIGETIJDSTEMPEL', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', 'PLAATSELIJKETIJDSTEMPEL', 'LOKALETIJDSTEMPEL', 'LOCALTIMESTAMP' ),
+       'directionmark'             => array( '1', 'RICHTINGMARKERING', 'RICHTINGSMARKERING', 'DIRECTIONMARK', 'DIRMARK' ),
+       'language'                  => array( '0', '#TAAL:', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'INHOUDSTAAL', 'INHOUDTAAL', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', 'PAGINASINNAAMRUIMTE', 'PAGINA’SINNAAMRUIMTE', 'PAGINA\'SINNAAMRUIMTE', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', 'AANTALBEHEERDERS', 'AANTALADMINS', 'NUMBEROFADMINS' ),
+       'formatnum'                 => array( '0', 'FORMATTEERNUM', 'NUMFORMATTEREN', 'FORMATNUM' ),
+       'padleft'                   => array( '0', 'LINKSOPVULLEN', 'PADLEFT' ),
+       'padright'                  => array( '0', 'RECHTSOPVULLEN', 'PADRIGHT' ),
+       'special'                   => array( '0', 'speciaal', 'special' ),
+       'speciale'                  => array( '0', 'speciaale', 'speciale' ),
+       'defaultsort'               => array( '1', 'STANDAARDSORTERING:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'filepath'                  => array( '0', 'BESTANDSPAD:', 'FILEPATH:' ),
+       'tag'                       => array( '0', 'label', 'tag' ),
+       'hiddencat'                 => array( '1', '__VERBORGENCAT__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'PAGINASINCATEGORIE', 'PAGINASINCAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'PAGINAGROOTTE', 'PAGESIZE' ),
+       'noindex'                   => array( '1', '__GEENINDEX__', '__NOINDEX__' ),
+       'numberingroup'             => array( '1', 'AANTALINGROEP', 'NUMBERINGROUP', 'NUMINGROUP' ),
+       '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' ),
+       'defaultsort_noerror'       => array( '0', 'geenfout', 'noerror' ),
+       'defaultsort_noreplace'     => array( '0', 'nietvervangen', 'noreplace' ),
 );
 
 $specialPageAliases = array(
@@ -288,6 +290,7 @@ $specialPageAliases = array(
        'MIMEsearch'                => array( 'MIMEzoeken', 'MIME-zoeken' ),
        'Mostcategories'            => array( 'MeesteCategorieën' ),
        'Mostimages'                => array( 'MeesteVerwezenBestanden', 'MeesteBestanden', 'MeesteAfbeeldingen' ),
+       'Mostinterwikis'            => array( 'MeesteInterwikiverwijzingen' ),
        'Mostlinked'                => array( 'MeestVerwezenPaginas', 'MeestVerwezenPagina\'s', 'MeestVerwezen' ),
        'Mostlinkedcategories'      => array( 'MeestVerwezenCategorieën' ),
        'Mostlinkedtemplates'       => array( 'MeestVerwezenSjablonen' ),
@@ -2085,6 +2088,7 @@ U kunt de beschrijving bewerken op de [$2 pagina met de bestandsbeschrijving].',
 '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) * /",
+'upload-disallowed-here' => 'U kunt deze afbeelding helaas niet overschrijven.',
 
 # File reversion
 'filerevert' => '$1 terugdraaien',
@@ -2795,7 +2799,7 @@ Zie de [[Special:BlockList|blokkadelijst]] voor recente blokkades.',
 'ipblocklist-empty' => 'De blokkeerlijst is leeg.',
 'ipblocklist-no-results' => 'Dit IP-adres of deze gebruikersnaam is niet geblokkeerd.',
 'blocklink' => 'blokkeren',
-'unblocklink' => 'deblokkeren',
+'unblocklink' => 'blokkade opheffen',
 'change-blocklink' => 'blokkade wijzigen',
 'contribslink' => 'bijdragen',
 'emaillink' => 'e-mail verzenden',
@@ -3227,6 +3231,8 @@ Meestal wordt dit door een externe verwijzing op een zwarte lijst veroorzaakt.',
 'pageinfo-length' => 'Paginalengte (in bytes)',
 'pageinfo-article-id' => 'Paginanummer',
 'pageinfo-robot-policy' => 'Status voor de zoekmachine',
+'pageinfo-robot-index' => 'Indexeerbaar',
+'pageinfo-robot-noindex' => 'Niet indexeerbaar',
 'pageinfo-views' => 'Aantal weergaven',
 'pageinfo-watchers' => 'Aantal paginavolgers',
 'pageinfo-redirects-name' => 'Doorverwijzingen naar deze pagina',
@@ -3240,7 +3246,7 @@ Meestal wordt dit door een externe verwijzing op een zwarte lijst veroorzaakt.',
 'pageinfo-authors' => 'Totaal aantal verschillende auteurs',
 'pageinfo-recent-edits' => 'Recent aantal bewerkingen (binnen de afgelopen $1).',
 'pageinfo-recent-authors' => 'Recent aantal verschillende auteurs',
-'pageinfo-restriction' => 'Paginabeveiliging (<code>$1</code>)',
+'pageinfo-restriction' => 'Paginabeveiliging (<code>{{lcfirst:$1}}</code>)',
 'pageinfo-magic-words' => '{{PLURAL:$1|Magisch woord|Magische woorden}} ($1)',
 'pageinfo-hidden-categories' => 'Verborgen {{PLURAL:$1|categorie|categorieën}} ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|Gebruikt sjabloon|Gebruikte sjablonen}} ($1)',
@@ -3298,6 +3304,7 @@ $1',
 'file-info-size-pages' => "$1 × $2 pixels, bestandsgrootte: $3, MIME-type: $4, $5 {{PLURAL:$5|pagina|pagina's}}",
 'file-nohires' => 'Geen hogere resolutie beschikbaar.',
 'svg-long-desc' => 'SVG-bestand, nominaal $1 × $2 pixels, bestandsgrootte: $3',
+'svg-long-desc-animated' => 'Bewegend SVG-bestand, nominaal $1 × $2 pixels, bestandsgrootte: $3',
 'show-big-image' => 'Volledige resolutie',
 'show-big-image-preview' => 'Grootte van deze voorvertoning: $1.',
 'show-big-image-other' => 'Andere {{PLURAL:$2|resolutie|resoluties}}: $1.',
@@ -3307,6 +3314,8 @@ $1',
 'file-info-png-looped' => 'herhalend',
 'file-info-png-repeat' => '$1 {{PLURAL:$1|keer|keer}} afgespeeld',
 'file-info-png-frames' => '$1 {{PLURAL:$1|frame|frames}}',
+'file-no-thumb-animation' => "'''Let op: vanwege technische beperkingen, kunnen miniaturen van dit bestand niet geanimeerd worden weergegeven.''",
+'file-no-thumb-animation-gif' => "'''Let op: vanwege technische beperkingen, kunnen miniaturen van GIF-afbeeldingen met een hoge resolutie niet geanimeerd worden weergegeven.''",
 
 # Special:NewFiles
 'newimages' => 'Nieuwe bestanden',
index c079c6c..b337715 100644 (file)
@@ -99,74 +99,97 @@ $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__' ),
-       'currentmonth'            => array( '1', 'MÅNADNO', 'MÅNEDNÅ', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonthname'        => array( '1', 'MÅNADNONAMN', 'MÅNEDNÅNAVN', 'CURRENTMONTHNAME' ),
-       'currentmonthabbrev'      => array( '1', 'MÅNADNOKORT', 'MÅNEDNÅKORT', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'DAGNO', 'DAGNÅ', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'DAGNO2', 'DAGNÅ2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'DAGNONAMN', 'DAGNÅNAVN', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'ÅRNO', 'ÅRNÅ', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'TIDNO', 'TIDNÅ', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'TIMENO', 'CURRENTHOUR' ),
-       'numberofpages'           => array( '1', 'SIDETAL', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'INNHALDSSIDETAL', 'INNHOLDSSIDETALL', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'FILTAL', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'BRUKARTAL', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'AKTIVEBRUKARAR', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'ENDRINGSTAL', 'NUMBEROFEDITS' ),
-       'pagename'                => array( '1', 'SIDENAMN', 'SIDENAVN', 'PAGENAME' ),
-       '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' ),
-       'img_manualthumb'         => array( '1', 'mini=$1', 'miniatyr=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'høgre', 'høyre', 'right' ),
-       'img_left'                => array( '1', 'venstre', 'left' ),
-       'img_none'                => array( '1', 'ingen', 'none' ),
-       '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:' ),
-       'localurle'               => array( '0', 'LOKALLENKJEE:', 'LOKALLENKEE:', 'LOCALURLE:' ),
-       'server'                  => array( '0', 'TENAR', 'TJENER', 'SERVER' ),
-       'servername'              => array( '0', 'TENARNAMN', 'TJENERNAVN', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'SKRIPTSTIG', 'SKRIPTSTI', 'SCRIPTPATH' ),
-       'grammar'                 => array( '0', 'GRAMMATIKK:', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'KJØNN:', 'GENDER:' ),
-       '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' ),
-       'filepath'                => array( '0', 'FILSTIG', 'FILEPATH:' ),
-       'hiddencat'               => array( '1', '__GØYMDKAT__', '__LØYNDKAT__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'SIDERIKAT', 'SIDERIKATEGORI', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'protectionlevel'         => array( '1', 'VERNENIVÅ', 'PROTECTIONLEVEL' ),
+       '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__' ),
+       'currentmonth'              => array( '1', 'MÅNADNO', 'MÅNEDNÅ', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonthname'          => array( '1', 'MÅNADNONAMN', 'MÅNEDNÅNAVN', 'CURRENTMONTHNAME' ),
+       'currentmonthabbrev'        => array( '1', 'MÅNADNOKORT', 'MÅNEDNÅKORT', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'DAGNO', 'DAGNÅ', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'DAGNO2', 'DAGNÅ2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'DAGNONAMN', 'DAGNÅNAVN', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'ÅRNO', 'ÅRNÅ', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'TIDNO', 'TIDNÅ', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'TIMENO', 'CURRENTHOUR' ),
+       'numberofpages'             => array( '1', 'SIDETAL', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'INNHALDSSIDETAL', 'INNHOLDSSIDETALL', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'FILTAL', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'BRUKARTAL', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'AKTIVEBRUKARAR', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'ENDRINGSTAL', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'VISINGSTAL', 'TALPÅVISINGAR', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'SIDENAMN', 'SIDENAVN', 'PAGENAME' ),
+       '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' ),
+       'msg'                       => array( '0', 'MLD:', 'MSG:' ),
+       'subst'                     => array( '0', 'LIMINN:', 'SUBST:' ),
+       'safesubst'                 => array( '0', 'TRYGGLIMINN:', 'SAFESUBST:' ),
+       'msgnw'                     => array( '0', 'IKWIKMELD:', 'MSGNW:' ),
+       'img_thumbnail'             => array( '1', 'mini', 'miniatyr', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'mini=$1', 'miniatyr=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'høgre', 'høyre', 'right' ),
+       'img_left'                  => array( '1', 'venstre', 'left' ),
+       'img_none'                  => array( '1', 'ingen', 'none' ),
+       'img_width'                 => array( '1', '$1pk', '$1px' ),
+       'img_center'                => array( '1', 'sentrum', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'ramme', 'ramma', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'rammelaus', 'frameless' ),
+       'img_page'                  => array( '1', 'side=$1', 'side_$1', 'page=$1', 'page $1' ),
+       '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:' ),
+       'localurle'                 => array( '0', 'LOKALLENKJEE:', 'LOKALLENKEE:', 'LOCALURLE:' ),
+       'articlepath'               => array( '0', 'ARTIKKELSTIG', 'ARTICLEPATH' ),
+       'pageid'                    => array( '0', 'SIDEID', 'PAGEID' ),
+       'server'                    => array( '0', 'TENAR', 'TJENER', 'SERVER' ),
+       'servername'                => array( '0', 'TENARNAMN', 'TJENERNAVN', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'SKRIPTSTIG', 'SKRIPTSTI', 'SCRIPTPATH' ),
+       'grammar'                   => array( '0', 'GRAMMATIKK:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'KJØNN:', 'GENDER:' ),
+       'currentweek'               => array( '1', 'VEKENRNO', 'UKENRNÅ', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'VEKEDAGNRNO', 'UKEDAGNRNÅ', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'LOKALVEKE', 'LOCALWEEK' ),
+       '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:' ),
+       'lcfirst'                   => array( '0', 'LFYRST:', 'LFØRST:', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', 'SFYRST:', 'SFØRST:', 'UCFIRST:' ),
+       'lc'                        => array( '0', 'SMÅ:', 'LC:' ),
+       'uc'                        => array( '0', 'STORE:', 'UC:' ),
+       'displaytitle'              => array( '1', 'VISTITTEL', 'DISPLAYTITLE' ),
+       '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' ),
+       'formatnum'                 => array( '0', 'FORMATTAL', 'FORMATNUM' ),
+       'special'                   => array( '0', 'spesial', 'special' ),
+       'filepath'                  => array( '0', 'FILSTIG', 'FILEPATH:' ),
+       'tag'                       => array( '0', 'merke', 'tag' ),
+       'hiddencat'                 => array( '1', '__GØYMDKAT__', '__LØYNDKAT__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'SIDERIKAT', 'SIDERIKATEGORI', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'SIDESTORLEIK', 'PAGESIZE' ),
+       'protectionlevel'           => array( '1', 'VERNENIVÅ', 'PROTECTIONLEVEL' ),
+       'formatdate'                => array( '0', 'datoformat', 'formatdate', 'dateformat' ),
+       'url_path'                  => array( '0', 'STIG', 'PATH' ),
+       'pagesincategory_all'       => array( '0', 'alle', 'all' ),
+       'pagesincategory_pages'     => array( '0', 'sider', 'pages' ),
+       'pagesincategory_subcats'   => array( '0', 'underkategoriar', 'subcats' ),
+       'pagesincategory_files'     => array( '0', 'filer', 'files' ),
 );
 
 $namespaceNames = array(
@@ -839,7 +862,7 @@ Mellombels passord: $2',
 'summary' => 'Samandrag:',
 'subject' => 'Emne/overskrift:',
 'minoredit' => 'Småplukk',
-'watchthis' => 'Overvak denne sida',
+'watchthis' => 'Overvak sida',
 'savearticle' => 'Lagre',
 'preview' => 'Førehandsvising',
 'showpreview' => 'Førehandsvis',
@@ -1477,7 +1500,7 @@ Dette kan ikkje tilbakestillast.',
 '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å<!-- og redigera beskyttete sider-->',
+'right-protect' => 'Endra vernenivå og verna sider',
 'right-editprotected' => 'Endre verna sider',
 'right-editinterface' => 'Redigere brukargrensesnittet',
 'right-editusercssjs' => 'Endre andre brukarar sine CSS- og JS-filer',
@@ -1525,13 +1548,13 @@ Dette kan ikkje tilbakestillast.',
 'action-writeapi' => 'bruke skrive-API',
 'action-delete' => 'slette denne sida',
 'action-deleterevision' => 'slette denne endringa',
-'action-deletedhistory' => 'sjå slettehistorikken til denne sida',
+'action-deletedhistory' => 'sjå slettehistorikken til sida',
 'action-browsearchive' => 'søke i sletta sider',
 'action-undelete' => 'attopprette denne sida',
 'action-suppressrevision' => 'sjå og attopprette denne skjulte endringa',
 'action-suppressionlog' => 'sjå denne private loggen',
 'action-block' => 'blokkere denne brukaren frå å gjere endringar',
-'action-protect' => 'endre vernenivået til denne sida',
+'action-protect' => 'endre vernenivået til sida',
 'action-import' => 'importere denne sida frå ein annan wiki',
 'action-importupload' => 'importere denne sida frå ei opplasta fil',
 'action-patrol' => 'merke andre endringar av andre brukar som patruljert',
@@ -2126,7 +2149,7 @@ Om du seinare vil fjerne sida frå overvakingslista, klikk på «Fjern overvakin
 'removewatch' => 'Fjerna frå overvakingslista',
 'removedwatchtext' => 'Sida «[[:$1]]» er fjerna frå [[Special:Watchlist|overvakingslista di]].',
 'watch' => 'Overvak',
-'watchthispage' => 'Overvak denne sida',
+'watchthispage' => 'Overvak sida',
 'unwatch' => 'Fjern overvaking',
 'unwatchthispage' => 'Fjern overvaking',
 'notanarticle' => 'Ikkje innhaldsside',
@@ -2568,7 +2591,7 @@ I desse falla lyt du flytte eller flette saman sida manuelt.",
 'cant-move-user-page' => 'Du har ikkje løyve til å flytte brukarsider (bortsett frå undersider).',
 'cant-move-to-user-page' => 'Du har ikkje løyve til å flytte brukarsider (bortsett frå undersider).',
 'newtitle' => 'Til ny tittel:',
-'move-watch' => 'Overvak denne sida',
+'move-watch' => 'Overvak sida',
 'movepagebtn' => 'Flytt side',
 'pagemovedsub' => 'Flyttinga er gjennomførd',
 'movepage-moved' => "'''«$1» er flytt til «$2»'''",
@@ -2593,9 +2616,9 @@ I desse falla lyt du flytte eller flette saman sida manuelt.",
 'movereason' => 'Årsak:',
 'revertmove' => 'flytt attende',
 'delete_and_move' => 'Slett og flytt',
-'delete_and_move_text' => '== Sletting påkrevd ==
+'delete_and_move_text' => '== Sletting påkravd ==
 
-Målsida «[[:$1]]» finst allereie. Vil du slette ho for å gje rom for flytting?',
+Målsida «[[:$1]]» finst alt. Vil du sletta henne for å gjeva rom for flytting?',
 'delete_and_move_confirm' => 'Ja, slett sida',
 'delete_and_move_reason' => 'Sletta for å gje rom for flytting frå «[[$1]]»',
 'selfmove' => 'Kjelde- og måltitlane er like; kan ikkje flytte sida over seg sjølv.',
@@ -2730,14 +2753,14 @@ Vitja [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] og [//trans
 'tooltip-ca-edit' => 'Du kan endre denne sida. Bruk førehandsvisings-knappen før du lagrar.',
 'tooltip-ca-addsection' => 'Start ein ny bolk',
 'tooltip-ca-viewsource' => 'Denne sida er verna, men du kan sjå kjeldeteksten.',
-'tooltip-ca-history' => 'Eldre versjonar av denne sida',
+'tooltip-ca-history' => 'Eldre versjonar av sida',
 'tooltip-ca-protect' => 'Vern denne sida',
 'tooltip-ca-unprotect' => 'Endra vernet av sida',
 'tooltip-ca-delete' => 'Slett denne sida',
 'tooltip-ca-undelete' => 'Attopprett denne sida',
 'tooltip-ca-move' => 'Flytt denne sida',
-'tooltip-ca-watch' => 'Legg denne sida til i overvakingslista di',
-'tooltip-ca-unwatch' => 'Fjern denne sida frå overvakingslista di',
+'tooltip-ca-watch' => 'Legg til sida i overvakingslista di',
+'tooltip-ca-unwatch' => 'Fjern sida frå overvakingslista di',
 'tooltip-search' => 'Søk gjennom {{SITENAME}}',
 'tooltip-search-go' => 'Gå til ei side med dette namnet om ho finst',
 'tooltip-search-fulltext' => 'Søk etter sider som inneheld denne teksten',
@@ -2774,7 +2797,7 @@ Vitja [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] og [//trans
 'tooltip-preview' => 'Førehandsvis endringane dine, bruk denne funksjonen før du lagrar!',
 'tooltip-diff' => 'Vis skilnaden mellom din versjon og lagra versjon, utan å lagre.',
 'tooltip-compareselectedversions' => 'Sjå endringane mellom dei valde versjonane av denne sida.',
-'tooltip-watch' => 'Legg denne sida til i overvakingslista di [alt-w]',
+'tooltip-watch' => 'Legg sida til i overvakingslista di [alt-w]',
 'tooltip-watchlistedit-raw-submit' => 'Oppdater overvakingslista',
 'tooltip-recreate' => 'Ved å trykkje på «Nyopprett» vert sida oppretta på nytt.',
 'tooltip-upload' => 'Start opplastinga',
index 94b5b1f..848131a 100644 (file)
@@ -32,14 +32,14 @@ $namespaceNames = array(
 );
 
 $magicWords = array(
-       'currentmonth'            => array( '1', 'KGWEDI_BJALE', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonthname'        => array( '1', 'LEINA_KGWEDI_BJALE', 'CURRENTMONTHNAME' ),
-       'currentday'              => array( '1', 'LEHONO_LETSATSI', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'LEHONO_LETSATSI2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'LEHONO_LETSATSILEINA', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'NGWAGA_BJALE', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'NAKO_BJALE', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'IRI_BJALE', 'CURRENTHOUR' ),
+       'currentmonth'              => array( '1', 'KGWEDI_BJALE', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonthname'          => array( '1', 'LEINA_KGWEDI_BJALE', 'CURRENTMONTHNAME' ),
+       'currentday'                => array( '1', 'LEHONO_LETSATSI', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'LEHONO_LETSATSI2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'LEHONO_LETSATSILEINA', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'NGWAGA_BJALE', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'NAKO_BJALE', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'IRI_BJALE', 'CURRENTHOUR' ),
 );
 
 $messages = array(
index 845395a..6b4a774 100644 (file)
@@ -146,130 +146,130 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#REDIRECCION', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__CAPDETAULA__', '__PASCAPDESOMARI__', '__PASCAPDETDM__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__CAPDEGALARIÁ__', '__CAPDEGALARIA__', '__PASCAPDEDEGALARIÁ__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__FORÇARTAULA__', '__FORÇARSOMARI__', '__FORÇARTDM__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__TAULA__', '__SOMARI__', '__TDM__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__SECCIONNONEDITABLA__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '__PASCAPDENTÈSTA__', '__NOHEADER__' ),
-       'currentmonth'            => array( '1', 'MESCORRENT', 'MESACTUAL', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonthname'        => array( '1', 'NOMMESCORRENT', 'NOMMESACTUAL', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'NOMGENMESCORRENT', 'NOMGENMESACTUAL', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'ABREVMESCORRENT', 'ABREVMESACTUAL', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'JORNCORRENT', 'JORNACTUAL', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'JORNCORRENT2', 'JORNACTUAL2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'NOMJORNCORRENT', 'NOMJORNACTUAL', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'ANNADACORRENTA', 'ANNADAACTUALA', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'DATACORRENTA', 'DATAACTUALA', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'ORACORRENTA', 'ORAACTUALA', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'MESLOCAL', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonthname'          => array( '1', 'NOMMESLOCAL', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'NOMGENMESLOCAL', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'ABREVMESLOCAL', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'JORNLOCAL', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'JORNLOCAL2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'NOMJORNLOCAL', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'ANNADALOCALA', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'ORARILOCAL', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'ORALOCALA', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'NOMBREPAGINAS', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'NOMBREARTICLES', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'NOMBREFICHIÈRS', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'NOMBREUTILIZAIRES', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'NOMBREUTILIZAIRESACTIUS', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'NOMBREEDICIONS', 'NOMBREMODIFS', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'NOMBREVISTAS', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'NOMPAGINA', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'NOMPAGINAX', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'ESPACINOMENATGE', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'ESPACINOMENATGEX', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'ESPACIDISCUSSION', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'ESPACIDISCUSSIONX', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'ESPACISUBJECTE', 'ESPACISUBJÈCTE', 'ESPACIARTICLE', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'ESPACISUBJECTEX', 'ESPACISUBJÈCTEX', 'ESPACIARTICLEX', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'NOMPAGINACOMPLET', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'NOMPAGINACOMPLETX', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'NOMSOSPAGINA', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'NOMSOSPAGINAX', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'NOMBASADEPAGINA', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'NOMBASADEPAGINAX', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'NOMPAGINADISCUSSION', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'NOMPAGINADISCUSSIONX', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'NOMPAGINASUBJECTE', 'NOMPAGINASUBJÈCTE', 'NOMPAGINAARTICLE', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'subjectpagenamee'        => array( '1', 'NOMPAGINASUBJECTEX', 'NOMPAGINASUBJÈCTEX', 'NOMPAGINAARTICLEX', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
-       'img_thumbnail'           => array( '1', 'vinheta', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'vinheta=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'drecha', 'dreta', 'right' ),
-       'img_left'                => array( '1', 'esquèrra', 'senèstra', 'gaucha', 'left' ),
-       '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', '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_sub'                 => array( '1', 'indici', 'ind', 'sub' ),
-       'img_super'               => array( '1', 'exp', 'super', 'sup' ),
-       'img_top'                 => array( '1', 'naut', 'top' ),
-       'img_text_top'            => array( '1', 'naut-tèxte', 'naut-txt', 'text-top' ),
-       'img_middle'              => array( '1', 'mitan', 'middle' ),
-       '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' ),
-       'ns'                      => array( '0', 'ESPACEN:', 'NS:' ),
-       'localurl'                => array( '0', 'URLLOCALA:', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'URLLOCALAX:', 'LOCALURLE:' ),
-       'server'                  => array( '0', 'SERVIDOR', 'SERVER' ),
-       'servername'              => array( '0', 'NOMSERVIDOR', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'CAMINESCRIPT', 'SCRIPTPATH' ),
-       'grammar'                 => array( '0', 'GRAMATICA:', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'GENRE:', 'GENDER:' ),
-       'currentweek'             => array( '1', 'SETMANACORRENTA', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'JDSCORRENT', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'SETMANALOCALA', 'LOCALWEEK' ),
-       'localdow'                => array( '1', 'JDSLOCAL', 'LOCALDOW' ),
-       'revisionid'              => array( '1', 'NUMÈROVERSION', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'DATAVERSION', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'DATAVERSION2', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'MESREVISION', 'REVISIONMONTH' ),
-       'revisionyear'            => array( '1', 'ANNADAREVISION', 'ANREVISION', 'REVISIONYEAR' ),
-       'revisiontimestamp'       => array( '1', 'ORAREVISION', 'REVISIONTIMESTAMP' ),
-       'fullurl'                 => array( '0', 'URLCOMPLETA:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'URLCOMPLETAX:', 'FULLURLE:' ),
-       'lcfirst'                 => array( '0', 'INITMINUS:', 'LCFIRST:' ),
-       'ucfirst'                 => array( '0', 'INITMAJUS:', 'UCFIRST:' ),
-       'lc'                      => array( '0', 'MINUS:', 'LC:' ),
-       'uc'                      => array( '0', 'MAJUS:', 'CAPIT:', 'UC:' ),
-       'raw'                     => array( '0', 'LINHA:', 'BRUT:', 'RAW:' ),
-       'displaytitle'            => array( '1', 'AFICHARTÍTOL', 'DISPLAYTITLE' ),
-       'rawsuffix'               => array( '1', 'BRUT', 'B', 'R' ),
-       'newsectionlink'          => array( '1', '__LIGAMSECCIONNOVÈLA__', '__NEWSECTIONLINK__' ),
-       'nonewsectionlink'        => array( '1', '__PASCAPDELIGAMSECCIONNOVÈLA__', '__NONEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', 'VERSIONACTUALA', 'CURRENTVERSION' ),
-       'urlencode'               => array( '0', 'ENCÒDAURL:', 'URLENCODE:' ),
-       'anchorencode'            => array( '0', 'ENCÒDAANCÒRA', 'ANCHORENCODE' ),
-       'currenttimestamp'        => array( '1', 'INSTANTACTUAL', 'CURRENTTIMESTAMP' ),
-       'localtimestamp'          => array( '1', 'INSTANTLOCAL', 'LOCALTIMESTAMP' ),
-       'directionmark'           => array( '1', 'MARCADIRECCION', 'MARCADIR', 'DIRECTIONMARK', 'DIRMARK' ),
-       'language'                => array( '0', '#LENGA:', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', 'LENGACONTENGUT', 'LENGCONTENGUT', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'        => array( '1', 'PAGINASDINSESPACI:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'          => array( '1', 'NOMBREADMINS', 'NUMBEROFADMINS' ),
-       'formatnum'               => array( '0', 'FORMATNOMBRE', 'FORMATNUM' ),
-       'padleft'                 => array( '0', 'BORRATGEESQUÈRRA', 'PADLEFT' ),
-       'padright'                => array( '0', 'BORRATGEDRECHA', 'PADRIGHT' ),
-       'special'                 => array( '0', 'especial', 'special' ),
-       'defaultsort'             => array( '1', 'ORDENA:', 'CLAUDETRIADA:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'filepath'                => array( '0', 'CAMIN:', 'FILEPATH:' ),
-       'tag'                     => array( '0', 'balisa', 'tag' ),
-       'hiddencat'               => array( '1', '__CATAMAGADA__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'PAGINASDINSCAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'TALHAPAGINA', 'PAGESIZE' ),
-       'noindex'                 => array( '1', '__PASCAPDINDÈX__', '__NOINDEX__' ),
-       'staticredirect'          => array( '1', '__REDIRECCIONESTATICA__', '__STATICREDIRECT__' ),
-       'protectionlevel'         => array( '1', 'NIVÈLDEPROTECCION', 'PROTECTIONLEVEL' ),
+       'redirect'                  => array( '0', '#REDIRECCION', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__CAPDETAULA__', '__PASCAPDESOMARI__', '__PASCAPDETDM__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__CAPDEGALARIÁ__', '__CAPDEGALARIA__', '__PASCAPDEDEGALARIÁ__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__FORÇARTAULA__', '__FORÇARSOMARI__', '__FORÇARTDM__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__TAULA__', '__SOMARI__', '__TDM__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__SECCIONNONEDITABLA__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '__PASCAPDENTÈSTA__', '__NOHEADER__' ),
+       'currentmonth'              => array( '1', 'MESCORRENT', 'MESACTUAL', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonthname'          => array( '1', 'NOMMESCORRENT', 'NOMMESACTUAL', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'NOMGENMESCORRENT', 'NOMGENMESACTUAL', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'ABREVMESCORRENT', 'ABREVMESACTUAL', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'JORNCORRENT', 'JORNACTUAL', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'JORNCORRENT2', 'JORNACTUAL2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'NOMJORNCORRENT', 'NOMJORNACTUAL', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'ANNADACORRENTA', 'ANNADAACTUALA', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'DATACORRENTA', 'DATAACTUALA', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'ORACORRENTA', 'ORAACTUALA', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'MESLOCAL', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonthname'            => array( '1', 'NOMMESLOCAL', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'NOMGENMESLOCAL', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'ABREVMESLOCAL', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'JORNLOCAL', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'JORNLOCAL2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'NOMJORNLOCAL', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'ANNADALOCALA', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'ORARILOCAL', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'ORALOCALA', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'NOMBREPAGINAS', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'NOMBREARTICLES', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'NOMBREFICHIÈRS', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'NOMBREUTILIZAIRES', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'NOMBREUTILIZAIRESACTIUS', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'NOMBREEDICIONS', 'NOMBREMODIFS', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'NOMBREVISTAS', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'NOMPAGINA', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'NOMPAGINAX', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'ESPACINOMENATGE', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'ESPACINOMENATGEX', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'ESPACIDISCUSSION', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'ESPACIDISCUSSIONX', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'ESPACISUBJECTE', 'ESPACISUBJÈCTE', 'ESPACIARTICLE', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'ESPACISUBJECTEX', 'ESPACISUBJÈCTEX', 'ESPACIARTICLEX', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'NOMPAGINACOMPLET', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'NOMPAGINACOMPLETX', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'NOMSOSPAGINA', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'NOMSOSPAGINAX', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'NOMBASADEPAGINA', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'NOMBASADEPAGINAX', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'NOMPAGINADISCUSSION', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'NOMPAGINADISCUSSIONX', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'NOMPAGINASUBJECTE', 'NOMPAGINASUBJÈCTE', 'NOMPAGINAARTICLE', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'          => array( '1', 'NOMPAGINASUBJECTEX', 'NOMPAGINASUBJÈCTEX', 'NOMPAGINAARTICLEX', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+       'img_thumbnail'             => array( '1', 'vinheta', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'vinheta=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'drecha', 'dreta', 'right' ),
+       'img_left'                  => array( '1', 'esquèrra', 'senèstra', 'gaucha', 'left' ),
+       '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', '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_sub'                   => array( '1', 'indici', 'ind', 'sub' ),
+       'img_super'                 => array( '1', 'exp', 'super', 'sup' ),
+       'img_top'                   => array( '1', 'naut', 'top' ),
+       'img_text_top'              => array( '1', 'naut-tèxte', 'naut-txt', 'text-top' ),
+       'img_middle'                => array( '1', 'mitan', 'middle' ),
+       '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' ),
+       'ns'                        => array( '0', 'ESPACEN:', 'NS:' ),
+       'localurl'                  => array( '0', 'URLLOCALA:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'URLLOCALAX:', 'LOCALURLE:' ),
+       'server'                    => array( '0', 'SERVIDOR', 'SERVER' ),
+       'servername'                => array( '0', 'NOMSERVIDOR', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'CAMINESCRIPT', 'SCRIPTPATH' ),
+       'grammar'                   => array( '0', 'GRAMATICA:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'GENRE:', 'GENDER:' ),
+       'currentweek'               => array( '1', 'SETMANACORRENTA', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'JDSCORRENT', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'SETMANALOCALA', 'LOCALWEEK' ),
+       'localdow'                  => array( '1', 'JDSLOCAL', 'LOCALDOW' ),
+       'revisionid'                => array( '1', 'NUMÈROVERSION', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'DATAVERSION', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'DATAVERSION2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'MESREVISION', 'REVISIONMONTH' ),
+       'revisionyear'              => array( '1', 'ANNADAREVISION', 'ANREVISION', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'ORAREVISION', 'REVISIONTIMESTAMP' ),
+       'fullurl'                   => array( '0', 'URLCOMPLETA:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'URLCOMPLETAX:', 'FULLURLE:' ),
+       'lcfirst'                   => array( '0', 'INITMINUS:', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', 'INITMAJUS:', 'UCFIRST:' ),
+       'lc'                        => array( '0', 'MINUS:', 'LC:' ),
+       'uc'                        => array( '0', 'MAJUS:', 'CAPIT:', 'UC:' ),
+       'raw'                       => array( '0', 'LINHA:', 'BRUT:', 'RAW:' ),
+       'displaytitle'              => array( '1', 'AFICHARTÍTOL', 'DISPLAYTITLE' ),
+       'rawsuffix'                 => array( '1', 'BRUT', 'B', 'R' ),
+       'newsectionlink'            => array( '1', '__LIGAMSECCIONNOVÈLA__', '__NEWSECTIONLINK__' ),
+       'nonewsectionlink'          => array( '1', '__PASCAPDELIGAMSECCIONNOVÈLA__', '__NONEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'VERSIONACTUALA', 'CURRENTVERSION' ),
+       'urlencode'                 => array( '0', 'ENCÒDAURL:', 'URLENCODE:' ),
+       'anchorencode'              => array( '0', 'ENCÒDAANCÒRA', 'ANCHORENCODE' ),
+       'currenttimestamp'          => array( '1', 'INSTANTACTUAL', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', 'INSTANTLOCAL', 'LOCALTIMESTAMP' ),
+       'directionmark'             => array( '1', 'MARCADIRECCION', 'MARCADIR', 'DIRECTIONMARK', 'DIRMARK' ),
+       'language'                  => array( '0', '#LENGA:', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'LENGACONTENGUT', 'LENGCONTENGUT', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', 'PAGINASDINSESPACI:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', 'NOMBREADMINS', 'NUMBEROFADMINS' ),
+       'formatnum'                 => array( '0', 'FORMATNOMBRE', 'FORMATNUM' ),
+       'padleft'                   => array( '0', 'BORRATGEESQUÈRRA', 'PADLEFT' ),
+       'padright'                  => array( '0', 'BORRATGEDRECHA', 'PADRIGHT' ),
+       'special'                   => array( '0', 'especial', 'special' ),
+       'defaultsort'               => array( '1', 'ORDENA:', 'CLAUDETRIADA:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'filepath'                  => array( '0', 'CAMIN:', 'FILEPATH:' ),
+       'tag'                       => array( '0', 'balisa', 'tag' ),
+       'hiddencat'                 => array( '1', '__CATAMAGADA__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'PAGINASDINSCAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'TALHAPAGINA', 'PAGESIZE' ),
+       'noindex'                   => array( '1', '__PASCAPDINDÈX__', '__NOINDEX__' ),
+       'staticredirect'            => array( '1', '__REDIRECCIONESTATICA__', '__STATICREDIRECT__' ),
+       'protectionlevel'           => array( '1', 'NIVÈLDEPROTECCION', 'PROTECTIONLEVEL' ),
 );
 
 $datePreferences = array(
index 4254e2b..b5018e9 100644 (file)
@@ -174,84 +174,84 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#ଲେଉଟାଣି', '#REDIRECT' ),
-       'noeditsection'           => array( '0', '_ବଦଳା_ନହେବାଶ୍ରେଣୀ_', '__NOEDITSECTION__' ),
-       'currentmonth'            => array( '1', 'ଏବେକାର_ମାସ', 'ଏବେର_ମାସ୨', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', 'ଏବେର_ମାସ', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', 'ଏବେକାର_ମାସ_ନାଆଁ', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'ଏବେକାର_ମାସ_ନାଆଁ_ସାଧାରଣ', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'ଏବେକାର_ମାସ_ନାଆଁ_ସଂକ୍ଷିପ୍ତ', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'ଏବେକାର_ଦିନ', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'ଏବେକାର_ଦିନ୨', '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', 'ଏବେକାର_ମାସ୧', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'ମାସ୧ର_ନାଆଁ', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'ସ୍ଥାନୀୟ_ମାସ୧_ନାଆଁ_ସାଧାରଣ', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'ସ୍ଥାନୀୟ_ମାସର୧_ନାଆଁ_ସଂକ୍ଷିପ୍ତ', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'Local_ଦିନ', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'ସ୍ଥାନୀୟ_ଦିନ୨', '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' ),
-       'numberofusers'           => array( '1', 'ବ୍ୟବାହାରକାରୀ_ସଂଖ୍ୟା', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'ସଚଳ_ବ୍ୟବାହାରକାରୀଙ୍କ_ସଂଖ୍ୟା', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'ବଦଳ_ସଂଖ୍ୟା', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'କେତେଥର_ଦେଖାଯାଇଛି', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'ପୃଷ୍ଠା_ନାଆଁ', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'ପୃଷ୍ଠା_ନାମକାରଣକାରୀ', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'ନେମସ୍ପେସ', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'ନେମସ୍ପେସକାରୀ', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'ଟକସ୍ପେସ', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'ଟକସ୍ପେସକାରୀ', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'ବିଷୟସ୍ପେସ', 'ଲେଖାସ୍ପେସ', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'msg'                     => array( '0', 'ମେସେଜ:', 'MSG:' ),
-       'img_manualthumb'         => array( '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_border'              => array( '1', 'ବର୍ଡର', 'border' ),
-       'img_baseline'            => array( '1', 'ବେସଲାଇନ', 'baseline' ),
-       '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' ),
-       'articlepath'             => array( '0', 'ଲେଖାର_ପଥ', 'ARTICLEPATH' ),
-       'server'                  => array( '0', 'ସର୍ଭର', 'SERVER' ),
-       'grammar'                 => array( '0', 'ବ୍ୟାକରଣ', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'ଲିଙ୍ଗ', 'GENDER:' ),
-       'plural'                  => array( '0', 'ବହୁବଚନ:', 'PLURAL:' ),
-       'raw'                     => array( '0', 'କଞ୍ଚା', 'RAW:' ),
-       'displaytitle'            => array( '1', 'ଦେଖଣାନାଆଁ', 'DISPLAYTITLE' ),
-       'newsectionlink'          => array( '1', '_ନୂଆବିଭାଗଲିଙ୍କ_', '__NEWSECTIONLINK__' ),
-       'nonewsectionlink'        => array( '1', '_ନୂଆ_ବିଭାଗ_ନକରିବା_ଲିଙ୍କ_', '__NONEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', 'ନଗଦ_ରିଭିଜନ', 'CURRENTVERSION' ),
-       'numberofadmins'          => array( '1', 'ପରିଛାମାନଙ୍କତାଲିକା', 'NUMBEROFADMINS' ),
-       'padleft'                 => array( '0', 'ବାଆଁପ୍ୟାଡ଼', 'PADLEFT' ),
-       'padright'                => array( '0', 'ଡାହାଣପ୍ୟାଡ଼', 'PADRIGHT' ),
-       'special'                 => array( '0', 'ବିଶେଷ', 'special' ),
-       'filepath'                => array( '0', 'ଫାଇଲରାହା:', 'FILEPATH:' ),
-       'tag'                     => array( '0', 'ଟାଗ', 'tag' ),
-       'hiddencat'               => array( '1', '_ଲୁଚିଥିବାବିଭାଗ_', '__HIDDENCAT__' ),
-       'pagesize'                => array( '1', 'ଫରଦଆକାର', 'PAGESIZE' ),
-       'protectionlevel'         => array( '1', 'ପ୍ରତିରକ୍ଷାସ୍ତର', 'PROTECTIONLEVEL' ),
-       'formatdate'              => array( '0', 'ତାରିଖରପ୍ରକାର', 'formatdate', 'dateformat' ),
-       'url_path'                => array( '0', 'ବାଟ', 'PATH' ),
-       'url_wiki'                => array( '0', 'ଉଇକି', 'WIKI' ),
-       'url_query'               => array( '0', 'ପ୍ରଶ୍ନ', 'QUERY' ),
+       'redirect'                  => array( '0', '#ଲେଉଟାଣି', '#REDIRECT' ),
+       'noeditsection'             => array( '0', '_ବଦଳା_ନହେବାଶ୍ରେଣୀ_', '__NOEDITSECTION__' ),
+       'currentmonth'              => array( '1', 'ଏବେକାର_ମାସ', 'ଏବେର_ମାସ୨', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'ଏବେର_ମାସ', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'ଏବେକାର_ମାସ_ନାଆଁ', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'ଏବେକାର_ମାସ_ନାଆଁ_ସାଧାରଣ', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'ଏବେକାର_ମାସ_ନାଆଁ_ସଂକ୍ଷିପ୍ତ', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'ଏବେକାର_ଦିନ', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'ଏବେକାର_ଦିନ୨', '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', 'ଏବେକାର_ମାସ୧', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'ମାସ୧ର_ନାଆଁ', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'ସ୍ଥାନୀୟ_ମାସ୧_ନାଆଁ_ସାଧାରଣ', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'ସ୍ଥାନୀୟ_ମାସର୧_ନାଆଁ_ସଂକ୍ଷିପ୍ତ', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'Local_ଦିନ', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'ସ୍ଥାନୀୟ_ଦିନ୨', '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' ),
+       'numberofusers'             => array( '1', 'ବ୍ୟବାହାରକାରୀ_ସଂଖ୍ୟା', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'ସଚଳ_ବ୍ୟବାହାରକାରୀଙ୍କ_ସଂଖ୍ୟା', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'ବଦଳ_ସଂଖ୍ୟା', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'କେତେଥର_ଦେଖାଯାଇଛି', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'ପୃଷ୍ଠା_ନାଆଁ', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'ପୃଷ୍ଠା_ନାମକାରଣକାରୀ', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'ନେମସ୍ପେସ', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'ନେମସ୍ପେସକାରୀ', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'ଟକସ୍ପେସ', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'ଟକସ୍ପେସକାରୀ', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'ବିଷୟସ୍ପେସ', 'ଲେଖାସ୍ପେସ', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'msg'                       => array( '0', 'ମେସେଜ:', 'MSG:' ),
+       'img_manualthumb'           => array( '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_border'                => array( '1', 'ବର୍ଡର', 'border' ),
+       'img_baseline'              => array( '1', 'ବେସଲାଇନ', 'baseline' ),
+       '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' ),
+       'articlepath'               => array( '0', 'ଲେଖାର_ପଥ', 'ARTICLEPATH' ),
+       'server'                    => array( '0', 'ସର୍ଭର', 'SERVER' ),
+       'grammar'                   => array( '0', 'ବ୍ୟାକରଣ', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'ଲିଙ୍ଗ', 'GENDER:' ),
+       'plural'                    => array( '0', 'ବହୁବଚନ:', 'PLURAL:' ),
+       'raw'                       => array( '0', 'କଞ୍ଚା', 'RAW:' ),
+       'displaytitle'              => array( '1', 'ଦେଖଣାନାଆଁ', 'DISPLAYTITLE' ),
+       'newsectionlink'            => array( '1', '_ନୂଆବିଭାଗଲିଙ୍କ_', '__NEWSECTIONLINK__' ),
+       'nonewsectionlink'          => array( '1', '_ନୂଆ_ବିଭାଗ_ନକରିବା_ଲିଙ୍କ_', '__NONEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'ନଗଦ_ରିଭିଜନ', 'CURRENTVERSION' ),
+       'numberofadmins'            => array( '1', 'ପରିଛାମାନଙ୍କତାଲିକା', 'NUMBEROFADMINS' ),
+       'padleft'                   => array( '0', 'ବାଆଁପ୍ୟାଡ଼', 'PADLEFT' ),
+       'padright'                  => array( '0', 'ଡାହାଣପ୍ୟାଡ଼', 'PADRIGHT' ),
+       'special'                   => array( '0', 'ବିଶେଷ', 'special' ),
+       'filepath'                  => array( '0', 'ଫାଇଲରାହା:', 'FILEPATH:' ),
+       'tag'                       => array( '0', 'ଟାଗ', 'tag' ),
+       'hiddencat'                 => array( '1', '_ଲୁଚିଥିବାବିଭାଗ_', '__HIDDENCAT__' ),
+       'pagesize'                  => array( '1', 'ଫରଦଆକାର', 'PAGESIZE' ),
+       'protectionlevel'           => array( '1', 'ପ୍ରତିରକ୍ଷାସ୍ତର', 'PROTECTIONLEVEL' ),
+       'formatdate'                => array( '0', 'ତାରିଖରପ୍ରକାର', 'formatdate', 'dateformat' ),
+       'url_path'                  => array( '0', 'ବାଟ', 'PATH' ),
+       'url_wiki'                  => array( '0', 'ଉଇକି', 'WIKI' ),
+       'url_query'                 => array( '0', 'ପ୍ରଶ୍ନ', 'QUERY' ),
 );
 
 $digitGroupingPattern = "##,##,###";
@@ -330,7 +330,7 @@ $messages = array(
 'fri' => 'ଶୁକ୍ରବାର',
 'sat' => 'ଶନିବାର',
 'january' => 'ଜାନୁଆରୀ',
-'february' => 'ଫà­\87ବà­\83ଆରୀ',
+'february' => 'ଫà­\87ବà­\8dରà­\81ଆରୀ',
 'march' => 'ମାର୍ଚ୍ଚ',
 'april' => 'ଅପ୍ରେଲ',
 'may_long' => 'ମଇ',
@@ -342,7 +342,7 @@ $messages = array(
 'november' => 'ନଭେମ୍ବର',
 'december' => 'ଡିସେମ୍ବର',
 'january-gen' => 'ଜାନୁଆରୀ',
-'february-gen' => 'ଫà­\87ବà­\83ଆରୀ',
+'february-gen' => 'ଫà­\87ବà­\8dରà­\81ଆରୀ',
 'march-gen' => 'ମାର୍ଚ୍ଚ',
 'april-gen' => 'ଅପ୍ରେଲ',
 'may-gen' => 'ମଇ',
@@ -354,7 +354,7 @@ $messages = array(
 'november-gen' => 'ନଭେମ୍ବର',
 'december-gen' => 'ଡିସେମ୍ବର',
 'jan' => 'ଜାନୁଆରୀ',
-'feb' => 'ଫà­\87ବà­\83ଆରୀ',
+'feb' => 'ଫà­\87ବà­\8dରà­\81ଆରୀ',
 'mar' => 'ମାର୍ଚ୍ଚ',
 'apr' => 'ଅପ୍ରେଲ',
 'may' => 'ମଇ',
@@ -1332,6 +1332,7 @@ $1",
 'prefs-beta' => 'ଆଗ ବିଶେଷତାମାନ',
 'prefs-datetime' => 'ତାରିଖ ଓ ସମୟ',
 'prefs-labs' => 'ପରଖଶାଳା ସୁବିଧାସବୁ',
+'prefs-user-pages' => 'ବ୍ୟବହାରକାରୀଙ୍କର ପୃଷ୍ଠାଗୁଡିକ',
 'prefs-personal' => 'ସଭ୍ୟ ପ୍ରଫାଇଲ',
 'prefs-rc' => 'ନଗଦ ବଦଳ',
 'prefs-watchlist' => 'ଦେଖଣା ତାଲିକା',
@@ -2128,6 +2129,7 @@ URLଟି ଠିକ ଅଚିକି କି ନାଁ ଓ ସାଇଟଟି ସ
 'allpagesbadtitle' => 'ଆପଣ ଅନୁରୋଧ କରିଥିବା ପୃଷ୍ଠାଟି ଭୁଲ, ଅଲଗା ଭାଷାର ବ୍ୟବହାର କରାଯାଇଛି ବା ଭୁଲ ଇଣ୍ଟର ଉଇକି ଉପସର୍ଗ ଦିଆଯାଇଛି ।
 ଏଥିରେ ଥିବା ଗୋଟିଏ ବା ଦୁଇଟି ଅକ୍ଷର ଶିରୋନାମା ଭାବରେ ବ୍ୟବହାର କରାଯାଇ ପାରିବ ନାହିଁ ।',
 'allpages-bad-ns' => '{{SITENAME}}ରେ "$1" ନେମସ୍ପେସଟିଏ ନାହିଁ ।',
+'allpages-hide-redirects' => 'ପୁନଃପ୍ରେରଣସମୂହକୁ ଲୁଚାଇବେ',
 
 # SpecialCachedPage
 'cachedspecial-refresh-now' => 'ନୂତନତମ ଦେଖନ୍ତୁ ।',
@@ -2199,6 +2201,7 @@ URLଟି ଠିକ ଅଚିକି କି ନାଁ ଓ ସାଇଟଟି ସ
 'mailnologin' => 'ଗୋଟିଏ ବି ପଠାଇବା ଠିକଣା ନାହିଁ',
 'mailnologintext' => 'ଆପଣ ନିଜ [[Special:Preferences|ପସନ୍ଦସବୁ]]ରେ [[Special:UserLogin|ଲଗ ଇନ]] କରିଥିଲେ ଓ ନିଜର ଏକ ସଚଳ ଇ-ମେଲ ଠିକଣା ଥିଲେ ଯାଇ ବାକି ସବୁ ସଭ୍ୟଙ୍କୁ ଇ-ମେଲ ପଠାଇପାରିବେ ।',
 'emailuser' => 'ଏହି ସଭ୍ୟଙ୍କୁ ଇମେଲ କରିବେ',
+'emailuser-title-notarget' => 'ବ୍ୟବହାରକାରୀ କୁ ଇ-ମେଲ',
 'emailpage' => 'ଇ-ମେଲ ବ୍ୟବହାରକାରୀ',
 'emailpagetext' => 'ତଳେ ଥିବା ଫର୍ମ ବ୍ୟବହାର କରି ଆପଣ ଏହି ସଭ୍ୟଙ୍କୁ ଇ-ମେଲ କରିପାରିବେ ।
 [[Special:Preferences|ଆପଣଙ୍କ ପସନ୍ଦ]]ରେ ଥିବା ଇ-ମେଲ ଠିକଣା ପ୍ରେରକ ଭାବରେ ଦେଖାଯିବ, ତେଣୁ ଚିଠି ପାଇଥିବା ସଭ୍ୟ ଆପଣଙ୍କୁ ସିଧା ସଳଖ ଉତ୍ତର ଦେଇପାରିବ ।',
@@ -2994,6 +2997,7 @@ MediaWiki ବ୍ୟବହାର କରି [[Special:Import|ପୃଷ୍ଠା 
 # Info page
 'pageinfo-title' => '"$1"ର ବିବରଣୀ',
 'pageinfo-header-edits' => 'ବଦଳସବୁ',
+'pageinfo-article-id' => 'ପୃଷ୍ଠା ଆଇଡ଼ି',
 'pageinfo-views' => 'ଦେଖଣା ସଂଖ୍ୟା',
 'pageinfo-watchers' => 'ଦେଖଣାହାରି ସଂଖ୍ୟା',
 'pageinfo-edits' => 'ସମ୍ପାଦନା ସଂଖ୍ୟା:',
@@ -3875,6 +3879,11 @@ MediaWiki ଉପଯୋଗୀ ହେବା ଲକ୍ଷରେ ବଣ୍ଟାଯ
 'api-error-verification-error' => 'ଏହି ଫାଇଲଟି ବୋଧ ହୁଏ ନଷ୍ଟ ହୋଇଯାଇଅଛି କିମ୍ବା ଭୁଲ ଏକ୍ସଟେନସନ ଦିଆଯାଇଅଛି ।',
 
 # Durations
+'duration-seconds' => '$1 {{PLURAL:$1|ସେକଣ୍ଡ|ସେକେଣ୍ଡ}}',
+'duration-minutes' => '$1 {{PLURAL:$1|ମିନିଟ|ମିନିଟ}}',
+'duration-hours' => '$1 {{PLURAL:$1|ଘଣ୍ଟା|ଘଣ୍ଟା}}',
+'duration-days' => '$1 {{PLURAL:$1|ଦିନ|ଦିନଗୁଡିକ}}',
+'duration-weeks' => '$1 {{PLURAL: $1|ସପ୍ତାହ|ସପ୍ତାହଗୁଡିକ}}',
 'duration-years' => '$1 {{PLURAL:$1|year|years}}',
 'duration-decades' => '$1 {{PLURAL:$1|decade|decades}',
 'duration-centuries' => '$1 {{PLURAL:$1|century|centuries}}',
index 90e0b43..9f18071 100644 (file)
@@ -50,14 +50,40 @@ $namespaceAliases = array(
 );
 
 $specialPageAliases = array(
-       'Recentchanges'             => array( 'Фæстаг_ивдтытæ' ),
+       'Activeusers'               => array( 'АктивонАрхайджытæ' ),
+       'Allmessages'               => array( 'ФыстæджытæИууылдæр' ),
+       'Allpages'                  => array( 'ФæрстæИууылдæр' ),
+       'Blankpage'                 => array( 'АфтидФарс' ),
+       'Block'                     => array( 'Блок' ),
+       'Blockme'                   => array( 'НыблокМæКæн' ),
+       'Booksources'               => array( 'ЧингуытыРавзæрæнтæ' ),
+       'BrokenRedirects'           => array( 'ЦъæлРарвыстытæ' ),
+       'Categories'                => array( 'Категоритæ' ),
+       'ChangeEmail'               => array( 'EmailИвын' ),
+       'ChangePassword'            => array( 'ПарольИвын' ),
+       'ComparePages'              => array( 'ФæрстæАбарын' ),
+       'Confirmemail'              => array( 'EmailБæлвырдКæнын' ),
+       'Contributions'             => array( 'Бавæрд' ),
+       'CreateAccount'             => array( 'АккаунтСкæнын' ),
+       'DeletedContributions'      => array( 'ХафтБавæрд' ),
+       'Mycontributions'           => array( 'МæБавæрд' ),
+       'Mypage'                    => array( 'МæФарс' ),
+       'Mytalk'                    => array( 'МæНыхас' ),
+       'Myuploads'                 => array( 'МæБавгæд' ),
+       'Newimages'                 => array( 'НогФайлтæ' ),
+       'Newpages'                  => array( 'НогФæрстæ' ),
+       'Preferences'               => array( 'Фадæттæ' ),
+       'Randompage'                => array( 'ÆрхаугæФарс' ),
+       'Recentchanges'             => array( 'ФæстагИвдтытæ' ),
+       'Search'                    => array( 'Агурын' ),
+       'Watchlist'                 => array( 'Цæстдард' ),
 );
 
 
 $magicWords = array(
-       'redirect'                => array( '0', '#РАРВЫСТ', '#перенаправление', '#перенапр', '#REDIRECT' ),
-       'img_right'               => array( '1', 'рахиз', 'справа', 'right' ),
-       'img_left'                => array( '1', 'галиу', 'слева', 'left' ),
+       'redirect'                  => array( '0', '#РАРВЫСТ', '#перенаправление', '#перенапр', '#REDIRECT' ),
+       'img_right'                 => array( '1', 'рахиз', 'справа', 'right' ),
+       'img_left'                  => array( '1', 'галиу', 'слева', 'left' ),
 );
 
 $linkTrail = '/^((?:[a-z]|а|æ|б|в|г|д|е|ё|ж|з|и|й|к|л|м|н|о|п|р|с|т|у|ф|х|ц|ч|ш|щ|ъ|ы|ь|э|ю|я|“|»)+)(.*)$/sDu';
index b163f4a..fdcfabf 100644 (file)
 
 $namespaceNames = array(
        NS_MEDIA            => 'ਮੀਡੀਆ',
-       NS_SPECIAL          => 'ਖਾਸ',
-       NS_TALK             => 'à¨\9aਰà¨\9aਾ',
-       NS_USER             => 'ਮà©\88à¨\82ਬਰ',
-       NS_USER_TALK        => 'ਮà©\88à¨\82ਬਰ_à¨\9aਰà¨\9aਾ',
-       NS_PROJECT_TALK     => '$1_à¨\9aਰà¨\9aਾ',
+       NS_SPECIAL          => 'à¨\96਼ਾਸ',
+       NS_TALK             => 'à¨\97ੱਲ-ਬਾਤ',
+       NS_USER             => 'ਵਰਤà©\8cà¨\82à¨\95ਾਰ',
+       NS_USER_TALK        => 'ਵਰਤà©\8cà¨\82à¨\95ਾਰ_à¨\97ੱਲ-ਬਾਤ',
+       NS_PROJECT_TALK     => '$1_à¨\97ੱਲ-ਬਾਤ',
        NS_FILE             => 'ਤਸਵੀਰ',
-       NS_FILE_TALK        => 'ਤਸਵà©\80ਰ_à¨\9aਰà¨\9aਾ',
-       NS_MEDIAWIKI        => 'ਮà©\80ਡà©\80à¨\86ਵਿà¨\95ਿ',
-       NS_MEDIAWIKI_TALK   => 'ਮà©\80ਡà©\80à¨\86ਵਿà¨\95ਿ_à¨\9aਰà¨\9aਾ',
-       NS_TEMPLATE         => 'ਨਮà©\82ਨਾ',
-       NS_TEMPLATE_TALK    => 'ਨਮà©\82ਨਾ_à¨\9aਰà¨\9aਾ',
+       NS_FILE_TALK        => 'ਤਸਵà©\80ਰ_à¨\97ੱਲ-ਬਾਤ',
+       NS_MEDIAWIKI        => 'ਮà©\80ਡà©\80à¨\86ਵਿà¨\95à©\80',
+       NS_MEDIAWIKI_TALK   => 'ਮà©\80ਡà©\80à¨\86ਵਿà¨\95à©\80_à¨\97ੱਲ-ਬਾਤ',
+       NS_TEMPLATE         => 'ਫਰਮਾ',
+       NS_TEMPLATE_TALK    => 'ਫਰਮਾ_à¨\97ੱਲ-ਬਾਤ',
        NS_HELP             => 'ਮਦਦ',
-       NS_HELP_TALK        => 'ਮਦਦ_à¨\9aਰà¨\9aਾ',
+       NS_HELP_TALK        => 'ਮਦਦ_à¨\97ੱਲ-ਬਾਤ',
        NS_CATEGORY         => 'ਸ਼੍ਰੇਣੀ',
-       NS_CATEGORY_TALK    => 'ਸ਼੍ਰੇਣੀ_ਚਰਚਾ',
+       NS_CATEGORY_TALK    => 'ਸ਼੍ਰੇਣੀ_ਗੱਲ-ਬਾਤ',
+);
+
+$namespaceAliases = array(
+       'ਖਾਸ' => NS_SPECIAL,
+       'ਚਰਚਾ' => NS_TALK,
+       'ਮੈਂਬਰ' => NS_USER,
+       'ਮੈਂਬਰ_ਚਰਚਾ' => NS_USER_TALK,
+       '$1_ਚਰਚਾ' => NS_PROJECT_TALK,
+       'ਤਸਵੀਰ_ਚਰਚਾ' => NS_FILE_TALK,
+       'ਮੀਡੀਆਵਿਕਿ' => NS_MEDIAWIKI,
+       'ਮੀਡੀਆਵਿਕਿ_ਚਰਚਾ' => NS_MEDIAWIKI_TALK,
+       'ਨਮੂਨਾ' => NS_TEMPLATE,
+       'ਨਮੂਨਾ_ਚਰਚਾ' => NS_TEMPLATE_TALK,
+       'ਮਦਦ_ਚਰਚਾ' => NS_HELP_TALK,
+       'ਸ਼੍ਰੇਣੀ_ਚਰਚਾ' => NS_CATEGORY_TALK,
+);
+
+$specialPageAliases = array(
+       'Activeusers'               => array( 'ਸਰਗਰਮ_ਵਰਤੌਂਕਾਰ' ),
+       'Blankpage'                 => array( 'ਖਾਲੀ_ਸਫ਼ਾ' ),
+       'Block'                     => array( 'ਪਾਬੰਦੀ_ਲਾਉਣਾ', 'ਪਾਬੰਦੀ_ਸ਼ੁਦਾ_ਆਈ_ਪੀ', 'ਪਾਬੰਦੀ_ਸ਼ੁਦਾ_ਵਰਤੌਂਕਾਰ' ),
+       'Listusers'                 => array( 'ਵਰਤੌਂਕਾਰਾਂ_ਦੀ_ਸੂਚੀ' ),
 );
 
 $digitTransformTable = array(
@@ -64,11 +86,11 @@ $messages = array(
 'tog-hidepatrolled' => 'ਮੌਨਜੁਦਾ ਬਦਲਾਬ ਮੈ ਸੈ ਸਹੀਤਕ ਬਦਲਾਬ ਕੌ ਛੁਪਾ ਕਰ ਰਖੇ.',
 'tog-newpageshidepatrolled' => 'ਨਵੀ ਸੁਚੀ ਮੈ ਸੈ ਗਸ਼ਤ ਪਰਚੇ ਕੌ ਛੁਪਾਏ.',
 'tog-extendwatchlist' => 'ਸਾਰੀ ਨਵੀ ਤਬਦੀਲੀਆ ਹੀ ਨਹੀ ,ਪੂਰਾਣੀ ਤਬਦੀਲੀਆ ਨੂੰ ਵੀ ਨਵੀ ਸੂਚੀ ਵਿਚ ਵਧਾ ਕੈ ਸ਼ਾਮੀਲ ਕਰੌ.',
-'tog-usenewrc' => 'ਤਾਜ਼ਾ ਤਬਦੀਲੀਆਂ ਅਤੇ ਨਿਗਰਾਨੀ ਲਿਸਟ ਵਿਚ ਤਬਦੀਲੀਆਂ ਸਫ਼ੇ ਮੁਤਾਬਕ (ਜਾਵਾ ਸਕ੍ਰਿਪਟ ਲੋੜੀਂਦੀ ਹੈ)',
+'tog-usenewrc' => 'ਤਾਜ਼ਾ ਤਬਦੀਲੀਆਂ ਅਤੇ ਨਿਗਰਾਨੀ-ਲਿਸਟ ਵਿਚ ਸਫ਼ੇ ਮੁਤਾਬਕ ਤਬਦੀਲੀਆਂ ਦੇ ਗਰੁੱਪ ਬਣਾਓ (ਜਾਵਾ ਸਕ੍ਰਿਪਟ ਲੋੜੀਂਦੀ ਹੈ)',
 'tog-numberheadings' => 'ਆਟੋ-ਨੰਬਰ ਹੈਡਿੰਗ',
 'tog-showtoolbar' => 'ਐਡਿਟ ਟੂਲਬਾਰ ਵੇਖੋ (JavaScript)',
-'tog-editondblclick' => 'ਦà©\8bਹਰà©\87 à¨\95ਲਿੱà¨\95 à¨¨à¨¾à¨²à¨¼ à¨¸à¨«à¨¼à¨¾ ਸੋਧੋ (ਜਾਵਾ ਸਕ੍ਰਿਪਟ ਲੋੜੀਂਦੀ ਹੈ)',
-'tog-editsection' => '[ਸà©\8bਧà©\8b] à¨²à¨¿à©°à¨\95ਾà¨\82 à¨\9c਼ਰà©\80à¨\8f à¨¸à©\88à¨\95ਸ਼ਨ à¨¸à©\8bਧ à¨¯à©\8bà¨\97 ਕਰੋ',
+'tog-editondblclick' => 'ਦà©\82ਹਰà©\87 à¨\95ਲਿੱà¨\95 à¨¨à¨¾à¨²à¨¼ à¨¸à¨«à¨¼à©\87 ਸੋਧੋ (ਜਾਵਾ ਸਕ੍ਰਿਪਟ ਲੋੜੀਂਦੀ ਹੈ)',
+'tog-editsection' => '[ਸà©\8bਧà©\8b] à¨²à¨¿à©°à¨\95ਾà¨\82 à¨\9c਼ਰà©\80à¨\8f à¨¸à©\88à¨\95ਸ਼ਨ à¨¸à©\8bਧ à¨\9aਾਲà©\82 ਕਰੋ',
 'tog-editsectiononrightclick' => 'ਸੈਕਸ਼ਨ ਸਿਰਲੇਖਾਂ ਤੇ ਸੱਜੀ ਕਲਿੱਕ ਦੁਆਰਾ ਸੋਧ ਯੋਗ ਕਰੋ (ਜਾਵਾ ਸਕ੍ਰਿਪਟ ਲੋੜੀਂਦੀ ਹੈ)',
 'tog-showtoc' => 'ਟੇਬਲ ਆਫ਼ ਕੰਨਟੈੱਟ ਵੇਖਾਓ (for pages with more than 3 headings)',
 'tog-rememberpassword' => 'ਇਸ ਬਰਾਊਜ਼ਰ ਉੱਤੇ ਮੇਰਾ ਲਾਗਇਨ ਯਾਦ ਰੱਖੋ ($1 {{PLURAL:$1|ਦਿਨ|ਦਿਨਾਂ}} ਲਈ ਵੱਧ ਤੋਂ ਵੱਧ)',
@@ -76,17 +98,17 @@ $messages = array(
 'tog-watchdefault' => 'ਮੇਰੇ ਵੱਲੋਂ ਸੋਧੇ ਸਫ਼ੇ ਅਤੇ ਫ਼ਾਈਲਾਂ ਮੇਰੀ ਨਿਗਰਾਨੀ-ਲਿਸਟ ਵਿੱਚ ਪਾਓ',
 'tog-watchmoves' => 'ਮੇਰੇ ਵੱਲੋਂ ਬਦਲੇ ਸਿਰਲੇਖਾਂ ਵਾਲ਼ੇ ਸਫ਼ੇ ਅਤੇ ਫ਼ਾਈਲਾਂ ਮੇਰੀ ਨਿਗਰਾਨੀ-ਲਿਸਟ ਵਿੱਚ ਪਾਓ',
 'tog-watchdeletion' => 'ਮੇਰੇ ਵਲੋਂ ਹਟਾਏ ਗਏ ਸਫ਼ੇ ਮੇਰੀ ਵਾਚ-ਲਿਸਟ ਵਿੱਚ ਪਾਓ',
-'tog-minordefault' => 'ਸਾਰà©\80à¨\86à¨\82 à¨¸à©\8bਧਾà¨\82 ਤੇ ਮੂਲ ਰੂਪ ਵਿਚ ਛੋਟੀਆਂ ਹੋਣ ਦਾ ਨਿਸ਼ਾਨ ਲਾਓ',
+'tog-minordefault' => 'ਸਾਰà©\87 à¨«à©\87ਰ-ਬਦਲਾà¨\82 â\80\99ਤੇ ਮੂਲ ਰੂਪ ਵਿਚ ਛੋਟੀਆਂ ਹੋਣ ਦਾ ਨਿਸ਼ਾਨ ਲਾਓ',
 'tog-previewontop' => 'ਐਡਿਟ ਬਕਸੇ ਤੋਂ ਪਹਿਲਾਂ ਝਲਕ ਵੇਖਾਓ',
 'tog-previewonfirst' => 'ਪਹਿਲੇ ਐਡਿਟ ਉੱਤੇ ਝਲਕ ਵੇਖਾਓ',
 'tog-nocache' => 'ਬਰਾਊਜ਼ਰ ਸਫ਼ਾ ਕੈਸ਼ ਕਰਨਾ ਬੰਦ ਕਰੋ',
 'tog-enotifwatchlistpages' => 'ਜਦੋਂ ਮੇਰੀ ਵਾਚ-ਲਿਸਟ ਵਿਚ ਦਰਜ ਕੋਈ ਸਫ਼ਾ ਬਦਲਿਆ ਜਾਵੇ ਯਾ ਮਿਸਲ ਬਦਲੀ ਜਾਵੇ ਤਾਂ ਮੈਨੂੰ ਈਮੇਲ ਭੇਜੋ',
 'tog-enotifusertalkpages' => 'ਜਦੋਂ ਮੇਰਾ ਗੱਲ-ਬਾਤ ਸਫ਼ਾ ਬਦਲਿਆ ਜਾਵੇ ਤਾਂ ਮੈਨੂੰ ਈ-ਮੇਲ ਭੇਜੋ',
 'tog-enotifminoredits' => 'ਸਫ਼ਿਆਂ ਅਤੇ ਫ਼ਾਈਲਾਂ ਦੀਆਂ ਛੋਟੀਆਂ ਤਬਦੀਲੀਆਂ ਲਈ ਵੀ ਮੈਨੂੰ ਈ-ਮੇਲ ਭੇਜੋ',
-'tog-enotifrevealaddr' => 'à¨\9cਾਣà©\82 à¨\95ਰਵਾà¨\89ਣ ਵਾਲ਼ੀਆਂ ਈ-ਮੇਲਾਂ ਵਿਚ ਮੇਰਾ ਈ-ਮੇਲ ਪਤਾ ਜ਼ਾਹਰ ਕਰੋ',
+'tog-enotifrevealaddr' => 'à¨\87ਤਲਾਹ à¨¦à©\87ਣ ਵਾਲ਼ੀਆਂ ਈ-ਮੇਲਾਂ ਵਿਚ ਮੇਰਾ ਈ-ਮੇਲ ਪਤਾ ਜ਼ਾਹਰ ਕਰੋ',
 'tog-shownumberswatching' => 'ਨਜ਼ਰ ਰੱਖ ਰਹੇ ਮੈਂਬਰਾਂ ਦੀ ਗਿਣਤੀ ਵਖਾਓ',
 'tog-oldsig' => 'ਮੌਜੂਦਾ ਦਸਤਖਤ:',
-'tog-fancysig' => 'ਦਸਤà¨\96਼ਤ à¨¨à©\82à©° à¨µà¨¿à¨\95à©\80ਲਿà¨\96ਤ à¨¦à©\87 à¨¤à©\8cਰ à¨¤à©\87 ਵਰਤੋ (ਬਿਨਾਂ ਆਟੋਮੈਟਿਕ ਲਿੰਕ)',
+'tog-fancysig' => 'ਦਸਤà¨\96਼ਤ à¨¨à©\82à©° à¨¬à¨¤à©\8cਰ à¨µà¨¿à¨\95à©\80ਲਿà¨\96ਤ ਵਰਤੋ (ਬਿਨਾਂ ਆਟੋਮੈਟਿਕ ਲਿੰਕ)',
 'tog-externaleditor' => 'ਪਹਿਲਾਂ ਤੋਂ ਹੀ ਬਾਹਰੀ ਸੋਧਕ ਵਰਤੋ (ਸਿਰਫ਼ ਮਾਹਿਰਾਂ ਲਈ ਹੈ, ਤੁਹਾਡੇ ਕੰਪਿਊਟਰ ਤੇ ਖ਼ਾਸ ਸੈਟਿੰਗਾਂ ਲੋੜੀਂਦੀਆਂ ਹਨ। [//
 www.mediawiki.org/wiki/
 Manual:External_editors More
@@ -95,20 +117,19 @@ information.])',
 ਮਾਹਿਰਾਂ ਲਈ ਹੈ, ਤੁਹਾਡੇ ਕੰਪਿਊਟਰ ਤੇ ਖ਼ਾਸ
 ਸੈਟਿੰਗਾਂ ਲੋੜੀਂਦੀਆਂ ਹਨ। [//
 www.mediawiki.org/wiki/
-Manual:External_editors More
-information.])',
+Manual:External_editors ਹੋਰ ਜਾਣਕਾਰੀ।])',
 'tog-showjumplinks' => '"ਇਸ ਤੇ ਜਾਓ" ਦੇ ਲਿੰਕ ਦਿਖਾਣਾ ਸਮਰੱਥ ਕਰੋ',
 'tog-uselivepreview' => 'ਸਿੱਧੀ ਝਲਕ ਵਰਤੋ (ਜਾਵਾਸਕ੍ਰਿਪਟ ਲੋੜੀਂਦੀ ਹੈ) (ਤਜਰਬੇਕਾਰੀ)',
 'tog-forceeditsummary' => 'ਜਦੋਂ ਮੈਂ ਖ਼ਾਲੀ ਸੋਧ ਸਾਰ ਦਾਖ਼ਲ ਕਰਾਂ ਤਾਂ ਮੈਨੂੰ ਖ਼ਬਰਦਾਰ ਕਰੋ',
 'tog-watchlisthideown' => 'ਮੇਰੀ ਵਾਚ-ਲਿਸਟ ਵਿੱਚੋਂ ਮੇਰੀਆਂ ਸੋਧਾਂ ਹਟਾਓ',
 'tog-watchlisthidebots' => 'ਮੇਰੀ ਵਾਚ-ਲਿਸਟ ਵਿੱਚੋਂ ਰੋਬਾਟ ਦਿਆਂ ਸੋਧਾਂ ਹਟਾਓ',
 'tog-watchlisthideminor' => 'ਛੋਟੇ ਸੋਧ ਵਾਚ-ਲਿਸਟ ਤੋਂ ਓਹਲੇ ਰੱਖੋ',
-'tog-watchlisthideliu' => 'ਨਿà¨\97ਰਾਨà©\80-ਲਿਸà¨\9f à¨µà¨¿à¨\9aà©\8bà¨\82 à¨²à¨¾à¨\97 à¨\87ਨ à¨\95à©\80ਤà©\87 à¨®à©\88à¨\82ਬਰਾà¨\82 à¨¦à©\80à¨\86à¨\82 à¨¸à©\8bਧਾà¨\82 ਲੁਕਾਓ',
-'tog-watchlisthideanons' => 'ਨਿਗਰਾਨੀ-ਲਿਸਟ ਵਿਚ ਗੁਮਨਾਮ ਮੈਂਬਰਾਂ ਦੀਆਂ ਕੀਤੀਆਂ ਸੋਧਾਂ ਲੁਕਾਓ',
+'tog-watchlisthideliu' => 'ਨਿà¨\97ਰਾਨà©\80-ਲਿਸà¨\9f à¨µà¨¿à¨\9aà©\8bà¨\82 à¨²à¨¾à¨\97 à¨\87ਨ à¨®à©\88à¨\82ਬਰਾà¨\82 à¨¦à©\87 à¨\95à©\80ਤà©\87 à¨«à©\87ਰ-ਬਦਲ ਲੁਕਾਓ',
+'tog-watchlisthideanons' => 'ਨਿਗਰਾਨੀ-ਲਿਸਟ ਵਿਚੋਂ ਗੁਮਨਾਮ ਮੈਂਬਰਾਂ ਦੇ ਕੀਤੇ ਫੇਰ-ਬਦਲ ਲੁਕਾਓ',
 'tog-watchlisthidepatrolled' => 'ਵੇਖੀਆਂ ਜਾ ਚੁੱਕੀਆਂ ਸੋਧਾਂ ਨਿਗਰਾਨੀ-ਲਿਸਟ ਵਿਚੋਂ ਲੁਕਾਓ',
 'tog-ccmeonemails' => 'ਜੋ ਈ-ਮੇਲਾਂ ਮੈਂ ਦੂਜੇ ਮੈਂਬਰਾਂ ਨੂੰ ਭੇਜਦਾ ਹਾਂ ਓਹਨਾਂ ਦੀਆਂ ਨਕਲਾਂ ਮੈਨੂੰ ਭੇਜੋ',
 'tog-diffonly' => 'ਫ਼ਰਕਾਂ ਤੋਂ ਹੇਠ ਸਫ਼ੇ ਦੀ ਸਮੱਗਰੀ ਨਾ ਵਖਾਓ',
-'tog-showhiddencats' => 'ਲà©\81à¨\95à©\80à¨\86à¨\82 à¨¸à¨¼à©\8dਰà©\87ਣੀਆਂ ਵਖਾਓ',
+'tog-showhiddencats' => 'ਲà©\81à¨\95à©\80à¨\86à¨\82 à¨\95à©\88à¨\9fà©\87à¨\97ਰੀਆਂ ਵਖਾਓ',
 'tog-norollbackdiff' => '"ਵਾਪਸ ਮੋੜੌ"ਅਮਲ ਵਿਚ ਲਿਆਣ ਬਾਦ ਫ਼ਰਕ ਨਾ ਦਿਖਾਓ',
 
 'underline-always' => 'ਹਮੇਸ਼ਾਂ',
@@ -178,10 +199,10 @@ information.])',
 'pagecategories' => '{{PLURAL:$1|ਕੈਟਾਗਰੀ|ਕੈਟਾਗਰੀਆਂ}}',
 'category_header' => 'ਕੈਟਾਗਰੀ "$1" ਵਿੱਚ ਲੇਖ',
 'subcategories' => 'ਸਬ-ਕੈਟਾਗਰੀਆਂ',
-'category-media-header' => 'à¨\95à©\88à¨\9fਾਗਰੀ "$1" ਵਿੱਚ ਮੀਡੀਆ',
-'category-empty' => "''à¨\87ਸ à¨\95à©\88à¨\9fਾà¨\97ਰà©\80 à¨µà¨¿à©±à¨\9a à¨\87ਸ à¨µà©\87ਲ਼à©\87 à¨\95à©\8bà¨\88 à¨µà©\80 à¨²à©\87à¨\96 ਜਾਂ ਮੀਡੀਆ ਨਹੀਂ ਹੈ।''",
+'category-media-header' => 'à¨\95à©\88à¨\9fà©\87ਗਰੀ "$1" ਵਿੱਚ ਮੀਡੀਆ',
+'category-empty' => "''à¨\87ਸ à¨\95à©\88à¨\9fà©\87à¨\97ਰà©\80 à¨µà¨¿à©±à¨\9a à¨\87ਸ à¨µà©\87ਲ਼à©\87 à¨\95à©\8bà¨\88 à¨µà©\80 à¨¸à¨«à¨¼à¨¾ ਜਾਂ ਮੀਡੀਆ ਨਹੀਂ ਹੈ।''",
 'hidden-categories' => '{{PLURAL:$1|ਲੁਕੀਵੀਂ ਸ਼੍ਰੇਣੀ|ਲੁਕਵੀਂਆਂ ਸ਼੍ਰੇਣੀਆਂ}}',
-'hidden-category-category' => 'ਲà©\81à¨\95à©\80à¨\86à¨\82 à¨¸à¨¼à©\8dਰà©\87ਣੀਆਂ',
+'hidden-category-category' => 'ਲà©\81à¨\95à©\80à¨\86à¨\82 à¨\95à©\88à¨\9fà©\87à¨\97ਰੀਆਂ',
 'category-subcat-count' => '{{ਕੁੱਲ $2 ਸ਼੍ਰੇਣੀਆਂ ਵਿਚੋਂ, PLURAL:$2|ਇਸ ਸ਼੍ਰੇਣੀ ਵਿਚ ਸਿਰਫ਼ ਹੇਠ ਲਿਖੀ ਸ਼੍ਰੇਣੀ ਹੈ| ਇਸ ਸ਼੍ਰੇਣੀ ਵਿਚ {{PLURAL:$1|ਉਪ ਸ਼੍ਰੇਣੀ ਹੈ|$1 ਉਪ-ਸ਼੍ਰੇਣੀਆਂ ਹਨ}}}}',
 'category-subcat-count-limited' => 'ਇਸ ਸ਼੍ਰੇਣੀ ਵਿਚ {{PLURAL:$1|ਉਪ-ਸ਼੍ਰੇਣੀ ਹੈ।|$1 ਉਪ-ਸ਼੍ਰੇਣੀਆਂ ਹਨ।}}',
 'category-article-count' => '{{PLURAL:$2|ਇਸ ਸ਼੍ਰੇਣੀ ਵਿਚ ਸਿਰਫ਼ ਇਹ ਸਫ਼ਾ ਹੈ|ਇਸ ਸ਼੍ਰੇਣੀ ਵਿਚ, ਕੁੱਲ $2 ਵਿਚੋਂ, ਇਹ {{PLURAL:$1|ਸਫ਼ਾ ਹੈ|$1 ਸਫ਼ੇ}} ਹਨ}}',
@@ -219,7 +240,7 @@ information.])',
 'vector-action-addsection' => 'ਮਜ਼ਮੂਨ ਜੋੜੋ',
 'vector-action-delete' => 'ਮਿਟਾਓ',
 'vector-action-move' => 'ਭੇਜੋ',
-'vector-action-protect' => 'ਸà©\81ਰੱà¨\96ਿà¨\85ਤ à¨¬à¨£à¨¾à¨\93',
+'vector-action-protect' => 'ਸà©\81ਰੱà¨\96ਿà¨\85ਤ à¨\95ਰà©\8b',
 'vector-action-undelete' => 'ਹਟਾਉਣਾ ਵਾਪਸ',
 'vector-action-unprotect' => 'ਸੁਰੱਖਿਆ ਬਦਲੋ',
 'vector-simplesearch-preference' => 'ਵਾਧੂ ਖੋਜ ਸਲਾਹਾਂ ਯੋਗ ਕਰੋ (ਸਿਰਫ਼ ਵਿਕਟਰ ਸਕਿੰਨ ਵਿਚ)',
@@ -458,7 +479,7 @@ Note that some pages may continue to be displayed as if you were still logged in
 'login' => 'ਲਾਗ ਇਨ',
 'nav-login-createaccount' => 'ਲਾਗ ਇਨ/ਖਾਤਾ ਬਣਾਓ',
 'loginprompt' => 'ਤੁਹਾਨੂੰ {{SITENAME}} ’ਤੇ ਲਾਗਇਨ ਕਰਨ ਲਈ ਕੂਕੀਜ਼ ਯੋਗ ਕਰਨੇ ਜ਼ਰੂਰੀ ਹਨ।',
-'userlogin' => 'ਲਾà¨\97 à¨\87ਨ/à¨\96ਾਤਾ à¨\96à©\8bਲà©\8dਹà©\8b',
+'userlogin' => 'ਲਾà¨\97 à¨\87ਨ/à¨\96ਾਤਾ à¨¬à¨£à¨¾à¨\93',
 'userloginnocreate' => 'ਲਾਗ ਇਨ',
 'logout' => 'ਲਾਗ ਆਉਟ',
 'userlogout' => 'ਲਾਗ ਆਉਟ',
@@ -466,7 +487,7 @@ Note that some pages may continue to be displayed as if you were still logged in
 'nologin' => 'ਖਾਤਾ ਨਹੀਂ ਹੈ? $1।',
 'nologinlink' => 'ਖਾਤਾ ਬਣਾਓ',
 'createaccount' => 'ਖਾਤਾ ਬਣਾਓ',
-'gotaccount' => "ਖਾਤਾ ਹੈ? '''$1'''।",
+'gotaccount' => 'ਖਾਤਾ ਹੈ? $1।',
 'gotaccountlink' => 'ਲਾਗ ਇਨ',
 'userlogin-resetlink' => 'ਆਪਣੀ ਲਾਗਇਨ ਜਾਣਕਾਰੀ ਭੁੱਲ ਗਏ ਹੋ?',
 'createaccountmail' => 'ਈਮੇਲ ਨਾਲ',
@@ -646,9 +667,9 @@ sysop}}|administrator]] ਨਾਲ਼ ਰਾਬਤਾ ਕਰ ਸਕਦੇ ਹੋ
 'accmailtitle' => 'ਪਾਸਵਰਡ ਭੇਜਿਆ।',
 'accmailtext' => '"$1" ਲਈ ਪਾਸਵਰਡ $2 ਨੂੰ ਭੇਜਿਆ ਗਿਆ।',
 'newarticle' => '(ਨਵਾਂ)',
-'newarticletext' => "ਤà©\81ਸà©\80à¨\82 à¨\95ਿਸà©\87 à¨\90ਸà©\87 à¨²à¨¿à©°à¨\95 à¨°à¨¾à¨¹à©\80à¨\82 à¨\87ਸ à¨¸à¨«à¨¼à©\87 â\80\99ਤà©\87 à¨ªà©\81ੱà¨\9cੇ ਹੋ ਜੋ ਹਾਲੇ ਬਣਾਇਆ ਨਹੀਂ ਗਿਆ।
-ਸਫ਼ਾ ਬਣਾਉਣ ਲਈ ਹੇਠ ਦਿੱਤੇ ਖ਼ਾਨੇ ਵਿਚ ਲਿਖਣਾ ਸ਼ੁਰੂ ਕਰੋ। (ਹੋਰ ਮਦਦ ਲਈ [[{{MediaWiki:Helppage}}|ਮਦਦ ਸਫ਼ਾ]] ਵੇਖੋ)
-à¨\9cà©\87 à¨¤à©\81ਸà©\80à¨\82 à¨\97਼ਲਤà©\80 à¨¨à¨¾à¨²à¨¼ à¨\87ੱਥà©\87 à¨\86à¨\8f à¨¹à©\8b à¨¤à¨¾à¨\82 à¨\86ਪਣà©\87 à¨¬à¨°à¨¾à¨\8aà¨\9c਼ਰ à¨¦à©\87 ''ਪਿੱà¨\9bà©\87'' (back) ਬਟਨ ’ਤੇ ਕਲਿੱਕ ਕਰੋ।",
+'newarticletext' => "ਤà©\81ਸà©\80à¨\82 à¨\95ਿਸà©\87 à¨\90ਸà©\87 à¨¸à¨«à¨¼à©\87 à¨¦à©\87 à¨²à¨¿à©°à¨\95 â\80\99ਤੇ ਹੋ ਜੋ ਹਾਲੇ ਬਣਾਇਆ ਨਹੀਂ ਗਿਆ।
+ਸਫ਼ਾ ਬਣਾਉਣ ਲਈ ਹੇਠ ਦਿੱਤੇ ਖ਼ਾਨੇ ਵਿਚ ਲਿਖਣਾ ਸ਼ੁਰੂ ਕਰੋ। (ਹੋਰ ਮਦਦ ਲਈ [[{{MediaWiki:Helppage}}|ਮਦਦ ਸਫ਼ਾ]] ਵੇਖੋ)
+à¨\9cà©\87 à¨¤à©\81ਸà©\80à¨\82 à¨\97਼ਲਤà©\80 à¨¨à¨¾à¨²à¨¼ à¨\87ੱਥà©\87 à¨\86à¨\8f à¨¹à©\8b à¨¤à¨¾à¨\82 à¨\86ਪਣà©\87 à¨¬à©\8dਰਾà¨\8aà¨\9c਼ਰ à¨¦à©\87 '''ਪਿੱà¨\9bà©\87''' ਬਟਨ ’ਤੇ ਕਲਿੱਕ ਕਰੋ।",
 'anontalkpagetext' => "----''ਇਹ ਇਕ ਗੁਮਨਾਮ ਮੈਂਬਰ ਲਈ ਇਕ ਚਰਚਾ ਸਫ਼ਾ ਹੈ ਜਿਸਨੇ ਹਾਲੇ ਖਾਤਾ ਨਹੀ ਬਣਾਇਆ ਜਾਂ ਉਸਨੂੰ ਵਰਤ ਨਹੀਂ ਰਿਹਾ।
 ਇਸ ਵਾਸਤੇ ਸਾਡੇ ਕੋਲ ਉਸਨੂੰ ਪਛਾਨਣ ਲਈ IP ਪਤਾ ਹੈ।
 ਇਕ IP ਪਤਾ ਕਈ ਵਰਤਣ ਵਾਲ਼ਿਆਂ ਦੁਆਰਾ ਸਾਂਝਾ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ।
@@ -672,7 +693,7 @@ sysop}}|administrator]] ਨਾਲ਼ ਰਾਬਤਾ ਕਰ ਸਕਦੇ ਹੋ
 '''ਇਹ ਹਾਲੇ ਸਾਂਭੀ ਨਹੀਂ ਗਈ ਹੈ!'''",
 'updated' => '(ਅੱਪਡੇਟ)',
 'note' => "'''ਨੋਟ:'''",
-'previewnote' => 'ਯਾਦ ਰੱਖੋ ਇਹ ਸਿਰਫ਼ ਇੱਕ ਝਲਕ ਹੈ; ਤੁਹਾਡੀਆਂ ਤਬਦੀਲੀਆਂ ਹਾਲੇ ਸਾਂਭੀਆਂ ਨਹੀਂ ਗਈਆਂ!',
+'previewnote' => "'''ਯਾਦ ਰੱਖੋ ਇਹ ਸਿਰਫ਼ ਇਕ ਝਲਕ ਹੈ।''' ਤੁਹਾਡੀਆਂ ਤਬਦੀਲੀਆਂ ਹਾਲੇ ਸਾਂਭੀਆਂ ਨਹੀਂ ਗਈਆਂ!",
 'continue-editing' => 'ਸੋਧਣਾ ਜਾਰੀ ਰੱਖੋ',
 'previewconflict' => 'ਇਹ ਝਲਕ ਲਿਖਤ ਦਾ ਓਹ ਅਕਸ ਪੇਸ਼ ਕਰਦੀ ਹੈ ਜਿਵੇਂ ਓਹ ਤੁਹਾਡੇ ਸਾਂਭੇ ਜਾਣ ਤੋਂ ਬਾਅਦ ਦਿੱਸੇਗਾ।',
 'editing' => '$1 ਸੋਧਿਆ ਜਾ ਰਿਹਾ ਹੈ',
@@ -700,8 +721,8 @@ sysop}}|administrator]] ਨਾਲ਼ ਰਾਬਤਾ ਕਰ ਸਕਦੇ ਹੋ
 'templatesusedsection' => 'ਇਹ ਸ਼ੈਕਸ਼ਨ ਵਿੱਚ ਟੈਪਲੇਟ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ:',
 'template-protected' => '(ਸੁਰੱਖਿਅਤ)',
 'template-semiprotected' => '(ਨੀਮ-ਸੁਰੱਖਿਅਤ)',
-'hiddencategories' => 'ਇਹ ਸਫ਼ਾ {{PLURAL:$1|1 ਲੁਕਵੀਂ ਸ਼੍ਰੇਣੀ|
-$1 à¨²à©\81à¨\95ਵà©\80à¨\86à¨\82 à¨¸à¨¼à©\8dਰà©\87ਣੀਆਂ}} ਦਾ ਮੈਂਬਰ ਹੈ:',
+'hiddencategories' => 'ਇਹ ਸਫ਼ਾ {{PLURAL:$1|੧ ਲੁਕਵੀਂ ਕੈਟੇਗਰੀ|
+$1 à¨²à©\81à¨\95ਵà©\80à¨\86à¨\82 à¨\95à©\88à¨\9fà©\87à¨\97ਰੀਆਂ}} ਦਾ ਮੈਂਬਰ ਹੈ:',
 'nocreatetitle' => 'ਸਫ਼ਾ ਬਣਾਉਣ ਦੀ ਹੱਦ ਹੈ',
 'nocreatetext' => '{{SITENAME}} ਨੇ ਨਵੇਂ ਸਫ਼ੇ ਬਣਾਉਣ ਤੇ ਰੋਕ ਲਾਈ ਹੋਈ ਹੈ।
 ਤੁਸੀਂ ਵਾਪਸ ਜਾ ਕੇ ਮੌਜੂਦਾ ਸਫ਼ੇ ਸੋਧ ਸਕਦੇ ਹੋ ਜਾਂ [[Special:UserLogin|ਲਾਗਇਨ ਜਾਂ ਖਾਤਾ ਬਣਾ]] ਸਕਦੇ ਹੋ।',
@@ -710,7 +731,7 @@ $1 ਲੁਕਵੀਆਂ ਸ਼੍ਰੇਣੀਆਂ}} ਦਾ ਮੈਂਬਰ 
 'permissionserrorstext' => 'ਤੁਹਾਨੂੰ ਇੰਝ ਕਰਨ ਦੇ ਅਧਿਕਾਰ ਨਹੀਂ ਹਨ। ਹੇਠ ਦਿੱਤੇ {{PLURAL:$1|ਕਾਰਨ|ਕਾਰਨ}} ਨੇ:',
 'permissionserrorstext-withaction' => '{{PLURAL:$1|ਇਸ ਕਾਰਨ|ਇਹਨਾਂ ਕਾਰਨਾਂ}} ਕਰਕੇ ਤੁਹਾਨੂੰ $2 ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ:',
 'recreate-moveddeleted-warn' => "'''ਖ਼ਬਰਦਾਰ:
-ਤੁਸੀਂ ਐਸਾ ਸਫ਼ਾ ਬਣਾ ਰਹੇ ਹੋ ਜੋ ਪਹਿਲਾਂ ਮਿਟਾਇਆ ਜਾ ਚੁੱਕ ਹੈ।'''
+ਤੁਸੀਂ ਐਸਾ ਸਫ਼ਾ ਬਣਾ ਰਹੇ ਹੋ ਜੋ ਪਹਿਲਾਂ ਮਿਟਾਇਆ ਜਾ ਚੁੱਕ ਹੈ।'''
 
 ਖ਼ਿਆਲ ਕਰੋ ਕਿ ਕੀ ਇਸ ਸਫ਼ੇ ਦਾ ਕਾਇਮ ਰਹਿਣਾ ਠੀਕ ਹੈ।
 ਇਸਨੂੰ ਮਿਟਾਉਣ ਜਾਂ ਸਿਰਲੇਖ ਬਦਲੀ ਦਾ ਚਿੱਠਾ ਹੇਠਾਂ ਦਿੱਤਾ ਗਿਆ ਹੈ।",
@@ -764,7 +785,7 @@ $3 ਨੇ ਕਾਰਨ ਇਹ ਦੱਸਿਆ ਹੈ, ''$2''",
 '''({{int:cur}})''' = ਨਵੇਂ ਰੀਵਿਜ਼ਨ ਨਾਲ਼ੋਂ ਫ਼ਰਕ, '''({{int:last}})''' = ਆਖ਼ਰੀ ਰੀਵਿਜ਼ਨ ਨਾਲ਼ੋਂ ਫ਼ਰਕ, '''({{int:minoreditletter}})''' = ਛੋਟੀ ਸੋਧ।",
 'history-fieldset-title' => 'ਅਤੀਤ ’ਤੇ ਨਜ਼ਰ ਮਾਰੋ',
 'history-show-deleted' => 'ਸਿਰਫ਼ ਮਿਟਾਏ ਗਏ',
-'histfirst' => 'ਸਭ ਤੋਂ ਪਹਿਲਾ',
+'histfirst' => 'ਸਭ ਤੋਂ ਪਹਿਲਾਂ ਦੇ',
 'histlast' => 'ਸਭ ਤੋਂ ਨਵਾਂ',
 'historysize' => '($1 ਬਾਈਟ)',
 'historyempty' => '(ਖਾਲੀ)',
@@ -855,7 +876,7 @@ page={{FULLPAGENAMEE}}}} ਜ਼ਬਤੀ ਦੇ ਚਿੱਠੇ] ਵਿਚ ਵ
 'mergelogpagetext' => 'ਹੇਠਾਂ ਇੱਕ ਸਫ਼ੇ ਦੇ ਅਤੀਤ ਨੂੰ ਦੂਜੇ ਦੇ ਅਤੀਤ ਵਿਚ ਰਲ਼ਾਉਣ ਦੀ ਸਭ ਤੋਂ ਤਾਜ਼ਾ ਲਿਸਟ ਹੈ।',
 
 # Diffs
-'history-title' => '"$1" à¨¦à©\87 à¨°à©\80ਵਿà¨\9c਼ਨ à¨¦à¨¾ à¨\85ਤà©\80ਤ',
+'history-title' => '"$1" à¨¦à©\87 à¨\85ਤà©\80ਤ à¨°à©\80ਵਿà¨\9c਼ਨ',
 'difference-title' => '"$1" ਦੇ ਰੀਵਿਜ਼ਨਾਂ ਵਿਚ ਫ਼ਰਕ',
 'difference-title-multipage' => 'ਸਫ਼ਿਆਂ "$1" ਅਤੇ "$2" ਵਿਚ ਫ਼ਰਕ',
 'difference-multipage' => '(ਦੋ ਸਫ਼ਿਆਂ ਵਿਚਕਾਰ ਫ਼ਰਕ)',
@@ -897,6 +918,7 @@ page={{FULLPAGENAMEE}}}} ਜ਼ਬਤੀ ਦੇ ਚਿੱਠੇ] ਵਿਚ ਵ
 '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-redirect' => '($1 ਰੀ-ਡਿਰੈਕਟ)',
 'search-section' => '(ਭਾਗ $1)',
 'search-suggest' => 'ਕੀ ਤੁਹਾਡਾ ਮਤਲਬ ਸੀ: $1',
@@ -1077,7 +1099,7 @@ $3|'''1''' ਨਤੀਜਾ|'''$3''' ਨਤੀਜੇ}} ਵਖਾਓ।",
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'ਇਹ ਸਫ਼ਾ ਪੜ੍ਹਨ',
-'action-edit' => 'à¨\87ਹ à¨¸à¨«à¨¼à¨¾ à¨¸à©\8bਧੋ',
+'action-edit' => 'à¨\87ਹ à¨¸à¨«à¨¼à©\87 â\80\99à¨\9a à¨«à©\87ਰ-ਬਦਲ à¨\95ਰੋ',
 'action-createpage' => 'ਸਫ਼ੇ ਬਣਾਉਣ',
 'action-createtalk' => 'ਚਰਚਾ ਸਫ਼ੇ ਬਣਾਉਣ',
 'action-createaccount' => 'ਮੈਂਬਰ ਖਾਤਾ ਬਣਾਉਣ',
@@ -1149,7 +1171,7 @@ to upload files.',
 'upload-recreate-warning' => "'''ਖ਼ਬਰਦਾਰ: ਇਸ ਨਾਮ ਦੀ ਫ਼ਾਈਲ ਮਿਟਾਈ ਜਾਂ ਹੋਰ ਨਾਮ ਤੇ ਭੇਜੀ ਜਾ ਚੁੱਕੀ ਹੈ।'''
 ਮਿਟਾਉਣ ਅਤੇ ਭੇਜੇ ਜਾਣ ਦਾ ਚਿੱਠਾ ਸਹੂਲਤ ਲਈ ਇੱਥੇ ਦਿੱਤਾ ਗਿਆ ਹੈ:",
 'uploadlog' => 'ਅੱਪਲੋਡ ਲਾਗ',
-'uploadlogpage' => 'ਅੱਪਲੋਡ ਦਾ ਚਿੱਠਾ',
+'uploadlogpage' => 'ਅੱਪਲੋਡਾਂ ਦਾ ਚਿੱਠਾ',
 'filename' => 'ਫਾਇਲ ਨਾਂ',
 'filedesc' => 'ਸਾਰ',
 'fileuploadsummary' => 'ਸੰਖੇਪ:',
@@ -1208,7 +1230,7 @@ to upload files.',
 'upload-curl-error28' => 'ਅੱਪਲੋਡ ਟਾਈਮ-ਆਉਟ',
 
 'license' => 'ਲਾਈਸੈਂਸਿੰਗ:',
-'license-header' => 'ਲਾà¨\88ਸੰਸ',
+'license-header' => 'ਲਾà¨\88ਸà©\88à¨\82ਸ',
 'nolicense' => 'ਕੁਝ ਵੀ ਚੁਣਿਆ',
 'license-nopreview' => '(ਝਲਕ ਉਪਲੱਬਧ ਨਹੀਂ)',
 'upload_source_file' => ' (ਤੁਹਾਡੇ ਕੰਪਿਊਟਰ ਉੱਤੇ ਇੱਕ ਫਾਇਲ)',
@@ -1318,6 +1340,8 @@ to upload files.',
 'statistics-users-active-desc' => 'ਮੈਂਬਰ, ਜਿੰਨ੍ਹਾ ਨੇ ਆਖ਼ਰੀ {{PLURAL:$1|ਦਿਨ|$1 ਦਿਨਾਂ}} ਵਿਚ ਕੋਈ ਕੰਮ ਕੀਤਾ ਹੈ।',
 'statistics-mostpopular' => 'ਸਭ ਤੋਂ ਵੱਧ ਵੇਖੇ ਪੇਜ',
 
+'disambiguationspage' => 'ਗੁੰਝਲ ਖੋਲ੍ਹ',
+
 'doubleredirects' => 'ਦੋਹਰੇ ਰੀਡਿਰੈਕਟ',
 
 'brokenredirectstext' => 'ਇਹ ਰਿਡਿਰੈਕਟ ਨਾ-ਮੌਜੂਦ ਸਫ਼ਿਆਂ ’ਤੇ ਜੋੜਦੇ ਹਨ:',
@@ -1357,7 +1381,7 @@ to upload files.',
 'prefixindex' => 'ਇਸ ਅਗੇਤਰ ਵਾਲ਼ੇ ਸਾਰੇ ਸਫ਼ੇ',
 'shortpages' => 'ਛੋਟੇ ਪੇਜ',
 'listusers' => 'ਯੂਜ਼ਰ ਲਿਸਟ',
-'usercreated' => '$1 à¨¨à©\82à©° $2 â\80\99ਤà©\87 {{GENDER:$3|ਰà¨\9aਿਆ}}',
+'usercreated' => '$1 à¨¨à©\82à©° $2 â\80\99ਤà©\87 {{GENDER:$3|ਬਣਾà¨\87ਆ}}',
 'newpages' => 'ਨਵੇਂ ਸਫ਼ੇ',
 'newpages-username' => 'ਯੂਜ਼ਰ ਨਾਂ:',
 'ancientpages' => 'ਸਭ ਤੋਂ ਪੁਰਾਣੇ ਪੇਜ',
@@ -1526,7 +1550,7 @@ $1|ਤਬਦੀਲੀ ਹੋਈ|'''$1''' ਤਬਦੀਲੀਆਂ ਹੋਈਆ
 'actionfailed' => 'ਕਾਰਵਾਈ ਨਾਕਾਮ',
 'deletedtext' => '"$1" ਮਿਟਾਇਆ ਜਾ ਚੁੱਕਾ ਹੈ।
 ਤਾਜ਼ੀਆਂ ਮਿਟਾਉਣਾਂ ਦੇ ਰਿਕਾਰਡ ਲਈ $2 ਵੇਖੋ।',
-'dellogpage' => 'ਮਿਟਾਉਣ ਦਾ ਚਿੱਠਾ',
+'dellogpage' => 'ਮਿਟਾਉਣਾਂ ਦਾ ਚਿੱਠਾ',
 'dellogpagetext' => 'ਹੇਠਾਂ ਸਭ ਤੋਂ ਤਾਜ਼ਾ ਮਿਟਾਉਣਾਂ ਦੀ ਲਿਸਟ ਹੈ।',
 'deletionlog' => 'ਮਿਟਾਉਣਾਂ ਦਾ ਚਿੱਠਾ',
 'deletecomment' => 'ਕਾਰਨ:',
@@ -1636,17 +1660,17 @@ delete|ਮਿਟਾਉਣਾਂ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 'sp-contributions-blocked-notice-anon' => 'ਇਹ IP ਪਤਾ ਇਸ ਵੇਲ਼ੇ ਪਾਬੰਦੀਸ਼ੁਦਾ ਹੈ।
 ਪਾਬੰਦੀ ਚਿੱਠੇ ਦਾ ਤਾਜ਼ਾ ਦਾਖ਼ਲਾ ਹਵਾਲੇ ਲਈ ਹੇਠਾਂ ਦਿੱਤਾ ਗਿਆ ਹੈ:',
 'sp-contributions-search' => 'ਯੋਗਦਾਨ ਖੋਜੋ',
-'sp-contributions-username' => 'IP à¨ªà¨¤à¨¾ à¨\9cਾà¨\82 à¨¯à©\82à¨\9c਼ਰ à¨¨à¨¾à¨\82:',
+'sp-contributions-username' => 'IP à¨ªà¨¤à¨¾ à¨\9cਾà¨\82 à¨¯à©\82à¨\9c਼ਰ à¨¨à¨¾à¨®:',
 'sp-contributions-toponly' => 'ਸਿਰਫ਼ ਉਹੀ ਸੋਧਾਂ ਵਖਾਓ ਜੋ ਸਭ ਤੋਂ ਨਵੀਂਆਂ ਹਨ',
 'sp-contributions-submit' => 'ਖੋਜੋ',
 
 # What links here
 'whatlinkshere' => 'ਕਿਹੜੇ (ਸਫ਼ੇ) ਇੱਥੇ ਜੋੜਦੇ ਹਨ',
-'whatlinkshere-title' => '$1 à¨¨à¨¾à¨²à¨¼ à¨\9cà©\8bà©\9cਦੇ ਸਫ਼ੇ',
+'whatlinkshere-title' => '$1 à¨¨à¨¾à¨²à¨¼ à¨\9cà©\8bà©\9cਨ à¨µà¨¾à¨²à¨¼ੇ ਸਫ਼ੇ',
 'whatlinkshere-page' => 'ਸਫਾ:',
 'linkshere' => "ਇਹ ਸਫ਼ੇ '''[[:$1]]''' ਨਾਲ਼ ਜੋੜਦੇ ਹਨ:",
 'nolinkshere' => "ਕੋਈ ਵੀ ਸਫ਼ਾ '''[[:$1]]''' ਨਾਲ਼ ਨਹੀਂ ਜੋੜਦਾ।",
-'isredirect' => 'ਰੀ-ਡਿਰੈਕਟ ਸਫ਼ਾ',
+'isredirect' => 'ਰੀਡਿਰੈਕਟ ਸਫ਼ਾ',
 'istemplate' => 'ਟਾਕਰਾ ਕਰੋ',
 'isimage' => 'ਫ਼ਾਈਲ ਦਾ ਲਿੰਕ',
 'whatlinkshere-prev' => '{{PLURAL:$1|ਪਿਛਲਾ|ਪਿਛਲੇ $1}}',
@@ -1746,7 +1770,7 @@ delete|ਮਿਟਾਉਣਾਂ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 ਮਿਹਰਬਾਨੀ ਕਰਕੇ ਕੋਈ ਹੋਰ ਨਾਮ ਚੁਣੋ।',
 'movedto' => 'ਮੂਵ ਕੀਤਾ',
 'movepage-page-moved' => 'ਸਫ਼ਾ $1 ਨੂੰ $2 ’ਤੇ ਭੇਜਿਆ ਜਾ ਚੁੱਕਾ ਹੈ।',
-'movelogpage' => 'ਭà©\87à¨\9cà©\87 à¨\9cਾਣ ਦਾ ਚਿੱਠਾ',
+'movelogpage' => 'ਸਿਰਲà©\87à¨\96 à¨¬à¨¦à¨²à©\80 ਦਾ ਚਿੱਠਾ',
 'movereason' => 'ਕਾਰਨ:',
 'revertmove' => 'ਰੱਦ ਕਰੋ',
 'delete_and_move' => 'ਹਟਾਓ ਅਤੇ ਮੂਵ ਕਰੋ',
@@ -1843,7 +1867,7 @@ delete|ਮਿਟਾਉਣਾਂ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 'tooltip-ca-nstab-template' => 'ਸਾਂਚਾ ਵੇਖੋ',
 'tooltip-ca-nstab-help' => 'ਮੱਦਦ ਪੇਜ ਵੇਖੋ',
 'tooltip-ca-nstab-category' => 'ਕੈਟਾਗਰੀ ਸਫ਼ਾ ਵੇਖੋ',
-'tooltip-minoredit' => 'à¨\87ਸ â\80\99ਤà©\87 à¨\9bà©\8bà¨\9fà©\80 à¨¤à¨¬à¨¦à¨²à©\80 à¨¦à©\87 à¨¤à©\8cਰ â\80\99ਤà©\87 ਨਿਸ਼ਾਨ ਲਾਓ',
+'tooltip-minoredit' => 'à¨\87ਸ â\80\99ਤà©\87 à¨¬à¨¤à©\8cਰ à¨\9bà©\8bà¨\9fà©\80 à¨¤à¨¬à¨¦à©\80ਲà©\80 ਨਿਸ਼ਾਨ ਲਾਓ',
 'tooltip-save' => 'ਆਪਣੀਆਂ ਤਬਦੀਲੀਆਂ ਸਾਂਭੋ',
 'tooltip-preview' => 'ਆਪਣੀ ਤਬਦੀਲੀ ਦੀ ਝਲਕ ਵੇਖੋ, ਸਾਂਭਣ ਤੋਂ ਪਹਿਲਾਂ ਇਹ ਵਰਤੋਂ!',
 'tooltip-diff' => 'ਤੁਹਾਡੇ ਦੁਆਰਾ ਲਿਖਤ ਵਿਚ ਕੀਤੀਆਂ ਤਬਦੀਲੀਆਂ ਵਖਾਉਂਦਾ ਹੈ',
@@ -1868,9 +1892,9 @@ delete|ਮਿਟਾਉਣਾਂ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 'spamprotectiontitle' => 'Spam ਸੁਰੱਖਿਆ ਫਿਲਟਰ',
 
 # Info page
-'pageinfo-header-edits' => 'ਸੋਧਾਂ',
-'pageinfo-watchers' => 'ਨà¨\9c਼ਰ à¨°à©±à¨\96ਣ à¨µà¨¾à¨²à¨¼à¨¿à¨\86à¨\82 à¨¦à©\80 à¨\97ਿਣਤà©\80',
-'pageinfo-edits' => 'ਸà©\8bਧਾà¨\82 à¨¦à©\80 à¨\97ਿਣਤà©\80',
+'pageinfo-header-edits' => 'ਸੋਧਾਂ ਦਾ ਅਤੀਤ',
+'pageinfo-watchers' => 'ਸਫ਼à©\87 â\80\99ਤà©\87 à¨¨à¨\9c਼ਰ à¨°à©±à¨\96ਣ à¨µà¨¾à¨²à¨¼à©\87',
+'pageinfo-edits' => 'à¨\95à©\81ੱਲ à¨¸à©\8bਧਾà¨\82',
 
 # Skin names
 'skinname-standard' => 'ਕਲਾਸਿਕ',
index ed9dac2..5c454f2 100644 (file)
@@ -206,90 +206,90 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#PATRZ', '#PRZEKIERUJ', '#TAM', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__BEZSPISU__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__BEZGALERII__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__ZESPISEM__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__SPIS__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__BEZEDYCJISEKCJI__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '__BEZNAGŁÓWKA__', '__NOHEADER__' ),
-       'currentday'              => array( '1', 'AKTUALNYDZIEŃ', 'CURRENTDAY' ),
-       'currentdayname'          => array( '1', 'NAZWADNIA', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'AKTUALNYROK', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'AKTUALNYCZAS', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'AKTUALNAGODZINA', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'MIESIĄC', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonthname'          => array( '1', 'MIESIĄCNAZWA', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'MIESIĄCNAZWAD', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'MIESIĄCNAZWASKR', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'DZIEŃ', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'DZIEŃ2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'DZIEŃTYGODNIA', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'ROK', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'CZAS', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'GODZINA', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'STRON', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'ARTYKUŁÓW', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'PLIKÓW', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'UŻYTKOWNIKÓW', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'LICZBAAKTYWNYCHUŻYTKOWNIKÓW', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'EDYCJI', 'NUMBEROFEDITS' ),
-       'pagename'                => array( '1', 'NAZWASTRONY', 'PAGENAME' ),
-       'namespace'               => array( '1', 'NAZWAPRZESTRZENI', 'NAMESPACE' ),
-       'talkspace'               => array( '1', 'DYSKUSJA', 'TALKSPACE' ),
-       'fullpagename'            => array( '1', 'PELNANAZWASTRONY', 'FULLPAGENAME' ),
-       'subpagename'             => array( '1', 'NAZWAPODSTRONY', 'SUBPAGENAME' ),
-       'basepagename'            => array( '1', 'BAZOWANAZWASTRONY', 'BASEPAGENAME' ),
-       'talkpagename'            => array( '1', 'NAZWASTRONYDYSKUSJI', 'TALKPAGENAME' ),
-       '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' ),
-       'img_left'                => array( '1', 'lewo', 'left' ),
-       '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_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' ),
-       'img_bottom'              => array( '1', 'dół', 'bottom' ),
-       'sitename'                => array( '1', 'PROJEKT', 'SITENAME' ),
-       'ns'                      => array( '0', 'PN:', 'NS:' ),
-       'articlepath'             => array( '0', 'ŚCIEŻKAARTYKUŁÓW', 'ARTICLEPATH' ),
-       'server'                  => array( '0', 'SERWER', 'SERVER' ),
-       'servername'              => array( '0', 'NAZWASERWERA', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'ŚCIEŻKASKRYPTU', 'SCRIPTPATH' ),
-       'grammar'                 => array( '0', 'ODMIANA:', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'PŁEĆ:', 'GENDER:' ),
-       'currentweek'             => array( '1', 'AKTUALNYTYDZIEŃ', 'CURRENTWEEK' ),
-       'localweek'               => array( '1', 'TYDZIEŃROKU', 'LOCALWEEK' ),
-       'localdow'                => array( '1', 'DZIEŃTYGODNIANR', 'LOCALDOW' ),
-       'plural'                  => array( '0', 'MNOGA:', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'PEŁNYURL', 'FULLURL:' ),
-       'lcfirst'                 => array( '0', 'ZMAŁEJ:', 'LCFIRST:' ),
-       'ucfirst'                 => array( '0', 'ZWIELKIEJ:', 'ZDUŻEJ:', 'UCFIRST:' ),
-       'lc'                      => array( '0', 'MAŁE:', 'LC:' ),
-       'uc'                      => array( '0', 'WIELKIE:', 'DUŻE:', 'UC:' ),
-       'displaytitle'            => array( '1', 'WYŚWIETLANYTYTUŁ', 'DISPLAYTITLE' ),
-       'newsectionlink'          => array( '1', '__LINKNOWEJSEKCJI__', '__NEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', 'AKTUALNAWERSJA', 'CURRENTVERSION' ),
-       'language'                => array( '0', '#JĘZYK:', '#LANGUAGE:' ),
-       'numberofadmins'          => array( '1', 'ADMINISTRATORÓW', 'NUMBEROFADMINS' ),
-       'padleft'                 => array( '0', 'DOLEWEJ', 'PADLEFT' ),
-       'padright'                => array( '0', 'DOPRAWEJ', 'PADRIGHT' ),
-       'special'                 => array( '0', 'specjalna', 'special' ),
-       'defaultsort'             => array( '1', 'DOMYŚLNIESORTUJ', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'filepath'                => array( '0', 'ŚCIEŻKAPLIKU', 'FILEPATH:' ),
-       'hiddencat'               => array( '1', '__KATEGORIAUKRYTA__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'STRONYWKATEGORII', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'ROZMIARSTRONY', 'PAGESIZE' ),
-       'index'                   => array( '1', '__INDEKSUJ__', '__INDEX__' ),
-       'noindex'                 => array( '1', '__NIEINDEKSUJ__', '__NOINDEX__' ),
-       'protectionlevel'         => array( '1', '__POZIOMZABEZPIECZEŃ__', 'PROTECTIONLEVEL' ),
-       'url_path'                => array( '0', 'ŚCIEŻKA', 'PATH' ),
-       'url_query'               => array( '0', 'ZAPYTANIE', 'QUERY' ),
+       'redirect'                  => array( '0', '#PATRZ', '#PRZEKIERUJ', '#TAM', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__BEZSPISU__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__BEZGALERII__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__ZESPISEM__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__SPIS__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__BEZEDYCJISEKCJI__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '__BEZNAGŁÓWKA__', '__NOHEADER__' ),
+       'currentday'                => array( '1', 'AKTUALNYDZIEŃ', 'CURRENTDAY' ),
+       'currentdayname'            => array( '1', 'NAZWADNIA', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'AKTUALNYROK', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'AKTUALNYCZAS', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'AKTUALNAGODZINA', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'MIESIĄC', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonthname'            => array( '1', 'MIESIĄCNAZWA', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'MIESIĄCNAZWAD', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'MIESIĄCNAZWASKR', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'DZIEŃ', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'DZIEŃ2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'DZIEŃTYGODNIA', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'ROK', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'CZAS', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'GODZINA', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'STRON', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'ARTYKUŁÓW', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'PLIKÓW', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'UŻYTKOWNIKÓW', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'LICZBAAKTYWNYCHUŻYTKOWNIKÓW', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'EDYCJI', 'NUMBEROFEDITS' ),
+       'pagename'                  => array( '1', 'NAZWASTRONY', 'PAGENAME' ),
+       'namespace'                 => array( '1', 'NAZWAPRZESTRZENI', 'NAMESPACE' ),
+       'talkspace'                 => array( '1', 'DYSKUSJA', 'TALKSPACE' ),
+       'fullpagename'              => array( '1', 'PELNANAZWASTRONY', 'FULLPAGENAME' ),
+       'subpagename'               => array( '1', 'NAZWAPODSTRONY', 'SUBPAGENAME' ),
+       'basepagename'              => array( '1', 'BAZOWANAZWASTRONY', 'BASEPAGENAME' ),
+       'talkpagename'              => array( '1', 'NAZWASTRONYDYSKUSJI', 'TALKPAGENAME' ),
+       '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' ),
+       'img_left'                  => array( '1', 'lewo', 'left' ),
+       '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_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' ),
+       'img_bottom'                => array( '1', 'dół', 'bottom' ),
+       'sitename'                  => array( '1', 'PROJEKT', 'SITENAME' ),
+       'ns'                        => array( '0', 'PN:', 'NS:' ),
+       'articlepath'               => array( '0', 'ŚCIEŻKAARTYKUŁÓW', 'ARTICLEPATH' ),
+       'server'                    => array( '0', 'SERWER', 'SERVER' ),
+       'servername'                => array( '0', 'NAZWASERWERA', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'ŚCIEŻKASKRYPTU', 'SCRIPTPATH' ),
+       'grammar'                   => array( '0', 'ODMIANA:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'PŁEĆ:', 'GENDER:' ),
+       'currentweek'               => array( '1', 'AKTUALNYTYDZIEŃ', 'CURRENTWEEK' ),
+       'localweek'                 => array( '1', 'TYDZIEŃROKU', 'LOCALWEEK' ),
+       'localdow'                  => array( '1', 'DZIEŃTYGODNIANR', 'LOCALDOW' ),
+       'plural'                    => array( '0', 'MNOGA:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'PEŁNYURL', 'FULLURL:' ),
+       'lcfirst'                   => array( '0', 'ZMAŁEJ:', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', 'ZWIELKIEJ:', 'ZDUŻEJ:', 'UCFIRST:' ),
+       'lc'                        => array( '0', 'MAŁE:', 'LC:' ),
+       'uc'                        => array( '0', 'WIELKIE:', 'DUŻE:', 'UC:' ),
+       'displaytitle'              => array( '1', 'WYŚWIETLANYTYTUŁ', 'DISPLAYTITLE' ),
+       'newsectionlink'            => array( '1', '__LINKNOWEJSEKCJI__', '__NEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'AKTUALNAWERSJA', 'CURRENTVERSION' ),
+       'language'                  => array( '0', '#JĘZYK:', '#LANGUAGE:' ),
+       'numberofadmins'            => array( '1', 'ADMINISTRATORÓW', 'NUMBEROFADMINS' ),
+       'padleft'                   => array( '0', 'DOLEWEJ', 'PADLEFT' ),
+       'padright'                  => array( '0', 'DOPRAWEJ', 'PADRIGHT' ),
+       'special'                   => array( '0', 'specjalna', 'special' ),
+       'defaultsort'               => array( '1', 'DOMYŚLNIESORTUJ', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'filepath'                  => array( '0', 'ŚCIEŻKAPLIKU', 'FILEPATH:' ),
+       'hiddencat'                 => array( '1', '__KATEGORIAUKRYTA__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'STRONYWKATEGORII', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'ROZMIARSTRONY', 'PAGESIZE' ),
+       'index'                     => array( '1', '__INDEKSUJ__', '__INDEX__' ),
+       'noindex'                   => array( '1', '__NIEINDEKSUJ__', '__NOINDEX__' ),
+       'protectionlevel'           => array( '1', '__POZIOMZABEZPIECZEŃ__', 'PROTECTIONLEVEL' ),
+       'url_path'                  => array( '0', 'ŚCIEŻKA', 'PATH' ),
+       'url_query'                 => array( '0', 'ZAPYTANIE', 'QUERY' ),
 );
 
 $messages = array(
@@ -1439,7 +1439,7 @@ Tej operacji nie można później cofnąć.',
 'username' => 'Nazwa użytkownika',
 'uid' => 'ID użytkownika',
 'prefs-memberingroups' => 'Należy do {{PLURAL:$1|grupy|grup}}',
-'prefs-registration' => 'Moment rejestracji',
+'prefs-registration' => 'Data rejestracji',
 'yourrealname' => 'Imię i nazwisko',
 'yourlanguage' => 'Język interfejsu',
 'yourvariant' => 'Wariant języka treści',
@@ -1987,6 +1987,7 @@ Być może zechcesz zmienić opis na tej [$2 stronie opisu pliku].',
 'uploadnewversion-linktext' => 'Załaduj nowszą wersję tego pliku',
 'shared-repo-from' => 'z $1',
 'shared-repo' => 'współdzielone zasoby',
+'upload-disallowed-here' => 'Niestety, nie możesz nadpisać tego pliku.',
 
 # File reversion
 'filerevert' => 'Przywracanie $1',
@@ -2095,6 +2096,7 @@ Każdy wiersz zawiera linki do pierwszego i drugiego przekierowania oraz link, d
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|bajt|bajty|bajtów}}',
 'ncategories' => '$1 {{PLURAL:$1|kategoria|kategorie|kategorii}}',
+'ninterwikis' => '$1 {{PLURAL:$1|interwiki|interwiki|interwiki}}',
 'nlinks' => '$1 {{PLURAL:$1|link|linki|linków}}',
 'nmembers' => '$1 {{PLURAL:$1|element|elementy|elementów}}',
 'nrevisions' => '$1 {{PLURAL:$1|wersja|wersje|wersji}}',
@@ -3103,10 +3105,13 @@ Najprawdopodobniej zostało to spowodowane przez link do zewnętrznej strony int
 'pageinfo-length' => 'Długość strony (w bajtach)',
 'pageinfo-article-id' => 'Identyfikator strony',
 'pageinfo-robot-policy' => 'Stan wyszukiwarki',
+'pageinfo-robot-index' => 'Indeksowalne',
+'pageinfo-robot-noindex' => 'Nieindeksowalne',
 'pageinfo-views' => 'Odsłon',
 'pageinfo-watchers' => 'Liczba obserwujących',
 'pageinfo-redirects-name' => 'Liczba przekierowań do tej strony',
 'pageinfo-subpages-name' => 'Liczba podstron tej strony',
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|przekierowanie|przekierowania|przekierowań}}; $3 {{PLURAL:$3|bez przekierowania|bez przekierowań|bez przekierowań}})',
 'pageinfo-firstuser' => 'Twórca strony',
 'pageinfo-firsttime' => 'Data utworzenia strony',
 'pageinfo-lastuser' => 'Autor ostatniej edycji',
@@ -3115,9 +3120,9 @@ Najprawdopodobniej zostało to spowodowane przez link do zewnętrznej strony int
 'pageinfo-authors' => 'Całkowita liczba autorów',
 'pageinfo-recent-edits' => 'Liczba ostatnich edycji (w przeciągu $1)',
 'pageinfo-recent-authors' => 'Liczba ostatnich autorów',
-'pageinfo-restriction' => 'Zabezpieczenie strony ($1)',
-'pageinfo-magic-words' => 'Magiczne słowa ($1)',
-'pageinfo-hidden-categories' => 'Ukryte kategorie ( $1 )',
+'pageinfo-restriction' => 'Zabezpieczenie strony (<code>{{lcfirst:$1}}</code>)',
+'pageinfo-magic-words' => 'Magiczne {{PLURAL:$1|słowo|słowa|słowa}} ($1)',
+'pageinfo-hidden-categories' => '{{PLURAL:$1|Ukryta kategoria|Ukryte kategorie|Ukryte kategorie}} ($1)',
 'pageinfo-templates' => 'Transkludowan{{PLURAL:$1|y szablon|e szablony}} ($1)',
 
 # Skin names
@@ -3173,6 +3178,7 @@ Jeśli go otworzysz, możesz zarazić swój system.",
 'file-info-size-pages' => '$1 × $2 pikseli, rozmiar pliku: $3, typ MIME: $4, $5 {{PLURAL:$5|strona|strony|stron}}',
 'file-nohires' => 'Grafika w wyższej rozdzielczości nie jest dostępna.',
 'svg-long-desc' => 'Plik SVG, nominalnie $1 × $2 pikseli, rozmiar pliku: $3',
+'svg-long-desc-animated' => 'Animowany plik SVG, nominalnie $1 × $2 pikseli, rozmiar pliku: $3',
 'show-big-image' => 'Pełna rozdzielczość',
 'show-big-image-preview' => 'Rozmiar podglądu – $1.',
 'show-big-image-other' => '{{PLURAL:$2|Inna rozdzielczość|Inne rozdzielczości}}: $1.',
@@ -3182,6 +3188,8 @@ Jeśli go otworzysz, możesz zarazić swój system.",
 '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}}',
+'file-no-thumb-animation' => "'''Uwaga: z powodu ograniczeń technicznych miniaturki tego pliku nie bedą animowane.'''",
+'file-no-thumb-animation-gif' => "'''Uwaga: z powodu ograniczeń technicznych miniaturki plików GIF o wysokiej rozdzielczości – takich jak ten – nie bedą animowane.'''",
 
 # Special:NewFiles
 'newimages' => 'Najnowsze pliki',
index 9a9d602..c745ab9 100644 (file)
@@ -360,12 +360,12 @@ Na lista ëd pàgine speciaj bon-e a peul esse trovà ambelessì [[Special:Speci
 # General errors
 'error' => 'Eror',
 'databaseerror' => 'Eror ant la base dat',
-'dberrortext' => 'A l\'é capitaje n\'eror ëd sintassi ant la domanda mandà a la base dat.
-Sòn a peul vorèj dì n\'eror ant ël programa.
-L\'ùltima domanda mandà a la base dat a l\'é stàita:
+'dberrortext' => "A l'é capitaje n'eror ëd sintassi ant la domanda mandà a la base dij dat.
+Sòn a peul vorèj dì n'eror ant ël programa.
+L'ùltima arcesta mandà a la base dij dat a l'é stàita:
 <blockquote><tt>$1</tt></blockquote>
-da \'nt la funsion "<tt>$2</tt>".
-La base dat a l\'ha dane andré n\'eror "<tt>$3: $4</tt>".',
+da 'nt la funsion «<tt>$2</tt>».
+La base dij dat a l'ha dàit n'eror «<tt>$3: $4</tt>».",
 'dberrortextcl' => 'A-i é staje n\'eror ant la sintassi d\'anterogassion dla base dat.
 L\'ùltima anterogassion a l\'é stàita:
 "$1"
@@ -1720,6 +1720,7 @@ Peul desse ch'a veula modifiché la descrission dzora soa [pàgina ëd descrissi
 'shared-repo-from' => 'da $1',
 'shared-repo' => "n'archivi condivis",
 'shared-repo-name-wikimediacommons' => 'Wikimedia Commons',
+'upload-disallowed-here' => 'Për maleur a peul pa rampiassé sta figura.',
 
 # File reversion
 'filerevert' => "Buté torna $1 tanme ch'a l'era",
@@ -1857,7 +1858,7 @@ Adess a l'é na ridiression a [[$2]].",
 'mostlinkedtemplates' => 'Stamp pì dovrà',
 'mostcategories' => 'Artìcoj che a son marcà an pì categorìe',
 'mostimages' => 'Figure pì dovrà',
-'mostinterwikis' => 'Pagine con pi antërwiki',
+'mostinterwikis' => "Pàgine con pi 'd liure antërwiki",
 'mostrevisions' => 'Artìcoj pì modificà',
 'prefixindex' => "Tute le pàgine ch'a ancamin-o con",
 'prefixindex-namespace' => 'Tute le pàgine con prefiss ($1 spassi nominal)',
@@ -2004,7 +2005,7 @@ A peulo ess-ie d'[[{{MediaWiki:Listgrouprights-helppage}}|anformassion adissiona
 'mailnologintext' => "A dev [[Special:UserLogin|rintré ant ël sistema]]
 e avèj registrà n'adrëssa ëd pòsta eletrònica vàlida ant ij [[Special:Preferences|sò gust]] për podèj mandé dij mëssagi ëd pòsta eletrònica a j'àutri Utent.",
 'emailuser' => "Mandeje un mëssagi eletrònich a st'utent-sì",
-'emailuser-title-target' => 'Manda e-mail a sto {{GENDER:$1|utent}}',
+'emailuser-title-target' => 'Mandé un mëssagi ëd pòsta eletrònica a cost {{GENDER:$1|utent}}',
 'emailuser-title-notarget' => "Mandeje un mëssagi ëd pòsta eletrònica a st'utent-sì",
 'emailpage' => "Mandeje un mëssagi ëd pòsta eletrònica a st'utent-sì",
 'emailpagetext' => "A peule dovré ël formolari sì-sota për mandé un mëssagi ëd pòsta eletrònica a st'utent-sì.
@@ -2649,7 +2650,7 @@ Tute j'amportassion antra wiki diferente a resto marcà ant ël [[Special:Log/im
 'import-interwiki-templates' => 'Anserì tùit jë stamp',
 'import-interwiki-submit' => 'Amporté',
 'import-interwiki-namespace' => 'Spassi nominal ëd destinassion:',
-'import-interwiki-rootpage' => 'Pagina prinsipal ëd destinassion (opsional):',
+'import-interwiki-rootpage' => 'Pàgina prinsipal ëd destinassion (opsional):',
 'import-upload-filename' => "Nòm ëd l'archivi:",
 '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]]. 
@@ -2684,8 +2685,8 @@ Për piasì, ch'a preuva torna.",
 'import-error-special' => "La pàgina «$1» a l'é pa amportà përchè a ponta a në spassi nominal ch'a përmët pa dle pàgine.",
 'import-error-invalid' => "La pàgina «$1» a l'é pa amportà përchè sò nòm a l'é pa bon.",
 'import-options-wrong' => '{{PLURAL:$2|Opsion|Opsion}} sbalià: <nowiki>$1</nowiki>',
-'import-rootpage-invalid' => "La pagina prinsipal dàita a l'é un tìtol pa bon.",
-'import-rootpage-nosubpage' => 'Lë spassi nominal "$1" ëd la pagina prinsipal a përmëtt pa dle sotpagine.',
+'import-rootpage-invalid' => "La pàgina prinsipal dàita a l'é un tìtol pa bon.",
+'import-rootpage-nosubpage' => 'Lë spassi nominal «$1» ëd la pàgina prinsipal a përmët pa dle sot-pagine.',
 
 # Import log
 'importlogpage' => "Registr dj'amportassion",
@@ -2726,54 +2727,54 @@ A peul visualisene la sorgiss",
 'tooltip-ca-protect' => 'Protege costa pàgina',
 'tooltip-ca-unprotect' => 'Cangé la protession ëd costa pàgina-sì',
 'tooltip-ca-delete' => 'Scancelé sta pàgina-sì',
-'tooltip-ca-undelete' => 'Pijé andré le modìfiche faite a sta pàgina-sì, anans che a fussa scancelà.',
-'tooltip-ca-move' => 'Tramudé sta pàgina, visadì cangeje tìtol.',
+'tooltip-ca-undelete' => 'Pijé andré le modìfiche fàite a sta pàgina-sì, anans che a fussa scancelà.',
+'tooltip-ca-move' => "Tramudé sta pàgina, visadì cangeje 'd tìtol.",
 'tooltip-ca-watch' => 'Gionté sta pàgina-sì a la lista dle ròbe che as ten-o sot euj.',
 'tooltip-ca-unwatch' => 'Gavé via sta pàgina da',
-'tooltip-search' => 'Sërca an {{SITENAME}}',
-'tooltip-search-go' => "Andé a na pàgina ch'as ciama parej, sempe ch'a-i në sia un-a",
+'tooltip-search' => 'Sërc an {{SITENAME}}',
+'tooltip-search-go' => "Andé a na pàgina ch'as ciama parèj, sempe ch'a-i në sia un-a",
 'tooltip-search-fulltext' => 'Sërché ës test-sì antra le pàgine dël sit',
 'tooltip-p-logo' => 'Pàgina prinsipal.',
 'tooltip-n-mainpage' => 'Visité la pàgina prinsipal.',
-'tooltip-n-mainpage-description' => 'Vìsita la pàgina prinsipal',
+'tooltip-n-mainpage-description' => "Andé a la pàgina d'intrada",
 'tooltip-n-portal' => 'Rësguard al proget, lòn che a peul fé, andoa trové còsa.',
 'tooltip-n-currentevents' => 'Informassion ansima a lòn che a-i riva.',
-'tooltip-n-recentchanges' => 'Lista dj',
+'tooltip-n-recentchanges' => "Lista dj'ùltime modìfiche an sla wiki",
 'tooltip-n-randompage' => 'Carié na pàgina basta che a sia.',
 'tooltip-n-help' => 'Ël pòst për capì.',
 'tooltip-t-whatlinkshere' => 'Lista ëd tute le pàgine dla wiki che a men-o ambelessì.',
 'tooltip-t-recentchangeslinked' => 'Ùltime modìfiche dle pàgine andoa as peul andesse da costa.',
-'tooltip-feed-rss' => 'RSS feed për sta pàgina-sì.',
-'tooltip-feed-atom' => 'Atom feed për sta pàgina-sì.',
-'tooltip-t-contributions' => 'Vardé la lista dle contribussion dë st',
-'tooltip-t-emailuser' => 'Mandeje un messagi ëd pòsta a st',
-'tooltip-t-upload' => 'Carié archivi ëd figure ò son.',
+'tooltip-feed-rss' => 'Fluss RSS për costa pàgina',
+'tooltip-feed-atom' => 'Fluss Atom për costa pàgina.',
+'tooltip-t-contributions' => 'Vardé la lista dle contribussion ëd cost utent',
+'tooltip-t-emailuser' => "Mandeje un mëssagi ëd pòsta a st'utent",
+'tooltip-t-upload' => "Carié n'archivi ëd figure ò son.",
 'tooltip-t-specialpages' => 'Lista ëd tute le pàgine speciaj.',
 'tooltip-t-print' => 'Version bon-a da stampé dë sta pàgina',
-'tooltip-t-permalink' => 'Anliura fissa a sta version-i dla pàgina',
+'tooltip-t-permalink' => 'Anliura fissa a sta version- dla pàgina',
 'tooltip-ca-nstab-main' => 'Vardé la pàgina ëd contnù.',
 'tooltip-ca-nstab-user' => 'Vardé la pàgina Utent.',
-'tooltip-ca-nstab-media' => 'Vardé la pàgina dl',
-'tooltip-ca-nstab-special' => 'Costa a l',
+'tooltip-ca-nstab-media' => 'Vardé la pàgina dël mojen',
+'tooltip-ca-nstab-special' => "Costa a l'é na pàgina special, a peul nen modifichela.",
 'tooltip-ca-nstab-project' => 'Vardé la pàgina proteta.',
-'tooltip-ca-nstab-image' => 'Vardé la pàgina dl',
-'tooltip-ca-nstab-mediawiki' => 'Vardé ël messagi ëd sistema.',
+'tooltip-ca-nstab-image' => "Vardé la pàgina dl'archivi",
+'tooltip-ca-nstab-mediawiki' => 'Vardé ël mëssagi ëd sistema.',
 'tooltip-ca-nstab-template' => 'Vardé lë stamp.',
-'tooltip-ca-nstab-help' => 'Vardé la pàgina d',
+'tooltip-ca-nstab-help' => "Vardé la pàgina d'agiut",
 'tooltip-ca-nstab-category' => 'Vardé la pàgina dla categorìa.',
-'tooltip-minoredit' => 'Marca sossì coma modìfica cita',
-'tooltip-save' => 'Salva le modìfiche',
+'tooltip-minoredit' => 'Marché sòn coma modìfica cita',
+'tooltip-save' => 'Salvé le modìfiche',
 'tooltip-preview' => 'Preuva dle modìfiche (mej sempe fela, prima che fé che salvé!)',
-'tooltip-diff' => "Fame vëdde che modìfiche che i l'hai faje al test.",
-'tooltip-compareselectedversions' => 'Fame ël paragon dle diferense antra le version selessionà.',
-'tooltip-watch' => 'Gionta sta pàgina-sì a la lista dle ròbe che im ten-o sot euj',
+'tooltip-diff' => "A fa vëdde le modìfiche che a l'ha faje al test",
+'tooltip-compareselectedversions' => 'Fé ël paragon dle diferense antra le version selessionà.',
+'tooltip-watch' => 'Gionté sta pàgina-sì a la lista dle ròbe che im ten-o sot euj',
 'tooltip-watchlistedit-normal-submit' => 'Gavé via ij tìtoj',
-'tooltip-watchlistedit-raw-submit' => 'Agiorné la Lista',
-'tooltip-recreate' => 'Creé torna la pàgina contut che a la sia staita scancelà',
+'tooltip-watchlistedit-raw-submit' => "Agiorné la lista dle ròbe ch'as ten-o sot-euj",
+'tooltip-recreate' => 'Creé torna la pàgina contut che a la sia stàita scancelà',
 'tooltip-upload' => 'Anandiesse a carié',
-'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-rollback' => "«Tiré andré» a gava con un colp ëd rat le modìfiche fàite a costa pàgina da l'ùltim contributor",
+'tooltip-undo' => "«Buté 'me ch'a l'era» a scancela costa modìfica e a deurb la fnestra ëd modìfica an manera ëd preuva.
+A lassa gionté na spiegassion ant ël resumé.",
 'tooltip-preferences-save' => 'Salvé ij sò gust',
 'tooltip-summary' => 'Anserì un curt resumé',
 
@@ -2786,19 +2787,19 @@ At lassa gionté na spiegassion ëd la modìfica.',
 'monobook.js' => "/* Ës messagi-sì as dovrìa pa pì dovrelo; a sò pòst ch'a dòvra [[MediaWiki:common.js]] */",
 
 # Metadata
-'notacceptable' => 'Ël server dla wiki a-i la fa pa a provëdde dij dat ant na forma che sò programa local a peula lese.',
+'notacceptable' => 'Ës servent ëd la wiki a-i la fa pa a fornì dij dat ant na forma che sò programa local a peula lese.',
 
 # Attribution
 'anonymous' => '{{PLURAL:$1|Utent|Utent}} anònim ëd {{SITENAME}}',
 'siteuser' => '$1, utent ëd {{SITENAME}}',
-'anonuser' => '{{SITENAME}} utent anònim $1',
-'lastmodifiedatby' => "Sta pàgina-sì a l'é staita modificà l'ùltima vira al $2, $1 da $3.",
+'anonuser' => "l'utent anònim $1 ëd {{SITENAME}}",
+'lastmodifiedatby' => "Costa pàgina-sì a l'é staita modificà l'ùltima vira a $2, $1 da $3.",
 'othercontribs' => 'Basà ant sëj travaj ëd $1.',
 'others' => 'àutri',
 'siteusers' => '$1, {{PLURAL:$2|utent|utent}} ëd {{SITENAME}}',
 'anonusers' => '{{SITENAME}} {{PLURAL:$2|utent|utent}} anònim $1',
-'creditspage' => 'Credit dla pàgina',
-'nocredits' => 'A-i é pa gnun crédit për sta pagina-sì.',
+'creditspage' => 'Paternità dla pàgina',
+'nocredits' => "A-i é gnun-a anformassion d'atribussion disponìbil për costa pàgina.",
 
 # Spam protection
 'spamprotectiontitle' => 'Filtror dla rumenta',
@@ -2814,30 +2815,32 @@ Sòn a l'é motobin belfé che a sia rivà përchè a-i era n'anliura a un sit e
 'pageinfo-title' => 'Anformassion për "$1"',
 'pageinfo-header-basic' => 'Anformassion ëd base',
 'pageinfo-header-edits' => 'Modìfiche',
-'pageinfo-header-restrictions' => 'Protession ëd pagina',
-'pageinfo-header-properties' => 'Proprietà ëd pagina',
-'pageinfo-display-title' => 'Visualisa tìtol',
+'pageinfo-header-restrictions' => 'Protession ëd la pàgina',
+'pageinfo-header-properties' => 'Proprietà ëd la pàgina',
+'pageinfo-display-title' => 'Tìtol visualisà',
 'pageinfo-default-sort' => "ciav d'ordinament për sòlit",
-'pageinfo-length' => 'Lunghëssa ëd pagina (an byte)',
+'pageinfo-length' => 'Longheur ëd la pàgina (an byte)',
 'pageinfo-article-id' => 'Identificativ ëd la pàgina',
 'pageinfo-robot-policy' => "Stat dël motor d'arserca",
+'pageinfo-robot-index' => 'Indesàbil',
+'pageinfo-robot-noindex' => 'Nen indesàbil',
 'pageinfo-views' => 'Nùmer ëd vìsite',
 'pageinfo-watchers' => "Vàire ch'a ten-o sot-euj la pàgina",
-'pageinfo-redirects-name' => 'Rediression a sta pagina-sì',
-'pageinfo-subpages-name' => 'Sotpagine dë sta pagina',
-'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|rediression|rediression}}; $3 {{PLURAL:$3|non-rediression|non-rediression}})',
-'pageinfo-firstuser' => 'Creator ëd la pagina',
-'pageinfo-firsttime' => 'Data ëd creassion ëd la pagina',
-'pageinfo-lastuser' => 'Ultim editor',
+'pageinfo-redirects-name' => 'Ridiression a sta pàgina-sì',
+'pageinfo-subpages-name' => 'Sot-pàgine ëd costa pàgina',
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|ridiression|ridiression}}; $3 {{PLURAL:$3|nen ridiression|nen ridiression}})',
+'pageinfo-firstuser' => 'Creator ëd la pàgina',
+'pageinfo-firsttime' => 'Data ëd creassion ëd la pàgina',
+'pageinfo-lastuser' => 'Ùltim contributor',
 'pageinfo-lasttime' => "Data ëd l'ùltima modìfica",
 'pageinfo-edits' => 'Nùmer ëd modìfiche',
 'pageinfo-authors' => "Nùmer d'autor diferent",
-'pageinfo-recent-edits' => "Nùmer ëd modìfiche recente (an drinta a j'ùltim $1)",
-'pageinfo-recent-authors' => "Nùmer recent d'autor diferent",
-'pageinfo-restriction' => 'Protession ëd pagina ($1)',
-'pageinfo-magic-words' => 'Paròle màgiche ($1)',
-'pageinfo-hidden-categories' => 'Categorìe stërmà ($1)',
-'pageinfo-templates' => 'Trascludù {{PLURAL:$1|stamp|stamp}} ($1)',
+'pageinfo-recent-edits' => "Nùmer ëd modìfiche recente (ant j'ùltim $1)",
+'pageinfo-recent-authors' => "Nùmer d'autor diferent recent",
+'pageinfo-restriction' => 'Protession ëd la pàgina (<code>{{lcfirst:$1}}</code>)',
+'pageinfo-magic-words' => '{{PLURAL:$1|Paròla màgica|Paròle màgiche}} ($1)',
+'pageinfo-hidden-categories' => '{{PLURAL:$1|Categorìa|Categorìe}} stërmà ($1)',
+'pageinfo-templates' => '{{PLURAL:$1|stamp contnù|stamp contnù}} ($1)',
 
 # Patrolling
 'markaspatrolleddiff' => 'Marca coma verificà',
@@ -2881,6 +2884,7 @@ An fasend-lo travajé ansima a sò ordinator chiel a podrìa porteje ëd dann a
 'file-info-size-pages' => "$1 × $2 pontin, dimension ëd l'archivi: $3, sòrt MIME: $4, $5 {{PLURAL:$5|pàgina|pàgine}}",
 'file-nohires' => 'Gnun-a risolussion pì bela disponìbil.',
 'svg-long-desc' => "archivi an forma SVG, amzure nominaj $1 × $2 pixel, amzura dl'archivi: $3",
+'svg-long-desc-animated' => "Archivi SVG animà, dimension $1 × $2 pontin, amzura dl'archivi: $3",
 'show-big-image' => 'Version a amzura pijn-a',
 'show-big-image-preview' => 'Amzure dë sta preuva: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Àutra arzolussion|Àutre arzolussion}}: $1.',
@@ -2890,6 +2894,8 @@ An fasend-lo travajé ansima a sò ordinator chiel a podrìa porteje ëd dann a
 '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}}',
+'file-no-thumb-animation' => "'''Nòta: Për dle limitassion técniche, le miniadure ëd s'archivi a saran pa animà.'''",
+'file-no-thumb-animation-gif' => "'''Nòta: Për limitassion técniche, le miniadure ëd figure GIF a àuta arzolussion com costa a saran pa animà.'''",
 
 # Special:NewFiles
 'newimages' => 'Galerìa ëd figure e son neuv',
index 606ec0d..32e3f51 100644 (file)
@@ -95,64 +95,64 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'notoc'                   => array( '0', '__بی‌نيولک__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__بی‌نندارتونه__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__نيوليکداره__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__نيوليک__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__بی‌برخې__', '__NOEDITSECTION__' ),
-       'currentmonth'            => array( '1', 'روانه_مياشت', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonthname'        => array( '1', 'دروانې_مياشت_نوم', 'CURRENTMONTHNAME' ),
-       'currentmonthabbrev'      => array( '1', 'دروانې_مياشت_لنډون', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'نن', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'نن۲', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'دننۍورځې_نوم', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'سږکال', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'داوخت', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'دم_ګړۍ', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'سيمه_يزه_مياشت', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonthname'          => array( '1', 'دسيمه_يزې_مياشت_نوم', 'LOCALMONTHNAME' ),
-       'localmonthabbrev'        => array( '1', 'دسيمه_يزې_مياشت_لنډون', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'سيمه_يزه_ورځ', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'سيمه_يزه_ورځ۲', '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' ),
-       'numberofusers'           => array( '1', 'دکارونکوشمېر', 'NUMBEROFUSERS' ),
-       'pagename'                => array( '1', 'دمخ_نوم', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'دمخ_نښه', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'نوم_تشيال', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'د_نوم_تشيال_نښه', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'دخبرواترو_تشيال', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'دخبرواترو_تشيال_نښه', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'دسکالوتشيال', 'دليکنې_تشيال', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'دسکالوتشيال_نښه', 'دليکنې_تشيال_نښه', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'دمخ_بشپړنوم', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'دمخ_بشپړنوم_نښه', 'FULLPAGENAMEE' ),
-       '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', 'center', 'centre' ),
-       'sitename'                => array( '1', 'دوېبځي_نوم', 'SITENAME' ),
-       'server'                  => array( '0', 'پالنګر', 'SERVER' ),
-       'servername'              => array( '0', 'دپالنګر_نوم', 'SERVERNAME' ),
-       'grammar'                 => array( '0', 'ګرامر:', 'GRAMMAR:' ),
-       'currentweek'             => array( '1', 'روانه_اوونۍ', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'داوونۍورځ', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'سيمه_يزه_اوونۍ', 'LOCALWEEK' ),
-       'plural'                  => array( '0', 'جمع:', 'PLURAL:' ),
-       'language'                => array( '0', '#ژبه:', '#LANGUAGE:' ),
-       'special'                 => array( '0', 'ځانګړی', 'special' ),
-       'hiddencat'               => array( '1', '__پټه_وېشنيزه__', '__HIDDENCAT__' ),
-       'pagesize'                => array( '1', 'مخکچه', 'PAGESIZE' ),
-       'index'                   => array( '1', '__ليکلړ__', '__INDEX__' ),
-       'noindex'                 => array( '1', '__بې_ليکلړ__', '__NOINDEX__' ),
-       'protectionlevel'         => array( '1', 'ژغورکچه', 'PROTECTIONLEVEL' ),
+       'notoc'                     => array( '0', '__بی‌نيولک__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__بی‌نندارتونه__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__نيوليکداره__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__نيوليک__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__بی‌برخې__', '__NOEDITSECTION__' ),
+       'currentmonth'              => array( '1', 'روانه_مياشت', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonthname'          => array( '1', 'دروانې_مياشت_نوم', 'CURRENTMONTHNAME' ),
+       'currentmonthabbrev'        => array( '1', 'دروانې_مياشت_لنډون', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'نن', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'نن۲', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'دننۍورځې_نوم', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'سږکال', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'داوخت', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'دم_ګړۍ', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'سيمه_يزه_مياشت', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonthname'            => array( '1', 'دسيمه_يزې_مياشت_نوم', 'LOCALMONTHNAME' ),
+       'localmonthabbrev'          => array( '1', 'دسيمه_يزې_مياشت_لنډون', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'سيمه_يزه_ورځ', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'سيمه_يزه_ورځ۲', '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' ),
+       'numberofusers'             => array( '1', 'دکارونکوشمېر', 'NUMBEROFUSERS' ),
+       'pagename'                  => array( '1', 'دمخ_نوم', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'دمخ_نښه', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'نوم_تشيال', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'د_نوم_تشيال_نښه', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'دخبرواترو_تشيال', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'دخبرواترو_تشيال_نښه', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'دسکالوتشيال', 'دليکنې_تشيال', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'دسکالوتشيال_نښه', 'دليکنې_تشيال_نښه', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'دمخ_بشپړنوم', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'دمخ_بشپړنوم_نښه', 'FULLPAGENAMEE' ),
+       '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', 'center', 'centre' ),
+       'sitename'                  => array( '1', 'دوېبځي_نوم', 'SITENAME' ),
+       'server'                    => array( '0', 'پالنګر', 'SERVER' ),
+       'servername'                => array( '0', 'دپالنګر_نوم', 'SERVERNAME' ),
+       'grammar'                   => array( '0', 'ګرامر:', 'GRAMMAR:' ),
+       'currentweek'               => array( '1', 'روانه_اوونۍ', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'داوونۍورځ', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'سيمه_يزه_اوونۍ', 'LOCALWEEK' ),
+       'plural'                    => array( '0', 'جمع:', 'PLURAL:' ),
+       'language'                  => array( '0', '#ژبه:', '#LANGUAGE:' ),
+       'special'                   => array( '0', 'ځانګړی', 'special' ),
+       'hiddencat'                 => array( '1', '__پټه_وېشنيزه__', '__HIDDENCAT__' ),
+       'pagesize'                  => array( '1', 'مخکچه', 'PAGESIZE' ),
+       'index'                     => array( '1', '__ليکلړ__', '__INDEX__' ),
+       'noindex'                   => array( '1', '__بې_ليکلړ__', '__NOINDEX__' ),
+       'protectionlevel'           => array( '1', 'ژغورکچه', 'PROTECTIONLEVEL' ),
 );
 
 $rtl = true;
@@ -1774,8 +1774,8 @@ $UNWATCHURL  نه ليدنه وکړۍ
 'mycontris' => 'زما ونډې',
 'contribsub2' => 'د $1 لپاره ($2)',
 'uctop' => '(سرپاڼه)',
-'month' => 'Ù\84Ù\87 Ù¼Ø§Ú©Ù\84Û\90 Ù\85Ù\8aاشتÛ\90 Ù\86Ù\87 Ø±Ø§Ù¾Ø¯Û\90Ø®Ù\88ا (اÙ\88 ØªØ± Ø¯Û\90 پخواني):',
-'year' => 'له ټاکلي کال نه راپدېخوا (او تر دې پخواني):',
+'month' => 'Ù\84Ù\87 Ù\85Ù\8aاشتÛ\90 Ø¯ (اÙ\88 پخواني):',
+'year' => 'له کال د (او پخواني):',
 
 'sp-contributions-newbies' => 'د نوو ګڼونونو ونډې ښکاره کول',
 'sp-contributions-newbies-sub' => 'د نوو ګڼونونو لپاره',
index 4f6d8e1..8417e8c 100644 (file)
@@ -195,117 +195,117 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#REDIRECIONAMENTO', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__SEMTDC__', '__SEMSUMÁRIO__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__SEMGALERIA__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__FORCARTDC__', '__FORCARSUMARIO__', '__FORÇARTDC__', '__FORÇARSUMÁRIO__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__TDC__', '__SUMÁRIO__', '__SUMARIO__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__NÃOEDITARSEÇÃO__', '__SEMEDITARSEÇÃO__', '__NAOEDITARSECAO__', '__SEMEDITARSECAO__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '__SEMCABECALHO__', '__SEMCABEÇALHO__', '__SEMTITULO__', '__SEMTÍTULO__', '__NOHEADER__' ),
-       'currentmonth'            => array( '1', 'MESATUAL', 'MESATUAL2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', 'MESATUAL1', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', 'NOMEDOMESATUAL', 'CURRENTMONTHNAME' ),
-       'currentmonthabbrev'      => array( '1', 'MESATUALABREV', 'MESATUALABREVIADO', 'ABREVIATURADOMESATUAL', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'DIAATUAL', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'DIAATUAL2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'NOMEDODIAATUAL', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'ANOATUAL', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'HORARIOATUAL', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'HORAATUAL', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'MESLOCAL', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', 'MESLOCAL1', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'NOMEDOMESLOCAL', 'LOCALMONTHNAME' ),
-       'localmonthabbrev'        => array( '1', 'MESLOCALABREV', 'MESLOCALABREVIADO', 'ABREVIATURADOMESLOCAL', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'DIALOCAL', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'DIALOCAL2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'NOMEDODIALOCAL', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'ANOLOCAL', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'HORARIOLOCAL', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'HORALOCAL', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'NUMERODEPAGINAS', 'NÚMERODEPÁGINAS', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'NUMERODEARTIGOS', 'NÚMERODEARTIGOS', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'NUMERODEARQUIVOS', 'NÚMERODEARQUIVOS', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'NUMERODEUSUARIOS', 'NÚMERODEUSUÁRIOS', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'NUMERODEUSUARIOSATIVOS', 'NÚMERODEUSUÁRIOSATIVOS', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'NUMERODEEDICOES', 'NÚMERODEEDIÇÕES', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'NUMERODEEXIBICOES', 'NÚMERODEEXIBIÇÕES', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'NOMEDAPAGINA', 'NOMEDAPÁGINA', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'NOMEDAPAGINAC', 'NOMEDAPÁGINAC', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'DOMINIO', 'DOMÍNIO', 'ESPACONOMINAL', 'ESPAÇONOMINAL', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'DOMINIOC', 'DOMÍNIOC', 'ESPACONOMINALC', 'ESPAÇONOMINALC', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'PAGINADEDISCUSSAO', 'PÁGINADEDISCUSSÃO', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'PAGINADEDISCUSSAOC', 'PÁGINADEDISCUSSÃOC', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'PAGINADECONTEUDO', 'PAGINADECONTEÚDO', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'PAGINADECONTEUDOC', 'PAGINADECONTEÚDOC', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'NOMECOMPLETODAPAGINA', 'NOMECOMPLETODAPÁGINA', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'NOMECOMPLETODAPAGINAC', 'NOMECOMPLETODAPÁGINAC', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'NOMEDASUBPAGINA', 'NOMEDASUBPÁGINA', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'NOMEDASUBPAGINAC', 'NOMEDASUBPÁGINAC', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'NOMEDAPAGINABASE', 'NOMEDAPÁGINABASE', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'NOMEDAPAGINABASEC', 'NOMEDAPÁGINABASEC', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'NOMEDAPAGINADEDISCUSSAO', 'NOMEDAPÁGINADEDISCUSSÃO', 'TALKPAGENAME' ),
-       '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', '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' ),
-       'img_link'                => array( '1', 'ligação=$1', 'link=$1' ),
-       'sitename'                => array( '1', 'NOMEDOSITE', 'NOMEDOSÍTIO', 'NOMEDOSITIO', 'SITENAME' ),
-       'server'                  => array( '0', 'SERVIDOR', 'SERVER' ),
-       'servername'              => array( '0', 'NOMEDOSERVIDOR', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'CAMINHODOSCRIPT', 'SCRIPTPATH' ),
-       'gender'                  => array( '0', 'GENERO', 'GÊNERO', 'GENDER:' ),
-       'notitleconvert'          => array( '0', '__SEMCONVERTERTITULO__', '__SEMCONVERTERTÍTULO__', '__SEMCT__', '__NOTITLECONVERT__', '__NOTC__' ),
-       'nocontentconvert'        => array( '0', '__SEMCONVERTERCONTEUDO__', '__SEMCONVERTERCONTEÚDO__', '__SEMCC__', '__NOCONTENTCONVERT__', '__NOCC__' ),
-       'currentweek'             => array( '1', 'SEMANAATUAL', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'DIADASEMANAATUAL', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'SEMANALOCAL', 'LOCALWEEK' ),
-       'localdow'                => array( '1', 'DIADASEMANALOCAL', 'LOCALDOW' ),
-       'revisionid'              => array( '1', 'IDDAREVISAO', 'IDDAREVISÃO', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'DIADAREVISAO', 'DIADAREVISÃO', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'DIADAREVISAO2', 'DIADAREVISÃO2', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'MESDAREVISAO', 'MÊSDAREVISÃO', 'REVISIONMONTH' ),
-       'revisionyear'            => array( '1', 'ANODAREVISAO', 'ANODAREVISÃO', 'REVISIONYEAR' ),
-       'revisionuser'            => array( '1', 'USUARIODAREVISAO', 'USUÁRIODAREVISÃO', 'REVISIONUSER' ),
-       'fullurl'                 => array( '0', 'URLCOMPLETO:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'URLCOMPLETOC:', 'FULLURLE:' ),
-       'lcfirst'                 => array( '0', 'PRIMEIRAMINUSCULA:', 'PRIMEIRAMINÚSCULA:', 'LCFIRST:' ),
-       'ucfirst'                 => array( '0', 'PRIMEIRAMAIUSCULA:', 'PRIMEIRAMAIÚSCULA:', 'UCFIRST:' ),
-       'lc'                      => array( '0', 'MINUSCULA', 'MINÚSCULA', 'MINUSCULAS', 'MINÚSCULAS', 'LC:' ),
-       'uc'                      => array( '0', 'MAIUSCULA', 'MAIÚSCULA', 'MAIUSCULAS', 'MAIÚSCULAS', 'UC:' ),
-       'displaytitle'            => array( '1', 'EXIBETITULO', 'EXIBETÍTULO', 'DISPLAYTITLE' ),
-       'newsectionlink'          => array( '1', '__LINKDENOVASECAO__', '__LINKDENOVASEÇÃO__', '__LIGACAODENOVASECAO__', '__LIGAÇÃODENOVASEÇÃO__', '__NEWSECTIONLINK__' ),
-       'nonewsectionlink'        => array( '1', '__SEMLINKDENOVASECAO__', '__SEMLINKDENOVASEÇÃO__', '__SEMLIGACAODENOVASECAO__', '__SEMLIGAÇÃODENOVASEÇÃO__', '__NONEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', 'REVISAOATUAL', 'REVISÃOATUAL', 'CURRENTVERSION' ),
-       'urlencode'               => array( '0', 'CODIFICAURL:', 'URLENCODE:' ),
-       'anchorencode'            => array( '0', 'CODIFICAANCORA:', 'CODIFICAÂNCORA:', 'ANCHORENCODE' ),
-       'language'                => array( '0', '#IDIOMA:', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', 'IDIOMADOCONTEUDO', 'IDIOMADOCONTEÚDO', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'        => array( '1', 'PAGINASNOESPACONOMINAL', 'PÁGINASNOESPAÇONOMINAL', 'PAGINASNODOMINIO', 'PÁGINASNODOMÍNIO', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'          => array( '1', 'NUMERODEADMINISTRADORES', 'NÚMERODEADMINISTRADORES', 'NUMBEROFADMINS' ),
-       'defaultsort'             => array( '1', 'ORDENACAOPADRAO', 'ORDENAÇÃOPADRÃO', 'ORDEMPADRAO', 'ORDEMPADRÃO', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'filepath'                => array( '0', 'CAMINHODOARQUIVO', 'FILEPATH:' ),
-       'hiddencat'               => array( '1', '__CATEGORIAOCULTA__', '__CATOCULTA__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'PAGINASNACATEGORIA', 'PÁGINASNACATEGORIA', 'PAGINASNACAT', 'PÁGINASNACAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'TAMANHODAPAGINA', 'TAMANHODAPÁGINA', 'PAGESIZE' ),
-       'index'                   => array( '1', '__INDEXAR__', '__INDEX__' ),
-       'noindex'                 => array( '1', '__NAOINDEXAR__', '__NÃOINDEXAR__', '__NOINDEX__' ),
-       'numberingroup'           => array( '1', 'NUMERONOGRUPO', 'NÚMERONOGRUPO', 'NUMBERINGROUP', 'NUMINGROUP' ),
-       'staticredirect'          => array( '1', '__REDIRECIONAMENTOESTATICO__', '__REDIRECIONAMENTOESTÁTICO__', '__STATICREDIRECT__' ),
-       'protectionlevel'         => array( '1', 'NIVELDEPROTECAO', 'NÍVELDEPROTEÇÃO', 'PROTECTIONLEVEL' ),
+       'redirect'                  => array( '0', '#REDIRECIONAMENTO', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__SEMTDC__', '__SEMSUMÁRIO__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__SEMGALERIA__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__FORCARTDC__', '__FORCARSUMARIO__', '__FORÇARTDC__', '__FORÇARSUMÁRIO__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__TDC__', '__SUMÁRIO__', '__SUMARIO__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__NÃOEDITARSEÇÃO__', '__SEMEDITARSEÇÃO__', '__NAOEDITARSECAO__', '__SEMEDITARSECAO__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '__SEMCABECALHO__', '__SEMCABEÇALHO__', '__SEMTITULO__', '__SEMTÍTULO__', '__NOHEADER__' ),
+       'currentmonth'              => array( '1', 'MESATUAL', 'MESATUAL2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'MESATUAL1', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'NOMEDOMESATUAL', 'CURRENTMONTHNAME' ),
+       'currentmonthabbrev'        => array( '1', 'MESATUALABREV', 'MESATUALABREVIADO', 'ABREVIATURADOMESATUAL', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'DIAATUAL', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'DIAATUAL2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'NOMEDODIAATUAL', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'ANOATUAL', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'HORARIOATUAL', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'HORAATUAL', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'MESLOCAL', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'MESLOCAL1', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'NOMEDOMESLOCAL', 'LOCALMONTHNAME' ),
+       'localmonthabbrev'          => array( '1', 'MESLOCALABREV', 'MESLOCALABREVIADO', 'ABREVIATURADOMESLOCAL', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'DIALOCAL', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'DIALOCAL2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'NOMEDODIALOCAL', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'ANOLOCAL', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'HORARIOLOCAL', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'HORALOCAL', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'NUMERODEPAGINAS', 'NÚMERODEPÁGINAS', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'NUMERODEARTIGOS', 'NÚMERODEARTIGOS', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'NUMERODEARQUIVOS', 'NÚMERODEARQUIVOS', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'NUMERODEUSUARIOS', 'NÚMERODEUSUÁRIOS', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'NUMERODEUSUARIOSATIVOS', 'NÚMERODEUSUÁRIOSATIVOS', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'NUMERODEEDICOES', 'NÚMERODEEDIÇÕES', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'NUMERODEEXIBICOES', 'NÚMERODEEXIBIÇÕES', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'NOMEDAPAGINA', 'NOMEDAPÁGINA', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'NOMEDAPAGINAC', 'NOMEDAPÁGINAC', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'DOMINIO', 'DOMÍNIO', 'ESPACONOMINAL', 'ESPAÇONOMINAL', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'DOMINIOC', 'DOMÍNIOC', 'ESPACONOMINALC', 'ESPAÇONOMINALC', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'PAGINADEDISCUSSAO', 'PÁGINADEDISCUSSÃO', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'PAGINADEDISCUSSAOC', 'PÁGINADEDISCUSSÃOC', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'PAGINADECONTEUDO', 'PAGINADECONTEÚDO', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'PAGINADECONTEUDOC', 'PAGINADECONTEÚDOC', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'NOMECOMPLETODAPAGINA', 'NOMECOMPLETODAPÁGINA', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'NOMECOMPLETODAPAGINAC', 'NOMECOMPLETODAPÁGINAC', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'NOMEDASUBPAGINA', 'NOMEDASUBPÁGINA', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'NOMEDASUBPAGINAC', 'NOMEDASUBPÁGINAC', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'NOMEDAPAGINABASE', 'NOMEDAPÁGINABASE', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'NOMEDAPAGINABASEC', 'NOMEDAPÁGINABASEC', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'NOMEDAPAGINADEDISCUSSAO', 'NOMEDAPÁGINADEDISCUSSÃO', 'TALKPAGENAME' ),
+       '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', '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' ),
+       'img_link'                  => array( '1', 'ligação=$1', 'link=$1' ),
+       'sitename'                  => array( '1', 'NOMEDOSITE', 'NOMEDOSÍTIO', 'NOMEDOSITIO', 'SITENAME' ),
+       'server'                    => array( '0', 'SERVIDOR', 'SERVER' ),
+       'servername'                => array( '0', 'NOMEDOSERVIDOR', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'CAMINHODOSCRIPT', 'SCRIPTPATH' ),
+       'gender'                    => array( '0', 'GENERO', 'GÊNERO', 'GENDER:' ),
+       'notitleconvert'            => array( '0', '__SEMCONVERTERTITULO__', '__SEMCONVERTERTÍTULO__', '__SEMCT__', '__NOTITLECONVERT__', '__NOTC__' ),
+       'nocontentconvert'          => array( '0', '__SEMCONVERTERCONTEUDO__', '__SEMCONVERTERCONTEÚDO__', '__SEMCC__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+       'currentweek'               => array( '1', 'SEMANAATUAL', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'DIADASEMANAATUAL', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'SEMANALOCAL', 'LOCALWEEK' ),
+       'localdow'                  => array( '1', 'DIADASEMANALOCAL', 'LOCALDOW' ),
+       'revisionid'                => array( '1', 'IDDAREVISAO', 'IDDAREVISÃO', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'DIADAREVISAO', 'DIADAREVISÃO', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'DIADAREVISAO2', 'DIADAREVISÃO2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'MESDAREVISAO', 'MÊSDAREVISÃO', 'REVISIONMONTH' ),
+       'revisionyear'              => array( '1', 'ANODAREVISAO', 'ANODAREVISÃO', 'REVISIONYEAR' ),
+       'revisionuser'              => array( '1', 'USUARIODAREVISAO', 'USUÁRIODAREVISÃO', 'REVISIONUSER' ),
+       'fullurl'                   => array( '0', 'URLCOMPLETO:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'URLCOMPLETOC:', 'FULLURLE:' ),
+       'lcfirst'                   => array( '0', 'PRIMEIRAMINUSCULA:', 'PRIMEIRAMINÚSCULA:', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', 'PRIMEIRAMAIUSCULA:', 'PRIMEIRAMAIÚSCULA:', 'UCFIRST:' ),
+       'lc'                        => array( '0', 'MINUSCULA', 'MINÚSCULA', 'MINUSCULAS', 'MINÚSCULAS', 'LC:' ),
+       'uc'                        => array( '0', 'MAIUSCULA', 'MAIÚSCULA', 'MAIUSCULAS', 'MAIÚSCULAS', 'UC:' ),
+       'displaytitle'              => array( '1', 'EXIBETITULO', 'EXIBETÍTULO', 'DISPLAYTITLE' ),
+       'newsectionlink'            => array( '1', '__LINKDENOVASECAO__', '__LINKDENOVASEÇÃO__', '__LIGACAODENOVASECAO__', '__LIGAÇÃODENOVASEÇÃO__', '__NEWSECTIONLINK__' ),
+       'nonewsectionlink'          => array( '1', '__SEMLINKDENOVASECAO__', '__SEMLINKDENOVASEÇÃO__', '__SEMLIGACAODENOVASECAO__', '__SEMLIGAÇÃODENOVASEÇÃO__', '__NONEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'REVISAOATUAL', 'REVISÃOATUAL', 'CURRENTVERSION' ),
+       'urlencode'                 => array( '0', 'CODIFICAURL:', 'URLENCODE:' ),
+       'anchorencode'              => array( '0', 'CODIFICAANCORA:', 'CODIFICAÂNCORA:', 'ANCHORENCODE' ),
+       'language'                  => array( '0', '#IDIOMA:', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'IDIOMADOCONTEUDO', 'IDIOMADOCONTEÚDO', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', 'PAGINASNOESPACONOMINAL', 'PÁGINASNOESPAÇONOMINAL', 'PAGINASNODOMINIO', 'PÁGINASNODOMÍNIO', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', 'NUMERODEADMINISTRADORES', 'NÚMERODEADMINISTRADORES', 'NUMBEROFADMINS' ),
+       'defaultsort'               => array( '1', 'ORDENACAOPADRAO', 'ORDENAÇÃOPADRÃO', 'ORDEMPADRAO', 'ORDEMPADRÃO', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'filepath'                  => array( '0', 'CAMINHODOARQUIVO', 'FILEPATH:' ),
+       'hiddencat'                 => array( '1', '__CATEGORIAOCULTA__', '__CATOCULTA__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'PAGINASNACATEGORIA', 'PÁGINASNACATEGORIA', 'PAGINASNACAT', 'PÁGINASNACAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'TAMANHODAPAGINA', 'TAMANHODAPÁGINA', 'PAGESIZE' ),
+       'index'                     => array( '1', '__INDEXAR__', '__INDEX__' ),
+       'noindex'                   => array( '1', '__NAOINDEXAR__', '__NÃOINDEXAR__', '__NOINDEX__' ),
+       'numberingroup'             => array( '1', 'NUMERONOGRUPO', 'NÚMERONOGRUPO', 'NUMBERINGROUP', 'NUMINGROUP' ),
+       'staticredirect'            => array( '1', '__REDIRECIONAMENTOESTATICO__', '__REDIRECIONAMENTOESTÁTICO__', '__STATICREDIRECT__' ),
+       'protectionlevel'           => array( '1', 'NIVELDEPROTECAO', 'NÍVELDEPROTEÇÃO', 'PROTECTIONLEVEL' ),
 );
 
 $messages = array(
@@ -2022,6 +2022,7 @@ Talvez queira editar a descrição na [$2 página original de descrição do fic
 'uploadnewversion-linktext' => 'Carregar uma nova versão deste ficheiro',
 'shared-repo-from' => 'de $1',
 'shared-repo' => 'um repositório partilhado',
+'upload-disallowed-here' => 'Infelizmente você não pode substituir essa imagem.',
 
 # File reversion
 'filerevert' => 'Reverter $1',
@@ -2129,6 +2130,7 @@ Agora redirecciona para [[$2]].',
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|byte|bytes}}',
 'ncategories' => '$1 {{PLURAL:$1|categoria|categorias}}',
+'ninterwikis' => '$1 {{PLURAL:$1|interwiki|interwikis}}',
 'nlinks' => '$1 {{PLURAL:$1|link|links}}',
 'nmembers' => '$1 {{PLURAL:$1|membro|membros}}',
 'nrevisions' => '$1 {{PLURAL:$1|edição|edições}}',
@@ -2157,6 +2159,7 @@ Agora redirecciona para [[$2]].',
 'mostlinkedtemplates' => 'Predefinições com mais afluentes',
 'mostcategories' => 'Páginas com mais categorias',
 'mostimages' => 'Ficheiros com mais afluentes',
+'mostinterwikis' => 'Páginas com mais interwikis',
 'mostrevisions' => 'Páginas com mais revisões',
 'prefixindex' => 'Todas as páginas iniciadas por',
 'prefixindex-namespace' => 'Todas as páginas com prefixo (domínio $1)',
index bd758a9..4b52538 100644 (file)
@@ -198,118 +198,118 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#REDIRECIONAMENTO', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__SEMTDC__', '__SEMSUMÁRIO__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__SEMGALERIA__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__FORCARTDC__', '__FORCARSUMARIO__', '__FORÇARTDC__', '__FORÇARSUMÁRIO__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__TDC__', '__SUMARIO__', '__SUMÁRIO__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__NAOEDITARSECAO__', '__NÃOEDITARSEÇÃO__', '__SEMEDITARSEÇÃO__', '__SEMEDITARSECAO__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '__SEMCABECALHO__', '__SEMCABEÇALHO__', '__SEMTITULO__', '__SEMTÍTULO__', '__NOHEADER__' ),
-       'currentmonth'            => array( '1', 'MESATUAL', 'MESATUAL2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', 'MESATUAL1', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', 'NOMEDOMESATUAL', 'CURRENTMONTHNAME' ),
-       'currentmonthabbrev'      => array( '1', 'MESATUALABREV', 'MESATUALABREVIADO', 'ABREVIATURADOMESATUAL', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'DIAATUAL', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'DIAATUAL2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'NOMEDODIAATUAL', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'ANOATUAL', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'HORARIOATUAL', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'HORAATUAL', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'MESLOCAL', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', 'MESLOCAL1', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'NOMEDOMESLOCAL', 'LOCALMONTHNAME' ),
-       'localmonthabbrev'        => array( '1', 'MESLOCALABREV', 'MESLOCALABREVIADO', 'ABREVIATURADOMESLOCAL', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'DIALOCAL', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'DIALOCAL2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'NOMEDODIALOCAL', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'ANOLOCAL', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'HORARIOLOCAL', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'HORALOCAL', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'NUMERODEPAGINAS', 'NÚMERODEPÁGINAS', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'NUMERODEARTIGOS', 'NÚMERODEARTIGOS', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'NUMERODEARQUIVOS', 'NÚMERODEARQUIVOS', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'NUMERODEUSUARIOS', 'NÚMERODEUSUÁRIOS', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'NUMERODEUSUARIOSATIVOS', 'NÚMERODEUSUÁRIOSATIVOS', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'NUMERODEEDICOES', 'NÚMERODEEDIÇÕES', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'NUMERODEEXIBICOES', 'NÚMERODEEXIBIÇÕES', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'NOMEDAPAGINA', 'NOMEDAPÁGINA', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'NOMEDAPAGINAC', 'NOMEDAPÁGINAC', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'DOMINIO', 'DOMÍNIO', 'ESPACONOMINAL', 'ESPAÇONOMINAL', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'DOMINIOC', 'DOMÍNIOC', 'ESPACONOMINALC', 'ESPAÇONOMINALC', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'PAGINADEDISCUSSAO', 'PÁGINADEDISCUSSÃO', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'PAGINADEDISCUSSAOC', 'PÁGINADEDISCUSSÃOC', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'PAGINADECONTEUDO', 'PAGINADECONTEÚDO', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'PAGINADECONTEUDOC', 'PAGINADECONTEÚDOC', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'NOMECOMPLETODAPAGINA', 'NOMECOMPLETODAPÁGINA', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'NOMECOMPLETODAPAGINAC', 'NOMECOMPLETODAPÁGINAC', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'NOMEDASUBPAGINA', 'NOMEDASUBPÁGINA', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'NOMEDASUBPAGINAC', 'NOMEDASUBPÁGINAC', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'NOMEDAPAGINABASE', 'NOMEDAPÁGINABASE', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'NOMEDAPAGINABASEC', 'NOMEDAPÁGINABASEC', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'NOMEDAPAGINADEDISCUSSAO', 'NOMEDAPÁGINADEDISCUSSÃO', 'TALKPAGENAME' ),
-       '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', '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' ),
-       'img_link'                => array( '1', 'ligação=$1', 'link=$1' ),
-       'sitename'                => array( '1', 'NOMEDOSITE', 'NOMEDOSÍTIO', 'NOMEDOSITIO', 'SITENAME' ),
-       'server'                  => array( '0', 'SERVIDOR', 'SERVER' ),
-       'servername'              => array( '0', 'NOMEDOSERVIDOR', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'CAMINHODOSCRIPT', 'SCRIPTPATH' ),
-       'gender'                  => array( '0', 'GENERO', 'GÊNERO', 'GENDER:' ),
-       'notitleconvert'          => array( '0', '__SEMCONVERTERTITULO__', '__SEMCONVERTERTÍTULO__', '__SEMCT__', '__NOTITLECONVERT__', '__NOTC__' ),
-       'nocontentconvert'        => array( '0', '__SEMCONVERTERCONTEUDO__', '__SEMCONVERTERCONTEÚDO__', '__SEMCC__', '__NOCONTENTCONVERT__', '__NOCC__' ),
-       'currentweek'             => array( '1', 'SEMANAATUAL', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'DIADASEMANAATUAL', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'SEMANALOCAL', 'LOCALWEEK' ),
-       'localdow'                => array( '1', 'DIADASEMANALOCAL', 'LOCALDOW' ),
-       'revisionid'              => array( '1', 'IDDAREVISAO', 'IDDAREVISÃO', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'DIADAREVISAO', 'DIADAREVISÃO', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'DIADAREVISAO2', 'DIADAREVISÃO2', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'MESDAREVISAO', 'MÊSDAREVISÃO', 'REVISIONMONTH' ),
-       'revisionyear'            => array( '1', 'ANODAREVISAO', 'ANODAREVISÃO', 'REVISIONYEAR' ),
-       'revisionuser'            => array( '1', 'USUARIODAREVISAO', 'USUÁRIODAREVISÃO', 'REVISIONUSER' ),
-       'fullurl'                 => array( '0', 'URLCOMPLETO:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'URLCOMPLETOC:', 'FULLURLE:' ),
-       'lcfirst'                 => array( '0', 'PRIMEIRAMINUSCULA:', 'PRIMEIRAMINÚSCULA:', 'LCFIRST:' ),
-       'ucfirst'                 => array( '0', 'PRIMEIRAMAIUSCULA:', 'PRIMEIRAMAIÚSCULA:', 'UCFIRST:' ),
-       'lc'                      => array( '0', 'MINUSCULA', 'MINÚSCULA', 'MINUSCULAS', 'MINÚSCULAS', 'LC:' ),
-       'uc'                      => array( '0', 'MAIUSCULA', 'MAIÚSCULA', 'MAIUSCULAS', 'MAIÚSCULAS', 'UC:' ),
-       'displaytitle'            => array( '1', 'EXIBETITULO', 'EXIBETÍTULO', 'DISPLAYTITLE' ),
-       'newsectionlink'          => array( '1', '__LINKDENOVASECAO__', '__LINKDENOVASEÇÃO__', '__LIGACAODENOVASECAO__', '__LIGAÇÃODENOVASEÇÃO__', '__NEWSECTIONLINK__' ),
-       'nonewsectionlink'        => array( '1', '__SEMLINKDENOVASECAO__', '__SEMLINKDENOVASEÇÃO__', '__SEMLIGACAODENOVASECAO__', '__SEMLIGAÇÃODENOVASEÇÃO__', '__NONEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', 'REVISAOATUAL', 'REVISÃOATUAL', 'CURRENTVERSION' ),
-       'urlencode'               => array( '0', 'CODIFICAURL:', 'URLENCODE:' ),
-       'anchorencode'            => array( '0', 'CODIFICAANCORA:', 'CODIFICAÂNCORA:', 'ANCHORENCODE' ),
-       'language'                => array( '0', '#IDIOMA:', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', 'IDIOMADOCONTEUDO', 'IDIOMADOCONTEÚDO', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'        => array( '1', 'PAGINASNOESPACONOMINAL', 'PÁGINASNOESPAÇONOMINAL', 'PAGINASNODOMINIO', 'PÁGINASNODOMÍNIO', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'          => array( '1', 'NUMERODEADMINISTRADORES', 'NÚMERODEADMINISTRADORES', 'NUMBEROFADMINS' ),
-       'defaultsort'             => array( '1', 'ORDENACAOPADRAO', 'ORDENAÇÃOPADRÃO', 'ORDEMPADRAO', 'ORDEMPADRÃO', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'filepath'                => array( '0', 'CAMINHODOARQUIVO', 'FILEPATH:' ),
-       'hiddencat'               => array( '1', '__CATEGORIAOCULTA__', '__CATOCULTA__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'PAGINASNACATEGORIA', 'PÁGINASNACATEGORIA', 'PAGINASNACAT', 'PÁGINASNACAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'TAMANHODAPAGINA', 'TAMANHODAPÁGINA', 'PAGESIZE' ),
-       'index'                   => array( '1', '__INDEXAR__', '__INDEX__' ),
-       'noindex'                 => array( '1', '__NAOINDEXAR__', '__NÃOINDEXAR__', '__NOINDEX__' ),
-       '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' ),
+       'redirect'                  => array( '0', '#REDIRECIONAMENTO', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__SEMTDC__', '__SEMSUMÁRIO__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__SEMGALERIA__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__FORCARTDC__', '__FORCARSUMARIO__', '__FORÇARTDC__', '__FORÇARSUMÁRIO__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__TDC__', '__SUMARIO__', '__SUMÁRIO__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__NAOEDITARSECAO__', '__NÃOEDITARSEÇÃO__', '__SEMEDITARSEÇÃO__', '__SEMEDITARSECAO__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '__SEMCABECALHO__', '__SEMCABEÇALHO__', '__SEMTITULO__', '__SEMTÍTULO__', '__NOHEADER__' ),
+       'currentmonth'              => array( '1', 'MESATUAL', 'MESATUAL2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'MESATUAL1', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'NOMEDOMESATUAL', 'CURRENTMONTHNAME' ),
+       'currentmonthabbrev'        => array( '1', 'MESATUALABREV', 'MESATUALABREVIADO', 'ABREVIATURADOMESATUAL', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'DIAATUAL', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'DIAATUAL2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'NOMEDODIAATUAL', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'ANOATUAL', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'HORARIOATUAL', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'HORAATUAL', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'MESLOCAL', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'MESLOCAL1', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'NOMEDOMESLOCAL', 'LOCALMONTHNAME' ),
+       'localmonthabbrev'          => array( '1', 'MESLOCALABREV', 'MESLOCALABREVIADO', 'ABREVIATURADOMESLOCAL', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'DIALOCAL', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'DIALOCAL2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'NOMEDODIALOCAL', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'ANOLOCAL', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'HORARIOLOCAL', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'HORALOCAL', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'NUMERODEPAGINAS', 'NÚMERODEPÁGINAS', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'NUMERODEARTIGOS', 'NÚMERODEARTIGOS', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'NUMERODEARQUIVOS', 'NÚMERODEARQUIVOS', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'NUMERODEUSUARIOS', 'NÚMERODEUSUÁRIOS', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'NUMERODEUSUARIOSATIVOS', 'NÚMERODEUSUÁRIOSATIVOS', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'NUMERODEEDICOES', 'NÚMERODEEDIÇÕES', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'NUMERODEEXIBICOES', 'NÚMERODEEXIBIÇÕES', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'NOMEDAPAGINA', 'NOMEDAPÁGINA', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'NOMEDAPAGINAC', 'NOMEDAPÁGINAC', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'DOMINIO', 'DOMÍNIO', 'ESPACONOMINAL', 'ESPAÇONOMINAL', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'DOMINIOC', 'DOMÍNIOC', 'ESPACONOMINALC', 'ESPAÇONOMINALC', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'PAGINADEDISCUSSAO', 'PÁGINADEDISCUSSÃO', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'PAGINADEDISCUSSAOC', 'PÁGINADEDISCUSSÃOC', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'PAGINADECONTEUDO', 'PAGINADECONTEÚDO', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'PAGINADECONTEUDOC', 'PAGINADECONTEÚDOC', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'NOMECOMPLETODAPAGINA', 'NOMECOMPLETODAPÁGINA', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'NOMECOMPLETODAPAGINAC', 'NOMECOMPLETODAPÁGINAC', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'NOMEDASUBPAGINA', 'NOMEDASUBPÁGINA', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'NOMEDASUBPAGINAC', 'NOMEDASUBPÁGINAC', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'NOMEDAPAGINABASE', 'NOMEDAPÁGINABASE', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'NOMEDAPAGINABASEC', 'NOMEDAPÁGINABASEC', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'NOMEDAPAGINADEDISCUSSAO', 'NOMEDAPÁGINADEDISCUSSÃO', 'TALKPAGENAME' ),
+       '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', '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' ),
+       'img_link'                  => array( '1', 'ligação=$1', 'link=$1' ),
+       'sitename'                  => array( '1', 'NOMEDOSITE', 'NOMEDOSÍTIO', 'NOMEDOSITIO', 'SITENAME' ),
+       'server'                    => array( '0', 'SERVIDOR', 'SERVER' ),
+       'servername'                => array( '0', 'NOMEDOSERVIDOR', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'CAMINHODOSCRIPT', 'SCRIPTPATH' ),
+       'gender'                    => array( '0', 'GENERO', 'GÊNERO', 'GENDER:' ),
+       'notitleconvert'            => array( '0', '__SEMCONVERTERTITULO__', '__SEMCONVERTERTÍTULO__', '__SEMCT__', '__NOTITLECONVERT__', '__NOTC__' ),
+       'nocontentconvert'          => array( '0', '__SEMCONVERTERCONTEUDO__', '__SEMCONVERTERCONTEÚDO__', '__SEMCC__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+       'currentweek'               => array( '1', 'SEMANAATUAL', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'DIADASEMANAATUAL', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'SEMANALOCAL', 'LOCALWEEK' ),
+       'localdow'                  => array( '1', 'DIADASEMANALOCAL', 'LOCALDOW' ),
+       'revisionid'                => array( '1', 'IDDAREVISAO', 'IDDAREVISÃO', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'DIADAREVISAO', 'DIADAREVISÃO', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'DIADAREVISAO2', 'DIADAREVISÃO2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'MESDAREVISAO', 'MÊSDAREVISÃO', 'REVISIONMONTH' ),
+       'revisionyear'              => array( '1', 'ANODAREVISAO', 'ANODAREVISÃO', 'REVISIONYEAR' ),
+       'revisionuser'              => array( '1', 'USUARIODAREVISAO', 'USUÁRIODAREVISÃO', 'REVISIONUSER' ),
+       'fullurl'                   => array( '0', 'URLCOMPLETO:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'URLCOMPLETOC:', 'FULLURLE:' ),
+       'lcfirst'                   => array( '0', 'PRIMEIRAMINUSCULA:', 'PRIMEIRAMINÚSCULA:', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', 'PRIMEIRAMAIUSCULA:', 'PRIMEIRAMAIÚSCULA:', 'UCFIRST:' ),
+       'lc'                        => array( '0', 'MINUSCULA', 'MINÚSCULA', 'MINUSCULAS', 'MINÚSCULAS', 'LC:' ),
+       'uc'                        => array( '0', 'MAIUSCULA', 'MAIÚSCULA', 'MAIUSCULAS', 'MAIÚSCULAS', 'UC:' ),
+       'displaytitle'              => array( '1', 'EXIBETITULO', 'EXIBETÍTULO', 'DISPLAYTITLE' ),
+       'newsectionlink'            => array( '1', '__LINKDENOVASECAO__', '__LINKDENOVASEÇÃO__', '__LIGACAODENOVASECAO__', '__LIGAÇÃODENOVASEÇÃO__', '__NEWSECTIONLINK__' ),
+       'nonewsectionlink'          => array( '1', '__SEMLINKDENOVASECAO__', '__SEMLINKDENOVASEÇÃO__', '__SEMLIGACAODENOVASECAO__', '__SEMLIGAÇÃODENOVASEÇÃO__', '__NONEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'REVISAOATUAL', 'REVISÃOATUAL', 'CURRENTVERSION' ),
+       'urlencode'                 => array( '0', 'CODIFICAURL:', 'URLENCODE:' ),
+       'anchorencode'              => array( '0', 'CODIFICAANCORA:', 'CODIFICAÂNCORA:', 'ANCHORENCODE' ),
+       'language'                  => array( '0', '#IDIOMA:', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'IDIOMADOCONTEUDO', 'IDIOMADOCONTEÚDO', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', 'PAGINASNOESPACONOMINAL', 'PÁGINASNOESPAÇONOMINAL', 'PAGINASNODOMINIO', 'PÁGINASNODOMÍNIO', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', 'NUMERODEADMINISTRADORES', 'NÚMERODEADMINISTRADORES', 'NUMBEROFADMINS' ),
+       'defaultsort'               => array( '1', 'ORDENACAOPADRAO', 'ORDENAÇÃOPADRÃO', 'ORDEMPADRAO', 'ORDEMPADRÃO', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'filepath'                  => array( '0', 'CAMINHODOARQUIVO', 'FILEPATH:' ),
+       'hiddencat'                 => array( '1', '__CATEGORIAOCULTA__', '__CATOCULTA__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'PAGINASNACATEGORIA', 'PÁGINASNACATEGORIA', 'PAGINASNACAT', 'PÁGINASNACAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'TAMANHODAPAGINA', 'TAMANHODAPÁGINA', 'PAGESIZE' ),
+       'index'                     => array( '1', '__INDEXAR__', '__INDEX__' ),
+       'noindex'                   => array( '1', '__NAOINDEXAR__', '__NÃOINDEXAR__', '__NOINDEX__' ),
+       '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(
@@ -328,7 +328,7 @@ $messages = array(
 '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' => '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-watchcreations' => 'Adicionar as páginas e arquivos que eu criar às minhas 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',
 'tog-watchdeletion' => 'Adicionar páginas eliminadas por mim à minha lista de páginas vigiadas',
@@ -578,6 +578,10 @@ Veja a [[Special:Version|página sobre a versão do sistema]].',
 'youhavenewmessages' => 'Você tem $1 ($2).',
 'newmessageslink' => 'novas mensagens',
 'newmessagesdifflink' => 'última alteração',
+'youhavenewmessagesfromusers' => 'Você tem $1 de {{PLURAL:$3|outro usuário|outros usuários}} ($2)',
+'youhavenewmessagesmanyusers' => 'Você tem $1 de muitos usuários ($2).',
+'newmessageslinkplural' => '{{PLURAL:$1|uma mensagem nova|mensagens novas}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|última alteração|últimas alterações}}',
 'youhavenewmessagesmulti' => 'Você tem novas mensagens em $1',
 'editsection' => 'editar',
 'editold' => 'editar',
@@ -671,6 +675,8 @@ Anote o URL e reporte o ocorrido a um [[Special:ListUsers/sysop|administrador]].
 'cannotdelete' => 'Não foi possível eliminar a página ou arquivo $1.
 É possível que ele já tenha sido eliminado por outra pessoa.',
 'cannotdelete-title' => 'Não é possível excluir a página " $1 "',
+'delete-hook-aborted' => 'A eliminação foi cancelada por um "hook".
+Não foi dada nenhuma explicação.',
 'badtitle' => 'Título inválido',
 'badtitletext' => 'O título de página solicitado era inválido, vazio, ou um link interlínguas ou interwikis incorreto.
 Talvez contenha um ou mais caracteres que não podem ser usados em títulos.',
@@ -726,6 +732,7 @@ Não se esqueça de personalizar as suas [[Special:Preferences|preferências no
 'remembermypassword' => 'Lembrar meu login neste navegador (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:',
+'password-change-forbidden' => 'Você não pode alterar senhas nessa wiki.',
 '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',
 'nav-login-createaccount' => 'Entrar / criar conta',
@@ -965,16 +972,19 @@ ou [{{fullurl:{{FULLPAGENAME}}|action=edit}} criar esta página]</span>.',
 'noarticletext-nopermission' => 'No momento, não há conteúdo nesta página
 Você pode [[Special:Search/{{PAGENAME}}|pesquisar pelo título desta página]] em outras páginas,
 ou <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} buscar por registros relacionados] </span>.',
+'missing-revision' => 'A revisão #$1 da página denominada "{{PAGENAME}}" não existe.
+
+Isto é geralmente causado por seguir um link de histórico desatualizado para uma página que foi eliminada.
+Os detalhes podem ser encontrados no [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registo de eliminação].',
 'userpage-userdoesnotexist' => 'A conta "<nowiki>$1</nowiki>" não se encontra registrada.
 Verifique se deseja mesmo criar/editar esta página.',
 'userpage-userdoesnotexist-view' => 'A conta de usuário "$1" não está registrada.',
 'blocked-notice-logextract' => 'Este usuário está atualmente bloqueado.
 O registro de bloqueio mais recente é fornecido abaixo, para referência:',
-'clearyourcache' => "'''Nota:''' Depois de salvar, você terá de limpar o ''cache'' do seu navegador para ver as alterações.
+'clearyourcache' => "Nota:''' Depois de salvar, você terá de limpar o ''cache'' do seu navegador para ver as alterações.
 * '''Firefox / Safari:''' pressione ''Shift'' enquanto clica em ''Recarregar'', ou pressione ''Ctrl-F5'' ou ''Ctrl-R'' (''Command-R'' para Mac);
 * '''Google Chrome:''' pressione ''Ctrl-Shift-R'' (''Command-Shift-R'' em um Mac)
 * '''Internet Explorer:''' pressione ''Ctrl'' enquanto clica em ''Recarregar'' ou pressione ''Ctrl-F5'';
-* '''Konqueror:''' clique no botão ''Recarregar'' ou pressione ''F5'';
 * '''Opera:''' limpe o ''cache'' em ''Ferramentas → Preferências'' (''Tools → Preferences'')",
 'usercssyoucanpreview' => "'''Dica:''' Utilize o botão \"{{int:showpreview}}\" para testar seu novo CSS antes de salvar.",
 'userjsyoucanpreview' => "'''Dica:''' Utilize o botão \"{{int:showpreview}}\" para testar seu novo JavaScript antes de salvar.",
@@ -1087,6 +1097,13 @@ Estes argumentos foram omitidos.',
 'parser-template-loop-warning' => 'Ciclo de predefinições detectado: [[$1]]',
 'parser-template-recursion-depth-warning' => 'O limite de profundidade de recursividade de predefinição foi ultrapassado ($1)',
 'language-converter-depth-warning' => 'O limite de profundidade do conversor de línguas excedeu a ($1)',
+'node-count-exceeded-category' => 'Páginas em que o total de nós é excedido',
+'node-count-exceeded-warning' => 'A página excedeu o total de nós',
+'expansion-depth-exceeded-category' => 'Páginas em que a profundidade de expansão é excedida',
+'expansion-depth-exceeded-warning' => 'A página excedeu a profundidade de expansão',
+'parser-unstrip-loop-warning' => 'Foi detectado um ciclo infinito unstrip',
+'parser-unstrip-recursion-limit' => 'Limite de recursão do unstrip excedido ($1)',
+'converter-manual-rule-error' => 'Erro detectado na regra de conversão de língua manual',
 
 # "Undo" feature
 'undo-success' => 'A edição pôde ser desfeita. Por gentileza, verifique o comparativo a seguir para se certificar de que é isto que deseja fazer, salvando as alterações após ter terminado de revisá-las.',
@@ -1272,6 +1289,10 @@ Certifique-se de que tal alteração manterá a continuidade das ações.',
 'editundo' => 'desfazer',
 '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}})',
+'difference-missing-revision' => '{{PLURAL:$2|Uma revisão|$2 revisões}} desta diferença ($1) não {{PLURAL:$2|foi encontrada|foram encontradas}}.
+
+Isto é geralmente causado por seguir um link de histórico desatualizado para uma página que foi eliminada.
+Os detalhes podem ser encontrados no [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registo de eliminação].',
 
 # Search results
 'searchresults' => 'Resultados da pesquisa',
@@ -1541,6 +1562,7 @@ Caso decida fornecê-lo, este será utilizado para dar-lhe crédito pelo seu tra
 'right-writeapi' => 'Uso da API de escrita',
 'right-delete' => 'Eliminar páginas',
 'right-bigdelete' => 'Eliminar páginas com histórico grande',
+'right-deletelogentry' => 'Eliminar e restaurar entradas específicas de registos',
 'right-deleterevision' => 'Eliminar e restaurar revisões específicas de páginas',
 'right-deletedhistory' => 'Ver entradas de histórico eliminadas, sem o texto associado',
 'right-deletedtext' => 'Ver texto removido e alterado entre revisões removidas',
@@ -1851,6 +1873,7 @@ Caso o problema persista, procure um [[Special:ListUsers/sysop|administrador]].'
 'backend-fail-internal' => 'Ocorreu um erro desconhecido no servidor de armazenamento "$1".',
 'backend-fail-contenttype' => 'Não foi possível determinar o tipo de conteúdo do arquivo para armazenar em "$1".',
 'backend-fail-batchsize' => 'O servidor de armazenamento retornou um conjunto de $1 {{PLURAL:$1|operação|operações}} de arquivo, enquanto seu limite é de $2 {{PLURAL:$1|operação|operações}}.',
+'backend-fail-usable' => 'Não foi possível salvar o arquivo $1 devido a permissões insuficientes a diretórios ou repositórios inexistentes.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Não foi possível se conectar ao banco de dados de registros do sistema de armazenamento "$1".',
@@ -1865,6 +1888,7 @@ Caso o problema persista, procure um [[Special:ListUsers/sysop|administrador]].'
 'lockmanager-fail-releaselock' => 'Não foi possível liberar o bloqueio para "$1".',
 'lockmanager-fail-db-bucket' => 'Não foi possível contatar suficientemente bloqueio das bases de dados no bucket $1 .',
 'lockmanager-fail-db-release' => 'Não foi possível liberar os bloqueios para "$1".',
+'lockmanager-fail-svr-acquire' => 'Não foi possível obter bloqueios no servidor $1.',
 'lockmanager-fail-svr-release' => 'Não foi possível liberar os bloqueios do servidor "$1".',
 
 # ZipDirectoryReader
@@ -1883,6 +1907,7 @@ A sua segurança não pode ser devidamente verificada.',
 'uploadstash-badtoken' => 'Não foi possível executar essa operação, talvez porque as suas credenciais de edição expiraram. Tente novamente.',
 'uploadstash-errclear' => 'Não foi possível apagar os arquivos.',
 'uploadstash-refresh' => 'Atualizar a lista de arquivos',
+'invalid-chunk-offset' => 'Deslocamento de fragmento inválido',
 
 # img_auth script messages
 'img-auth-accessdenied' => 'Acesso negado',
@@ -1981,6 +2006,7 @@ Talvez você deseje editar a descrição na sua [$2 página de descrição de ar
 'uploadnewversion-linktext' => 'Enviar uma nova versão deste arquivo',
 'shared-repo-from' => 'de $1',
 'shared-repo' => 'um repositório compartilhado',
+'upload-disallowed-here' => 'Infelizmente você não pode substituir essa imagem.',
 
 # File reversion
 'filerevert' => 'Reverter $1',
@@ -3054,7 +3080,7 @@ Tal bloqueio foi provavelmente causado por uma ligação para um ''website'' ext
 
 # Info page
 'pageinfo-title' => 'Informações sobre "$1"',
-'pageinfo-header-edits' => 'Edições',
+'pageinfo-header-edits' => 'Histórico de edições',
 'pageinfo-views' => 'Número de visitas',
 'pageinfo-watchers' => 'Número de pessoas vigiando',
 'pageinfo-edits' => 'Número de edições',
@@ -3789,7 +3815,7 @@ As imagens serão exibidas em sua resolução máxima, outros tipos de arquivos
 * <span class="mw-specialpagerestricted">Páginas especiais restritas.</span>',
 'specialpages-group-maintenance' => 'Relatórios de manutenção',
 'specialpages-group-other' => 'Outras páginas especiais',
-'specialpages-group-login' => 'Entrar / registrar-se',
+'specialpages-group-login' => 'Entrar / Criar conta',
 'specialpages-group-changes' => 'Mudanças e registros recentes',
 'specialpages-group-media' => 'Relatórios de mídias e uploads',
 'specialpages-group-users' => 'Usuários e privilégios',
index bcea82e..3c0cb81 100644 (file)
@@ -73,6 +73,7 @@
  * @author Metalhead64
  * @author MichaelFrey
  * @author Mihai
+ * @author Minh Nguyen
  * @author Mormegil
  * @author Mpradeep
  * @author Murma174
@@ -2219,6 +2220,7 @@ $1 is the name of the shared repository. On wikimedia sites, $1 is {{msg-mw|shar
 * {{msg-mw|sharedupload}}, {{msg-mw|sharedupload-desc-here}}, {{msg-mw|sharedupload-desc-there}}',
 'shared-repo-name-wikimediacommons' => '{{optional}}',
 'filepage.css' => '{{Optional}}',
+'upload-disallowed-here' => 'This message appears on an image page in place of the normal reupload link if they cannot upload - e.g. if the image page is upload protected and they do not have the right priviledge.',
 
 # File reversion
 'filerevert' => '{{Identical|Revert}}',
@@ -2567,10 +2569,10 @@ Part of the "Newuserlog" extension. It is both the title of [[Special:Log/newuse
 'listgrouprights-helppage' => "The link used on [[Special:ListGroupRights]]. Just translate \"Group rights\", and '''leave the \"Help:\" namespace exactly as it is'''.",
 'listgrouprights-members' => 'Used on [[Special:ListGroupRights]] and [[Special:Statistics]] as a link to [[Special:ListUsers|Special:ListUsers/"group"]], a list of members in that group.',
 'listgrouprights-right-display' => "{{optional}}
-* $1 is the text from the 'right-...' messages, i.e. [[MediaWiki:right-edit]] = {{int:right-edit}}
+* $1 is the text from the 'right-...' messages, i.e. {{msg-mw|right-edit}}
 * $2 is the codename of this right",
 'listgrouprights-right-revoked' => "{{optional}}
-* $1 is the text from the 'right-...' messages, i.e. [[MediaWiki:right-edit]] = {{int:right-edit}}
+* $1 is the text from the 'right-...' messages, i.e. {{msg-mw|right-edit}}
 * $2 is the codename of this right",
 'listgrouprights-addgroup' => 'This is an individual right for groups, used on [[Special:ListGroupRights]].
 * $1 is an enumeration of group names.
@@ -2740,9 +2742,12 @@ The name of the deletion log. Used as heading on [[Special:Log/delete]] and in t
 'rollback' => '{{Identical|Rollback}}',
 'rollback_short' => '{{Identical|Rollback}}',
 'rollbacklink' => '{{Identical|Rollback}}
+This link text appears on the recent changes page to users who have the "rollback" right.  It is also effectively a submit button; when clicked it performs the rollback without going to a dialog box first.
 This message has a tooltip {{msg-mw|tooltip-rollback}}',
-'rollbacklinkcount' => 'Text of the rollback link showing the number of edits to be rolled back. See also {{msg-mw|rollbacklink}}.
-* $1: the number of edits that will be rollbacked. If $1 is over the value of $wgShowRollbackEditCount (default: 10) {{msg-mw|rollbacklinkcount-morethan}} is used.',
+'rollbacklinkcount' => 'Text of the rollback link showing the number of edits to be rolled back. This link is also effectively a submit button; when clicked it performs the rollback without going to a dialog box first.  See also {{msg-mw|rollbacklink}}.
+* $1: the number of edits that will be rollbacked. If $1 is over the value of $wgShowRollbackEditCount (default: 10) {{msg-mw|rollbacklinkcount-morethan}} is used.
+
+The rollback link is displayed with a tooltip {{msg-mw|Tooltip-rollback}}',
 'rollbacklinkcount-morethan' => 'Text of the rollback link when a greater number of edits is to be rolled back. See also {{msg-mw|rollbacklink}}.
 
 When the number of edits rolled back is smaller than [[mw:Manual:$wgShowRollbackEditCount|$wgShowRollbackEditCount]], {{msg-mw|rollbacklinkcount}} is used instead.',
@@ -3349,7 +3354,7 @@ If the length of the translated message is over 60 characters (including spaces)
 'tooltip-watch' => '{{Identical|Add this page to your watchlist}}',
 'tooltip-watchlistedit-normal-submit' => 'Tooltip for {{msg|watchlistedit-normal-submit}} (used as button on [[Special:EditWatchlist]]).',
 'tooltip-watchlistedit-raw-submit' => 'Tooltip for {{msg|watchlistedit-raw-submit}} (used as button on [[Special:EditWatchlist/raw]]).',
-'tooltip-rollback' => 'Tooltip of the rollback link on the history page and the diff view {{msg-mw|rollbacklink}}
+'tooltip-rollback' => 'Tooltip of the rollback link on the history page and the diff view {{msg-mw|rollbacklinkcount}}
 {{Identical|Rollback}}
 {{Identical|Revert}}',
 'tooltip-undo' => 'Tooltip of the undo link on the history page and the diff view {{msg-mw|editundo}}
@@ -3484,7 +3489,7 @@ See also {{msg-mw|Anonuser}} and {{msg-mw|Siteusers}}.',
 'pageinfo-recent-edits' => 'The number of times the page has been edited recently. $1 is a localised duration (e.g. 9 days).',
 'pageinfo-recent-authors' => 'The number of users who have edited the page recently.',
 'pageinfo-restriction' => 'Parameters:
-* $1 is the type of page protection.',
+* $1 is the type of page protection (message restriction-$type, preferably in lowercase). If your language doesn\'t have small and capital letters, you can simply write <nowiki><code>$1</code></nowiki>.',
 'pageinfo-magic-words' => 'The list of magic words on the page. Parameters:
 * $1 is the number of magic words on the page.',
 'pageinfo-hidden-categories' => 'The list of hidden categories on the page. Parameters:
@@ -3543,7 +3548,12 @@ Parameters:
 * $4 is the MIME type, a formalized textual information — for example: <code>image/jpeg</code>
 * $5 is the total number of pages in the document.',
 '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 [[:File:Yes check.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]].
+
+Start with a lowercase letter, unless the first word is “SVG”.',
+'svg-long-desc-animated' => 'Displayed under an SVG image at the image description page if the image is animated. Non-animated images use {{msg-mw|svg-long-desc}}. $1 is width, $2 is height, and $3 is file size, including unit (for example "10 KB").
+
+Start with a lowercase letter, unless the first word is “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-size' => '
 Parameters:
@@ -3558,6 +3568,8 @@ Parameters:
 The variable $1 is the number of individual frames in an animated gif file.
 
 For example of message in use see [[:File:Mouse10.gif]].',
+'file-no-thumb-animation' => 'We cannot animate thumbnails of this file. This notice is shown on the image description page on animated svg files just below {{msg-mw|file-info-size}}. This message may be overridden by a more specific message of the form file-no-thumb-animation-&lt;extension&gt; like {{msg-mw|file-no-thumb-animation-gif}}',
+'file-no-thumb-animation-gif' => 'Cannot animate thumbnails of this gif file, because it has too big a resolution. The cut off resolution can vary between wikis ([[mw:manual:$wgMaxAnimatedGifArea|$wgMaxAnimatedGifArea]]). Note that resolution is calculated as width times height times number of frames. See {{msg-mw|file-no-thumb-animation}}.',
 
 # Special:NewFiles
 'newimages' => 'Page title of [[Special:NewImages]].',
@@ -4440,113 +4452,113 @@ Hint: the text "Remove Titles" is in {{msg-mw|watchlistedit-normal-submit}}',
 
 # Iranian month names
 'iranian-calendar-m1' => '{{optional}}
-Name of month in Iranian calender.',
+Name of month in Iranian calendar.',
 'iranian-calendar-m2' => '{{optional}}
-Name of month in Iranian calender.',
+Name of month in Iranian calendar.',
 'iranian-calendar-m3' => '{{optional}}
-Name of month in Iranian calender.',
+Name of month in Iranian calendar.',
 'iranian-calendar-m4' => '{{optional}}
-Name of month in Iranian calender.',
+Name of month in Iranian calendar.',
 'iranian-calendar-m5' => '{{optional}}
-Name of month in Iranian calender.',
+Name of month in Iranian calendar.',
 'iranian-calendar-m6' => '{{optional}}
-Name of month in Iranian calender.',
+Name of month in Iranian calendar.',
 'iranian-calendar-m7' => '{{optional}}
-Name of month in Iranian calender.',
+Name of month in Iranian calendar.',
 'iranian-calendar-m8' => '{{optional}}
-Name of month in Iranian calender.',
+Name of month in Iranian calendar.',
 'iranian-calendar-m9' => '{{optional}}
-Name of month in Iranian calender.',
+Name of month in Iranian calendar.',
 'iranian-calendar-m10' => '{{optional}}
-Name of month in Iranian calender.',
+Name of month in Iranian calendar.',
 'iranian-calendar-m11' => '{{optional}}
-Name of month in Iranian calender.',
+Name of month in Iranian calendar.',
 'iranian-calendar-m12' => '{{optional}}
-Name of month in Iranian calender.',
+Name of month in Iranian calendar.',
 
 # Hijri month names
 'hijri-calendar-m1' => '{{optional}}
-Name of month in Islamic calender.',
+Name of month in Islamic calendar.',
 'hijri-calendar-m2' => '{{optional}}
-Name of month in Islamic calender.',
+Name of month in Islamic calendar.',
 'hijri-calendar-m3' => '{{optional}}
-Name of month in Islamic calender.',
+Name of month in Islamic calendar.',
 'hijri-calendar-m4' => '{{optional}}
-Name of month in Islamic calender.',
+Name of month in Islamic calendar.',
 'hijri-calendar-m5' => '{{optional}}
-Name of month in Islamic calender.',
+Name of month in Islamic calendar.',
 'hijri-calendar-m6' => '{{optional}}
-Name of month in Islamic calender.',
+Name of month in Islamic calendar.',
 'hijri-calendar-m7' => '{{optional}}
-Name of month in Islamic calender.',
+Name of month in Islamic calendar.',
 'hijri-calendar-m8' => '{{optional}}
-Name of month in Islamic calender.',
+Name of month in Islamic calendar.',
 'hijri-calendar-m9' => '{{optional}}
-Name of month in Islamic calender.',
+Name of month in Islamic calendar.',
 'hijri-calendar-m10' => '{{optional}}
-Name of month in Islamic calender.',
+Name of month in Islamic calendar.',
 'hijri-calendar-m11' => '{{optional}}
-Name of month in Islamic calender.',
+Name of month in Islamic calendar.',
 'hijri-calendar-m12' => '{{optional}}
-Name of month in Islamic calender.',
+Name of month in Islamic calendar.',
 
 # Hebrew month names
 'hebrew-calendar-m1' => '{{optional}}
-Name of month in Hebrew calender.',
+Name of month in Hebrew calendar.',
 'hebrew-calendar-m2' => '{{optional}}
-Name of month in Hebrew calender.',
+Name of month in Hebrew calendar.',
 'hebrew-calendar-m3' => '{{optional}}
-Name of month in Hebrew calender.',
+Name of month in Hebrew calendar.',
 'hebrew-calendar-m4' => '{{optional}}
-Name of month in Hebrew calender.',
+Name of month in Hebrew calendar.',
 'hebrew-calendar-m5' => '{{optional}}
-Name of month in Hebrew calender.',
+Name of month in Hebrew calendar.',
 'hebrew-calendar-m6' => '{{optional}}
-Name of month in Hebrew calender.',
+Name of month in Hebrew calendar.',
 'hebrew-calendar-m6a' => '{{optional}}
-Name of month in Hebrew calender.',
+Name of month in Hebrew calendar.',
 'hebrew-calendar-m6b' => '{{optional}}
-Name of month in Hebrew calender.',
+Name of month in Hebrew calendar.',
 'hebrew-calendar-m7' => '{{optional}}
-Name of month in Hebrew calender.',
+Name of month in Hebrew calendar.',
 'hebrew-calendar-m8' => '{{optional}}
-Name of month in Hebrew calender.',
+Name of month in Hebrew calendar.',
 'hebrew-calendar-m9' => '{{optional}}
-Name of month in Hebrew calender.',
+Name of month in Hebrew calendar.',
 'hebrew-calendar-m10' => '{{optional}}
-Name of month in Hebrew calender.',
+Name of month in Hebrew calendar.',
 'hebrew-calendar-m11' => '{{optional}}
-Name of month in Hebrew calender.',
+Name of month in Hebrew calendar.',
 'hebrew-calendar-m12' => '{{optional}}
-Name of month in Hebrew calender.',
+Name of month in Hebrew calendar.',
 'hebrew-calendar-m1-gen' => '{{optional}}
-Name of month in Hebrew calender.',
+Name of month in Hebrew calendar.',
 'hebrew-calendar-m2-gen' => '{{optional}}
-Name of month in Hebrew calender.',
+Name of month in Hebrew calendar.',
 'hebrew-calendar-m3-gen' => '{{optional}}
-Name of month in Hebrew calender.',
+Name of month in Hebrew calendar.',
 'hebrew-calendar-m4-gen' => '{{optional}}
-Name of month in Hebrew calender.',
+Name of month in Hebrew calendar.',
 'hebrew-calendar-m5-gen' => '{{optional}}
-Name of month in Hebrew calender.',
+Name of month in Hebrew calendar.',
 'hebrew-calendar-m6-gen' => '{{optional}}
-Name of month in Hebrew calender.',
+Name of month in Hebrew calendar.',
 'hebrew-calendar-m6a-gen' => '{{optional}}
-Name of month in Hebrew calender.',
+Name of month in Hebrew calendar.',
 'hebrew-calendar-m6b-gen' => '{{optional}}
-Name of month in Hebrew calender.',
+Name of month in Hebrew calendar.',
 'hebrew-calendar-m7-gen' => '{{optional}}
-Name of month in Hebrew calender.',
+Name of month in Hebrew calendar.',
 'hebrew-calendar-m8-gen' => '{{optional}}
-Name of month in Hebrew calender.',
+Name of month in Hebrew calendar.',
 'hebrew-calendar-m9-gen' => '{{optional}}
-Name of month in Hebrew calender.',
+Name of month in Hebrew calendar.',
 'hebrew-calendar-m10-gen' => '{{optional}}
-Name of month in Hebrew calender.',
+Name of month in Hebrew calendar.',
 'hebrew-calendar-m11-gen' => '{{optional}}
-Name of month in Hebrew calender.',
+Name of month in Hebrew calendar.',
 'hebrew-calendar-m12-gen' => '{{optional}}
-Name of month in Hebrew calender.',
+Name of month in Hebrew calendar.',
 
 # Signatures
 'signature' => "This will be substituted in the signature (~<nowiki></nowiki>~~ or ~~<nowiki></nowiki>~~ excluding timestamp)
index c91c0b4..7c34cfb 100644 (file)
@@ -130,139 +130,139 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#PUSAPUNA', '#REDIRECCIÓN', '#REDIRECCION', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__YUYARINANNAQ__', '__NOTDC__', '__NOTOC__' ),
-       '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__', '__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', 'MESACTUALCOMPLETO', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'KUNANKILLASUTIP', 'GENERADORNOMBREMESACTUAL', 'MESACTUALGENITIVO', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'KUNANKILLAPISI', 'ABREVIACIONNOMBREMESACTUAL', 'ABREVIACIÓNNOMBREMESACTUAL', 'MESACTUALABREVIADO', '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', 'HORAACTUAL', 'HORA_ACTUAL', 'HORA_MINUTOS_ACTUAL', 'HORAMINUTOSACTUAL', 'TIEMPOACTUAL', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'KUNANURA', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'KAYPIKILLA', 'MESLOCAL', 'MESLOCAL2', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonthname'          => array( '1', 'KAYPIKILLASUTI', 'NOMBREMESLOCAL', 'MESLOCALCOMPLETO', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'KAYPIKILLASUTIP', 'GENERADORNOMBREMESLOCAL', 'MESLOCALGENITIVO', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'KAYPIKILLAPISI', 'ABREVIACIONMESLOCAL', 'MESLOCALABREVIADO', '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', 'HORALOCAL', 'HORAMINUTOSLOCAL', 'TIEMPOLOCAL', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'KAYPIURA', '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', 'NOMBRECOMPLETODEPÁGINA', 'NOMBRECOMPLETODEPAGINA', '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', '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', 'pagina=$1', 'página=$1', 'pagina $1', 'página $1', 'pagina_$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' ),
-       'img_sub'                 => array( '1', 'uran', 'sub' ),
-       'img_super'               => array( '1', 'hanan', 'super', 'sup' ),
-       'img_top'                 => array( '1', 'hawa', 'top' ),
-       'img_text_top'            => array( '1', 'qillqahawa', 'text-top' ),
-       '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', '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', 'NOMBREDESITIO', 'NOMBREDELSITIO', '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', '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:', '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', 'VERSIONACTUAL', 'VERSIÓNACTUAL', 'CURRENTVERSION' ),
-       'urlencode'               => array( '0', 'URLLLAWICHAY', 'URL-LLAWICHAY', 'CODIFICAR', 'CODIFICARURL:', 'URLENCODE:' ),
-       'anchorencode'            => array( '0', 'WATANALLAWICHAY', 'ANCHORENCODE' ),
-       'currenttimestamp'        => array( '1', 'KUNANPACHAQILLPA', 'MARCADEHORAACTUAL', 'CURRENTTIMESTAMP' ),
-       'localtimestamp'          => array( '1', 'KAYLLAPACHAQILLPA', 'MARCADEHORALOCAL', 'LOCALTIMESTAMP' ),
-       'directionmark'           => array( '1', 'PURIRIYSANANCHA', 'DIRECTIONMARK', 'DIRMARK' ),
-       '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', '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', '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', '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', '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' ),
+       'redirect'                  => array( '0', '#PUSAPUNA', '#REDIRECCIÓN', '#REDIRECCION', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__YUYARINANNAQ__', '__NOTDC__', '__NOTOC__' ),
+       '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__', '__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', 'MESACTUALCOMPLETO', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'KUNANKILLASUTIP', 'GENERADORNOMBREMESACTUAL', 'MESACTUALGENITIVO', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'KUNANKILLAPISI', 'ABREVIACIONNOMBREMESACTUAL', 'ABREVIACIÓNNOMBREMESACTUAL', 'MESACTUALABREVIADO', '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', 'HORAACTUAL', 'HORA_ACTUAL', 'HORA_MINUTOS_ACTUAL', 'HORAMINUTOSACTUAL', 'TIEMPOACTUAL', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'KUNANURA', 'HORAACTUAL', 'HORA_ACTUAL', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'KAYPIKILLA', 'MESLOCAL', 'MESLOCAL2', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonthname'            => array( '1', 'KAYPIKILLASUTI', 'NOMBREMESLOCAL', 'MESLOCALCOMPLETO', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'KAYPIKILLASUTIP', 'GENERADORNOMBREMESLOCAL', 'MESLOCALGENITIVO', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'KAYPIKILLAPISI', 'ABREVIACIONMESLOCAL', 'MESLOCALABREVIADO', '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', 'HORALOCAL', 'HORAMINUTOSLOCAL', 'TIEMPOLOCAL', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'KAYPIURA', 'HORALOCAL', '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', 'NOMBRECOMPLETODEPÁGINA', 'NOMBRECOMPLETODEPAGINA', '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', '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', 'pagina=$1', 'página=$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' ),
+       'img_sub'                   => array( '1', 'uran', 'sub' ),
+       'img_super'                 => array( '1', 'hanan', 'super', 'sup' ),
+       'img_top'                   => array( '1', 'hawa', 'top' ),
+       'img_text_top'              => array( '1', 'qillqahawa', 'text-top' ),
+       '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', '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', 'NOMBREDESITIO', 'NOMBREDELSITIO', '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', '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:', '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', 'VERSIONACTUAL', 'VERSIÓNACTUAL', 'CURRENTVERSION' ),
+       'urlencode'                 => array( '0', 'URLLLAWICHAY', 'URL-LLAWICHAY', 'CODIFICAR', 'CODIFICARURL:', 'URLENCODE:' ),
+       'anchorencode'              => array( '0', 'WATANALLAWICHAY', 'ANCHORENCODE' ),
+       'currenttimestamp'          => array( '1', 'KUNANPACHAQILLPA', 'MARCADEHORAACTUAL', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', 'KAYLLAPACHAQILLPA', 'MARCADEHORALOCAL', 'LOCALTIMESTAMP' ),
+       'directionmark'             => array( '1', 'PURIRIYSANANCHA', 'DIRECTIONMARK', 'DIRMARK' ),
+       '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', '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', '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', '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', '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' ),
 );
 
 $messages = array(
index ebc4dc5..fa744e3 100644 (file)
@@ -35,10 +35,10 @@ $namespaceNames = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#RENVIAMENT', '#REDIRECT' ),
-       'img_thumbnail'           => array( '1', 'miniatura', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'miniatura=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_upright'             => array( '1', 'sidretg', 'sidretg=$1', 'sidretg_$1', 'upright', 'upright=$1', 'upright $1' ),
+       'redirect'                  => array( '0', '#RENVIAMENT', '#REDIRECT' ),
+       'img_thumbnail'             => array( '1', 'miniatura', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'miniatura=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_upright'               => array( '1', 'sidretg', 'sidretg=$1', 'sidretg_$1', 'upright', 'upright=$1', 'upright $1' ),
 );
 
 $messages = array(
index a926bd8..beed6e8 100644 (file)
 $separatorTransformTable = array( ',' => ".", '.' => ',' );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#REDIRECTEAZA', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__FARACUPRINS__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__FARAGALERIE__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__FORTEAZACUPRINS__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__CUPRINS__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__FARAEDITSECTIUNE__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '__FARAANTET__', '__NOHEADER__' ),
-       'currentmonth'            => array( '1', 'NUMARLUNACURENTA', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', 'LUNACURENTA1', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', 'NUMELUNACURENTA', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'NUMELUNACURENTAGEN', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'LUNACURENTAABREV', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'NUMARZIUACURENTA', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'NUMARZIUACURENTA2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'NUMEZIUACURENTA', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'ANULCURENT', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'TIMPULCURENT', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'ORACURENTA', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'LUNALOCALA', 'LUNALOCALA2', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', 'LUNALOCALA1', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'NUMELUNALOCALA', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'NUMELUNALOCALAGEN', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'LUNALOCALAABREV', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'ZIUALOCALA', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'ZIUALOCALA2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'NUMEZIUALOCALA', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'ANULLOCAL', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'TIMPULLOCAL', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'ORALOCALA', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'NUMARDEPAGINI', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'NUMARDEARTICOLE', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'NUMARDEFISIERE', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'NUMARDEUTILIZATORI', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'NUMARDEUTILIZATORIACTIVI', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'NUMARDEMODIFICARI', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'NUMARDEVIZUALIZARI', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'NUMEPAGINA', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'NUMEEPAGINA', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'SPATIUDENUME', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'SPATIUUDENUME', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'SPATIUDEDISCUTIE', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'SPATIUUDEDISCUTIE', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'SPATIUSUBIECT', 'SPATIUARTICOL', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'SPATIUUSUBIECT', 'SPATIUUARTICOL', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'NUMEPAGINACOMPLET', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'NUMEEPAGINACOMPLET', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'NUMESUBPAGINA', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'NUMEESUBPAGINA', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'NUMEDEBAZAPAGINA', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'NUMEEDEBAZAPAGINA', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'NUMEPAGINADEDISCUTIE', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'NUMEEPAGINADEDISCUTIE', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'NUMEPAGINASUBIECT', 'NUMEPAGINAARTICOL', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'subjectpagenamee'        => array( '1', 'NUMEEPAGINASUBIECT', 'NUMEEPAGINAARTICOL', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
-       'msg'                     => array( '0', 'MSJ:', 'MSG:' ),
-       'msgnw'                   => array( '0', 'MSJNOU:', 'MSGNW:' ),
-       'img_thumbnail'           => array( '1', 'miniatura', 'mini', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'miniatura=$1', 'mini=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'dreapta', 'right' ),
-       'img_left'                => array( '1', 'stanga', 'left' ),
-       'img_none'                => array( '1', 'nu', 'none' ),
-       'img_center'              => array( '1', 'centru', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'cadru', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', 'faracadru', 'frameless' ),
-       '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_sub'                 => array( '1', 'indice', 'sub' ),
-       'img_super'               => array( '1', 'exponent', 'super', 'sup' ),
-       'img_top'                 => array( '1', 'sus', 'top' ),
-       'img_text_top'            => array( '1', 'text-sus', 'text-top' ),
-       'img_middle'              => array( '1', 'mijloc', 'middle' ),
-       'img_bottom'              => array( '1', 'jos', 'bottom' ),
-       'img_text_bottom'         => array( '1', 'text-jos', 'text-bottom' ),
-       'img_link'                => array( '1', 'legătură=$1', 'link=$1' ),
-       'sitename'                => array( '1', 'NUMESITE', 'SITENAME' ),
-       'ns'                      => array( '0', 'SN:', 'NS:' ),
-       'localurl'                => array( '0', 'URLLOCAL:', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'URLLOCALE:', 'LOCALURLE:' ),
-       'servername'              => array( '0', 'NUMESERVER', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'CALESCRIPT', 'SCRIPTPATH' ),
-       'grammar'                 => array( '0', 'GRAMATICA:', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'GEN:', 'GENDER:' ),
-       'notitleconvert'          => array( '0', '__FARACONVERTIRETITLU__', '__FCT__', '__NOTITLECONVERT__', '__NOTC__' ),
-       'nocontentconvert'        => array( '0', '__FARACONVERTIRECONTINUT__', '__FCC__', '__NOCONTENTCONVERT__', '__NOCC__' ),
-       'currentweek'             => array( '1', 'SAPTAMANACURENTA', 'CURRENTWEEK' ),
-       'localweek'               => array( '1', 'SAPTAMANALOCALA', 'LOCALWEEK' ),
-       'revisionid'              => array( '1', 'IDREVIZIE', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'ZIREVIZIE', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'ZIREVIZIE2', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'LUNAREVIZIE', 'REVISIONMONTH' ),
-       'revisionyear'            => array( '1', 'ANREVIZIE', 'REVISIONYEAR' ),
-       'revisiontimestamp'       => array( '1', 'STAMPILATIMPREVIZIE', 'REVISIONTIMESTAMP' ),
-       'revisionuser'            => array( '1', 'UTILIZATORREVIZIE', 'REVISIONUSER' ),
-       'fullurl'                 => array( '0', 'URLCOMPLET:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'URLCOMPLETE:', 'FULLURLE:' ),
-       'lcfirst'                 => array( '0', 'MINUSCULAPRIMA:', 'LCFIRST:' ),
-       'ucfirst'                 => array( '0', 'MAJUSCULAPRIMA:', 'UCFIRST:' ),
-       'lc'                      => array( '0', 'MINUSCULA:', 'LC:' ),
-       'uc'                      => array( '0', 'MAJUSCULA:', 'UC:' ),
-       'raw'                     => array( '0', 'BRUT:', 'RAW:' ),
-       'displaytitle'            => array( '1', 'ARATATITLU', 'DISPLAYTITLE' ),
-       'newsectionlink'          => array( '1', '__LEGATURASECTIUNENOUA__', '__NEWSECTIONLINK__' ),
-       'nonewsectionlink'        => array( '1', '__FARALEGATURASECTIUNENOUA__', '__NONEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', 'VERSIUNECURENTA', 'CURRENTVERSION' ),
-       'urlencode'               => array( '0', 'CODIFICAREURL:', 'URLENCODE:' ),
-       'anchorencode'            => array( '0', 'CODIFICAREANCORA', 'ANCHORENCODE' ),
-       'currenttimestamp'        => array( '1', 'STAMPILATIMPCURENT', 'CURRENTTIMESTAMP' ),
-       'localtimestamp'          => array( '1', 'STAMPILATIMPLOCAL', 'LOCALTIMESTAMP' ),
-       'directionmark'           => array( '1', 'SEMNDIRECTIE', 'DIRECTIONMARK', 'DIRMARK' ),
-       'language'                => array( '0', '#LIMBA:', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', 'LIMBACONTINUT', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'        => array( '1', 'PANIGIINSPATIULDENUME:', 'PAGINIINSN:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'          => array( '1', 'NUMARADMINI', 'NUMBEROFADMINS' ),
-       'formatnum'               => array( '0', 'FORMATNR', 'FORMATNUM' ),
-       'defaultsort'             => array( '1', 'SORTAREIMPLICITA:', 'CHEIESORTAREIMPLICITA:', 'CATEGORIESORTAREIMPLICITA:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'filepath'                => array( '0', 'CALEAFISIERULUI:', 'FILEPATH:' ),
-       'tag'                     => array( '0', 'eticheta', 'tag' ),
-       'hiddencat'               => array( '1', '__ASCUNDECAT__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'PAGINIINCATEGORIE', 'PAGINIINCAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'MARIMEPAGINA', 'PAGESIZE' ),
-       'noindex'                 => array( '1', '__FARAINDEX__', '__NOINDEX__' ),
-       'numberingroup'           => array( '1', 'NUMARINGRUP', 'NUMINGRUP', 'NUMBERINGROUP', 'NUMINGROUP' ),
-       'staticredirect'          => array( '1', '__REDIRECTIONARESTATICA__', '__STATICREDIRECT__' ),
-       'protectionlevel'         => array( '1', 'NIVELPROTECTIE', 'PROTECTIONLEVEL' ),
-       'formatdate'              => array( '0', 'formatdata', 'dataformat', 'formatdate', 'dateformat' ),
+       'redirect'                  => array( '0', '#REDIRECTEAZA', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__FARACUPRINS__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__FARAGALERIE__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__FORTEAZACUPRINS__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__CUPRINS__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__FARAEDITSECTIUNE__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '__FARAANTET__', '__NOHEADER__' ),
+       'currentmonth'              => array( '1', 'NUMARLUNACURENTA', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'LUNACURENTA1', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'NUMELUNACURENTA', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'NUMELUNACURENTAGEN', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'LUNACURENTAABREV', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'NUMARZIUACURENTA', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'NUMARZIUACURENTA2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'NUMEZIUACURENTA', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'ANULCURENT', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'TIMPULCURENT', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'ORACURENTA', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'LUNALOCALA', 'LUNALOCALA2', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'LUNALOCALA1', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'NUMELUNALOCALA', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'NUMELUNALOCALAGEN', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'LUNALOCALAABREV', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'ZIUALOCALA', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'ZIUALOCALA2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'NUMEZIUALOCALA', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'ANULLOCAL', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'TIMPULLOCAL', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'ORALOCALA', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'NUMARDEPAGINI', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'NUMARDEARTICOLE', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'NUMARDEFISIERE', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'NUMARDEUTILIZATORI', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'NUMARDEUTILIZATORIACTIVI', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'NUMARDEMODIFICARI', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'NUMARDEVIZUALIZARI', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'NUMEPAGINA', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'NUMEEPAGINA', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'SPATIUDENUME', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'SPATIUUDENUME', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'SPATIUDEDISCUTIE', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'SPATIUUDEDISCUTIE', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'SPATIUSUBIECT', 'SPATIUARTICOL', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'SPATIUUSUBIECT', 'SPATIUUARTICOL', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'NUMEPAGINACOMPLET', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'NUMEEPAGINACOMPLET', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'NUMESUBPAGINA', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'NUMEESUBPAGINA', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'NUMEDEBAZAPAGINA', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'NUMEEDEBAZAPAGINA', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'NUMEPAGINADEDISCUTIE', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'NUMEEPAGINADEDISCUTIE', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'NUMEPAGINASUBIECT', 'NUMEPAGINAARTICOL', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'          => array( '1', 'NUMEEPAGINASUBIECT', 'NUMEEPAGINAARTICOL', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+       'msg'                       => array( '0', 'MSJ:', 'MSG:' ),
+       'msgnw'                     => array( '0', 'MSJNOU:', 'MSGNW:' ),
+       'img_thumbnail'             => array( '1', 'miniatura', 'mini', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'miniatura=$1', 'mini=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'dreapta', 'right' ),
+       'img_left'                  => array( '1', 'stanga', 'left' ),
+       'img_none'                  => array( '1', 'nu', 'none' ),
+       'img_center'                => array( '1', 'centru', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'cadru', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'faracadru', 'frameless' ),
+       '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_sub'                   => array( '1', 'indice', 'sub' ),
+       'img_super'                 => array( '1', 'exponent', 'super', 'sup' ),
+       'img_top'                   => array( '1', 'sus', 'top' ),
+       'img_text_top'              => array( '1', 'text-sus', 'text-top' ),
+       'img_middle'                => array( '1', 'mijloc', 'middle' ),
+       'img_bottom'                => array( '1', 'jos', 'bottom' ),
+       'img_text_bottom'           => array( '1', 'text-jos', 'text-bottom' ),
+       'img_link'                  => array( '1', 'legătură=$1', 'link=$1' ),
+       'sitename'                  => array( '1', 'NUMESITE', 'SITENAME' ),
+       'ns'                        => array( '0', 'SN:', 'NS:' ),
+       'localurl'                  => array( '0', 'URLLOCAL:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'URLLOCALE:', 'LOCALURLE:' ),
+       'servername'                => array( '0', 'NUMESERVER', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'CALESCRIPT', 'SCRIPTPATH' ),
+       'grammar'                   => array( '0', 'GRAMATICA:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'GEN:', 'GENDER:' ),
+       'notitleconvert'            => array( '0', '__FARACONVERTIRETITLU__', '__FCT__', '__NOTITLECONVERT__', '__NOTC__' ),
+       'nocontentconvert'          => array( '0', '__FARACONVERTIRECONTINUT__', '__FCC__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+       'currentweek'               => array( '1', 'SAPTAMANACURENTA', 'CURRENTWEEK' ),
+       'localweek'                 => array( '1', 'SAPTAMANALOCALA', 'LOCALWEEK' ),
+       'revisionid'                => array( '1', 'IDREVIZIE', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'ZIREVIZIE', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'ZIREVIZIE2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'LUNAREVIZIE', 'REVISIONMONTH' ),
+       'revisionyear'              => array( '1', 'ANREVIZIE', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'STAMPILATIMPREVIZIE', 'REVISIONTIMESTAMP' ),
+       'revisionuser'              => array( '1', 'UTILIZATORREVIZIE', 'REVISIONUSER' ),
+       'fullurl'                   => array( '0', 'URLCOMPLET:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'URLCOMPLETE:', 'FULLURLE:' ),
+       'lcfirst'                   => array( '0', 'MINUSCULAPRIMA:', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', 'MAJUSCULAPRIMA:', 'UCFIRST:' ),
+       'lc'                        => array( '0', 'MINUSCULA:', 'LC:' ),
+       'uc'                        => array( '0', 'MAJUSCULA:', 'UC:' ),
+       'raw'                       => array( '0', 'BRUT:', 'RAW:' ),
+       'displaytitle'              => array( '1', 'ARATATITLU', 'DISPLAYTITLE' ),
+       'newsectionlink'            => array( '1', '__LEGATURASECTIUNENOUA__', '__NEWSECTIONLINK__' ),
+       'nonewsectionlink'          => array( '1', '__FARALEGATURASECTIUNENOUA__', '__NONEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'VERSIUNECURENTA', 'CURRENTVERSION' ),
+       'urlencode'                 => array( '0', 'CODIFICAREURL:', 'URLENCODE:' ),
+       'anchorencode'              => array( '0', 'CODIFICAREANCORA', 'ANCHORENCODE' ),
+       'currenttimestamp'          => array( '1', 'STAMPILATIMPCURENT', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', 'STAMPILATIMPLOCAL', 'LOCALTIMESTAMP' ),
+       'directionmark'             => array( '1', 'SEMNDIRECTIE', 'DIRECTIONMARK', 'DIRMARK' ),
+       'language'                  => array( '0', '#LIMBA:', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'LIMBACONTINUT', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', 'PANIGIINSPATIULDENUME:', 'PAGINIINSN:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', 'NUMARADMINI', 'NUMBEROFADMINS' ),
+       'formatnum'                 => array( '0', 'FORMATNR', 'FORMATNUM' ),
+       'defaultsort'               => array( '1', 'SORTAREIMPLICITA:', 'CHEIESORTAREIMPLICITA:', 'CATEGORIESORTAREIMPLICITA:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'filepath'                  => array( '0', 'CALEAFISIERULUI:', 'FILEPATH:' ),
+       'tag'                       => array( '0', 'eticheta', 'tag' ),
+       'hiddencat'                 => array( '1', '__ASCUNDECAT__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'PAGINIINCATEGORIE', 'PAGINIINCAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'MARIMEPAGINA', 'PAGESIZE' ),
+       'noindex'                   => array( '1', '__FARAINDEX__', '__NOINDEX__' ),
+       'numberingroup'             => array( '1', 'NUMARINGRUP', 'NUMINGRUP', 'NUMBERINGROUP', 'NUMINGROUP' ),
+       'staticredirect'            => array( '1', '__REDIRECTIONARESTATICA__', '__STATICREDIRECT__' ),
+       'protectionlevel'           => array( '1', 'NIVELPROTECTIE', 'PROTECTIONLEVEL' ),
+       'formatdate'                => array( '0', 'formatdata', 'dataformat', 'formatdate', 'dateformat' ),
 );
 
 $namespaceNames = array(
@@ -566,9 +566,9 @@ $1',
 'newmessageslink' => 'mesaje noi',
 'newmessagesdifflink' => 'comparație cu versiunea precedentă',
 'youhavenewmessagesfromusers' => 'Aveți $1 de la {{PLURAL:$3|un alt utilizator|$3 utilizatori}} ($2).',
-'youhavenewmessagesmanyusers' => 'Aveți $1 de la mulți utilizatori ($2).',
+'youhavenewmessagesmanyusers' => 'Aveți $1 de la mai mulți utilizatori ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|un mesaj nou|mesaje noi}}',
-'newmessagesdifflinkplural' => 'ultima/(ele) {{PLURAL:$1|schimbare|schimbări}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|ultima modificare|ultimele modificări}}',
 'youhavenewmessagesmulti' => 'Aveți mesaje noi la $1',
 'editsection' => 'modificare',
 'editold' => 'modificare',
@@ -1533,16 +1533,16 @@ Dacă decideți furnizarea sa, acesta va fi folosit pentru a vă atribui munca.'
 'grouppage-suppress' => '{{ns:project}}:Oversight',
 
 # Rights
-'right-read' => 'Citește paginile',
+'right-read' => 'Citește pagini',
 'right-edit' => 'Modifică paginile',
 'right-createpage' => 'Creează pagini (altele decât pagini de discuție)',
 'right-createtalk' => 'Creează pagini de discuție',
 'right-createaccount' => 'Creează conturi noi',
 'right-minoredit' => 'Marchează modificările minore',
-'right-move' => 'Mută paginile',
-'right-move-subpages' => 'Mută paginile cu tot cu subpagini',
+'right-move' => 'Redenumește paginile',
+'right-move-subpages' => 'Redenumește paginile cu tot cu subpagini',
 'right-move-rootuserpages' => 'Redenumește pagina principală a unui utilizator',
-'right-movefile' => 'Mută fișierele',
+'right-movefile' => 'Redenumește fișiere',
 'right-suppressredirect' => 'Nu crea o redirecționare de la vechiul nume atunci când muți o pagină',
 'right-upload' => 'Încarcă fișiere',
 'right-reupload' => 'Suprascrie un fișier existent',
@@ -1552,10 +1552,10 @@ Dacă decideți furnizarea sa, acesta va fi folosit pentru a vă atribui munca.'
 'right-purge' => 'Curăță memoria cache pentru o pagină fără confirmare',
 'right-autoconfirmed' => 'Modifică paginile semi-protejate',
 'right-bot' => 'Tratare ca proces automat',
-'right-nominornewtalk' => 'Nu activa mesajul "Aveți un mesaj nou" la modificarea minoră a paginii de discuții a utilizatorului',
+'right-nominornewtalk' => 'Nu declanșează mesajul „Aveți un mesaj nou” atunci când efectuează o modificare minoră pe pagina de discuții a utilizatorului',
 'right-apihighlimits' => 'Folosește o limită mai mare pentru rezultatele cererilor API',
 'right-writeapi' => 'Utilizează API la scriere',
-'right-delete' => 'Şterge pagini',
+'right-delete' => 'Șterge pagini',
 'right-bigdelete' => 'Şterge pagini cu istoric lung',
 'right-deletelogentry' => 'Șterge și recuperează intrări specifice din jurnale',
 'right-deleterevision' => 'Șterge și recuperează versiuni specifice ale paginilor',
@@ -1608,10 +1608,10 @@ Dacă decideți furnizarea sa, acesta va fi folosit pentru a vă atribui munca.'
 'action-createtalk' => 'creați pagini de discuție',
 'action-createaccount' => 'creați acest cont de utilizator',
 'action-minoredit' => 'marcați această modificare ca minoră',
-'action-move' => 'mutați această pagină',
-'action-move-subpages' => 'mutați această pagină și subpaginile sale',
+'action-move' => 'redenumiți această pagină',
+'action-move-subpages' => 'redenumiți această pagină și subpaginile sale',
 'action-move-rootuserpages' => 'redenumiți pagina principală a unui utilizator',
-'action-movefile' => 'mutați acest fișier',
+'action-movefile' => 'redenumiți acest fișier',
 'action-upload' => 'încărcați acest fișier',
 'action-reupload' => 'suprascrieți fișierul existent',
 'action-reupload-shared' => 'rescrieți acest fișier în depozitul partajat',
@@ -1979,6 +1979,7 @@ Poate doriți să-i modificați descrierea pe [$2 pagina sa descriptivă] de aco
 'uploadnewversion-linktext' => 'Încarcă o versiune nouă a acestui fișier',
 'shared-repo-from' => 'de la $1',
 'shared-repo' => 'un depozit partajat',
+'upload-disallowed-here' => 'Din păcate, nu puteți suprascrie această imagine.',
 
 # File reversion
 'filerevert' => 'Revenire $1',
@@ -2152,12 +2153,12 @@ Intrările <del>tăiate</del> au fost rezolvate.',
 'newpages-username' => 'Nume de utilizator:',
 'ancientpages' => 'Cele mai vechi articole',
 'move' => 'Redenumire',
-'movethispage' => 'Mută această pagină',
+'movethispage' => 'Redenumește această pagină',
 'unusedimagestext' => 'Următoarele fișiere există dar nu sunt incluse în nicio altă pagină.
 Vă rugăm să aveți în vedere faptul că alte saituri web pot avea o legătură directă către acest URL și s-ar putea afla aici chiar dacă nu sunt în utlizare activă.',
 'unusedcategoriestext' => 'Următoarele categorii de pagini există și totuși nici un articol sau categorie nu le folosește.',
 'notargettitle' => 'Lipsă țintă',
-'notargettext' => 'Nu ai specificat nici o pagină sau un utilizator țintă pentru care să se efectueze această operațiune.',
+'notargettext' => 'Nu ați specificat nici o pagină sau un utilizator țintă pentru care să se efectueze această operațiune.',
 'nopagetitle' => 'Nu există pagina destinație',
 'nopagetext' => 'Pagina destinație specificată nu există.',
 'pager-newer-n' => '{{PLURAL:$1|1 mai nou|$1 mai noi}}',
@@ -2251,9 +2252,9 @@ Protocoale suportate: <code>$1</code> (nu adăugați niciunul dintre acestea în
 'newuserlogpagetext' => 'Acesta este jurnalul creărilor conturilor de utilizator.',
 
 # Special:ListGroupRights
-'listgrouprights' => 'Permisiunile grupurilor de utilizatori',
-'listgrouprights-summary' => 'Mai jos este afișată o listă a grupurilor de utilizatori definită în această wiki, împreună cu permisiunile de acces asociate.
-Pot exista [[{{MediaWiki:Listgrouprights-helppage}}|informații adiționale]] despre permisiunile individuale.',
+'listgrouprights' => 'Permisiuni grupuri de utilizatori',
+'listgrouprights-summary' => 'Mai jos se află o listă a grupurilor de utilizatori definită în aceast wiki, împreună cu permisiunile de acces asociate.
+Pot exista [[{{MediaWiki:Listgrouprights-helppage}}|informații suplimentare]] despre permisiuni individuale.',
 'listgrouprights-key' => '* <span class="listgrouprights-granted">Drept acordat</span>
 * <span class="listgrouprights-revoked">Drept revocat</span>',
 'listgrouprights-group' => 'Grup',
@@ -2494,9 +2495,9 @@ Puteți schimba nivelul de protejare al acestei pagini, dar asta nu va afecta pr
 
 # Restrictions (nouns)
 'restriction-edit' => 'Modificare',
-'restriction-move' => 'Mută',
-'restriction-create' => 'Creează',
-'restriction-upload' => 'Încarcă',
+'restriction-move' => 'Redenumire',
+'restriction-create' => 'Creare',
+'restriction-upload' => 'Încărcare',
 
 # Restriction levels
 'restriction-level-sysop' => 'protejat complet',
@@ -2517,7 +2518,7 @@ Pentru a realiza o recuperare selectivă bifați versiunile pe care doriți să
 'undeleterevdel' => "Restaurarea unui versiuni nu va fi efectuată dacă ea va apărea în capul listei de versiuni parțial șterse.
 În acest caz, trebuie să debifați sau să reafișați (''unhide'') cea mai recentă versiune ștearsă.",
 'undeletehistorynoadmin' => 'Acest articol a fost șters. Motivul ștergerii apare mai jos, alături de detaliile utilzatorilor care au editat această pagină înainte de ștergere. Textul prorpiu-zis al reviziilor șterse este disponibil doar administratorilor.',
-'undelete-revision' => 'Ştergere revizia $1 (din $4 $5) de către $3:',
+'undelete-revision' => 'Ștergere versiunea $1 (din $4 $5) de către $3:',
 'undeleterevision-missing' => 'Versiune lipsă sau invalidă.
 S-ar putea ca legătura să fie greșită, ori versiunea să fi fost restaurată sau ștearsă din arhivă.',
 'undelete-nodiff' => 'Nu s-a găsit vreo versiune anterioară.',
@@ -2762,22 +2763,22 @@ Pentru a închide sau deschide baza de date, acesta trebuie să poată fi scris
 'lockedbyandtime' => '(de $1, pe $2, la $3 )',
 
 # Move page
-'move-page' => 'Mută $1',
-'move-page-legend' => 'Mută pagina',
-'movepagetext' => "Puteți folosi formularul de mai jos pentru a redenumi o pagină, mutându-i toată istoria sub noul nume.
+'move-page' => 'Redenumire $1',
+'move-page-legend' => 'Redenumire pagină',
+'movepagetext' => "Puteți folosi formularul de mai jos pentru a redenumi o pagină, mutându-i tot istoricul sub noul nume.
 Pagina veche va deveni o pagină de redirecționare către pagina nouă.
 Legăturile către pagina veche nu vor fi redirecționate către cea nouă;
 nu uitați să verificați dacă nu există redirecționări [[Special:DoubleRedirects|duble]] sau [[Special:BrokenRedirects|invalide]].
 
 Vă rugăm să rețineți că sunteți responsabil(ă) pentru a face legăturile vechi să rămână valide.
 
-Rețineți că pagina '''nu va fi mutată''' dacă există deja o pagină cu noul titlu, în afară de cazul că este complet goală sau este
-o redirecționare și în plus nu are nici o istorie de modificare.
-Cu alte cuvinte, veți putea muta înapoi o pagină pe care ați mutat-o greșit, dar nu veți putea suprascrie o pagină validă existentă prin mutarea alteia.
+Rețineți că pagina '''nu va fi redenumită''' dacă există deja o pagină cu noul titlu, în afara cazurilor în care cea din urmă nu are conținut sau este deja
+o redirecționare; în plus, aceasta nu trebuie să aibă un istoric de modificări.
+Cu alte cuvinte, veți putea redenumi înapoi o pagină pe care ați redenumit-o greșit, dar nu veți putea suprascrie o pagină validă existentă prin redenumirea alteia.
 
 '''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.",
+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]].
@@ -2789,43 +2790,42 @@ Acest lucru înseamnă că veți putea redenumi la titlul inițial o pagină gre
 '''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}}
-* Există deja o pagină de discuții cu conținut (care nu este goală), sau
-* Nu confirmi căsuța de mai jos.
-
-În oricare din cazurile de mai sus va trebui să muți sau să unifici
-manual paginile de discuții, dacă dorești acest lucru.",
+'movepagetalktext' => "Pagina de discuții asociată, dacă există, va fi redenumită
+automat odată cu aceasta în '''afara următoarelor cazuri''':
+* există deja o pagină de discuții cu conținut (care nu este goală) sub noul nume, sau
+* nu bifați căsuța de mai jos.
+
+În oricare din cazurile de mai sus va trebui să redenumiți sau să unificați
+manual paginile de discuții, dacă doriți acest lucru.",
 'movearticle' => 'Pagina de redenumit:',
 'moveuserpage-warning' => "'''Atenție''': sunteți pe cale să redenumiți o pagină de utilizator. Vă rugăm să rețineți că singura redenumită va fi pagina, nu și utilizatorul.",
 'movenologin' => 'Nu sunteți autentificat{{GENDER:||ă}}.',
-'movenologintext' => 'Trebuie să fii un utilizator înregistrat și să te [[Special:UserLogin|autentifici]] pentru a muta o pagină.',
-'movenotallowed' => 'Nu ai permisiunea să muți pagini.',
-'movenotallowedfile' => 'Nu ai permisiunea de a muta fișiere.',
-'cant-move-user-page' => 'Nu ai permisiunea de a muta paginile utilizatorului (în afară de subpagini).',
-'cant-move-to-user-page' => 'Nu aveți permisiunea de a muta o pagină în pagina utilizatorului (cu excepția subpaginii utilizatorului).',
+'movenologintext' => 'Trebuie să fiți un utilizator înregistrat și [[Special:UserLogin|autentificat]] pentru a redenumi o pagină.',
+'movenotallowed' => 'Nu aveți permisiunea de a redenumi pagini.',
+'movenotallowedfile' => 'Nu aveți permisiunea de a redenumi fișiere.',
+'cant-move-user-page' => 'Nu aveți permisiunea de a redenumi pagini de utilizator (cu excepția subpaginilor).',
+'cant-move-to-user-page' => 'Nu aveți permisiunea de a redenumi o pagină într-o pagină de utilizator (cu excepția subpaginii utilizatorului).',
 'newtitle' => 'Titlul nou',
 'move-watch' => 'Urmărește această pagină',
-'movepagebtn' => 'Mută pagina',
-'pagemovedsub' => 'Pagina a fost mutată',
-'movepage-moved' => "'''Pagina „$1” a fost mutată la „$2”'''",
+'movepagebtn' => 'Redenumește pagina',
+'pagemovedsub' => 'Pagina a fost redenumită',
+'movepage-moved' => "'''Pagina „$1” a fost redenumită în „$2”'''",
 'movepage-moved-redirect' => 'O redirecționare a fost creată.',
 'movepage-moved-noredirect' => 'Crearea redirecționărilor a fost suprimată.',
 'articleexists' => 'O pagină cu același nume există deja, sau numele pe care l-ați ales este invalid. Sunteți rugat să alegeți un alt nume.',
-'cantmove-titleprotected' => 'Nu puteți muta o pagină la această locație, pentru că noul titlu a fost protejat la creare',
-'talkexists' => "'''Pagina în sine a fost mutată cu succes, dar pagina de discuții nu a putut fi mutată deoarece o alta deja există la noul titlu.
-Te rugăm să le unifici manual.'''",
-'movedto' => 'mutată la',
+'cantmove-titleprotected' => 'Nu puteți redenumi o pagină cu acest nume, pentru că noul titlu a fost protejat la creare.',
+'talkexists' => "'''Pagina în sine a fost redenumită cu succes, dar pagina de discuții nu a putut fi redenumită deoarece o alta deja există la noul titlu.
+Vă rugăm să le unificați manual.'''",
+'movedto' => 'redenumită în',
 'movetalk' => 'Redenumește pagina de discuții asociată',
-'move-subpages' => 'Mută subpaginile (până la $1)',
-'move-talk-subpages' => 'Mută subpaginile paginii de discuții (până la $1)',
+'move-subpages' => 'Redenumește subpaginile (până la $1)',
+'move-talk-subpages' => 'Redenumește subpaginile paginii de discuții (până la $1)',
 'movepage-page-exists' => 'Pagina $1 există deja și nu poate fi rescrisă automat.',
-'movepage-page-moved' => 'Pagina $1 a fost mutată la $2.',
-'movepage-page-unmoved' => 'Pagina $1 nu a putut fi mutată la $2.',
-'movepage-max-pages' => 'Maxim $1 {{PLURAL:$1|pagină a fost mutată|pagini au fost mutate}}, nicio altă pagină nu va mai fi mutată automat.',
-'movelogpage' => 'Jurnal mutări',
-'movelogpagetext' => 'Mai jos se află o listă cu paginile mutate.',
+'movepage-page-moved' => 'Pagina $1 a fost redenumită în $2.',
+'movepage-page-unmoved' => 'Pagina $1 nu a putut fi redenumită în $2.',
+'movepage-max-pages' => 'Maximul de $1 {{PLURAL:$1|pagină redenumită|pagini redenumite|de pagini redenumite}} a fost atins și nici o altă pagină nu va mai fi redenumită automat.',
+'movelogpage' => 'Jurnal redenumiri',
+'movelogpagetext' => 'Mai jos se află o listă cu paginile redenumite.',
 'movesubpage' => '{{PLURAL:$1|Subpagină|Subpagini}}',
 'movesubpagetext' => 'Această pagină are $1 {{PLURAL:$1|subpagină afișată|subpagini afișate}} mai jos.',
 'movenosubpage' => 'Această pagină nu are subpagini.',
@@ -2837,12 +2837,12 @@ Te rugăm să le unifici manual.'''",
 Pagina destinație „[[:$1]]” există deja. Doriți să o ștergeți pentru a face loc redenumirii?',
 'delete_and_move_confirm' => 'Da, șterge pagina.',
 'delete_and_move_reason' => 'Șters pentru a face loc redenumirii paginii „[[$1]]”',
-'selfmove' => 'Titlurile sursei și ale destinației sunt aceleași; nu puteți muta o pagină peste ea însăși.',
+'selfmove' => 'Titlul sursei și al destinației este aceleași; nu puteți redenumi o pagină peste ea însăși.',
 'immobile-source-namespace' => 'Nu se pot redenumi paginile din spațiul de nume „$1”',
 'immobile-target-namespace' => 'Nu se pot redenumi paginile în spațiul de nume „$1”',
 'immobile-target-namespace-iw' => 'Legătura interwiki nu este o țintă validă pentru redenumire.',
-'immobile-source-page' => 'Această pagină nu poate fi mutată.',
-'immobile-target-page' => 'Nu poate fi mutat la destinația cu acest titlu.',
+'immobile-source-page' => 'Această pagină nu poate fi redenumită.',
+'immobile-target-page' => 'Imposibil de redenumit pagina la acel 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',
@@ -3032,9 +3032,9 @@ Un dosar temporar lipsește.',
 'tooltip-ca-nstab-template' => 'Vezi formatul',
 'tooltip-ca-nstab-help' => 'Vezi pagina de ajutor',
 'tooltip-ca-nstab-category' => 'Vezi categoria',
-'tooltip-minoredit' => 'Marcați această modificare ca fiind minoră',
+'tooltip-minoredit' => 'Marchează această modificare ca fiind minoră',
 'tooltip-save' => 'Salvați modificările dumneavoastră',
-'tooltip-preview' => 'Previzualizarea modificărilor dvs., folosiți-o vă rugăm înainte de a salva!',
+'tooltip-preview' => 'Vă rugăm să vă previzualizați modificările înainte de a le salva!',
 'tooltip-diff' => 'Arată-mi modificările efectuate asupra textului',
 'tooltip-compareselectedversions' => 'Vezi diferențele între cele două versiuni selectate de pe această pagină.',
 'tooltip-watch' => 'Adaugă această pagină la lista mea de pagini urmărite',
@@ -3096,6 +3096,8 @@ Permite adăugarea unui motiv în descrierea modificărilor',
 'pageinfo-length' => 'Lungimea paginii (în octeți)',
 'pageinfo-article-id' => 'ID pagină',
 'pageinfo-robot-policy' => 'Statut pentru motorul de căutare',
+'pageinfo-robot-index' => 'Indexabilă',
+'pageinfo-robot-noindex' => 'Neindexabilă',
 'pageinfo-views' => 'Număr de vizualizări',
 'pageinfo-watchers' => 'Număr de utilizatori care urmăresc pagina',
 'pageinfo-redirects-name' => 'Redirecționări către această pagină',
@@ -3109,9 +3111,9 @@ Permite adăugarea unui motiv în descrierea modificărilor',
 'pageinfo-authors' => 'Număr total de autori distincți',
 'pageinfo-recent-edits' => 'Număr de modificări recente (în ultima perioadă de $1)',
 'pageinfo-recent-authors' => 'Număr de autori distincți recenți',
-'pageinfo-restriction' => 'Protecție pagină ($1)',
-'pageinfo-magic-words' => 'Cuvinte magice ($1)',
-'pageinfo-hidden-categories' => 'Categorii ascunse ($1)',
+'pageinfo-restriction' => 'Protecție pagină (<code>{{lcfirst:$1}}</code>)',
+'pageinfo-magic-words' => '{{PLURAL:$1|Cuvânt magic|Cuvinte magice}} ($1)',
+'pageinfo-hidden-categories' => '{{PLURAL:$1|Categorie ascunsă|Categorii ascunse}} ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|Format inclus|Formate incluse}} ($1)',
 
 # Skin names
@@ -3167,7 +3169,8 @@ Executându-l, sistemul dvs. poate fi compromis.",
 'file-info-size' => '$1 × $2 pixeli, mărime fișier: $3, tip MIME: $4',
 'file-info-size-pages' => '$1 × $2 pixeli, mărime fișier: $3, tip MIME: $4, $5 {{PLURAL:$5|pagină|pagini}}',
 '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',
+'svg-long-desc-animated' => 'Fișier SVG animat, cu dimensiunea nominală de $1 × $2 pixeli, mărime fișier: $3',
 'show-big-image' => 'Rezoluție maximă',
 'show-big-image-preview' => 'Mărimea acestei previzualizări: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Altă rezoluție|Alte rezoluții}}: $1.',
@@ -3177,6 +3180,8 @@ Executându-l, sistemul dvs. poate fi compromis.",
 '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}}',
+'file-no-thumb-animation' => "'''Notă: Din cauza unor limitări de ordin tehnic, miniaturile acestui fișier nu vor fi animate.'''",
+'file-no-thumb-animation-gif' => "'''Notă: Din cauza unor limitări de ordin tehnic, miniaturile fișierelor GIF de înaltă rezoluție, precum acesta, nu vor fi animate.'''",
 
 # Special:NewFiles
 'newimages' => 'Galeria de imagini noi',
index debb68e..8d1a093 100644 (file)
@@ -153,6 +153,7 @@ $messages = array(
 'index-category' => 'Pàggene indicizzate',
 'noindex-category' => 'Pàggene none indicizzate',
 'broken-file-category' => 'Pàggene cu collegaminde a le file scuasciate',
+'categoryviewer-pagedlinks' => '($1) ($2)',
 
 'linkprefix' => '/^(.*?)([a-zA-Z\\x80-\\xff]+)$/sD',
 
@@ -356,9 +357,9 @@ Pe 'na liste de le pàggene speciele cirche aqquà [[Special:SpecialPages|{{int:
 'dberrortext' => "Ha assute n'errore de sindassi de 'na inderrogazione sus a 'u database.
 Quiste pò indicà 'nu bochere jndr'à 'u software.
 L'urteme tendative de inderrogazione sus a 'u database ha state:
-<blockquote><tt>\$1</tt></blockquote>
-cu 'a funzione \"<tt>\$2</tt>\".
-'U database ha returnate l'errore \"<tt>\$3: \$4</tt>\".",
+<blockquote><code>\$1</code></blockquote>
+cu 'a funzione \"<code>\$2</code>\".
+'U database ha returnate l'errore \"<samp>\$3: \$4</samp>\".",
 'dberrortextcl' => 'A assute \'n\'errore de sindasse sus a \'n\'inderrogazione d\'u database.
 L\'urteme tendative de inderrogazione sus a \'u database ha state:
 "$1"
@@ -721,12 +722,11 @@ Pe piacere, condrolle ce tu vuè cu ccreje/cange sta pàgene.',
 'userpage-userdoesnotexist-view' => '\'U cunde utende "$1" non g\'è reggistrate.',
 'blocked-notice-logextract' => "Stu utende jè correndemende bloccate.<br />
 L'urteme archivije de le bloccaminde se iacche aqquà sotte pe referimende:",
-'clearyourcache' => "''Vide Bbuene - Apprisse 'a reggistrazione, tu puè zumbà 'a cache d'u browser tune pe vedè le cangiaminde.'''
-*'''Mozilla / Firefox / Safari:''' cazze 'u ''Shift'' e condemboraneamende cazze 'u buttone ''Aggiorna'', o cazze 'nzieme ''Ctrl-F5'' o ''Ctrl-R'' (''⌘-R'' sus a 'nu Mac);
+'clearyourcache' => "'''Vide Bbuene''' - Apprisse 'a reggistrazione, tu puè zumbà 'a cache d'u browser tune pe vedè le cangiaminde.
+*'''Firefox / Safari:''' cazze 'u ''Shift'' e condemboraneamende cazze 'u buttone ''Aggiorna'', o cazze 'nzieme ''Ctrl-F5'' o ''Ctrl-R'' (''⌘-R'' sus a 'nu Mac);
 *'''Google Chrome:''' cazze ''Ctrl-Shift-R'' (''⌘-Shift-R'' sus a 'nu Mac)
 *'''Internet Explorer:''' cazze ''Ctrl'' e condemboraneamende cazze ''Aggiorna,'' o cazze ''Ctrl-F5''.
-*'''Konqueror: '''cazze ''Aggiorna'' o cazze ''F5'';
-*'''Opera:''' pulizze 'a cache da ''Tools → Preferences'' (in inglese) (Struminde - Preferenze in tagliàne);",
+*'''Opera:''' pulizze 'a cache da ''Tools → Preferences'' (in inglese) (Struminde - Preferenze in tarandine);",
 'usercssyoucanpreview' => "'''Conziglie:''' Ause 'u buttone \"{{int:showpreview}}\" pe condrollà 'u CSS nuève apprime de reggistrà.",
 'userjsyoucanpreview' => "'''Conziglie:''' Ause 'u buttone \"{{int:showpreview}}\" pe condrollà 'u JavaScript nuève apprime de reggistrà.",
 'usercsspreview' => "'''Arrecuerdete ca tu ste vide sulamende in andeprime 'u CSS tue.'''
@@ -1021,6 +1021,7 @@ Vide Bbuene ca ausanne le collegaminde de navigazzione sta culonne avène azzera
 'mergehistory-comment' => "Squagghiete [[:$1]] jndr'à [[:$2]]: $3",
 'mergehistory-same-destination' => 'Le pàggene sorgende e de destinazione non ge ponne essere le stesse',
 'mergehistory-reason' => 'Mutive:',
+'mergehistory-revisionrow' => '$1 ($2) $3 . . $4 $5 $6',
 
 # Merge log
 'mergelog' => 'Archivije de le scuagghiaminde',
@@ -1761,6 +1762,7 @@ Pò essere ca tu vuè cangià 'a descrizione de jidde [$2 pàgene de descrizione
 'shared-repo' => "'nu condenitore de cose condivise",
 'shared-repo-name-wikimediacommons' => 'Wikimedia Commons',
 'filepage.css' => "/* 'U CSS ca se iacchie aqquà jè ingluse sus 'a pàgene de descrizione d'u file, pure ingluse pe le client de le Uicchi furastire */",
+'upload-disallowed-here' => "Sfortunatamende non ge puè sovrascrivere st'immaggine.",
 
 # File reversion
 'filerevert' => "'Nvirte $1",
@@ -1870,6 +1872,7 @@ Mò s'avène redirette a [[$2]].",
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|byte|bytes}}',
 'ncategories' => '$1 {{PLURAL:$1|categorije|categorije}}',
+'ninterwikis' => '$1 {{PLURAL:$1|interuicchi|interuicchi}}',
 'nlinks' => '$1 {{PLURAL:$1|collegamende|collegaminde}}',
 'nmembers' => '$1 {{PLURAL:$1|membre|membre}}',
 'nrevisions' => '$1 {{PLURAL:$1|revisione|revisiune}}',
@@ -1898,6 +1901,7 @@ Mò s'avène redirette a [[$2]].",
 'mostlinkedtemplates' => 'Template cchiù appundete',
 'mostcategories' => "Pàggene cu 'nu sacche de categorije",
 'mostimages' => 'Fail cchiù appundete',
+'mostinterwikis' => 'Pàggene cu cchiù interuicchi de tutte',
 'mostrevisions' => 'Pàggene cchiù cangete',
 'prefixindex' => "Tutte le pàggene cu 'u prefisse",
 'prefixindex-namespace' => "Tutte le pàggene cu 'u prefisse ($1 namespace)",
@@ -2047,6 +2051,8 @@ Ponne stà [[{{MediaWiki:Listgrouprights-helppage}}|'mbormaziune de cchiù]] sus
 '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",
+'emailuser-title-target' => "Manne n'email a quiste {{GENDER:$1|utende}}",
+'emailuser-title-notarget' => "E-mail de l'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.",
@@ -2337,6 +2343,7 @@ Pò essere ca già ha state scangellate.",
 $1",
 'undelete-show-file-confirm' => 'Sì secure ca tu vuè ccu vide \'na revisiona scangellate d\'u file "<nowiki>$1</nowiki>" d\'u $2 a le $3?',
 'undelete-show-file-submit' => 'Sine',
+'undelete-revisionrow' => '$1 $2 ($3) $4 . . $5 $6 $7',
 
 # Namespace form on various pages
 'namespace' => 'Namespace:',
@@ -2740,6 +2747,7 @@ Reggistrele sus a 'u combiuter tune e carechele aqquà.",
 'import-error-interwiki' => 'Pagene "$1" non g\'ha state \'mbortate purcé \'u nome sue jè riservate pe collegaminde esterne (interuicchi).',
 'import-error-special' => "'A pagena \"\$1\" non g'ha state 'mbortate purcé apponde a 'nu namespace speciale ca non g'è permesse a le pàggene normale.",
 'import-error-invalid' => "'A pàgene \"\$1\" non g'ha state 'mbortate purcé 'u nome jè invalide.",
+'import-options-wrong' => '{{PLURAL:$2|opzione|opziune}} sbagliate: <nowiki>$1</nowiki>',
 
 # Import log
 'importlogpage' => "Archivie de le 'mbortaziune",
@@ -2893,11 +2901,31 @@ Stu fatte ha state causate da 'nu collegamende a 'nu site esterne ca appartene a
 
 # Info page
 'pageinfo-title' => '\'Mbormaziune pe "$1"',
-'pageinfo-header-edits' => 'Cangiaminde',
+'pageinfo-header-basic' => "'Mbormaziune 'nderra-'nderre",
+'pageinfo-header-edits' => 'Cunde de le cangiaminde',
+'pageinfo-header-restrictions' => "Protezione d'a pàgene",
+'pageinfo-header-properties' => "Probbietà d'a pàgene",
+'pageinfo-display-title' => "Fà vedè 'u titole",
+'pageinfo-default-sort' => 'Chiave de ordenamende de base',
+'pageinfo-length' => "Lunghezze d'a pàgene (in byte)",
+'pageinfo-article-id' => "ID d'a pàgene",
+'pageinfo-robot-policy' => "State d'u motore de ricerche",
+'pageinfo-robot-index' => 'Indicizzabbele',
+'pageinfo-robot-noindex' => 'None indicizzabbele',
 'pageinfo-views' => 'Numere de visite',
-'pageinfo-watchers' => 'Numere de visitature',
-'pageinfo-edits' => 'Numere de cangiaminde',
-'pageinfo-authors' => 'Numere de autore diverse',
+'pageinfo-watchers' => "Numere de visitature d'a pàgene",
+'pageinfo-redirects-name' => 'Redirezionaminde a sta pàgene',
+'pageinfo-redirects-value' => '$1',
+'pageinfo-subpages-name' => 'Sottopàggene de sta pàgene',
+'pageinfo-firstuser' => "Ccrejatore d'a pàgene",
+'pageinfo-firsttime' => "Date d'a ccrejazione d'a pàgene",
+'pageinfo-lastuser' => 'Urteme cangiatore',
+'pageinfo-lasttime' => "Darte de l'urteme cangiamende",
+'pageinfo-edits' => 'Numere totale de cangiaminde',
+'pageinfo-authors' => 'Numere Totale de autore diverse',
+'pageinfo-recent-edits' => "Numere de le urteme cangiaminde ('mbonde a $1)",
+'pageinfo-recent-authors' => 'Numere de le urteme autore diverse',
+'pageinfo-magic-words' => '{{PLURAL:$1|Parole|Parole}} maggiche ($1)',
 
 # Skin names
 'skinname-standard' => 'Classeche',
@@ -2953,6 +2981,7 @@ Ce l'esegue sus a 'u sisteme tue pò essere ca se combromette.",
 'file-info-size-pages' => "$1 × $2 pixel, dimenzione d'u file: $3, tipe de MIME: $4, $5 {{PLURAL:$5|pàgene|pàggene}}",
 'file-nohires' => "Manghe 'a risoluzione ierta.",
 'svg-long-desc' => "Fail SVG, nominalmende sonde $1 × $2 pixel, dimenzione d'u fail: $3",
+'svg-long-desc-animated' => "File SVG animate, nominalmende sonde $1 × $2 pixel, dimenzione d'u file: $3",
 'show-big-image' => 'Risoluzione chiena chiena',
 'show-big-image-preview' => 'Dimenziune de sta andeprime: $1.',
 'show-big-image-other' => 'Otre {{PLURAL:$2|resoluzione|resoluziune}}: $1.',
@@ -3613,6 +3642,7 @@ Pe piacere conferme ca tu vuè avveramende reccrejà sta pàgene.",
 'ellipsis' => '...',
 'percent' => '$1%',
 'parentheses' => '($1)',
+'brackets' => '[$1]',
 
 # Multipage image navigation
 'imgmultipageprev' => '← pàgena precedende',
@@ -3643,6 +3673,22 @@ Pe piacere conferme ca tu vuè avveramende reccrejà sta pàgene.",
 'size-kilobytes' => '$1 KB',
 'size-megabytes' => '$1 MB',
 'size-gigabytes' => '$1 GB',
+'size-terabytes' => '$1 TB',
+'size-petabytes' => '$1 PB',
+'size-exabytes' => '$1 EB',
+'size-zetabytes' => '$1 ZB',
+'size-yottabytes' => '$1 YB',
+
+# Bitrate units
+'bitrate-bits' => '$1bps',
+'bitrate-kilobits' => '$1kbps',
+'bitrate-megabits' => '$1Mbps',
+'bitrate-gigabits' => '$1Gbps',
+'bitrate-terabits' => '$1Tbps',
+'bitrate-petabits' => '$1Pbps',
+'bitrate-exabits' => '$1Ebps',
+'bitrate-zetabits' => '$1Zbps',
+'bitrate-yottabits' => '$1Ybps',
 
 # Live preview
 'livepreview-loading' => 'Stoche a careche…',
index 01fd40f..be9b03d 100644 (file)
@@ -59,6 +59,7 @@
  * @author Rave
  * @author Rubin
  * @author Sagan
+ * @author Shirayuki
  * @author Sk
  * @author TarzanASG
  * @author Temuri rajavi
@@ -189,154 +190,154 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#перенаправление', '#перенапр', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__БЕЗ_ОГЛАВЛЕНИЯ__', '__БЕЗ_ОГЛ__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__БЕЗ_ГАЛЕРЕИ__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__ОБЯЗАТЕЛЬНОЕ_ОГЛАВЛЕНИЕ__', '__ОБЯЗ_ОГЛ__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__ОГЛАВЛЕНИЕ__', '__ОГЛ__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__БЕЗ_РЕДАКТИРОВАНИЯ_РАЗДЕЛА__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '__БЕЗ_ЗАГОЛОВКА__', '__NOHEADER__' ),
-       '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' ),
-       'currentdayname'          => array( '1', 'НАЗВАНИЕ_ТЕКУЩЕГО_ДНЯ', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'ТЕКУЩИЙ_ГОД', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'ТЕКУЩЕЕ_ВРЕМЯ', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'ТЕКУЩИЙ_ЧАС', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'МЕСТНЫЙ_МЕСЯЦ', 'МЕСТНЫЙ_МЕСЯЦ_2', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', 'МЕСТНЫЙ_МЕСЯЦ_1', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'НАЗВАНИЕ_МЕСТНОГО_МЕСЯЦА', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'НАЗВАНИЕ_МЕСТНОГО_МЕСЯЦА_РОД', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'НАЗВАНИЕ_МЕСТНОГО_МЕСЯЦА_АБР', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'МЕСТНЫЙ_ДЕНЬ', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'МЕСТНЫЙ_ДЕНЬ_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' ),
-       'numberofusers'           => array( '1', 'КОЛИЧЕСТВО_УЧАСТНИКОВ', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'КОЛИЧЕСТВО_АКТИВНЫХ_УЧАСТНИКОВ', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'КОЛИЧЕСТВО_ПРАВОК', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'КОЛИЧЕСТВО_ПРОСМОТРОВ', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'НАЗВАНИЕ_СТРАНИЦЫ', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'НАЗВАНИЕ_СТРАНИЦЫ_2', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'ПРОСТРАНСТВО_ИМЁН', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'ПРОСТРАНСТВО_ИМЁН_2', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'ПРОСТРАНСТВО_ОБСУЖДЕНИЙ', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'ПРОСТРАНСТВО_ОБСУЖДЕНИЙ_2', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'ПРОСТРАНСТВО_СТАТЕЙ', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'ПРОСТРАНСТВО_СТАТЕЙ_2', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'ПОЛНОЕ_НАЗВАНИЕ_СТРАНИЦЫ', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'ПОЛНОЕ_НАЗВАНИЕ_СТРАНИЦЫ_2', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'НАЗВАНИЕ_ПОДСТРАНИЦЫ', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'НАЗВАНИЕ_ПОДСТРАНИЦЫ_2', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'ОСНОВА_НАЗВАНИЯ_СТРАНИЦЫ', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'ОСНОВА_НАЗВАНИЯ_СТРАНИЦЫ_2', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'НАЗВАНИЕ_СТРАНИЦЫ_ОБСУЖДЕНИЯ', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'НАЗВАНИЕ_СТРАНИЦЫ_ОБСУЖДЕНИЯ_2', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'НАЗВАНИЕ_СТРАНИЦЫ_СТАТЬИ', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       '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' ),
-       '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_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', 'ПИК:', 'NSE:' ),
-       'localurl'                => array( '0', 'ЛОКАЛЬНЫЙ_АДРЕС:', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'ЛОКАЛЬНЫЙ_АДРЕС_2:', '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' ),
-       '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:' ),
-       'fullurl'                 => array( '0', 'ПОЛНЫЙ_АДРЕС:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'ПОЛНЫЙ_АДРЕС_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', 'ПОКАЗАТЬ_ЗАГОЛОВОК', '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:' ),
-       '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:' ),
-       '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__' ),
-       'numberingroup'           => array( '1', 'ЧИСЛО_В_ГРУППЕ', 'NUMBERINGROUP', 'NUMINGROUP' ),
-       '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' ),
+       'redirect'                  => array( '0', '#перенаправление', '#перенапр', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__БЕЗ_ОГЛАВЛЕНИЯ__', '__БЕЗ_ОГЛ__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__БЕЗ_ГАЛЕРЕИ__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__ОБЯЗАТЕЛЬНОЕ_ОГЛАВЛЕНИЕ__', '__ОБЯЗ_ОГЛ__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__ОГЛАВЛЕНИЕ__', '__ОГЛ__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__БЕЗ_РЕДАКТИРОВАНИЯ_РАЗДЕЛА__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '__БЕЗ_ЗАГОЛОВКА__', '__NOHEADER__' ),
+       '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' ),
+       'currentdayname'            => array( '1', 'НАЗВАНИЕ_ТЕКУЩЕГО_ДНЯ', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'ТЕКУЩИЙ_ГОД', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'ТЕКУЩЕЕ_ВРЕМЯ', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'ТЕКУЩИЙ_ЧАС', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'МЕСТНЫЙ_МЕСЯЦ', 'МЕСТНЫЙ_МЕСЯЦ_2', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'МЕСТНЫЙ_МЕСЯЦ_1', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'НАЗВАНИЕ_МЕСТНОГО_МЕСЯЦА', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'НАЗВАНИЕ_МЕСТНОГО_МЕСЯЦА_РОД', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'НАЗВАНИЕ_МЕСТНОГО_МЕСЯЦА_АБР', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'МЕСТНЫЙ_ДЕНЬ', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'МЕСТНЫЙ_ДЕНЬ_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' ),
+       'numberofusers'             => array( '1', 'КОЛИЧЕСТВО_УЧАСТНИКОВ', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'КОЛИЧЕСТВО_АКТИВНЫХ_УЧАСТНИКОВ', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'КОЛИЧЕСТВО_ПРАВОК', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'КОЛИЧЕСТВО_ПРОСМОТРОВ', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'НАЗВАНИЕ_СТРАНИЦЫ', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'НАЗВАНИЕ_СТРАНИЦЫ_2', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'ПРОСТРАНСТВО_ИМЁН', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'ПРОСТРАНСТВО_ИМЁН_2', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'ПРОСТРАНСТВО_ОБСУЖДЕНИЙ', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'ПРОСТРАНСТВО_ОБСУЖДЕНИЙ_2', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'ПРОСТРАНСТВО_СТАТЕЙ', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'ПРОСТРАНСТВО_СТАТЕЙ_2', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'ПОЛНОЕ_НАЗВАНИЕ_СТРАНИЦЫ', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'ПОЛНОЕ_НАЗВАНИЕ_СТРАНИЦЫ_2', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'НАЗВАНИЕ_ПОДСТРАНИЦЫ', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'НАЗВАНИЕ_ПОДСТРАНИЦЫ_2', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'ОСНОВА_НАЗВАНИЯ_СТРАНИЦЫ', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'ОСНОВА_НАЗВАНИЯ_СТРАНИЦЫ_2', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'НАЗВАНИЕ_СТРАНИЦЫ_ОБСУЖДЕНИЯ', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'НАЗВАНИЕ_СТРАНИЦЫ_ОБСУЖДЕНИЯ_2', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'НАЗВАНИЕ_СТРАНИЦЫ_СТАТЬИ', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       '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' ),
+       '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_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', 'ПИК:', 'NSE:' ),
+       'localurl'                  => array( '0', 'ЛОКАЛЬНЫЙ_АДРЕС:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'ЛОКАЛЬНЫЙ_АДРЕС_2:', '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' ),
+       '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:' ),
+       'fullurl'                   => array( '0', 'ПОЛНЫЙ_АДРЕС:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'ПОЛНЫЙ_АДРЕС_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', 'ПОКАЗАТЬ_ЗАГОЛОВОК', '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:' ),
+       '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:' ),
+       '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__' ),
+       'numberingroup'             => array( '1', 'ЧИСЛО_В_ГРУППЕ', 'NUMBERINGROUP', 'NUMINGROUP' ),
+       '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' ),
 );
 
 
@@ -2087,6 +2088,7 @@ $1',
 'shared-repo-from' => 'из $1',
 'shared-repo' => 'общего хранилища',
 'shared-repo-name-wikimediacommons' => 'Викисклада',
+'upload-disallowed-here' => 'К сожалению, вы не можете перезаписать это изображение.',
 
 # File reversion
 'filerevert' => 'Возврат к старой версии $1',
@@ -2194,6 +2196,7 @@ $1',
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|байт|байта|байт}}',
 'ncategories' => '$1 {{PLURAL:$1|категория|категории|категорий}}',
+'ninterwikis' => '$1 {{PLURAL:$1|интервики-ссылка|интервики-ссылки|интервики-ссылок}}',
 'nlinks' => '$1 {{PLURAL:$1|ссылка|ссылки|ссылок}}',
 'nmembers' => '$1 {{PLURAL:$1|объект|объекта|объектов}}',
 'nrevisions' => '$1 {{PLURAL:$1|версия|версии|версий}}',
@@ -2371,6 +2374,8 @@ $1',
 'mailnologin' => 'Адрес для отправки отсутствует',
 'mailnologintext' => 'Вы должны [[Special:UserLogin|представиться системе]] и иметь действительный адрес электронной почты в ваших [[Special:Preferences|настройках]], чтобы иметь возможность отправлять электронную почту другим участникам.',
 'emailuser' => 'Письмо участнику',
+'emailuser-title-target' => 'Написание электронного письма {{GENDER:$1|участнику|участнице}}',
+'emailuser-title-notarget' => 'Написание электронного письма участнику',
 'emailpage' => 'Письмо участнику',
 'emailpagetext' => 'С помощью данной формы можно отправить сообщение на адрес электронной почты этого участника.
 В качестве обратного адреса будет указан тот адрес, который вы указали в [[Special:Preferences|своих настройках]], таким образом получатель будет иметь возможность ответить непосредственно вам.',
@@ -3196,11 +3201,34 @@ The wiki server can't provide data in a format your client can read.",
 
 # Info page
 'pageinfo-title' => 'Сведения по «$1»',
-'pageinfo-header-edits' => 'Правки',
+'pageinfo-header-basic' => 'Основные сведения',
+'pageinfo-header-edits' => 'История изменений',
+'pageinfo-header-restrictions' => 'Защита страницы',
+'pageinfo-header-properties' => 'Свойства страницы',
+'pageinfo-display-title' => 'Отображаемый заголовок',
+'pageinfo-default-sort' => 'Ключ сортировки по умолчанию',
+'pageinfo-length' => 'Длина страницы (в байтах)',
+'pageinfo-article-id' => 'Идентификатор страницы',
+'pageinfo-robot-policy' => 'Индексация поисковыми службами',
+'pageinfo-robot-index' => 'Индексируется',
+'pageinfo-robot-noindex' => 'Не индексируется',
 'pageinfo-views' => 'Количество просмотров',
 'pageinfo-watchers' => 'Число наблюдающих',
+'pageinfo-redirects-name' => 'Перенаправления на эту страницу',
+'pageinfo-subpages-name' => 'Подстраницы данной страницы',
+'pageinfo-subpages-value' => '$1($2 {{PLURAL:$2|перенаправление|перенаправления|перенаправлений}}; $3 {{PLURAL:$3|обычная|обычные|обычных}})',
+'pageinfo-firstuser' => 'Создатель страницы',
+'pageinfo-firsttime' => 'Дата создания страницы',
+'pageinfo-lastuser' => 'Последний редактор',
+'pageinfo-lasttime' => 'Дата последней правки',
 'pageinfo-edits' => 'Общее число правок',
-'pageinfo-authors' => 'Количество различных авторов',
+'pageinfo-authors' => 'Общее число различных авторов',
+'pageinfo-recent-edits' => 'Правок за последнее время (в течение $1)',
+'pageinfo-recent-authors' => 'Уникальных авторов за последнее время',
+'pageinfo-restriction' => 'Защита страницы (<code>{{lcfirst:$1}}</code>)',
+'pageinfo-magic-words' => '{{PLURAL:$1|Магическое слово|Магические слова}} ($1)',
+'pageinfo-hidden-categories' => '{{PLURAL:$1|Скрытая категория|Скрытых категорий}} ($1)',
+'pageinfo-templates' => '{{PLURAL:$1|Шаблон|Шаблонов}} ($1)',
 
 # Skin names
 'skinname-standard' => 'Классическое',
@@ -3254,7 +3282,8 @@ $1',
 'file-info-size' => '$1 × $2 {{PLURAL:$2|пиксель|пикселя|пикселей}}, размер файла: $3, MIME-тип: $4',
 'file-info-size-pages' => '$1 × $2 пикселей, размер файла: $3, MIME-тип: $4, $5 {{PLURAL:$5|страница|страницы|страниц}}',
 'file-nohires' => 'Нет версии с бо́льшим разрешением.',
-'svg-long-desc' => 'Файл .SVG, номинально $1 × $2 {{PLURAL:$2|пиксель|пикселя|пикселей}}, размер файла: $3',
+'svg-long-desc' => 'SVG-файл, номинально $1 × $2 {{PLURAL:$2|пиксель|пикселя|пикселей}}, размер файла: $3',
+'svg-long-desc-animated' => 'Анимированный SVG-файл, номинально $1 × $2 {{PLURAL:$2|пиксель|пикселя|пикселей}}, размер файла: $3',
 'show-big-image' => 'Изображение в более высоком разрешении',
 'show-big-image-preview' => 'Размер при предпросмотре: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Другое разрешение|Другие разрешения}}: $1.',
@@ -3264,6 +3293,8 @@ $1',
 'file-info-png-looped' => 'закольцованный',
 'file-info-png-repeat' => 'проигрывается $1 {{PLURAL:$1|раз|раза|раз}}',
 'file-info-png-frames' => '$1 {{PLURAL:$1|кадр|кадра|кадров}}',
+'file-no-thumb-animation' => "'''Примечание. По техническим причинам, миниатюры этого файла не будет анимироваться.'''",
+'file-no-thumb-animation-gif' => "'''Примечание. По техническим причинам, миниатюры подобных GIF-изображений высокого разрешения не анимируются.'''",
 
 # Special:NewFiles
 'newimages' => 'Галерея новых файлов',
index 806b3f8..6d3ac8a 100644 (file)
@@ -43,9 +43,83 @@ $namespaceAliases = array(
        'Дізкузія_ку_MediaWiki'   => NS_MEDIAWIKI_TALK,
 );
 
+$specialPageAliases = array(
+       'Activeusers'               => array( 'Актівны_хоснователї' ),
+       'Allmessages'               => array( 'Сістемовы_повідомлїня' ),
+       'Allpages'                  => array( 'Вшыткы_сторінкы' ),
+       'Ancientpages'              => array( 'Давны_сторінкы' ),
+       'Badtitle'                  => array( 'Планый_тітул' ),
+       'Blankpage'                 => array( 'Порожня_сторінка' ),
+       'Block'                     => array( 'Заблоковати' ),
+       'Blockme'                   => array( 'Заблокуйте_ня' ),
+       'Booksources'               => array( 'Жрідла_книг' ),
+       'BrokenRedirects'           => array( 'Розорваны_напрямлїня' ),
+       'Categories'                => array( 'Катеґорії' ),
+       'ChangeEmail'               => array( 'Змінити_імейл' ),
+       'ChangePassword'            => array( 'Змінити_гесло' ),
+       'ComparePages'              => array( 'Порівнаня_сторінок' ),
+       'Confirmemail'              => array( 'Потвердити_імейл' ),
+       'Contributions'             => array( 'Вклад' ),
+       'CreateAccount'             => array( 'Створити_конто' ),
+       'Deadendpages'              => array( 'Сторінкы_без_одказів' ),
+       'DeletedContributions'      => array( 'Вымазаный_вклад' ),
+       'Disambiguations'           => array( 'Неєднозначны_одказы' ),
+       'DoubleRedirects'           => array( 'Подвійны_напрямлїня' ),
+       'EditWatchlist'             => array( 'Правити_список_мерькованя' ),
+       'Emailuser'                 => array( 'Писмо_хоснователёви' ),
+       'Export'                    => array( 'Експорт' ),
+       'Fewestrevisions'           => array( 'Найменшы_перевіркы' ),
+       'FileDuplicateSearch'       => array( 'Гляданя_дуплікатів_файлів' ),
+       'Filepath'                  => array( 'Стежка_до_файлу' ),
+       'Import'                    => array( 'Імпорт' ),
+       'Invalidateemail'           => array( 'Знеплатнити_імейл' ),
+       'BlockList'                 => array( 'Список_блоковань' ),
+       'LinkSearch'                => array( 'Гляданя_одказів' ),
+       'Listadmins'                => array( 'Список_адміністраторів' ),
+       'Listbots'                  => array( 'Список_ботів' ),
+       'Listfiles'                 => array( 'Список_файлів' ),
+       'Listgrouprights'           => array( 'Список_прав_ґруп' ),
+       'Listredirects'             => array( 'Список_напрямлїнь' ),
+       'Listusers'                 => array( 'Список_хоснователїв' ),
+       'Lockdb'                    => array( 'Заблоковати_датабазу' ),
+       'Log'                       => array( 'Журналы' ),
+       'Lonelypages'               => array( 'Ізолованы_сторінкы' ),
+       'Longpages'                 => array( 'Найдовшы_сторінкы' ),
+       'MergeHistory'              => array( 'Зєдинїня_історії' ),
+       'MIMEsearch'                => array( 'Гляданя_MIME' ),
+       'Mostcategories'            => array( 'Найкатеґорізованїшы' ),
+       'Mostimages'                => array( 'Найбівше_хоснованы_файлы' ),
+       'Mostlinkedcategories'      => array( 'Найвжыванїшы_катеґорії' ),
+       'Mostlinkedtemplates'       => array( 'Найвжыванїшы_шаблоны' ),
+       'Mostrevisions'             => array( 'Найбівше_ревізій' ),
+       'Movepage'                  => array( 'Переменовати' ),
+       'Mycontributions'           => array( 'Мій_вклад' ),
+       'Mypage'                    => array( 'Моя_сторінка' ),
+       'Mytalk'                    => array( 'Моя_діскузія' ),
+       'Myuploads'                 => array( 'Мої_награня_файлів' ),
+       'Newimages'                 => array( 'Новы_файлы' ),
+       'Newpages'                  => array( 'Новы_сторінкы' ),
+       'PasswordReset'             => array( 'Ресет_гесла' ),
+       'PermanentLink'             => array( 'Тырвалый_одказ' ),
+       'Popularpages'              => array( 'Популарны_сторінкы' ),
+       'Preferences'               => array( 'Наставлїня' ),
+       'Randompage'                => array( 'Нагодна_статя' ),
+       'Randomredirect'            => array( 'Нагодне_напрямлїня' ),
+       'Recentchanges'             => array( 'Послїднї_зміны' ),
+       'Recentchangeslinked'       => array( 'Повязаны_едітованя' ),
+       'Search'                    => array( 'Гляданя' ),
+       'Shortpages'                => array( 'Курты_сторінкы' ),
+       'Specialpages'              => array( 'Шпеціялны_сторінкы' ),
+       'Statistics'                => array( 'Штатістіка' ),
+       'Tags'                      => array( 'Позначкы' ),
+       'Unblock'                   => array( 'Одблоковати' ),
+       'Uncategorizedcategories'   => array( 'Некатеґорізованы_катеґорії' ),
+       'Uncategorizedimages'       => array( 'Некатеґорізованы_файлы' ),
+);
+
 $messages = array(
 # User preference toggles
-'tog-underline' => 'Підчарковати одказы:',
+'tog-underline' => 'Підкреслёвати одказы:',
 'tog-justify' => 'Зарівнати текст до блоку',
 'tog-hideminor' => 'Сховати малы едітованя в списку послїднїх змін',
 'tog-hidepatrolled' => 'Сховати патролёваны едітованя в списку послїднїх змін',
@@ -59,7 +133,7 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Дозволити едітованя секції сторінкы через кликаня правов клапков мышкы на надписы сторінок  (JavaScript)',
 'tog-showtoc' => 'Вказовати обсяг (на сторінках з веце як трёма надписами)',
 'tog-rememberpassword' => 'Запамятати моє приголошіня на тім переглядачу (максімално $1 {{PLURAL:$1|день|днів}})',
-'tog-watchcreations' => 'Ð\9fÑ\80идаваÑ\82и Ñ\81Ñ\82оÑ\80Ñ\96нкÑ\8b Ñ\81Ñ\82воÑ\80енÑ\8b Ð¼Ð½Ð¾Ð² Ñ\82ай Ñ\84айлÑ\8b Ð¼Ð½Ð¾Ð² Ð·аладованы до мого списку слїдованых',
+'tog-watchcreations' => 'Ð\9fÑ\80идаваÑ\82и Ñ\81Ñ\82оÑ\80Ñ\96нкÑ\8b Ñ\81Ñ\82воÑ\80енÑ\8b Ð¼Ð½Ð¾Ð² Ñ\82ай Ñ\84айлÑ\8b Ð¼Ð½Ð¾Ð² Ð½аладованы до мого списку слїдованых',
 'tog-watchdefault' => 'Придавати мнов едітованы сторінкы і файлы до списку слїдованых',
 'tog-watchmoves' => 'Придавати переменованы сторінкы і файлы до мого списку слїдованых',
 'tog-watchdeletion' => 'Придавати сторінкы і файлы, котры змажу, міджі слїдованы',
@@ -72,7 +146,7 @@ $messages = array(
 'tog-enotifminoredits' => 'Послати електронічну пошту і про меншы едітованя сторінок і файлів',
 'tog-enotifrevealaddr' => 'Прозрадити мою поштову адресу в поштї  увідомлїня',
 'tog-shownumberswatching' => 'Вказати кілько хоснователїв придало сторінку до свого списку слїдованых',
-'tog-oldsig' => 'Ð\95кзÑ\96Ñ\81Ñ\82уючій підпис:',
+'tog-oldsig' => 'Ð\86Ñ\81нуючій підпис:',
 'tog-fancysig' => 'Хосновати про підпис вікітекст (без автоматічного одказу)',
 'tog-externaleditor' => 'Імпліцітно хосновати екстерный едітор (лем про скусеных, выжадує шпеціалне наштелёваня компютера; [//www.mediawiki.org/wiki/Manual:External_editors далшы інформації])',
 'tog-externaldiff' => 'Імпліцітно хосновати проґрам про порівнаваня (лем про скусеных, выжадує шпеціалне наштелёваня компютера; [//www.mediawiki.org/wiki/Manual:External_editors далшы інформації])',
@@ -82,10 +156,10 @@ $messages = array(
 'tog-watchlisthideown' => 'Сховати мої едітованя на списку слїдованых сторінок',
 'tog-watchlisthidebots' => 'Сховати едітованя ботів у списку слїдованых сторінок',
 'tog-watchlisthideminor' => 'Сховати малы едітованя зо списку слїдованых сторінок',
-'tog-watchlisthideliu' => 'У Ñ\81пиÑ\81кÑ\83 Ñ\81лÑ\97дованÑ\8bÑ\85 Ñ\81Ñ\82оÑ\80Ñ\96нок Ñ\81Ñ\85оваÑ\82и ÐµÐ´Ñ\96Ñ\82аÑ\86Ñ\96Ñ\97 приголошеных хоснователїв',
-'tog-watchlisthideanons' => 'У Ñ\81пиÑ\81кÑ\83 Ñ\81лÑ\97дованÑ\8bÑ\85 Ñ\81Ñ\82оÑ\80Ñ\96нок Ñ\81Ñ\85оваÑ\82и ÐµÐ´Ñ\96Ñ\82аÑ\86Ñ\96Ñ\97 анонімів',
-'tog-watchlisthidepatrolled' => 'СÑ\85оваÑ\82и Ð¿Ð°Ñ\82Ñ\80олÑ\91ванÑ\8b ÐµÐ´Ñ\96Ñ\82аÑ\86Ñ\96Ñ\97 Ñ\83 слїдованых сторінках',
-'tog-ccmeonemails' => 'Ð\9fоÑ\81Ñ\8bлаÑ\82и Ð¼Ñ\96 ÐºÐ¾Ð¿Ñ\96Ñ\97 Ð¿Ð¾Ñ\88Ñ\82Ñ\8b, ÐºÐ¾Ñ\82Ñ\80Ñ\83 Ð¿Ð¾Ñ\88лÑ\8e іншым хоснователям',
+'tog-watchlisthideliu' => 'Ð\92 Ñ\81пиÑ\81кÑ\83 Ñ\81лÑ\97дованÑ\8bÑ\85 Ñ\81Ñ\82оÑ\80Ñ\96нок Ñ\81Ñ\85оваÑ\82и ÐµÐ´Ñ\96Ñ\82ованÑ\8f приголошеных хоснователїв',
+'tog-watchlisthideanons' => 'Ð\92 Ñ\81пиÑ\81кÑ\83 Ñ\81лÑ\97дованÑ\8bÑ\85 Ñ\81Ñ\82оÑ\80Ñ\96нок Ñ\81Ñ\85оваÑ\82и ÐµÐ´Ñ\96Ñ\82ованÑ\8f анонімів',
+'tog-watchlisthidepatrolled' => 'СÑ\85оваÑ\82и Ð¿Ð°Ñ\82Ñ\80олÑ\91ванÑ\8b ÐµÐ´Ñ\96Ñ\82ованÑ\8f Ð² слїдованых сторінках',
+'tog-ccmeonemails' => 'Ð\9fоÑ\81Ñ\8bлаÑ\82и Ð¼Ñ\96 ÐºÐ¾Ð¿Ñ\96Ñ\97 Ð¿Ð¾Ñ\88Ñ\82Ñ\8b, ÐºÐ¾Ñ\82Ñ\80Ñ\83 Ð·Ð°Ð¶ÐµÐ½Ñ\83 іншым хоснователям',
 'tog-diffonly' => 'Не вказовати обсяг сторінкы під роздїлом  верзій',
 'tog-showhiddencats' => 'Вказати схованы катеґорії',
 'tog-norollbackdiff' => 'По вернутю зміны не вказовати порівнаня роздїлів',
@@ -158,7 +232,7 @@ $messages = array(
 'category_header' => 'Сторінкы в катеґорії «$1»',
 'subcategories' => 'Підкатеґорії',
 'category-media-header' => 'Файлы в катеґорії «$1»',
-'category-empty' => "''ТоÑ\82а катеґорія порожня.''",
+'category-empty' => "''Ð\93евÑ\81Ñ\8f катеґорія порожня.''",
 'hidden-categories' => '{{PLURAL:$1|Скрыта катеґорія|Скрыты катеґорії}}',
 'hidden-category-category' => 'Схованы катеґорії',
 'category-subcat-count' => '{{PLURAL:$2|Тота катеґорія має лем таку підкатеґорію.|{{PLURAL:$1|Указана $1 підкатеґорія|Указаны $1 підкатеґорії|Указаных $1 підкатеґорій}} із $2.}}',
@@ -170,7 +244,7 @@ $messages = array(
 'listingcontinuesabbrev' => '(дале)',
 'index-category' => 'Індексованы сторінкы',
 'noindex-category' => 'Неіндексованы сторінкы',
-'broken-file-category' => 'Сторінкы, што ся одказують на неекзістуючі файлы',
+'broken-file-category' => 'Сторінкы, што ся одказують на неіснуючі файлы',
 
 'about' => 'О',
 'article' => 'Обсягова сторінка',
@@ -221,7 +295,7 @@ $messages = array(
 'searcharticle' => 'Перейти',
 'history' => 'Історія сторінкы',
 'history_short' => 'Історія',
-'updatedmarker' => 'змÑ\96нено Ð¾Ð´ Ð¿Ð¾Ñ\81лÑ\97днÑ\8bй навщівы',
+'updatedmarker' => 'обновлено Ð¾Ð´ Ð¿Ð¾Ñ\81лÑ\97днÑ\91й навщівы',
 'printableversion' => 'Верзія до друку',
 'permalink' => 'Перманентный одказ',
 'print' => 'Друк',
@@ -266,8 +340,8 @@ $messages = array(
 'jumpto' => 'Перейти до:',
 'jumptonavigation' => 'навіґація',
 'jumptosearch' => 'Найти',
-'view-pool-error' => 'Перебачте, серверы суть теперь перетяжены.
-Тоту сторінку сі теперь перезерать много хоснователїв.
+'view-pool-error' => 'Перебачте, серверы суть теперь переладованы.
+Тоту сторінку сі теперь пoзерать много хоснователїв.
 Просиме Вас, почекайте і спробуйте доступность пізнїше.
 
 $1',
@@ -297,7 +371,7 @@ $1',
 
 'badaccess' => 'Брак прав приступу',
 'badaccess-group0' => 'Вам не є дозволено выконавати тоту дїю.',
-'badaccess-groups' => 'Дїя, яку сьте хотїли зробити, дозволена лем хоснователям із {{PLURAL:$2|ґрупы|ґруп}}: $1.',
+'badaccess-groups' => 'Дїя, яку сьте хотїли зробити, дозволена лем хоснователям з {{PLURAL:$2|ґрупы|ґруп}}: $1.',
 
 'versionrequired' => 'Потрібна MediaWiki верзії $1',
 'versionrequiredtext' => 'Про роботу з тов сторінков потрібна MediaWiki верзії $1. Відь [[Special:Version|сторінку верзії]].',
@@ -365,9 +439,9 @@ $1',
 'dberrortext' => 'Найджена  сінтактічна хыба в запросї до датабазы.
 Тото може вказовати на хыбу в проґрамовім забеспечіню.
 Послїднїй запрос до датабазы:
-<blockquote><tt>$1</tt></blockquote>
-з функції "<tt>$2</tt>".
-Датабаза вернула хыбу "<tt>$3: $4</tt>".',
+<blockquote><code>$1</code></blockquote>
+з функції "<code>$2</code>".
+Датабаза вернула хыбу "<samp>$3: $4</samp>".',
 'dberrortextcl' => 'Найджена сінтактічна хыба в запросї до датабазы.
 Послїднїй запрос до датабазы:
 «$1»
@@ -395,7 +469,7 @@ $1',
 'filecopyerror' => 'Не было можне копіровати файл «$1» на «$2».',
 'filerenameerror' => 'Не было можне переменовати файл «$1» на «$2».',
 'filedeleteerror' => 'Не было можне змазаты файл «$1».',
-'directorycreateerror' => 'Не є можне вытворити адресарь «$1».',
+'directorycreateerror' => 'Не мож вытворити адресарь «$1».',
 'filenotfound' => 'Не было можне найти файл «$1».',
 'fileexistserror' => 'Не дасть ся записати до файлу «$1»: файл екзістує.',
 'unexpected' => 'Неочекавана годнота: «$1»=«$2».',
@@ -417,7 +491,7 @@ $1',
 'viewsource' => 'Видїти код',
 'viewsource-title' => 'Видїти жрідло сторінкы $1',
 'actionthrottled' => 'Акція была придушена',
-'actionthrottledtext' => 'Ð\92зглÑ\8fдом ÐºÑ\83 Ð¿Ñ\80оÑ\82иÑ\81памовÑ\8bм Ð¾Ð¿Ð°Ñ\82Ñ\80Ñ\97нÑ\8fм не можете жадану акцію провести барз часто в короткім часї. Спробуйте то знову о пару мінут.',
+'actionthrottledtext' => 'Ð\92зглÑ\8fдом ÐºÑ\83 Ð¿Ñ\80оÑ\82иÑ\81памовÑ\8bм ÐºÑ\80окам не можете жадану акцію провести барз часто в короткім часї. Спробуйте то знову о пару мінут.',
 'protectedpagetext' => 'Тота сторінка была замкнута, также ся не дасть едітовати',
 'viewsourcetext' => 'Можете видїти і копіровати код той сторінкы:',
 'viewyourtext' => "Можете собі посмотрити і скопіровати жрідловый текст '''вашых змін''' той сторінкы:",
@@ -728,7 +802,7 @@ $2
 'previewconflict' => 'Тот нагляд зображує текст так, як буде вызерати по уложіню сторінкы.',
 'session_fail_preview' => "'''Вашу пожадавку ся не удало спрацовати, бо были страчены дата сеансу.
 Просиме, спробуйте то зясь.
\9aÑ\96дÑ\8c Ñ\81Ñ\8f Ñ\82оÑ\82 Ð¿Ñ\80облем Ð±Ñ\83де Ð¾Ð¿Ð°ÐºÐ¾Ð²Ð°ти, спробуйте ся [[Special:UserLogout|одголосити]] і знову приголосити до сістемы.'''",
\9aÑ\96дÑ\8c Ñ\81Ñ\8f Ñ\82оÑ\82 Ð¿Ñ\80облем Ð±Ñ\83де Ð¿Ð¾Ð²Ñ\82оÑ\80ити, спробуйте ся [[Special:UserLogout|одголосити]] і знову приголосити до сістемы.'''",
 'session_fail_preview_html' => "'''Вашу пожадавку ся не удало спрацовати, бо были страчены дата сеансу..'''
 
 ''Зато же {{SITENAME}} має запнуте хоснованя чістого HTML, нагляд ся про превенцію проти атакам JavaScript-ом не зображує.''
@@ -744,10 +818,10 @@ $2
 'editingcomment' => 'Едітованя $1 (нова секція)',
 'editconflict' => 'Конфлікт едітованя: $1',
 'explainconflict' => "Дахто змінив сторінку по започатю вашой едітації.
-Выше видите актуалный текст сторінкы.
\92Ñ\8bÑ\81Ñ\88е Ð²Ð¸Ð´Ð¸Ñ\82е Ð°ÐºÑ\82Ñ\83алнÑ\8bй Ñ\82екÑ\81Ñ\82 Ñ\81Ñ\82оÑ\80Ñ\96нкÑ\8b.
 Вашы зміны суть вказаны долов.
\9cÑ\83Ñ\81иÑ\82е Ð·Ð»Ñ\83Ñ\87Ñ\96Ñ\82и Ñ\81воÑ\97 Ð·Ð¼Ñ\96нÑ\8b Ð· Ñ\94Ñ\81Ñ\82вуючім текстом.
-'''Ð\9bем''' Ð²Ñ\8bÑ\88е Ð²ÐºÐ°Ð·Ð°Ð½Ñ\8bй Ñ\82екÑ\81Ñ\82 Ð·Ñ\96Ñ\81Ñ\82ане Ñ\83Ñ\85ованый по кликнутю на  „{{int:savearticle}}“.",
\9cÑ\83Ñ\81иÑ\82е Ð·Ð»Ñ\83Ñ\87Ñ\96Ñ\82и Ñ\81воÑ\97 Ð·Ð¼Ñ\96нÑ\8b Ð· Ñ\96Ñ\81нуючім текстом.
+'''Ð\9bем''' Ð²Ñ\8bÑ\81Ñ\88е Ð²ÐºÐ°Ð·Ð°Ð½Ñ\8bй Ñ\82екÑ\81Ñ\82 Ð·Ñ\96Ñ\81Ñ\82ане Ð²Ñ\81окоÑ\87еный по кликнутю на  „{{int:savearticle}}“.",
 'yourtext' => 'Ваш текст',
 'storedversion' => 'Уложена верзія',
 'nonunicodebrowser' => "'''Увага: Ваш переглядач не є способный працовати із знаками Unicode. Абы сьте могли тоту сторінку беспечно едітовати: вшыткы знакы мімо  ASCII суть зображены в гексадецімалных кодах.'''",
@@ -782,7 +856,7 @@ $2
 'nocreate-loggedin' => 'Не маєте права створёвати новы сторінкы.',
 'sectioneditnotsupported-title' => 'Едітованя секцій не є підпороване',
 'sectioneditnotsupported-text' => 'На тій сторінцї не є підпороване едітованя єдной секції.',
-'permissionserrors' => 'Ð¥Ñ\8bба Ð¾Ð¿Ñ\80авнÑ\97нÑ\8f',
+'permissionserrors' => 'Ð¥Ñ\8bба Ð¿Ñ\80ав',
 'permissionserrorstext' => 'Не маєте поволїня той операції з  {{PLURAL:$1|такой причіны|такых причін}}:',
 'permissionserrorstext-withaction' => 'Не маєте дозволїня на $2 з {{PLURAL:$1|такой прічіны|такых прічін}}:',
 'recreate-moveddeleted-warn' => "'''Увага: Пробуєте знову створити сторінку, котра была в минулости змазана.'''
@@ -797,7 +871,7 @@ $2
 Асі была змазана.',
 'edit-conflict' => 'Конфлікт едітованя.',
 'edit-no-change' => 'Ваша едітація была іґнорована, бо ся не зробила жадна зміна тексту.',
-'edit-already-exists' => 'Не вдало ся створити нову сторінку, бо она уж екзістує.',
+'edit-already-exists' => 'Не вдало ся створити нову сторінку, бо она уж існує.',
 'defaultmessagetext' => 'Преднаставленый текст повідомлїня',
 
 # Parser/template warnings
@@ -822,8 +896,8 @@ $2
 'converter-manual-rule-error' => 'Найджена хыба в ручнім правилї конверзії языка',
 
 # "Undo" feature
-'undo-success' => 'Ð\95дÑ\96Ñ\82ованÑ\8f Ð¼Ð¾Ð¶Ðµ Ð±Ñ\8bÑ\82и Ð·Ñ\80Ñ\83Ñ\87ене.
-Просиме Вас перевірте порівнаня ниже, жебы сьте ся упевнили в тім, што хочете зробити а потім уложте зміны долов, жебы сьте закінчіли зрушіня едітованя.',
+'undo-success' => 'Ð\95дÑ\96Ñ\82ованÑ\8f Ð¼Ð¾Ð¶Ðµ Ð±Ñ\8bÑ\82и Ð·Ñ\80Ñ\83Ñ\88ене.
\9fÑ\80оÑ\81име Ð\92аÑ\81 Ð¿ÐµÑ\80евÑ\96Ñ\80Ñ\8cÑ\82е Ð¿Ð¾Ñ\80Ñ\96внанÑ\8f Ð½Ð¸Ð¶Ðµ, Ð¶ÐµÐ±Ñ\8b Ñ\81Ñ\8cÑ\82е Ñ\81Ñ\8f Ñ\83певнили Ð² Ñ\82Ñ\96м, Ñ\88Ñ\82о Ñ\85оÑ\87еÑ\82е Ð·Ñ\80обиÑ\82и Ð° Ð¿Ð¾Ñ\82Ñ\96м Ñ\83ложÑ\82е Ð·Ð¼Ñ\96нÑ\8b Ð´Ð¾Ð»Ð¾Ð², Ð¶ÐµÐ±Ñ\8b Ñ\81Ñ\8cÑ\82е Ð·Ð°ÐºÑ\96нÑ\87Ñ\96ли Ð·Ñ\80Ñ\83Ñ\88Ñ\96нÑ\8f ÐµÐ´Ñ\96Ñ\82ованÑ\8f.',
 'undo-failure' => 'Едітованя не могло быти зрушене про конфлікт міджілеглых змін.',
 'undo-norev' => 'Тото едітованя не можете вернути назад, бо не екзістує або было змазане.',
 'undo-summary' => 'Зрушена верзія $1 од хоснователя [[Special:Contributions/$2|$2]] ([[User talk:$2|діскузія]])',
@@ -862,42 +936,42 @@ $3 зазначів тоту причіну: ''$2''",
 'history-feed-title' => 'Історія едітовань',
 'history-feed-description' => 'Історія едітовань той сторінкы на вікі',
 'history-feed-item-nocomment' => '$1 в $2',
-'history-feed-empty' => 'Такой сторінкы не екзістує.
+'history-feed-empty' => 'Такой сторінкы нїт.
 Могли єй вымазати ці переменовати.
-СпÑ\80обÑ\83йÑ\82е [[Special:Search|найÑ\82и Ð²Ð¾ вікі]] подобны сторінкы.',
+СпÑ\80обÑ\83йÑ\82е [[Special:Search|найÑ\82и Ð½Ð° вікі]] подобны сторінкы.',
 
 # Revision deletion
 'rev-deleted-comment' => '(згорнутя едітованя вымазане)',
-'rev-deleted-user' => '(мено автора стерто)',
+'rev-deleted-user' => '(імя автора стерто)',
 'rev-deleted-event' => '(лоґ одстраненый)',
 'rev-deleted-user-contribs' => '[мено хоснователя або IP адреса одстранене – едітованя є в приспевках сховане]',
-'rev-deleted-text-permission' => "ТоÑ\82а Ñ\80евÑ\96зÑ\96Ñ\8f Ð±Ñ\8bла  '''змазана'''.
\94еÑ\82айлÑ\8b Ð¼Ð¾Ð¶Ñ\83Ñ\82Ñ\8c Ð±Ñ\8bÑ\82и Ð·Ð°Ð·Ð½Ð°Ñ\87енÑ\8b Ð² [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ÐºÐ½Ð¸Ð·Ñ\97 Ð·Ð¼Ð°Ð·Ð°ных сторінок].",
-'rev-deleted-text-unhide' => "ТоÑ\82а Ñ\80евÑ\96зÑ\96Ñ\8f Ð±Ñ\8bла '''змазана'''.
\94еÑ\82айлÑ\8b Ð¼Ð¾Ð¶Ñ\83Ñ\82Ñ\8c Ð±Ñ\8bÑ\82и Ð·Ð°Ð·Ð½Ð°Ñ\87енÑ\8b Ð² [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ÐºÐ½Ð¸Ð·Ñ\97 Ð·Ð¼Ð°Ð·Ð°ных сторінок].
+'rev-deleted-text-permission' => "ТоÑ\82а Ñ\80евÑ\96зÑ\96Ñ\8f Ð±Ñ\8bла  '''вÑ\8bлÑ\83Ñ\87ена''.
\94еÑ\82айлÑ\8b Ð¼Ð¾Ð¶Ñ\83Ñ\82Ñ\8c Ð±Ñ\8bÑ\82и Ð·Ð°Ð·Ð½Ð°Ñ\87енÑ\8b Ð² [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ÐºÐ½Ð¸Ð·Ñ\97 Ð²Ñ\8bлÑ\83Ñ\87еных сторінок].",
+'rev-deleted-text-unhide' => "ТоÑ\82а Ñ\80евÑ\96зÑ\96Ñ\8f Ð±Ñ\8bла '''вÑ\8bлÑ\83Ñ\87ена'''.
\94еÑ\82айлÑ\8b Ð¼Ð¾Ð¶Ñ\83Ñ\82Ñ\8c Ð±Ñ\8bÑ\82и Ð·Ð°Ð·Ð½Ð°Ñ\87енÑ\8b Ð² [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ÐºÐ½Ð¸Ð·Ñ\97 Ð²Ñ\8bлÑ\83Ñ\87еных сторінок].
 Можете  сі все [$1 тоту ревізію посмотрити], кідь хочете.",
 'rev-suppressed-text-unhide' => "Тота ревізія была '''затаєна'''.
 Детайлы можуть быти уведены в  [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} записї утаїня].
 Можете сі [$1 тоту ревізію посмотрити], кідь  хочете.",
-'rev-deleted-text-view' => "ТоÑ\82а Ñ\80евÑ\96зÑ\96Ñ\8f Ð±Ñ\8bла  '''змазана'''.
\9cожеÑ\82е Ñ\81Ñ\96 Ñ\94й Ð¿Ð¾Ñ\81моÑ\82Ñ\80иÑ\82и; Ð´ÐµÑ\82айлÑ\8b Ð¼Ð¾Ð¶Ñ\83Ñ\82Ñ\8c Ð±Ñ\8bÑ\82и Ð·Ð°Ð·Ð½Ð°Ñ\87енÑ\8b Ð² [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ÐºÐ½Ð¸Ð·Ñ\97 Ð·Ð¼Ð°Ð·Ð°ных сторінок].",
+'rev-deleted-text-view' => "ТоÑ\82а Ñ\80евÑ\96зÑ\96Ñ\8f Ð±Ñ\8bла  '''вÑ\8bлÑ\83Ñ\87ена'''.
\9cожеÑ\82е Ñ\81Ñ\96 Ñ\94й Ð¿Ð¾Ñ\81моÑ\82Ñ\80иÑ\82и; Ð´ÐµÑ\82айлÑ\8b Ð¼Ð¾Ð¶Ñ\83Ñ\82Ñ\8c Ð±Ñ\8bÑ\82и Ð·Ð°Ð·Ð½Ð°Ñ\87енÑ\8b Ð² [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ÐºÐ½Ð¸Ð·Ñ\97 Ð²Ñ\8bлÑ\83Ñ\87еных сторінок].",
 'rev-suppressed-text-view' => "Тота верзія была '''затаєна'''.
 Можете сі єй посмотрити; детайлы можуть быти зазначены в  [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} записї затаїня].",
 'rev-deleted-no-diff' => "Тот розділ сі не можете помострити, бо єдна з &nbsp;ревізій была '''змазана'''.
 Детайлы можуть быти зазначены в [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} книзї змазаных сторінок].",
 'rev-suppressed-no-diff' => "Тот роздїл сі не можете посмотрити, бо єдна з ревізій была  '''змазана'''.",
-'rev-deleted-unhide-diff' => "Ð\84дна Ð· Ñ\80евÑ\96зÑ\96й Ð¿Ñ\80о Ñ\82оÑ\82о Ð¿Ð¾Ñ\80Ñ\96внанÑ\8f Ð±Ñ\8bла '''змазана'''.
+'rev-deleted-unhide-diff' => "Ð\84дна Ð· Ñ\80евÑ\96зÑ\96й Ð¿Ñ\80о Ñ\82оÑ\82о Ð¿Ð¾Ñ\80Ñ\96внанÑ\8f Ð±Ñ\8bла '''вÑ\8bлÑ\83Ñ\87ена'''.
 Можете сі але  [$1 тоту ревізію посмотрити], кідь хочете.",
 'rev-suppressed-unhide-diff' => "Єдна з ревізій про тото порівнаня была '''затаєна'''.
 Детайлы можуть быти уведены в  [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} записї утаїня].
 Можете сі але [$1 тоту ревізію посмотрити], кідь  хочете.",
-'rev-deleted-diff-view' => "Ð\84дна Ð· Ñ\80евÑ\96зÑ\96й Ð¿Ñ\80о Ñ\82оÑ\82о Ð¿Ð¾Ñ\80Ñ\96внанÑ\8f Ð±Ñ\8bла  '''змазана'''.
\9cожеÑ\82е Ñ\81Ñ\96 Ñ\94й Ð¿Ð¾Ñ\81моÑ\82Ñ\80иÑ\82и; Ð´ÐµÑ\82айлÑ\8b Ð¼Ð¾Ð¶Ñ\83Ñ\82Ñ\8c Ð±Ñ\8bÑ\82и Ð·Ð°Ð·Ð½Ð°Ñ\87енÑ\8b Ð² [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ÐºÐ½Ð¸Ð·Ñ\97 Ð·Ð¼Ð°Ð·Ð°ных сторінок].",
+'rev-deleted-diff-view' => "Ð\84дна Ð· Ñ\80евÑ\96зÑ\96й Ð¿Ñ\80о Ñ\82оÑ\82о Ð¿Ð¾Ñ\80Ñ\96внанÑ\8f Ð±Ñ\8bла  '''вÑ\8bлÑ\83Ñ\87ена'''.
\9cожеÑ\82е Ñ\81Ñ\96 Ñ\94й Ð¿Ð¾Ñ\81моÑ\82Ñ\80иÑ\82и; Ð´ÐµÑ\82айлÑ\8b Ð¼Ð¾Ð¶Ñ\83Ñ\82Ñ\8c Ð±Ñ\8bÑ\82и Ð·Ð°Ð·Ð½Ð°Ñ\87енÑ\8b Ð² [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ÐºÐ½Ð¸Ð·Ñ\97 Ð²Ñ\8bлÑ\83Ñ\87еных сторінок].",
 'rev-suppressed-diff-view' => "Єдна з ревізій про тото порівнаня была '''затаєна'''.
 Можете сі єй посмотрити; детайлы можуть быти зазначены в  [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} записї затаїня].",
 'rev-delundel' => 'вказати/сховати',
 'rev-showdeleted' => 'вказати',
-'revisiondelete' => 'Ð\97мазати/обновити ревізії',
+'revisiondelete' => 'Ð\92Ñ\8bлÑ\83Ñ\87Ñ\96ти/обновити ревізії',
 'revdelete-nooldid-title' => 'Хыбна цілёва ревізія',
 'revdelete-nooldid-text' => 'Не зволили сьте ревізії, на котрых хочете тоту функцію выконати.',
 'revdelete-nologtype-title' => 'Нестановленый тіп запису',
@@ -905,7 +979,7 @@ $3 зазначів тоту причіну: ''$2''",
 'revdelete-nologid-title' => 'Неплатный протоколовачій запис',
 'revdelete-nologid-text' => 'Будь сьте не зазначіли цілёвый запис в протоколї або даный запис не екзістує.',
 'revdelete-no-file' => 'Зазначеный файл не єствує.',
-'revdelete-show-file-confirm' => 'Ð\9dа Ð¿ÐµÐ²Ð½Ð¾ Ñ\81обÑ\96 Ñ\85оÑ\87еÑ\82е Ð¿Ð¾Ñ\81моÑ\82Ñ\80иÑ\82и Ð·Ð¼Ð°Ð·Ð°ну ревізію файлу „<nowiki>$1</nowiki>“ з $2, $3?',
+'revdelete-show-file-confirm' => 'Ð\9dа Ð¿ÐµÐ²Ð½Ð¾ Ñ\81обÑ\96 Ñ\85оÑ\87еÑ\82е Ð¿Ð¾Ñ\81моÑ\82Ñ\80иÑ\82и Ð²Ñ\8bлÑ\83Ñ\87ену ревізію файлу „<nowiki>$1</nowiki>“ з $2, $3?',
 'revdelete-show-file-submit' => 'Гей',
 'revdelete-selected' => "'''{{PLURAL:$2|Выбрана ревізія|Выбраны ревізії}} з [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Выбрана протоколована подїя|Выбраны протоколованы подїї}}:'''",
@@ -938,7 +1012,7 @@ $1",
 'logdelete-failure' => "'''Не вдало ся наставити видимость протоколу.'''
 $1",
 'revdel-restore' => 'Змінити видимость',
-'revdel-restore-deleted' => 'вÑ\8bмазаны ревізії',
+'revdel-restore-deleted' => 'вÑ\8bлÑ\83Ñ\87ены ревізії',
 'revdel-restore-visible' => 'видительны ревізії',
 'pagehist' => 'Історія сторінкы',
 'deletedhist' => 'Вымазана історія',
@@ -972,7 +1046,7 @@ $1",
 'mergehistory-header' => 'Тота сторінка Вам дозволить злучіти історію єдной жрідловой сторінкы з новшов сторінков.
 Пересвіджте ся, же тота зміна утриме повязаность і поступность  історії сторінкы.',
 'mergehistory-box' => 'Злучіти ревізії двох сторінок:',
-'mergehistory-from' => 'Ð\97дÑ\80оÑ\91ва сторінка:',
+'mergehistory-from' => 'Ð\96Ñ\80Ñ\96длова сторінка:',
 'mergehistory-into' => 'Цілёва сторінка:',
 'mergehistory-list' => 'Історія злучітельных сторінок',
 'mergehistory-merge' => 'Наслїдуючі верзії сторінкы [[:$1|$1]] можуть быти злучены в [[:$2]]. Перепиначом выберте верзію, котра урчіть, же лем тота і старшы едітації будуть злучены. Рахуйте з тым, же хоснованём  навіґачных одказів будуть дата страчены.',
@@ -981,9 +1055,9 @@ $1",
 'mergehistory-empty' => 'Не дають ся споїти жадны ревізії.',
 'mergehistory-success' => '$3 {{PLURAL:$3|ревізія|ревізії|ревізійí}} сторінкы [[:$1]] {{PLURAL:$3|была успішно злучена|были успішно злучены|было успішно злуґено}} до сторінкы [[:$2]].',
 'mergehistory-fail' => 'Злучіня історій ся не дасть зробити. Перевірте заданы сторінкы і їх історії',
-'mergehistory-no-source' => 'Ð\97дÑ\80оÑ\91ва Ñ\81Ñ\82оÑ\80Ñ\96нка $1 Ð½Ðµ ÐµÐºÐ·Ñ\96Ñ\81Ñ\82ує.',
+'mergehistory-no-source' => 'Ð\96Ñ\80Ñ\96длова Ñ\81Ñ\82оÑ\80Ñ\96нка $1 Ð½Ðµ Ñ\96Ñ\81нує.',
 'mergehistory-no-destination' => 'Цілёва сторінка «$1» не екзістує.',
-'mergehistory-invalid-source' => 'Ð\97дÑ\80ойова сторінка мусить мати правилну назву.',
+'mergehistory-invalid-source' => 'Ð\96Ñ\80Ñ\96длова сторінка мусить мати правилну назву.',
 'mergehistory-invalid-destination' => 'Цілёва сторінка мусить мати правилну назву.',
 'mergehistory-autocomment' => 'Злучена сторінка [[:$1]] до сторінкы [[:$2]]',
 'mergehistory-comment' => 'Злучена сторінка [[:$1]] до сторінкы [[:$2]]: $3',
@@ -1265,11 +1339,11 @@ $1",
 'right-move-rootuserpages' => 'Переменованя корінёвых сторінок хоснователїв',
 'right-movefile' => 'Переменовати файлы',
 'right-suppressredirect' => 'Нестворіня напрямлїня про переменоваю сторінкы',
-'right-upload' => 'Ð\97аладовованя файлів',
+'right-upload' => 'Ð\9dаладовованя файлів',
 'right-reupload' => 'Переписованя екзістуючіх файлів',
-'right-reupload-own' => 'Ð\9fеÑ\80епиÑ\81ованÑ\8f Ñ\84айлÑ\96в Ð·Ð°Ð»Ð°Ð´Ð¾Ð²Ð°Ð½Ñ\8bÑ\85 Ð¾Ð´ Ñ\81ебе Ñ\81амого',
-'right-reupload-shared' => 'Ð\97аладованя локалных файлів жебы перекрыли тотых в сполочнім усховищу',
-'right-upload_by_url' => 'Ð\97аладовованя файлів з URL адрес',
+'right-reupload-own' => 'Переписованя файлів ладованых од себе самого',
+'right-reupload-shared' => 'Ð\9dаладованя локалных файлів жебы перекрыли тотых в сполочнім усховищу',
+'right-upload_by_url' => 'Ð\9dаладовованя файлів з URL адрес',
 'right-purge' => 'Очіщіня кешу про сторінкы без потверджовачого діалоґу',
 'right-autoconfirmed' => 'Едітованя часточно замкнутых сторінок',
 'right-bot' => 'Быти поважованый за автоматічный процес',
@@ -1303,7 +1377,7 @@ $1",
 'right-markbotedits' => 'Означованя ревертів як едітованя робота',
 'right-noratelimit' => 'Не має обмеджіня в швыдкости',
 'right-import' => 'Імпорт сторінок з іншых вікі',
-'right-importupload' => 'Ð\86мпоÑ\80Ñ\82 Ñ\81Ñ\82оÑ\80Ñ\96нок Ñ\87еÑ\80ез Ð·аладованя файлів',
+'right-importupload' => 'Ð\86мпоÑ\80Ñ\82 Ñ\81Ñ\82оÑ\80Ñ\96нок Ñ\87еÑ\80ез Ð½аладованя файлів',
 'right-patrol' => 'Позначованя едітовань як перевіреных',
 'right-autopatrol' => 'Автоматічне означованя едітовань як перевіреных',
 'right-patrolmarks' => 'Зобразованя патролёваных сторінок в Послїднїх змінах',
@@ -1334,10 +1408,10 @@ $1",
 'action-move-subpages' => 'переменованя той сторінкы зо вшыткыма єй підсторінками',
 'action-move-rootuserpages' => 'переменовати корінёвы сторінкы хостователїв',
 'action-movefile' => 'переменовати тот файл',
-'action-upload' => 'заладовати тот файл',
+'action-upload' => 'наладовати тот файл',
 'action-reupload' => 'переписати тот екзістуючій файл',
 'action-reupload-shared' => 'перекрыти тот файл зо сполочного уложыштя',
-'action-upload_by_url' => 'заладовати тот файл з URL адресы',
+'action-upload_by_url' => 'наладовати тот файл з URL адресы',
 'action-writeapi' => 'хосновати API про писаня',
 'action-delete' => 'Вымазати тоту сторінку',
 'action-deleterevision' => 'вымазати тоту ревізію сторінкы',
@@ -1408,29 +1482,29 @@ $1",
 'recentchangeslinked-to' => 'Вказати зміны на сторінках, одказуючіх на задану сторінку',
 
 # Upload
-'upload' => 'Ð\97аладовати файл',
-'uploadbtn' => 'Ð\97аладовати файл',
-'reuploaddesc' => 'Ð\97Ñ\80Ñ\83Ñ\88Ñ\8bÑ\82и Ð·Ð°Ð»Ð°Ð´Ð¾Ð²Ð¾Ð²Ð°Ð½Ñ\8f Ð° Ð²ÐµÑ\80нÑ\83Ñ\82и Ñ\81Ñ\8f Ð´Ð¾ Ñ\84оÑ\80мÑ\8b Ð·аладовованя',
+'upload' => 'Ð\9dаладовати файл',
+'uploadbtn' => 'Ð\9dаладовати файл',
+'reuploaddesc' => 'Ð\97Ñ\80Ñ\83Ñ\88Ñ\8bÑ\82и Ð»Ð°Ð´Ð¾Ð²Ð°Ð½Ñ\8f Ð° Ð²ÐµÑ\80нÑ\83Ñ\82и Ñ\81Ñ\8f Ð´Ð¾ Ñ\84оÑ\80мÑ\8b Ð½аладовованя',
 'upload-tryagain' => 'Уложыти зміненый попис файлу',
 'uploadnologin' => 'Не сьте приголошеный(а)',
-'uploadnologintext' => 'Ð\96ебÑ\8b Ð·аладовати файл, мусите ся [[Special:UserLogin|приголосити]].',
-'upload_directory_missing' => 'Ð\90дÑ\80еÑ\81аÑ\80Ñ\8c Ð¿Ñ\80о Ð·аладовованя файлів ($1) хыбить тай вебовый сервер го не годен створити.',
-'upload_directory_read_only' => 'Ð\94о Ð°Ð´Ñ\80еÑ\81аÑ\80Ñ\8f Ð·аладованых файлів ($1) не мать вебовый сервер права запису.',
-'uploaderror' => 'Ð\9fÑ\96д Ñ\87аÑ\81 Ð·Ð°Ð»Ð°Ð´Ð¾Ð²ованя ся притрафила хыба',
-'upload-recreate-warning' => "'''Увага: Файл з тов назвов быв скоре змазаный ці переменованый.'''
+'uploadnologintext' => 'Ð\96ебÑ\8b Ð½аладовати файл, мусите ся [[Special:UserLogin|приголосити]].',
+'upload_directory_missing' => 'Ð\90дÑ\80еÑ\81аÑ\80Ñ\8c Ð¿Ñ\80о Ð½аладовованя файлів ($1) хыбить тай вебовый сервер го не годен створити.',
+'upload_directory_read_only' => 'Ð\94о Ð°Ð´Ñ\80еÑ\81аÑ\80Ñ\8f Ð½аладованых файлів ($1) не мать вебовый сервер права запису.',
+'uploaderror' => 'Ð\9fÑ\96д Ñ\87аÑ\81 Ð»Ð°Ð´ованя ся притрафила хыба',
+'upload-recreate-warning' => "'''Увага: Файл з тов назвов быв оперед змазаный ці переменованый.'''
 
 Ту є про перегляд зображеный список мазаня і переменованя той сторінкы:",
-'uploadtext' => "Ð\9dиже Ð´Ð°Ð½Ñ\8bй Ñ\84оÑ\80мÑ\83лаÑ\80Ñ\8c Ñ\81лÑ\83жÑ\8bÑ\82Ñ\8c Ð½Ð° Ð·Ð°Ð»Ð°Ð´Ð¾Ð²Ð¾Ð²Ð°Ð½Ñ\8f Ñ\84айлÑ\96в. Ð£Ð¶ Ð·Ð°Ð»Ð°Ð´Ð¾Ð²Ð°Ð½Ñ\8b Ñ\84айлÑ\8b Ñ\81обÑ\96 Ð¼Ð¾Ð¶ÐµÑ\82е Ð¿ÐµÑ\80езеÑ\80аÑ\82и Ñ\96 Ð³Ð»Ñ\8fдаÑ\82и Ð¿Ð¾Ð¼Ð¾Ñ\87ов [[Special:FileList|Ñ\81пиÑ\81кÑ\83 Ð·Ð°Ð»Ð°Ð´Ð¾Ð²Ð°Ð½Ñ\8bÑ\85 Ñ\84айлÑ\96в]], ÐºÐ°Ð¶Ð´Ðµ Ð·Ð°Ð»Ð°Ð´Ð¾Ð²Ð°Ð½Ñ\8f Ñ\81Ñ\8f Ñ\82Ñ\8bж Ð·Ð°Ð·Ð½Ð°Ñ\87Ñ\83Ñ\94 Ð´Ð¾ [[Special:Log/upload|книгÑ\8b Ð·аладованя]], змазаня суть в [[Special:Log/delete|книзї змазаных сторінок]].
+'uploadtext' => "Ð\9dиже Ð´Ð°Ð½Ñ\8bй Ñ\84оÑ\80мÑ\83лаÑ\80Ñ\8c Ñ\81лÑ\83жÑ\8bÑ\82Ñ\8c Ð½Ð° Ð½Ð°Ð»Ð°Ð´Ð¾Ð²Ð¾Ð²Ð°Ð½Ñ\8f Ñ\84айлÑ\96в. Ð£Ð¶ Ð½Ð°Ð»Ð°Ð´Ð¾Ð²Ð°Ð½Ñ\8b Ñ\84айлÑ\8b Ñ\81обÑ\96 Ð¼Ð¾Ð¶ÐµÑ\82е Ð¿ÐµÑ\80езеÑ\80аÑ\82и Ñ\96 Ð³Ð»Ñ\8fдаÑ\82и Ð¿Ð¾Ð¼Ð¾Ñ\87ов [[Special:FileList|Ñ\81пиÑ\81кÑ\83 Ð½Ð°Ð»Ð°Ð´Ð¾Ð²Ð°Ð½Ñ\8bÑ\85 Ñ\84айлÑ\96в]], ÐºÐ°Ð¶Ð´Ðµ Ð½Ð°Ð»Ð°Ð´Ð¾Ð²Ð°Ð½Ñ\8f Ñ\81Ñ\8f Ñ\82Ñ\8bж Ð·Ð°Ð·Ð½Ð°Ñ\87Ñ\83Ñ\94 Ð´Ð¾ [[Special:Log/upload|книгÑ\8b Ð½аладованя]], змазаня суть в [[Special:Log/delete|книзї змазаных сторінок]].
 
-Про вложіня образку до сторінкы хоснуйте єден з наслїдуючіх способів запису:
+Про вложіня образчіка до сторінкы хоснуйте єден із слїдуючіх способів запису:
 * '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Файл.jpg]]</nowiki></code>''' до сторінкы вложыть цїлый образок,
 * '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Файл.png|thumb|left|Попис]]</nowiki></code>''' вложыть нагляд в рамику зарівнанім на лівый бік, з пописом „Попис“,
 * '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Файл.ogg]]</nowiki></code>''' вложыть дірект одказ на файл, без того жебы ся зобразив на сторінцї.",
 'upload-permitted' => 'Дозволены тіпы  файлів: $1.',
 'upload-preferred' => 'Преферованы тіпы файлів: $1',
 'upload-prohibited' => 'Заказаны тіпы файлів: $1.',
-'uploadlog' => 'книга Ð·аладованя',
-'uploadlogpage' => 'Ð\9bоÒ\91 Ð·аладованых файлів',
+'uploadlog' => 'книга Ð½аладованя',
+'uploadlogpage' => 'Ð\9bоÒ\91 Ð½аладованых файлів',
 'uploadlogpagetext' => 'Ниже найдете список найновшых файлів. Смотьте [[Special:NewFiles|ґалерію новых образків]] про веце візуалного нагляду.',
 'filename' => 'Назва файлу:',
 'filedesc' => 'Попис',
@@ -1438,22 +1512,22 @@ $1",
 'filereuploadsummary' => 'Зміны у файлі:',
 'filestatus' => 'Авторьскы права:',
 'filesource' => 'Жрідло:',
-'uploadedfiles' => 'Ð\97аладованы файлы',
+'uploadedfiles' => 'Ð\9dаладованы файлы',
 'ignorewarning' => 'Іґноровати варованя тай уложыти файл.',
 'ignorewarnings' => 'Іґноровати вшыткы варованя',
 'minlength1' => 'Назва файлу мусить мати холем єдну літеру.',
-'illegalfilename' => 'Ð\9dазва Ñ\84айлÑ\83 "$1" Ð¾Ð±Ñ\81Ñ\8fгÑ\83Ñ\94 Ð±Ñ\83квÑ\8b, ÐºÐ¾Ñ\82Ñ\80Ñ\8b Ð½Ðµ Ñ\81Ñ\83Ñ\82Ñ\8c Ð´Ð¾Ð·Ð²Ð¾Ð»ÐµÐ½Ñ\8b Ð² Ð½Ð°Ð·Ð²Ð°Ñ\85 Ñ\81Ñ\82оÑ\80Ñ\96нок. Ð\9fÑ\80оÑ\81име, Ð¿ÐµÑ\80еменÑ\83йÑ\82е Ñ\84айл Ñ\96 Ñ\81пÑ\80обÑ\83йÑ\82е Ð³Ð¾ Ð·аладовати зясь.',
+'illegalfilename' => 'Ð\9dазва Ñ\84айлÑ\83 "$1" Ð¾Ð±Ñ\81Ñ\8fгÑ\83Ñ\94 Ð±Ñ\83квÑ\8b, ÐºÐ¾Ñ\82Ñ\80Ñ\8b Ð½Ðµ Ñ\81Ñ\83Ñ\82Ñ\8c Ð´Ð¾Ð·Ð²Ð¾Ð»ÐµÐ½Ñ\8b Ð² Ð½Ð°Ð·Ð²Ð°Ñ\85 Ñ\81Ñ\82оÑ\80Ñ\96нок. Ð\9fÑ\80оÑ\81име, Ð¿ÐµÑ\80еменÑ\83йÑ\82е Ñ\84айл Ñ\96 Ñ\81пÑ\80обÑ\83йÑ\82е Ð³Ð¾ Ð½аладовати зясь.',
 'filename-toolong' => 'Назвы файлів не можуть быти довшы, як 240 байтів.',
 'badfilename' => 'Назва файлу была змінена на „$1“.',
 'filetype-mime-mismatch' => 'Росшырїня файлу ".$1" не одповідать ёго MIME тіпу ($2).',
-'filetype-badmime' => 'Ð\9dе Ñ\94 Ð´Ð¾Ð·Ð²Ð¾Ð»ÐµÐ½Ð¾ Ð·аладововати файлы MIME тіп „$1“.',
-'filetype-bad-ie-mime' => 'Ð\9dеможливо Ð·аладовати тот файл, бо Internet Explorer бы го тримав за „$1“, што є не дозволеный і потенціално небеспечный тіп файлу.',
+'filetype-badmime' => 'Ð\9dе Ñ\94 Ð´Ð¾Ð·Ð²Ð¾Ð»ÐµÐ½Ð¾ Ð½аладововати файлы MIME тіп „$1“.',
+'filetype-bad-ie-mime' => 'Ð\9dеможливо Ð½аладовати тот файл, бо Internet Explorer бы го тримав за „$1“, што є не дозволеный і потенціално небеспечный тіп файлу.',
 'filetype-unwanted-type' => "„.$1“''' є нежеланый формат файлу. {{plural:$3|Желаный формат файлів є|Желаны форматы файлів суть}} $2.",
 'filetype-banned-type' => "'''„.$1“''' {{PLURAL:$4|є недозволеный формат файлів|суть недозволены форматы файлів}}.
 {{PLURAL:$3|Дозволеный формат фалів|Дозволены форматы файлів суть}} $2.",
 'filetype-missing' => 'Файл не має росшырїня (наприклад, «.jpg»).',
-'empty-file' => 'Ð\97аладованый файл є порожнїй.',
-'file-too-large' => 'Ð\97аладованый файл є барз великый.',
+'empty-file' => 'Ð\9dаладованый файл є порожнїй.',
+'file-too-large' => 'Ð\9dаладованый файл є барз великый.',
 'filename-tooshort' => 'Назва файлу є барз коротка.',
 'filetype-banned' => 'Тот тіп файлу є заказаный.',
 'verification-error' => 'Тот файл не перешов овіринём файлів.',
@@ -1473,65 +1547,65 @@ $1",
 Згорнутя, котре ту зазначіте, ся на пописовій сторінцї не зобразить.
 Кідь там хочете своє згорнутя зобразити, будете мусити дану сторінку едітовати мануално. [[$1|thumb]]',
 'fileexists-extension' => 'Уже екзістує файл з подобным іменом: [[$2|thumb]]
-* Ð\9dазва Ð·аладованого файлу: <strong>[[:$1]]</strong>
+* Ð\9dазва Ð½аладованого файлу: <strong>[[:$1]]</strong>
 * Назва екзістуючого файлу: <strong>[[:$2]]</strong>
 Выберте іншу назву.',
 'fileexists-thumbnail-yes' => "Тот файл є асі образчік в зменшеній великости ''(нагляд)''. [[$1|thumb]]
 Перевірте файл <strong>[[:$1]]</strong>.
\9aÑ\96дÑ\8c Ñ\94 Ð²ÐºÐ°Ð·Ð°Ð½Ñ\8bй Ñ\84айл Ð²ÐµÐºÑ\88Ñ\8bй, Ð°Ð»Ðµ Ñ\96накÑ\88е Ñ\94днакÑ\8bй, Ð½Ðµ Ñ\82Ñ\80еба Ð¾ÐºÑ\80емо Ð·аладовати ёго зменшену верзію.",
\9aÑ\96дÑ\8c Ñ\94 Ð²ÐºÐ°Ð·Ð°Ð½Ñ\8bй Ñ\84айл Ð²ÐµÐºÑ\88Ñ\8bй, Ð°Ð»Ðµ Ñ\96накÑ\88е Ñ\94днакÑ\8bй, Ð½Ðµ Ñ\82Ñ\80еба Ð¾ÐºÑ\80емо Ð½аладовати ёго зменшену верзію.",
 'file-thumbnail-no' => "Назва файлу ся зачінать на <strong>$1</strong>.
 Може є то образчік в зменшеній великости ''(нагляд)''.
 Заладуйте файл в повнім розлишіню, покы є ку діспозіції, або зміньте назву файлу.",
 'fileexists-forbidden' => 'Файл з таков назвов уж екзістує і не є дозволено го переписати.
\9aÑ\96дÑ\8c Ñ\85оÑ\87еÑ\82е Ñ\82оÑ\82 Ñ\84айл Ð·аладовати, вернийте ся і звольте іншу назву.
\9aÑ\96дÑ\8c Ñ\85оÑ\87еÑ\82е Ñ\82оÑ\82 Ñ\84айл Ð½аладовати, вернийте ся і звольте іншу назву.
 [[File:$1|thumb|center|$1]]',
-'fileexists-shared-forbidden' => 'Файл Ð· Ñ\82ов Ð½Ð°Ð·Ð²Ð¾Ð² Ñ\83ж ÐµÐºÐ·Ñ\96Ñ\81Ñ\82Ñ\83Ñ\94 Ð² Ñ\81полоÑ\87нÑ\96м Ñ\83Ñ\81Ñ\85овиÑ\89Ñ\83. Ð\9aÑ\96дÑ\8c Ñ\96 Ð½Ð°Ð¿ÐµÑ\80ек Ñ\82омÑ\83 Ñ\85оÑ\87еÑ\82е Ð²Ð°Ñ\88 Ñ\84айл Ð·аладовати, вернийте ся і звольте іншу назву. [[File:$1|thumb|center|$1]]',
+'fileexists-shared-forbidden' => 'Файл Ð· Ñ\82ов Ð½Ð°Ð·Ð²Ð¾Ð² Ñ\83ж ÐµÐºÐ·Ñ\96Ñ\81Ñ\82Ñ\83Ñ\94 Ð² Ñ\81полоÑ\87нÑ\96м Ñ\83Ñ\81Ñ\85овиÑ\89Ñ\83. Ð\9aÑ\96дÑ\8c Ñ\96 Ð½Ð°Ð¿ÐµÑ\80ек Ñ\82омÑ\83 Ñ\85оÑ\87еÑ\82е Ð²Ð°Ñ\88 Ñ\84айл Ð½аладовати, вернийте ся і звольте іншу назву. [[File:$1|thumb|center|$1]]',
 'file-exists-duplicate' => 'Тот файл є дуплікат {{PLURAL:$1|файлу|такых файлів}}:',
 'file-deleted-duplicate' => 'Ідентічный файл ку тому ([[:$1]]) быв уж скоре змазаный. Передтым як файл знову заладуєте, бы сьте мали перевірити записы о попереднёму змазаню.',
-'uploadwarning' => 'Ð\9fозÑ\96Ñ\80Ñ\8c Ðº Ð·аладованю',
+'uploadwarning' => 'Ð\9fозÑ\96Ñ\80Ñ\8c Ðº Ð½аладованю',
 'uploadwarning-text' => 'Просиме, зміньте опис файлу ниже і спробуйте то знову.',
 'savefile' => 'Уложыти файл',
-'uploadedimage' => 'заладовав "[[$1]]"',
-'overwroteimage' => 'заладована нова верзія "[[$1]]"',
-'uploaddisabled' => 'Ð\97аладовованя файлів заборонене.',
-'copyuploaddisabled' => 'Ð\97аладовованя файлів через URL є выпнуте.',
-'uploadfromurl-queued' => 'Ð\92аÑ\88а Ð¿Ð¾Ð¶Ð°Ð´Ð°Ð²ÐºÐ° Ð½Ð° Ð·Ð°Ð»Ð°Ð´Ð¾Ð²Ð¾Ð²Ð°Ð½Ñ\8f Ñ\84айлÑ\83 Ð±Ñ\8bла Ñ\83ложена Ð´Ð¾ Ñ\84Ñ\80онÑ\82ы.',
-'uploaddisabledtext' => 'Ð\97аладовованя файлів є выпнуте.',
-'php-uploaddisabledtext' => 'Ð\92 PHP Ñ\94 Ð²Ñ\8bпнÑ\83Ñ\82е Ð·аладовованя файлів. Просиме, перевірьте наставлїня file_uploads.',
+'uploadedimage' => 'наладовав "[[$1]]"',
+'overwroteimage' => 'наладована нова верзія "[[$1]]"',
+'uploaddisabled' => 'Ð\9dаладовованя файлів заборонене.',
+'copyuploaddisabled' => 'Ð\9dаладовованя файлів через URL є выпнуте.',
+'uploadfromurl-queued' => 'Ð\92аÑ\88а Ð¿Ð¾Ð¶Ð°Ð´Ð°Ð²ÐºÐ° Ð½Ð° Ð½Ð°Ð»Ð°Ð´Ð¾Ð²Ð¾Ð²Ð°Ð½Ñ\8f Ñ\84айлÑ\83 Ð±Ñ\8bла Ñ\83ложена Ð´Ð¾ Ñ\88оÑ\80ы.',
+'uploaddisabledtext' => 'Ð\9dаладовованя файлів є выпнуте.',
+'php-uploaddisabledtext' => 'Ð\92 PHP Ñ\94 Ð²Ñ\8bпнÑ\83Ñ\82е Ð½аладовованя файлів. Просиме, перевірьте наставлїня file_uploads.',
 'uploadscripted' => 'Тот файл обсягує HTML-код або скріпт, якый може быти неправилно інтерпретованый вебовым переглядячом.',
 'uploadvirus' => 'Файл обсягує вірус! Детайлы: $1',
 'uploadjava' => 'Тот файл є ZIP архів, котрый обсягує .class-файл Java.
\97аладованя Java-файлів не є дозволене, бо они можуть запрічінити обход забеспечіня сістемы.',
\9dаладованя Java-файлів не є дозволене, бо они можуть запрічінити обход забеспечіня сістемы.',
 'upload-source' => 'Жрідловый файл',
 'sourcefilename' => 'Назва жрідлового файлу:',
 'sourceurl' => 'Жрідлова URL-адреса:',
 'destfilename' => 'Назва цілёвого файлу:',
 'upload-maxfilesize' => 'Максімалный розмір файлу: $1',
 'upload-description' => 'Попис файлу',
-'upload-options' => 'Ð\9fаÑ\80амеÑ\82Ñ\80Ñ\8b Ð·аладовованя',
+'upload-options' => 'Ð\9fаÑ\80амеÑ\82Ñ\80Ñ\8b Ð½аладовованя',
 'watchthisupload' => 'Слїдовати тот файл',
 'filewasdeleted' => 'Файл з таков назвов уж екзістовав а быв змазаный. Детайлы обсягує $1.',
-'filename-bad-prefix' => "Ð\9dазва Ð·аладовованого файлу ся зачінать на '''„$1“''', што не є назва звычайно приряджована діґіталным фотоапаратом. Звольте іншу назву, котра ваш файл попише лїпше.",
-'upload-success-subj' => 'Ð\97аладованя было успішне',
-'upload-success-msg' => 'Файл Ð²Ð°Ð¼Ð¸ Ð·аладованый з [$2] є доступный на [[:{{ns:file}}:$1]]',
-'upload-failure-subj' => 'Проблем із заладованём',
-'upload-failure-msg' => 'У Ð²Ð°Ð¼Ð¸ Ð·аладованого файлу выник проблем  з [$2]::
+'filename-bad-prefix' => "Ð\9dазва Ð½аладовованого файлу ся зачінать на '''„$1“''', што не є назва звычайно приряджована діґіталным фотоапаратом. Звольте іншу назву, котра ваш файл попише лїпше.",
+'upload-success-subj' => 'Ð\9dаладованя было успішне',
+'upload-success-msg' => 'Файл Ð²Ð°Ð¼Ð¸ Ð½аладованый з [$2] є доступный на [[:{{ns:file}}:$1]]',
+'upload-failure-subj' => 'Проблем з наладованём',
+'upload-failure-msg' => 'У Ð²Ð°Ð¼Ð¸ Ð½аладованого файлу выник проблем  з [$2]::
 
 $1',
-'upload-warning-subj' => 'Ð\9fозÑ\96Ñ\80Ñ\8c Ðº Ð·аладованю',
-'upload-warning-msg' => 'Ð\9fÑ\96д Ñ\87аÑ\81 Ð²Ð°Ñ\88ого Ð·Ð°Ð»Ð°Ð´Ð¾Ð²Ð¾Ð²Ð°Ð½Ñ\8f Ñ\84айлÑ\83 [$2] Ñ\81Ñ\8f Ð¿Ñ\80иÑ\82Ñ\80аÑ\84ив Ð¿Ñ\80облем. Ð\9aÑ\96дÑ\8c Ð³Ð¾ Ñ\85оÑ\87еÑ\82е Ð²Ñ\8bÑ\80Ñ\97Ñ\88Ñ\8bÑ\82и, Ð¼Ð¾Ð¶ÐµÑ\82е Ñ\81Ñ\8f Ð²ÐµÑ\80нÑ\83Ñ\82и Ð´Ð¾  [[Special:Upload/stash/$1|Ñ\84оÑ\80мÑ\83лаÑ\80Ñ\8f Ð·аладовованя]].',
+'upload-warning-subj' => 'Ð\9fозÑ\96Ñ\80Ñ\8c Ðº Ð½аладованю',
+'upload-warning-msg' => 'Ð\9fÑ\96д Ñ\87аÑ\81 Ð²Ð°Ñ\88ого Ð½Ð°Ð»Ð°Ð´Ð¾Ð²Ð¾Ð²Ð°Ð½Ñ\8f Ñ\84айлÑ\83 [$2] Ñ\81Ñ\8f Ð¿Ñ\80иÑ\82Ñ\80аÑ\84ив Ð¿Ñ\80облем. Ð\9aÑ\96дÑ\8c Ð³Ð¾ Ñ\85оÑ\87еÑ\82е Ð²Ñ\8bÑ\80Ñ\97Ñ\88Ñ\8bÑ\82и, Ð¼Ð¾Ð¶ÐµÑ\82е Ñ\81Ñ\8f Ð²ÐµÑ\80нÑ\83Ñ\82и Ð´Ð¾  [[Special:Upload/stash/$1|Ñ\84оÑ\80мÑ\83лаÑ\80Ñ\8f Ð½аладовованя]].',
 
 'upload-proto-error' => 'Неплатный протокол',
-'upload-proto-error-text' => 'Ð\97аладованя одлеглого файлу пожадує зазначіня URLs з початком <code>http://</code> або <code>ftp://</code>.',
+'upload-proto-error-text' => 'Ð\9dаладованя одлеглого файлу пожадує зазначіня URLs з початком <code>http://</code> або <code>ftp://</code>.',
 'upload-file-error' => 'Інтерна хыба',
 'upload-file-error-text' => 'При спробі створити дочасный файл настала внутрїшня хыба на серверї.
 Просиме контактуйте  [[Special:ListUsers/sysop|адміністратора]].',
 'upload-misc-error' => 'Незнама хыба',
-'upload-misc-error-text' => 'Ð\9dезнана Ñ\85Ñ\8bба Ñ\81Ñ\8f Ñ\82Ñ\80аÑ\84ила Ð¿Ñ\96д Ñ\87аÑ\81 Ð·аладованя файлу. Перевірте ці є  URL правилна і приступна і спробуйте то знову. Кідь ся хыба обявить знову, контактуйте [[Special:ListUsers/sysop|адміністратора]]. сістемы.',
+'upload-misc-error-text' => 'Ð\9dезнана Ñ\85Ñ\8bба Ñ\81Ñ\8f Ñ\82Ñ\80аÑ\84ила Ð¿Ñ\96д Ñ\87аÑ\81 Ð½аладованя файлу. Перевірте ці є  URL правилна і приступна і спробуйте то знову. Кідь ся хыба обявить знову, контактуйте [[Special:ListUsers/sysop|адміністратора]]. сістемы.',
 'upload-too-many-redirects' => 'URL обсягує барз велё напрямлінь',
 'upload-unknown-size' => 'Незнамый розмір',
 'upload-http-error' => 'Стала ся хыба HTTP: $1',
-'upload-copy-upload-invalid-domain' => 'Ð\97аладовованÑ\8f ÐºÐ¾Ð¿Ñ\96Ñ\80ованÑ\91м Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ðµ з той домены.',
+'upload-copy-upload-invalid-domain' => 'Ð\9dаладовованÑ\8f ÐºÐ¾Ð¿Ñ\96Ñ\80ованÑ\91м Ð½ÐµÐ³Ð¾Ð´Ð½Ð¾ з той домены.',
 
 # File backend
 'backend-fail-stream' => 'Не вдало ся транслёвати файл $1.',
@@ -1584,8 +1658,8 @@ $1',
 Не годен перевірити ёго беспеку.',
 
 # Special:UploadStash
-'uploadstash' => 'СкÑ\80Ñ\8bÑ\88а Ð·аладованых файлів',
-'uploadstash-summary' => 'ТоÑ\82а Ñ\81Ñ\82оÑ\80Ñ\96нка Ð´Ð¾Ð´Ð°Ð²Ð°Ñ\82Ñ\8c Ð¿Ñ\80иÑ\81Ñ\82Ñ\83п ÐºÑ\83 Ñ\84айлом ÐºÐ¾Ñ\82Ñ\80Ñ\8b Ñ\81Ñ\83Ñ\82Ñ\8c Ð·Ð°Ð»Ð°Ð´Ð¾Ð²Ð°Ð½Ñ\8b (або Ð»Ð°Ð´Ð¾Ð²Ð°Ð½Ñ\8f Ñ\96Ñ\89Ñ\96 Ð½Ðµ Ñ\81кÑ\96нÑ\87Ñ\96ло) Ð°Ð»Ðµ Ñ\96Ñ\89Ñ\96 Ð½Ðµ Ð±Ñ\8bли Ð¾Ð¿Ñ\83влÑ\96кованÑ\8b Ð½Ð° Ð²Ñ\96кÑ\96. Ð¢Ð¾Ñ\82Ñ\8b Ñ\84айлÑ\8b Ð½Ðµ Ð²Ð¸Ð´Ð¸Ñ\82Ñ\8c Ð½Ð¸Ñ\85Ñ\82о Ð¾ÐºÑ\80ем Ñ\85оÑ\81новаÑ\82елÑ\8f Ñ\88Ñ\82о Ñ\97Ñ\85 Ð·аладовав.',
+'uploadstash' => 'СкÑ\80Ñ\8bÑ\88а Ð½аладованых файлів',
+'uploadstash-summary' => 'ТоÑ\82а Ñ\81Ñ\82оÑ\80Ñ\96нка Ð´Ð¾Ð´Ð°Ð²Ð°Ñ\82Ñ\8c Ð¿Ñ\80иÑ\81Ñ\82Ñ\83п ÐºÑ\83 Ñ\84айлом ÐºÐ¾Ñ\82Ñ\80Ñ\8b Ñ\81Ñ\83Ñ\82Ñ\8c Ð½Ð°Ð»Ð°Ð´Ð¾Ð²Ð°Ð½Ñ\8b (або Ð»Ð°Ð´Ð¾Ð²Ð°Ð½Ñ\8f Ñ\96Ñ\89Ñ\96 Ð½Ðµ Ñ\81кÑ\96нÑ\87Ñ\96ло) Ð°Ð»Ðµ Ñ\96Ñ\89Ñ\96 Ð½Ðµ Ð±Ñ\8bли Ð¾Ð¿Ñ\83влÑ\96кованÑ\8b Ð½Ð° Ð²Ñ\96кÑ\96. Ð¢Ð¾Ñ\82Ñ\8b Ñ\84айлÑ\8b Ð½Ðµ Ð²Ð¸Ð´Ð¸Ñ\82Ñ\8c Ð½Ð¸Ñ\85Ñ\82о Ð¾ÐºÑ\80ем Ñ\85оÑ\81новаÑ\82елÑ\8f Ñ\88Ñ\82о Ñ\97Ñ\85 Ð½аладовав.',
 'uploadstash-clear' => 'Змазати схованы файлы',
 'uploadstash-nofiles' => 'Не маєте жадны схованы файлы.',
 'uploadstash-badtoken' => 'Выконаня той дїї не было успішне, може зато, же вашы повірїня про едітованя скінчіли. Попробуйте знову.',
@@ -1598,7 +1672,7 @@ $1',
 'img-auth-nopathinfo' => 'Ваш сервер не є наштелёваный так, жебы давав тоту інформацію.
 Може фунґує помочов CGI і img_auth на нім не може фунґовати.
 Посмотьте https://www.mediawiki.org/wiki/Manual:Image_Authorization.',
-'img-auth-notindir' => 'Ð\9fожадована Ñ\81Ñ\82ежка Ð½Ðµ Ñ\94 Ð² ÐºÐ¾Ð½Ñ\84Ñ\96Ò\91Ñ\83Ñ\80ованÑ\96м Ð°Ð´Ñ\80еÑ\81аÑ\80Ñ\8e Ñ\96з Ð·аладованыма файлами.',
+'img-auth-notindir' => 'Ð\9fожадована Ñ\81Ñ\82ежка Ð½Ðµ Ñ\94 Ð² ÐºÐ¾Ð½Ñ\84Ñ\96Ò\91Ñ\83Ñ\80ованÑ\96м Ð°Ð´Ñ\80еÑ\81аÑ\80Ñ\8e Ñ\96з Ð½аладованыма файлами.',
 'img-auth-badtitle' => 'З „$1“  ся не дасть створити платна назва сторінкы.',
 'img-auth-nologinnWL' => 'Не сьте приголошеный і „$1“ не є на білім списку.',
 'img-auth-nofile' => 'Файл «$1» не екзістує.',
@@ -1624,7 +1698,7 @@ $1',
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
 'upload-curl-error6' => 'Не вдало ся досягнути URL.',
 'upload-curl-error6-text' => 'Із зазначеной URL ся не дасть чітати. Перевірте ці є URL правилно написана і сервер є доступный.',
-'upload-curl-error28' => 'Час выдїленый на заладованя уж вычерьпаный',
+'upload-curl-error28' => 'Час становленый на наладованя уж вычерьпаный',
 'upload-curl-error28-text' => 'Сервер довго не одповідать. Перевірте ці є доступный і кус почекайте і спробуйте то знову.',
 
 'license' => 'Ліценцованя:',
@@ -1635,8 +1709,8 @@ $1',
 'upload_source_file' => ' (файл на вашім компютерї)',
 
 # Special:ListFiles
-'listfiles-summary' => 'ТоÑ\82а Ñ\88пеÑ\86Ñ\96ална Ñ\81Ñ\82оÑ\80Ñ\96нка Ð·Ð¾Ð±Ñ\80ажÑ\83Ñ\94 Ð²Ñ\88Ñ\8bÑ\82кÑ\8b Ð·аладованы файлы.
\9fÑ\80и Ñ\84Ñ\96лÑ\82Ñ\80ованÑ\8e Ð·Ð° Ñ\85оÑ\81новаÑ\82елÑ\91м, Ð·Ð¾Ð±Ñ\80ажÑ\83Ñ\8eÑ\82Ñ\8c Ñ\81Ñ\8f Ð»ÐµÐ¼ Ñ\84айлÑ\8b, Ñ\83 ÐºÐ¾Ñ\82Ñ\80Ñ\8bÑ\85 Ñ\85оÑ\81новаÑ\82елÑ\8c Ð·аладовав актуалну верзію.',
+'listfiles-summary' => 'ТоÑ\82а Ñ\88пеÑ\86Ñ\96ална Ñ\81Ñ\82оÑ\80Ñ\96нка Ð·Ð¾Ð±Ñ\80ажÑ\83Ñ\94 Ð²Ñ\88Ñ\8bÑ\82кÑ\8b Ð½аладованы файлы.
\9fÑ\80и Ñ\84Ñ\96лÑ\82Ñ\80ованÑ\8e Ð·Ð° Ñ\85оÑ\81новаÑ\82елÑ\91м, Ð·Ð¾Ð±Ñ\80ажÑ\83Ñ\8eÑ\82Ñ\8c Ñ\81Ñ\8f Ð»ÐµÐ¼ Ñ\84айлÑ\8b, Ñ\83 ÐºÐ¾Ñ\82Ñ\80Ñ\8bÑ\85 Ñ\85оÑ\81новаÑ\82елÑ\8c Ð½аладовав актуалну верзію.',
 'listfiles_search_for' => 'Глядати файл по назві:',
 'imgfile' => 'файл',
 'listfiles' => 'Список файлів',
@@ -1684,8 +1758,8 @@ $1',
 'sharedupload-desc-create' => 'Гевсесь файл походить з {{grammar:2sg|$1}} тай можуть го хосновати другы проєкты.
 Може бы сьте хотїли правити [$2 тамтушню сторінку з пописом файлу].',
 'filepage-nofile' => 'Не екзістує файл з таков назвов',
-'filepage-nofile-link' => 'Файл Ð· Ñ\82аков Ð½Ð°Ð·Ð²Ð¾Ð² Ð½Ðµ ÐµÐºÐ·Ñ\96Ñ\81Ñ\82Ñ\83Ñ\94, Ð°Ð»Ðµ Ð¼Ð¾Ð¶ÐµÑ\82е [$1 Ð³Ð¾ Ð·аладовати].',
-'uploadnewversion-linktext' => 'Ð\97аладовати нову верзію того файлу',
+'filepage-nofile-link' => 'Файл Ð· Ñ\82аков Ð½Ð°Ð·Ð²Ð¾Ð² Ð½Ðµ ÐµÐºÐ·Ñ\96Ñ\81Ñ\82Ñ\83Ñ\94, Ð°Ð»Ðµ Ð¼Ð¾Ð¶ÐµÑ\82е [$1 Ð³Ð¾ Ð½аладовати].',
+'uploadnewversion-linktext' => 'Ð\9dаладовати нову верзію того файлу',
 'shared-repo-from' => 'з $1',
 'shared-repo' => 'здїляного усховіща',
 
@@ -1755,7 +1829,7 @@ $1',
 'statistics-articles' => 'Обсяговы сторінкы',
 'statistics-pages' => 'Сторінкы',
 'statistics-pages-desc' => 'Вшыткы сторінкы на вікі враховано діскузій, напрямлїня ітд.',
-'statistics-files' => 'Ð\97аладованы файлы',
+'statistics-files' => 'Ð\9dаладованы файлы',
 'statistics-edits' => 'Чісло едітованя од основаня вікі {{SITENAME}}',
 'statistics-edits-average' => 'Середнє чісло едітовань на сторінку',
 'statistics-views-total' => 'Вшыткых переглядів',
@@ -2135,7 +2209,7 @@ $UNWATCHURL
 'protectedarticle' => 'замыкать "[[$1]]"',
 'modifiedarticleprotection' => 'зміненa рівень охраны сторінкы «[[$1]]»',
 'unprotectedarticle' => 'знята охрана з "[[$1]]"',
-'movedarticleprotection' => 'наставлїня замків пересунуто з „[[$2]]“ на „[[$1]]“',
+'movedarticleprotection' => 'наставлїня замків перенесено з „[[$2]]“ на „[[$1]]“',
 'protect-title' => 'Зміна уровнї охраны сторінкы „$1“',
 'protect-title-notallowed' => 'Указати уровни охраны сторінкы „$1“',
 'prot_1movedto2' => '«[[$1]]» переменована на «[[$2]]»',
@@ -2186,7 +2260,7 @@ $UNWATCHURL
 'restriction-edit' => 'Едітованя',
 'restriction-move' => 'Переменовати',
 'restriction-create' => 'Вытвориня',
-'restriction-upload' => 'Ð\97аладовованя файлів',
+'restriction-upload' => 'Ð\9dаладовованя файлів',
 
 # Restriction levels
 'restriction-level-sysop' => 'замкнуте',
@@ -2194,7 +2268,7 @@ $UNWATCHURL
 'restriction-level-all' => 'хоцьяка рівень',
 
 # Undelete
-'undelete' => 'Ð\97мазаны сторінкы',
+'undelete' => 'Ð\92Ñ\8bлÑ\83Ñ\87ены сторінкы',
 'undeletepage' => 'Посмотрити собі і обновити змазану сторінку',
 'undeletepagetitle' => "'''Ниже суть змазаны верзії сторінкы [[:$1]]'''.",
 'viewdeletedpage' => 'Зобразити змазаны сторінкы',
@@ -2264,7 +2338,7 @@ $1',
 'sp-contributions-newbies-title' => 'Приспівкы новый хоснователїв',
 'sp-contributions-blocklog' => 'Лоґ блокованя',
 'sp-contributions-deleted' => 'вымазаны приспевкы хоснователя',
-'sp-contributions-uploads' => 'заладованы файлы',
+'sp-contributions-uploads' => 'наладованы файлы',
 'sp-contributions-logs' => 'лоґы',
 'sp-contributions-talk' => 'діскузія',
 'sp-contributions-userrights' => 'Справа хосновательскых прав',
@@ -2357,7 +2431,7 @@ $1',
 'blocklist-addressblocks' => 'Сховати блокованя єдной IP адресы',
 'blocklist-rangeblocks' => 'Скрыти блокованя россягів',
 'blocklist-timestamp' => 'Часова значка',
-'blocklist-target' => 'ЦÑ\96ль',
+'blocklist-target' => 'ЦÑ\97ль',
 'blocklist-expiry' => 'Кінчіть',
 'blocklist-by' => 'Блокуючій адмін',
 'blocklist-params' => 'Параметры блокованя',
@@ -2474,11 +2548,11 @@ $1',
 
 В тых припадох будете мусити переменовати ці злучіти сторінкы ручнї кідь желаєте єй переменованя.",
 'movearticle' => 'Переменовати сторінку',
-'moveuserpage-warning' => "'''Увага:''' Рихтуєте ся переменовати сторінку хоснователя. Усвідомте собі, же буде пересунута лем тота сторінка, а хоснователь  ''не буде'' переменованый.",
+'moveuserpage-warning' => "'''Увага:''' Рихтуєте ся переменовати сторінку хоснователя. Усвідомте собі, же буде переменована лем тота сторінка, а хоснователь  ''не буде'' переменованый.",
 'movenologin' => 'Не сьте приголошеный(а)!',
 'movenologintext' => 'Про переменованя сторінок ся мусите [[Special:UserLogin|приголосити]].',
 'movenotallowed' => 'Не маєте права переменовати сторінкы.',
-'movenotallowedfile' => 'Не маєте права пересувати файлы.',
+'movenotallowedfile' => 'Не маєте права переменовати файлы.',
 'cant-move-user-page' => 'Не маєте права переменовати сторінкы хоснователїв.',
 'cant-move-to-user-page' => 'Не маєте права переменовати сторінку на сторінку хоснователя (окрем підсторінкы сторінкы хоснователя)',
 'newtitle' => 'Нова назва:',
@@ -2510,7 +2584,7 @@ $1',
 'delete_and_move' => 'Змазати і переменовати',
 'delete_and_move_text' => '==Є треба змазаня==
 
-ЦÑ\96лÑ\91ва Ñ\81Ñ\82оÑ\80Ñ\96нка â\80\9e[[:$1]]â\80\9c Ñ\83ж ÐµÐºÐ·Ñ\96Ñ\81Ñ\82Ñ\83Ñ\94. Ð\96елаÑ\82е Ñ\81обÑ\96 Ñ\94й Ð·Ð¼Ð°Ð·Ð°Ñ\82и Ð¿Ñ\80о Ñ\83волнÑ\97нÑ\8f Ð¼Ñ\96Ñ\81Ñ\86Ñ\8f Ð¿Ñ\80о Ð¿ÐµÑ\80еÑ\81Ñ\83н?',
+ЦÑ\96лÑ\91ва Ñ\81Ñ\82оÑ\80Ñ\96нка â\80\9e[[:$1]]â\80\9c Ñ\83ж ÐµÐºÐ·Ñ\96Ñ\81Ñ\82Ñ\83Ñ\94. Ð\96елаÑ\82е Ñ\81обÑ\96 Ñ\94й Ð·Ð¼Ð°Ð·Ð°Ñ\82и Ð¿Ñ\80о Ñ\83волнÑ\97нÑ\8f Ð¼Ñ\96Ñ\81Ñ\86Ñ\8f Ð½Ð° Ð¿ÐµÑ\80еменованÑ\8f?',
 'delete_and_move_confirm' => 'Гей, змазати сторінку',
 'delete_and_move_reason' => 'Змазане про уможнїня переменованя з „[[$1]]“',
 'selfmove' => 'Початочна і нова назва суть ровнакы;
@@ -2610,16 +2684,16 @@ $1',
 'importnotext' => 'Порожнїй або жаден текст',
 'importsuccess' => 'Імпорт сконченый!',
 'importhistoryconflict' => 'Екзістує конфлікт міджі історіямі верзії (може тота сторінка уж была імпортована скоре)',
-'importnosources' => 'Ð\9dе Ð±Ñ\8bло Ð²Ñ\8bбÑ\80ане Ð¶Ñ\80Ñ\96дло Ñ\96мпоÑ\80Ñ\82Ñ\83 Ð¼Ñ\96джÑ\96 Ð²Ñ\96кÑ\96, Ð´Ñ\96Ñ\80екÑ\82 Ð·аладованя історії змін є выпнуте.',
-'importnofile' => 'Ð\9dе Ð±Ñ\8bв Ð·аладованый файл імпорту.',
-'importuploaderrorsize' => 'Ð\9dе Ð²Ð´Ð°Ð»Ð¾ Ñ\81Ñ\8f Ð·аладовати файл імпорту. Розмір файлу перевышує становлену меджу.',
-'importuploaderrorpartial' => 'Ð\9dе Ð²Ð´Ð°Ð»Ð¾ Ñ\81Ñ\8f Ð·Ð°Ð»Ð°Ð´Ð¾Ð²Ð°Ñ\82и Ñ\96мпоÑ\80Ñ\82нÑ\8bй Ñ\84айл. Ð¤Ð°Ð¹Ð» Ð±Ñ\8bв Ð·аладованый лем частково.',
-'importuploaderrortemp' => 'Ð\9dе Ð²Ð´Ð°Ð»Ð¾ Ñ\81Ñ\8f Ð·аладовати імпортный файл. Не є к діспозіції дочасный адресарь.',
+'importnosources' => 'Ð\9dе Ð±Ñ\8bло Ð²Ñ\8bбÑ\80ане Ð¶Ñ\80Ñ\96дло Ñ\96мпоÑ\80Ñ\82Ñ\83 Ð¼Ñ\96джÑ\96 Ð²Ñ\96кÑ\96, Ð´Ñ\96Ñ\80екÑ\82 Ð½аладованя історії змін є выпнуте.',
+'importnofile' => 'Ð\9dе Ð±Ñ\8bв Ð½аладованый файл імпорту.',
+'importuploaderrorsize' => 'Ð\9dе Ð²Ð´Ð°Ð»Ð¾ Ñ\81Ñ\8f Ð½аладовати файл імпорту. Розмір файлу перевышує становлену меджу.',
+'importuploaderrorpartial' => 'Ð\9dе Ð²Ð´Ð°Ð»Ð¾ Ñ\81Ñ\8f Ð½Ð°Ð»Ð°Ð´Ð¾Ð²Ð°Ñ\82и Ñ\96мпоÑ\80Ñ\82нÑ\8bй Ñ\84айл. Ð¤Ð°Ð¹Ð» Ð±Ñ\8bв Ð½аладованый лем частково.',
+'importuploaderrortemp' => 'Ð\9dе Ð²Ð´Ð°Ð»Ð¾ Ñ\81Ñ\8f Ð½аладовати імпортный файл. Не є к діспозіції дочасный адресарь.',
 'import-parse-failure' => 'Хыба під час імпорту XML',
 'import-noarticle' => 'Не є сторінка про імпорт!',
 'import-nonewrevisions' => 'Вшыткы верзії уж были скоре імпортованы',
 'xml-error-string' => '$1 на рядку $2, стовпець $3 (байт $4): $5',
-'import-upload' => 'Ð\97аладовати XML дата',
+'import-upload' => 'Ð\9dаладовати XML дата',
 'import-token-mismatch' => 'Стратили ся дата релації. Спробуйте то знову.',
 'import-invalid-interwiki' => 'Із зазначеной вікі ся не дасть імпортовати.',
 'import-error-edit' => 'Сторінка „$1“ ся не наімпортовала, бо не мате право єй едітовати.',
@@ -2631,7 +2705,7 @@ $1',
 # Import log
 'importlogpage' => 'Книга імпортів',
 'importlogpagetext' => 'На тій сторінцї ся зображують адміністраторскы імпорты сторінок враховано едітовань з іншых вікі.',
-'import-logentry-upload' => 'Ñ\96мпоÑ\80Ñ\82овав [[$1]] Ð·аладованём файлу',
+'import-logentry-upload' => 'Ñ\96мпоÑ\80Ñ\82овав [[$1]] Ð½аладованём файлу',
 'import-logentry-upload-detail' => '$1 {{PLURAL:$1|ревізія|ревізії|ревізій}}',
 'import-logentry-interwiki' => 'міджівікі імпорт $1',
 'import-logentry-interwiki-detail' => '$1 {{PLURAL:$1|ревізія|ревізії|ревізій}} з $2',
@@ -2688,7 +2762,7 @@ $1',
 'tooltip-feed-atom' => 'Atom канал гевсёй сторінкы',
 'tooltip-t-contributions' => 'Перегляд приспевків того хоснователя',
 'tooltip-t-emailuser' => 'Послати імейл тому хоснователёви',
-'tooltip-t-upload' => 'Ð\97аладовати файлы',
+'tooltip-t-upload' => 'Ð\9dаладовати файлы',
 'tooltip-t-specialpages' => 'Список вшыткых шпеціалных сторінок',
 'tooltip-t-print' => 'Верзія той сторінкы до друку',
 'tooltip-t-permalink' => 'Перманентный одказ на тоту верзію сторінкы',
@@ -2805,7 +2879,7 @@ $1',
 # Special:NewFiles
 'newimages' => 'Ґалерія новых файлів',
 'imagelisttext' => "Ниже є {{plural:$1|єден файл|список '''$1'''&nbsp;файлів сортованых $2|список '''$1'''&nbsp;файлів сортованых $2}}.",
-'newimages-summary' => 'Ð\9dа Ñ\82Ñ\96й Ñ\88пеÑ\86Ñ\96алнÑ\96й Ñ\81Ñ\82оÑ\80Ñ\96нÑ\86Ñ\97 Ñ\81Ñ\8f Ð·Ð¾Ð±Ñ\80ажÑ\83Ñ\8eÑ\82Ñ\8c Ð¾Ñ\81Ñ\82аÑ\82нÑ\97 Ð·аладованы файлы.',
+'newimages-summary' => 'Ð\9dа Ñ\82Ñ\96й Ñ\88пеÑ\86Ñ\96алнÑ\96й Ñ\81Ñ\82оÑ\80Ñ\96нÑ\86Ñ\97 Ñ\81Ñ\8f Ð·Ð¾Ð±Ñ\80ажÑ\83Ñ\8eÑ\82Ñ\8c Ð¾Ñ\81Ñ\82аÑ\82нÑ\97 Ð½аладованы файлы.',
 'newimages-legend' => 'Філтер',
 'newimages-label' => 'Назва файлу (або єй часть):',
 'showhidebots' => '($1 ботів)',
@@ -3359,8 +3433,8 @@ $5
 'autosumm-new' => 'Створена сторінка: $1',
 
 # Live preview
-'livepreview-loading' => 'Ð\97аладовованя...',
-'livepreview-ready' => 'Ð\97аладовованя… Готово!',
+'livepreview-loading' => 'Ð\9dаладовованя...',
+'livepreview-ready' => 'Ð\9dаладовованя… Готово!',
 'livepreview-failed' => 'Швыдкый нагляд не є доступный! Спробуйте хосновати звычайный нагляд.',
 'livepreview-error' => 'Не успішне споїня: $1 "$2". Хоснуйте звычайный нагляд.',
 
@@ -3553,7 +3627,7 @@ MediaWiki є дістрібуована в надїї, же буде хосно
 'revdelete-uname-unhid' => 'імя хоснователя одкрыте',
 'revdelete-restricted' => 'приданы обмеджіня про адміністраторів',
 'revdelete-unrestricted' => 'зняты обмеджіня про адміністраторів',
-'logentry-move-move' => '$1 пересунув сторінку $3 на $4',
+'logentry-move-move' => '$1 переменовав сторінку $3 на $4',
 'logentry-move-move-noredirect' => '$1 переменовав сторінку $3 на $4 без створїня напрямлїня',
 'logentry-move-move_redir' => '$1 переменовав сторінку $3 на $4 з вычерянём напрямлїнём',
 'logentry-move-move_redir-noredirect' => '$1 переменовав сторінку $3 на $4 місце напрямлїня без створїня напрямлїня',
@@ -3582,19 +3656,19 @@ MediaWiki є дістрібуована в надїї, же буде хосно
 'feedback-bugnew' => 'Перевірив(а) єм то. Хочу повідомити нову хыбу.',
 
 # API errors
-'api-error-badaccess-groups' => 'Ð\9dе Ð¼Ð°Ñ\82е Ð´Ð¾Ð·Ð²Ð¾Ð»ÐµÐ½Ð¾ Ð·аладововати файлы на тоту вікі.',
+'api-error-badaccess-groups' => 'Ð\9dе Ð¼Ð°Ñ\82е Ð´Ð¾Ð·Ð²Ð¾Ð»ÐµÐ½Ð¾ Ð½аладововати файлы на тоту вікі.',
 'api-error-badtoken' => 'Внутрїшня хыба: планый знак.',
-'api-error-copyuploaddisabled' => 'Ð\97аладовованя з URL є на тім сервері заказане.',
+'api-error-copyuploaddisabled' => 'Ð\9dаладовованя з URL є на тім сервері заказане.',
 'api-error-duplicate' => 'На тій вікі уж {{PLURAL:$1|екзістує [$2 другый файл]|екзістують [$2 іншы файлы]}} з такым самым обсягом.',
 'api-error-duplicate-archive' => '{{PLURAL:$1|быв [$2 другый файл]|были [$2 даякы другы файлы]}} з такым самым обсягом уж гев оперед {{PLURAL:$1|быв|были}}, але {{PLURAL:$1|быв змазаный|были змазаны}}.',
 'api-error-duplicate-archive-popup-title' => '{{PLURAL:$1|дупліцітный файл, якый быв|дупліцітны файл, як были}} змазаны',
 'api-error-duplicate-popup-title' => 'Дупліцітны {{PLURAL:$1|файл|файлы}}',
-'api-error-empty-file' => 'Ð\97аладованый файл є порожнїй.',
+'api-error-empty-file' => 'Ð\9dаладованый файл є порожнїй.',
 'api-error-emptypage' => 'Створїня новых, порожнїх сторінк неслободно.',
 'api-error-fetchfileerror' => 'Внутрїшня хыба: трафила ся хыба під час обтриманя файлу.',
 'api-error-fileexists-forbidden' => 'Файл з назвов „$1“ уж екзістує тай не годен го переписати.',
 'api-error-fileexists-shared-forbidden' => 'файл з назвов „$1“ уж екзістує в сполочнім усховищу тай не годен го переписати.',
-'api-error-file-too-large' => 'Ð\97аладованый файл є барз великый.',
+'api-error-file-too-large' => 'Ð\9dаладованый файл є барз великый.',
 'api-error-filename-tooshort' => 'Назва файлу є барз курта.',
 'api-error-filetype-banned' => 'Тот тіп файлу є заказаный.',
 'api-error-filetype-banned-type' => '$1 {{PLURAL:$4|є недозволеный формат файлів|суть недозволены форматы файлів}}. {{PLURAL:$3|Дозволеный формат фалів є|Дозволены форматы файлів суть}} $2.',
@@ -3602,21 +3676,21 @@ MediaWiki є дістрібуована в надїї, же буде хосно
 'api-error-hookaborted' => 'Пожадована вами зміна была одмітнута дакотрым росшырінём.',
 'api-error-http' => 'Внутрїшня хыба: не вдало ся припоїти к серверу.',
 'api-error-illegal-filename' => 'Тота назва файлу не є дозволена.',
-'api-error-internal-error' => 'Ð\92нÑ\83Ñ\82Ñ\80Ñ\97Ñ\88нÑ\8f Ñ\85Ñ\8bба: Ð¿Ñ\80иÑ\82Ñ\80аÑ\84ила Ñ\81Ñ\8f Ñ\85Ñ\8bба Ð¿Ñ\96д Ñ\87аÑ\81 Ñ\81пÑ\80аÑ\86ованÑ\8f Ð²Ð°Ñ\88ого Ð·аладованого файлу.',
+'api-error-internal-error' => 'Ð\92нÑ\83Ñ\82Ñ\80Ñ\97Ñ\88нÑ\8f Ñ\85Ñ\8bба: Ð¿Ñ\80иÑ\82Ñ\80аÑ\84ила Ñ\81Ñ\8f Ñ\85Ñ\8bба Ð¿Ñ\96д Ñ\87аÑ\81 Ñ\81пÑ\80аÑ\86ованÑ\8f Ð²Ð°Ñ\88ого Ð½аладованого файлу.',
 'api-error-invalid-file-key' => 'Внутрїшня хыба: файл ся не нашов в дочаснім усховіщі.',
 'api-error-missingparam' => 'Внутрїшня хыба: хыбують параметры пожадавкы.',
 'api-error-missingresult' => 'Внутрїшня хыба: не годен становити, ці копірованя было успішне.',
-'api-error-mustbeloggedin' => 'Ð\96ебÑ\8b Ð·аладовати файлы, мусите быти приголошеный.',
+'api-error-mustbeloggedin' => 'Ð\96ебÑ\8b Ð½аладовати файлы, мусите быти приголошеный.',
 'api-error-mustbeposted' => 'Внутрїшня хыба: пожадавка мусить быти через HTTP POST.',
-'api-error-noimageinfo' => 'Ð\97аладованÑ\8f Ð±Ñ\8bло Ñ\83Ñ\81пÑ\96Ñ\88не, Ð°Ð»Ðµ Ñ\81еÑ\80веÑ\80 Ð½Ðµ Ð´Ð¾Ð´Ð°Ð² Ð¾ Ñ\84айлÑ\97 Ð¶Ð°Ð´Ð½ы інформації.',
-'api-error-nomodule' => 'Ð\92нÑ\83Ñ\82Ñ\80Ñ\97Ñ\88нÑ\8f Ñ\85Ñ\8bба: Ð½Ðµ Ñ\94 Ð½Ð°Ñ\81Ñ\82авленÑ\8bй Ð¼Ð¾Ð´Ñ\83л Ð·аладовованя.',
+'api-error-noimageinfo' => 'Ð\9dаладованÑ\8f Ð±Ñ\8bло Ñ\83Ñ\81пÑ\96Ñ\88не, Ð°Ð»Ðµ Ñ\81еÑ\80веÑ\80 Ð½Ðµ Ð´Ð¾Ð´Ð°Ð² Ð¾ Ñ\84айлÑ\97 Ð½Ð¸Ñ\8fкы інформації.',
+'api-error-nomodule' => 'Ð\92нÑ\83Ñ\82Ñ\80Ñ\97Ñ\88нÑ\8f Ñ\85Ñ\8bба: Ð½Ðµ Ñ\94 Ð½Ð°Ñ\81Ñ\82авленÑ\8bй Ð¼Ð¾Ð´Ñ\83л Ð½аладовованя.',
 'api-error-ok-but-empty' => 'Внутрїшня хыба: сервер не одповідать.',
 'api-error-overwrite' => 'Не є дозволене переписати екзістуючій файл.',
 'api-error-stashfailed' => 'Внутрїшня хыба: серверу ся не вдало уложыти дочасный файл.',
 'api-error-timeout' => 'Сервер не одповідав в очекаванім часї.',
 'api-error-unclassified' => 'Трафила ся незнама хыба.',
 'api-error-unknown-code' => 'Незнама хыба: „$1“',
-'api-error-unknown-error' => 'Ð\92нÑ\83Ñ\82Ñ\80Ñ\97Ñ\88нÑ\8f Ñ\85Ñ\8bба: Ñ\82Ñ\80аÑ\84ила Ñ\81Ñ\8f Ñ\85Ñ\8bба Ð¿Ñ\80и Ñ\81пÑ\80обÑ\96 Ð¾ Ð·аладованя файлу.',
+'api-error-unknown-error' => 'Ð\92нÑ\83Ñ\82Ñ\80Ñ\97Ñ\88нÑ\8f Ñ\85Ñ\8bба: Ñ\82Ñ\80аÑ\84ила Ñ\81Ñ\8f Ñ\85Ñ\8bба Ð¿Ñ\80и Ñ\81пÑ\80обÑ\96 Ð¾ Ð½аладованя файлу.',
 'api-error-unknown-warning' => 'Незнаме варованя: $1',
 'api-error-unknownerror' => 'Незнама хыба: „$1“',
 'api-error-uploaddisabled' => 'Начітаваня файлів є на тій вікі выпнуте.',
index deb7dee..8ffb44f 100644 (file)
@@ -172,107 +172,107 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#पुनर्निदेशन', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__नैवअनुक्रमणी__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__नैवसंक्रमणका__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__अनुक्रमणीसचते__', '__FORCETOC__' ),
-       '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', 'अद्यदिवसे२', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'अद्यदिवसेनाम', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'अद्यवर्ष', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'सद्यसमय', 'CURRENTTIME' ),
-       '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', 'स्थानिकदिवसे२', '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' ),
-       'numberofusers'           => array( '1', 'योजकस्यसङ्ख्या', 'NUMBEROFUSERS' ),
-       'numberofedits'           => array( '1', 'सम्पादनसङ्ख्या', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'दृष्टिसङ्ख्या', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'पृष्ठनाम', 'PAGENAME' ),
-       'namespace'               => array( '1', 'नामविश्व', 'NAMESPACE' ),
-       'talkspace'               => array( '1', 'व्यासपिठ', 'TALKSPACE' ),
-       'subjectspace'            => array( '1', 'विषयविश्व', 'लेखविश्व', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'fullpagename'            => array( '1', 'पूर्णपृष्ठनाम', 'FULLPAGENAME' ),
-       'subpagename'             => array( '1', 'उपपृष्ठनाम', 'SUBPAGENAME' ),
-       'basepagename'            => array( '1', 'आधारपृष्ठनाम', 'BASEPAGENAME' ),
-       'talkpagename'            => array( '1', 'संवादपृष्ठनाम', 'TALKPAGENAME' ),
-       'subjectpagename'         => array( '1', 'विषयपृष्ठनाम', 'लेखपृष्ठनाम', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'msg'                     => array( '0', 'सन्देश:', 'MSG:' ),
-       'msgnw'                   => array( '0', 'नूतनसन्देश:', 'MSGNW:' ),
-       'img_thumbnail'           => array( '1', 'लघुत्तम', 'सङ्कुचितचित्र', 'अङ्गुष्ठ', 'thumbnail', 'thumb' ),
-       '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_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' ),
-       'sitename'                => array( '1', 'स्थलनाम', 'SITENAME' ),
-       'grammar'                 => array( '0', 'व्याकरण:', 'GRAMMAR:' ),
-       'notitleconvert'          => array( '0', '__नैवशिर्षकपरिवर्त__', '__नैशिप__', '__NOTITLECONVERT__', '__NOTC__' ),
-       'nocontentconvert'        => array( '0', '__नैवलेखपरिवर्त__', '__नैलेप__', '__NOCONTENTCONVERT__', '__NOCC__' ),
-       'currentweek'             => array( '1', 'अद्यसप्ताह', 'CURRENTWEEK' ),
-       'localweek'               => array( '1', 'स्थानिकसप्ताह', 'LOCALWEEK' ),
-       'revisionid'              => array( '1', 'आवृत्तीक्रमांक', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'आवृत्तीदिवसे', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'आवृत्तीदिवसे२', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'आवृत्तीमासे', 'REVISIONMONTH' ),
-       'revisionyear'            => array( '1', 'आवृत्तीवर्षे', 'REVISIONYEAR' ),
-       'revisiontimestamp'       => array( '1', 'आवृत्तीसमयमुद्रा', 'REVISIONTIMESTAMP' ),
-       'plural'                  => array( '0', 'अनेकवचन:', 'PLURAL:' ),
-       'displaytitle'            => array( '1', 'प्रदर्शनशीर्षक', 'उपाधिदर्शन', 'DISPLAYTITLE' ),
-       'newsectionlink'          => array( '1', '__नूतनविभागसम्बद्धं__', '__NEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', 'अद्यआवृत्ती', 'CURRENTVERSION' ),
-       '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' ),
-       '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__' ),
-       'numberingroup'           => array( '1', 'गणानामसंख्या', 'गणसंख्या', 'NUMBERINGROUP', 'NUMINGROUP' ),
-       'staticredirect'          => array( '1', '__अनित्यपुनर्निदेशन__', '__STATICREDIRECT__' ),
-       'protectionlevel'         => array( '1', 'रक्षास्तर', 'PROTECTIONLEVEL' ),
+       'redirect'                  => array( '0', '#पुनर्निदेशन', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__नैवअनुक्रमणी__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__नैवसंक्रमणका__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__अनुक्रमणीसचते__', '__FORCETOC__' ),
+       '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', 'अद्यदिवसे२', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'अद्यदिवसेनाम', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'अद्यवर्ष', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'सद्यसमय', 'CURRENTTIME' ),
+       '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', 'स्थानिकदिवसे२', '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' ),
+       'numberofusers'             => array( '1', 'योजकस्यसङ्ख्या', 'NUMBEROFUSERS' ),
+       'numberofedits'             => array( '1', 'सम्पादनसङ्ख्या', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'दृष्टिसङ्ख्या', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'पृष्ठनाम', 'PAGENAME' ),
+       'namespace'                 => array( '1', 'नामविश्व', 'NAMESPACE' ),
+       'talkspace'                 => array( '1', 'व्यासपिठ', 'TALKSPACE' ),
+       'subjectspace'              => array( '1', 'विषयविश्व', 'लेखविश्व', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'fullpagename'              => array( '1', 'पूर्णपृष्ठनाम', 'FULLPAGENAME' ),
+       'subpagename'               => array( '1', 'उपपृष्ठनाम', 'SUBPAGENAME' ),
+       'basepagename'              => array( '1', 'आधारपृष्ठनाम', 'BASEPAGENAME' ),
+       'talkpagename'              => array( '1', 'संवादपृष्ठनाम', 'TALKPAGENAME' ),
+       'subjectpagename'           => array( '1', 'विषयपृष्ठनाम', 'लेखपृष्ठनाम', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'msg'                       => array( '0', 'सन्देश:', 'MSG:' ),
+       'msgnw'                     => array( '0', 'नूतनसन्देश:', 'MSGNW:' ),
+       'img_thumbnail'             => array( '1', 'लघुत्तम', 'सङ्कुचितचित्र', 'अङ्गुष्ठ', 'thumbnail', 'thumb' ),
+       '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_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' ),
+       'sitename'                  => array( '1', 'स्थलनाम', 'SITENAME' ),
+       'grammar'                   => array( '0', 'व्याकरण:', 'GRAMMAR:' ),
+       'notitleconvert'            => array( '0', '__नैवशिर्षकपरिवर्त__', '__नैशिप__', '__NOTITLECONVERT__', '__NOTC__' ),
+       'nocontentconvert'          => array( '0', '__नैवलेखपरिवर्त__', '__नैलेप__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+       'currentweek'               => array( '1', 'अद्यसप्ताह', 'CURRENTWEEK' ),
+       'localweek'                 => array( '1', 'स्थानिकसप्ताह', 'LOCALWEEK' ),
+       'revisionid'                => array( '1', 'आवृत्तीक्रमांक', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'आवृत्तीदिवसे', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'आवृत्तीदिवसे२', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'आवृत्तीमासे', 'REVISIONMONTH' ),
+       'revisionyear'              => array( '1', 'आवृत्तीवर्षे', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'आवृत्तीसमयमुद्रा', 'REVISIONTIMESTAMP' ),
+       'plural'                    => array( '0', 'अनेकवचन:', 'PLURAL:' ),
+       'displaytitle'              => array( '1', 'प्रदर्शनशीर्षक', 'उपाधिदर्शन', 'DISPLAYTITLE' ),
+       'newsectionlink'            => array( '1', '__नूतनविभागसम्बद्धं__', '__NEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'अद्यआवृत्ती', 'CURRENTVERSION' ),
+       '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' ),
+       '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__' ),
+       'numberingroup'             => array( '1', 'गणानामसंख्या', 'गणसंख्या', 'NUMBERINGROUP', 'NUMINGROUP' ),
+       'staticredirect'            => array( '1', '__अनित्यपुनर्निदेशन__', '__STATICREDIRECT__' ),
+       'protectionlevel'           => array( '1', 'रक्षास्तर', 'PROTECTIONLEVEL' ),
 );
 
 $digitGroupingPattern = "##,##,###";
@@ -597,12 +597,12 @@ $1',
 # General errors
 'error' => 'दोषः',
 'databaseerror' => 'दत्ताधारे दोषः',
-'dberrortext' => 'समंकाधार पृच्छायां वाक्यरचना त्रुटिरेका अभवत्।
+'dberrortext' => 'समंकाधार पृच्छायां वाक्यरचनात्रुटिरेका अभवत्।
 अनेन अस्माकं तन्त्रांशे त्रुटिरपि निर्दिष्टा स्यात्।
 अन्तिमा चेष्टिता समंकाधार-पृच्छा आसीत्:
-<blockquote><tt>$1</tt></blockquote>
- "<tt>$2</tt>" इत्यस्मात् फलनात्।
-समंकाधारे त्रुटिरासीत्:  "<tt>$3: $4</tt>" इति।',
+<blockquote><code>$1</code></blockquote>
+ "<code>$2</code>" इत्यस्मात् फलनात्।
+समंकाधारे त्रुटिरासीत्:  "<samp>$3: $4</samp>" इति।',
 'dberrortextcl' => 'समंकाधार पृच्छायां वाक्यरचना त्रुटिरेका अभवत्।
 अन्तिमा चेष्टिता समंकाधार पृच्छा आसीत् : 
 "$1"
@@ -946,7 +946,11 @@ $2
 'userpage-userdoesnotexist-view' => '"$1" इति प्रयोक्तृलेखा पञ्जीकृता नास्ति।',
 'blocked-notice-logextract' => 'अयं प्रयोक्ता सम्प्रति अवरुद्धः वर्तते।
 नूतनतमा अवरोधाभिलेख-प्रविष्टिः सन्दर्भार्थम् अधस्तात् प्रदत्ताऽस्ति:',
-'clearyourcache' => "'''सूचनाः'''",
+'clearyourcache' => "'''सूचनाः:''' संरक्षणानन्तरं परिवर्तनानां दर्शनाय जालगवेशकस्य पुनर्चालनम् अवश्यं भवेत् ।
+* '''Firefox / Safari:''' गृह्यताम् ''Shift'' नोदनावसरे ''Reload'', अथवा एतयोः अन्यतरं नुद्यताम् ''Ctrl-F5'' अथवा ''Ctrl-R'' (''⌘-R'' on a Mac)
+* '''Google Chrome:''' नुद्यताम् ''Ctrl-Shift-R'' (''⌘-Shift-R'' on a Mac)
+* '''Internet Explorer:''' गृह्यताम् ''Ctrl'' नोदनावसरे ''Refresh'', अथवा नुद्यताम् ''Ctrl-F5''
+* '''Opera:''' पुनर्चाल्यताम् ''Tools → Preferences''",
 'usercssyoucanpreview' => "'''सूचना :''' रक्षणात्पूर्वं स्वकीयं जावास्क्रिप्ट् इति लिपिं परीक्षितुं \"{{int:showpreview}}\" इति गण्डं प्रयोजयतु।",
 'userjsyoucanpreview' => "'''सूचना :''' रक्षणात्पूर्वं स्वकीयं जावास्क्रिप्ट् इति लिपिं परीक्षितुं \"{{int:showpreview}}\" इति गण्डं प्रयोजयतु।",
 'usercsspreview' => "'''मनसि धारयतु यद्भवान् केवलं प्राग्दृश्यं पश्यति स्वकीयस्य प्रयोक्तृ-सीएसएस् इत्येतस्य'''
@@ -1917,6 +1921,7 @@ See https://www.mediawiki.org/wiki/Manual:Image_Authorization.',
 'uploadnewversion-linktext' => 'अस्य पृष्ठस्य नूतनाम् आवृत्तिं उद्भारयतु',
 'shared-repo-from' => '$1 इत्यस्मात् ।',
 'shared-repo' => 'विभक्तः कोशः ।',
+'upload-disallowed-here' => 'दुरदृष्टवशात् अस्य चित्रस्य उपरि पुनर्लेखनम् अशक्यम् ।',
 
 # File reversion
 'filerevert' => '$1 अनुवर्तताम् ।',
@@ -2026,6 +2031,7 @@ See https://www.mediawiki.org/wiki/Manual:Image_Authorization.',
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|बैट्|बैट्स्}}',
 'ncategories' => '{{PLURAL:$1|वर्गः|वर्गाः }}',
+'ninterwikis' => '$1 {{PLURAL:$1|अन्तार्विकी|अन्तार्विक्यः}}',
 'nlinks' => '$1 {{PLURAL:$1|अनुबन्धः|अनुबन्धाः}}',
 'nmembers' => '$1 {{PLURAL:$1|सदस्यः|सदस्याः}}',
 'nrevisions' => '$1 {{PLURAL:$1|पुनरावृत्तिः}}',
@@ -2054,6 +2060,7 @@ See https://www.mediawiki.org/wiki/Manual:Image_Authorization.',
 'mostlinkedtemplates' => 'प्राकृतिभिः अत्यनुबद्धाः ।',
 'mostcategories' => 'बहुवर्गयुक्तपुटानि ।',
 'mostimages' => 'अत्यनुबद्धानि पुटानि ।',
+'mostinterwikis' => 'अधिकान्तार्विकियुक्ताः पृष्ठाः',
 'mostrevisions' => 'सर्वाधिकपुनरावृत्तियुक्तानि पुटानि ।',
 'prefixindex' => 'उपसर्गयुक्तानि सर्वाणि पृष्ठानि',
 'prefixindex-namespace' => 'उपसर्गैः युक्तानि सर्वपुटानि । ($1 नामस्थानम्)',
@@ -2198,6 +2205,8 @@ See https://www.mediawiki.org/wiki/Manual:Image_Authorization.',
 'mailnologin' => 'सम्प्रेषणस्य सङ्केतः नास्ति ।',
 'mailnologintext' => 'अस्य योजकेभ्यः विद्युन्मानपत्रप्रेषणार्थम् [[Special:UserLogin|नामाभिलेखनम्]] आवश्यकम् [[Special:Preferences|आद्यता]]यां प्रेषयितुं विद्युन्मानपत्रसङ्केतः आवश्यकः ।',
 'emailuser' => 'एतस्मै योजकाय ईपत्रं प्रेष्यताम्',
+'emailuser-title-target' => 'ईपत्र प्रेष्यताम् {{GENDER:$1|योजकः}}',
+'emailuser-title-notarget' => 'ईपत्र योजकः',
 'emailpage' => 'ई-मेल योजक',
 'emailpagetext' => 'अस्मै योजकाय विद्युन्मानपत्रं प्रेषयितुम् अधो दत्तप्रपत्रम् उपयोक्तुं शक्नोति । 
 [[Special:Preferences|your user preferences]] अत्र भवता विनिवेशितः वि-पत्रसङ्केतः सकाशात् इति स्थाने प्रतिभाति । अनेन स्वीकर्ता साक्षात् प्रत्युत्तरं दातुं प्रभविष्यति ।',
@@ -2958,11 +2967,34 @@ $2 इति प्रकारस्य अवरोधं कर्तुं 
 
 # Info page
 'pageinfo-title' => '"$1" कृते सूचनाः ।',
-'pageinfo-header-edits' => 'सम्पादयति',
+'pageinfo-header-basic' => 'मूलसूचनाः ।',
+'pageinfo-header-edits' => 'इतिहासः सम्पाद्यताम्',
+'pageinfo-header-restrictions' => 'पृष्ठसंरक्षणम्',
+'pageinfo-header-properties' => 'पृष्ठस्य गुणधर्मः',
+'pageinfo-display-title' => 'शीर्षकं दर्श्यताम्',
+'pageinfo-default-sort' => 'संविभागकीलकं पूर्वनिर्दिष्टं क्रियताम्',
+'pageinfo-length' => 'पृष्ठदैर्घ्यम् (बैट्स्द्वारा)',
+'pageinfo-article-id' => 'पृष्ठाभिज्ञापकम्',
+'pageinfo-robot-policy' => 'चालकयन्त्रस्थितिः अन्विष्यताम्',
+'pageinfo-robot-index' => 'अङ्कनयोग्यम्',
+'pageinfo-robot-noindex' => 'अङ्कनायोग्यम्',
 'pageinfo-views' => 'अवलोकनानां सङ्ख्या ।',
-'pageinfo-watchers' => 'अवलोकनानां सङ्ख्या ।',
-'pageinfo-edits' => 'सम्पादननां सङ्ख्या ।',
-'pageinfo-authors' => 'स्पष्टानां कर्तॄणां सङ्ख्या ।',
+'pageinfo-watchers' => 'पृष्ठावलोककानां सङ्ख्या ।',
+'pageinfo-redirects-name' => 'एतत् पृष्ठं प्रति पुनर्निर्दिश्यते',
+'pageinfo-subpages-name' => 'अस्य पृष्ठस्य उपपृष्ठानि',
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|पुनर्निर्देशः|पुनर्निर्देशाः}}; $3 {{PLURAL:$3|न पुनर्निर्देशः|न-पुनर्निर्देशाः}})',
+'pageinfo-firstuser' => 'पृष्ठनिर्माता',
+'pageinfo-firsttime' => 'पृष्ठनिर्माणस्य दिनम्',
+'pageinfo-lastuser' => 'अन्तिमः सम्पादकः',
+'pageinfo-lasttime' => 'अन्तिमसम्पादनस्य दिनाङ्कः',
+'pageinfo-edits' => 'समग्रसम्पादनानां सङ्ख्या ।',
+'pageinfo-authors' => 'प्रत्येककर्तॄणां समग्रा सङ्ख्या ।',
+'pageinfo-recent-edits' => 'सद्योजातसम्पादनानां सङ्ख्या (गतेषु $1 दिनेषु)',
+'pageinfo-recent-authors' => 'प्रत्येककर्तॄणां सद्यःकालीना सङ्ख्या ।',
+'pageinfo-restriction' => 'पृष्ठसंरक्षणम्  (<code>{{lcfirst:$1}}</code>)',
+'pageinfo-magic-words' => 'मान्त्रिक{{PLURAL:$1|शब्दः|शब्दाः}} ($1)',
+'pageinfo-hidden-categories' => 'गोपित{{PLURAL:$1|वर्गः|वर्गाः}} ($1)',
+'pageinfo-templates' => 'समायोजित{{PLURAL:$1|फलकम्|फलकानि}} ($1)',
 
 # Skin names
 'skinname-standard' => 'पूर्व',
@@ -3012,6 +3044,7 @@ $2 इति प्रकारस्य अवरोधं कर्तुं 
 'file-info-size-pages' => '$1 × $2  पिक्सेल्, सञ्चिकायाः आकारः :  $3 , MIME प्रकारः :  $4 ,  $5   {{PLURAL:$5|पुटम्|पुटानि}}',
 'file-nohires' => 'उच्चतरं विभेदनं नोपलब्धम्',
 'svg-long-desc' => 'SVG संचिका, साधारणतया $1 × $2 पिक्सेलानि, संचिकायाः आकारः : $3',
+'svg-long-desc-animated' => 'आश्वसिता SVG संचिका, साधारणतया $1 × $2 पिक्सेलानि, संचिकायाः आकारः : $3',
 'show-big-image' => 'पूर्णं विभेदनम्',
 'show-big-image-preview' => 'अस्य पूर्वावलोकनस्य आकारः : $1',
 'show-big-image-other' => 'अन्याः {{PLURAL:$2| प्रस्तवः|प्रस्तावाः}}:  $1 ।',
@@ -3021,6 +3054,8 @@ $2 इति प्रकारस्य अवरोधं कर्तुं 
 'file-info-png-looped' => 'चक्रितम्',
 'file-info-png-repeat' => 'विलसितम् $1   {{PLURAL:$1|समयः|समयाः}}',
 'file-info-png-frames' => '$1 {{PLURAL:$1|पृष्ठम्|पृष्ठानि}}',
+'file-no-thumb-animation' => "'''सूचना: तान्त्रिकपरिमितेः कारणतः अस्याः सञ्चिकायाः लघ्वाकृतिः आश्वसितुम् अशक्या ।'''",
+'file-no-thumb-animation-gif' => "'''सूचना: तान्त्रिकपरिमितेः कारणतः अस्याः सञ्चिकासदृशस्य अधिकप्रगल्भतायुक्तस्य GIF चित्रस्य  लघ्वाकृतिः आश्वसितुम् अशक्या ।'''",
 
 # Special:NewFiles
 'newimages' => 'नूतन-संचिकानां वीथिका',
index 1ff1d7a..935f965 100644 (file)
@@ -50,7 +50,7 @@ $messages = array(
 'tog-hidepatrolled' => 'Ботурууллааччы көрбүт көннөрүүтүн саҥа көннөрүүлэр тиһиктэригэр көрдөрүмэ',
 'tog-newpageshidepatrolled' => 'Ботуруулламмыт сирэйдэри саҥа сирэйдэр тиһиктэригэр көрдөрүмэ',
 'tog-extendwatchlist' => 'Кэтээһин тупсарыллыбыт испииһэгэ. Бары уларытыылар көстөллөр (бүтэһиктэр эрэ буолбатах)',
-'tog-usenewrc' => 'Саҥа Ñ\83лаÑ\80Ñ\8bÑ\82Ñ\8bÑ\8bлаÑ\80 Ñ\82Ñ\83пÑ\81аÑ\80Ñ\8bллÑ\8bбÑ\8bÑ\82 Ð¸Ñ\81пииһÑ\8dкÑ\82Ñ\8dÑ\80ин Ñ\82Ñ\83Ñ\82Ñ\82Ñ\83Ñ\83 (JavaScript баар буолуохтаах)',
+'tog-usenewrc' => 'Саҥа Ñ\83лаÑ\80Ñ\8bÑ\82Ñ\8bÑ\8bлаÑ\80 Ñ\83онна ÐºÑ\8dÑ\82Ñ\8dбил Ñ\82иһикÑ\82Ñ\8dÑ\80игÑ\8dÑ\80 Ñ\83лаÑ\80Ñ\8bйÑ\8bÑ\8bлаÑ\80Ñ\8b Ð±Ó©Ð»Ó©Ñ\85Ñ\82Ò¯Ò¯Ñ\80гÑ\8d (JavaScript баар буолуохтаах)',
 'tog-numberheadings' => 'Бас тыллары нүөмэрдээ',
 'tog-showtoolbar' => 'Көннөрүү үстүрүмүөннэрин көрдөр (JavaScript)',
 'tog-editondblclick' => 'Хоһулатан иккитэ баттаан сирэйи уларытыы (JavaScript)',
@@ -306,6 +306,9 @@ $1',
 'youhavenewmessages' => '$1 ($2) кэллэ',
 'newmessageslink' => 'саҥа суруктар',
 'newmessagesdifflink' => 'кэлиҥҥи уларытыы',
+'youhavenewmessagesfromusers' => 'Маны $1 {{PLURAL:$3|соҕотох кыттааччыттан|$3 кыттааччыттан}} туппуккун ($2).',
+'youhavenewmessagesmanyusers' => 'Маны $1 элбэх кыттааччыттан туппуккун ($2).',
+'newmessagesdifflinkplural' => 'тиһэх {{PLURAL:$1|уларытыы|уларытыылар}}',
 'youhavenewmessagesmulti' => '$1, саҥа суруктар кэллилэр',
 'editsection' => 'уларыт',
 'editold' => 'уларыт',
@@ -2781,7 +2784,7 @@ $1',
 'pageinfo-views' => 'Көрүү ахсаана',
 'pageinfo-watchers' => 'Кэтээччилэр ахсааннара',
 'pageinfo-edits' => 'Көннөрүү ахсаана',
-'pageinfo-authors' => 'Ð\90Ñ\80ааÑ\81 ааптардар ахсааннара',
+'pageinfo-authors' => 'Ð\91Ñ\83 Ñ\81иÑ\80Ñ\8dйи Ñ\83лаÑ\80Ñ\8bппÑ\8bÑ\82 ааптардар ахсааннара',
 
 # Skin names
 'skinname-standard' => 'Классика',
index 298fd95..13f0764 100644 (file)
@@ -104,55 +104,55 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#چوريو', '#REDIRECT' ),
-       'localmonth'              => array( '1', 'مقاميمهينو', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonthname'          => array( '1', 'مقاميمهينونالو', 'LOCALMONTHNAME' ),
-       'localday'                => array( '1', 'مقاميڏينهن', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'مقاميڏينهن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' ),
-       'numberofusers'           => array( '1', 'يوزرسجوتعداد', 'NUMBEROFUSERS' ),
-       'numberofedits'           => array( '1', 'ترميمنجوتعداد', 'NUMBEROFEDITS' ),
-       'pagename'                => array( '1', 'صفحيجوعنوان', 'PAGENAME' ),
-       'namespace'               => array( '1', 'نانئپولار', 'NAMESPACE' ),
-       'talkspace'               => array( '1', 'بحثپولار', 'TALKSPACE' ),
-       'subjectspace'            => array( '1', 'مضمونپولار', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'fullpagename'            => array( '1', 'صحفيجوپورونالو', 'FULLPAGENAME' ),
-       '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_top'                 => array( '1', 'سِرُ', 'top' ),
-       'img_middle'              => array( '1', 'وچ', 'middle' ),
-       'img_bottom'              => array( '1', 'تَرُ', 'bottom' ),
-       'sitename'                => array( '1', 'سرزميننالو', 'SITENAME' ),
-       'ns'                      => array( '0', 'نپ', 'NS:' ),
-       'localurl'                => array( '0', 'مقامييوآريل', 'LOCALURL:' ),
-       'grammar'                 => array( '0', 'وياڪرڻ', 'GRAMMAR:' ),
-       'currentweek'             => array( '1', 'هلندڙهفتو', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'اڄوڪوڏينهن', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'مقاميهفتو', 'LOCALWEEK' ),
-       'plural'                  => array( '0', 'جمع', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'مڪمليوآريل', 'FULLURL:' ),
-       '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' ),
-       'special'                 => array( '0', 'خاص', 'special' ),
-       'filepath'                => array( '0', 'فائيلڏس', 'FILEPATH:' ),
-       'hiddencat'               => array( '1', '__ لڪل زمرو __', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'زمريجاصفحا', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'صفحيجيماپ', 'PAGESIZE' ),
+       'redirect'                  => array( '0', '#چوريو', '#REDIRECT' ),
+       'localmonth'                => array( '1', 'مقاميمهينو', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonthname'            => array( '1', 'مقاميمهينونالو', 'LOCALMONTHNAME' ),
+       'localday'                  => array( '1', 'مقاميڏينهن', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'مقاميڏينهن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' ),
+       'numberofusers'             => array( '1', 'يوزرسجوتعداد', 'NUMBEROFUSERS' ),
+       'numberofedits'             => array( '1', 'ترميمنجوتعداد', 'NUMBEROFEDITS' ),
+       'pagename'                  => array( '1', 'صفحيجوعنوان', 'PAGENAME' ),
+       'namespace'                 => array( '1', 'نانئپولار', 'NAMESPACE' ),
+       'talkspace'                 => array( '1', 'بحثپولار', 'TALKSPACE' ),
+       'subjectspace'              => array( '1', 'مضمونپولار', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'fullpagename'              => array( '1', 'صحفيجوپورونالو', 'FULLPAGENAME' ),
+       '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_top'                   => array( '1', 'سِرُ', 'top' ),
+       'img_middle'                => array( '1', 'وچ', 'middle' ),
+       'img_bottom'                => array( '1', 'تَرُ', 'bottom' ),
+       'sitename'                  => array( '1', 'سرزميننالو', 'SITENAME' ),
+       'ns'                        => array( '0', 'نپ', 'NS:' ),
+       'localurl'                  => array( '0', 'مقامييوآريل', 'LOCALURL:' ),
+       'grammar'                   => array( '0', 'وياڪرڻ', 'GRAMMAR:' ),
+       'currentweek'               => array( '1', 'هلندڙهفتو', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'اڄوڪوڏينهن', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'مقاميهفتو', 'LOCALWEEK' ),
+       'plural'                    => array( '0', 'جمع', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'مڪمليوآريل', 'FULLURL:' ),
+       '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' ),
+       'special'                   => array( '0', 'خاص', 'special' ),
+       'filepath'                  => array( '0', 'فائيلڏس', 'FILEPATH:' ),
+       'hiddencat'                 => array( '1', '__ لڪل زمرو __', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'زمريجاصفحا', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'صفحيجيماپ', 'PAGESIZE' ),
 );
 
 $messages = array(
index aefd19b..8829a0b 100644 (file)
@@ -20,7 +20,7 @@
 
 $namespaceNames = array(
        NS_MEDIA            => 'Media',
-       NS_SPECIAL          => 'Doaimmat',
+       NS_SPECIAL          => 'Erenoamáš',
        NS_TALK             => 'Ságastallan',
        NS_USER             => 'Geavaheaddji',
        NS_USER_TALK        => 'Geavaheaddjeságastallan',
@@ -37,6 +37,10 @@ $namespaceNames = array(
        NS_CATEGORY_TALK    => 'Kategoriijaságastallan',
 );
 
+$namespaceAliases = array(
+       'Doaimmat' => NS_SPECIAL,
+);
+
 $specialPageAliases = array(
        'Activeusers'               => array( 'Aktiivvalaš_geavaheaddjit' ),
        'Allmessages'               => array( 'Buot_systemasánit' ),
@@ -48,6 +52,7 @@ $specialPageAliases = array(
        'Contributions'             => array( 'Geavaheaddji_rievdadusat' ),
        'Disambiguations'           => array( 'Liŋkkat_dárkonsiidduide' ),
        'DoubleRedirects'           => array( 'Guoktegeardásaš_ođđasitstivremat' ),
+       'Emailuser'                 => array( 'SáddeEpoastta' ),
        'Export'                    => array( 'Olggosfievrrit_siidduid' ),
        'Listfiles'                 => array( 'Fiilalogahallan' ),
        'Listredirects'             => array( 'Listu_ođđasitstivremiin' ),
@@ -83,8 +88,8 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#OĐĐASITSTIVREN', '#STIVREN', '#REDIRECT' ),
-       'numberofarticles'        => array( '1', 'ARTIHKKALIIDMEARRI', 'NUMBEROFARTICLES' ),
+       'redirect'                  => array( '0', '#OĐĐASITSTIVREN', '#STIVREN', '#REDIRECT' ),
+       'numberofarticles'          => array( '1', 'ARTIHKKALIIDMEARRI', 'NUMBEROFARTICLES' ),
 );
 
 $linkTrail = '/^(:?[a-zàáâçčʒǯđðéèêëǧǥȟíìîïıǩŋñóòôõßšŧúùûýÿüžþæøåäö]+)(.*)$/sDu';
index 5978df8..9b3eb3e 100644 (file)
@@ -115,94 +115,94 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#PREUSMJERI', '#PREUSMERI', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__BEZSADRŽAJA__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__BEZGALERIJE__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__FORSIRANISADRŽAJ__', '__UKLJUČISADRŽAJ__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__SADRŽAJ__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__BEZ_IZMJENA__', '__BEZIZMJENA__', '__BEZ_IZMENA__', '__BEZIZMENA__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '__BEZ_ZAGLAVLJA__', '__NOHEADER__' ),
-       'currentmonth'            => array( '1', 'TRENUTNIMJESEC', 'TRENUTNIMESEC', 'TRENUTAČNIMJESEC', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', 'TRENUTNIMJESEC1', 'TRENUTNIMESEC1', 'TRENUTAČNIMJESEC1', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', 'TRENUTNIMJESECIME', 'TRENUTNIMESECIME', 'TRENUTAČNIMJESECIME', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'TRENUTNIMJESECROD', 'TRENUTNIMESECROD', 'TRENUTAČNIMJESECROD', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'TRENUTNIMJESECSKR', 'TRENUTNIMESECSKR', 'TRENUTAČNIMJESECSKR', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'TRENUTNIDAN', 'TRENUTAČNIDAN', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'TRENUTNIDAN2', 'TRENUTAČNIDAN2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'TRENUTNIDANIME', 'TRENUTAČNIDANIME', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'TRENUTNAGODINA', 'TRENUTAČNAGODINA', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'TRENUTNOVRIJEME', 'TRENUTNOVREME', 'TRENUTAČNOVRIJEME', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'TRENUTNISAT', 'TRENUTAČNISAT', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'LOKALNIMJESEC', 'LOKALNIMESEC', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', 'LOKALNIMJESEC1', 'LOKALNIMESEC1', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'LOKALNIMJESECIME', 'LOKALNIMESECIME', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'LOKALNIMJESECROD', 'LOKALNIMESECROD', 'LOKALNIMJESECGEN', 'LOKALNIMESECGEN', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'LOKALNIMJESECSKR', 'LOKALNIMESECSKR', 'LOKALNIMJESECKRAT', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'LOKALNIDAN', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'LOKALNIDAN2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'LOKALNIDANIME', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'LOKALNAGODINA', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'LOKALNOVRIJEME', 'LOKALNOVREME', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'LOKALNISAT', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'BROJSTRANICA', 'BROJSTRANA', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'BROJČLANAKA', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'BROJDATOTEKA', 'BROJFAJLOVA', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'BROJKORISNIKA', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'BROJAKTIVNIHKORISNIKA', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'BROJIZMJENA', 'BROJIZMENA', 'BROJUREĐIVANJA', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'BROJPREGLEDA', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'STRANICA', 'IMESTRANICE', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'STRANICE', 'IMESTRANICEE', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'IMENSKIPROSTOR', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'IMENSKIPROSTORI', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'PROSTORZARAZGOVOR', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'PROSTORIZARAZGOVOR', 'TALKSPACEE' ),
-       'fullpagename'            => array( '1', 'PUNOIMESTRANE', 'PUNOIMESTRANICE', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'PUNOIMESTRANEE', 'PUNOIMESTRANICEE', 'FULLPAGENAMEE' ),
-       'msg'                     => array( '0', 'POR:', 'MSG:' ),
-       'subst'                   => array( '0', 'ZAMJENI:', 'ZAMENI:', 'ZAMJENA:', 'SUBST:' ),
-       'msgnw'                   => array( '0', 'NVPOR:', 'MSGNW:' ),
-       'img_thumbnail'           => array( '1', 'minijatura', 'mini', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'minijatura=$1', 'mini=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'desno', 'right' ),
-       'img_left'                => array( '1', 'lijevo', 'levo', 'left' ),
-       'img_none'                => array( '1', 'n', 'bez', 'ništa', 'none' ),
-       'img_center'              => array( '1', 'centar', 'središte', 'c', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'okvir', 'ram', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', 'bez_okvira', 'bezokvira', 'frameless' ),
-       'img_page'                => array( '1', 'stranica=$1', 'stranica_$1', 'strana=$1', 'strana_$1', 'page=$1', 'page $1' ),
-       'img_upright'             => array( '1', 'na_gore', 'na_gore=$1', 'na_gore_$1', 'uspravno', 'uspravno=$1', 'uspravno_$1', 'upright', 'upright=$1', 'upright $1' ),
-       'img_border'              => array( '1', 'granica', 'obrub', 'border' ),
-       'img_baseline'            => array( '1', 'osnovnacrta', 'pocetna_linija', 'baseline' ),
-       'img_top'                 => array( '1', 'vrh', 'top' ),
-       'img_text_top'            => array( '1', 'vrh_teksta', 'tekst_vrh', 'text-top' ),
-       'img_middle'              => array( '1', 'sredina', 'middle' ),
-       'img_bottom'              => array( '1', 'dno', 'bottom' ),
-       'img_text_bottom'         => array( '1', 'tekst-dno', 'text-bottom' ),
-       'localurl'                => array( '0', 'LOKALNIURL:', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'LOKALNIURLE:', 'LOCALURLE:' ),
-       'notitleconvert'          => array( '0', '__BEZTC__', '__BEZKN__', '__BPN__', '__NOTITLECONVERT__', '__NOTC__' ),
-       'nocontentconvert'        => array( '0', '__BEZCC__', '__BPS__', '__NOCONTENTCONVERT__', '__NOCC__' ),
-       'currentweek'             => array( '1', 'TRENUTNASEDMICA', 'TRENUTAČNITJEDAN', 'TRENUTNANEDELJA', 'TRENUTNITJEDAN', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'TRENUTNIDANSEDMICE', 'TRENUTAČNIDANTJEDNA', 'TRENUTNIDANNEDELJE', 'TRENUTNIDANTJEDNA', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'LOKALNASEDMICA', 'LOKALNITJEDAN', 'LOKALNANEDELJA', 'LOCALWEEK' ),
-       'localdow'                => array( '1', 'LOKALNIDANSEDMICE', 'LOKALNIDANTJEDNA', 'LOKALNIDANNEDELJE', 'LOCALDOW' ),
-       'revisionid'              => array( '1', 'IDIZMJENE', 'IDIZMENE', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'IZMJENEDANA', 'IZMENEDANA', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'IZMJENEDANA2', 'IZMENEDANA2', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'MJESECIZMJENE', 'MESECIZMENE', 'REVISIONMONTH' ),
-       'revisionmonth1'          => array( '1', 'MJESECIZMJENE1', 'MESECIZMENE1', 'REVISIONMONTH1' ),
-       'revisionyear'            => array( '1', 'GODINAIZMJENE', 'GODINAIZMENE', 'REVISIONYEAR' ),
-       'revisiontimestamp'       => array( '1', 'OZNAKAVREMENAIZMJENE', 'OZNAKAVREMENAIZMENE', 'REVISIONTIMESTAMP' ),
-       'plural'                  => array( '0', 'MNOŽINA:', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'PUNIURL:', 'PUNURL:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'PUNIURLE:', 'PUNURLE:', 'FULLURLE:' ),
-       'currenttimestamp'        => array( '1', 'TRENUTNAOZNAKAVREMENA', 'TRENUTAČNAOZNAKAVREMENA', 'CURRENTTIMESTAMP' ),
-       'localtimestamp'          => array( '1', 'LOKALNAOZNAKAVREMENA', 'LOCALTIMESTAMP' ),
-       'special'                 => array( '0', 'posebno', 'special' ),
-       'hiddencat'               => array( '1', '__SAKRIVENAKATEGORIJA__', 'SKRIVENAKAT', '__SAKRIVENAKAT__', '__HIDDENCAT__' ),
-       'pagesize'                => array( '1', 'VELICINASTRANICE', 'VELIČINASTRANICE', 'VELIČINASTRANE', 'VELICINASTRANE', 'PAGESIZE' ),
-       'formatdate'              => array( '0', 'formatdatuma', 'formatdate', 'dateformat' ),
+       'redirect'                  => array( '0', '#PREUSMJERI', '#PREUSMERI', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__BEZSADRŽAJA__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__BEZGALERIJE__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__FORSIRANISADRŽAJ__', '__UKLJUČISADRŽAJ__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__SADRŽAJ__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__BEZ_IZMJENA__', '__BEZIZMJENA__', '__BEZ_IZMENA__', '__BEZIZMENA__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '__BEZ_ZAGLAVLJA__', '__NOHEADER__' ),
+       'currentmonth'              => array( '1', 'TRENUTNIMJESEC', 'TRENUTNIMESEC', 'TRENUTAČNIMJESEC', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'TRENUTNIMJESEC1', 'TRENUTNIMESEC1', 'TRENUTAČNIMJESEC1', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'TRENUTNIMJESECIME', 'TRENUTNIMESECIME', 'TRENUTAČNIMJESECIME', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'TRENUTNIMJESECROD', 'TRENUTNIMESECROD', 'TRENUTAČNIMJESECROD', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'TRENUTNIMJESECSKR', 'TRENUTNIMESECSKR', 'TRENUTAČNIMJESECSKR', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'TRENUTNIDAN', 'TRENUTAČNIDAN', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'TRENUTNIDAN2', 'TRENUTAČNIDAN2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'TRENUTNIDANIME', 'TRENUTAČNIDANIME', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'TRENUTNAGODINA', 'TRENUTAČNAGODINA', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'TRENUTNOVRIJEME', 'TRENUTNOVREME', 'TRENUTAČNOVRIJEME', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'TRENUTNISAT', 'TRENUTAČNISAT', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'LOKALNIMJESEC', 'LOKALNIMESEC', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'LOKALNIMJESEC1', 'LOKALNIMESEC1', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'LOKALNIMJESECIME', 'LOKALNIMESECIME', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'LOKALNIMJESECROD', 'LOKALNIMESECROD', 'LOKALNIMJESECGEN', 'LOKALNIMESECGEN', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'LOKALNIMJESECSKR', 'LOKALNIMESECSKR', 'LOKALNIMJESECKRAT', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'LOKALNIDAN', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'LOKALNIDAN2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'LOKALNIDANIME', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'LOKALNAGODINA', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'LOKALNOVRIJEME', 'LOKALNOVREME', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'LOKALNISAT', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'BROJSTRANICA', 'BROJSTRANA', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'BROJČLANAKA', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'BROJDATOTEKA', 'BROJFAJLOVA', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'BROJKORISNIKA', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'BROJAKTIVNIHKORISNIKA', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'BROJIZMJENA', 'BROJIZMENA', 'BROJUREĐIVANJA', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'BROJPREGLEDA', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'STRANICA', 'IMESTRANICE', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'STRANICE', 'IMESTRANICEE', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'IMENSKIPROSTOR', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'IMENSKIPROSTORI', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'PROSTORZARAZGOVOR', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'PROSTORIZARAZGOVOR', 'TALKSPACEE' ),
+       'fullpagename'              => array( '1', 'PUNOIMESTRANE', 'PUNOIMESTRANICE', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'PUNOIMESTRANEE', 'PUNOIMESTRANICEE', 'FULLPAGENAMEE' ),
+       'msg'                       => array( '0', 'POR:', 'MSG:' ),
+       'subst'                     => array( '0', 'ZAMJENI:', 'ZAMENI:', 'ZAMJENA:', 'SUBST:' ),
+       'msgnw'                     => array( '0', 'NVPOR:', 'MSGNW:' ),
+       'img_thumbnail'             => array( '1', 'minijatura', 'mini', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'minijatura=$1', 'mini=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'desno', 'right' ),
+       'img_left'                  => array( '1', 'lijevo', 'levo', 'left' ),
+       'img_none'                  => array( '1', 'n', 'bez', 'ništa', 'none' ),
+       'img_center'                => array( '1', 'centar', 'središte', 'c', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'okvir', 'ram', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'bez_okvira', 'bezokvira', 'frameless' ),
+       'img_page'                  => array( '1', 'stranica=$1', 'stranica_$1', 'strana=$1', 'strana_$1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', 'na_gore', 'na_gore=$1', 'na_gore_$1', 'uspravno', 'uspravno=$1', 'uspravno_$1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_border'                => array( '1', 'granica', 'obrub', 'border' ),
+       'img_baseline'              => array( '1', 'osnovnacrta', 'pocetna_linija', 'baseline' ),
+       'img_top'                   => array( '1', 'vrh', 'top' ),
+       'img_text_top'              => array( '1', 'vrh_teksta', 'tekst_vrh', 'text-top' ),
+       'img_middle'                => array( '1', 'sredina', 'middle' ),
+       'img_bottom'                => array( '1', 'dno', 'bottom' ),
+       'img_text_bottom'           => array( '1', 'tekst-dno', 'text-bottom' ),
+       'localurl'                  => array( '0', 'LOKALNIURL:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'LOKALNIURLE:', 'LOCALURLE:' ),
+       'notitleconvert'            => array( '0', '__BEZTC__', '__BEZKN__', '__BPN__', '__NOTITLECONVERT__', '__NOTC__' ),
+       'nocontentconvert'          => array( '0', '__BEZCC__', '__BPS__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+       'currentweek'               => array( '1', 'TRENUTNASEDMICA', 'TRENUTAČNITJEDAN', 'TRENUTNANEDELJA', 'TRENUTNITJEDAN', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'TRENUTNIDANSEDMICE', 'TRENUTAČNIDANTJEDNA', 'TRENUTNIDANNEDELJE', 'TRENUTNIDANTJEDNA', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'LOKALNASEDMICA', 'LOKALNITJEDAN', 'LOKALNANEDELJA', 'LOCALWEEK' ),
+       'localdow'                  => array( '1', 'LOKALNIDANSEDMICE', 'LOKALNIDANTJEDNA', 'LOKALNIDANNEDELJE', 'LOCALDOW' ),
+       'revisionid'                => array( '1', 'IDIZMJENE', 'IDIZMENE', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'IZMJENEDANA', 'IZMENEDANA', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'IZMJENEDANA2', 'IZMENEDANA2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'MJESECIZMJENE', 'MESECIZMENE', 'REVISIONMONTH' ),
+       'revisionmonth1'            => array( '1', 'MJESECIZMJENE1', 'MESECIZMENE1', 'REVISIONMONTH1' ),
+       'revisionyear'              => array( '1', 'GODINAIZMJENE', 'GODINAIZMENE', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'OZNAKAVREMENAIZMJENE', 'OZNAKAVREMENAIZMENE', 'REVISIONTIMESTAMP' ),
+       'plural'                    => array( '0', 'MNOŽINA:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'PUNIURL:', 'PUNURL:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'PUNIURLE:', 'PUNURLE:', 'FULLURLE:' ),
+       'currenttimestamp'          => array( '1', 'TRENUTNAOZNAKAVREMENA', 'TRENUTAČNAOZNAKAVREMENA', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', 'LOKALNAOZNAKAVREMENA', 'LOCALTIMESTAMP' ),
+       'special'                   => array( '0', 'posebno', 'special' ),
+       'hiddencat'                 => array( '1', '__SAKRIVENAKATEGORIJA__', 'SKRIVENAKAT', '__SAKRIVENAKAT__', '__HIDDENCAT__' ),
+       'pagesize'                  => array( '1', 'VELICINASTRANICE', 'VELIČINASTRANICE', 'VELIČINASTRANE', 'VELICINASTRANE', 'PAGESIZE' ),
+       'formatdate'                => array( '0', 'formatdatuma', 'formatdate', 'dateformat' ),
 );
 
 $linkTrail = '/^([a-zčćđžš]+)(.*)$/sDu';
index 325d8fb..972e2ef 100644 (file)
@@ -149,46 +149,46 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#යළියොමුව', '#REDIRECT' ),
-       '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' ),
-       'currentdayname'          => array( '1', 'වත්මන්දිනනාමය', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'වත්මන්වසර', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'වත්මන්වේලාව', 'CURRENTTIME' ),
-       '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' ),
-       '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' ),
-       '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' ),
+       'redirect'                  => array( '0', '#යළියොමුව', '#REDIRECT' ),
+       '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' ),
+       'currentdayname'            => array( '1', 'වත්මන්දිනනාමය', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'වත්මන්වසර', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'වත්මන්වේලාව', 'CURRENTTIME' ),
+       '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' ),
+       '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' ),
+       '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(
@@ -347,9 +347,9 @@ $messages = array(
 
 # Vector skin
 'vector-action-addsection' => 'මාතෘකාව එක්කරන්න',
-'vector-action-delete' => 'මà¶\9aà·\8fදමනà·\8aන',
+'vector-action-delete' => 'මකන්න',
 'vector-action-move' => 'ගෙනයන්න',
-'vector-action-protect' => 'ආරක්‍ෂණය කරන්න',
+'vector-action-protect' => 'ආරක්‍ෂණය',
 'vector-action-undelete' => 'මකාදැමීම අවලංගු කරන්න',
 'vector-action-unprotect' => 'ආරක්ෂණ තත්වය වෙනස් කරන්න',
 'vector-simplesearch-preference' => 'වැඩිදියුණුකළ සෙවුම් යෝජනා සක්‍රීය කරන්න (වෙක්ටර් තීමය සඳහා පමණි)',
@@ -365,7 +365,7 @@ $messages = array(
 'errorpagetitle' => 'දෝෂය',
 'returnto' => '$1 වෙත නැවත යන්න.',
 'tagline' => '{{SITENAME}} වෙතින්',
-'help' => 'à¶\8bදà·\80à·\94',
+'help' => 'à¶\8bදà·\80à·\8a',
 'search' => 'සොයන්න',
 'searchbutton' => 'සොයන්න',
 'go' => 'යන්න',
@@ -373,11 +373,11 @@ $messages = array(
 'history' => 'පිටුවේ ඉතිහාසය',
 'history_short' => 'ඉතිහාසය',
 'updatedmarker' => 'මාගේ අවසාන පිවිසුමෙන් පසුව යාවත්කාලීන කරඇත',
-'printableversion' => 'මුද්‍රණයකලහැකි සංස්කරණය',
+'printableversion' => 'මුද්‍රණය කල හැකි සංස්කරණය',
 'permalink' => 'ස්ථාවර සබැඳුම',
 'print' => 'මුද්‍රණය කරන්න',
 'view' => 'දසුන',
-'edit' => 'සංස්කරණය කරන්න',
+'edit' => 'සංස්කරණය',
 'create' => 'තනන්න',
 'editthispage' => 'මෙම පිටුව සංස්කරණය කරන්න',
 'create-this-page' => 'මෙම පිටුව තනන්න',
@@ -385,7 +385,7 @@ $messages = array(
 'deletethispage' => 'මෙම පිටුව මකන්න',
 'undelete_short' => '{{PLURAL:$1|එක් සංස්කරණයක|සංස්කරණ $1 ක}} මකා දැමීම ප්‍රතිලෝම කරන්න',
 'viewdeleted_short' => 'මකා දමනු ලැබූ {{PLURAL:$1|එක් සංස්කරණයක්|සංස්කරණ $1  ක්}} බලන්න',
-'protect' => 'ආරක්‍ෂණය කරන්න',
+'protect' => 'ආරක්‍ෂණය',
 'protect_change' => 'වෙනස් කරන්න',
 'protectthispage' => 'මෙම පිටුව ආරක්‍ෂණය කරන්න',
 'unprotect' => 'ආරක්ෂණ තත්වය වෙනස් කරන්න',
@@ -414,7 +414,7 @@ $messages = array(
 'lastmodifiedat' => 'මෙම පිටුව අවසන් වරට වෙනස් කරන ලද්දේ $1 දිනදී, $2 වේලාවෙහිදීය.',
 'viewcount' => 'මෙම පිටුවට {{PLURAL:$1|එක් වරක්|$1 වරක්}} පිවිස ඇත.',
 'protectedpage' => 'ආරක්ෂිත පිටුව',
-'jumpto' => 'à·\80à·\99ත à¶ºන්න:',
+'jumpto' => 'à·\80à·\99ත à¶´à¶±à·\92න්න:',
 'jumptonavigation' => 'සංචලනය',
 'jumptosearch' => 'සොයන්න',
 'view-pool-error' => "සමාවන්න, ස'වරයන් මෙම අවස්ථාවෙහිදී අධිපූරණය වී ඇත.
@@ -626,7 +626,7 @@ $2',
 'nologin' => "ඔබ හට ගිණුමක් නොමැතිද? '''$1'''.",
 'nologinlink' => 'ගිණුමක් තනන්න',
 'createaccount' => 'අලුත් ගිණුමක් තනන්න',
-'gotaccount' => "දැනටමත් ගිණුමක් තිබේද? '''$1'''.",
+'gotaccount' => 'දැනටමත් ගිණුමක් තිබේද? $1.',
 'gotaccountlink' => 'පිවිසෙන්න',
 'userlogin-resetlink' => 'ඔබේ පිවිසුම් තොරතුරු අමතකද?',
 'createaccountmail' => 'විද්‍යුත් තැපෑල මගින්',
@@ -768,7 +768,7 @@ $2
 'link_sample' => 'සබැඳි ශීර්ෂය',
 'link_tip' => 'අභ්‍යන්තර සබැඳිය',
 'extlink_sample' => 'http://www.example.com සබැඳුම් මාතෘකාව',
-'extlink_tip' => 'බාහිර සබැඳිය ( http:// උපසර්ගය සිහි තබාගන්න)',
+'extlink_tip' => 'බාහිර සබැඳිය (http:// උපසර්ගය සිහි තබාගන්න)',
 'headline_sample' => 'සිරස්තල පෙළ',
 'headline_tip' => '2 වන මට්ටමෙහි සිරස්තලය',
 'nowiki_sample' => 'ආකෘතිකරණය-නොකල පෙළ මෙහි රුවන්න',
@@ -844,9 +844,9 @@ $2
 
 මෙම නව ගිණුම සඳහා මුරපදය, ප්‍රවිෂ්ට වීමෙන් අනතුරුව, ''[[Special:ChangePassword|මුර පදය වෙනස් කරන්න]]''  පිටුව තුලදී වෙනස් කල හැක.",
 'newarticle' => '(නව)',
-'newarticletext' => "බà·\90ඳà·\92යà¶\9aà·\8a à¶\94à·\83à·\8aà·\83à·\9a à¶´à·\90මà·\92ණ à¶\94බ à¶´à·\92à·\80à·\92à·\83 à¶\87තà·\8aතà·\9a à¶¯à·\90නට à¶±à·\9cපà·\80තà·\92න à¶½à·\92පà·\92යකටයි.
+'newarticletext' => "බà·\90ඳà·\92යà¶\9aà·\8a à¶\94à·\83à·\8aà·\83à·\9a à¶´à·\90මà·\92ණ à¶\94බ à¶´à·\92à·\80à·\92à·\83 à¶\87තà·\8aතà·\9a à¶¯à·\90නට à¶±à·\9cපà·\80තà·\92න à¶´à·\92ටà·\94à·\80කටයි.
 මෙම ලිපිය තැනීමට අවශ්‍ය නම්, පහත ඇති කොටුව තුල අකුරු ලිවීම අරඹන්න (වැඩිදුර තොරතුරු සඳහා [[{{MediaWiki:Helppage}}|උදවු පිටුව]] බලන්න).
-à¶\94බ à¶¸à·\99à·\84à·\92 à¶´à·\92à·\80à·\92à·\83 à¶\87තà·\8aතà·\9a à¶\85තà·\8aà·\80à·\90රà·\90දà·\8aදà¶\9aà·\92නà·\8a à¶±à¶¸à·\8a, à¶\94බà¶\9cà·\9a à·\83à·\90රà·\92à·\83රයà·\99à·\84à·\92 (බà·\8aâ\80\8dරà·\80à·\94à·\83රයà·\99à·\84à·\92) '''à¶\86පà·\83à·\94 (back)''' à¶¶à·\9cතà·\8aතම à¶\9aà·\8aලà·\92à¶\9aà·\8a à¶\9aරන්න.",
+à¶\94බ à¶¸à·\99à·\84à·\92 à¶´à·\92à·\80à·\92à·\83 à¶\87තà·\8aතà·\9a à¶\85තà·\8aà·\80à·\90රà·\90දà·\8aදà¶\9aà·\92නà·\8a à¶±à¶¸à·\8a, à¶\94බà¶\9cà·\9a à\9cà·\80à·\9aà·\82à¶\9aයà·\99à·\84à·\92 '''à¶\86පà·\83à·\94''' à¶¶à·\9cතà·\8aතම à¶\94බන්න.",
 'anontalkpagetext' => "----''මෙම සංවාද පිටුව අයත් වන්නේ තවමත් ගිණුමක් තනා නැති හෝ එසේ කොට එනමුදු එය භාවිතා නොකරන හෝ නිර්නාමික පරිශීලකයෙකුටය.
 එබැවින්, ඔහු/ඇය හැඳින්වීමට සංඛ්‍යාත්මක IP ලිපිනය භාවිතා කිරීමට අප හට සිදුවේ.
 පරිශීලකයන් කිහිප දෙනෙකු විසින් මෙවැනි IP ලිපිනයක් හවුලේ පරිහරණය කරනවා විය හැක.
@@ -1000,7 +1000,7 @@ $3 විසින් සපයා ඇති හේතුව ''$2'' වේ",
 'currentrev' => 'නවතම සංශෝධනය',
 'currentrev-asof' => '$1 වන විට නවතම සංශෝධනය',
 'revisionasof' => '$1 තෙක් සංශෝධනය',
-'revision-info' => '$1 වන විට  $2 විසින් සිදු කර ඇති සංශෝධන',
+'revision-info' => '$1 වන විට $2 විසින් සිදු කර ඇති සංශෝධන',
 'previousrevision' => '← පැරණි සංශෝධනය',
 'nextrevision' => 'නව සංශෝධනය →',
 'currentrevisionlink' => 'වත්මන් සංශෝධනය',
@@ -1022,7 +1022,7 @@ $3 විසින් සපයා ඇති හේතුව ''$2'' වේ",
 # Revision feed
 'history-feed-title' => 'සංශෝධන ඉතිහාසය',
 'history-feed-description' => 'විකියෙහි මෙම පිටුව සඳහා ඇති සංශෝධන ඉතිහාසය',
-'history-feed-item-nocomment' => '$1 විසින්  $2 හිදී',
+'history-feed-item-nocomment' => '$1 විසින් $2 හිදී',
 'history-feed-empty' => 'අයැදුනු පිටුව නොපවතියි.
 එය විකියෙන් මකා දමා හෝ නම-වෙනස් කොට ඇතිවා විය හැකිය.
 අදාල නව පිටු සඳහා  [[Special:Search|විකිය තුල ගවේෂණය]] අත්හදා බලන්න.',
@@ -1164,8 +1164,8 @@ $1",
 'lineno' => 'පේළිය $1:',
 'compareselectedversions' => 'තෝරාගත් සංශෝධන සසඳන්න',
 'showhideselectedversions' => 'තෝරාගත් සංශෝධන පෙන්වන්න/සඟවන්න',
-'editundo' => 'අහෝසි කරන්න',
-'diff-multi' => '({{PLURAL:$2|one user|$2 users}} විසින් සිදුකල {{PLURAL:$1|එක් අතරමැදි සංශෝධනයක්| අතරමැදි සංශෝධන $1 ක්}} පෙන්නුම් කර නොමැත.)',
+'editundo' => 'අහෝසි',
+'diff-multi' => '({{PLURAL:$2|එක් පරිශීලකයෙක්|පරිශීලකයන් $2 ක්}} විසින් සිදුකල {{PLURAL:$1|එක් අතරමැදි සංශෝධනයක්|අතරමැදි සංශෝධන $1 ක්}} පෙන්නුම් කර නොමැත.)',
 'diff-multi-manyusers' => '(පරිශීලකයන් $2 කට වඩා වැඩි ගණනකගේ ආසන්න පුනරීක්‍ෂණ $1ක් පෙන්වා නොමැත)',
 
 # Search results
@@ -1179,14 +1179,14 @@ $1",
 'notitlematches' => 'පිටු ශීර්ෂ ගැලපීම් කිසිවක් නොමැත',
 'textmatches' => 'පිටු පෙළ ගැළපෙයි',
 'notextmatches' => 'පිටු පෙළ කිසිවක් නොගැළපෙයි',
-'prevn' => 'පෙර  {{PLURAL:$1|$1}}',
-'nextn' => 'මීලඟ  {{PLURAL:$1|$1}}',
-'prevn-title' => 'පූර්ව  {{PLURAL:$1|ප්‍රතිඵලය|ප්‍රතිඵලයන් $1}}',
-'nextn-title' => 'මීලඟ  {{PLURAL:$1|ප්‍රතිඵලය|ප්‍රතිඵල $1}}',
+'prevn' => 'පෙර {{PLURAL:$1|$1}}',
+'nextn' => 'මීලඟ {{PLURAL:$1|$1}}',
+'prevn-title' => 'පූර්ව {{PLURAL:$1|ප්‍රතිඵලය|ප්‍රතිඵලයන් $1}}',
+'nextn-title' => 'මීලඟ {{PLURAL:$1|ප්‍රතිඵලය|ප්‍රතිඵල $1}}',
 'shown-title' => 'එක් පිටුවක {{PLURAL:$1|ප්‍රතිඵලයක්|ප්‍රතිඵල $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|මෙම උපසර්ගය භාවිත කරමින් පිටු පිරික්සන්න]]',
@@ -1198,9 +1198,9 @@ $1",
 'searchprofile-articles-tooltip' => '$1 හි ගවේෂණය කරන්න',
 'searchprofile-project-tooltip' => '$1 හි ගවේෂණය කරන්න',
 'searchprofile-images-tooltip' => 'ගොනු සඳහා ගවේෂණය කරන්න',
-'searchprofile-everything-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 යළි-යොමු කරන්න)',
@@ -1214,11 +1214,11 @@ $1",
 'search-relatedarticle' => 'සහසම්බන්ධිත',
 'mwsuggest-disable' => 'AJAX ඇඟවිලි අක්‍රීය කරන්න',
 'searcheverything-enable' => 'සියළු නාමඅවකාශයන්හි ගවේෂණය කරන්න',
-'searchrelated' => 'à·\83à·\84à·\83මà·\8aබනà·\8aධිත',
+'searchrelated' => 'à\86à·\81à·\8aâ\80\8dරිත',
 'searchall' => 'සියල්ල',
 'showingresults' => "#'''$2''' ගෙන් ආරම්භ කොට, {{PLURAL:$1|ප්‍රතිඵල '''1'''  ක් |ප්‍රතිඵල '''$1''' ක්}} දක්වා පහත පෙන්වා ඇත.",
 'showingresultsnum' => "#'''$2''' ගෙන් ආරම්භ කොට, {{PLURAL:$3|ප්‍රතිඵල '''1'''  ක් |ප්‍රතිඵල '''$3''' ක්}} පහත පෙන්වා ඇත.",
-'showingresultsheader' => "'''$4''' සඳහා {{PLURAL:$5| '''$3''' අතුරින් '''$1''' ප්‍රතිඵලය| '''$3''' අතුරින් '''$1 - $2''' ප්‍රතිඵලයන් }}",
+'showingresultsheader' => "'''$4''' සඳහා {{PLURAL:$5| '''$3''' අතුරින් '''$1''' ප්‍රතිඵලය| '''$3''' අතුරින් '''$1 - $2''' ප්‍රතිඵලයන්}}",
 'nonefound' => "'''සටහන''': පෙරනිමියෙන් ගවේෂණය වන්නේ සමහරක් නාමඅවකාශ පමණි.
 ඔබ‍ගේ විමසුමට ''all:'' උපසර්ගය යෙදීම මගින් සියළු අන්තර්ගතය ගවේෂණයට ඉඩ සැලසීම අත්හදා බලන්න (සාකච්ඡා පිටු, සැකිලි, ආදියද ඇතුළුව), නැතහොත්, උපසර්ගය ලෙස අපේක්‍ෂිත නාමඅවකාශය භාවිතා කරන්න.",
 'search-nonefound' => 'විමසුම හා ගැලපෙන ප්‍රතිඵල කිසිවක් නොමැත.',
@@ -1342,7 +1342,7 @@ HTML ටැගයන් පිරික්සන්න.',
 'email' => 'විද්‍යුත් තැපෑල',
 'prefs-help-realname' => 'සැබෑ නාමය හෙළි කිරීම වෛකල්පිකයි.
 ඔබ විසින් එය හෙළි කල හොත්, ඔබගේ කෘතීන් සඳහා ඔබහට කතෘ-බුහුමන් පිරිනැමීමට එය භාවිතා කරනු ඇත.',
-'prefs-help-email' => 'විද්‍යුත් ලිපිනය අත්‍යාවශ්‍ය නොවේ, එහෙත් ඔබගේ මුර පදය අමතක වූ විටෙක එය යලි සැකසීමට නම් විද්‍යුත් ලිපිනයක් දී තිබිය යුතුය.',
+'prefs-help-email' => 'à·\80à·\92දà·\8aâ\80\8dයà·\94තà·\8a à¶­à·\90පà·\90ලà·\8a à¶½à·\92පà·\92නය à¶\85තà·\8aâ\80\8dයà·\8fà·\80à·\81à·\8aâ\80\8dය à¶±à·\9cà·\80à·\9a, à¶\91à·\84à·\99තà·\8a à¶\94බà¶\9cà·\9a à¶¸à·\94ර à¶´à¶¯à¶º à¶\85මතà¶\9a à·\80à·\96 à·\80à·\92ටà·\99à¶\9a à¶\91ය à¶ºà¶½à·\92 à·\83à·\90à¶\9aà·\83à·\93මට à¶±à¶¸à·\8a à·\80à·\92දà·\8aâ\80\8dයà·\94තà·\8a à¶½à·\92පà·\92නයà¶\9aà·\8a à¶¯à·\93 à¶­à·\92බà·\92ය à¶ºà·\94තà·\94ය.',
 'prefs-help-email-others' => 'ඔබගේ පරිශීලක හෝ පරිශීලක සාකච්ඡා පිටුවෙහි සබැඳියක් ඔස්සේ විද්‍යුත් තැපෑල මගින් අනෙක් අයට ඔබව සම්බන්ධ කර ගැනීම පිණිස තේරිමක් සිදු කල හැක.
 අනෙකුත් පරිශීලකයන් ඔබව අමතන විට ඔබගේ විද්‍යුත් තැපැල් ලිපිනය හෙලිදරවු නොකෙරේ.',
 'prefs-help-email-required' => 'විද්‍යුත්-ලිපිනය අවශ්‍යයි.',
@@ -1526,7 +1526,7 @@ HTML ටැගයන් පිරික්සන්න.',
 'recentchanges-label-minor' => 'මෙය සුළු සංස්කරණයකි',
 'recentchanges-label-bot' => 'මෙය රොබෝවක් විසින් කරන ලද සංස්කරණයකි',
 'recentchanges-label-unpatrolled' => 'මෙම සංස්කරණය තවම විමර්ශනය කර නොමැත',
-'rcnote' => "$4 දින, $5 වන තෙක්, අවසන් {{PLURAL:$2|දිනදී|දින '''$2''' තුලදී}} සිදුවී ඇති, {{PLURAL:$1| '''1''' ක් වෙනස|අවසන් වෙනස්වීම් '''$1'''  }} පහත දැක්වේ.",
+'rcnote' => "$4 දින, $5 වන තෙක්, අවසන් {{PLURAL:$2|දිනදී|දින '''$2''' තුලදී}} සිදුවී ඇති, {{PLURAL:$1| '''1''' ක් වෙනස|අවසන් වෙනස්වීම් '''$1'''}} පහත දැක්වේ.",
 'rcnotefrom' => "'''$2''' න් පසු සිදුවී ඇති වෙනස්කම් මෙහි පහත දැක්වේ ('''$1''' ක ප්‍රමාණයක උපරිමයක් පෙන්වා ඇත).",
 'rclistfrom' => '$1 සිට බලපැවැත්වෙන මෑත වෙනස්වීම් පෙන්වන්න',
 'rcshowhideminor' => 'සුළු සංස්කරණ $1',
@@ -1557,13 +1557,13 @@ HTML ටැගයන් පිරික්සන්න.',
 'recentchangeslinked-toolbox' => 'සහසම්බන්ධිත වෙනස්වීම්',
 'recentchangeslinked-title' => '"$1" ආශ්‍රිත වෙනස්කිරීම්',
 'recentchangeslinked-noresult' => 'සලකා බැලූ කාලසීමාවෙහිදී, සබැඳි පිටු වල කිසිදු වෙනසක් සිදුවී නොමැත.',
-'recentchangeslinked-summary' => "විශේෂී ලෙස නිරූපිත පිටුවකට (හෝ විශේෂි ලෙස නිරූපිත ප්‍රවර්ගයක සාමාජීකයන්ට) සබැඳි පිටුවල  මෑතදී සිදුවූ වෙනස්වීම් දැක්වෙන ලැයිස්තුවක් මෙහි දැක්වේ.
-[[Special:Watchlist|ඔබගේ  මුර-ලැයිස්තුවෙහි]] පිටු  '''තදකුරු''' වලින් දක්වා ඇත.",
+'recentchangeslinked-summary' => "විශේෂී ලෙස නිරූපිත පිටුවකට (හෝ විශේෂි ලෙස නිරූපිත ප්‍රවර්ගයක සාමාජීකයන්ට) සබැඳි පිටුවල මෑතදී සිදුවූ වෙනස්වීම් දැක්වෙන ලැයිස්තුවක් මෙහි දැක්වේ.
+[[Special:Watchlist|ඔබගේ  මුර-ලැයිස්තුවෙහි]] පිටු '''තදකුරු''' වලින් දක්වා ඇත.",
 'recentchangeslinked-page' => 'පිටු නාමය:',
 'recentchangeslinked-to' => 'ඒ වෙනුවට දී ඇති පිටුවට සබැඳෙන පිටුවල වෙනස්වීම්  පෙන්වන්න',
 
 # Upload
-'upload' => 'à¶\9cà·\9cනà·\94à·\80à¶\9aà·\8a à¶\8bඩà·\94à¶\9cත à¶\9aà·\92රà·\93ම',
+'upload' => 'à¶\9cà·\9cනà·\94à·\80à¶\9aà·\8a à¶\8bඩà·\94à¶\9cත à¶\9aරනà·\8aන',
 'uploadbtn' => 'ගොනුව උඩුගත කරන්න',
 'reuploaddesc' => 'උඩුගත කිරීම අත්හැරදමා උඩුගත කිරීම් ආකෘති පත්‍රය වෙත යන්න',
 'upload-tryagain' => 'වෙනස් කරන ලද ගොනු විස්තරය ඉදිරිපත් කරන්න',
@@ -2187,7 +2187,7 @@ When filtered by user, only files where that user uploaded the most recent versi
 'notanarticle' => 'අන්තර්ගත පිටුවක් නොවේ',
 'notvisiblerev' => 'සංශෝධනය මකාදමා ඇත',
 'watchnochange' => 'ඔබ විසින් මුරකෙරෙන කිසිදු අයිතමයක් දක්වා ඇති කාල සීමාවෙහිදී  සංස්කරණයට භාජනය වී නොමැත.',
-'watchlist-details' => 'සාකච්ඡා පිටු නොගිණුනු කල, ඔබගේ මුර-ලැයිස්තුවෙහි {{PLURAL:$1|එක් පිටුවක්|පිටු $1 ක්}} ඇත.',
+'watchlist-details' => 'සාකච්ඡා පිටු නොගිණුනු කල, ඔබගේ මුර ලැයිස්තුවෙහි {{PLURAL:$1|එක් පිටුවක්|පිටු $1 ක්}} ඇත.',
 'wlheader-enotif' => '* විද්‍යුත්-තැපැල් දැනුම්දීම සක්‍රීය කෙරිණි.',
 'wlheader-showupdated' => "* ඔබ විසින් ඒවාට අවසන් වරට පිවිසුනු පසුව වෙනස්කෙරුනු පිටු  '''තදකුරු''' වලින් පෙන්වා ඇත",
 'watchmethod-recent' => 'මුර-කෙරෙන පිටු සඳහා මෑත සංස්කරණයන් පරික්‍ෂා කරමින්',
@@ -2195,7 +2195,7 @@ When filtered by user, only files where that user uploaded the most recent versi
 'watchlistcontains' => 'ඔබගේ මුර-ලැයිස්තුවෙහි  {{PLURAL:$1|එක් පිටුවක්|පිටු $1 ක්}} අඩංගුය.',
 'iteminvalidname' => "'$1' අයිතමය පිළිබඳ ගැටළුවක් ඇත, අනීතික නමකි...",
 'wlnote' => "පහත දැක්වෙන්නේ $3, $4 මෙන්, අවසන් {{PLURAL:$2|පැය|පැය '''$2''' }} තුලදී සිදු කෙරී ඇති {{PLURAL:$1|අවසන් වෙනස්වීම්යි |අවසන් වෙනස්වීම්  '''$1''' යි}}.",
-'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
@@ -2458,7 +2458,7 @@ $1',
 'sp-contributions-submit' => 'සොයන්න',
 
 # What links here
-'whatlinkshere' => 'සබැඳි පිටු',
+'whatlinkshere' => 'මà·\99තනට à·\83බà·\90ඳà·\92 à¶´à·\92ටà·\94',
 'whatlinkshere-title' => '"$1" වෙත සබැ‍ඳෙන පිටු',
 'whatlinkshere-page' => 'පිටුව:',
 'linkshere' => "ඉදිරියෙහි දැක්වෙන පිටු, '''[[:$1]]''' වෙත සබැඳෙයි:",
@@ -2844,16 +2844,15 @@ $1 ගේ වාරණයට හේතුව මෙය වේ: "$2"',
 'tooltip-pt-preferences' => 'මගේ අභිරුචි',
 'tooltip-pt-watchlist' => 'වෙනස්වීම් සිදුවී තිබේදැයි යන්න පිලිබඳව ඔබගේ විමසුමට ලක්ව ඇති පිටු ලැයිස්තුව',
 'tooltip-pt-mycontris' => 'ඔබගේ දායකත්වයන් ලැයිස්තුව‍',
-'tooltip-pt-login' => 'පà·\8aâ\80\8dරà·\80à·\92à·\83à·\93ම à·\80ඩà·\8f à¶ºà·\9dà¶\9cà·\8aâ\80\8dයà·\80à·\9a. à¶±à¶¸à·\94තà·\8a à¶\91ය à¶\85නà·\92à·\80à·\8fරà·\8aය à¶±à·\90ත.',
+'tooltip-pt-login' => 'පà·\92à·\80à·\92à·\83à·\93ම à·\80ඩà·\8f à¶ºà·\9dà¶\9cà·\8aâ\80\8dය à·\80à·\9a. à¶±à¶¸à·\94තà·\8a, à¶\91ය à¶\85නà·\92à·\80à·\8fරà·\8aය à¶±à·\90ත',
 'tooltip-pt-anonlogin' => 'එය අවශ්‍ය‍යෙන් කල යුත්තක් ‍නොවුනද, ප්‍රවිෂ්ට වීම සඳහා ඔබ ධෛර්යමත් කරනු ලැබේ.',
 'tooltip-pt-logout' => 'නික්මීම',
 'tooltip-ca-talk' => 'අන්තර්ගත පිටුව පිළිබඳ සාකච්ඡාව',
-'tooltip-ca-edit' => 'ඔබ‍ට මෙම පිටුව සංස්කරණය කල හැක.
-සුරැකීමට පෙර කරුණාකර පෙරදසුන බොත්තම භාවිතා කරන්න.',
+'tooltip-ca-edit' => 'ඔබ‍ට මෙම පිටුව සංස්කරණය කල හැක. සුරැකීමට පෙර කරුණාකර පෙරදසුන බොත්තම භාවිතා කරන්න',
 'tooltip-ca-addsection' => 'නව ඡේදයක් අරඹන්න',
 'tooltip-ca-viewsource' => 'මෙම පිටුව ආරක්‍ෂණය කොට ඇත.
 ඔබට එහි මූලාශ්‍රය නැරඹිය හැක.',
-'tooltip-ca-history' => 'මà·\99ම à¶´à·\92ටà·\94à·\80à·\9a à¶´à·\99ර à\85නà·\94à·\80à·\8fදයනà·\8a.',
+'tooltip-ca-history' => 'මà·\99ම à¶´à·\92ටà·\94à·\80à·\9a à¶´à·\99ර à·\83à¶\82à·\81à·\9dධනයනà·\8a',
 'tooltip-ca-protect' => 'මෙම පිටුව ආරක්‍ෂණය කරන්න',
 'tooltip-ca-unprotect' => 'මෙම පිටුවෙහි ආරක්ෂණ තත්වය වෙනස් කරන්න',
 'tooltip-ca-delete' => 'මේ පිටුව මකන්න',
@@ -2870,7 +2869,7 @@ $1 ගේ වාරණයට හේතුව මෙය වේ: "$2"',
 'tooltip-n-portal' => 'ව්‍යාපෘති පිළිබඳ, ඔබට කල හැක්කේ කුමක්ද, තොරතුරු සොයාගත හැක්කේ කොතැනද',
 'tooltip-n-currentevents' => 'කාලීන සිදුවීම් පිළිබඳ පසුබිම් තොරතුරු සොයා දැනගන්න',
 'tooltip-n-recentchanges' => 'විකියෙහි මෑත වෙනස්කිරීම් ලැයිස්තුවක්',
-'tooltip-n-randompage' => 'à¶\85à·\84ඹà·\94 à¶´à·\92ටà·\94à·\80à¶\9aà·\8a à¶½à·\9dඩà·\8aකරන්න',
+'tooltip-n-randompage' => 'à¶\85à·\84ඹà·\94 à¶´à·\92ටà·\94à·\80à¶\9aà·\8a à¶´à·\96රණය කරන්න',
 'tooltip-n-help' => 'සොයා දැනගත හැකි තැන',
 'tooltip-t-whatlinkshere' => 'මෙය හා සබැ‍ඳෙන සියළු විකි පිටු ලැයිස්තුව',
 'tooltip-t-recentchangeslinked' => 'මෙම පිටුව හා සබැඳි පිටුවල ‍නව වෙනස්වීම්',
@@ -3004,7 +3003,7 @@ $1',
 'file-info' => 'ගොනු විශාලත්වය: $1, MIME වර්ගය: $2',
 'file-info-size' => '$1 × $2 පික්සල, ගොනු විශාලත්වය: $3, MIME ශෛලිය: $4',
 'file-info-size-pages' => '$1 × $2 පික්සල, ගොනු තරම: $3, MIME වර්ගය: $4, $5 {{PLURAL:$5|පිටුව|පිටු}}',
-'file-nohires' => 'මෙයට ඉහල විසර්ජනයක් (resolution) දක්වා එළඹිය නොහැක.',
+'file-nohires' => 'මෙයට ඉහල විසර්ජනයක් දක්වා එළඹිය නොහැක.',
 'svg-long-desc' => 'SVG ගොනුව, නාමමාත්‍රිකව $1 × $2 පික්සල්, ගොනු විශාලත්වය: $3',
 'show-big-image' => 'පූර්ණ විභේදනය',
 'show-big-image-preview' => 'මෙම පෙරදසුනෙහි තරම: $1.',
@@ -3087,7 +3086,7 @@ Variants for Chinese language
 'variantname-tg' => 'tg',
 
 # Metadata
-'metadata' => 'පාරදත්ත (Metadata)',
+'metadata' => 'පාරදත්ත',
 'metadata-help' => 'සමහරවිට ඩිජිටල් කැමරාවක් හෝ ස්කෑනරයක් හෝ භාවිතයෙන්, නිමැවා හෝ සංඛ්‍යාංකකරණය (ඩිජිටල්කරණය) කොට එක් කල , අමතර තොරතුරු මෙම ගොනුවේ අඩංගුය.
 ගොනුව මුලින්ම පැවැති තත්ත්වයෙහි සිට විකරණය කොට තිබේ නම්, සමහරක් තොරතුරු විකරිත ගොනුව පූර්ණ වශයෙන් පිළිඹිමු නොකරනු ඇත.',
 'metadata-expand' => 'විස්තීරණය කරන ලද විස්තර පෙන්වන්න',
@@ -3095,14 +3094,14 @@ Variants for Chinese language
 'metadata-fields' => 'Image metadata fields listed in this message will be included on image page display when the metadata table is collapsed.
 Others will be hidden by default.
 * make
-* model
+* මාදිලිය
 * datetimeoriginal
 * exposuretime
 * fnumber
 * isospeedratings
 * focallength
-* artist
-* copyright
+* කලාකරු
+* ප්‍රකාශන හිමිකම
 * imagedescription
 * gpslatitude
 * gpslongitude
@@ -3684,8 +3683,8 @@ This confirmation code will expire at $4.',
 
 # Watchlist editing tools
 'watchlisttools-view' => 'අදාල වෙනස්වීම් නරඹන්න',
-'watchlisttools-edit' => 'මුර-ලැයිස්තුව නැරඹීම හා සංස්කරණය',
-'watchlisttools-raw' => 'නොනිමි මුර-ලැයිස්තුව සංස්කරණය කරන්න',
+'watchlisttools-edit' => 'මුර ලැයිස්තුව නැරඹීම හා සංස්කරණය',
+'watchlisttools-raw' => 'නොනිමි මුර ලැයිස්තුව සංස්කරණය කරන්න',
 
 # Iranian month names
 'iranian-calendar-m1' => 'ෆාර්වාදීන්',
@@ -3751,7 +3750,7 @@ This confirmation code will expire at $4.',
 
 # Core parser functions
 'unknown_extension_tag' => 'අඥාත ප්‍රසර්ජන ටැගය "$1"',
-'duplicate-defaultsort' => 'අවවාදයයි: "$2" පෙරනිමි සුබෙදුම් යතුර විසින් ‍පූර්ව පෙරනිමි සුබෙදුම් යතුර  වූ  "$1" අතික්‍රමණය කරයි.',
+'duplicate-defaultsort' => '\'\'\'අවවාදයයි:\'\'\' "$2" පෙරනිමි සුබෙදුම් යතුර විසින් ‍පූර්ව පෙරනිමි සුබෙදුම් යතුර වූ "$1" අතික්‍රමණය කරයි.',
 
 # Special:Version
 'version' => 'අනුවාදය',
index 44c5218..50e5730 100644 (file)
@@ -179,69 +179,69 @@ $bookstoreList = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#presmeruj', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__BEZOBSAHU__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__BEZGALÉRIE__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__VYNÚTIŤOBSAH__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__OBSAH__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__NEUPRAVOVAŤSEKCIE__', '__NOEDITSECTION__' ),
-       'currentmonth'            => array( '1', 'AKTUÁLNYMESIAC', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonthname'        => array( '1', 'NÁZOVAKTUÁLNEHOMESIACA', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'NÁZOVAKTUÁLNEHOMESIACAGEN', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'NÁZOVAKTUÁLNEHOMESIACASKRATKA', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'AKTUÁLNYDEŇ', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'AKTUÁLNYDEŇ2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'NÁZOVAKTUÁLNEHODŇA', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'AKTUÁLNYROK', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'AKTUÁLNYČAS', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'AKTUÁLNAHODINA', 'CURRENTHOUR' ),
-       'numberofpages'           => array( '1', 'POČETSTRÁNOK', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'POČETČLÁNKOV', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'POČETSÚBOROV', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'POČETPOUŽÍVATEĽOV', 'NUMBEROFUSERS' ),
-       'numberofedits'           => array( '1', 'POČETÚPRAV', 'NUMBEROFEDITS' ),
-       'pagename'                => array( '1', 'NÁZOVSTRÁNKY', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'NÁZOVSTRÁNKYE', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'MENNÝPRIESTOR', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'MENNÝPRIESTORE', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'DISKUSNÝPRIESTOR', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'DISKUSNÝPRIESTORE', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'PRIESTORČLÁNKOV', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'PRIESTORČLÁNKOVE', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'PLNÝNÁZOVSTRÁNKY', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'PLNÝNÁZOVSTRÁNKYE', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'NÁZOVPODSTRÁNKY', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'NÁZOVPODSTRÁNKYE', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'NÁZOVZÁKLADNEJSTRÁNKY', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'NÁZOVZÁKLADNEJSTRÁNKYE', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'NÁZOVDISKUSNEJSTRÁNKY', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'NÁZOVDISKUSNEJSTRÁNKYE', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'NÁZOVČLÁNKU', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'subjectpagenamee'        => array( '1', 'NÁZOVČLÁNKUE', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
-       'msg'                     => array( '0', 'SPRÁVA:', 'MSG:' ),
-       'subst'                   => array( '0', 'NAHR:', 'SUBST:' ),
-       'img_thumbnail'           => array( '1', 'náhľad', 'náhľadobrázka', 'thumbnail', 'thumb' ),
-       'img_right'               => array( '1', 'vpravo', 'right' ),
-       'img_left'                => array( '1', 'vľavo', 'left' ),
-       'img_none'                => array( '1', 'žiadny', 'none' ),
-       'img_width'               => array( '1', '$1bod', '$1px' ),
-       'img_center'              => array( '1', 'stred', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'rám', 'framed', 'enframed', 'frame' ),
-       'img_border'              => array( '1', 'okraj', 'border' ),
-       'sitename'                => array( '1', 'NÁZOVLOKALITY', 'SITENAME' ),
-       'ns'                      => array( '0', 'MP:', 'NS:' ),
-       'servername'              => array( '0', 'NÁZOVSERVERA', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'CESTAKUSKRIPTU', 'SCRIPTPATH' ),
-       'grammar'                 => array( '0', 'GRAMATIKA:', 'GRAMMAR:' ),
-       'currentweek'             => array( '1', 'AKTUÁLNYTÝŽDEŇ', 'CURRENTWEEK' ),
-       'currentversion'          => array( '1', 'AKTUÁLNAVERZIA', 'CURRENTVERSION' ),
-       'language'                => array( '0', '#JAZYK:', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', 'JAZYKOBSAHU', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'numberofadmins'          => array( '1', 'POČETSPRÁVCOV', 'NUMBEROFADMINS' ),
-       'filepath'                => array( '0', 'CESTAKSÚBORU:', 'FILEPATH:' ),
-       'hiddencat'               => array( '1', '__SKRYTÁKATEGÓRIA__', '__SKRYTÁKAT__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'STRÁNOKVKATEGÓRII', 'STRÁNOKVKAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'VEĽKOSŤSTRÁNKY', 'PAGESIZE' ),
+       'redirect'                  => array( '0', '#presmeruj', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__BEZOBSAHU__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__BEZGALÉRIE__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__VYNÚTIŤOBSAH__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__OBSAH__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__NEUPRAVOVAŤSEKCIE__', '__NOEDITSECTION__' ),
+       'currentmonth'              => array( '1', 'AKTUÁLNYMESIAC', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonthname'          => array( '1', 'NÁZOVAKTUÁLNEHOMESIACA', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'NÁZOVAKTUÁLNEHOMESIACAGEN', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'NÁZOVAKTUÁLNEHOMESIACASKRATKA', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'AKTUÁLNYDEŇ', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'AKTUÁLNYDEŇ2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'NÁZOVAKTUÁLNEHODŇA', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'AKTUÁLNYROK', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'AKTUÁLNYČAS', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'AKTUÁLNAHODINA', 'CURRENTHOUR' ),
+       'numberofpages'             => array( '1', 'POČETSTRÁNOK', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'POČETČLÁNKOV', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'POČETSÚBOROV', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'POČETPOUŽÍVATEĽOV', 'NUMBEROFUSERS' ),
+       'numberofedits'             => array( '1', 'POČETÚPRAV', 'NUMBEROFEDITS' ),
+       'pagename'                  => array( '1', 'NÁZOVSTRÁNKY', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'NÁZOVSTRÁNKYE', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'MENNÝPRIESTOR', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'MENNÝPRIESTORE', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'DISKUSNÝPRIESTOR', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'DISKUSNÝPRIESTORE', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'PRIESTORČLÁNKOV', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'PRIESTORČLÁNKOVE', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'PLNÝNÁZOVSTRÁNKY', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'PLNÝNÁZOVSTRÁNKYE', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'NÁZOVPODSTRÁNKY', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'NÁZOVPODSTRÁNKYE', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'NÁZOVZÁKLADNEJSTRÁNKY', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'NÁZOVZÁKLADNEJSTRÁNKYE', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'NÁZOVDISKUSNEJSTRÁNKY', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'NÁZOVDISKUSNEJSTRÁNKYE', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'NÁZOVČLÁNKU', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'          => array( '1', 'NÁZOVČLÁNKUE', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+       'msg'                       => array( '0', 'SPRÁVA:', 'MSG:' ),
+       'subst'                     => array( '0', 'NAHR:', 'SUBST:' ),
+       'img_thumbnail'             => array( '1', 'náhľad', 'náhľadobrázka', 'thumbnail', 'thumb' ),
+       'img_right'                 => array( '1', 'vpravo', 'right' ),
+       'img_left'                  => array( '1', 'vľavo', 'left' ),
+       'img_none'                  => array( '1', 'žiadny', 'none' ),
+       'img_width'                 => array( '1', '$1bod', '$1px' ),
+       'img_center'                => array( '1', 'stred', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'rám', 'framed', 'enframed', 'frame' ),
+       'img_border'                => array( '1', 'okraj', 'border' ),
+       'sitename'                  => array( '1', 'NÁZOVLOKALITY', 'SITENAME' ),
+       'ns'                        => array( '0', 'MP:', 'NS:' ),
+       'servername'                => array( '0', 'NÁZOVSERVERA', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'CESTAKUSKRIPTU', 'SCRIPTPATH' ),
+       'grammar'                   => array( '0', 'GRAMATIKA:', 'GRAMMAR:' ),
+       'currentweek'               => array( '1', 'AKTUÁLNYTÝŽDEŇ', 'CURRENTWEEK' ),
+       'currentversion'            => array( '1', 'AKTUÁLNAVERZIA', 'CURRENTVERSION' ),
+       'language'                  => array( '0', '#JAZYK:', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'JAZYKOBSAHU', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'numberofadmins'            => array( '1', 'POČETSPRÁVCOV', 'NUMBEROFADMINS' ),
+       'filepath'                  => array( '0', 'CESTAKSÚBORU:', 'FILEPATH:' ),
+       'hiddencat'                 => array( '1', '__SKRYTÁKATEGÓRIA__', '__SKRYTÁKAT__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'STRÁNOKVKATEGÓRII', 'STRÁNOKVKAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'VEĽKOSŤSTRÁNKY', 'PAGESIZE' ),
 );
 
 $namespaceNames = array(
index 42c9f54..7f173aa 100644 (file)
@@ -113,44 +113,44 @@ $specialPageAliases = array(
 );
 
 $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', '$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=$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' ),
-       'img_super'               => array( '1', 'nad', 'nadpisano', 'super', 'sup' ),
-       'img_top'                 => array( '1', 'vrh', 'top' ),
-       'img_text_top'            => array( '1', 'vrh-besedila', 'text-top' ),
-       'img_bottom'              => array( '1', 'dno', 'bottom' ),
-       'img_text_bottom'         => array( '1', 'dno-besedila', 'text-bottom' ),
-       'sitename'                => array( '1', 'IMESTRANI', 'SITENAME' ),
-       'server'                  => array( '0', 'STREZNIK', 'SERVER' ),
-       'grammar'                 => array( '0', 'SKLON:', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'SPOL:', 'GENDER:' ),
-       'plural'                  => array( '0', 'MNOZINA:', 'PLURAL:' ),
-       'language'                => array( '0', '#JEZIK:', '#LANGUAGE:' ),
-       'tag'                     => array( '0', 'oznaka', 'tag' ),
-       'hiddencat'               => array( '1', '__SKRITAKATEGORIJA__', '__HIDDENCAT__' ),
-       'index'                   => array( '1', '__KAZALO__', '__INDEX__' ),
-       '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' ),
+       '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', '$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=$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' ),
+       'img_super'                 => array( '1', 'nad', 'nadpisano', 'super', 'sup' ),
+       'img_top'                   => array( '1', 'vrh', 'top' ),
+       'img_text_top'              => array( '1', 'vrh-besedila', 'text-top' ),
+       'img_bottom'                => array( '1', 'dno', 'bottom' ),
+       'img_text_bottom'           => array( '1', 'dno-besedila', 'text-bottom' ),
+       'sitename'                  => array( '1', 'IMESTRANI', 'SITENAME' ),
+       'server'                    => array( '0', 'STREZNIK', 'SERVER' ),
+       'grammar'                   => array( '0', 'SKLON:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'SPOL:', 'GENDER:' ),
+       'plural'                    => array( '0', 'MNOZINA:', 'PLURAL:' ),
+       'language'                  => array( '0', '#JEZIK:', '#LANGUAGE:' ),
+       'tag'                       => array( '0', 'oznaka', 'tag' ),
+       'hiddencat'                 => array( '1', '__SKRITAKATEGORIJA__', '__HIDDENCAT__' ),
+       'index'                     => array( '1', '__KAZALO__', '__INDEX__' ),
+       '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';
index 658b833..2b71faf 100644 (file)
@@ -128,77 +128,77 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#RIDREJTO', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__JOTP__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__JOGALERI__', '__NOGALLERY__' ),
-       'toc'                     => array( '0', '__TP__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__JOREDAKTIMSEKSIONI__', '__NOEDITSECTION__' ),
-       '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' ),
-       'currentdayname'          => array( '1', 'EMRIIDITËSOT', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'SIVJET', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'KOHATANI', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'ORATANI', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'MUAJILOKAL', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonthname'          => array( '1', 'EMRIIMUAJITLOKAL', 'LOCALMONTHNAME' ),
-       'localday'                => array( '1', 'DITALOKALE', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'DITALOKALE2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'EMRIIDITËSLOKALE', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'VITILOKAL', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'KOHALOKALE', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'ORALOKALE', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'NUMRIFAQEVE', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'NUMRIIARTIKUJVE', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'NUMRIISKEDAVE', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'NUMRIIPËRDORUESVE', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'NUMRIIPËRDORUESVEAKTIVË', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'NUMRIREDAKTIMEVE', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'NUMRIISHIKIMEVE', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'EMRIFAQES', 'PAGENAME' ),
-       'namespace'               => array( '1', 'HAPËSIRA', 'NAMESPACE' ),
-       'fullpagename'            => array( '1', 'EMRIIPLOTËIFAQES', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'EMRIIPLOTËIFAQESE', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'EMRIINËNFAQES', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'EMRIINËNFAQESE', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'EMRIIFAQESBAZË', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'EMRIIFAQESBAZËE', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'EMRIIFAQESSËDISKUTIMIT', 'TALKPAGENAME' ),
-       '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', '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' ),
-       'img_center'              => array( '1', 'qendër', 'qendrore', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'i_kornizuar', 'pa_kornizë', 'kornizë', 'framed', 'enframed', 'frame' ),
-       'img_page'                => array( '1', 'faqja=$1', 'faqja $1', 'page=$1', 'page $1' ),
-       'img_upright'             => array( '1', 'lartdjathtas', 'lartdjathtas=$1', 'lartdjathtas $1', 'upright', 'upright=$1', 'upright $1' ),
-       'img_border'              => array( '1', 'kufi', 'border' ),
-       'img_baseline'            => array( '1', 'linjabazë', 'baseline' ),
-       'img_sub'                 => array( '1', 'nën', 'sub' ),
-       'img_text_top'            => array( '1', 'tekst-top', 'text-top' ),
-       'img_middle'              => array( '1', 'mes', 'middle' ),
-       'img_bottom'              => array( '1', 'fund', 'bottom' ),
-       'img_text_bottom'         => array( '1', 'tekst-fund', 'text-bottom' ),
-       'img_link'                => array( '1', 'lidhje=$1', 'link=$1' ),
-       'sitename'                => array( '1', 'EMRIISAJTIT', 'SITENAME' ),
-       'localurl'                => array( '0', 'URLLOKALE', 'LOCALURL:' ),
-       'server'                  => array( '0', 'SERVERI', 'SERVER' ),
-       'servername'              => array( '0', 'EMRIISERVERIT', 'SERVERNAME' ),
-       'grammar'                 => array( '0', 'GRAMATIKA:', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'GJINIA:', 'GENDER:' ),
-       'currentweek'             => array( '1', 'JAVAMOMENTALE', 'CURRENTWEEK' ),
-       'plural'                  => array( '0', 'SHUMËS:', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'URLEPLOTË', 'FULLURL:' ),
-       'language'                => array( '0', '#GJUHA:', '#LANGUAGE:' ),
-       'numberofadmins'          => array( '1', 'NUMRIIADMINISTRUESVE', 'NUMBEROFADMINS' ),
-       'special'                 => array( '0', 'speciale', 'special' ),
-       'hiddencat'               => array( '1', '__KATEGORIEFSHEHUR__', '__HIDDENCAT__' ),
-       'pagesize'                => array( '1', 'MADHËSIAEFAQES', 'PAGESIZE' ),
+       'redirect'                  => array( '0', '#RIDREJTO', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__JOTP__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__JOGALERI__', '__NOGALLERY__' ),
+       'toc'                       => array( '0', '__TP__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__JOREDAKTIMSEKSIONI__', '__NOEDITSECTION__' ),
+       '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' ),
+       'currentdayname'            => array( '1', 'EMRIIDITËSOT', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'SIVJET', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'KOHATANI', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'ORATANI', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'MUAJILOKAL', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonthname'            => array( '1', 'EMRIIMUAJITLOKAL', 'LOCALMONTHNAME' ),
+       'localday'                  => array( '1', 'DITALOKALE', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'DITALOKALE2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'EMRIIDITËSLOKALE', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'VITILOKAL', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'KOHALOKALE', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'ORALOKALE', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'NUMRIFAQEVE', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'NUMRIIARTIKUJVE', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'NUMRIISKEDAVE', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'NUMRIIPËRDORUESVE', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'NUMRIIPËRDORUESVEAKTIVË', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'NUMRIREDAKTIMEVE', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'NUMRIISHIKIMEVE', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'EMRIFAQES', 'PAGENAME' ),
+       'namespace'                 => array( '1', 'HAPËSIRA', 'NAMESPACE' ),
+       'fullpagename'              => array( '1', 'EMRIIPLOTËIFAQES', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'EMRIIPLOTËIFAQESE', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'EMRIINËNFAQES', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'EMRIINËNFAQESE', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'EMRIIFAQESBAZË', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'EMRIIFAQESBAZËE', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'EMRIIFAQESSËDISKUTIMIT', 'TALKPAGENAME' ),
+       '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', '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' ),
+       'img_center'                => array( '1', 'qendër', 'qendrore', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'i_kornizuar', 'pa_kornizë', 'kornizë', 'framed', 'enframed', 'frame' ),
+       'img_page'                  => array( '1', 'faqja=$1', 'faqja $1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', 'lartdjathtas', 'lartdjathtas=$1', 'lartdjathtas $1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_border'                => array( '1', 'kufi', 'border' ),
+       'img_baseline'              => array( '1', 'linjabazë', 'baseline' ),
+       'img_sub'                   => array( '1', 'nën', 'sub' ),
+       'img_text_top'              => array( '1', 'tekst-top', 'text-top' ),
+       'img_middle'                => array( '1', 'mes', 'middle' ),
+       'img_bottom'                => array( '1', 'fund', 'bottom' ),
+       'img_text_bottom'           => array( '1', 'tekst-fund', 'text-bottom' ),
+       'img_link'                  => array( '1', 'lidhje=$1', 'link=$1' ),
+       'sitename'                  => array( '1', 'EMRIISAJTIT', 'SITENAME' ),
+       'localurl'                  => array( '0', 'URLLOKALE', 'LOCALURL:' ),
+       'server'                    => array( '0', 'SERVERI', 'SERVER' ),
+       'servername'                => array( '0', 'EMRIISERVERIT', 'SERVERNAME' ),
+       'grammar'                   => array( '0', 'GRAMATIKA:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'GJINIA:', 'GENDER:' ),
+       'currentweek'               => array( '1', 'JAVAMOMENTALE', 'CURRENTWEEK' ),
+       'plural'                    => array( '0', 'SHUMËS:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'URLEPLOTË', 'FULLURL:' ),
+       'language'                  => array( '0', '#GJUHA:', '#LANGUAGE:' ),
+       'numberofadmins'            => array( '1', 'NUMRIIADMINISTRUESVE', 'NUMBEROFADMINS' ),
+       'special'                   => array( '0', 'speciale', 'special' ),
+       'hiddencat'                 => array( '1', '__KATEGORIEFSHEHUR__', '__HIDDENCAT__' ),
+       'pagesize'                  => array( '1', 'MADHËSIAEFAQES', 'PAGESIZE' ),
 );
 
 $datePreferences = array(
index 9dee5c6..cc1894a 100644 (file)
@@ -246,150 +246,150 @@ $dateFormats = array(
 
 /* NOT USED IN STABLE VERSION */
 $magicWords = array(
-       'redirect'                => array( '0', '#Преусмери', '#преусмери', '#ПРЕУСМЕРИ', '#Преусмјери', '#преусмјери', '#ПРЕУСМЈЕРИ', '#redirect', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__БЕЗСАДРЖАЈА__', '__БЕЗ_САДРЖАЈА__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__БЕЗГАЛЕРИЈЕ__', '__БЕЗ_ГАЛЕРИЈЕ__', '__NOGALLERY__' ),
-       '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', 'ТРЕНУТНИ_МЕСЕЦ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', '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', 'ЛОКАЛНИМЕСЕЦ2', 'ЛОКАЛНИ_МЕСЕЦ2', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'ИМЕЛОКАЛНОГМЕСЕЦА', 'ИМЕ_ЛОКАЛНОГ_МЕСЕЦА', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'ЛОКАЛНИМЕСЕЦГЕН', 'ЛОКАЛНИ_МЕСЕЦ_ГЕН', 'LOCALMONTHNAMEGEN' ),
-       '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' ),
-       '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' ),
-       'pagename'                => array( '1', 'ИМЕСТРАНИЦЕ', 'ИМЕ_СТРАНИЦЕ', 'СТРАНИЦА', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'ИМЕНАСТРАНИЦА', 'ИМЕНА_СТРАНИЦА', 'СТРАНИЦЕ', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'ИМЕНСКИПРОСТОР', 'ИМЕНСКИ_ПРОСТОР', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'ИМЕНСКИПРОСТОРИ', 'ИМЕНСКИ_ПРОСТОРИ', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'РАЗГОВОР', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'РАЗГОВОРИ', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'ИМЕНСКИПРОСТОРЧЛАНКА', 'ИМЕНСКИ_ПРОСТОР_ЧЛАНКА', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'ИМЕНСКИПРОСТОРЧЛАНАКА', 'ИМЕНСКИ_ПРОСТОР_ЧЛАНАКА', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'ПУНОИМЕСТРАНИЦЕ', 'ПУНОИМЕСТРАНЕ', 'ПУНО_ИМЕ_СТРАНИЦЕ', 'ПУНО_ИМЕ_СТРАНЕ', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'ПУНАИМЕНАСТРАНИЦА', 'ПУНАИМЕНАСТРАНА', 'ПУНА_ИМЕНА_СТРАНИЦА', 'ПУНА_ИМЕНА_СТРАНА', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'ИМЕПОДСТРАНИЦЕ', 'ИМЕПОДСТРАНЕ', 'ИМЕ_ПОДСТРАНИЦЕ', 'ИМЕ_ПОДСТРАНЕ', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'ИМЕНАПОДСТРАНИЦА', 'ИМЕНАПОДСТРАНА', 'ИМЕНА_ПОДСТРАНИЦА', 'ИМЕНА_ПОДСТРАНА', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'ИМЕОСНОВЕ', 'ИМЕ_ОСНОВЕ', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'ИМЕНАОСНОВА', 'ИМЕНА_ОСНОВА', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'ИМЕРАЗГОВОРА', 'ИМЕ_РАЗГОВОРА', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'ИМЕНАРАЗГОВОРА', 'ИМЕНА_РАЗГОВОРА', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'ИМЕЧЛАНКА', 'ИМЕ_ЧЛАНКА', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       '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' ),
-       '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', 'страница=$1', 'страна=$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' ),
-       '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:' ),
-       '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', '__БЕЗКН__', '__BEZKN__', '__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', 'ИДРЕВИЗИЈЕ', 'ИД_РЕВИЗИЈЕ', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'ДАНИЗМЕНЕ', 'ДАН_ИЗМЕНЕ', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'ДАНИЗМЕНЕ2', 'ДАН_ИЗМЕНЕ2', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'МЕСЕЦИЗМЕНЕ', 'МЕСЕЦ_ИЗМЕНЕ', 'REVISIONMONTH' ),
-       'revisionmonth1'          => array( '1', 'МЕСЕЦИЗМЕНЕ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', 'ПУНУРЛЕ:', 'ЦЕЛЕАДРЕСЕ', 'ЦЕЛЕ_АДРЕСЕ', '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' ),
-       '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' ),
-       'contentlanguage'         => array( '1', 'ЈЕЗИКСАДРЖАЈА', 'ЈЕЗИК_САДРЖАЈА', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'        => array( '1', 'СТРАНИЦАУИМЕНСКОМПРОСТОРУ', 'СТРАНАУИМЕНСКОМПРОСТОРУ', 'СТРАНИЦА_У_ИМЕНСКОМ_ПРОСТОРУ', 'СТРАНА_У_ИМЕНСКОМ_ПРОСТОРУ', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'          => array( '1', 'БРОЈАДМИНА', 'БРОЈ_АДМИНА', 'NUMBEROFADMINS' ),
-       'padleft'                 => array( '0', 'ПОРАВНАЈЛЕВО', 'ПОРАВНАЈ_ЛЕВО', 'PADLEFT' ),
-       'padright'                => array( '0', 'ПОРАВНАЈДЕСНО', 'ПОРАВНАЈ_ДЕСНО', 'PADRIGHT' ),
-       'special'                 => array( '0', 'посебно', 'special' ),
-       '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__' ),
-       'numberingroup'           => array( '1', 'БРОЈУГРУПИ', 'БРОЈ_У_ГРУПИ', 'NUMBERINGROUP', 'NUMINGROUP' ),
-       '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' ),
+       'redirect'                  => array( '0', '#Преусмери', '#преусмери', '#ПРЕУСМЕРИ', '#Преусмјери', '#преусмјери', '#ПРЕУСМЈЕРИ', '#redirect', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__БЕЗСАДРЖАЈА__', '__БЕЗ_САДРЖАЈА__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__БЕЗГАЛЕРИЈЕ__', '__БЕЗ_ГАЛЕРИЈЕ__', '__NOGALLERY__' ),
+       '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', 'ТРЕНУТНИ_МЕСЕЦ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', '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', 'ЛОКАЛНИМЕСЕЦ2', 'ЛОКАЛНИ_МЕСЕЦ2', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'ИМЕЛОКАЛНОГМЕСЕЦА', 'ИМЕ_ЛОКАЛНОГ_МЕСЕЦА', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'ЛОКАЛНИМЕСЕЦГЕН', 'ЛОКАЛНИ_МЕСЕЦ_ГЕН', 'LOCALMONTHNAMEGEN' ),
+       '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' ),
+       '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' ),
+       'pagename'                  => array( '1', 'ИМЕСТРАНИЦЕ', 'ИМЕ_СТРАНИЦЕ', 'СТРАНИЦА', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'ИМЕНАСТРАНИЦА', 'ИМЕНА_СТРАНИЦА', 'СТРАНИЦЕ', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'ИМЕНСКИПРОСТОР', 'ИМЕНСКИ_ПРОСТОР', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'ИМЕНСКИПРОСТОРИ', 'ИМЕНСКИ_ПРОСТОРИ', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'РАЗГОВОР', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'РАЗГОВОРИ', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'ИМЕНСКИПРОСТОРЧЛАНКА', 'ИМЕНСКИ_ПРОСТОР_ЧЛАНКА', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'ИМЕНСКИПРОСТОРЧЛАНАКА', 'ИМЕНСКИ_ПРОСТОР_ЧЛАНАКА', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'ПУНОИМЕСТРАНИЦЕ', 'ПУНОИМЕСТРАНЕ', 'ПУНО_ИМЕ_СТРАНИЦЕ', 'ПУНО_ИМЕ_СТРАНЕ', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'ПУНАИМЕНАСТРАНИЦА', 'ПУНАИМЕНАСТРАНА', 'ПУНА_ИМЕНА_СТРАНИЦА', 'ПУНА_ИМЕНА_СТРАНА', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'ИМЕПОДСТРАНИЦЕ', 'ИМЕПОДСТРАНЕ', 'ИМЕ_ПОДСТРАНИЦЕ', 'ИМЕ_ПОДСТРАНЕ', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'ИМЕНАПОДСТРАНИЦА', 'ИМЕНАПОДСТРАНА', 'ИМЕНА_ПОДСТРАНИЦА', 'ИМЕНА_ПОДСТРАНА', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'ИМЕОСНОВЕ', 'ИМЕ_ОСНОВЕ', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'ИМЕНАОСНОВА', 'ИМЕНА_ОСНОВА', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'ИМЕРАЗГОВОРА', 'ИМЕ_РАЗГОВОРА', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'ИМЕНАРАЗГОВОРА', 'ИМЕНА_РАЗГОВОРА', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'ИМЕЧЛАНКА', 'ИМЕ_ЧЛАНКА', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       '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' ),
+       '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', 'страница=$1', 'страна=$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' ),
+       '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:' ),
+       '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', '__БЕЗКН__', '__BEZKN__', '__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', 'ИДРЕВИЗИЈЕ', 'ИД_РЕВИЗИЈЕ', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'ДАНИЗМЕНЕ', 'ДАН_ИЗМЕНЕ', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'ДАНИЗМЕНЕ2', 'ДАН_ИЗМЕНЕ2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'МЕСЕЦИЗМЕНЕ', 'МЕСЕЦ_ИЗМЕНЕ', 'REVISIONMONTH' ),
+       'revisionmonth1'            => array( '1', 'МЕСЕЦИЗМЕНЕ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', 'ПУНУРЛЕ:', 'ЦЕЛЕАДРЕСЕ', 'ЦЕЛЕ_АДРЕСЕ', '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' ),
+       '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' ),
+       'contentlanguage'           => array( '1', 'ЈЕЗИКСАДРЖАЈА', 'ЈЕЗИК_САДРЖАЈА', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', 'СТРАНИЦАУИМЕНСКОМПРОСТОРУ', 'СТРАНАУИМЕНСКОМПРОСТОРУ', 'СТРАНИЦА_У_ИМЕНСКОМ_ПРОСТОРУ', 'СТРАНА_У_ИМЕНСКОМ_ПРОСТОРУ', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', 'БРОЈАДМИНА', 'БРОЈ_АДМИНА', 'NUMBEROFADMINS' ),
+       'padleft'                   => array( '0', 'ПОРАВНАЈЛЕВО', 'ПОРАВНАЈ_ЛЕВО', 'PADLEFT' ),
+       'padright'                  => array( '0', 'ПОРАВНАЈДЕСНО', 'ПОРАВНАЈ_ДЕСНО', 'PADRIGHT' ),
+       'special'                   => array( '0', 'посебно', 'special' ),
+       '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__' ),
+       'numberingroup'             => array( '1', 'БРОЈУГРУПИ', 'БРОЈ_У_ГРУПИ', 'NUMBERINGROUP', 'NUMINGROUP' ),
+       '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' ),
 );
 $separatorTransformTable = array( ',' => '.', '.' => ',' );
 
@@ -663,7 +663,7 @@ $1',
 'retrievedfrom' => 'Преузето из „$1“',
 'youhavenewmessages' => 'Имате $1 ($2).',
 'newmessageslink' => 'нових порука',
-'newmessagesdifflink' => 'последњу измену',
+'newmessagesdifflink' => 'последња измена',
 'youhavenewmessagesfromusers' => 'Имате $1 од {{PLURAL:$3|другог корисника|$3 корисника|$3 корисника}} ($2).',
 'youhavenewmessagesmanyusers' => 'Имате $1 од много корисника ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|нову поруку|нове поруке}}',
@@ -2126,6 +2126,7 @@ $1',
 'shared-repo' => 'заједничко складиште',
 'shared-repo-name-wikimediacommons' => 'Викимедијина остава',
 'filepage.css' => '/* CSS који је постављен овде се налази на страницама за опис датотека, као и на страним викијима */',
+'upload-disallowed-here' => 'Нажалост, не можете да замените ову слику.',
 
 # File reversion
 'filerevert' => 'Врати $1',
@@ -2235,6 +2236,7 @@ $1',
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|бајт|бајта|бајтова}}',
 'ncategories' => '$1 {{PLURAL:$1|категорија|категорије|категорија}}',
+'ninterwikis' => '$1 {{PLURAL:$1|међувики|међувикија|међувикија}}',
 'nlinks' => '$1 {{PLURAL:$1|веза|везе|веза}}',
 'nmembers' => '$1 {{PLURAL:$1|члан|члана|чланова}}',
 'nrevisions' => '$1 {{PLURAL:$1|измена|измене|измена}}',
@@ -2263,6 +2265,7 @@ $1',
 'mostlinkedtemplates' => 'Шаблони с највише веза',
 'mostcategories' => 'Чланци с највише категорија',
 'mostimages' => 'Датотеке с највише веза',
+'mostinterwikis' => 'Странице са највише међувикија',
 'mostrevisions' => 'Странице с највише измена',
 'prefixindex' => 'Све странице с префиксом',
 'prefixindex-namespace' => 'Све странице с предметком (именски простор $1)',
@@ -2412,6 +2415,8 @@ $1',
 'mailnologin' => 'Нема адресе за слање',
 'mailnologintext' => 'Морате бити [[Special:UserLogin|пријављени]] и имати исправну е-адресу у [[Special:Preferences|подешавањима]] да бисте слали е-поруке другим корисницима.',
 'emailuser' => 'Пошаљи е-поруку',
+'emailuser-title-target' => 'Слање е-поруке {{GENDER:$1|кориснику|корисници|кориснику}}',
+'emailuser-title-notarget' => 'Слање е-поруке кориснику',
 'emailpage' => 'Слање е-порука',
 'emailpagetext' => 'Користите овај образац да пошаљете е-поруку овом кориснику.
 Е-адреса коју сте унели у [[Special:Preferences|подешавањима]] ће бити приказана као адреса пошиљаоца, тако да ће прималац поруке моћи да вам одговори.',
@@ -3259,11 +3264,34 @@ $1',
 
 # Info page
 'pageinfo-title' => 'Подаци о „$1“',
+'pageinfo-header-basic' => 'Основни подаци',
 'pageinfo-header-edits' => 'Историја измена',
+'pageinfo-header-restrictions' => 'Заштита странице',
+'pageinfo-header-properties' => 'Својства странице',
+'pageinfo-display-title' => 'Наслов за приказ',
+'pageinfo-default-sort' => 'Подразумевани кључ сортирања',
+'pageinfo-length' => 'Дужина странице (у бајтовима)',
+'pageinfo-article-id' => 'ИД странице',
+'pageinfo-robot-policy' => 'Статус претраживача',
+'pageinfo-robot-index' => 'Може да се попише',
+'pageinfo-robot-noindex' => 'Не може да се попише',
 'pageinfo-views' => 'Број прегледа',
 'pageinfo-watchers' => 'Број надгледача страница',
+'pageinfo-redirects-name' => 'Преусмеравања на страницу',
+'pageinfo-subpages-name' => 'Подстранице ове странице',
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|преусмерење|преусмерења|преусмерења}}; $3 {{PLURAL:$3|непреусмерење|непреусмерења|непреусмерења}})',
+'pageinfo-firstuser' => 'Аутор странице',
+'pageinfo-firsttime' => 'Датум стварања странице',
+'pageinfo-lastuser' => 'Последњи уредник',
+'pageinfo-lasttime' => 'Датум последње измене',
 'pageinfo-edits' => 'Број измена',
 'pageinfo-authors' => 'Број засебних аутора',
+'pageinfo-recent-edits' => 'Број скорашњих измена (у последњих $1)',
+'pageinfo-recent-authors' => 'Број скорашњих засебних аутора',
+'pageinfo-restriction' => 'Заштита странице (<code>{{lcfirst:$1}}</code>)',
+'pageinfo-magic-words' => '{{PLURAL:$1|Магична реч|Магичне речи}} ($1)',
+'pageinfo-hidden-categories' => '{{PLURAL:$1|Сакривена категорија|Сакривене категорије}} ($1)',
+'pageinfo-templates' => '{{PLURAL:$1|Укључени шаблон|Укључени шаблони}} ($1)',
 
 # Skin names
 'skinname-standard' => 'Класично',
@@ -3319,6 +3347,7 @@ $1',
 'file-info-size-pages' => '$1 × $2 пиксела, величина: $3, MIME врста: $4, $5 {{PLURAL:$5|страница|странице|страница}}',
 'file-nohires' => 'Већа резолуција није доступна.',
 'svg-long-desc' => 'SVG датотека, номинално $1 × $2 пиксела, величина: $3',
+'svg-long-desc-animated' => 'Анимирана SVG датотека, номинално: $1 × $2 пиксела, величина: $3',
 'show-big-image' => 'Пуна величина',
 'show-big-image-preview' => 'Величина овог приказа: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Друга резолуција|Друге резолуције}}: $1.',
@@ -3328,6 +3357,8 @@ $1',
 'file-info-png-looped' => 'петља',
 'file-info-png-repeat' => 'поновљено $1 {{PLURAL:$1|пут|пута|пута}}',
 'file-info-png-frames' => '$1 {{PLURAL:$1|кадар|кадра|кадрова}}',
+'file-no-thumb-animation' => "'''Напомена: због техничких ограничења, минијатуре ове датотеке се неће анимирати.'''",
+'file-no-thumb-animation-gif' => "'''Напомена: због техничких ограничења, минијатуре GIF слика високе резолуције као што је ова неће се анимирати.'''",
 
 # Special:NewFiles
 'newimages' => 'Галерија нових датотека',
index a3f7ac1..93234fa 100644 (file)
@@ -158,146 +158,146 @@ $dateFormats = array(
 
 /* NOT USED IN STABLE VERSION */
 $magicWords = array(
-       'redirect'                => array( '0', '#Preusmeri', '#preusmeri', '#PREUSMERI', '#Preusmjeri', '#preusmjeri', '#PREUSMJERI', '#redirect', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__BEZSADRŽAJA__', '__BEZ_SADRŽAJA__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__BEZGALERIJE__', '__BEZ_GALERIJE__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__FORSIRANISADRŽAJ__', '__FORSIRANI_SADRŽAJ__', '__PRIMORANISADRŽAJ__', '__PRIMORANI_SADRŽAJ__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__SADRŽAJ__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__BEZIZMENA__', '__BEZ_IZMENA__', '__BEZIZMJENA__', '__BEZ_IZMJENA__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '__BEZZAGLAVLJA__', '__BEZ_ZAGLAVLJA__', '__NOHEADER__' ),
-       'currentmonth'            => array( '1', 'TRENUTNIMESEC', 'TRENUTNI_MESEC', 'TEKUĆIMESEC', 'TEKUĆI_MESEC', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', 'TRENUTNIMESEC1', 'TRENUTNI_MESEC1', 'TEKUĆIMESEC1', 'TEKUĆI_MESEC1', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', 'TRENUTNIMESECIME', 'IMETEKUĆEGMESECA', 'IME_TEKUĆEG_MESECA', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'TRENUTNIMESECGEN', 'TEKUĆIMESECGEN', 'TEKUĆI_MESEC_GEN', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'TRENUTNIMESECSKR', 'TEKUĆIMESECSKR', 'TEKUĆI_MESEC_SKR', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'TRENUTNIDAN', 'TEKUĆIDAN', 'TEKUĆI_DAN', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'TEKUĆIDAN2', 'TEKUĆI_DAN_2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'TRENUTNIDANIME', 'IMETEKUĆEGDANA', 'IME_TEKUĆEG_DANA', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'TRENUTNAGODINA', 'TEKUĆAGODINA', 'TEKUĆA_GODINA', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'TRENUTNOVREME', 'TEKUĆEVREME', 'TEKUĆE_VREME', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'TEKUĆISAT', 'TEKUĆI_SAT', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'LOKALNIMESEC', 'LOKALNI_MESEC', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', 'LOKALNIMESEC2', 'LOKALNI_MESEC2', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'IMELOKALNOGMESECA', 'IME_LOKALNOG_MESECA', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'LOKALNIMESECGEN', 'LOKALNI_MESEC_GEN', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'LOKALNIMESECSKR', 'LOKALNI_MESEC_SKR', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'LOKALNIDAN', 'LOKALNI_DAN', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'LOKALNIDAN2', 'LOKALNI_DAN2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'IMELOKALNOGDANA', 'IME_LOKALNOG_DANA', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'LOKALNAGODINA', 'LOKALNA_GODINA', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'LOKALNOVREME', 'LOKALNO_VREME', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'LOKALNISAT', 'LOKALNI_SAT', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'BROJSTRANICA', 'BROJ_STRANICA', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'BROJČLANAKA', 'BROJ_ČLANAKA', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'BROJDATOTEKA', 'BROJ_DATOTEKA', 'BROJFAJLOVA', 'BROJ_FAJLOVA', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'BROJKORISNIKA', 'BROJ_KORISNIKA', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'BROJAKTIVNIHKORISNIKA', 'BROJ_AKTIVNIH_KORISNIKA', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'BROJIZMENA', 'BROJ_IZMENA', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'BROJPREGLEDA', 'BROJ_PREGLEDA', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'IMESTRANICE', 'IME_STRANICE', 'STRANICA', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'IMENASTRANICA', 'IMENA_STRANICA', 'STRANICE', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'IMENSKIPROSTOR', 'IMENSKI_PROSTOR', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'IMENSKIPROSTORI', 'IMENSKI_PROSTORI', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'RAZGOVOR', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'RAZGOVORI', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'IMENSKIPROSTORČLANKA', 'IMENSKI_PROSTOR_ČLANKA', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'IMENSKIPROSTORČLANAKA', 'IMENSKI_PROSTOR_ČLANAKA', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'PUNOIMESTRANICE', 'PUNOIMESTRANE', 'PUNO_IME_STRANICE', 'PUNO_IME_STRANE', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'PUNAIMENASTRANICA', 'PUNAIMENASTRANA', 'PUNA_IMENA_STRANICA', 'PUNA_IMENA_STRANA', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'IMEPODSTRANICE', 'IMEPODSTRANE', 'IME_PODSTRANICE', 'IME_PODSTRANE', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'IMENAPODSTRANICA', 'IMENAPODSTRANA', 'IMENA_PODSTRANICA', 'IMENA_PODSTRANA', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'IMEOSNOVE', 'IME_OSNOVE', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'IMENAOSNOVA', 'IMENA_OSNOVA', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'IMERAZGOVORA', 'IME_RAZGOVORA', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'IMENARAZGOVORA', 'IMENA_RAZGOVORA', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'IMEČLANKA', 'IME_ČLANKA', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'subjectpagenamee'        => array( '1', 'IMENAČLANAKA', 'IMENA_ČLANAKA', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
-       'msg'                     => array( '0', 'POR:', 'MSG:' ),
-       'subst'                   => array( '0', 'ZAMENI:', 'ZAMENA:', 'SUBST:' ),
-       'safesubst'               => array( '0', 'BEZBEDNAZAMENA', 'BEZBEDNA_ZAMENA', 'SAFESUBST:' ),
-       'msgnw'                   => array( '0', 'NVPOR:', 'MSGNW:' ),
-       'img_thumbnail'           => array( '1', 'mini', 'umanjeno', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'mini=$1', 'umanjeno=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'desno', 'd', 'right' ),
-       'img_left'                => array( '1', 'levo', 'l', 'left' ),
-       'img_none'                => array( '1', 'bez', 'n', 'none' ),
-       'img_width'               => array( '1', '$1piskel', '$1p', '$1px' ),
-       'img_center'              => array( '1', 'centar', 'c', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'okvir', 'ram', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', 'bezokvira', 'bez_okvira', 'bezrama', 'bez_rama', 'frameless' ),
-       'img_page'                => array( '1', 'stranica=$1', 'strana=$1', 'stranica_$1', 'strana_$1', 'page=$1', 'page $1' ),
-       'img_upright'             => array( '1', 'uspravno', 'uspravno=$1', 'uspravno_$1', 'upright', 'upright=$1', 'upright $1' ),
-       'img_border'              => array( '1', 'ivica', 'border' ),
-       'img_baseline'            => array( '1', 'osnova', 'baseline' ),
-       'img_sub'                 => array( '1', 'pod', 'sub' ),
-       'img_top'                 => array( '1', 'vrh', 'top' ),
-       'img_text_top'            => array( '1', 'vrhteksta', 'vrh_teksta', 'text-top' ),
-       'img_middle'              => array( '1', 'sredina', 'middle' ),
-       'img_bottom'              => array( '1', 'dno', 'bottom' ),
-       'img_text_bottom'         => array( '1', 'sredinateksta', 'sredina_teksta', 'text-bottom' ),
-       'img_link'                => array( '1', 'veza=$1', 'link=$1' ),
-       'sitename'                => array( '1', 'IMESAJTA', 'SITENAME' ),
-       'ns'                      => array( '0', 'IP:', 'NS:' ),
-       'localurl'                => array( '0', 'LOKALNAADRESA:', 'LOKALNA_ADRESA:', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'LOKALNEADRESE:', 'LOKALNE_ADRESE:', 'LOCALURLE:' ),
-       'articlepath'             => array( '0', 'PUTANJAČLANKA', 'PUTANJA_ČLANKA', 'ARTICLEPATH' ),
-       'servername'              => array( '0', 'IMESERVERA', 'IME_SERVERA', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'SKRIPTA', 'SKRIPT', 'SCRIPTPATH' ),
-       'stylepath'               => array( '0', 'PUTANJASTILA', 'PUTANJA_STILA', 'STYLEPATH' ),
-       'grammar'                 => array( '0', 'GRAMATIKA:', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'ROD:', 'LICE:', 'GENDER:' ),
-       'notitleconvert'          => array( '0', '__BEZKN__', '__NOTITLECONVERT__', '__NOTC__' ),
-       'nocontentconvert'        => array( '0', '__BEZCC__', '__NOCONTENTCONVERT__', '__NOCC__' ),
-       'currentweek'             => array( '1', 'TRENUTNANEDELJA', 'TRENUTNA_NEDELJA', 'TEKUĆANEDELJA', 'TEKUĆA_NEDELJA', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'TRENUTNIDOV', 'TEKUĆIDUN', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'LOKALNANEDELJA', 'LOKALNA_NEDELJA', 'LOCALWEEK' ),
-       'localdow'                => array( '1', 'LOKALNIDUN', 'LOCALDOW' ),
-       'revisionid'              => array( '1', 'IDREVIZIJE', 'ID_REVIZIJE', 'IB_IZMENE', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'DANIZMENE', 'DAN_IZMENE', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'DANIZMENE2', 'DAN_IZMENE2', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'MESECIZMENE', 'MESEC_IZMENE', 'REVISIONMONTH' ),
-       'revisionmonth1'          => array( '1', 'MESECIZMENE1', 'MESEC_IZMENE1', 'REVISIONMONTH1' ),
-       'revisionyear'            => array( '1', 'GODINAIZMENE', 'GODINA_IZMENE', 'REVISIONYEAR' ),
-       'revisiontimestamp'       => array( '1', 'VREMEIZMENE', 'VREME_IZMENE', 'REVISIONTIMESTAMP' ),
-       'revisionuser'            => array( '1', 'KORISNIKIZMENE', 'KORISNIK_IZMENE', 'REVISIONUSER' ),
-       'plural'                  => array( '0', 'MNOŽINA:', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'PUNURL:', 'CELAADRESA', 'CELA_ADRESA', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'PUNURLE:', 'CELEADRESE', 'CELE_ADRESE', 'FULLURLE:' ),
-       'lcfirst'                 => array( '0', 'LCPRVI:', 'LCFIRST:' ),
-       'ucfirst'                 => array( '0', 'UCPRVI:', 'UCFIRST:' ),
-       'raw'                     => array( '0', 'ČIST:', 'RAW:' ),
-       'displaytitle'            => array( '1', 'NAZIVPRIKAZA', 'NAZIV_PRIKAZA', 'DISPLAYTITLE' ),
-       'newsectionlink'          => array( '1', '__NOVAVEZAODELJKA__', '__NOVA_VEZA_ODELJKA__', '__NEWSECTIONLINK__' ),
-       'nonewsectionlink'        => array( '1', '__BEZNOVEVEZEODELJKA__', '__BEZ_NOVE_VEZE_ODELJKA__', '__NONEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', 'TEKUĆEIZDANJE', 'TEKUĆE_IZDANJE', 'CURRENTVERSION' ),
-       'urlencode'               => array( '0', 'KODIRANJEADRESE', 'KODIRANJE_ADRESE', 'URLENCODE:' ),
-       'anchorencode'            => array( '0', 'KODIRANJEVEZE', 'KODIRANJE_VEZE', 'ANCHORENCODE' ),
-       'currenttimestamp'        => array( '1', 'TEKUĆIOTISAKVREMENA', 'TEKUĆI_OTISAK_VREMENA', 'CURRENTTIMESTAMP' ),
-       'localtimestamp'          => array( '1', 'OTISAKVREMENA', 'OTISAK_VREMENA', 'LOCALTIMESTAMP' ),
-       'directionmark'           => array( '1', 'SMEROZNAKE', 'SMER    _OZNAKE', 'DIRECTIONMARK', 'DIRMARK' ),
-       'language'                => array( '0', '#JEZIK:', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', 'JEZIKSADRŽAJA', 'JEZIK_SADRŽAJA', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'        => array( '1', 'STRANICAUIMENSKOMPROSTORU', 'STRANAUIMENSKOMPROSTORU', 'STRANICA_U_IMENSKOM_PROSTORU', 'STRANA_U_IMENSKOM_PROSTORU', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'          => array( '1', 'BROJADMINA', 'BROJ_ADMINA', 'NUMBEROFADMINS' ),
-       'padleft'                 => array( '0', 'PORAVNAJULEVO', 'PORAVNAJ_ULEVO', 'PADLEFT' ),
-       'padright'                => array( '0', 'PORAVNAJUDESNO', 'PORAVNAJ_UDESNO', 'PADRIGHT' ),
-       'special'                 => array( '0', 'posebno', 'special' ),
-       'filepath'                => array( '0', 'PUTANJADATOTEKE', 'PUTANJA_DATOTEKE', 'FILEPATH:' ),
-       'tag'                     => array( '0', 'oznaka', 'tag' ),
-       'hiddencat'               => array( '1', '__SAKRIVENAKAT__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'STRANICAUKATEGORIJI', 'STRANAUKATEGORIJI', 'STRANICA_U_KATEGORIJI', 'STRANA_U_KATEGORIJI', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'VELIČINASTRANICE', 'VELIČINASTRANE', 'VELIČINA_STRANICE', 'VELIČINA_STRANE', 'PAGESIZE' ),
-       'index'                   => array( '1', '__INDEKS__', '__INDEX__' ),
-       'noindex'                 => array( '1', '__BEZINDEKSA__', '__BEZ_INDEKSA__', '__NOINDEX__' ),
-       'numberingroup'           => array( '1', 'BROJUGRUPI', 'BROJ_U_GRUPI', 'NUMBERINGROUP', 'NUMINGROUP' ),
-       'staticredirect'          => array( '1', '__STATIČKOPREUSMERENJE__', 'STATIČKO_PREUSMERENJE', '__STATICREDIRECT__' ),
-       'protectionlevel'         => array( '1', 'NIVOZAŠTITE', 'NIVO_ZAŠTITE', 'PROTECTIONLEVEL' ),
-       'formatdate'              => array( '0', 'formatdatuma', 'format_datuma', 'formatdate', 'dateformat' ),
-       'url_path'                => array( '0', 'PUTANJA', 'PATH' ),
-       'url_wiki'                => array( '0', 'VIKI', 'WIKI' ),
-       'url_query'               => array( '0', 'REDOSLED', 'QUERY' ),
-       'defaultsort_noerror'     => array( '0', 'bez_greške', 'noerror' ),
-       'defaultsort_noreplace'   => array( '0', 'bez_zamene', 'noreplace' ),
+       'redirect'                  => array( '0', '#Preusmeri', '#preusmeri', '#PREUSMERI', '#Preusmjeri', '#preusmjeri', '#PREUSMJERI', '#redirect', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__BEZSADRŽAJA__', '__BEZ_SADRŽAJA__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__BEZGALERIJE__', '__BEZ_GALERIJE__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__FORSIRANISADRŽAJ__', '__FORSIRANI_SADRŽAJ__', '__PRIMORANISADRŽAJ__', '__PRIMORANI_SADRŽAJ__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__SADRŽAJ__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__BEZIZMENA__', '__BEZ_IZMENA__', '__BEZIZMJENA__', '__BEZ_IZMJENA__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '__BEZZAGLAVLJA__', '__BEZ_ZAGLAVLJA__', '__NOHEADER__' ),
+       'currentmonth'              => array( '1', 'TRENUTNIMESEC', 'TRENUTNI_MESEC', 'TEKUĆIMESEC', 'TEKUĆI_MESEC', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'TRENUTNIMESEC1', 'TRENUTNI_MESEC1', 'TEKUĆIMESEC1', 'TEKUĆI_MESEC1', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'TRENUTNIMESECIME', 'IMETEKUĆEGMESECA', 'IME_TEKUĆEG_MESECA', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'TRENUTNIMESECGEN', 'TEKUĆIMESECGEN', 'TEKUĆI_MESEC_GEN', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'TRENUTNIMESECSKR', 'TEKUĆIMESECSKR', 'TEKUĆI_MESEC_SKR', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'TRENUTNIDAN', 'TEKUĆIDAN', 'TEKUĆI_DAN', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'TEKUĆIDAN2', 'TEKUĆI_DAN_2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'TRENUTNIDANIME', 'IMETEKUĆEGDANA', 'IME_TEKUĆEG_DANA', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'TRENUTNAGODINA', 'TEKUĆAGODINA', 'TEKUĆA_GODINA', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'TRENUTNOVREME', 'TEKUĆEVREME', 'TEKUĆE_VREME', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'TEKUĆISAT', 'TEKUĆI_SAT', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'LOKALNIMESEC', 'LOKALNI_MESEC', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'LOKALNIMESEC2', 'LOKALNI_MESEC2', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'IMELOKALNOGMESECA', 'IME_LOKALNOG_MESECA', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'LOKALNIMESECGEN', 'LOKALNI_MESEC_GEN', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'LOKALNIMESECSKR', 'LOKALNI_MESEC_SKR', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'LOKALNIDAN', 'LOKALNI_DAN', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'LOKALNIDAN2', 'LOKALNI_DAN2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'IMELOKALNOGDANA', 'IME_LOKALNOG_DANA', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'LOKALNAGODINA', 'LOKALNA_GODINA', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'LOKALNOVREME', 'LOKALNO_VREME', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'LOKALNISAT', 'LOKALNI_SAT', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'BROJSTRANICA', 'BROJ_STRANICA', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'BROJČLANAKA', 'BROJ_ČLANAKA', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'BROJDATOTEKA', 'BROJ_DATOTEKA', 'BROJFAJLOVA', 'BROJ_FAJLOVA', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'BROJKORISNIKA', 'BROJ_KORISNIKA', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'BROJAKTIVNIHKORISNIKA', 'BROJ_AKTIVNIH_KORISNIKA', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'BROJIZMENA', 'BROJ_IZMENA', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'BROJPREGLEDA', 'BROJ_PREGLEDA', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'IMESTRANICE', 'IME_STRANICE', 'STRANICA', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'IMENASTRANICA', 'IMENA_STRANICA', 'STRANICE', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'IMENSKIPROSTOR', 'IMENSKI_PROSTOR', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'IMENSKIPROSTORI', 'IMENSKI_PROSTORI', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'RAZGOVOR', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'RAZGOVORI', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'IMENSKIPROSTORČLANKA', 'IMENSKI_PROSTOR_ČLANKA', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'IMENSKIPROSTORČLANAKA', 'IMENSKI_PROSTOR_ČLANAKA', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'PUNOIMESTRANICE', 'PUNOIMESTRANE', 'PUNO_IME_STRANICE', 'PUNO_IME_STRANE', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'PUNAIMENASTRANICA', 'PUNAIMENASTRANA', 'PUNA_IMENA_STRANICA', 'PUNA_IMENA_STRANA', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'IMEPODSTRANICE', 'IMEPODSTRANE', 'IME_PODSTRANICE', 'IME_PODSTRANE', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'IMENAPODSTRANICA', 'IMENAPODSTRANA', 'IMENA_PODSTRANICA', 'IMENA_PODSTRANA', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'IMEOSNOVE', 'IME_OSNOVE', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'IMENAOSNOVA', 'IMENA_OSNOVA', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'IMERAZGOVORA', 'IME_RAZGOVORA', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'IMENARAZGOVORA', 'IMENA_RAZGOVORA', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'IMEČLANKA', 'IME_ČLANKA', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'          => array( '1', 'IMENAČLANAKA', 'IMENA_ČLANAKA', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+       'msg'                       => array( '0', 'POR:', 'MSG:' ),
+       'subst'                     => array( '0', 'ZAMENI:', 'ZAMENA:', 'SUBST:' ),
+       'safesubst'                 => array( '0', 'BEZBEDNAZAMENA', 'BEZBEDNA_ZAMENA', 'SAFESUBST:' ),
+       'msgnw'                     => array( '0', 'NVPOR:', 'MSGNW:' ),
+       'img_thumbnail'             => array( '1', 'mini', 'umanjeno', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'mini=$1', 'umanjeno=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'desno', 'd', 'right' ),
+       'img_left'                  => array( '1', 'levo', 'l', 'left' ),
+       'img_none'                  => array( '1', 'bez', 'n', 'none' ),
+       'img_width'                 => array( '1', '$1piskel', '$1p', '$1px' ),
+       'img_center'                => array( '1', 'centar', 'c', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'okvir', 'ram', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'bezokvira', 'bez_okvira', 'bezrama', 'bez_rama', 'frameless' ),
+       'img_page'                  => array( '1', 'stranica=$1', 'strana=$1', 'stranica_$1', 'strana_$1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', 'uspravno', 'uspravno=$1', 'uspravno_$1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_border'                => array( '1', 'ivica', 'border' ),
+       'img_baseline'              => array( '1', 'osnova', 'baseline' ),
+       'img_sub'                   => array( '1', 'pod', 'sub' ),
+       'img_top'                   => array( '1', 'vrh', 'top' ),
+       'img_text_top'              => array( '1', 'vrhteksta', 'vrh_teksta', 'text-top' ),
+       'img_middle'                => array( '1', 'sredina', 'middle' ),
+       'img_bottom'                => array( '1', 'dno', 'bottom' ),
+       'img_text_bottom'           => array( '1', 'sredinateksta', 'sredina_teksta', 'text-bottom' ),
+       'img_link'                  => array( '1', 'veza=$1', 'link=$1' ),
+       'sitename'                  => array( '1', 'IMESAJTA', 'SITENAME' ),
+       'ns'                        => array( '0', 'IP:', 'NS:' ),
+       'localurl'                  => array( '0', 'LOKALNAADRESA:', 'LOKALNA_ADRESA:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'LOKALNEADRESE:', 'LOKALNE_ADRESE:', 'LOCALURLE:' ),
+       'articlepath'               => array( '0', 'PUTANJAČLANKA', 'PUTANJA_ČLANKA', 'ARTICLEPATH' ),
+       'servername'                => array( '0', 'IMESERVERA', 'IME_SERVERA', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'SKRIPTA', 'SKRIPT', 'SCRIPTPATH' ),
+       'stylepath'                 => array( '0', 'PUTANJASTILA', 'PUTANJA_STILA', 'STYLEPATH' ),
+       'grammar'                   => array( '0', 'GRAMATIKA:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'ROD:', 'LICE:', 'GENDER:' ),
+       'notitleconvert'            => array( '0', '__BEZKN__', '__NOTITLECONVERT__', '__NOTC__' ),
+       'nocontentconvert'          => array( '0', '__BEZCC__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+       'currentweek'               => array( '1', 'TRENUTNANEDELJA', 'TRENUTNA_NEDELJA', 'TEKUĆANEDELJA', 'TEKUĆA_NEDELJA', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'TRENUTNIDOV', 'TEKUĆIDUN', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'LOKALNANEDELJA', 'LOKALNA_NEDELJA', 'LOCALWEEK' ),
+       'localdow'                  => array( '1', 'LOKALNIDUN', 'LOCALDOW' ),
+       'revisionid'                => array( '1', 'IDREVIZIJE', 'ID_REVIZIJE', 'IB_IZMENE', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'DANIZMENE', 'DAN_IZMENE', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'DANIZMENE2', 'DAN_IZMENE2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'MESECIZMENE', 'MESEC_IZMENE', 'REVISIONMONTH' ),
+       'revisionmonth1'            => array( '1', 'MESECIZMENE1', 'MESEC_IZMENE1', 'REVISIONMONTH1' ),
+       'revisionyear'              => array( '1', 'GODINAIZMENE', 'GODINA_IZMENE', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'VREMEIZMENE', 'VREME_IZMENE', 'REVISIONTIMESTAMP' ),
+       'revisionuser'              => array( '1', 'KORISNIKIZMENE', 'KORISNIK_IZMENE', 'REVISIONUSER' ),
+       'plural'                    => array( '0', 'MNOŽINA:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'PUNURL:', 'CELAADRESA', 'CELA_ADRESA', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'PUNURLE:', 'CELEADRESE', 'CELE_ADRESE', 'FULLURLE:' ),
+       'lcfirst'                   => array( '0', 'LCPRVI:', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', 'UCPRVI:', 'UCFIRST:' ),
+       'raw'                       => array( '0', 'ČIST:', 'RAW:' ),
+       'displaytitle'              => array( '1', 'NAZIVPRIKAZA', 'NAZIV_PRIKAZA', 'DISPLAYTITLE' ),
+       'newsectionlink'            => array( '1', '__NOVAVEZAODELJKA__', '__NOVA_VEZA_ODELJKA__', '__NEWSECTIONLINK__' ),
+       'nonewsectionlink'          => array( '1', '__BEZNOVEVEZEODELJKA__', '__BEZ_NOVE_VEZE_ODELJKA__', '__NONEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'TEKUĆEIZDANJE', 'TEKUĆE_IZDANJE', 'CURRENTVERSION' ),
+       'urlencode'                 => array( '0', 'KODIRANJEADRESE', 'KODIRANJE_ADRESE', 'URLENCODE:' ),
+       'anchorencode'              => array( '0', 'KODIRANJEVEZE', 'KODIRANJE_VEZE', 'ANCHORENCODE' ),
+       'currenttimestamp'          => array( '1', 'TEKUĆIOTISAKVREMENA', 'TEKUĆI_OTISAK_VREMENA', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', 'OTISAKVREMENA', 'OTISAK_VREMENA', 'LOCALTIMESTAMP' ),
+       'directionmark'             => array( '1', 'SMEROZNAKE', 'SMER  _OZNAKE', 'DIRECTIONMARK', 'DIRMARK' ),
+       'language'                  => array( '0', '#JEZIK:', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'JEZIKSADRŽAJA', 'JEZIK_SADRŽAJA', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', 'STRANICAUIMENSKOMPROSTORU', 'STRANAUIMENSKOMPROSTORU', 'STRANICA_U_IMENSKOM_PROSTORU', 'STRANA_U_IMENSKOM_PROSTORU', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', 'BROJADMINA', 'BROJ_ADMINA', 'NUMBEROFADMINS' ),
+       'padleft'                   => array( '0', 'PORAVNAJULEVO', 'PORAVNAJ_ULEVO', 'PADLEFT' ),
+       'padright'                  => array( '0', 'PORAVNAJUDESNO', 'PORAVNAJ_UDESNO', 'PADRIGHT' ),
+       'special'                   => array( '0', 'posebno', 'special' ),
+       'filepath'                  => array( '0', 'PUTANJADATOTEKE', 'PUTANJA_DATOTEKE', 'FILEPATH:' ),
+       'tag'                       => array( '0', 'oznaka', 'tag' ),
+       'hiddencat'                 => array( '1', '__SAKRIVENAKAT__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'STRANICAUKATEGORIJI', 'STRANAUKATEGORIJI', 'STRANICA_U_KATEGORIJI', 'STRANA_U_KATEGORIJI', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'VELIČINASTRANICE', 'VELIČINASTRANE', 'VELIČINA_STRANICE', 'VELIČINA_STRANE', 'PAGESIZE' ),
+       'index'                     => array( '1', '__INDEKS__', '__INDEX__' ),
+       'noindex'                   => array( '1', '__BEZINDEKSA__', '__BEZ_INDEKSA__', '__NOINDEX__' ),
+       'numberingroup'             => array( '1', 'BROJUGRUPI', 'BROJ_U_GRUPI', 'NUMBERINGROUP', 'NUMINGROUP' ),
+       'staticredirect'            => array( '1', '__STATIČKOPREUSMERENJE__', 'STATIČKO_PREUSMERENJE', '__STATICREDIRECT__' ),
+       'protectionlevel'           => array( '1', 'NIVOZAŠTITE', 'NIVO_ZAŠTITE', 'PROTECTIONLEVEL' ),
+       'formatdate'                => array( '0', 'formatdatuma', 'format_datuma', 'formatdate', 'dateformat' ),
+       'url_path'                  => array( '0', 'PUTANJA', 'PATH' ),
+       'url_wiki'                  => array( '0', 'VIKI', 'WIKI' ),
+       'url_query'                 => array( '0', 'REDOSLED', 'QUERY' ),
+       'defaultsort_noerror'       => array( '0', 'bez_greške', 'noerror' ),
+       'defaultsort_noreplace'     => array( '0', 'bez_zamene', 'noreplace' ),
 );
 
 $separatorTransformTable = array( ',' => '.', '.' => ',' );
@@ -1081,7 +1081,7 @@ Možete se vratiti i urediti postojeću stranicu, ili se [[Special:UserLogin|pri
 'sectioneditnotsupported-text' => 'Uređivanje odeljka nije podržano na ovoj stranici.',
 'permissionserrors' => 'Greške u dozvolama',
 'permissionserrorstext' => 'Nemate ovlašćenje za tu radnju iz {{PLURAL:$1|sledećeg|sledećih}} razloga:',
-'permissionserrorstext-withaction' => 'Nemate ovlašćenja za $2 zbog {{PLURAL:$1|sledećeg|sledećih}} razloga:',
+'permissionserrorstext-withaction' => 'Nemate dozvolu da $2 iz {{PLURAL:$1|sledećeg|sledećih}} razloga:',
 'recreate-moveddeleted-warn' => "'''Upozorenje: ponovo pravite stranicu koja je prethodno obrisana.'''
 
 Razmotrite da li je prikladno da nastavite s uređivanjem ove stranice.
@@ -2035,6 +2035,7 @@ Njen opis možete da izmenite na [$2 odgovarajućoj stranici].',
 'shared-repo' => 'zajedničko skladište',
 'shared-repo-name-wikimediacommons' => 'Vikimedijina ostava',
 'filepage.css' => '/* CSS koji je postavljen ovde se nalazi na stranicama za opis datoteka, kao i na stranim vikijima */',
+'upload-disallowed-here' => 'Nažalost, ne možete da zamenite ovu sliku.',
 
 # File reversion
 'filerevert' => 'Vrati $1',
@@ -2144,6 +2145,7 @@ Sada je preusmerenje na [[$2]].',
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|bajt|bajta|bajtova}}',
 'ncategories' => '$1 {{PLURAL:$1|kategorija|kategorije|kategorija}}',
+'ninterwikis' => '$1 {{PLURAL:$1|međuviki|međuvikija|međuvikija}}',
 'nlinks' => '$1 {{PLURAL:$1|veza|veze|veza}}',
 'nmembers' => '$1 {{PLURAL:$1|član|člana|članova}}',
 'nrevisions' => '$1 {{PLURAL:$1|izmena|izmene|izmena}}',
@@ -2172,6 +2174,7 @@ Sada je preusmerenje na [[$2]].',
 'mostlinkedtemplates' => 'Šabloni s najviše veza',
 'mostcategories' => 'Članci s najviše kategorija',
 'mostimages' => 'Datoteke s najviše veza',
+'mostinterwikis' => 'Stranice sa najviše međuvikija',
 'mostrevisions' => 'Stranice s najviše izmena',
 'prefixindex' => 'Sve stranice s prefiksom',
 'prefixindex-namespace' => 'Sve stranice s predmetkom (imenski prostor $1)',
@@ -2321,6 +2324,8 @@ Pogledajte [[{{MediaWiki:Listgrouprights-helppage}}|više detalja]] o pojedinač
 'mailnologin' => 'Nema adrese za slanje',
 'mailnologintext' => 'Morate biti [[Special:UserLogin|prijavljeni]] i imati ispravnu e-adresu u [[Special:Preferences|podešavanjima]] da biste slali e-poruke drugim korisnicima.',
 'emailuser' => 'Pošalji e-poruku',
+'emailuser-title-target' => 'Slanje e-poruke {{GENDER:$1|korisniku|korisnici|korisniku}}',
+'emailuser-title-notarget' => 'Slanje e-poruke korisniku',
 'emailpage' => 'Slanje e-poruka',
 'emailpagetext' => 'Koristite ovaj obrazac da pošaljete e-poruku ovom korisniku.
 E-adresa koju ste uneli u [[Special:Preferences|podešavanjima]] će biti prikazana kao adresa pošiljaoca, tako da će primalac poruke moći da vam odgovori.',
@@ -3168,11 +3173,34 @@ Ovo je verovatno izazvano vezom do spoljašnjeg sajta koji se nalazi na crnoj li
 
 # Info page
 'pageinfo-title' => 'Podaci o „$1“',
+'pageinfo-header-basic' => 'Osnovni podaci',
 'pageinfo-header-edits' => 'Istorija izmena',
+'pageinfo-header-restrictions' => 'Zaštita stranice',
+'pageinfo-header-properties' => 'Svojstva stranice',
+'pageinfo-display-title' => 'Naslov za prikaz',
+'pageinfo-default-sort' => 'Podrazumevani ključ sortiranja',
+'pageinfo-length' => 'Dužina stranice (u bajtovima)',
+'pageinfo-article-id' => 'ID stranice',
+'pageinfo-robot-policy' => 'Status pretraživača',
+'pageinfo-robot-index' => 'Može da se popiše',
+'pageinfo-robot-noindex' => 'Ne može da se popiše',
 'pageinfo-views' => 'Broj pregleda',
 'pageinfo-watchers' => 'Broj nadgledača stranica',
+'pageinfo-redirects-name' => 'Preusmeravanja na stranicu',
+'pageinfo-subpages-name' => 'Podstranice ove stranice',
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|preusmerenje|preusmerenja|preusmerenja}}; $3 {{PLURAL:$3|nepreusmerenje|nepreusmerenja|nepreusmerenja}})',
+'pageinfo-firstuser' => 'Autor stranice',
+'pageinfo-firsttime' => 'Datum stvaranja stranice',
+'pageinfo-lastuser' => 'Poslednji urednik',
+'pageinfo-lasttime' => 'Datum poslednje izmene',
 'pageinfo-edits' => 'Broj izmena',
 'pageinfo-authors' => 'Broj zasebnih autora',
+'pageinfo-recent-edits' => 'Broj skorašnjih izmena (u poslednjih $1)',
+'pageinfo-recent-authors' => 'Broj skorašnjih zasebnih autora',
+'pageinfo-restriction' => 'Zaštita stranice (<code>{{lcfirst:$1}}</code>)',
+'pageinfo-magic-words' => '{{PLURAL:$1|Magična reč|Magične reči}} ($1)',
+'pageinfo-hidden-categories' => '{{PLURAL:$1|Sakrivena kategorija|Sakrivene kategorije}} ($1)',
+'pageinfo-templates' => '{{PLURAL:$1|Uključeni šablon|Uključeni šabloni}} ($1)',
 
 # Skin names
 'skinname-standard' => 'Klasično',
@@ -3228,6 +3256,7 @@ Ako ga pokrenete, vaš računar može biti ugrožen.",
 'file-info-size-pages' => '$1 × $2 piksela, veličina: $3, MIME vrsta: $4, $5 {{PLURAL:$5|stranica|stranice|stranica}}',
 'file-nohires' => 'Veća rezolucija nije dostupna.',
 'svg-long-desc' => 'SVG datoteka, nominalno $1 × $2 piksela, veličina: $3',
+'svg-long-desc-animated' => 'Animirana SVG datoteka, nominalno: $1 × $2 piksela, veličina: $3',
 'show-big-image' => 'Puna veličina',
 'show-big-image-preview' => 'Veličina ovog prikaza: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Druga rezolucija|Druge rezolucije}}: $1.',
@@ -3237,6 +3266,8 @@ Ako ga pokrenete, vaš računar može biti ugrožen.",
 'file-info-png-looped' => 'petlja',
 'file-info-png-repeat' => 'ponovljeno $1 {{PLURAL:$1|put|puta|puta}}',
 'file-info-png-frames' => '$1 {{PLURAL:$1|kadar|kadra|kadrova}}',
+'file-no-thumb-animation' => "'''Napomena: zbog tehničkih ograničenja, minijature ove datoteke se neće animirati.'''",
+'file-no-thumb-animation-gif' => "'''Napomena: zbog tehničkih ograničenja, minijature GIF slika visoke rezolucije kao što je ova neće se animirati.'''",
 
 # Special:NewFiles
 'newimages' => 'Galerija novih datoteka',
index 641ef8d..9918087 100644 (file)
@@ -112,44 +112,44 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#STIR', '#DOORVERWIJZING', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__NOINOT__', '__GEENINHOUD__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__NOPIKTURAMA__', '__GEEN_GALERIJ__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__INOTDWENGI__', '__INHOUD_DWINGEN__', '__FORCEERINHOUD__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__INOT__', '__INHOUD__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__NOKENKISKAKI__', '__NIETBEWERKBARESECTIE__', '__NOEDITSECTION__' ),
-       'currentmonth'            => array( '1', 'CURRENTMOTNH', 'DISIMUN', 'HUIDIGEMAAND', 'HUIDIGEMAAND2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonthname'        => array( '1', 'DISIMUNNEN', 'HUIDIGEMAANDNAAM', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'DISIMUNNENGEN', 'HUIDIGEMAANDGEN', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'DISIMUNSH', 'HUIDIGEMAANDAFK', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'DISIDEY', 'HUIDIGEDAG', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'DISIDEY2', 'HUIDIGEDAG2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'DISIDEYNEN', 'HUIDIGEDAGNAAM', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'DISIYARI', 'HUIDIGJAAR', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'DISITEN', 'HUIDIGETIJD', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'DISIYURU', 'HUIDIGUUR', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'PRESIMUN', 'PLAATSELIJKEMAAND', 'LOKALEMAAND', 'LOKALEMAAND2', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonthname'          => array( '1', 'PRESIMUNNEN', 'PLAATSELIJKEMAANDNAAM', 'LOKALEMAANDNAAM', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'PRESIMUNNENGEN', 'PLAATSELIJKEMAANDNAAMGEN', 'LOKALEMAANDNAAMGEN', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'PRESIMUNSH', 'PLAATSELIJKEMAANDAFK', 'LOKALEMAANDAFK', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'PRESIDEY', 'PLAATSELIJKEDAG', 'LOKALEDAG', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'PRESIDEY2', 'PLAATSELIJKEDAG2', 'LOKALEDAG2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'PRESIDEYNEN', 'PLAATSELIJKEDAGNAAM', 'LOKALEDAGNAAM', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'PRESIYARI', 'PLAATSELIJKJAAR', 'LOKAALJAAR', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'PRESITEN', 'PLAATSELIJKETIJD', 'LOKALETIJD', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'PRESIYURU', 'PLAATSELIJKUUR', 'LOKAALUUR', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'PAPIRANUMRO', 'AANTALPAGINAS', 'AANTALPAGINA\'S', 'AANTALPAGINA’S', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'PAPIRALEGIMNUMRO', 'AANTALARTIKELEN', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'GEFRENUMRO', 'AANTALBESTANDEN', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'MASYINNUMRO', 'AANTALGEBRUIKERS', 'NUMBEROFUSERS' ),
-       'numberofedits'           => array( '1', 'KENKINUMRO', 'AANTALBEWERKINGEN', 'NUMBEROFEDITS' ),
-       'pagename'                => array( '1', 'PAPIRANEN', 'PAGINANAAM', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'PAPIRANENE', 'PAGINANAAME', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'NENPREKI', 'NAAMRUIMTE', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'NENPREKIE', 'NAAMRUIMTEE', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'TAKIPREKI', 'OVERLEGRUIMTE', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'TAKIPREKIE', 'OVERLEGRUIMTEE', 'TALKSPACEE' ),
-       'special'                 => array( '0', 'spesyal', 'speciaal', 'special' ),
+       'redirect'                  => array( '0', '#STIR', '#DOORVERWIJZING', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__NOINOT__', '__GEENINHOUD__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__NOPIKTURAMA__', '__GEEN_GALERIJ__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__INOTDWENGI__', '__INHOUD_DWINGEN__', '__FORCEERINHOUD__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__INOT__', '__INHOUD__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__NOKENKISKAKI__', '__NIETBEWERKBARESECTIE__', '__NOEDITSECTION__' ),
+       'currentmonth'              => array( '1', 'CURRENTMOTNH', 'DISIMUN', 'HUIDIGEMAAND', 'HUIDIGEMAAND2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonthname'          => array( '1', 'DISIMUNNEN', 'HUIDIGEMAANDNAAM', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'DISIMUNNENGEN', 'HUIDIGEMAANDGEN', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'DISIMUNSH', 'HUIDIGEMAANDAFK', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'DISIDEY', 'HUIDIGEDAG', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'DISIDEY2', 'HUIDIGEDAG2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'DISIDEYNEN', 'HUIDIGEDAGNAAM', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'DISIYARI', 'HUIDIGJAAR', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'DISITEN', 'HUIDIGETIJD', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'DISIYURU', 'HUIDIGUUR', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'PRESIMUN', 'PLAATSELIJKEMAAND', 'LOKALEMAAND', 'LOKALEMAAND2', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonthname'            => array( '1', 'PRESIMUNNEN', 'PLAATSELIJKEMAANDNAAM', 'LOKALEMAANDNAAM', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'PRESIMUNNENGEN', 'PLAATSELIJKEMAANDNAAMGEN', 'LOKALEMAANDNAAMGEN', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'PRESIMUNSH', 'PLAATSELIJKEMAANDAFK', 'LOKALEMAANDAFK', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'PRESIDEY', 'PLAATSELIJKEDAG', 'LOKALEDAG', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'PRESIDEY2', 'PLAATSELIJKEDAG2', 'LOKALEDAG2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'PRESIDEYNEN', 'PLAATSELIJKEDAGNAAM', 'LOKALEDAGNAAM', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'PRESIYARI', 'PLAATSELIJKJAAR', 'LOKAALJAAR', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'PRESITEN', 'PLAATSELIJKETIJD', 'LOKALETIJD', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'PRESIYURU', 'PLAATSELIJKUUR', 'LOKAALUUR', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'PAPIRANUMRO', 'AANTALPAGINAS', 'AANTALPAGINA\'S', 'AANTALPAGINA’S', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'PAPIRALEGIMNUMRO', 'AANTALARTIKELEN', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'GEFRENUMRO', 'AANTALBESTANDEN', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'MASYINNUMRO', 'AANTALGEBRUIKERS', 'NUMBEROFUSERS' ),
+       'numberofedits'             => array( '1', 'KENKINUMRO', 'AANTALBEWERKINGEN', 'NUMBEROFEDITS' ),
+       'pagename'                  => array( '1', 'PAPIRANEN', 'PAGINANAAM', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'PAPIRANENE', 'PAGINANAAME', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'NENPREKI', 'NAAMRUIMTE', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'NENPREKIE', 'NAAMRUIMTEE', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'TAKIPREKI', 'OVERLEGRUIMTE', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'TAKIPREKIE', 'OVERLEGRUIMTEE', 'TALKSPACEE' ),
+       'special'                   => array( '0', 'spesyal', 'speciaal', 'special' ),
 );
 
 $messages = array(
index 304069d..9635ba4 100644 (file)
@@ -37,6 +37,7 @@
  * @author Petter Strandmark
  * @author Poxnar
  * @author Purodha
+ * @author Rotsee
  * @author S.Örvarr.S
  * @author Sannab
  * @author Sertion
@@ -173,127 +174,127 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#OMDIRIGERING', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__INGENINNEHÅLLSFÖRTECKNING__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__INGETGALLERI__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__ALLTIDINNEHÅLLSFÖRTECKNING__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__INNEHÅLLSFÖRTECKNING__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__INTEREDIGERASEKTION__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '__INGENRUBRIK__', '__NOHEADER__' ),
-       'currentmonth'            => array( '1', 'NUVARANDEMÅNAD', 'NUMÅNAD', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', 'NUVARANDEMÅNAD1', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', 'NUVARANDEMÅNADSNAMN', 'NUMÅNADSNAMN', 'CURRENTMONTHNAME' ),
-       'currentmonthabbrev'      => array( '1', 'NUVARANDEMÅNADKORT', 'NUMÅNADKORT', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'NUVARANDEDAG', 'NUDAG', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'NUVARANDEDAG2', 'NUDAG2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'NUVARANDEDAGSNAMN', 'NUDAGSNAMN', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'NUVARANDEÅR', 'NUÅR', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'NUVARANDETID', 'NUTID', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'NUVARANDETIMME', 'NUTIMME', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'LOKALMÅNAD', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', 'LOKALMÅNAD1', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'LOKALMÅNADSNAMN', 'LOCALMONTHNAME' ),
-       'localmonthabbrev'        => array( '1', 'LOKALMÅNADKORT', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'LOKALDAG', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'LOKALDAG2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'LOKALDAGSNAMN', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'LOKALTÅR', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'LOKALTID', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'LOKALTIMME', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'ANTALSIDOR', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'ANTALARTIKLAR', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'ANTALFILER', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'ANTALANVÄNDARE', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'ANTALAKTIVAANVÄNDARE', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'ANTALREDIGERINGAR', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'ANTALVISNINGAR', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'SIDNAMN', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'SIDNAMNE', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'NAMNRYMD', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'NAMNRYMDE', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'DISKUSSIONSRYMD', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'DISKUSSIONSRYMDE', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'ARTIKELRYMD', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'ARTIKELRYMDE', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'HELASIDNAMNET', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'HELASIDNAMNETE', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'UNDERSIDNAMN', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'UNDERSIDNAMNE', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'GRUNDSIDNAMN', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'GRUNDSIDNAMNE', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'DISKUSSIONSSIDNAMN', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'DISKUSSIONSSIDNAMNE', 'TALKPAGENAMEE' ),
-       'msg'                     => array( '0', 'MED:', 'MSG:' ),
-       'subst'                   => array( '0', 'BYT:', 'SUBST:' ),
-       'msgnw'                   => array( '0', 'MEDNW:', 'MSGNW:' ),
-       'img_thumbnail'           => array( '1', 'miniatyr', 'mini', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'miniatyr=$1', 'mini=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'höger', 'right' ),
-       'img_left'                => array( '1', 'vänster', 'left' ),
-       'img_none'                => array( '1', 'ingen', 'none' ),
-       'img_center'              => array( '1', 'centrerad', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'inramad', 'ram', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', 'ramlös', 'frameless' ),
-       'img_page'                => array( '1', 'sida=$1', 'sida $1', 'page=$1', 'page $1' ),
-       'img_upright'             => array( '1', 'stående', 'stående=$1', 'stående $1', 'upright', 'upright=$1', 'upright $1' ),
-       'img_border'              => array( '1', 'kantlinje', 'border' ),
-       'img_baseline'            => array( '1', 'baslinje', 'baseline' ),
-       'img_sub'                 => array( '1', 'ned', 'sub' ),
-       'img_super'               => array( '1', 'upp', 'super', 'sup' ),
-       'img_top'                 => array( '1', 'topp', 'top' ),
-       'img_text_top'            => array( '1', 'text-topp', 'text-top' ),
-       'img_middle'              => array( '1', 'mitten', 'middle' ),
-       'img_bottom'              => array( '1', 'botten', 'bottom' ),
-       'img_text_bottom'         => array( '1', 'text-botten', 'text-bottom' ),
-       'img_link'                => array( '1', 'länk=$1', 'link=$1' ),
-       'sitename'                => array( '1', 'SAJTNAMN', 'SITENAMN', 'SITENAME' ),
-       'ns'                      => array( '0', 'NR:', 'NS:' ),
-       'localurl'                => array( '0', 'LOKALURL:', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'LOKALURLE:', 'LOCALURLE:' ),
-       'servername'              => array( '0', 'SERVERNAMN', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'SKRIPTSÖKVÄG', 'SCRIPTPATH' ),
-       'grammar'                 => array( '0', 'GRAMMATIK:', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'KÖN:', 'GENDER:' ),
-       'currentweek'             => array( '1', 'NUVARANDEVECKA', 'NUVECKA', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'NUVARANDEVECKODAG', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'LOKALVECKA', 'LOCALWEEK' ),
-       'localdow'                => array( '1', 'LOKALVECKODAG', 'LOCALDOW' ),
-       'revisionid'              => array( '1', 'REVISIONSID', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'REVISIONSDAG', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'REVISIONSDAG2', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'REVISIONSMÅNAD', 'REVISIONMONTH' ),
-       'revisionyear'            => array( '1', 'REVISIONSÅR', 'REVISIONYEAR' ),
-       'revisiontimestamp'       => array( '1', 'REVISIONSTIDSSTÄMPEL', 'REVISIONTIMESTAMP' ),
-       'revisionuser'            => array( '1', 'REVISIONSANVÄNDARE', 'REVISIONUSER' ),
-       'fullurl'                 => array( '0', 'FULLTURL:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'FULLTURLE:', 'FULLURLE:' ),
-       'lcfirst'                 => array( '0', 'LBFÖRST:', 'LCFIRST:' ),
-       'ucfirst'                 => array( '0', 'UCFIRST', 'SBFÖRST:', 'UCFIRST:' ),
-       'lc'                      => array( '0', 'LB:', 'LC:' ),
-       'uc'                      => array( '0', 'SB:', 'UC:' ),
-       'raw'                     => array( '0', 'RÅ:', 'RAW:' ),
-       'displaytitle'            => array( '1', 'VISATITEL', 'DISPLAYTITLE' ),
-       'newsectionlink'          => array( '1', '__NYTTAVSNITTLÄNK__', '__NEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', 'NUVARANDEVERSION', 'NUVERSION', 'CURRENTVERSION' ),
-       'currenttimestamp'        => array( '1', 'NUTIDSTÄMPEL', 'CURRENTTIMESTAMP' ),
-       'localtimestamp'          => array( '1', 'LOKALTIDSTÄMPEL', 'LOCALTIMESTAMP' ),
-       'language'                => array( '0', '#SPRÅK:', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', 'INNEHÅLLSSPRÅK', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'        => array( '1', 'SIDORINAMNRYMD:', 'SIDORINR:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'          => array( '1', 'ANTALADMINS', 'ANTALADMINISTRATÖRER', 'NUMBEROFADMINS' ),
-       'formatnum'               => array( '0', 'FORMATERANUM', 'FORMATERATAL', 'FORMATNUM' ),
-       'defaultsort'             => array( '1', 'STANDARDSORTERING:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'filepath'                => array( '0', 'FILSÖKVÄG:', 'FILEPATH:' ),
-       'tag'                     => array( '0', 'tagg', 'tag' ),
-       'hiddencat'               => array( '1', '__DOLDKAT__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'SIDORIKATEGORI', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'SIDSTORLEK', 'PAGESIZE' ),
-       'index'                   => array( '1', '__INDEXERA__', '__INDEX__' ),
-       'noindex'                 => array( '1', '__INTEINDEXERA_', '__NOINDEX__' ),
-       'numberingroup'           => array( '1', 'ANTALIGRUPP', 'NUMBERINGROUP', 'NUMINGROUP' ),
-       'staticredirect'          => array( '1', '__STATISKOMDIRIGERING__', '__STATICREDIRECT__' ),
-       'protectionlevel'         => array( '1', 'SKYDDSNIVÅ', 'PROTECTIONLEVEL' ),
-       'formatdate'              => array( '0', 'formateradatum', 'datumformat', 'formatdate', 'dateformat' ),
+       'redirect'                  => array( '0', '#OMDIRIGERING', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__INGENINNEHÅLLSFÖRTECKNING__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__INGETGALLERI__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__ALLTIDINNEHÅLLSFÖRTECKNING__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__INNEHÅLLSFÖRTECKNING__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__INTEREDIGERASEKTION__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '__INGENRUBRIK__', '__NOHEADER__' ),
+       'currentmonth'              => array( '1', 'NUVARANDEMÅNAD', 'NUMÅNAD', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'NUVARANDEMÅNAD1', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'NUVARANDEMÅNADSNAMN', 'NUMÅNADSNAMN', 'CURRENTMONTHNAME' ),
+       'currentmonthabbrev'        => array( '1', 'NUVARANDEMÅNADKORT', 'NUMÅNADKORT', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'NUVARANDEDAG', 'NUDAG', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'NUVARANDEDAG2', 'NUDAG2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'NUVARANDEDAGSNAMN', 'NUDAGSNAMN', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'NUVARANDEÅR', 'NUÅR', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'NUVARANDETID', 'NUTID', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'NUVARANDETIMME', 'NUTIMME', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'LOKALMÅNAD', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'LOKALMÅNAD1', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'LOKALMÅNADSNAMN', 'LOCALMONTHNAME' ),
+       'localmonthabbrev'          => array( '1', 'LOKALMÅNADKORT', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'LOKALDAG', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'LOKALDAG2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'LOKALDAGSNAMN', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'LOKALTÅR', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'LOKALTID', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'LOKALTIMME', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'ANTALSIDOR', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'ANTALARTIKLAR', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'ANTALFILER', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'ANTALANVÄNDARE', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'ANTALAKTIVAANVÄNDARE', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'ANTALREDIGERINGAR', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'ANTALVISNINGAR', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'SIDNAMN', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'SIDNAMNE', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'NAMNRYMD', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'NAMNRYMDE', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'DISKUSSIONSRYMD', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'DISKUSSIONSRYMDE', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'ARTIKELRYMD', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'ARTIKELRYMDE', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'HELASIDNAMNET', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'HELASIDNAMNETE', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'UNDERSIDNAMN', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'UNDERSIDNAMNE', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'GRUNDSIDNAMN', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'GRUNDSIDNAMNE', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'DISKUSSIONSSIDNAMN', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'DISKUSSIONSSIDNAMNE', 'TALKPAGENAMEE' ),
+       'msg'                       => array( '0', 'MED:', 'MSG:' ),
+       'subst'                     => array( '0', 'BYT:', 'SUBST:' ),
+       'msgnw'                     => array( '0', 'MEDNW:', 'MSGNW:' ),
+       'img_thumbnail'             => array( '1', 'miniatyr', 'mini', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'miniatyr=$1', 'mini=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'höger', 'right' ),
+       'img_left'                  => array( '1', 'vänster', 'left' ),
+       'img_none'                  => array( '1', 'ingen', 'none' ),
+       'img_center'                => array( '1', 'centrerad', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'inramad', 'ram', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'ramlös', 'frameless' ),
+       'img_page'                  => array( '1', 'sida=$1', 'sida $1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', 'stående', 'stående=$1', 'stående $1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_border'                => array( '1', 'kantlinje', 'border' ),
+       'img_baseline'              => array( '1', 'baslinje', 'baseline' ),
+       'img_sub'                   => array( '1', 'ned', 'sub' ),
+       'img_super'                 => array( '1', 'upp', 'super', 'sup' ),
+       'img_top'                   => array( '1', 'topp', 'top' ),
+       'img_text_top'              => array( '1', 'text-topp', 'text-top' ),
+       'img_middle'                => array( '1', 'mitten', 'middle' ),
+       'img_bottom'                => array( '1', 'botten', 'bottom' ),
+       'img_text_bottom'           => array( '1', 'text-botten', 'text-bottom' ),
+       'img_link'                  => array( '1', 'länk=$1', 'link=$1' ),
+       'sitename'                  => array( '1', 'SAJTNAMN', 'SITENAMN', 'SITENAME' ),
+       'ns'                        => array( '0', 'NR:', 'NS:' ),
+       'localurl'                  => array( '0', 'LOKALURL:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'LOKALURLE:', 'LOCALURLE:' ),
+       'servername'                => array( '0', 'SERVERNAMN', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'SKRIPTSÖKVÄG', 'SCRIPTPATH' ),
+       'grammar'                   => array( '0', 'GRAMMATIK:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'KÖN:', 'GENDER:' ),
+       'currentweek'               => array( '1', 'NUVARANDEVECKA', 'NUVECKA', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'NUVARANDEVECKODAG', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'LOKALVECKA', 'LOCALWEEK' ),
+       'localdow'                  => array( '1', 'LOKALVECKODAG', 'LOCALDOW' ),
+       'revisionid'                => array( '1', 'REVISIONSID', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'REVISIONSDAG', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'REVISIONSDAG2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'REVISIONSMÅNAD', 'REVISIONMONTH' ),
+       'revisionyear'              => array( '1', 'REVISIONSÅR', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'REVISIONSTIDSSTÄMPEL', 'REVISIONTIMESTAMP' ),
+       'revisionuser'              => array( '1', 'REVISIONSANVÄNDARE', 'REVISIONUSER' ),
+       'fullurl'                   => array( '0', 'FULLTURL:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'FULLTURLE:', 'FULLURLE:' ),
+       'lcfirst'                   => array( '0', 'LBFÖRST:', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', 'UCFIRST', 'SBFÖRST:', 'UCFIRST:' ),
+       'lc'                        => array( '0', 'LB:', 'LC:' ),
+       'uc'                        => array( '0', 'SB:', 'UC:' ),
+       'raw'                       => array( '0', 'RÅ:', 'RAW:' ),
+       'displaytitle'              => array( '1', 'VISATITEL', 'DISPLAYTITLE' ),
+       'newsectionlink'            => array( '1', '__NYTTAVSNITTLÄNK__', '__NEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'NUVARANDEVERSION', 'NUVERSION', 'CURRENTVERSION' ),
+       'currenttimestamp'          => array( '1', 'NUTIDSTÄMPEL', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', 'LOKALTIDSTÄMPEL', 'LOCALTIMESTAMP' ),
+       'language'                  => array( '0', '#SPRÅK:', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'INNEHÅLLSSPRÅK', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', 'SIDORINAMNRYMD:', 'SIDORINR:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', 'ANTALADMINS', 'ANTALADMINISTRATÖRER', 'NUMBEROFADMINS' ),
+       'formatnum'                 => array( '0', 'FORMATERANUM', 'FORMATERATAL', 'FORMATNUM' ),
+       'defaultsort'               => array( '1', 'STANDARDSORTERING:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'filepath'                  => array( '0', 'FILSÖKVÄG:', 'FILEPATH:' ),
+       'tag'                       => array( '0', 'tagg', 'tag' ),
+       'hiddencat'                 => array( '1', '__DOLDKAT__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'SIDORIKATEGORI', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'SIDSTORLEK', 'PAGESIZE' ),
+       'index'                     => array( '1', '__INDEXERA__', '__INDEX__' ),
+       'noindex'                   => array( '1', '__INTEINDEXERA_', '__NOINDEX__' ),
+       'numberingroup'             => array( '1', 'ANTALIGRUPP', 'NUMBERINGROUP', 'NUMINGROUP' ),
+       'staticredirect'            => array( '1', '__STATISKOMDIRIGERING__', '__STATICREDIRECT__' ),
+       'protectionlevel'           => array( '1', 'SKYDDSNIVÅ', 'PROTECTIONLEVEL' ),
+       'formatdate'                => array( '0', 'formateradatum', 'datumformat', 'formatdate', 'dateformat' ),
 );
 
 $linkTrail = '/^([a-zåäöéÅÄÖÉ]+)(.*)$/sDu';
@@ -638,7 +639,7 @@ I [[Special:SpecialPages|listan över specialsidor]] kan du se vilka specialsido
 'error' => 'Fel',
 'databaseerror' => 'Databasfel',
 'dberrortext' => 'Ett syntaxfel i databasfrågan har uppstått.
-Detta kan indikera en bug i mjukvaran.
+Detta kan indikera en bugg i mjukvaran.
 Den senaste databasfrågan att köras var:
 <blockquote><tt>$1</tt></blockquote>
 från funktionen "<tt>$2</tt>".
@@ -981,11 +982,10 @@ Detaljer kan hittas i [{{fullurl:{{#Special:Log}}/delete|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' => "'''OBS:''' Sedan du sparat sidan kan du behöva tömma din webbläsares cache för att se ändringarna.
+'clearyourcache' => "'''OBS:''' Efter du sparat sidan kan du behöva tömma din webbläsares cache för att se ändringarna.
 *'''Firefox / Safari:''' Håll ned ''Skift'' och klicka på ''Uppdatera sidan'' eller tryck antingen ''Ctrl-F5'' eller ''Ctrl-R'' (''⌘-R'' på Mac)
 *'''Google Chrome:''' Tryck ''Ctrl-Skift-R''  (''⌘-Shift-R'' på Mac)
 *'''Internet Explorer:'''  Håll ned ''Ctrl'' och klicka på ''Uppdatera'' eller tryck ''Ctrl-F5''
-*'''Konqueror:''' Klicka på ''Reload'' eller tryck på ''F5''
 *'''Opera:''' Rensa cachen i ''Verktyg → Inställningar''",
 '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.",
@@ -1293,6 +1293,10 @@ Se till att sidhistorikens kontinuitet behålls när du sammanfogar historik.',
 'editundo' => 'gör ogjord',
 '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 användare visas inte)',
+'difference-missing-revision' => '{{PLURAL:$2|En revision|$2 revisioner}} av denna skillnad ($1) kunde inte hittas.
+
+Detta orsakas vanligtvis av att följa en utgången difflänk till en sida som har raderats.
+Detaljer kan hittas i [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} raderingsloggen].',
 
 # Search results
 'searchresults' => 'Sökresultat',
@@ -1993,6 +1997,7 @@ Kanske vill du redigera beskrivningen på dess [$2 filbeskrivningssida] där.',
 'shared-repo-from' => 'från $1',
 'shared-repo' => 'en gemensam filförvaring',
 'filepage.css' => '/* CSS som skrivs här inkluderas på filbeskrivningssidan, även på utländska klientwikis */',
+'upload-disallowed-here' => 'Du kan inte skriva över denna bild.',
 
 # File reversion
 'filerevert' => 'Återställ $1',
@@ -2073,8 +2078,8 @@ Innan mallarna raderas, kontrollera att det inte finns andra länkar till dem.',
 
 'disambiguations' => 'Sidor som länkar till förgreningssidor',
 'disambiguationspage' => 'Template:Förgrening',
-'disambiguations-text' => "Följande sidor länkar till ''förgreningssidor''.
-Länkarna bör troligtvis ändras så att de länkar till en artikel istället.<br />
+'disambiguations-text' => "Följande sidorna innehåller minst en länk till en '''förgreningssida'''.
+De bör troligtvis ändras så att de länkar till en mer passande sida istället.<br />
 En sida anses vara en förgreningssida om den inkluderar en mall som länkas till från [[MediaWiki:Disambiguationspage]].",
 
 'doubleredirects' => 'Dubbla omdirigeringar',
@@ -2099,6 +2104,7 @@ En sida anses vara en förgreningssida om den inkluderar en mall som länkas til
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|byte|byte}}',
 'ncategories' => '$1 {{PLURAL:$1|kategori|kategorier}}',
+'ninterwikis' => '$1 {{PLURAL:$1|interwiki|interwikis}}',
 'nlinks' => '$1 {{PLURAL:$1|länk|länkar}}',
 'nmembers' => '$1 {{PLURAL:$1|medlem|medlemmar}}',
 'nrevisions' => '$1 {{PLURAL:$1|version|versioner}}',
@@ -2127,6 +2133,7 @@ En sida anses vara en förgreningssida om den inkluderar en mall som länkas til
 'mostlinkedtemplates' => 'Mest använda mallar',
 'mostcategories' => 'Sidor med flest kategorier',
 'mostimages' => 'Filer med flest länkar till sig',
+'mostinterwikis' => 'Sidor med flest interwikis',
 'mostrevisions' => 'Sidor med flest ändringar',
 'prefixindex' => 'Alla sidor med prefix',
 'prefixindex-namespace' => 'Alla sidor med prefix ($1 namnrymder)',
@@ -2272,6 +2279,8 @@ Det kan finnas [[{{MediaWiki:Listgrouprights-helppage}}|ytterligare information]
 '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',
+'emailuser-title-target' => 'Skicka e-post till denna {{GENDER:$1|användare}}',
+'emailuser-title-notarget' => 'E-postanvändare',
 '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.',
@@ -2908,6 +2917,7 @@ All överföring mellan wikier (transwiki) listas i  [[Special:Log/import|import
 'import-interwiki-templates' => 'Inkludera alla mallar',
 'import-interwiki-submit' => 'Importera',
 'import-interwiki-namespace' => 'Målnamnrymd:',
+'import-interwiki-rootpage' => 'Destinationens grundsida (valfri):',
 'import-upload-filename' => 'Filnamn:',
 'import-comment' => 'Kommentar:',
 'importtext' => 'Var god exportera filen från ursprungs-wikin med hjälp av [[Special:Export|exporteringsverktyget]].
@@ -2940,6 +2950,9 @@ Spara den på din dator och ladda upp den här.',
 'import-error-interwiki' => 'Sidan "$1" är inte importerad eftersom dess namn är reserverat för externa länkar (interwiki).',
 'import-error-special' => 'Sidan "$1" är inte importerad eftersom den tillhör en särskild namnrymd som inte tillåter sidor.',
 'import-error-invalid' => 'Sidan "$1" är inte importerad eftersom dess namn är ogiltigt.',
+'import-options-wrong' => 'Fel {{PLURAL:$2|alternativ|alternativ}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'Angiven grundsida är en ogiltig titel.',
+'import-rootpage-nosubpage' => 'Namnrymden "$1" till grundsidan tillåter inte undersidor.',
 
 # Import log
 'importlogpage' => 'Importlogg',
@@ -3093,11 +3106,33 @@ Detta orsakades troligen av en länk till en svartlistad webbplats.',
 
 # Info page
 'pageinfo-title' => 'Information om "$1"',
-'pageinfo-header-edits' => 'Redigeringar',
+'pageinfo-header-basic' => 'Grundläggande information',
+'pageinfo-header-edits' => 'Redigeringshistorik',
+'pageinfo-header-restrictions' => 'Sidskydd',
+'pageinfo-header-properties' => 'Sidegenskaper',
+'pageinfo-display-title' => 'Visningstitel',
+'pageinfo-default-sort' => 'Standardsorteringsnyckel',
+'pageinfo-length' => 'Sidlängd (i byte)',
+'pageinfo-article-id' => 'Sid-ID',
+'pageinfo-robot-policy' => 'Sökmotorns status',
+'pageinfo-robot-index' => 'Indexerbar',
+'pageinfo-robot-noindex' => 'Inte indexerbar',
 'pageinfo-views' => 'Antal visningar',
 'pageinfo-watchers' => 'Antal användare som bevakar sidan',
-'pageinfo-edits' => 'Antal redigeringar',
-'pageinfo-authors' => 'Antal olika författare',
+'pageinfo-redirects-name' => 'Omdirigeringar till denna sida',
+'pageinfo-subpages-name' => 'Undersidor till denna sida',
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|omdirigering|omdirigeringar}}; $3 {{PLURAL:$3|icke-omdirigering|icke-omdirigeringar}})',
+'pageinfo-firstuser' => 'Sidskapare',
+'pageinfo-firsttime' => 'Datum när sidan skapades',
+'pageinfo-lastuser' => 'Senaste redigeraren',
+'pageinfo-lasttime' => 'Datum för senaste redigeringen',
+'pageinfo-edits' => 'Totalt antal redigeringar',
+'pageinfo-authors' => 'Totalt antal olika författare',
+'pageinfo-recent-edits' => 'Antal nyliga redigeringar (inom de senaste $1)',
+'pageinfo-recent-authors' => 'Antal nyliga olika författare',
+'pageinfo-restriction' => 'Sidskydd (<code>{{lcfirst:$1}}</code>)',
+'pageinfo-magic-words' => '{{PLURAL:$1|Magiskt|Magiska}} ord ($1)',
+'pageinfo-hidden-categories' => '{{PLURAL:$1|Dold kategori|Dolda kategorier}} ($1)',
 
 # Skin names
 'skinname-standard' => 'Standard',
@@ -3152,6 +3187,7 @@ Om du kör den kan din dator skadas.",
 'file-info-size-pages' => '$1 × $2 pixlar, filstorlek: $3, MIME-typ: $4, $5 {{PLURAL:$5|sida|sidor}}',
 'file-nohires' => 'Det finns ingen version med högre upplösning.',
 'svg-long-desc' => 'SVG-fil, grundstorlek: $1 × $2 pixlar, filstorlek: $3',
+'svg-long-desc-animated' => 'animerad SVG-fil, nominellt $1 × $2 pixlar, filstorlek: $3',
 'show-big-image' => 'Högupplöst version',
 'show-big-image-preview' => 'Storlek på förhandsvisningen: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Annan upplösning|Andra upplösningar}}: $1.',
@@ -3161,6 +3197,8 @@ Om du kör den kan din dator skadas.",
 'file-info-png-looped' => 'upprepad',
 'file-info-png-repeat' => 'spelad $1 {{PLURAL:$1|gång|gånger}}',
 'file-info-png-frames' => '$1 {{PLURAL:$1|bild|bilder}}',
+'file-no-thumb-animation' => "'''OBS: På grund av tekniska begränsningar kommer inte miniatyrer av denna fil animeras.'''",
+'file-no-thumb-animation-gif' => "'''OBS: På grund av tekniska begränsningar kommer inte miniatyrer av GIF-bilder med hög upplösning som denna animeras.'''",
 
 # Special:NewFiles
 'newimages' => 'Galleri över nya filer',
index 4050064..c4e2b29 100644 (file)
@@ -1498,7 +1498,7 @@ Tafadhali uhakikishe kwamba ni kweli unataka kupakia faili hili.',
 'windows-nonascii-filename' => 'Wiki hii haiwezi kutumia majina ya mafaili yenye herufi maalumu.',
 'fileexists' => 'Faili lenye jina hili lipo tayari, tafadhali tazama <strong>[[:$1]]</strong> ikiwa una mashaka kuhusu kulibadilisha.
 [[$1|thumb]]',
-'filepageexists' => 'Ukurasa wa maelezo kwa ajili ya faili hili tayari umeshaanzishwa katika <strong>[[:$1]]</strong>, lakini bado hakuna faili lenye jina hili kwa sasa.
+'filepageexists' => 'Ukurasa wa maelezo kwa ajili ya faili hili tayari umeshaanzishwa katika <strong>[[:$1]]</strong>, lakini hakuna faili lenye jina hili kwa sasa.
 Muhtasari utakaoandika hautaonekana katika ukurasa wa maelezo.
 Kufanya muhtasari wako uonekana pale, utahitajika uhariri ukurasa kwa mikono.
 [[$1|thumb]]',
@@ -1510,7 +1510,7 @@ Tafadhali chagua jina lingine.',
 [[$1|thumb]]
 Tafadhali tazama faili la <strong>[[:$1]]</strong>.
 Ikiwa faili hili linaonyesha picha ile ile kwa ukubwa wa kawaida hakuna haja ya kupakia faili lingine la picha ndogo.",
-'file-thumbnail-no' => "Jina la faili linaloanza na <strong>$1</strong>.
+'file-thumbnail-no' => "Jina la faili linaanza na <strong>$1</strong>.
 Inaonekana kuwa ni picha iliyopunguzwa ukubwa''(thumbnail)''.
 Ikiwa unaoyo picha hii kwa ukubwa wa kawaida tafadhali pakia picha hii, vinginevyo tafadhali badilisha jina la faili.",
 'fileexists-forbidden' => 'Faili lenye jina hili lipo tayari, na haliwezi kuandikizwa.
@@ -1598,7 +1598,9 @@ Haliwezi kukaguliwa vilivyo kwa sababu za kiusalama.',
 
 # img_auth script messages
 'img-auth-accessdenied' => 'Ruksa imekataliwa',
+'img-auth-nologinnWL' => '',
 'img-auth-nofile' => 'Hakuna faili la "$1".',
+'img-auth-isdir' => '',
 'img-auth-noread' => 'Mtumiaji hana fursa ya kusoma "$1".',
 
 # HTTP errors
@@ -2124,7 +2126,7 @@ ukurasa huu una mhariri mmoja tu.',
 'protect-unchain-permissions' => 'Fungua chaguzi zingine za ulindaji',
 'protect-text' => "Unaweza kutazama na kubadilisha kiwango cha ulindaji hapa kwa ukurasa '''$1'''.",
 'protect-locked-dblock' => "Viwango vya ulindaji haviwezi kubadilishwa kwa sababu hifadhidata imefungwa.
-Hapo panaandikwa viwango vya ulindaji wa ukurasa '''$1''':",
+Hii hapa ni mipangilio iliyopo kwa ajili ya ukurasa '''$1''':",
 'protect-locked-access' => "Akaunti yako hairuhusiwi kubadilisha viwango vya ulindaji.
 Hivi ni vipimo kwa ukurasa '''$1''':",
 'protect-cascadeon' => 'Ukurasa huu umelindwa kwa sababu umezingatiwa katika {{PLURAL:$1|ukurasa $1 unaolinda kurasa chini yake|kurasa $1 zinazolinda kurasa chini yake}}. Unaweza kubadilisha kiwango cha ulindaji wa ukurasa huu, lakini hutaathirika ulindaji kutoka kurasa juu yake.',
@@ -2134,13 +2136,13 @@ Hivi ni vipimo kwa ukurasa '''$1''':",
 'protect-level-sysop' => 'Wakabidhi tu',
 'protect-summary-cascade' => 'ulindaji kwa kurasa chini yake',
 'protect-expiring' => 'itakwisha $1 (UTC)',
-'protect-expiring-local' => 'inaishia saa $1',
+'protect-expiring-local' => 'inaisha $1',
 'protect-expiry-indefinite' => 'bila mwisho',
 'protect-cascade' => 'Linda kurasa zinazozingatiwa chini ya ukurasa huu',
 'protect-cantedit' => 'Huwezi kubadilisha kiwango cha ulindaji wa ukurasa huu, kwa sababu huruhusiwi kuuhariri.',
 'protect-othertime' => 'Kipindi kingine:',
 'protect-othertime-op' => 'kipindi kingine',
-'protect-existing-expiry' => 'Kipindi cha ulindaji uliowekwa unaishia: $3, $2',
+'protect-existing-expiry' => 'Muda wa kwisha uliopo: $3, $2',
 'protect-otherreason' => 'Sababu nyingine:',
 'protect-otherreason-op' => 'Sababu nyingine',
 'protect-dropdown' => '*Sababu za kawaida za ulindaji
@@ -2152,8 +2154,8 @@ Hivi ni vipimo kwa ukurasa '''$1''':",
 'protect-expiry-options' => 'saa 1:1 hour,siku 1:1 day,wiki 1:1 week,wiki 2:2 weeks,mwezi 1:1 month,miezi 3:3 months,miezi 6:6 months,mwaka 1:1 year,milele:infinite',
 'restriction-type' => 'Ruhusa:',
 'restriction-level' => 'Kiwango cha kizuia:',
-'minimum-size' => 'Saizi ndogo mno',
-'maximum-size' => 'Saizi kubwa mno:',
+'minimum-size' => 'Saizi ndogo',
+'maximum-size' => 'Saizi kubwa:',
 'pagesize' => '(baiti)',
 
 # Restrictions (nouns)
@@ -2164,8 +2166,8 @@ Hivi ni vipimo kwa ukurasa '''$1''':",
 
 # Restriction levels
 'restriction-level-sysop' => 'umelindwa kabisa',
-'restriction-level-autoconfirmed' => 'umelindwa kwa kiasi',
-'restriction-level-all' => 'chochote',
+'restriction-level-autoconfirmed' => 'umelindwa kiasi',
+'restriction-level-all' => 'kiasi chochote',
 
 # Undelete
 'undelete' => 'Kuzitazama kurasa zilizofutwa',
@@ -2569,7 +2571,7 @@ Tafadhali jaribu tena.',
 'pageinfo-title' => 'Taarifa juu ya "$1"',
 'pageinfo-header-edits' => 'Maharirio',
 'pageinfo-watchers' => 'Idadi ya wanaofuatilia',
-'pageinfo-edits' => 'Idadi ya haririo',
+'pageinfo-edits' => 'Idadi ya maharirio',
 
 # Image deletion
 'deletedrevision' => 'Pitio la awali lililofutwa $1',
index 5a676a4..c843c68 100644 (file)
 $fallback = 'pl';
 
 $namespaceNames = array(
-       NS_SPECIAL        => 'Szpecyjalna',
-       NS_TALK           => 'Dyskusyjo',
-       NS_USER           => 'Używacz',
-       NS_USER_TALK      => 'Dyskusyjo_używacza',
-       NS_PROJECT_TALK   => 'Dyskusyjo_$1',
-       NS_FILE           => 'Plik',
-       NS_FILE_TALK      => 'Dyskusyjo_plika',
-       NS_MEDIAWIKI      => 'MediaWiki',
-       NS_MEDIAWIKI_TALK => 'Dyskusyjo_MediaWiki',
-       NS_TEMPLATE       => 'Muster',
-       NS_TEMPLATE_TALK  => 'Dyskusyjo_mustra',
-       NS_HELP           => 'Půmoc',
-       NS_HELP_TALK      => 'Dyskusyjo_půmocy',
-       NS_CATEGORY       => 'Kategoryjo',
-       NS_CATEGORY_TALK  => 'Dyskusyjo_kategoryji',
+       NS_SPECIAL          => 'Szpecyjalna',
+       NS_TALK             => 'Dyskusyjo',
+       NS_USER             => 'Używacz',
+       NS_USER_TALK        => 'Dyskusyjo_używacza',
+       NS_PROJECT_TALK     => 'Dyskusyjo_$1',
+       NS_FILE             => 'Plik',
+       NS_FILE_TALK        => 'Dyskusyjo_plika',
+       NS_MEDIAWIKI        => 'MediaWiki',
+       NS_MEDIAWIKI_TALK   => 'Dyskusyjo_MediaWiki',
+       NS_TEMPLATE         => 'Muster',
+       NS_TEMPLATE_TALK    => 'Dyskusyjo_mustra',
+       NS_HELP             => 'Půmoc',
+       NS_HELP_TALK        => 'Dyskusyjo_půmocy',
+       NS_CATEGORY         => 'Kategoryjo',
+       NS_CATEGORY_TALK    => 'Dyskusyjo_kategoryji',
 );
 
 $namespaceAliases = array(
index c91d3cb..8b704d3 100644 (file)
@@ -61,19 +61,19 @@ $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' ),
+       '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";
@@ -1887,7 +1887,7 @@ $1',
 'allpagesprefix' => 'பின்வரும் முன்னொட்டு உடைய பக்கங்களை காட்டு:',
 'allpagesbadtitle' => 'கொடுக்கப்பட்ட தலைப்பு செல்லுபடியற்றது அல்லது பிழையான விக்கியிடை அல்லது மொழி முன்னொட்டைக் கொண்டுள்ளது. இது தலைப்புக்களில் பயன்படுத்த முடியாத எழுத்துக்களையும் கொண்டிருக்கலாம்.',
 'allpages-bad-ns' => '{{SITENAME}} தளத்தில் "$1" பெயர்வெளி கிடையாது.',
-'allpages-hide-redirects' => 'வழிமாற்றுகளைப் மறை',
+'allpages-hide-redirects' => 'வழிமாற்றுகளை மறை',
 
 # SpecialCachedPage
 'cachedspecial-refresh-now' => 'அண்மையான பதிப்பை காண்க',
index e2a72a3..95d9f23 100644 (file)
@@ -7,6 +7,7 @@
  * @ingroup Language
  * @file
  *
+ * @author Arjunaraoc
  * @author Chaduvari
  * @author Jprmvnvijay5
  * @author Kaganer
@@ -128,13 +129,13 @@ $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' ),
-       'special'                 => array( '0', 'ప్రత్యేక', 'special' ),
+       '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' ),
+       'special'                   => array( '0', 'ప్రత్యేక', 'special' ),
 );
 
 $linkTrail = "/^([\xE0\xB0\x81-\xE0\xB1\xAF]+)(.*)$/sDu";
@@ -692,6 +693,7 @@ $2
 # Special:ChangeEmail
 'changeemail' => 'ఈ-మెయిలు చిరునామా మార్పు',
 'changeemail-header' => 'ఖాతా ఈ-మెయిల్ చిరునామాని మార్చండి',
+'changeemail-text' => 'మీ ఈమెయిలు చిరునామాని మార్చుకోడానికి ఈ ఫారాన్ని నింపండి. ఈ మార్పుని నిర్ధారించడానికి మీ సంకేతపదాన్ని ఇవ్వాల్సివస్తుంది.',
 'changeemail-no-info' => 'ఈ పేజీని నేరుగా చూడటానికి మీరు లోనికి ప్రవేశించివుండాలి.',
 'changeemail-oldemail' => 'ప్రస్తుత ఈ-మెయిలు చిరునామా:',
 'changeemail-newemail' => 'కొత్త ఈ-మెయిలు చిరునామా:',
index 351c01b..4ddee10 100644 (file)
@@ -78,7 +78,7 @@ $messages = array(
 'tog-hideminor' => "Lá'os hatudu muda ki-ki'ik iha mudansa foufoun sira",
 'tog-usenewrc' => 'Iha lista "mudansa foufoun sira" no "lista hateke": Hatudu mudansa iha grupu sira - grupu ida ba pájina ida (presiza JavaScript)',
 'tog-showtoolbar' => 'Hatudu kaixa edita (presiza JavaScript)',
-'tog-watchcreations' => "Hateke pájina sira-ne'ebé ha'u kria",
+'tog-watchcreations' => "Hateke pájina no imajen sira-ne'ebé ha'u kria/tau iha arkivu laran",
 'tog-watchdefault' => "Hateke pájina sira-ne'ebé ha'u edita",
 'tog-watchmoves' => "Hateke pájina sira-ne'ebé ha'u book",
 'tog-watchdeletion' => "Hateke pájina sira-ne'ebé ha'u halakon",
@@ -764,6 +764,7 @@ Ita-nia mudansa la armazenadu seidauk!",
 'contribslink' => 'kontribuisaun',
 'block-log-flags-nocreate' => 'la bele kria konta foun',
 'block-log-flags-noemail' => 'korreiu eletróniku blokeiu',
+'block-log-flags-nousertalk' => 'la bele edita pájina diskusaun rasik',
 'ipb_already_blocked' => 'Ema ruma blokeiu "$1" tiha ona',
 
 # Move page
index 3940971..ec4f919 100644 (file)
@@ -139,12 +139,12 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#เปลี่ยนทาง', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__ไม่มีสารบัญ__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__ไม่มีแกลเลอรี่__', '__NOGALLERY__' ),
-       'noeditsection'           => array( '0', '__ไม่มีแก้เฉพาะส่วน__', '__NOEDITSECTION__' ),
-       'currentmonth'            => array( '1', 'เดือนปัจจุบัน', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonthname'        => array( '1', 'ชื่อเดือนปัจจุบัน', 'CURRENTMONTHNAME' ),
+       'redirect'                  => array( '0', '#เปลี่ยนทาง', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__ไม่มีสารบัญ__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__ไม่มีแกลเลอรี่__', '__NOGALLERY__' ),
+       'noeditsection'             => array( '0', '__ไม่มีแก้เฉพาะส่วน__', '__NOEDITSECTION__' ),
+       'currentmonth'              => array( '1', 'เดือนปัจจุบัน', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonthname'          => array( '1', 'ชื่อเดือนปัจจุบัน', 'CURRENTMONTHNAME' ),
 );
 
 $datePreferences = array(
@@ -211,13 +211,13 @@ $messages = array(
 'tog-enotifminoredits' => 'แม้ว่าการแก้ไขจะเป็นการแก้ไขเล็กน้อย',
 'tog-enotifrevealaddr' => 'เผยที่อยู่อีเมลในอีเมลที่ชี้แจง',
 'tog-shownumberswatching' => 'แสดงจำนวนผู้ใช้ที่เฝ้าดูหน้านี้',
-'tog-oldsig' => 'ลายà¹\80à¸\8bà¹\87à¸\99à¸\95à¹\8cà¹\80à¸\94ิมà¸\97ีà¹\88à¹\83à¸\8aà¹\89อยูà¹\88:',
+'tog-oldsig' => 'ลายเซ็นที่ใช้อยู่:',
 'tog-fancysig' => 'ใช้คำสั่งวิกิที่ปรากฏในลายเซ็นนี้ (ไม่มีการสร้างลิงก์อัตโนมัติ)',
 'tog-externaleditor' => 'ใช้โปรแกรมแก้ไขภายนอกโดยปริยาย (สำหรับผู้เชี่ยวชาญเท่านั้น ต้องการการตั้งค่าพิเศษบนคอมพิวเตอร์ของคุณ [//www.mediawiki.org/wiki/Manual:External_editors ข้อมูลเพิ่มเติม])',
 'tog-externaldiff' => 'ใช้โปรแกรมเปรียบเทียบภายนอกโดยปริยาย (สำหรับผู้เชี่ยวชาญเท่านั้น ต้องการการตั้งค่าพิเศษบนคอมพิวเตอร์ของคุณ [//www.mediawiki.org/wiki/Manual:External_editors ข้อมูลเพิ่มเติม])',
 'tog-showjumplinks' => 'เปิดใช้งาน "กระโดด" อัตโนมัติไปตามลิงก์',
 'tog-uselivepreview' => 'แสดงตัวอย่างการแก้ไขแบบทันที (จาวาสคริปต์) (ทดลอง)',
-'tog-forceeditsummary' => 'à¹\80à¸\95ือà¸\99à¹\80มืà¹\88อà¸\8aà¹\88อà¸\87สรุà¸\9bà¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82ว่าง',
+'tog-forceeditsummary' => 'à¹\80à¸\95ือà¸\99à¹\80มืà¹\88อà¸\8aà¹\88อà¸\87à¸\84ำอà¸\98ิà¸\9aายอยà¹\88าà¸\87ยà¹\88อว่าง',
 'tog-watchlisthideown' => 'ไม่แสดงการแก้ไขของตนเองจากรายการเฝ้าดูของตนเอง',
 'tog-watchlisthidebots' => 'ไม่แสดงการแก้ไขของบอตจากรายการเฝ้าดูของตนเอง',
 'tog-watchlisthideminor' => 'ไม่แสดงการแก้ไขเล็กน้อยจากรายการเฝ้าดูของตนเอง',
@@ -236,7 +236,7 @@ $messages = array(
 
 # Font style option in Special:Preferences
 'editfont-style' => 'รูปแบบของแบบตัวอักษรในกล่องแก้ไข:',
-'editfont-default' => 'ค่าตั้งต้นของ browser',
+'editfont-default' => 'ค่าตั้งต้นของเบราว์เซอร์',
 'editfont-monospace' => 'ชุดอักษรแบบความกว้างคงที่',
 'editfont-sansserif' => 'ชุดอักษรแบบไม่มีเชิง',
 'editfont-serif' => 'ชุดอักษรแบบมีเชิง',
@@ -385,7 +385,7 @@ $messages = array(
 'specialpage' => 'หน้าพิเศษ',
 'personaltools' => 'เครื่องมือส่วนตัว',
 'postcomment' => 'หัวข้อใหม่',
-'articlepage' => 'à¹\81สà¸\94à¸\87à¹\80à¸\99ืà¹\89อหาà¸\82อà¸\87หà¸\99à¹\89า',
+'articlepage' => 'à¹\81สà¸\94à¸\87หà¸\99à¹\89าà¹\80à¸\99ืà¹\89อหา',
 'talk' => 'อภิปราย',
 'views' => 'ดู',
 'toolbox' => 'เครื่องมือเพิ่ม',
@@ -394,7 +394,7 @@ $messages = array(
 'imagepage' => 'ดูหน้ารายละเอียดไฟล์',
 'mediawikipage' => 'ดูหน้าข้อความ',
 'templatepage' => 'ดูหน้าแม่แบบ',
-'viewhelppage' => 'à¸\94ูหà¸\99à¹\89าà¸\84ำอà¸\98ิà¸\9aาย',
+'viewhelppage' => 'à¸\94ูหà¸\99à¹\89าวิà¸\98ีà¹\83à¸\8aà¹\89',
 'categorypage' => 'ดูหน้าหมวดหมู่',
 'viewtalkpage' => 'ดูการพูดคุย',
 'otherlanguages' => 'ในภาษาอื่น',
@@ -406,8 +406,8 @@ $messages = array(
 'jumpto' => 'ข้ามไปที่:',
 'jumptonavigation' => 'นำทาง',
 'jumptosearch' => 'สืบค้น',
-'view-pool-error' => 'à¸\82ออภัย à¸\82à¸\93ะà¸\99ีà¹\89มีà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\87าà¸\99à¹\80à¸\8bิรà¹\8cà¸\9fà¹\80วอรà¹\8cมาà¸\81à¹\80à¸\81ิà¸\99à¸\97ีà¹\88à¸\88ะรัà¸\9aà¹\84à¸\94à¹\89
-à¸\9cูà¹\89à¸\97ีà¹\88à¸\9eยายามà¹\80à¸\82à¹\89าà¸\94ูหà¸\99à¹\89าà¸\99ีà¹\89มีà¸\88ำà¸\99วà¸\99มาà¸\81à¸\88à¸\99เกินไป
+'view-pool-error' => 'à¸\82ออภัย à¸\82à¸\93ะà¸\99ีà¹\89à¹\80à¸\8bิรà¹\8cà¸\9fà¹\80วอรà¹\8cมีภาระà¹\80à¸\81ิà¸\99
+à¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\9eยายามà¹\80à¸\82à¹\89าà¸\94ูหà¸\99à¹\89าà¸\99ีà¹\89มาà¸\81เกินไป
 กรุณารอสักครู่ก่อนที่จะเข้าดูหน้านี้อีกครั้งหนึ่ง
 
 $1',
@@ -418,7 +418,7 @@ $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' => 'à¹\80à¸\99ืà¹\89อหาà¹\83à¸\99หà¸\99à¹\89าà¸\99ีà¹\89อยูà¹\88ภายà¹\83à¸\95à¹\89ลิà¸\82สิà¸\97à¸\98ิà¹\8cà¹\81à¸\9aà¸\9a $1',
+'copyright' => 'à¹\80à¸\99ืà¹\89อหาอà¸\99ุà¸\8dาà¸\95à¹\83หà¹\89à¹\80à¸\9cยà¹\81à¸\9eรà¹\88ภายà¹\83à¸\95à¹\89 $1',
 'copyrightpage' => '{{ns:project}}:ลิขสิทธิ์',
 'currentevents' => 'เหตุการณ์ปัจจุบัน',
 'currentevents-url' => 'Project:เหตุการณ์ปัจจุบัน',
@@ -446,7 +446,7 @@ $1',
 'retrievedfrom' => 'รับข้อมูลจาก "$1"',
 'youhavenewmessages' => 'คุณมี $1 ($2)',
 'newmessageslink' => 'ข้อความใหม่',
-'newmessagesdifflink' => 'à¸\82à¹\89อà¸\84วามà¹\80à¸\82à¹\89ามาà¹\83หมà¹\88',
+'newmessagesdifflink' => 'à¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87ลà¹\88าสุà¸\94',
 'youhavenewmessagesmulti' => 'คุณมีข้อความใหม่ที่ $1',
 'editsection' => 'แก้ไข',
 'editold' => 'แก้ไข',
@@ -482,14 +482,14 @@ $1',
 'nstab-image' => 'ไฟล์',
 'nstab-mediawiki' => 'ข้อความ',
 'nstab-template' => 'แม่แบบ',
-'nstab-help' => 'หà¸\99à¹\89าà¸\84ำอà¸\98ิà¸\9aาย',
+'nstab-help' => 'หà¸\99à¹\89าวิà¸\98ีà¹\83à¸\8aà¹\89',
 'nstab-category' => 'หมวดหมู่',
 
 # Main script and global functions
 'nosuchaction' => 'ไม่มีการกระทำดังกล่าว',
 'nosuchactiontext' => 'การกระทำที่กำหนดผ่านยูอาร์แอลดังกล่าวไม่สามารถใช้ได้
-คุณอาจกรอกยูอาร์แอลผิด หรือ มาตามลิงก์ที่ไม่ถูกต้อง
-หรืออาà¸\88à¸\88ะà¹\80à¸\81ิà¸\94à¸\88าà¸\81à¸\82à¹\89อà¸\9cิà¸\94à¸\9eลาà¸\94à¹\83à¸\99à¹\82à¸\9bรà¹\81à¸\81รมซึ่ง {{SITENAME}} ใช้อยู่',
+คุณอาจกรอกยูอาร์แอลผิด หรือมาตามลิงก์ที่ไม่ถูกต้อง
+หรืออาà¸\88à¹\80à¸\81ิà¸\94à¸\88าà¸\81à¸\82à¹\89อà¸\9cิà¸\94à¸\9eลาà¸\94à¹\83à¸\99à¸\8bอà¸\9fà¸\95à¹\8cà¹\81วรà¹\8cซึ่ง {{SITENAME}} ใช้อยู่',
 'nosuchspecialpage' => 'ไม่มีหน้าพิเศษดังกล่าว',
 'nospecialpagetext' => '
 <strong>คุณร้องขอหน้าพิเศษไม่ถูกต้อง</strong>
@@ -535,7 +535,7 @@ $1',
 'filenotfound' => 'ไม่พบไฟล์ "$1"',
 'fileexistserror' => 'ไม่สามารถเขียนไฟล์ "$1" ได้ เนื่องจากมีไฟล์อยู่แล้ว',
 'unexpected' => 'ผลที่ไม่คาดคิด: "$1"="$2"',
-'formerror' => 'à¸\9cิà¸\94à¸\9eลาà¸\94: à¹\84มà¹\88สามารà¸\96สà¹\88à¸\87à¸\9fอรà¹\8cมได้',
+'formerror' => 'à¸\9cิà¸\94à¸\9eลาà¸\94: à¹\84มà¹\88สามารà¸\96สà¹\88à¸\87à¹\81à¸\9aà¸\9aได้',
 'badarticleerror' => 'การกระทำนี้ไม่สามารถดำเนินการในหน้านี้ได้',
 'cannotdelete' => 'ไม่สามารถลบหน้าหรือไฟล์ "$1" 
 อาจมีผู้อื่นลบไปแล้ว',
@@ -604,7 +604,7 @@ $1',
 'createaccountmail' => 'ผ่านทางอีเมล',
 'createaccountreason' => 'เหตุผล:',
 'badretype' => 'รหัสผ่านที่ใส่ไม่ถูกต้อง',
-'userexists' => 'à¸\8aืà¹\88อà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\87าà¸\99à¸\81รอà¸\81à¸\96ูà¸\81à¹\83à¸\8aà¹\89à¹\84à¸\9bà¹\81ลà¹\89ว. กรุณาเลือกชื่ออื่น',
+'userexists' => 'à¸\8aืà¹\88อà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\97ีà¹\88à¸\81รอà¸\81มีà¸\9cูà¹\89อืà¹\88à¸\99à¹\83à¸\8aà¹\89à¹\84à¸\9bà¹\81ลà¹\89ว กรุณาเลือกชื่ออื่น',
 'loginerror' => 'ล็อกอินผิดพลาด',
 'createaccounterror' => 'ไม่สามารถสร้างบัญชีผู้ใช้: $1',
 'nocookiesnew' => 'ชื่อบัญชีผู้ใช้ได้ถูกสร้างขึ้นแล้ว แต่ยังไม่ได้ล็อกอินเข้าสู่ {{SITENAME}} เนื่องจากว่าไม่ได้เปิดใช้คุกกี้ ถ้าต้องการล็อกอินให้เปิดใช้งานคุกกี้และทำการล็อกอินโดยใส่ชื่อผู้ใช้พร้อมรหัสผ่าน',
@@ -658,7 +658,7 @@ $1',
 'createaccount-text' => 'มีใครบางคนสร้างบัญชีผู้ใช้สำหรับที่อยู่อีเมลของคุณไว้บน {{SITENAME}} ($4) โดยใช้ชื่อบัญชีผู้ใช้ "$2" และรหัสผ่าน "$3" คุณควรล็อกอินเพื่อเปลี่ยนรหัสผ่านโดยทันที
 
 ข้อความนี้อาจจะไม่สำคัญสำหรับคุณ หากการสร้างบัญชีผู้ใช้นี้เกิดจากความผิดพลาด',
-'usernamehasherror' => 'à¹\84มà¹\88สามารà¸\96มีà¸\95ัวอัà¸\81ษร "#" à¹\83à¸\99à¸\8aืà¹\88อà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¹\84à¸\94à¹\89',
+'usernamehasherror' => 'à¹\83à¸\99à¸\8aืà¹\88อà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\95à¹\89อà¸\87à¹\84มà¹\88มีà¸\95ัวอัà¸\81ษร "#"',
 'login-throttled' => 'คุณได้พยายามล็อกอินมากครั้งเกินไป
 กรุณารอสักครู่แล้วลองใหม่อีกครั้ง',
 'login-abort-generic' => 'การเข้าสู่ระบบของคุณไม่ประสบความสำเร็จ - ล้มเลิกแล้ว',
@@ -677,7 +677,7 @@ $1',
 'newpassword' => 'รหัสผ่านใหม่:',
 'retypenew' => 'พิมพ์รหัสผ่านใหม่อีกครั้ง:',
 'resetpass_submit' => 'ตั้งรหัสผ่านและล็อกอิน',
-'resetpass_success' => 'รหัสà¸\9cà¹\88าà¸\99à¹\84à¸\94à¹\89à¸\96ูà¸\81à¹\80à¸\9bลีà¹\88ยà¸\99เรียบร้อย ขณะนี้กำลังล็อกอินให้คุณ...',
+'resetpass_success' => 'à¹\80à¸\9bลีà¹\88ยà¸\99รหัสà¸\9cà¹\88าà¸\99à¸\82อà¸\87à¸\84ุà¸\93เรียบร้อย ขณะนี้กำลังล็อกอินให้คุณ...',
 'resetpass_forbidden' => 'ไม่สามารถเปลี่ยนรหัสผ่านได้',
 'resetpass-no-info' => 'คุณต้องล็อกอินเพื่อที่จะเข้าถึงหน้านี้โดยตรง',
 'resetpass-submit-loggedin' => 'เปลี่ยนรหัสผ่าน',
@@ -701,7 +701,7 @@ $1',
 # Special:ChangeEmail
 'changeemail' => 'เปลี่ยนที่อยู่อีเมล',
 'changeemail-header' => 'เปลี่ยนที่อยู่อีเมลของบัญชีผู้ใช้',
-'changeemail-no-info' => 'à¸\84ุà¸\93à¸\88ำà¹\80à¸\9bà¹\87à¸\99à¸\95à¹\89อà¸\87à¹\80à¸\82à¹\89าสูà¹\88ระà¸\9aà¸\9aà¹\80à¸\9eืà¹\88อà¹\80à¸\82à¹\89าà¸\96ึà¸\87หà¸\99à¹\89าà¹\80อà¸\81สารà¸\99ีà¹\89à¹\84à¸\94้โดยตรง',
+'changeemail-no-info' => 'à¸\84ุà¸\93à¸\88ำà¹\80à¸\9bà¹\87à¸\99à¸\95à¹\89อà¸\87à¹\80à¸\82à¹\89าสูà¹\88ระà¸\9aà¸\9aà¹\80à¸\9eืà¹\88อà¹\80à¸\82à¹\89าà¸\96ึà¸\87หà¸\99à¹\89าà¸\99ี้โดยตรง',
 'changeemail-oldemail' => 'ที่อยู่อีเมลปัจจุบัน:',
 'changeemail-newemail' => 'ที่อยู่อีเมลใหม่:',
 'changeemail-none' => '(ไม่มี)',
@@ -833,7 +833,7 @@ $1 เป็นผู้ดำเนินการบล็อกในคร
 'token_suffix_mismatch' => "'''การแก้ไขของคุณได้ถูกปฏิเสธ เนื่องจากเครื่องลูกข่ายที่คุณใช้อยู่ได้ทำลายรูปแบบเครื่องหมายวรรคตอนในตราสารประจำการแก้ไข (edit token)'''
 ระบบไม่รับการแก้ไขของคุณเพื่อป้องกันความผิดพลาดของข้อมูล
 ในบางครั้งปัญหานี้จะเกิดขึ้นถ้าคุณใช้บริการเว็บพร็อกซีนิรนามที่มีบั๊ก",
-'edit_form_incomplete' => "'''à¸\9aาà¸\87สà¹\88วà¸\99à¸\82อà¸\87à¹\81à¸\9aà¸\9aà¸\9fอรà¹\8cมà¹\81à¸\81à¹\89à¹\84à¸\82à¹\84มà¹\88à¹\84à¸\94à¹\89à¸\95ิà¸\94à¸\95à¹\88อà¹\80à¸\8bิรà¹\8cà¸\9fà¹\80วอรà¹\8c à¸\95รวà¸\88สอà¸\9aอีà¸\81à¸\84รัà¹\89à¸\87วà¹\88าà¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\82อà¸\87à¸\84ุà¸\93ยัà¸\87à¸\84à¸\87อยูà¹\88à¹\81ละลอà¸\87à¹\83หมà¹\88อีกครั้ง'''",
+'edit_form_incomplete' => "'''à¸\9aาà¸\87สà¹\88วà¸\99à¸\82อà¸\87à¹\81à¸\9aà¸\9aà¹\81à¸\81à¹\89à¹\84à¸\82à¹\84à¸\9bà¹\84มà¹\88à¸\96ึà¸\87à¹\80à¸\8bิรà¹\8cà¸\9fà¹\80วอรà¹\8c à¸\95รวà¸\88สอà¸\9aอีà¸\81à¸\84รัà¹\89à¸\87วà¹\88าà¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\82อà¸\87à¸\84ุà¸\93ยัà¸\87à¸\84à¸\87อยูà¹\88à¹\81ละลอà¸\87อีกครั้ง'''",
 'editing' => 'กำลังแก้ไข $1',
 'creating' => 'สร้างหน้า $1',
 'editingsection' => 'กำลังแก้ไข $1 (เฉพาะส่วน)',
@@ -860,11 +860,11 @@ $1 เป็นผู้ดำเนินการบล็อกในคร
 'readonlywarning' => "'''คำเตือน: ขณะนี้ฐานข้อมูลถูกล็อกเพื่อบำรุงรักษา จึงไม่สามารถบันทึกข้อมูลที่แก้ไขได้ แนะนำให้คัดลอกไปเก็บไว้ที่อื่นก่อนแล้วนำมาบันทึกในเว็บไซต์นี้ภายหลัง'''
 
 ผู้ดูแลระบบที่ล็อกฐานข้อมูลได้ให้คำอธิบายดังนี้: $1",
-'protectedpagewarning' => "'''คำเตือน: หน้านี้ถูกล็อก และแก้ไขได้เฉพาะผู้ดูแลระบบเท่านั้น'''
-à¸\9aัà¸\99à¸\97ึà¸\81à¸\81ารà¸\9bà¹\89อà¸\87à¸\81ัà¸\99ลà¹\88าสุà¸\94à¸\96ูà¸\81à¹\81สà¸\94à¸\87à¹\84วà¹\89à¸\94à¹\89าà¸\99ลà¹\88าà¸\87à¹\80à¸\9eืà¹\88อà¸\81ารอà¹\89าà¸\87อิà¸\87",
+'protectedpagewarning' => "'''à¸\84ำà¹\80à¸\95ือà¸\99: à¸«à¸\99à¹\89าà¸\99ีà¹\89à¸\96ูà¸\81ลà¹\87อà¸\81 à¹\81ละà¹\81à¸\81à¹\89à¹\84à¸\82à¹\84à¸\94à¹\89à¹\80à¸\89à¸\9eาะà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\97ีà¹\88มีสิà¸\97à¸\98ิà¸\9cูà¹\89à¸\94ูà¹\81ลระà¸\9aà¸\9aà¹\80à¸\97à¹\88าà¸\99ัà¹\89à¸\99'''
+à¸\9bูมลà¹\88าสุà¸\94à¸\96ูà¸\81à¹\81สà¸\94à¸\87à¹\84วà¹\89à¸\94à¹\89าà¸\99ลà¹\88าà¸\87à¹\80à¸\9eืà¹\88อà¸\81ารอà¹\89าà¸\87อิà¸\87:",
 'semiprotectedpagewarning' => "'''หมายเหตุ:''' หน้านี้ถูกล็อก และแก้ไขได้เฉพาะผู้ใช้ที่ลงทะเบียนเท่านั้น
 รายการแก้ไขล่าสุดได้ถูกแสดงไว้ด้านล่างนี้เพื่อการอ้างอิง",
-'cascadeprotectedwarning' => "'''คำเตือน:''' หน้านี้ถูกล็อก และแก้ไขได้เฉพาะผู้ดูแลระบบเท่านั้น เนื่องจากหน้านี้สืบทอดการล็อกมาจาก{{PLURAL:$1|หน้า|หน้า}}ต่อไปนี้:",
+'cascadeprotectedwarning' => "'''à¸\84ำà¹\80à¸\95ือà¸\99:''' à¸«à¸\99à¹\89าà¸\99ีà¹\89à¸\96ูà¸\81ลà¹\87อà¸\81 à¹\81ละà¹\81à¸\81à¹\89à¹\84à¸\82à¹\84à¸\94à¹\89à¹\80à¸\89à¸\9eาะà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\97ีà¹\88มีสิà¸\97à¸\98ิà¸\9cูà¹\89à¸\94ูà¹\81ลระà¸\9aà¸\9aà¹\80à¸\97à¹\88าà¸\99ัà¹\89à¸\99 à¹\80à¸\99ืà¹\88อà¸\87à¸\88าà¸\81หà¸\99à¹\89าà¸\99ีà¹\89สืà¸\9aà¸\97อà¸\94à¸\81ารลà¹\87อà¸\81มาà¸\88าà¸\81{{PLURAL:$1|หà¸\99à¹\89า|หà¸\99à¹\89า}}à¸\95à¹\88อà¹\84à¸\9bà¸\99ีà¹\89:",
 'titleprotectedwarning' => "'''คำเตือน:  หน้านี้ได้รับการป้องกันไว้ให้สร้างได้โดย[[Special:ListGroupRights|ผู้ใช้ที่ได้รับสิทธิ]]เท่านั้น'''
 รายการแก้ไขล่าสุดได้ถูกแสดงไว้ด้านล่างนี้เพื่อการอ้างอิง",
 'templatesused' => '{{PLURAL:$1|แม่แบบ}}ที่ใช้ในหน้านี้:',
@@ -875,29 +875,29 @@ $1 เป็นผู้ดำเนินการบล็อกในคร
 'hiddencategories' => 'หน้านี้มี {{PLURAL:$1|1 หมวดหมู่ที่ซ่อนอยู่|$1 หมวดหมู่ที่ซ่อนอยู่}} :',
 'edittools' => '<!-- ข้อความนี้จะแสดงผลด้านใต้การแก้ไขและฟอร์มสำหรับอัปโหลด -->',
 'nocreatetitle' => 'จำกัดการสร้างหน้าใหม่',
-'nocreatetext' => 'เว็บไซต์นี้จำกัดการสร้างหน้าเว็บเพจใหม่
-à¸\84ุà¸\93สามารà¸\96à¸\97ำà¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82หà¸\99à¹\89าà¸\97ีà¹\88สรà¹\89าà¸\87à¹\84วà¹\89à¹\81ลà¹\89ว à¸«à¸£à¸·à¸­ [[Special:UserLogin|ล็อกอินหรือสร้างบัญชีผู้ใช้]]',
-'nocreate-loggedin' => 'คุณไม่ได้รับอนุญาตให้สร้างหน้าใหม่ได้',
+'nocreatetext' => '{{SITENAME}} จำกัดการสร้างหน้าใหม่
+à¸\84ุà¸\93สามารà¸\96ยà¹\89อà¸\99à¸\81ลัà¸\9aà¹\84à¸\9bà¹\81à¸\81à¹\89à¹\84à¸\82หà¸\99à¹\89าà¸\97ีà¹\88มีอยูà¹\88à¹\80à¸\94ิม à¸«à¸£à¸·à¸­[[Special:UserLogin|ล็อกอินหรือสร้างบัญชีผู้ใช้]]',
+'nocreate-loggedin' => 'คุณไม่ได้รับอนุญาตให้สร้างหน้าใหม่',
 'sectioneditnotsupported-title' => 'ไม่สนับสนุนการแก้ไขหัวข้อย่อย',
 'sectioneditnotsupported-text' => 'ไม่สนับสนุนการแก้ไขหัวข้อย่อยในหน้านี้',
 'permissionserrors' => 'ข้อผิดพลาดในการใช้สิทธิ',
 'permissionserrorstext' => 'คุณไม่ได้รับสิทธิในการทำสิ่งนี้ เนื่องจาก{{PLURAL:$1|เหตุผล|เหตุผล}}ต่อไปนี้:',
 'permissionserrorstext-withaction' => 'คุณไม่มีสิทธิ$2 ด้วย{{PLURAL:$1|เหตุผล|เหตุผล}}ต่อไปนี้:',
-'recreate-moveddeleted-warn' => "'''à¸\84ำà¹\80à¸\95ือà¸\99: à¸\84ุà¸\93à¸\81ำลัà¸\87à¸\88ะสรà¹\89าà¸\87หà¸\99à¹\89าà¹\83หมà¹\88à¸\8bึà¹\88à¸\87à¹\84à¸\94à¹\89à¸\96ูà¸\81ลà¸\9aà¹\84à¸\9bà¸\81à¹\88อà¸\99หà¸\99à¹\89าà¸\99ีà¹\89à¹\81ลà¹\89ว'''
+'recreate-moveddeleted-warn' => "'''à¸\84ำà¹\80à¸\95ือà¸\99: à¸\84ุà¸\93à¸\81ำลัà¸\87สรà¹\89าà¸\87หà¸\99à¹\89าà¸\8bึà¹\88à¸\87à¹\84à¸\94à¹\89à¸\96ูà¸\81ลà¸\9aà¹\84à¸\9bà¸\81à¹\88อà¸\99หà¸\99à¹\89าà¸\99ีà¹\89à¹\81ลà¹\89วอีà¸\81à¸\84รัà¹\89à¸\87'''
 
-คุณควรพิจารณาว่าการแก้ไขหน้านี้เหมาะสมหรือไม่
+à¸\84ุà¸\93à¸\84วรà¸\9eิà¸\88ารà¸\93าวà¹\88าà¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82หà¸\99à¹\89าà¸\99ีà¹\89à¸\95à¹\88อà¹\84à¸\9bà¹\80หมาะสมหรือà¹\84มà¹\88
 ปูมการลบและเปลี่ยนชื่อหน้านี้ได้แสดงไว้ด้านล่างเพื่อความสะดวก:",
 'moveddeleted-notice' => 'หน้านี้ถูกลบ
 ปูมการลบและเปลี่ยนชื่อของหน้านี้ได้แสดงไว้ด้านล่างเพื่ออ้างอิง',
 'log-fulllog' => 'ดูปูมแบบเต็ม',
 'edit-hook-aborted' => 'การแก้ไขถูกยกเลิก
 ไม่มีคำอธิบายสำหรับการยกเลิกนี้',
-'edit-gone-missing' => 'à¹\84มà¹\88สามารà¸\96à¸\9bรัà¸\9aà¹\81à¸\81à¹\89หน้าดังกล่าวได้
+'edit-gone-missing' => 'à¹\84มà¹\88สามารà¸\96อัà¸\9bà¹\80à¸\94à¸\95หน้าดังกล่าวได้
 เนื่องจากหน้านี้ถูกลบไปแล้ว',
 'edit-conflict' => 'แก้ชนกัน',
-'edit-no-change' => 'à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\82อà¸\87à¸\84ุà¸\93à¸\96ูà¸\81à¹\80à¸\9eิà¸\81à¹\80à¸\89ย à¹\80à¸\9eราะà¸\82à¹\89อà¸\84วามà¹\84มà¹\88à¸\96ูà¸\81à¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87à¹\83à¸\94 à¹\86 à¸\97ัà¹\89à¸\87สิà¹\89à¸\99',
-'edit-already-exists' => 'à¹\84มà¹\88สามารà¸\96สรà¹\89าà¸\87หà¸\99à¹\89าà¹\83หมà¹\88à¸\99ีà¹\89à¹\84à¸\94à¹\89
-à¹\80à¸\99ืà¹\88อà¸\87à¸\88าà¸\81มีหน้านี้แล้ว',
+'edit-no-change' => 'à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\82อà¸\87à¸\84ุà¸\93à¸\96ูà¸\81à¹\80à¸\9eิà¸\81à¹\80à¸\89ย à¹\80à¸\9eราะà¹\84มà¹\88มีà¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87à¹\83à¸\94 à¹\86',
+'edit-already-exists' => 'ไม่สามารถสร้างหน้าใหม่ได้
+à¹\80à¸\9eราะมีหน้านี้แล้ว',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => 'คำเตือน: หน้านี้มีการเรียกใช้ฟังก์ชันแจงส่วนมากเกินไป
@@ -953,8 +953,8 @@ $1 เป็นผู้ดำเนินการบล็อกในคร
 'history-feed-title' => 'ประวัติการปรับปรุง',
 'history-feed-description' => 'ประวัติการปรับปรุงของหน้านี้ในวิกิ',
 'history-feed-item-nocomment' => '$1 เมื่อ $2',
-'history-feed-empty' => 'หà¸\99à¹\89าà¸\97ีà¹\88à¸\95à¹\89อà¸\87à¸\81ารà¹\84มà¹\88มี มันอาจถูกลบหรือถูกเปลี่ยนชื่อไปแล้ว ให้ลอง
-[[Special:Search|à¸\84à¹\89à¸\99หาà¹\83à¸\99วิà¸\81ิà¸\99ีà¹\89]] à¸ªà¸³à¸«à¸£à¸±à¸\9aหà¸\99à¹\89าอืà¹\88à¸\99à¸\97ีà¹\88อาà¸\88à¹\80à¸\81ีà¹\88ยวà¸\82à¹\89อà¸\87',
+'history-feed-empty' => 'à¹\84มà¹\88มีหà¸\99à¹\89าà¸\97ีà¹\88à¸\95à¹\89อà¸\87à¸\81าร มันอาจถูกลบหรือถูกเปลี่ยนชื่อไปแล้ว ให้ลอง
+[[Special:Search|à¸\84à¹\89à¸\99หาà¹\83à¸\99วิà¸\81ิà¸\99ีà¹\89]] à¸ªà¸³à¸«à¸£à¸±à¸\9aหà¸\99à¹\89าà¹\83หมà¹\88à¸\97ีà¹\88à¹\80à¸\81ีà¹\88ยวà¸\82à¹\89อà¸\87',
 
 # Revision deletion
 'rev-deleted-comment' => '(คำอธิบายอย่างย่อถูกลบออก)',
@@ -1004,8 +1004,9 @@ $1 เป็นผู้ดำเนินการบล็อกในคร
 ผู้ดูแลระบบคนอื่นบน {{SITENAME}} จะยังคงสามารถเข้าถึงเนื้อหาที่ถูกซ่อน และสามารถกู้คืนขึ้นมาอีกครั้งในลักษณะเดิมเช่นนี้ เว้นแต่จะมีการตั้งค่าการควบคุมเพิ่มเติม",
 'revdelete-confirm' => 'กรุณายืนยันว่าคุณตั้งใจที่จะลบจริง และเข้าใจผลกระทบหลังจากนี้ที่จะเกิดขึ้น และกระทำกายภายใต้[[{{MediaWiki:Policy-url}}|นโยบาย]]',
 'revdelete-suppress-text' => "การระงับควรใช้ '''เฉพาะ''' กรณีต่อไปนี้:
+* ข้อมูลที่อาจหมิ่นประมาท
 * ข้อมูลส่วนบุคคลที่ไม่เหมาะสม
-*: ''à¸\97ีà¹\88อยูà¹\88à¹\81ละหมายà¹\80ลà¸\82à¹\82à¸\97รศัà¸\9eà¸\97à¹\8cà¸\88าà¸\81บ้าน, หมายเลขประกันสังคม, ฯลฯ''",
+*: ''à¸\97ีà¹\88อยูà¹\88à¸\9aà¹\89าà¸\99à¹\81ละหมายà¹\80ลà¸\82à¹\82à¸\97รศัà¸\9eà¸\97à¹\8cบ้าน, หมายเลขประกันสังคม, ฯลฯ''",
 'revdelete-legend' => 'ระบุการควบคุม:',
 'revdelete-hide-text' => 'ซ่อนข้อความรุ่นที่ปรับปรุง',
 'revdelete-hide-image' => 'ซ่อนเนื้อหาไฟล์',
@@ -1042,13 +1043,13 @@ $1",
 'revdelete-concurrent-change' => 'เกิดความผิดพลาดในการแก้ไขฉบับปรับปรุงในวันที่ $2 เวลา $1: สถานะของฉบับปรับปรุงได้ถูกเปลี่ยนโดยใครบางคนในขณะที่คุณพยายามแก้ไขอยู่
 กรุณาตรวจสอบประวัติการแก้ไข',
 'revdelete-only-restricted' => 'เกิดความผิดพลาดในการซ่อนฉบับปรับปรุงในวันที่ $2 เวลา $1: คุณไม่สามารถยับยั้งผู้ดูแลระบบจากการดูฉบับปรับปรุงนี้โดยที่ไม่ได้เลือกตัวเลือกการให้ดูอื่นๆ',
-'revdelete-reason-dropdown' => '*à¹\80หà¸\95ุà¸\9cลà¹\82à¸\94ยà¸\97ัà¹\88วà¹\84à¸\9bà¹\83à¸\99à¸\81ารลà¸\9a
+'revdelete-reason-dropdown' => '*à¹\80หà¸\95ุà¸\9cลà¸\81ารลà¸\9aà¸\97ัà¹\88วà¹\84à¸\9b
 ** ละเมิดลิขสิทธิ์
 ** มีข้อมูลส่วนบุคคลที่ไม่เหมาะสม
-** à¸¡à¸µà¸\82à¹\89อมูลà¸\97ีà¹\88อาà¸\88สรà¹\89าà¸\87à¸\84วามà¹\80สียหาย',
+** à¸¡à¸µà¸\82à¹\89อมูลà¸\97ีà¹\88อาà¸\88หมิà¹\88à¸\99à¸\9bระมาà¸\97',
 'revdelete-otherreason' => 'เหตุผลอื่นหรือเหตุผลเพิ่มเติม:',
 'revdelete-reasonotherlist' => 'เหตุผลอื่น',
-'revdelete-edit-reasonlist' => 'à¹\81à¸\81à¹\89à¹\84à¸\82รายà¸\8aืà¹\88อà¹\80หà¸\95ุà¸\9cลà¹\83à¸\99การลบ',
+'revdelete-edit-reasonlist' => 'à¹\81à¸\81à¹\89à¹\84à¸\82à¹\80หà¸\95ุà¸\9cลการลบ',
 'revdelete-offender' => 'ผู้เขียนของรุ่น:',
 
 # Suppression log
@@ -1115,7 +1116,7 @@ $1",
 'searchmenu-legend' => 'ตัวเลือกการค้นหา',
 'searchmenu-exists' => "'''มีหน้าชื่อ \"[[:\$1]]\" บนวิกินี้'''",
 'searchmenu-new' => "'''สร้างหน้า \"[[:\$1]]\" บนวิกินี้'''",
-'searchhelp-url' => 'Help:วิà¸\98ีà¸\81ารà¹\83à¸\8aà¹\89à¸\87าà¸\99',
+'searchhelp-url' => 'Help:สารà¸\9aัà¸\8d',
 'searchmenu-prefix' => '[[Special:PrefixIndex/$1|สืบค้นหน้าที่มีคำขึ้นต้นเหล่านี้]]',
 'searchprofile-articles' => 'หน้าบทความ',
 'searchprofile-project' => 'วิธีใช้และหน้าโครงการ',
@@ -1173,7 +1174,7 @@ $1",
 'mypreferences' => 'ตั้งค่าส่วนตัว',
 'prefs-edits' => 'จำนวนการแก้ไข:',
 'prefsnologin' => 'ไม่ได้ล็อกอิน',
-'prefsnologintext' => 'คุณต้อง<span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} ล็อกอิน]</span> ก่อนเพื่อที่จะตั้งค่าส่วนตัวได้',
+'prefsnologintext' => 'คุณต้อง<span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} ล็อกอิน]</span>ก่อนเพื่อตั้งค่าส่วนตัว',
 'changepassword' => 'เปลี่ยนรหัสผ่าน',
 'prefs-skin' => 'หน้าตา',
 'skin-preview' => 'แสดงตัวอย่าง',
@@ -1209,7 +1210,7 @@ $1",
 'recentchangesdays' => 'จำนวนวันที่แสดงในปรับปรุงล่าสุด:',
 'recentchangesdays-max' => '(สูงสุด $1 {{PLURAL:$1|วัน|วัน}})',
 'recentchangescount' => 'จำนวนการแก้ไขที่แสดงโดยปริยาย:',
-'prefs-help-recentchangescount' => 'นี่รวมไปถึงการแก้ไขล่าสุด, ประวิติของหน้า, และรายการแก้ไขอื่นๆ',
+'prefs-help-recentchangescount' => 'นี่รวมไปถึงการแก้ไขล่าสุด, ประวิติของหน้า, และรายการแก้ไขอื่น ๆ',
 'prefs-help-watchlist-token' => 'การเติมช่องนี้ด้วยรหัสลับจะสร้าง RSS feed สำหรับรายการเฝ้าดูของคุณ
 ผู้ใดที่รู้รหัสในช่องนี้จะสามารถดูรายการเฝ้าดูของคุณได้ ดังนั้นเลือกรหัสที่ปลอดภัย
 นี่คือรหัสที่สุ่มเลือกขึ้นมาที่คุณสามารถใช้ได้: $1',
@@ -1253,14 +1254,14 @@ $1",
 'yourlanguage' => 'ภาษา:',
 'yourvariant' => 'อักษรต่างรูปของเนื้อหา:',
 'yournick' => 'ลายเซ็น:',
-'prefs-help-signature' => 'à¸\84อมà¹\80มà¸\99à¸\95à¹\8cà¹\83à¸\99หà¸\99à¹\89าà¸\9eูà¸\94à¸\84ุยà¸\84วรà¸\88ะเซ็นด้วย "<nowiki>~~~~</nowiki>" ซึ่งจะถูกแปลงเป็นลายเซ็นและลงวันที่เขียน',
+'prefs-help-signature' => 'à¸\84วามà¹\80หà¹\87à¸\99à¹\83à¸\99หà¸\99à¹\89าà¸\9eูà¸\94à¸\84ุยà¸\84วรà¸\88ะลà¸\87ลายเซ็นด้วย "<nowiki>~~~~</nowiki>" ซึ่งจะถูกแปลงเป็นลายเซ็นและลงวันที่เขียน',
 'badsig' => 'ลายเซ็นที่ใช้ผิดพลาด กรุณาตรวจสอบคำสั่งเอชทีเอ็มแอล',
 'badsiglength' => 'ลายเซ็นของคุณยาวเกินไป ต้องมีความยาวไม่เกิน $1 {{PLURAL:$1|ตัวอักษร|ตัวอักษร}}',
 'yourgender' => 'เพศ:',
 'gender-unknown' => 'ไม่ระบุ',
 'gender-male' => 'ชาย',
 'gender-female' => 'หญิง',
-'prefs-help-gender' => 'à¹\80à¸\9bà¹\87à¸\99à¸\82à¹\89อมูลà¹\80สริม: à¹\83à¸\8aà¹\89à¹\80à¸\9eืà¹\88อà¹\83หà¹\89à¸\8bอà¸\9fà¸\95à¹\8cà¹\81วรà¹\8cสามารà¸\96à¹\81ยà¸\81à¹\81ยะà¹\80à¸\9eศà¸\82อà¸\87à¸\9cูà¹\89à¹\83à¸\8aà¹\89à¹\84à¸\94à¹\89  ข้อมูลนี้จะเป็นที่เปิดเผย',
+'prefs-help-gender' => 'à¹\80à¸\9bà¹\87à¸\99à¸\82à¹\89อมูลà¹\80สริม: à¹\83à¸\8aà¹\89à¹\80à¸\9eืà¹\88อà¹\83หà¹\89à¸\8bอà¸\9fà¸\95à¹\8cà¹\81วรà¹\8cà¹\81ยà¸\81à¹\81ยะà¹\80à¸\9eศà¸\82อà¸\87à¸\9cูà¹\89à¹\83à¸\8aà¹\89à¹\84à¸\94à¹\89 ข้อมูลนี้จะเป็นที่เปิดเผย',
 'email' => 'อีเมล',
 'prefs-help-realname' => 'ไม่จำเป็นต้องใส่ชื่อจริง โดยชื่อที่ใส่นั้นจะถูกใช้เพียงแค่แสดงผลงานที่คุณได้ร่วมสร้างไว้',
 'prefs-help-email' => 'ที่อยู่อีเมลไม่จำเป็นต้องใส่ แต่จำเป็นสำหรับการตั้งรหัสผ่านใหม่เมื่อคุณลืมรหัสผ่านของคุณ',
@@ -2125,8 +2126,8 @@ $UNWATCHURL
 'delete-warning-toobig' => 'หน้านี้มีประวัติการแก้ไขมากเกินกว่า $1 {{PLURAL:$1|รุ่น|รุ่น}} ซึ่งถือว่าเยอะมาก การลบหน้านี้อาจทำให้ {{SITENAME}} ได้รับความเสียหายอย่างที่ไม่เคยคาดคิดมาก่อน จึงได้เตือนไว้ ก่อนที่จะกระทำสิ่งนี้',
 
 # Rollback
-'rollback' => 'à¸\96อยการแก้ไขกลับฉุกเฉิน',
-'rollback_short' => 'à¸\96อยกลับฉุกเฉิน',
+'rollback' => 'ยà¹\89อà¸\99การแก้ไขกลับฉุกเฉิน',
+'rollback_short' => 'ยà¹\89อà¸\99กลับฉุกเฉิน',
 'rollbacklink' => 'ย้อนกลับฉุกเฉิน',
 'rollbackfailed' => 'ย้อนไม่สำเร็จ',
 'cantrollback' => 'ไม่สามารถย้อนการแก้ไขได้ เนื่องจากหน้านี้ไม่มีผู้แก้ไขรายอื่นอีก',
@@ -2389,7 +2390,7 @@ $1',
 'unblocklink' => 'เลิกบล็อก',
 'change-blocklink' => 'เปลี่ยนการบล็อก',
 'contribslink' => 'เรื่องที่เขียน',
-'emaillink' => 'ส่งอีเมล',
+'emaillink' => 'ส่งอีเมล',
 'autoblocker' => 'ถูกบล็อกอัตโนมัติเนื่องจากหมายเลขไอพีของคุณตรงกับ "[[User:$1|$1]]" ถูกบล็อกกล่อนหน้านี้เนื่องจากสาเหตุ: "$2"',
 'blocklogpage' => 'ปูมการบล็อก',
 'blocklog-showlog' => 'ผู้ใช้นี้ถูกสกัดกั้นมาก่อน
@@ -2462,28 +2463,28 @@ $1',
 
 <b>คำเตือน!</b>
 การเปลี่ยนชื่อจะมีผลอย่างมากกับสถิติของหน้านิยมที่มีคนเข้าดูมาก ให้แน่ใจว่าต้องการเปลี่ยนชื่อในครั้งนี้",
-'movepagetext-noredirectfixer' => "à¸\81ารà¹\83à¸\8aà¹\89à¹\81à¸\9aà¸\9aà¸\9fอรà¹\8cมà¸\94à¹\89าà¸\99ลà¹\88าà¸\87à¸\99ีà¹\89จะเปลี่ยนชื่อหน้า ซึ่งจะทำให้ประวัติทั้งหมดย้ายไปยังชื่อใหม่
+'movepagetext-noredirectfixer' => "à¸\81ารà¹\83à¸\8aà¹\89à¹\81à¸\9aà¸\9aà¸\94à¹\89าà¸\99ลà¹\88าà¸\87จะเปลี่ยนชื่อหน้า ซึ่งจะทำให้ประวัติทั้งหมดย้ายไปยังชื่อใหม่
 ชื่อเรื่องเก่าจะกลายเป็นหน้าเปลี่ยนทางไปยังชื่อเรื่องใหม่
¸­à¸¢à¹\88าลืมตรวจสอบ[[Special:DoubleRedirects|หน้าเปลี่ยนทางซ้ำซ้อน]]หรือ[[Special:BrokenRedirects|หน้าเปลี่ยนทางที่เสีย]]
-à¸\84ุà¸\93à¸\88ะà¹\80à¸\9bà¹\87à¸\99à¸\9cูà¹\89รัà¸\9aà¸\9cิà¸\94à¸\8aอà¸\9aà¹\80à¸\9eืà¹\88อà¹\83หà¹\89à¹\81à¸\99à¹\88à¹\83à¸\88วà¹\88าà¸\81ารà¹\80à¸\8aืà¹\88อมà¹\82ยà¸\87à¸\95à¹\88าà¸\87 à¹\86 à¸\8aีà¹\89à¹\84à¸\9bยัà¸\87à¸\97ีà¹\88à¸\97ีà¹\88à¸\9eวà¸\81มัà¸\99à¸\84วรà¸\88ะà¹\84à¸\9b
¹\83หà¹\89à¹\81à¸\99à¹\88à¹\83à¸\88วà¹\88า ตรวจสอบ[[Special:DoubleRedirects|หน้าเปลี่ยนทางซ้ำซ้อน]]หรือ[[Special:BrokenRedirects|หน้าเปลี่ยนทางที่เสีย]]
+à¸\84ุà¸\93à¸\88ะà¹\80à¸\9bà¹\87à¸\99à¸\9cูà¹\89รัà¸\9aà¸\9cิà¸\94à¸\8aอà¸\9aà¹\80à¸\9eืà¹\88อà¹\83หà¹\89à¹\81à¸\99à¹\88à¹\83à¸\88วà¹\88าลิà¸\87à¸\81à¹\8cà¸\95à¹\88าà¸\87 à¹\86 à¸¢à¸±à¸\87à¸\8aีà¹\89à¹\84à¸\9bยัà¸\87à¸\97ีà¹\88à¸\97ีà¹\88สมà¸\84วร
 
 โปรดทราบว่าหน้าดังกล่าวจะ'''ไม่'''ถูกย้าย ถ้ามีหน้าที่ใช้ชื่อเรื่องใหม่อยู่แล้ว เว้นแต่เป็นหน้าว่างหรือหน้าเปลี่ยนทาง และไม่มีประวัติการแก้ไขในอดีต
-à¸\8bึà¹\88à¸\87หมายà¸\84วามวà¹\88า à¸\84ุà¸\93สามารà¸\96à¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อหà¸\99à¹\89าà¸\81ลัà¸\9aà¹\84à¸\9bà¹\80à¸\9bà¹\87à¸\99à¸\8aืà¹\88อà¹\80à¸\94ิมหากคุณทำผิดพลาด และคุณไม่สามารถเขียนทับหน้าที่มีอยู่แล้วได้
+à¸\8bึà¹\88à¸\87หมายà¸\84วามวà¹\88า à¸\84ุà¸\93สามารà¸\96à¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อหà¸\99à¹\89าà¸\81ลัà¸\9aà¹\80à¸\9bà¹\87à¸\99à¸\8aืà¹\88อà¹\80à¸\94ิมà¹\84à¸\94à¹\89หากคุณทำผิดพลาด และคุณไม่สามารถเขียนทับหน้าที่มีอยู่แล้วได้
 
 '''คำเตือน!'''
 สิ่งนี้อาจเป็นการเปลี่ยนแปลงที่รุนแรงและไม่คาดคิดสำหรับหน้าที่เป็นที่นิยม
-à¹\82à¸\9bรà¸\94à¹\81à¸\99à¹\88à¹\83à¸\88วà¹\88าà¸\84ุà¸\93à¹\80à¸\82à¹\89าà¹\83à¸\88à¹\83à¸\99à¸\9cลà¸\82อà¸\87à¸\81ารà¸\81ระà¸\97ำนี้ก่อนที่จะดำเนินการต่อไป",
+à¹\82à¸\9bรà¸\94à¹\81à¸\99à¹\88à¹\83à¸\88วà¹\88าà¸\84ุà¸\93à¹\80à¸\82à¹\89าà¹\83à¸\88à¸\96ึà¸\87à¸\9cลลัà¸\9eà¸\98à¹\8cนี้ก่อนที่จะดำเนินการต่อไป",
 'movepagetalktext' => "หน้าพูดคุยของหน้านี้จะถูกเปลี่ยนชื่อตามไปด้วย '''เว้นเสียแต่:'''
-*หà¸\99à¹\89าà¸\9eูà¸\94à¸\84ุยà¹\84มà¹\88วà¹\88าà¸\87มีà¹\81ลà¹\89วà¸\97ีà¹\88ชื่อใหม่ หรือ
-*à¹\84à¸\94à¹\89เลือกไม่ต้องการเปลี่ยนชื่อด้านล่าง
+*มีหà¸\99à¹\89าà¸\9eูà¸\94à¸\84ุยà¸\97ีà¹\88à¹\84มà¹\88วà¹\88าà¸\87อยูà¹\88à¹\81ลà¹\89วภายà¹\83à¸\95à¹\89ชื่อใหม่ หรือ
+*à¸\84ุà¸\93เลือกไม่ต้องการเปลี่ยนชื่อด้านล่าง
 
-ในกรณีนั้นให้เปลี่ยนชื่อหน้าเอง",
+ในกรณีนั้น คุณจำต้องย้ายหรือรวมหน้าเองหากต้องการ",
 'movearticle' => 'เปลี่ยนชื่อ',
-'moveuserpage-warning' => "'''คำเตือน''' คุณกำลังจะย้ายหน้าผู้ใช้ โปรดทราบว่าหน้าผู้ใช้เท่านั้นที่จะถูกเปลี่ยนชื่อ แต่ผู้ใช้จะ'''ไม่ได้ถูกเปลี่ยนชื่อแต่อย่างใด'''",
+'moveuserpage-warning' => "'''คำเตือน''' คุณกำลังจะย้ายหน้าผู้ใช้ โปรดทราบว่าหน้าผู้ใช้เท่านั้นที่จะถูกเปลี่ยนชื่อ แต่ผู้ใช้จะ'''ไม่'''ถูกเปลี่ยนชื่อ",
 'movenologin' => 'ไม่ได้ล็อกอิน',
 'movenologintext' => 'ถ้าต้องการเปลี่ยนชื่อหน้านี้ ต้องลงทะเบียนและให้ทำการ[[Special:UserLogin|ล็อกอิน]]',
 'movenotallowed' => 'คุณไม่ได้รับอนุญาตให้ทำการย้ายหน้าต่าง ๆ',
-'movenotallowedfile' => 'à¸\84ุà¸\93à¹\84มà¹\88มีสิà¸\97à¸\98ิà¹\8cà¸\97ีà¹\88à¸\88ะยà¹\89ายà¹\84à¸\9fลà¹\8c',
+'movenotallowedfile' => 'คุณไม่มีสิทธิที่จะย้ายไฟล์',
 'cant-move-user-page' => 'คุณไม่มีสิทธิในการย้ายหน้าผู้ใช้ (แยกจากหน้าย่อย)',
 'cant-move-to-user-page' => 'คุณไม่มีสิทธิในการย้ายหน้าใด ๆ ไปเป็นหน้าผู้ใช้ (ยกเว้นหน้าย่อยของผู้ใช้)',
 'newtitle' => 'ชื่อใหม่',
@@ -2495,7 +2496,7 @@ $1',
 'movepage-moved-noredirect' => 'หน้าเปลี่ยนทางไม่ได้ถูกสร้าง',
 'articleexists' => 'หน้าที่ต้องการมีอยู่แล้ว หรือชื่อที่เลือกไม่ถูกต้อง กรุณาเลือกชื่อใหม่',
 'cantmove-titleprotected' => 'คุณไม่สามารถเปลี่ยนชื่อหน้าเป็นชื่อนี้ได้ เนื่องจากชื่อใหม่นี้ได้รับการป้องกันไม่ให้สร้างใหม่',
-'talkexists' => "'''หà¸\99à¹\89าà¹\84à¸\94à¹\89à¸\96ูà¸\81à¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อà¹\80รียà¸\9aรà¹\89อย à¹\81à¸\95à¹\88หà¸\99à¹\89าà¸\9eูà¸\94à¸\84ุยà¹\84มà¹\88à¹\84à¸\94à¹\89à¸\96ูà¸\81à¹\80à¸\9bลีà¹\88ยà¸\99à¸\95ามà¹\84à¸\9bà¸\94à¹\89วยà¹\80à¸\99ืà¹\88อà¸\87à¸\88าà¸\81มีหà¸\99à¹\89าà¸\9eูà¸\94à¸\84ุยà¸\8bà¹\89ำà¹\81ลà¹\89ว à¹\83หà¹\89à¸\95รวà¸\88สอà¸\9aà¹\81ละย้ายเองอีกครั้ง'''",
+'talkexists' => "'''à¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อหà¸\99à¹\89าสำà¹\80รà¹\87à¸\88 à¹\81à¸\95à¹\88หà¸\99à¹\89าà¸\9eูà¸\94à¸\84ุยà¹\84มà¹\88สามารà¸\96à¸\96ูà¸\81à¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อà¸\84à¹\88à¸\97à¹\84à¸\94à¹\80 à¹\80à¸\99ืà¹\88อà¸\87à¸\88าà¸\81มีหà¸\99à¹\89าà¸\9eูà¸\94à¸\84ุยà¹\83à¸\99à¸\8aืà¹\88อà¹\83หมà¹\88à¹\81ลà¹\89ว à¹\82à¸\9bรà¸\94ย้ายเองอีกครั้ง'''",
 'movedto' => 'เปลี่ยนชื่อเป็น',
 'movetalk' => 'เปลี่ยนชื่อหน้าพูดคุยพร้อมกัน',
 'move-subpages' => 'ย้ายหน้าย่อยทั้งหมด (มากถึง $1 หน้า)',
@@ -2529,10 +2530,10 @@ $1',
 'imageinvalidfilename' => 'ชื่อไฟล์เป้าหมายไม่ถูกต้อง',
 'fix-double-redirects' => 'อัปเดตหน้าเปลี่ยนทางทุกหน้าที่โอนไปยังชื่อเดิม',
 'move-leave-redirect' => 'สร้างหน้าเปลี่ยนทางตามมา',
-'protectedpagemovewarning' => "'''คำเตือน: หน้านี้ถูกล็อก และแก้ไขได้เฉพาะผู้ดูแลระบบเท่านั้น'''
-บันทึกการป้องกันล่าสุดถูกแสดงไว้ด้านล่างเพื่อการอ้างอิง",
-'semiprotectedpagemovewarning' => "'''หมายà¹\80หà¸\95ุ:''' à¸«à¸\99à¹\89าà¸\99ีà¹\89à¸\96ูà¸\81ลà¹\87อà¸\81 à¹\81ละà¹\81à¸\81à¹\89à¹\84à¸\82à¹\84à¸\94à¹\89à¹\80à¸\89à¸\9eาะà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\97ีà¹\88ลà¸\87à¸\97ะà¹\80à¸\9aียà¸\99à¹\80à¸\97à¹\88าà¸\99ัà¹\89à¸\99
-รายà¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82ลà¹\88าสุà¸\94à¹\84à¸\94à¹\89à¸\96ูà¸\81à¹\81สà¸\94à¸\87à¹\84วà¹\89à¸\94à¹\89าà¸\99ลà¹\88าà¸\87à¸\99ีà¹\89à¹\80à¸\9eืà¹\88อà¸\81ารอà¹\89าà¸\87อิà¸\87",
+'protectedpagemovewarning' => "'''คำเตือน:''' หน้านี้ถูกล็อก และเฉพาะผู้ใช้ที่มีสิทธิผู้ดูแลระบบเท่านั้นที่ย้ายได้
+บันทึกการป้องกันล่าสุดถูกแสดงไว้ด้านล่างเพื่อการอ้างอิง:",
+'semiprotectedpagemovewarning' => "'''หมายà¹\80หà¸\95ุ:''' à¸«à¸\99à¹\89าà¸\99ีà¹\89à¸\96ูà¸\81ลà¹\87อà¸\81 à¹\81ละà¹\80à¸\89à¸\9eาะà¸\9cูà¹\89à¹\83à¸\8aà¹\89ลà¸\87à¸\97ะà¹\80à¸\9aียà¸\99à¹\80à¸\97à¹\88าà¸\99ัà¹\89à¸\99à¸\97ีà¹\88ยà¹\89ายà¹\84à¸\94à¹\89
+รายà¸\81ารà¸\9bูมลà¹\88าสุà¸\94à¹\84à¸\94à¹\89à¸\96ูà¸\81à¹\81สà¸\94à¸\87à¹\84วà¹\89à¸\94à¹\89าà¸\99ลà¹\88าà¸\87à¸\99ีà¹\89à¹\80à¸\9eืà¹\88อà¸\81ารอà¹\89าà¸\87อิà¸\87:",
 'move-over-sharedrepo' => '== มีไฟล์เดิมปรากฏ ==
 ไฟล์ [[:$1]] มีปรากฏเดิมอยู่แล้วในคลังเก็บภาพส่วนกลาง การย้ายไฟล์ที่มีชื่อเรื่องนี้อาจจะเป็นการเขียนทับไฟล์เดิมในคลังเก็บได้',
 'file-exists-sharedrepo' => 'ชื่อไฟล์นี้มีปรากฏเดิมอยู่แล้วในคลังเก็บภาพส่วนกลาง
@@ -2652,7 +2653,7 @@ $1',
 'tooltip-pt-anonlogin' => 'ไม่จำเป็นต้องล็อกอินในการแก้ไข แต่แนะนำอย่างยิ่งให้ล็อกอิน',
 'tooltip-pt-logout' => 'ล็อกเอาต์',
 'tooltip-ca-talk' => 'พูดคุยเกี่ยวกับเนื้อหา',
-'tooltip-ca-edit' => 'หà¸\99à¹\89าà¸\99ีà¹\89à¹\81à¸\81à¹\89à¹\84à¸\82à¹\84à¸\94à¹\89 à¸\81à¹\88อà¸\99à¸\97ำà¸\81ารà¸\9aัà¸\99à¸\97ึà¸\81à¹\83หà¹\89à¸\81รุà¸\93าà¸\81à¸\94à¸\9bุà¹\88มà¸\94ูà¸\95ัวอยà¹\88าà¸\87à¸\81à¹\88อà¸\99 à¹\81à¸\99à¹\88à¹\83à¸\88วà¹\88าà¹\84à¸\94à¹\89à¸\95ามà¸\97ีà¹\88à¸\95à¹\89อà¸\87à¸\81าร',
+'tooltip-ca-edit' => 'à¸\84ุà¸\93สามารà¸\96à¹\81à¸\81à¹\89à¹\84à¸\82หà¸\99à¹\89าà¸\99ีà¹\89à¹\84à¸\94à¹\89 à¹\82à¸\9bรà¸\94à¹\83à¸\8aà¹\89à¸\9bุà¹\88มà¸\94ูà¸\95ัวอยà¹\88าà¸\87à¸\81à¹\88อà¸\99à¸\9aัà¸\99à¸\97ึà¸\81',
 'tooltip-ca-addsection' => 'เริ่มหัวข้อย่อยใหม่',
 'tooltip-ca-viewsource' => 'หน้านี้ถูกล็อก แต่ยังดูโค้ดได้',
 'tooltip-ca-history' => 'รุ่นที่แล้วของหน้านี้',
@@ -2667,7 +2668,7 @@ $1',
 'tooltip-search-go' => 'ตรงไปยังหน้าที่ตรงกับชื่อนี้ (ถ้ามี)',
 'tooltip-search-fulltext' => 'ค้นหาหน้าที่มีข้อความนี้',
 'tooltip-p-logo' => 'หน้าหลัก',
-'tooltip-n-mainpage' => 'à¹\81วะหน้าหลัก',
+'tooltip-n-mainpage' => 'à¹\80à¸\82à¹\89าสูà¹\88หน้าหลัก',
 'tooltip-n-mainpage-description' => 'เข้าสู่หน้าหลัก',
 'tooltip-n-portal' => 'เกี่ยวกับโครงการ สิ่งที่คุณทำได้ วิธีการค้นหา',
 'tooltip-n-currentevents' => 'ค้นหาเหตุการณ์ปัจจุบัน',
@@ -2683,7 +2684,7 @@ $1',
 'tooltip-t-upload' => 'อัปโหลดภาพหรือไฟล์',
 'tooltip-t-specialpages' => 'แสดงรายการหน้าพิเศษ',
 'tooltip-t-print' => 'หน้าที่แสดงผลพร้อมสำหรับพิมพ์ออกมา',
-'tooltip-t-permalink' => 'ลิà¸\87à¸\81à¹\8cà¸\96าวรมาà¸\97ีà¹\88à¹\80à¸\89à¸\9eาะรุà¹\88à¸\99à¸\99ีà¹\89à¹\83à¸\99หà¸\99à¹\89าà¸\99ีà¹\89',
+'tooltip-t-permalink' => 'ลิà¸\87à¸\81à¹\8cà¸\96าวรมาà¸\97ีà¹\88à¹\80à¸\89à¸\9eาะรุà¹\88à¸\99à¸\99ีà¹\89à¸\82อà¸\87หà¸\99à¹\89า',
 'tooltip-ca-nstab-main' => 'ดูหน้าเนื้อหา',
 'tooltip-ca-nstab-user' => 'ดูหน้าผู้ใช้',
 'tooltip-ca-nstab-media' => 'ดูหน้าสื่อ ภาพ เพลง',
@@ -2692,7 +2693,7 @@ $1',
 'tooltip-ca-nstab-image' => 'ดูหน้าภาพ',
 'tooltip-ca-nstab-mediawiki' => 'ดูข้อความระบบ',
 'tooltip-ca-nstab-template' => 'ดูหน้าแม่แบบ',
-'tooltip-ca-nstab-help' => 'à¸\94ูหà¸\99à¹\89าà¸\84ำอà¸\98ิà¸\9aาย',
+'tooltip-ca-nstab-help' => 'à¸\94ูหà¸\99à¹\89าวิà¸\98ีà¹\83à¸\8aà¹\89',
 'tooltip-ca-nstab-category' => 'ดูหน้าหมวดหมู่',
 'tooltip-minoredit' => 'กำหนดเป็นการแก้ไขเล็กน้อย',
 'tooltip-save' => 'บันทึกการแก้ไข',
@@ -2980,7 +2981,7 @@ $1',
 'exif-gpsareainformation' => 'ชื่อของพื้นที่จีพีเอส',
 'exif-gpsdatestamp' => 'วันที่จีพีเอส',
 'exif-gpsdifferential' => 'การปรับแค่ข้อแตกต่างจีพีเอส',
-'exif-keywords' => 'à¸\84ียà¹\8cà¹\80วิรà¹\8cà¸\94',
+'exif-keywords' => 'à¸\84ำสำà¸\84ัà¸\8d',
 'exif-objectname' => 'ชื่อเรื่องสั้น',
 'exif-headline' => 'พาดหัวข่าว',
 'exif-contact' => 'ข้อมูลสำหรับติดต่อ',
@@ -3385,7 +3386,7 @@ $5
 'specialpages-group-spam' => 'เครื่องมือเกี่ยวกับสแปม',
 
 # Special:BlankPage
-'blankpage' => 'หน้าว่างเปล่า',
+'blankpage' => 'หน้าว่าง',
 'intentionallyblankpage' => 'หน้านี้ถูกทิ้งว่างโดยเจตนา',
 
 # External image whitelist
@@ -3439,7 +3440,7 @@ $5
 'htmlform-required' => 'จำเป็นต้องกรอกข้อมูลนี้',
 'htmlform-submit' => 'ส่งข้อมูล',
 'htmlform-reset' => 'ยกเลิกการเปลื่ยนแปลง',
-'htmlform-selectorother-other' => 'อื่นๆ',
+'htmlform-selectorother-other' => 'อื่น ๆ',
 
 # SQLite database support
 'sqlite-has-fts' => 'รุ่น $1 พร้อมการสนับสนุนการค้นหาข้อความแบบเต็ม',
@@ -3473,6 +3474,6 @@ $5
 'feedback-close' => 'เสร็จสิ้น',
 
 # API errors
-'api-error-mustbeloggedin' => 'à¸\81รุà¸\93าลà¸\87à¸\8aืà¹\88อà¹\80à¸\82à¹\89าà¹\83à¸\8aà¹\89à¹\80à¸\9eืà¹\88อà¸\97ำà¸\81ารอัà¸\9eโหลดไฟล์',
+'api-error-mustbeloggedin' => 'à¸\81รุà¸\93าลà¸\87à¸\8aืà¹\88อà¹\80à¸\82à¹\89าà¹\83à¸\8aà¹\89à¹\80à¸\9eืà¹\88ออัà¸\9bโหลดไฟล์',
 
 );
index 61d15e8..eea0dee 100644 (file)
@@ -27,8 +27,8 @@ $namespaceNames = array(
        NS_FILE_TALK        => 'Usapang_talaksan',
        NS_MEDIAWIKI        => 'MediaWiki',
        NS_MEDIAWIKI_TALK   => 'Usapang_MediaWiki',
-       NS_TEMPLATE         => 'Suleras',
-       NS_TEMPLATE_TALK    => 'Usapang_suleras',
+       NS_TEMPLATE         => 'Padron',
+       NS_TEMPLATE_TALK    => 'Usapang_padron',
        NS_HELP             => 'Tulong',
        NS_HELP_TALK        => 'Usapang_tulong',
        NS_CATEGORY         => 'Kategorya',
@@ -36,100 +36,114 @@ $namespaceNames = array(
 );
 
 $namespaceAliases = array(
-       'Talaksan'          => NS_FILE,
-       'Usapang talaksan'  => NS_FILE_TALK,
-       'Kaurian'         => NS_CATEGORY,
-       'Usapang_kaurian' => NS_CATEGORY_TALK,
+       'Talaksan'         => NS_FILE,
+       'Usapang talaksan' => NS_FILE_TALK,
+       'Suleras'          => NS_TEMPLATE,
+       'Usapang_suleras'  => NS_TEMPLATE_TALK,
+       'Kaurian'          => NS_CATEGORY,
+       'Usapang_kaurian'  => NS_CATEGORY_TALK,
 );
 
 $specialPageAliases = array(
-       'Allmessages'               => array( 'Lahat ng mga mensahe' ),
-       'Allpages'                  => array( 'Lahat ng mga pahina', 'LahatPahina' ),
-       'Ancientpages'              => array( 'Sinaunang mga pahina' ),
-       'Blankpage'                 => array( 'Tanggalin ang nilalaman ng pahina' ),
-       'Block'                     => array( 'Hadlangan', 'Hadlangan ang IP', 'Hadlangan ang tagagamit' ),
-       'Blockme'                   => array( 'Hadlangang ako' ),
-       'Booksources'               => array( 'Mga pinagmulang aklat' ),
-       'BrokenRedirects'           => array( 'Naputol na mga panturo papunta sa ibang pahina', 'NaputulangPanturo' ),
-       'Categories'                => array( 'Mga kaurian' ),
-       'ChangePassword'            => array( 'Baguhin ang hudyat', 'Muling itakda ang hudyat', 'Muling magtakda ng hudyat' ),
-       'Confirmemail'              => array( 'Tiyakin ang e-liham' ),
-       'Contributions'             => array( 'Mga ambag' ),
-       'CreateAccount'             => array( 'Likhain ang kuwenta', 'LikhaKuwenta' ),
-       'Deadendpages'              => array( 'Mga pahinang sukol', 'Mga pahinang walang lagusan' ),
-       'DeletedContributions'      => array( 'Naburang mga ambag' ),
-       'Disambiguations'           => array( 'Mga paglilinaw', 'Paglilinaw' ),
-       'DoubleRedirects'           => array( 'Nagkadalawang mga panturo papunta sa ibang pahina', 'DoblengPanturo' ),
-       'Emailuser'                 => array( 'Tagagamit ng e-liham' ),
+       'Activeusers'               => array( 'Masisiglang_mga_Tagagamit' ),
+       'Allmessages'               => array( 'Lahat_ng_mga_mensahe' ),
+       'Allpages'                  => array( 'Lahat_ng_mga_pahina', 'LahatPahina' ),
+       'Ancientpages'              => array( 'Sinaunang_mga_pahina' ),
+       'Badtitle'                  => array( 'Masamang_pamagat' ),
+       'Blankpage'                 => array( 'Tanggalin_ang_nilalaman_ng_pahina' ),
+       'Block'                     => array( 'Hadlangan', 'Hadlangan_ang_IP', 'Hadlangan_ang_tagagamit' ),
+       'Blockme'                   => array( 'Hadlangang_ako' ),
+       'Booksources'               => array( 'Mga_pinagmulang_aklat' ),
+       'BrokenRedirects'           => array( 'Naputol_na_mga_panturo_papunta_sa_ibang_pahina', 'NaputulangPanturo' ),
+       'Categories'                => array( 'Mga_kategorya' ),
+       'ChangeEmail'               => array( 'Baguhin_ang_e-liham' ),
+       'ChangePassword'            => array( 'Baguhin_ang_hudyat', 'Muling_itakda_ang_hudyat', 'Muling_magtakda_ng_hudyat' ),
+       'ComparePages'              => array( 'Paghambingin_ang_mga_Pahina' ),
+       'Confirmemail'              => array( 'Tiyakin_ang_e-liham' ),
+       'Contributions'             => array( 'Mga_ambag' ),
+       'CreateAccount'             => array( 'Likhain_ang_kuwenta', 'LikhaKuwenta' ),
+       'Deadendpages'              => array( 'Mga_pahinang_sukol', 'Mga_pahinang_walang_lagusan' ),
+       'DeletedContributions'      => array( 'Naburang_mga_ambag' ),
+       'Disambiguations'           => array( 'Mga_paglilinaw', 'Paglilinaw' ),
+       'DoubleRedirects'           => array( 'Nagkadalawang_mga_panturo_papunta_sa_ibang_pahina', 'DoblengPanturo' ),
+       'EditWatchlist'             => array( 'Baguhin_ang_Bantayan' ),
+       'Emailuser'                 => array( 'Tagagamit_ng_e-liham' ),
        'Export'                    => array( 'Pagluluwas' ),
-       'Fewestrevisions'           => array( 'Pinakakaunting mga pagbabago' ),
-       'FileDuplicateSearch'       => array( 'Paghahanap ng kamukhang talaksan' ),
-       'Filepath'                  => array( 'Daanan ng talaksan' ),
+       'Fewestrevisions'           => array( 'Pinakakaunting_mga_pagbabago' ),
+       'FileDuplicateSearch'       => array( 'Paghahanap_ng_kamukhang_talaksan' ),
+       'Filepath'                  => array( 'Daanan_ng_talaksan' ),
        'Import'                    => array( 'Pag-aangkat' ),
-       'Invalidateemail'           => array( 'Hindi tanggap na e-liham' ),
-       'BlockList'                 => array( 'Talaan ng hinahadlangan', 'Talaan ng mga hinahadlangan', 'Talaan ng hinahadlangang IP' ),
-       'LinkSearch'                => array( 'Paghahanap ng kawing' ),
-       'Listadmins'                => array( 'Talaan ng mga tagapangasiwa' ),
-       'Listbots'                  => array( 'Talaan ng mga bot' ),
-       'Listfiles'                 => array( 'Itala ang mga talaksan', 'Talaan ng mga talaksan', 'Talaan ng mga larawan' ),
-       'Listgrouprights'           => array( 'Talaan ng mga karapatan ng pangkat' ),
-       'Listredirects'             => array( 'Talaan ng mga pagturo sa ibang pahina' ),
-       'Listusers'                 => array( 'Talaan ng mga tagagamit', 'Talaan ng tagagamit' ),
-       'Lockdb'                    => array( 'Ikandado ang kalipunan ng dato' ),
-       'Log'                       => array( 'Tala', 'Mga tala' ),
-       'Lonelypages'               => array( 'Nangungulilang mga pahina', 'Ulilang mga pahina' ),
-       'Longpages'                 => array( 'Mahabang mga pahina' ),
-       'MergeHistory'              => array( 'Pagsanibin ang kasaysayan' ),
-       'MIMEsearch'                => array( 'Paghahanap ng MIME' ),
-       'Mostcategories'            => array( 'Pinakamaraming mga kaurian' ),
-       'Mostimages'                => array( 'Mga talaksang may pinakamaraming kawing', 'Pinakamaraming talaksan', 'Pinakamaraming larawan' ),
-       'Mostlinked'                => array( 'Mga pahinang may pinakamaraming kawing', 'Pinakamaraming kawing' ),
-       'Mostlinkedcategories'      => array( 'Mga kauriang may pinakamaraming kawing', 'Pinakagamiting mga kaurian' ),
-       'Mostlinkedtemplates'       => array( 'Mga suleras na may pinakamaraming kawing', 'Pinakagamiting mga suleras' ),
-       'Mostrevisions'             => array( 'Pinakamaraming mga pagbabago' ),
-       'Movepage'                  => array( 'Ilipat ang pahina' ),
-       'Mycontributions'           => array( 'Mga ambag ko' ),
-       'Mypage'                    => array( 'Pahina ko' ),
-       'Mytalk'                    => array( 'Usapan ko' ),
-       'Newimages'                 => array( 'Bagong mga talaksan', 'Bagong mga larawan' ),
-       'Newpages'                  => array( 'Bagong mga pahina' ),
-       'Popularpages'              => array( 'Sikat na mga pahina' ),
-       'Preferences'               => array( 'Mga nais' ),
-       'Prefixindex'               => array( 'Talatuntunan ng unlapi' ),
-       'Protectedpages'            => array( 'Mga pahinang nakasanggalang' ),
-       'Protectedtitles'           => array( 'Mga pamagat na nakasanggalang' ),
-       'Randompage'                => array( 'Alin man', 'Alin mang pahina' ),
-       'Randomredirect'            => array( 'Pagtuturo papunta sa alin mang pahina' ),
-       'Recentchanges'             => array( 'Mga huling binago', 'HulingBinago' ),
-       'Recentchangeslinked'       => array( 'Nakakawing ng kamakailang pagbabago', 'Kaugnay na mga pagbabago' ),
-       'Revisiondelete'            => array( 'Pagbura ng pagbabago' ),
+       'Invalidateemail'           => array( 'Hindi_tanggap_na_e-liham' ),
+       'JavaScriptTest'            => array( 'Pagsubok_sa_JavaScript' ),
+       'BlockList'                 => array( 'Talaan_ng_hinahadlangan', 'Talaan_ng_mga_hinahadlangan', 'Talaan_ng_hinahadlangang_IP' ),
+       'LinkSearch'                => array( 'Paghahanap_ng_kawing' ),
+       'Listadmins'                => array( 'Talaan_ng_mga_tagapangasiwa' ),
+       'Listbots'                  => array( 'Talaan_ng_mga_bot' ),
+       'Listfiles'                 => array( 'Itala_ang_mga_talaksan', 'Talaan_ng_mga_talaksan', 'Talaan_ng_mga_larawan' ),
+       'Listgrouprights'           => array( 'Talaan_ng_mga_karapatan_ng_pangkat' ),
+       'Listredirects'             => array( 'Talaan_ng_mga_pagturo_sa_ibang_pahina' ),
+       'Listusers'                 => array( 'Talaan_ng_mga_tagagamit', 'Talaan_ng_tagagamit' ),
+       'Lockdb'                    => array( 'Ikandado_ang_kalipunan_ng_datos' ),
+       'Log'                       => array( 'Tala', 'Mga_tala' ),
+       'Lonelypages'               => array( 'Nangungulilang_mga_pahina', 'Ulilang_mga_pahina' ),
+       'Longpages'                 => array( 'Mahabang_mga_pahina' ),
+       'MergeHistory'              => array( 'Pagsanibin_ang_kasaysayan' ),
+       'MIMEsearch'                => array( 'Paghahanap_ng_MIME' ),
+       'Mostcategories'            => array( 'Pinakamaraming_mga_kategorya' ),
+       'Mostimages'                => array( 'Mga_talaksang_may_pinakamaraming_kawing', 'Pinakamaraming_talaksan', 'Pinakamaraming_larawan' ),
+       'Mostlinked'                => array( 'Mga_pahinang_may_pinakamaraming_kawing', 'Pinakamaraming_kawing' ),
+       'Mostlinkedcategories'      => array( 'Mga_kategoryang_may_pinakamaraming_kawing', 'Pinakagamiting_mga_kategorya' ),
+       'Mostlinkedtemplates'       => array( 'Mga_suleras_na_may_pinakamaraming_kawing', 'Pinakagamiting_mga_suleras' ),
+       'Mostrevisions'             => array( 'Pinakamaraming_mga_pagbabago' ),
+       'Movepage'                  => array( 'Ilipat_ang_pahina' ),
+       'Mycontributions'           => array( 'Mga_ambag_ko' ),
+       'Mypage'                    => array( 'Pahina_ko' ),
+       'Mytalk'                    => array( 'Usapan_ko' ),
+       'Myuploads'                 => array( 'Mga_Pagkakarga_Kong_Paitaas' ),
+       'Newimages'                 => array( 'Bagong_mga_talaksan', 'Bagong_mga_larawan' ),
+       'Newpages'                  => array( 'Bagong_mga_pahina' ),
+       'PasswordReset'             => array( 'Muling_Pagtatakda_ng_Hudyat' ),
+       'PermanentLink'             => array( 'Pamalagiang_Kawing' ),
+       'Popularpages'              => array( 'Sikat_na_mga_pahina' ),
+       'Preferences'               => array( 'Mga_nais' ),
+       'Prefixindex'               => array( 'Talatuntunan_ng_unlapi' ),
+       'Protectedpages'            => array( 'Mga_pahinang_nakasanggalang' ),
+       'Protectedtitles'           => array( 'Mga_pamagat_na_nakasanggalang' ),
+       'Randompage'                => array( 'Alin_man', 'Alin_mang_pahina' ),
+       'Randomredirect'            => array( 'Pagtuturo_papunta_sa_alin_mang_pahina' ),
+       'Recentchanges'             => array( 'Mga_huling_binago', 'HulingBinago' ),
+       'Recentchangeslinked'       => array( 'Nakakawing_ng_kamakailang_pagbabago', 'Kaugnay_na_mga_pagbabago' ),
+       'Revisiondelete'            => array( 'Pagbura_ng_pagbabago' ),
+       'RevisionMove'              => array( 'Paglipat_ng_Rebisyon' ),
        'Search'                    => array( 'Maghanap' ),
-       'Shortpages'                => array( 'Maikling mga pahina' ),
-       'Specialpages'              => array( 'Natatanging mga pahina' ),
-       'Statistics'                => array( 'Mga estadistika', 'Estadistika' ),
-       'Tags'                      => array( 'Mga tatak' ),
-       'Uncategorizedcategories'   => array( 'Mga kauriang walang kaurian' ),
-       'Uncategorizedimages'       => array( 'Mga talaksang walang kaurian', 'Mga larawang walang kaurian' ),
-       'Uncategorizedpages'        => array( 'Mga pahinang walang kaurian' ),
-       'Uncategorizedtemplates'    => array( 'Mga suleras na walang kaurian' ),
-       'Undelete'                  => array( 'Huwag burahin' ),
-       'Unlockdb'                  => array( 'Huwag ikandado ang kalipunan ng dato' ),
-       'Unusedcategories'          => array( 'Hindi ginagamit na mga kaurian' ),
-       'Unusedimages'              => array( 'Hindi ginagamit na mga talaksan', 'Hindi ginagamit na mga larawan' ),
-       'Unusedtemplates'           => array( 'Mga suleras na hindi ginagamit' ),
-       'Unwatchedpages'            => array( 'Mga pahinang hindi binabantayanan' ),
+       'Shortpages'                => array( 'Maikling_mga_pahina' ),
+       'Specialpages'              => array( 'Natatanging_mga_pahina' ),
+       'Statistics'                => array( 'Mga_estadistika', 'Estadistika' ),
+       'Tags'                      => array( 'Mga_tatak' ),
+       'Unblock'                   => array( 'Huwag_hadlangan' ),
+       'Uncategorizedcategories'   => array( 'Mga_kauriang_walang_kaurian' ),
+       'Uncategorizedimages'       => array( 'Mga_talaksang_walang_kaurian', 'Mga_larawang_walang_kaurian' ),
+       'Uncategorizedpages'        => array( 'Mga_pahinang_walang_kaurian' ),
+       'Uncategorizedtemplates'    => array( 'Mga_suleras_na_walang_kaurian' ),
+       'Undelete'                  => array( 'Huwag_burahin' ),
+       'Unlockdb'                  => array( 'Huwag_ikandado_ang_kalipunan_ng_dato' ),
+       'Unusedcategories'          => array( 'Hindi_ginagamit_na_mga_kaurian' ),
+       'Unusedimages'              => array( 'Hindi_ginagamit_na_mga_talaksan', 'Hindi_ginagamit_na_mga_larawan' ),
+       'Unusedtemplates'           => array( 'Mga_suleras_na_hindi_ginagamit' ),
+       'Unwatchedpages'            => array( 'Mga_pahinang_hindi_binabantayanan' ),
        'Upload'                    => array( 'Magkarga' ),
-       'Userlogin'                 => array( 'Paglagda ng tagagamit', 'Maglagda' ),
-       'Userlogout'                => array( 'Pag-alis sa pagkalagda ng tagagamit', 'AlisLagda' ),
-       'Userrights'                => array( 'Mga karapatan ng tagagamit' ),
-       'Version'                   => array( 'Bersyon' ),
-       'Wantedcategories'          => array( 'Ninanais na mga kaurian' ),
-       'Wantedfiles'               => array( 'Ninanais na mga talaksan' ),
-       'Wantedpages'               => array( 'Ninanais na mga pahina', 'Putol na mga kawing' ),
-       'Wantedtemplates'           => array( 'Ninanais na mga suleras' ),
-       'Watchlist'                 => array( 'Talaan ng binabantayan', 'Bantayan' ),
-       'Whatlinkshere'             => array( 'Ano ang nakakawing dito' ),
-       'Withoutinterwiki'          => array( 'Walang ugnayang-wiki' ),
+       'UploadStash'               => array( 'Pagkakarga_ng_mga_Nakatago' ),
+       'Userlogin'                 => array( 'Paglagda_ng_tagagamit', 'Maglagda' ),
+       'Userlogout'                => array( 'Pag-alis_sa_pagkalagda_ng_tagagamit', 'AlisLagda' ),
+       'Userrights'                => array( 'Mga_karapatan_ng_tagagamit' ),
+       'Version'                   => array( 'Bersiyon' ),
+       'Wantedcategories'          => array( 'Ninanais_na_mga_kaurian' ),
+       'Wantedfiles'               => array( 'Ninanais_na_mga_talaksan' ),
+       'Wantedpages'               => array( 'Ninanais_na_mga_pahina', 'Putol_na_mga_kawing' ),
+       'Wantedtemplates'           => array( 'Ninanais_na_mga_suleras' ),
+       'Watchlist'                 => array( 'Talaan_ng_binabantayan', 'Bantayan' ),
+       'Whatlinkshere'             => array( 'Ano_ang_nakakawing_dito' ),
+       'Withoutinterwiki'          => array( 'Walang_ugnayang-wiki' ),
 );
 
 $messages = array(
@@ -1855,6 +1869,7 @@ Marahil ay naisa mong baguhin ang paglalarawan doon sa [$2 pahina ng paglalarawa
 'shared-repo' => 'isang pinagsasaluhang repositoryo',
 'shared-repo-name-wikimediacommons' => 'Wikimedia Commons',
 'filepage.css' => '/* Ang Cascading Style Sheets na inilagay dito ay kabilang sa pahina ng paglalarawan ng talaksan, na kabilang din sa mga wiki ng dayuhang kliyente */',
+'upload-disallowed-here' => 'Sa kasamaang palad hindi mo muling masusulatan ang imaheng ito.',
 
 # File reversion
 'filerevert' => 'Ibalik sa dati ang $1',
@@ -2982,6 +2997,8 @@ Maaaring dahil ito sa isang kawing sa isang nakatalang hinarang dahil di-kinaisn
 'pageinfo-length' => 'Haba ng pahina (na nasa mga byte)',
 'pageinfo-article-id' => 'ID ng pahina',
 'pageinfo-robot-policy' => 'Katayuan ng makinang panghanap',
+'pageinfo-robot-index' => 'Matataluntunan',
+'pageinfo-robot-noindex' => 'Hindi matataluntunan',
 'pageinfo-views' => 'Bilang ng mga pagtanaw',
 'pageinfo-watchers' => 'Bilang ng mga nagbabantay ng pahina',
 'pageinfo-redirects-name' => 'Napapapunta sa pahinang ito',
@@ -2996,9 +3013,9 @@ Maaaring dahil ito sa isang kawing sa isang nakatalang hinarang dahil di-kinaisn
 'pageinfo-authors' => 'Kabuuang bilang ng magkakabukod na mga may-akda',
 'pageinfo-recent-edits' => 'Kamakailang bilang ng mga pamamatnugot (sa loob ng huling $1)',
 'pageinfo-recent-authors' => 'Kamakailang bilang ng magkakabukod na mga may-akda',
-'pageinfo-restriction' => 'Pruteksiyon ng pahina ($1)',
-'pageinfo-magic-words' => 'Mga salitang mahiwaga ($1)',
-'pageinfo-hidden-categories' => 'Nakatagong mga kategorya ($1)',
+'pageinfo-restriction' => 'Pruteksiyon ng pahina (<code>{{lcfirst:$1}}</code>)',
+'pageinfo-magic-words' => '{{PLURAL:$1|Salita|Mga salita}}ng mahiwaga ($1)',
+'pageinfo-hidden-categories' => 'Nakatagong {{PLURAL:$1|kategorya|mga kategorya}} ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|Suleras|Mga suleras}} ($1) na nasa transklusyon (kasama sa maraming mga lugar)',
 
 # Skin names
@@ -3055,6 +3072,7 @@ Maaaring manganib ang iyong sistema kapag ipinagana mo ito.",
 'file-info-size-pages' => '$1 × $2 mga piksel, sukat ng talaksan: $3, uri ng MIME: $4, $5 {{PLURAL:$5|pahina|mga pahina}}',
 'file-nohires' => 'Walang makuhang mas mataas na resolusyon (kalinawan).',
 'svg-long-desc' => 'Talaksang SVG, nasa mga bilang na $1 × $2 mga piksel, sukat ng talaksan: $3',
+'svg-long-desc-animated' => 'Animadong talaksang SVG, nasa mga bilang na $1 × $2 mga piksel, sukat ng talaksan: $3',
 'show-big-image' => 'Buong resolusyon (kalinawan)',
 'show-big-image-preview' => 'Sukat ng paunang-tingin na ito: $1.',
 'show-big-image-other' => 'Iba pang {{PLURAL:$2|resolusyon|mga resolusyon}}: $1.',
@@ -3064,6 +3082,8 @@ Maaaring manganib ang iyong sistema kapag ipinagana mo ito.",
 '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}}',
+'file-no-thumb-animation' => "'''Paunawa: Dahil sa limitasyong teknikal, ang mga kagyat ng talaksang ito ay hindi magiging animado.'''",
+'file-no-thumb-animation-gif' => "'''Paunawa: Dahil sa mga limitasyong teknikal, ang mga kagyat ng mga imahe na GIF na mataas ang resolusyon na katulad ng isang ito ay hindi magiging animado.'''",
 
 # Special:NewFiles
 'newimages' => 'Galerya ng mga bagong talaksan',
index ac88d59..05b2808 100644 (file)
@@ -19,17 +19,142 @@ $namespaceNames = array(
        NS_TALK             => 'Nopegət',
        NS_USER             => 'Okoədə',
        NS_USER_TALK        => 'Okoədəj_nopegət',
-       NS_PROJECT_TALK     => '$1_Nopegətəti',
+       NS_PROJECT_TALK     => '$1_Nopegət',
        NS_FILE             => 'Fajl',
-       NS_FILE_TALK        => 'Fajli_nopegət',
+       NS_FILE_TALK        => 'Fajl_nopegət',
        NS_MEDIAWIKI        => 'MediaWiki',
        NS_MEDIAWIKI_TALK   => 'MediaWiki_nopegət',
        NS_TEMPLATE         => 'Numunə',
        NS_TEMPLATE_TALK    => 'Numunə_nopegət',
        NS_HELP             => 'Koməg',
-       NS_HELP_TALK        => 'Koməgi_nopegət',
+       NS_HELP_TALK        => 'Koməg_nopegət',
        NS_CATEGORY         => 'Tispir',
-       NS_CATEGORY_TALK    => 'Tispiron_nopegət',
+       NS_CATEGORY_TALK    => 'Tispir_nopegət',
+);
+
+$namespaceAliases = array(
+       '$1_Nopegətəti'    => NS_PROJECT_TALK,
+       'Fajli_nopegət'    => NS_FILE_TALK,
+       'Koməgi_nopegət'   => NS_HELP_TALK,
+       'Tispiron_nopegət' => NS_CATEGORY_TALK,
+);
+
+$specialPageAliases = array(
+       'Allpages'                  => array( 'Һәммәј_сәһифон' ),
+       'Blankpage'                 => array( 'Тәјлијә_сәһифә' ),
+       'ChangeEmail'               => array( 'Е-номә_дәгиш_кардеј' ),
+       'ChangePassword'            => array( 'Пароли_дәгиш_кардеј' ),
+       'Emailuser'                 => array( 'Бә_иштирокәкә_номә_вығандеј' ),
+       'Longpages'                 => array( 'Дырозә_сәһифон' ),
+       'Movepage'                  => array( 'Сәһифә_номи_дәгиш_кардеј' ),
+       'Mypage'                    => array( 'Чымы_сәһифә' ),
+       'Mytalk'                    => array( 'Чымы_мызокирә' ),
+       'Myuploads'                 => array( 'Чымы_бо_жә_быә_чијон' ),
+       'Newimages'                 => array( 'Нујә_фајлон' ),
+       'Newpages'                  => array( 'Нујә_сәһифон' ),
+       'PasswordReset'             => array( 'Пароли_ләғв_кардеј' ),
+       'Protectedpages'            => array( 'Мыдофијә_кардә_быә_сәһифон' ),
+       'Protectedtitles'           => array( 'Мыдофијә_кардә_быә_номон' ),
+       'Randompage'                => array( 'Рајрастә_сәһифә._Рајрастә' ),
+       'Recentchanges'             => array( 'Ән_нујә_дәгишон' ),
+       'Recentchangeslinked'       => array( 'Ангыл_кардә_быә_дәгишон' ),
+       'Revisiondelete'            => array( 'Рәдд_кардә_быә_дәгишон' ),
+       'Search'                    => array( 'Нәве' ),
+       'Shortpages'                => array( 'Кыртә_сәһифон' ),
+       'Tags'                      => array( 'Нышонон' ),
+       'Undelete'                  => array( 'Бәрпо_кардеј' ),
+       'Version'                   => array( 'Рәвојәт' ),
+);
+
+$magicWords = array(
+       'redirect'                  => array( '0', '#ТОЖӘДӘН_ИСТИҒОМӘТ_ДОЈ', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__БЕМЫНДӘРИҸОТ__', '__NOTOC__' ),
+       'forcetoc'                  => array( '0', '__МӘҸБУРИЈӘ_МЫНДӘРИҸОТ__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__МЫНДӘРИҸОТ__', '__TOC__' ),
+       'noheader'                  => array( '0', '__БЕСӘРЛОВҺӘ__', '__NOHEADER__' ),
+       'currentmonth'              => array( '1', 'ЕСӘТНӘ_МАНГ', 'ЕСӘТНӘ_МАНГ_2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'ЕСӘТНӘ_МАНГ_1', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'ЕСӘТНӘ_МАНГИ_НОМ', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'ЕСӘТНӘ_МАНГИ_НОМ_ҸИНС', 'CURRENTMONTHNAMEGEN' ),
+       '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' ),
+       'localmonth'                => array( '1', 'БУМИНӘ_МАНГ', 'БУМИНӘ_МАНГ_2', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'БУМИНӘ_МАНГ_1', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'БУМИНӘ_МАНГИ_НОМ', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'БУМИНӘ_МАНГИ_НОМ_ҸИНС', 'LOCALMONTHNAMEGEN' ),
+       'localday'                  => array( '1', 'БУМИНӘ_РУЖ', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'БУМИНӘ_РУЖ_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' ),
+       'numberofusers'             => array( '1', 'ИШТИРОКӘКОН_ҒӘДӘР', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'ТИЛИКӘ_ИШТИРОКӘКОН_ҒӘДӘР', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'ДӘГИШОН_ҒӘДӘР', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'ДИЈӘ_КАРДЕ_ҒӘДӘР', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'СӘҺИФӘ_НОМ', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'СӘҺИФӘ_НОМ_2', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'НОМОН_МӘКОН', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'НОМОН_МӘКОН_2', 'NAMESPACEE' ),
+       'namespacenumber'           => array( '1', 'НОМОН_МӘКОН_ҒӘДӘР', 'NAMESPACENUMBER' ),
+       'talkspace'                 => array( '1', 'МЫЗОКИРОН_МӘКОН', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'МЫЗОКИРОН_МӘКОН_2', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'МӘҒОЛОН_МӘКОН', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'МӘҒОЛОН_МӘКОН_2', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'СӘҺИФӘ_ПУРӘ_НОМ', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'СӘҺИФӘ_ПУРӘ_НОМ_2', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'ЖИНТОНӘДӘ_СӘҺИФӘ_НОМ', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'ЖИНТОНӘДӘ_СӘҺИФӘ_НОМ_2', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'СӘҺИФӘ_НОМИ_ӘСОС', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'СӘҺИФӘ_НОМИ_ӘСОС_2', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'МЫЗОКИРӘ_СӘҺИФӘ_НОМ', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'МЫЗОКИРӘ_СӘҺИФӘ_НОМ_2', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'МӘҒОЛӘ_СӘҺИФӘ_НОМ', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'          => array( '1', 'МӘҒОЛӘ_СӘҺИФӘ_НОМ_2', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+       'msg'                       => array( '0', 'ХӘБӘ:', 'MSG:' ),
+       'subst'                     => array( '0', 'ӘВӘЗ_КАРДЕ:', 'SUBST:' ),
+       'msgnw'                     => array( '0', 'БЕВИКИ_ХӘБӘ:', 'MSGNW:' ),
+       '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_width'                 => array( '1', '$1пкс', '$1px' ),
+       'img_center'                => array( '1', 'мәрәнго', 'center', 'centre' ),
+       'img_page'                  => array( '1', 'сәһифә=$1', 'сәһифә_$1', 'page=$1', 'page $1' ),
+       'sitename'                  => array( '1', 'САЈТИ_НОМ', 'SITENAME' ),
+       'localurl'                  => array( '0', 'БУМИНӘ_УНВОН:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'БУМИНӘ_УНВОН_2:', 'LOCALURLE:' ),
+       'currentweek'               => array( '1', 'ЕСӘТНӘ_ҺАФТӘ', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'ЕСӘТНӘ_ҺАФТӘ_РУЖ', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'БУМИНӘ_ҺАФТӘ', 'LOCALWEEK' ),
+       'localdow'                  => array( '1', 'БУМИНӘ_ҺАФТӘ_РУЖ', 'LOCALDOW' ),
+       'revisionid'                => array( '1', 'РӘВОЈӘТИ_ID', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'РӘВОЈӘТИ_РУЖ', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'РӘВОЈӘТИ_РУЖ_2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'РӘВОЈӘТИ_МАНГ', 'REVISIONMONTH' ),
+       'revisionmonth1'            => array( '1', 'РӘВОЈӘТИ_МАНГ_2', 'REVISIONMONTH1' ),
+       'revisionyear'              => array( '1', 'РӘВОЈӘТИ_СОР', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'РӘВОЈӘТИ_ВАХТИ_ҒЕЈД', 'REVISIONTIMESTAMP' ),
+       'revisionuser'              => array( '1', 'ИШТИРОКӘКӘ_РӘВОЈӘТ', 'REVISIONUSER' ),
+       'fullurl'                   => array( '0', 'ПУРӘ_УНВОН:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'ПУРӘ_УНВОН_2:', 'FULLURLE:' ),
+       'currentversion'            => array( '1', 'ЕСӘТНӘ_РӘВОЈӘТ', 'CURRENTVERSION' ),
+       '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:' ),
+       'pagesize'                  => array( '1', 'СӘҺИФӘ_ПАМЈӘ', 'PAGESIZE' ),
+       'url_wiki'                  => array( '0', 'ВИКИ', 'WIKI' ),
 );
 
 $messages = array(
index 0ac589a..00e4e5b 100644 (file)
  * @author לערי ריינהארט
  */
 
+$namespaceNames = array(
+       NS_SPECIAL          => 'Sipesol',
+       NS_TALK             => 'Toktok',
+       NS_USER             => 'Yusa',
+       NS_USER_TALK        => 'Toktok_bilong_yusa',
+       NS_PROJECT_TALK     => '$1_toktok',
+       NS_FILE             => 'Fail',
+       NS_FILE_TALK        => 'Toktok_bilong_fail',
+       NS_MEDIAWIKI        => 'MediaWiki',
+       NS_MEDIAWIKI_TALK   => 'Toktok_bilong_mediawiki',
+       NS_TEMPLATE         => 'Templet',
+       NS_TEMPLATE_TALK    => 'Toktok_bilong_templet',
+       NS_HELP             => 'Halivim',
+       NS_HELP_TALK        => 'Toktok_bilong_halivim',
+       NS_CATEGORY         => 'Grup',
+       NS_CATEGORY_TALK    => 'Toktok_bilong_grup',
+);
+
 $specialPageAliases = array(
        'Confirmemail'              => array( 'Orait long imel' ),
        'Contributions'             => array( 'Ol senis bilong yusa' ),
@@ -54,6 +72,7 @@ $messages = array(
 'tog-minordefault' => 'Makim ol senis mi wokim olsem ol i liklik, sapos mi no makim',
 'tog-previewontop' => 'Soim pes mi senisim (pastaim long raitim) antap long bokis bilong wokim senis',
 'tog-previewonfirst' => 'Soim pes mi senisim pastaim long raitim',
+'tog-nocache' => ' Nogat stoa pes long browser',
 'tog-enotifwatchlistpages' => 'Salim imel long mi taim wanpela pes mi lukautim i senis',
 'tog-enotifusertalkpages' => 'Salim imel long mi wanem taim toktok bilong mi i senis',
 'tog-enotifminoredits' => 'Salim imel long mi tasol long liklik senis long pes na fail',
@@ -62,10 +81,14 @@ $messages = array(
 'tog-oldsig' => 'Olsem wanem yu raitim nem nau',
 'tog-fancysig' => 'Dispela rot yu raitim long nem stap wikitext (i no gat otomatik link)',
 'tog-externaleditor' => 'Yusim long ausait edita oltaim (tasol long man bilong save, i nidim sipesol setap antap long komputa bilong yu. [//www.mediawiki.org/wiki/Manual:External_editors Lukim moa infomesen.])',
+'tog-externaldiff' => 'Yusim long ausait diff oltaim (tasol long man bilong save, i nidim sipesol setap antap long komputa bilong yu. [//www.mediawiki.org/wiki/Manual:External_editors Lukim moa infomesen.])',
+'tog-showjumplinks' => ' Setap ol "Go stret long" links bilong helpim',
 'tog-uselivepreview' => 'Soim ol senis kwiktaim taim mi wokim (i nidim Javascript)',
+'tog-forceeditsummary' => 'Tokim mi long wanem taim raitim mi nating long liklik toksave bilong senis',
 'tog-watchlisthideown' => 'Haitim ol senis mi wokim long lukautbuk bilong mi',
 'tog-watchlisthidebots' => 'Haitim ol senis ol bot i wokim long lukautbuk bilong mi',
 'tog-watchlisthideminor' => 'Haitim ol liklik senis long lukautbuk bilong mi',
+'tog-watchlisthideliu' => ' Haitim senis long olpela yusa husat "logged in" long lukautbuk bilong mi',
 'tog-showhiddencats' => 'Soim ol grup hait',
 
 'underline-always' => 'Olgeta taim',
index 67a7b33..eb0155c 100644 (file)
@@ -138,7 +138,7 @@ $specialPageAliases = array(
        'PasswordReset'             => array( 'ParolaSıfırlama' ),
        'PermanentLink'             => array( 'KalıcıBağ' ),
        'Popularpages'              => array( 'PopülerSayfalar' ),
-       'Preferences'               => array( 'Tercihler' ),
+       'Preferences'               => array( 'Tercihler', 'Ayarlar' ),
        'Prefixindex'               => array( 'ÖnekDizini' ),
        'Protectedpages'            => array( 'KorunanSayfalar' ),
        'Protectedtitles'           => array( 'KorunanBaşlıklar' ),
@@ -179,142 +179,144 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#YÖNLENDİRME', '#YÖNLENDİR', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__İÇİNDEKİLERYOK__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__GALERİYOK__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__İÇİNDEKİLERZORUNLU__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__İÇİNDEKİLER__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__DEĞİŞTİRYOK__', '__DÜZENLEMEYOK__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '__BAŞLIKYOK__', '__NOHEADER__' ),
-       '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' ),
-       'currentmonthnamegen'     => array( '1', 'MEVCUTAYADIİYELİK', 'CURRENTMONTHNAMEGEN' ),
-       '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' ),
-       'localmonthnamegen'       => array( '1', 'YERELAYADIİYELİK', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'YERELAYKISALTMASI', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'YERELGÜN', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'YERELGÜN2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'YERELGÜNADI', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'YERELYIL', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'YERELZAMAN', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'YERELSAAT', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'SAYFASAYISI', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'MADDESAYISI', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'DOSYASAYISI', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'KULLANICISAYISI', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'AKTİFKULLANICISAYISI', 'ETKİNKULLANICISAYISI', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'DEĞİŞİKLİKSAYISI', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'GÖRÜNTÜLEMESAYISI', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'SAYFAADI', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'SAYFAADIU', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'ADALANI', 'İSİMALANI', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'ADALANIU', 'İSİMALANIU', 'NAMESPACEE' ),
-       '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' ),
-       'subpagenamee'            => array( '1', 'ALTSAYFAADIU', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'ÜSTSAYFAADI', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'ÜSTSAYFAADIU', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'TARTIŞMASAYFASIADI', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'TARTIŞMASAYFASIADIU', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'KONUSAYFASIADI', 'MADDESAYFASIADI', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'subjectpagenamee'        => array( '1', 'KONUSAYFASIADIU', 'MADDESAYFASIADIU', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
-       'msg'                     => array( '0', 'MSJ:', 'İLT:', 'MSG:' ),
-       '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' ),
-       'img_right'               => array( '1', 'sağ', 'right' ),
-       'img_left'                => array( '1', 'sol', 'left' ),
-       'img_none'                => array( '1', 'yok', 'none' ),
-       'img_width'               => array( '1', '$1pik', '$1piksel', '$1px' ),
-       'img_center'              => array( '1', 'orta', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'çerçeveli', 'çerçeve', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', 'çerçevesiz', 'frameless' ),
-       'img_page'                => array( '1', 'sayfa=$1', 'sayfa $1', 'page=$1', 'page $1' ),
-       'img_upright'             => array( '1', 'dikey', 'dikey=$1', 'dikey $1', 'upright', 'upright=$1', 'upright $1' ),
-       'img_border'              => array( '1', 'sınır', 'border' ),
-       'img_baseline'            => array( '1', 'tabançizgisi', 'altçizgi', 'baseline' ),
-       'img_sub'                 => array( '1', 'alt', 'sub' ),
-       'img_super'               => array( '1', 'üst', 'üs', 'super', 'sup' ),
-       'img_top'                 => array( '1', 'tavan', 'tepe', 'top' ),
-       'img_text_top'            => array( '1', 'metin-tavan', 'metin-tepe', 'text-top' ),
-       'img_middle'              => array( '1', 'merkez', 'middle' ),
-       'img_bottom'              => array( '1', 'taban', 'bottom' ),
-       'img_text_bottom'         => array( '1', 'metin-taban', 'text-bottom' ),
-       'img_link'                => array( '1', 'bağlantı=$1', 'link=$1' ),
-       'int'                     => array( '0', 'İNT:', 'INT:' ),
-       'sitename'                => array( '1', 'SİTEADI', 'SITENAME' ),
-       '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' ),
-       'servername'              => array( '0', 'SUNUCUADI', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'BETİKYOLU', 'SCRIPTPATH' ),
-       'stylepath'               => array( '0', 'BİÇEMYOLU', 'STYLEPATH' ),
-       'grammar'                 => array( '0', 'GRAMER:', 'GRAMMAR:' ),
-       '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', '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ÜMNU', 'SÜRÜMNO', 'REVİZYONNU', 'REVİZYONNO', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'SÜRÜMGÜNÜ', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'SÜRÜMGÜNÜ2', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'SÜRÜMAYI', 'REVISIONMONTH' ),
-       'revisionyear'            => array( '1', 'SÜRÜMYILI', 'REVISIONYEAR' ),
-       'revisiontimestamp'       => array( '1', 'SÜRÜMZAMANBİLGİSİ', 'REVISIONTIMESTAMP' ),
-       'revisionuser'            => array( '1', 'SÜRÜMKULLANICI', 'REVISIONUSER' ),
-       'plural'                  => array( '0', 'ÇOĞUL:', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'TAMURL:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'TAMURLU:', 'FULLURLE:' ),
-       'lcfirst'                 => array( '0', 'KHİLK:', 'LCFIRST:' ),
-       'ucfirst'                 => array( '0', 'BHİLK:', 'UCFIRST:' ),
-       'lc'                      => array( '0', 'KH:', 'LC:' ),
-       'uc'                      => array( '0', 'BH:', 'UC:' ),
-       'raw'                     => array( '0', 'HAM:', 'RAW:' ),
-       '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', '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' ),
-       'pagesinnamespace'        => array( '1', 'İSİMALANINDAKİSAYFALAR', 'İADAKİSAYFALAR', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       '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:' ),
-       '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' ),
-       'pagesize'                => array( '1', 'SAYFABOYUTU', 'PAGESIZE' ),
-       'index'                   => array( '1', '__DİZİN__', '__ENDEKS__', '__INDEX__' ),
-       'noindex'                 => array( '1', '__DİZİNYOK__', '__ENDEKSYOK__', '__NOINDEX__' ),
-       'numberingroup'           => array( '1', 'GRUPTAKİSAYI', 'GRUBUNSAYISI', 'NUMBERINGROUP', 'NUMINGROUP' ),
-       'staticredirect'          => array( '1', '__STATİKYÖNLENDİRME__', '__SABİTYÖNLENDİRME__', '__STATICREDIRECT__' ),
-       'protectionlevel'         => array( '1', 'KORUMASEVİYESİ', 'PROTECTIONLEVEL' ),
-       'formatdate'              => array( '0', 'formattarihi', 'tarihformatı', 'formatdate', 'dateformat' ),
-       'url_wiki'                => array( '0', 'VİKİ', 'WIKI' ),
+       'redirect'                  => array( '0', '#YÖNLENDİRME', '#YÖNLENDİR', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__İÇİNDEKİLERYOK__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__GALERİYOK__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__İÇİNDEKİLERZORUNLU__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__İÇİNDEKİLER__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__DEĞİŞTİRYOK__', '__DÜZENLEMEYOK__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '__BAŞLIKYOK__', '__NOHEADER__' ),
+       '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' ),
+       'currentmonthnamegen'       => array( '1', 'MEVCUTAYADIİYELİK', 'CURRENTMONTHNAMEGEN' ),
+       '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' ),
+       'localmonthnamegen'         => array( '1', 'YERELAYADIİYELİK', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'YERELAYKISALTMASI', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'YERELGÜN', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'YERELGÜN2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'YERELGÜNADI', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'YERELYIL', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'YERELZAMAN', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'YERELSAAT', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'SAYFASAYISI', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'MADDESAYISI', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'DOSYASAYISI', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'KULLANICISAYISI', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'AKTİFKULLANICISAYISI', 'ETKİNKULLANICISAYISI', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'DEĞİŞİKLİKSAYISI', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'GÖRÜNTÜLEMESAYISI', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'SAYFAADI', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'SAYFAADIU', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'ADALANI', 'İSİMALANI', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'ADALANIU', 'İSİMALANIU', 'NAMESPACEE' ),
+       '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' ),
+       'subpagenamee'              => array( '1', 'ALTSAYFAADIU', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'ÜSTSAYFAADI', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'ÜSTSAYFAADIU', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'TARTIŞMASAYFASIADI', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'TARTIŞMASAYFASIADIU', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'KONUSAYFASIADI', 'MADDESAYFASIADI', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'          => array( '1', 'KONUSAYFASIADIU', 'MADDESAYFASIADIU', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+       'msg'                       => array( '0', 'MSJ:', 'İLT:', 'MSG:' ),
+       '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' ),
+       'img_right'                 => array( '1', 'sağ', 'right' ),
+       'img_left'                  => array( '1', 'sol', 'left' ),
+       'img_none'                  => array( '1', 'yok', 'none' ),
+       'img_width'                 => array( '1', '$1pik', '$1piksel', '$1px' ),
+       'img_center'                => array( '1', 'orta', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'çerçeveli', 'çerçeve', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'çerçevesiz', 'frameless' ),
+       'img_page'                  => array( '1', 'sayfa=$1', 'sayfa $1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', 'dikey', 'dikey=$1', 'dikey $1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_border'                => array( '1', 'sınır', 'border' ),
+       'img_baseline'              => array( '1', 'tabançizgisi', 'altçizgi', 'baseline' ),
+       'img_sub'                   => array( '1', 'alt', 'sub' ),
+       'img_super'                 => array( '1', 'üst', 'üs', 'super', 'sup' ),
+       'img_top'                   => array( '1', 'tavan', 'tepe', 'top' ),
+       'img_text_top'              => array( '1', 'metin-tavan', 'metin-tepe', 'text-top' ),
+       'img_middle'                => array( '1', 'merkez', 'middle' ),
+       'img_bottom'                => array( '1', 'taban', 'bottom' ),
+       'img_text_bottom'           => array( '1', 'metin-taban', 'text-bottom' ),
+       'img_link'                  => array( '1', 'bağlantı=$1', 'link=$1' ),
+       'int'                       => array( '0', 'İNT:', 'INT:' ),
+       'sitename'                  => array( '1', 'SİTEADI', 'SITENAME' ),
+       'ns'                        => array( '0', 'AA:', 'AB:', 'NS:' ),
+       'nse'                       => array( '0', 'AAU:', 'ABU:', 'NSE:' ),
+       'localurl'                  => array( '0', 'YERELURL:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'YERELURLU:', 'LOCALURLE:' ),
+       'pageid'                    => array( '0', 'SAYFANO', 'PAGEID' ),
+       'server'                    => array( '0', 'SUNUCU', 'SERVER' ),
+       'servername'                => array( '0', 'SUNUCUADI', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'BETİKYOLU', 'SCRIPTPATH' ),
+       'stylepath'                 => array( '0', 'BİÇEMYOLU', 'STYLEPATH' ),
+       'grammar'                   => array( '0', 'GRAMER:', 'GRAMMAR:' ),
+       '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', '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ÜMNU', 'SÜRÜMNO', 'REVİZYONNU', 'REVİZYONNO', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'SÜRÜMGÜNÜ', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'SÜRÜMGÜNÜ2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'SÜRÜMAYI', 'REVISIONMONTH' ),
+       'revisionyear'              => array( '1', 'SÜRÜMYILI', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'SÜRÜMZAMANBİLGİSİ', 'REVISIONTIMESTAMP' ),
+       'revisionuser'              => array( '1', 'SÜRÜMKULLANICI', 'REVISIONUSER' ),
+       'plural'                    => array( '0', 'ÇOĞUL:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'TAMURL:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'TAMURLU:', 'FULLURLE:' ),
+       'canonicalurl'              => array( '0', 'KANONİKURL', 'CANONICALURL:' ),
+       'lcfirst'                   => array( '0', 'KHİLK:', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', 'BHİLK:', 'UCFIRST:' ),
+       'lc'                        => array( '0', 'KH:', 'LC:' ),
+       'uc'                        => array( '0', 'BH:', 'UC:' ),
+       'raw'                       => array( '0', 'HAM:', 'RAW:' ),
+       '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', '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' ),
+       'pagesinnamespace'          => array( '1', 'İSİMALANINDAKİSAYFALAR', 'İADAKİSAYFALAR', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       '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:' ),
+       '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' ),
+       'pagesize'                  => array( '1', 'SAYFABOYUTU', 'PAGESIZE' ),
+       'index'                     => array( '1', '__DİZİN__', '__ENDEKS__', '__INDEX__' ),
+       'noindex'                   => array( '1', '__DİZİNYOK__', '__ENDEKSYOK__', '__NOINDEX__' ),
+       'numberingroup'             => array( '1', 'GRUPTAKİSAYI', 'GRUBUNSAYISI', 'NUMBERINGROUP', 'NUMINGROUP' ),
+       'staticredirect'            => array( '1', '__STATİKYÖNLENDİRME__', '__SABİTYÖNLENDİRME__', '__STATICREDIRECT__' ),
+       'protectionlevel'           => array( '1', 'KORUMASEVİYESİ', 'PROTECTIONLEVEL' ),
+       'formatdate'                => array( '0', 'formattarihi', 'tarihformatı', 'formatdate', 'dateformat' ),
+       'url_wiki'                  => array( '0', 'VİKİ', 'WIKI' ),
 );
 
 $separatorTransformTable = array( ',' => '.', '.' => ',' );
@@ -586,6 +588,8 @@ $1',
 'youhavenewmessages' => 'Yeni $1 var ($2).',
 'newmessageslink' => 'mesajınız',
 'newmessagesdifflink' => 'son değişiklik',
+'newmessageslinkplural' => 'mesajınız',
+'newmessagesdifflinkplural' => 'son {{PLURAL:$1|değişiklik|değişiklikler}}',
 'youhavenewmessagesmulti' => "$1'de yeni mesajınız var.",
 'editsection' => 'düzenle',
 'editold' => 'değiştir',
index c3b8cb9..9076890 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** uroyo (Ṫuroyo)
+/** Turoyo (Ṫuroyo)
  *
  * See MessagesQqq.php for message documentation incl. usage of parameters
  * To improve a translation please visit http://translatewiki.net
@@ -15,255 +15,255 @@ $messages = array(
 'tog-oldsig' => 'Imḍa du3do:',
 
 'underline-always' => 'Kulnaqa',
-'underline-never'  => 'Hiç',
+'underline-never' => 'Hiç',
 
 # Dates
-'sunday'        => 'Yawme dḤuşabo',
-'monday'        => 'Yawme dTre',
-'tuesday'       => 'Yawme dTloṭo',
-'wednesday'     => 'Yawme dArb³o',
-'thursday'      => 'Yawme dḤamşo',
-'friday'        => 'Yawme d3rufto',
-'saturday'      => 'Yawme dŞabṭo',
-'sun'           => 'Yawme dḤuşabo',
-'mon'           => 'Yawme dTre',
-'tue'           => 'Yawme dTloṭo',
-'wed'           => 'Yawme dArb³o',
-'thu'           => 'Yawme dḤamşo',
-'fri'           => 'Yawme d3rufto',
-'sat'           => 'Yawme dŞabṭo',
-'january'       => 'Konun ḥroy',
-'february'      => 'Şboṫ',
-'march'         => 'Oḍor',
-'april'         => 'Nison',
-'may_long'      => 'İyor',
-'june'          => 'Ḥziron',
-'july'          => 'Tamuz',
-'august'        => 'Ob',
-'september'     => 'Eylül',
-'october'       => 'Teşrin qḍim',
-'november'      => 'Teşrin ḥroy',
-'december'      => 'Konun qḍim',
-'january-gen'   => 'Konun ḥroy',
-'february-gen'  => 'Şboṫ',
-'march-gen'     => 'Oḍor',
-'april-gen'     => 'Nison',
-'may-gen'       => 'İyor',
-'june-gen'      => 'Ḥziron',
-'july-gen'      => 'Tamuz',
-'august-gen'    => 'Ob',
+'sunday' => 'Yawme dḤuşabo',
+'monday' => 'Yawme dTre',
+'tuesday' => 'Yawme dTloṭo',
+'wednesday' => 'Yawme dArb³o',
+'thursday' => 'Yawme dḤamşo',
+'friday' => 'Yawme d3rufto',
+'saturday' => 'Yawme dŞabṭo',
+'sun' => 'Yawme dḤuşabo',
+'mon' => 'Yawme dTre',
+'tue' => 'Yawme dTloṭo',
+'wed' => 'Yawme dArb³o',
+'thu' => 'Yawme dḤamşo',
+'fri' => 'Yawme d3rufto',
+'sat' => 'Yawme dŞabṭo',
+'january' => 'Konun ḥroy',
+'february' => 'Şboṫ',
+'march' => 'Oḍor',
+'april' => 'Nison',
+'may_long' => 'İyor',
+'june' => 'Ḥziron',
+'july' => 'Tamuz',
+'august' => 'Ob',
+'september' => 'Eylül',
+'october' => 'Teşrin qḍim',
+'november' => 'Teşrin ḥroy',
+'december' => 'Konun qḍim',
+'january-gen' => 'Konun ḥroy',
+'february-gen' => 'Şboṫ',
+'march-gen' => 'Oḍor',
+'april-gen' => 'Nison',
+'may-gen' => 'İyor',
+'june-gen' => 'Ḥziron',
+'july-gen' => 'Tamuz',
+'august-gen' => 'Ob',
 'september-gen' => 'Eylül',
-'october-gen'   => 'Teşrin qḍim',
-'november-gen'  => 'Teşrin ḥroy',
-'december-gen'  => 'Konun qḍim',
-'jan'           => 'Konun II',
-'feb'           => 'Şboṫ',
-'mar'           => 'Oḍor',
-'apr'           => 'Nison',
-'may'           => 'İyor',
-'jun'           => 'Ḥziron',
-'jul'           => 'Tamuz',
-'aug'           => 'Ob',
-'sep'           => 'Eylül',
-'oct'           => 'Teşrin I',
-'nov'           => 'Teşrin II',
-'dec'           => 'Konun I',
+'october-gen' => 'Teşrin qḍim',
+'november-gen' => 'Teşrin ḥroy',
+'december-gen' => 'Konun qḍim',
+'jan' => 'Konun II',
+'feb' => 'Şboṫ',
+'mar' => 'Oḍor',
+'apr' => 'Nison',
+'may' => 'İyor',
+'jun' => 'Ḥziron',
+'jul' => 'Tamuz',
+'aug' => 'Ob',
+'sep' => 'Eylül',
+'oct' => 'Teşrin I',
+'nov' => 'Teşrin II',
+'dec' => 'Konun I',
 
 # Categories related messages
-'pagecategories'         => '{{PLURAL:$1|Sedro|Sedre}}',
-'category_header'        => 'Faṭoṭe bu Sedro "$1"',
-'subcategories'          => 'Sedre na³ime',
-'category-media-header'  => 'Mediya buSedro "$1"',
-'category-empty'         => 'U³do layto Faṭo aw Mediya buSedrano.',
-'hidden-categories'      => '{{PLURAL:$1|Hidden category|Hidden categories}}',
-'category-subcat-count'  => '{{PLURAL:$2|This category has only the following subcategory.|This category has the following {{PLURAL:$1|subcategory|$1 subcategories}}, out of $2 total.}}',
+'pagecategories' => '{{PLURAL:$1|Sedro|Sedre}}',
+'category_header' => 'Faṭoṭe bu Sedro "$1"',
+'subcategories' => 'Sedre na³ime',
+'category-media-header' => 'Mediya buSedro "$1"',
+'category-empty' => 'U³do layto Faṭo aw Mediya buSedrano.',
+'hidden-categories' => '{{PLURAL:$1|Hidden category|Hidden categories}}',
+'category-subcat-count' => '{{PLURAL:$2|This category has only the following subcategory.|This category has the following {{PLURAL:$1|subcategory|$1 subcategories}}, out of $2 total.}}',
 'category-article-count' => '{{PLURAL:$2|This category contains only the following page.|The following {{PLURAL:$1|page is|$1 pages are}} in this category, out of $2 total.}}',
-'category-file-count'    => '{{PLURAL:$2|This category contains only the following file.|The following {{PLURAL:$1|file is|$1 files are}} in this category, out of $2 total.}}',
+'category-file-count' => '{{PLURAL:$2|This category contains only the following file.|The following {{PLURAL:$1|file is|$1 files are}} in this category, out of $2 total.}}',
 'listingcontinuesabbrev' => 'mdawam',
-'noindex-category'       => 'Noindexed pages',
+'noindex-category' => 'Noindexed pages',
 
-'about'         => '3al',
-'newwindow'     => '(gmıftaḥ bKawṭo ḥaṭto)',
-'cancel'        => 'Mbaṫel',
+'about' => '3al',
+'newwindow' => '(gmıftaḥ bKawṭo ḥaṭto)',
+'cancel' => 'Mbaṫel',
 'moredotdotdot' => 'Heşa...',
-'mypage'        => 'iFaṭayḍi',
-'mytalk'        => 'uMamlayḍi',
-'navigation'    => 'Navigasyon',
-'and'           => '&#32;u',
+'mypage' => 'iFaṭayḍi',
+'mytalk' => 'uMamlayḍi',
+'navigation' => 'Navigasyon',
+'and' => '&#32;u',
 
 # Cologne Blue skin
-'qbfind'         => 'Ḥzay',
-'qbbrowse'       => 'Krax',
-'qbedit'         => 'Mşaḥlaf',
-'qbpageoptions'  => 'iFaṭaṭe',
-'qbmyoptions'    => 'aFaṭoṭayḍi',
+'qbfind' => 'Ḥzay',
+'qbbrowse' => 'Krax',
+'qbedit' => 'Mşaḥlaf',
+'qbpageoptions' => 'iFaṭaṭe',
+'qbmyoptions' => 'aFaṭoṭayḍi',
 'qbspecialpages' => 'Faṭoṭe dilonoye',
-'faq'            => 'Şuwole',
-'faqpage'        => 'Project:FAQ',
+'faq' => 'Şuwole',
+'faqpage' => 'Project:FAQ',
 
 # Vector skin
 'vector-action-addsection' => 'Maḥat Fusoqo ḥaṭo',
-'vector-action-delete'     => 'Slag',
-'vector-action-move'       => 'Mtaxar',
-'vector-action-protect'    => 'Mastar',
-'vector-view-create'       => 'Xlaq',
-'vector-view-edit'         => 'Mşaḥlaf',
-'vector-view-history'      => 'Maktabzabno',
-'vector-view-view'         => 'Qray',
-'vector-view-viewsource'   => 'Maḥway li aMabu³e.',
-'actions'                  => 'Dubore',
-'namespaces'               => 'Dukṭo luIşmo',
-'variants'                 => 'Variants',
-
-'errorpagetitle'    => 'Fawdo',
-'returnto'          => 'D³ar l$1',
-'tagline'           => 'men {{SITENAME}}',
-'help'              => '3udrono',
-'search'            => 'krax',
-'searchbutton'      => 'Krax',
-'go'                => 'Zux',
-'searcharticle'     => 'Zux',
-'history'           => 'Maktabzabno diFaṭo',
-'history_short'     => 'Maktabzabno',
-'updatedmarker'     => 'aŞuḥlofe datsimi miNaqa du3boroayḍi ḥaroyo',
-'printableversion'  => 'Printable version',
-'permalink'         => 'Asiruṭo aminoyto',
-'print'             => 'Ṫba³',
-'view'              => 'Qray',
-'edit'              => 'Mşaḥlaf',
-'create'            => 'Xlaq',
-'editthispage'      => 'Mşaḥlaf iFaṭaṭe',
-'create-this-page'  => 'Xlaq iFaṭaṭe',
-'delete'            => 'Slag',
-'deletethispage'    => 'Slag iFaṭaṭe',
-'protect'           => 'Mastar',
-'protect_change'    => 'mşaḥlaf',
-'protectthispage'   => 'Mastar iFaṭaṭe',
-'newpage'           => 'Faṭo ḥaṭto',
-'talkpage'          => 'Sım Droşo 3al iFaṭaṭe',
-'talkpagelinktext'  => 'Mamlo',
-'specialpage'       => 'Faṭo dilonoyto',
-'personaltools'     => 'aMonayḍi',
-'postcomment'       => 'Fusoqo ḥaṭo',
-'articlepage'       => 'Ḥur baḤbişoṭo',
-'talk'              => 'Droşo',
-'views'             => 'Ḥzayoṭo',
-'toolbox'           => 'Mone',
-'viewtalkpage'      => 'Ḥur buDroşo',
-'otherlanguages'    => 'bLeşone ḥrene',
-'redirectedfrom'    => '(Redirected from $1)',
-'lastmodifiedat'    => 'uŞuḥlofo ḥaroyo diFaṭaṭe bu Zabnano wa:  $1 $2 .',
-'jumpto'            => 'Zux l',
-'jumptonavigation'  => 'Navigasyon',
-'jumptosearch'      => 'Kruxyo',
+'vector-action-delete' => 'Slag',
+'vector-action-move' => 'Mtaxar',
+'vector-action-protect' => 'Mastar',
+'vector-view-create' => 'Xlaq',
+'vector-view-edit' => 'Mşaḥlaf',
+'vector-view-history' => 'Maktabzabno',
+'vector-view-view' => 'Qray',
+'vector-view-viewsource' => 'Maḥway li aMabu³e.',
+'actions' => 'Dubore',
+'namespaces' => 'Dukṭo luIşmo',
+'variants' => 'Variants',
+
+'errorpagetitle' => 'Fawdo',
+'returnto' => 'D³ar l$1',
+'tagline' => 'men {{SITENAME}}',
+'help' => '3udrono',
+'search' => 'krax',
+'searchbutton' => 'Krax',
+'go' => 'Zux',
+'searcharticle' => 'Zux',
+'history' => 'Maktabzabno diFaṭo',
+'history_short' => 'Maktabzabno',
+'updatedmarker' => 'aŞuḥlofe datsimi miNaqa du3boroayḍi ḥaroyo',
+'printableversion' => 'Printable version',
+'permalink' => 'Asiruṭo aminoyto',
+'print' => 'Ṫba³',
+'view' => 'Qray',
+'edit' => 'Mşaḥlaf',
+'create' => 'Xlaq',
+'editthispage' => 'Mşaḥlaf iFaṭaṭe',
+'create-this-page' => 'Xlaq iFaṭaṭe',
+'delete' => 'Slag',
+'deletethispage' => 'Slag iFaṭaṭe',
+'protect' => 'Mastar',
+'protect_change' => 'mşaḥlaf',
+'protectthispage' => 'Mastar iFaṭaṭe',
+'newpage' => 'Faṭo ḥaṭto',
+'talkpage' => 'Sım Droşo 3al iFaṭaṭe',
+'talkpagelinktext' => 'Mamlo',
+'specialpage' => 'Faṭo dilonoyto',
+'personaltools' => 'aMonayḍi',
+'postcomment' => 'Fusoqo ḥaṭo',
+'articlepage' => 'Ḥur baḤbişoṭo',
+'talk' => 'Droşo',
+'views' => 'Ḥzayoṭo',
+'toolbox' => 'Mone',
+'viewtalkpage' => 'Ḥur buDroşo',
+'otherlanguages' => 'bLeşone ḥrene',
+'redirectedfrom' => '(Redirected from $1)',
+'lastmodifiedat' => 'uŞuḥlofo ḥaroyo diFaṭaṭe bu Zabnano wa:  $1 $2 .',
+'jumpto' => 'Zux l',
+'jumptonavigation' => 'Navigasyon',
+'jumptosearch' => 'Kruxyo',
 'pool-errorunknown' => 'Fawdo nuxroyo',
 
 # 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'            => '3al {{SITENAME}}',
-'aboutpage'            => 'Project: 3al',
-'copyrightpage'        => '{{ns:project}}:Ḥaqat duKaṭowo',
-'currentevents'        => 'Gedşe du³do',
-'currentevents-url'    => 'Project:Gedşe du3do',
-'disclaimers'          => 'Disclaimers',
-'disclaimerpage'       => 'Project: Disclaimer gawonoyo',
-'edithelp'             => 'Editing help',
-'edithelppage'         => 'Help:Mşaḥlaf',
-'helppage'             => 'Help: Ḥbişoṭo',
-'mainpage'             => 'Faṭo rişoyto',
+'aboutsite' => '3al {{SITENAME}}',
+'aboutpage' => 'Project: 3al',
+'copyrightpage' => '{{ns:project}}:Ḥaqat duKaṭowo',
+'currentevents' => 'Gedşe ḥaṭe',
+'currentevents-url' => 'Project:Gedşe du³do',
+'disclaimers' => 'Disclaimers',
+'disclaimerpage' => 'Project: Disclaimer gawonoyo',
+'edithelp' => 'Editing help',
+'edithelppage' => 'Help:Mşaḥlaf',
+'helppage' => 'Help: Ḥbişoṭo',
+'mainpage' => 'Faṭo rişoyto',
 'mainpage-description' => 'Faṭo rişoyto',
-'portal'               => 'Portal diJama³a',
-'portal-url'           => 'Project: Portal diJama³a',
-'privacy'              => 'Setoro daMawd³onwoṭo',
-'privacypage'          => 'Project: Setoro daMawd³onwoṭo',
+'portal' => 'Portal diJama³a',
+'portal-url' => 'Project: Portal diJama³a',
+'privacy' => 'Setoro daMawd³onwoṭo',
+'privacypage' => 'Project: Setoro daMawd³onwoṭo',
 
 'badaccess-group0' => 'Hat latlux uFsoso dkolozım dsaymat iḤarakaṭe.',
 
-'ok'                      => 'Tamam',
-'retrievedfrom'           => 'men "$1"',
-'youhavenewmessages'      => 'Kıtlux $1 ($2) .',
-'newmessageslink'         => 'Ṫebe ḥaṭe',
-'newmessagesdifflink'     => 'Degoşo ḥaroyo',
+'ok' => 'Tamam',
+'retrievedfrom' => 'men "$1"',
+'youhavenewmessages' => 'Kıtlux $1 ($2) .',
+'newmessageslink' => 'Ṫebe ḥaṭe',
+'newmessagesdifflink' => 'Degoşo ḥaroyo',
 'youhavenewmessagesmulti' => 'Kitlux Ṫebe ḥaṭe b$1',
-'editsection'             => 'mşaḥlaf',
-'editold'                 => 'mşaḥlaf',
-'viewsourceold'           => 'Maḥway li uMabu³o.',
-'editlink'                => 'mşaḥlaf',
-'viewsourcelink'          => 'Maḥway li uMabu³o.',
-'editsectionhint'         => 'Mşaḥlaf uFusoqano: $1',
-'toc'                     => 'Ḥbişoṭo',
-'showtoc'                 => 'maḥway',
-'hidetoc'                 => 'tlay',
-'collapsible-collapse'    => 'sxar',
-'collapsible-expand'      => 'ftaḥ',
-'feedlinks'               => 'Feed:',
-'site-rss-feed'           => '$1 RSS feed',
-'site-atom-feed'          => '$1 Atom feed',
-'page-rss-feed'           => '"$1" RSS feed',
-'page-atom-feed'          => 'Atom feed l"$1"',
-'red-link-title'          => '$1 (layto iFaṭaṭe)',
+'editsection' => 'mşaḥlaf',
+'editold' => 'mşaḥlaf',
+'viewsourceold' => 'Maḥway li uMabu³o.',
+'editlink' => 'mşaḥlaf',
+'viewsourcelink' => 'Maḥway li uMabu³o.',
+'editsectionhint' => 'Mşaḥlaf uFusoqano: $1',
+'toc' => 'Ḥbişoṭo',
+'showtoc' => 'maḥway',
+'hidetoc' => 'tlay',
+'collapsible-collapse' => 'sxar',
+'collapsible-expand' => 'ftaḥ',
+'feedlinks' => 'Feed:',
+'site-rss-feed' => '$1 RSS feed',
+'site-atom-feed' => '$1 Atom feed',
+'page-rss-feed' => '"$1" RSS feed',
+'page-atom-feed' => 'Atom feed l"$1"',
+'red-link-title' => '$1 (layto iFaṭaṭe)',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main'      => 'Faṭo',
-'nstab-user'      => 'Faṭo duHadomo',
-'nstab-media'     => 'Faṭo diMediya',
-'nstab-special'   => 'Faṭo dilonoyto',
-'nstab-project'   => 'Faṭo die Proja',
-'nstab-image'     => 'Fayl',
+'nstab-main' => 'Faṭo',
+'nstab-user' => 'Faṭo duHadomo',
+'nstab-media' => 'Faṭo diMediya',
+'nstab-special' => 'Faṭo dilonoyto',
+'nstab-project' => 'Faṭo diProja',
+'nstab-image' => 'Fayl',
 'nstab-mediawiki' => 'Ṫebo',
-'nstab-template'  => 'Template',
-'nstab-help'      => 'Faṭo d3udrono',
-'nstab-category'  => 'Sedro',
+'nstab-template' => 'Template',
+'nstab-help' => 'Faṭo d3udrono',
+'nstab-category' => 'Sedro',
 
 # General errors
-'error'              => 'Fawdo',
-'missing-article'    => 'uSyomo d$1 $2 lo komaḥwe biDatabase.
+'error' => 'Fawdo',
+'missing-article' => 'uSyomo d$1 $2 lo komaḥwe biDatabase.
 
 iFaṭaṭe belki sligo aw mtaxro merke.
 
 Elo iḍa dlo howe hawxa belki ḥselux Fawdo biSoftware. Bo³o haw Ṫebo l[[Special:ListUsers/sysop|Administrator]] u kṭaw u"URL".',
 'missingarticle-rev' => '(Numara duVersyon: $1)',
-'badtitle'           => 'Bad title',
-'badtitletext'       => 'The requested page title was invalid, empty, or an incorrectly linked inter-language or inter-wiki title.
+'badtitle' => 'Bad title',
+'badtitletext' => '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.',
-'viewsource'         => 'Maḥway li aMabu³e.',
+'viewsource' => 'Maḥway li aMabu³e.',
 'namespaceprotected' => "Hat latlux Ḥaq dımşaḥılfat Faṭoṭe bi'''$1''' Dukṭo xliṭo.",
 
 # Virus scanner
 'virus-unknownscanner' => 'Antivirus nuxroyo:',
 
 # Login and logout pages
-'yourname'                => 'Işme duHadomo:',
-'yourpassword'            => 'Qliḍo:',
-'yourpasswordagain'       => 'Naqla ḥreto kṭaw uQliḍo:',
-'remembermypassword'      => 'Dxar uQliḍayḍi buBrowser (buSowudo $1 {{PLURAL:$1|Yawmo|Yawme}})',
-'login'                   => '3bar',
+'yourname' => 'Işme duHadomo:',
+'yourpassword' => 'Qliḍo:',
+'yourpasswordagain' => 'Naqla ḥreto kṭaw uQliḍo:',
+'remembermypassword' => 'Dxar uQliḍayḍi buBrowser (buSowudo $1 {{PLURAL:$1|Yawmo|Yawme}})',
+'login' => '3bar',
 'nav-login-createaccount' => '3bar / Hway Hadomo',
-'loginprompt'             => 'Glozım maqablat Cookies qanna dqudrat fıtḥat {{SITENAME}}.',
-'userlogin'               => '3bar / Hway Hadomo',
-'userloginnocreate'       => '3bar',
-'logout'                  => 'Nfoqo',
-'userlogout'              => 'Nfoqo',
-'notloggedin'             => 'Heş lo3abirat.',
-'nologin'                 => 'Heş lawit Hadomo? $1',
-'nologinlink'             => 'Hway Hadomo',
-'createaccount'           => 'Hway Hadomo',
-'gotaccount'              => 'Ma hawit ste Hadomo? $1',
-'gotaccountlink'          => '3bar',
-'userlogin-resetlink'     => 'Ṫa³at uQliḍayḍox?',
-'createaccountmail'       => 'buEmail',
-'wrongpassword'           => 'uQliḍayḍux fawdo yo.
+'loginprompt' => 'Glozım maqablat Cookies qanna dqudrat fıtḥat {{SITENAME}}.',
+'userlogin' => '3bar / Hway Hadomo',
+'userloginnocreate' => '3bar',
+'logout' => 'Nfoqo',
+'userlogout' => 'Nfoqo',
+'notloggedin' => 'Heş lo3abirat.',
+'nologin' => 'Heş lawit Hadomo? $1',
+'nologinlink' => 'Hway Hadomo',
+'createaccount' => 'Hway Hadomo',
+'gotaccount' => 'Ma hawit ste Hadomo? $1',
+'gotaccountlink' => '3bar',
+'userlogin-resetlink' => 'Ṫa³at uQliḍayḍox?',
+'createaccountmail' => 'buEmail',
+'wrongpassword' => 'uQliḍayḍux fawdo yo.
 Mjarab Naqla ḥreto.',
-'wrongpasswordempty'      => 'Lo msta³melux uQliḍayḍux.
+'wrongpasswordempty' => 'Lo msta³melux uQliḍayḍux.
 Mjarab Naqla ḥreto.',
-'password-name-match'     => 'Glozım towe Frişuṭo beyn uQliḍo u uIşmayḍux.',
-'mailmypassword'          => 'Mşadar li Qliḍo ḥaṭo',
-'loginlanguagelabel'      => 'Leşono: $1',
+'password-name-match' => 'Glozım towe Frişuṭo beyn uQliḍo u uIşmayḍux.',
+'mailmypassword' => 'Mşadar li Qliḍo ḥaṭo',
+'loginlanguagelabel' => 'Leşono: $1',
 
 # Change password dialog
-'resetpass'                 => 'Mşaḥlaf uQliḍo.',
-'oldpassword'               => 'Qliḍo 3atiqo:',
-'newpassword'               => 'Qliḍo ḥaṭo:',
-'retypenew'                 => 'Qliḍo ḥaṭo (disa):',
+'resetpass' => 'Mşaḥlaf uQliḍo.',
+'oldpassword' => 'Qliḍo 3atiqo:',
+'newpassword' => 'Qliḍo ḥaṭo:',
+'retypenew' => 'Qliḍo ḥaṭo (disa):',
 'resetpass-submit-loggedin' => 'Mşaḥlaf uQliḍo',
 
 # Special:PasswordReset
@@ -273,264 +273,264 @@ Mjarab Naqla ḥreto.',
 'changeemail-newemail' => 'Email-adres ḥaṭo:',
 
 # Edit page toolbar
-'bold_sample'     => 'Ḥarfe ḥlime',
-'bold_tip'        => 'Ḥarfe ḥlime',
-'italic_sample'   => 'Ḥarfe 3wije',
-'italic_tip'      => 'Ḥarfe 3wije',
-'link_sample'     => 'Link title',
-'link_tip'        => 'Internal link',
-'extlink_sample'  => 'http://www.example.com link title',
-'extlink_tip'     => 'External link (remember http:// prefix)',
+'bold_sample' => 'Ḥarfe ḥlime',
+'bold_tip' => 'Ḥarfe ḥlime',
+'italic_sample' => 'Ḥarfe 3wije',
+'italic_tip' => 'Ḥarfe 3wije',
+'link_sample' => 'Link title',
+'link_tip' => 'Internal link',
+'extlink_sample' => 'http://www.example.com link title',
+'extlink_tip' => 'External link (remember http:// prefix)',
 'headline_sample' => 'Headline text',
-'headline_tip'    => 'Level 2 headline',
-'nowiki_sample'   => 'Insert non-formatted text here',
-'nowiki_tip'      => 'uSyomano latyo buFormat',
-'image_tip'       => 'Embedded file',
-'media_tip'       => 'File link',
-'sig_tip'         => 'Mḍay herke u kṭaw iSa³aye muqa yo.',
-'hr_tip'          => 'Horizontal line (use sparingly)',
+'headline_tip' => 'Level 2 headline',
+'nowiki_sample' => 'Insert non-formatted text here',
+'nowiki_tip' => 'uSyomano latyo buFormat',
+'image_tip' => 'Embedded file',
+'media_tip' => 'File link',
+'sig_tip' => 'Mḍay herke u kṭaw iSa³aye muqa yo.',
+'hr_tip' => 'Horizontal line (use sparingly)',
 
 # Edit pages
-'summary'                          => 'Summary:',
-'minoredit'                        => 'This is a minor edit',
-'watchthis'                        => 'Watch this page',
-'savearticle'                      => 'Mqayad iFaṭaṭe',
-'preview'                          => 'Preview',
-'showpreview'                      => 'Show preview',
-'showdiff'                         => 'Maḥway aŞuḥlofe',
-'anoneditwarning'                  => "'''Diqad''' Heş lo 3abirat.
+'summary' => 'Summary:',
+'minoredit' => 'This is a minor edit',
+'watchthis' => 'Watch this page',
+'savearticle' => 'Mqayad iFaṭaṭe',
+'preview' => 'Preview',
+'showpreview' => 'Show preview',
+'showdiff' => 'Maḥway aŞuḥlofe',
+'anoneditwarning' => "'''Diqad''' Heş lo 3abirat.
 uIP-Adresayḍux gmikṭaw buMaktabzabno diFaṭaṭe. Kul Noşo kibe ḥozele u lo komislag.",
-'loginreqtitle'                    => 'Glozım 3obrat',
-'loginreqlink'                     => '3bar',
-'loginreqpagetext'                 => 'Glozım $1 qanna dqudrat ḥozat Faṭoṭe ḥrene.',
-'newarticle'                       => '(Ḥaṭo)',
-'newarticletext'                   => "You have followed a link to a page that does not exist yet.
+'loginreqtitle' => 'Glozım 3obrat',
+'loginreqlink' => '3bar',
+'loginreqpagetext' => 'Glozım $1 qanna dqudrat ḥozat Faṭoṭe ḥrene.',
+'newarticle' => '(Ḥaṭo)',
+'newarticletext' => "You have followed a link to a page that does not exist yet.
 To create the page, start typing in the box below (see the [[{{MediaWiki:Helppage}}|help page]] for more info).
 If you are here by mistake, click your browser's '''back''' button.",
-'noarticletext'                    => 'There is currently no text in this page.
+'noarticletext' => 'There is currently no text in this page.
 You can [[Special:Search/{{PAGENAME}}|search for this page title]] in other pages,
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} search the related logs],
 or [{{fullurl:{{FULLPAGENAME}}|action=edit}} edit this page]</span>.',
-'noarticletext-nopermission'       => 'There is currently no text in this page.
+'noarticletext-nopermission' => 'There is currently no text in this page.
 You can [[Special:Search/{{PAGENAME}}|search for this page title]] in other pages,
 or <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} search the related logs]</span>.',
-'previewnote'                      => "'''Remember that this is only a preview.'''
+'previewnote' => "'''Remember that this is only a preview.'''
 Your changes have not yet been saved!",
-'editing'                          => 'Şuḥlofo d$1',
-'editingsection'                   => 'Mşaḥlaf $1 (Fusoqo)',
-'yourtext'                         => 'uSyomayḍux',
-'yourdiff'                         => 'Frişwoṭo',
-'templatesused'                    => '{{PLURAL:$1|Template|Templates}} used on this page:',
-'template-protected'               => '(protected)',
-'template-semiprotected'           => '(semi-protected)',
-'hiddencategories'                 => 'This page is a member of {{PLURAL:$1|1 hidden category|$1 hidden categories}}:',
+'editing' => 'Şuḥlofo d$1',
+'editingsection' => 'Mşaḥlaf $1 (Fusoqo)',
+'yourtext' => 'uSyomayḍux',
+'yourdiff' => 'Frişwoṭo',
+'templatesused' => '{{PLURAL:$1|Template|Templates}} used on this page:',
+'template-protected' => '(protected)',
+'template-semiprotected' => '(semi-protected)',
+'hiddencategories' => 'This page is a member of {{PLURAL:$1|1 hidden category|$1 hidden categories}}:',
 'permissionserrorstext-withaction' => 'You do not have permission to $2, for the following {{PLURAL:$1|reason|reasons}}:',
-'recreate-moveddeleted-warn'       => "'''Warning: You are recreating a page that was previously deleted.'''
+'recreate-moveddeleted-warn' => "'''Warning: You are recreating a page that was previously deleted.'''
 
 You should consider whether it is appropriate to continue editing this page.
 The deletion and move log for this page are provided here for convenience:",
-'moveddeleted-notice'              => 'iFaṭaṭe sligto yo.
+'moveddeleted-notice' => 'iFaṭaṭe sligto yo.
 The deletion and move log for the page are provided below for reference.',
 
 # Parser/template warnings
-'post-expand-template-inclusion-warning'  => "'''Warning:''' Template include size is too large.
+'post-expand-template-inclusion-warning' => "'''Warning:''' Template include size is too large.
 Some templates will not be included.",
 'post-expand-template-inclusion-category' => 'Pages where template include size is exceeded',
-'post-expand-template-argument-warning'   => "'''Warning:''' This page contains at least one template argument which has a too large expansion size.
+'post-expand-template-argument-warning' => "'''Warning:''' This page contains at least one template argument which has a too large expansion size.
 These arguments have been omitted.",
-'post-expand-template-argument-category'  => 'Pages containing omitted template arguments',
+'post-expand-template-argument-category' => 'Pages containing omitted template arguments',
 
 # History pages
-'viewpagelogs'           => 'View logs for this page',
-'currentrev-asof'        => 'Latest revision as of $1',
-'revisionasof'           => 'Versyon 3atiqo diNaqa: $1',
-'revision-info'          => 'Revision as of $1 by $2',
-'previousrevision'       => '←Versyon 3atiqtır',
-'nextrevision'           => 'Versyon ḥaṭtır',
-'currentrevisionlink'    => 'Latest revision',
-'cur'                    => 'du³do',
-'next'                   => 'Ḥreto',
-'last'                   => 'dmeqım',
-'page_first'             => 'Badaye',
-'page_last'              => 'Ḥarayto',
-'histlegend'             => "Diff selection: Mark the radio boxes of the revisions to compare and hit enter or the button at the bottom.<br />
+'viewpagelogs' => 'View logs for this page',
+'currentrev-asof' => 'Latest revision as of $1',
+'revisionasof' => 'Versyon 3atiqo diNaqa: $1',
+'revision-info' => 'Revision as of $1 by $2',
+'previousrevision' => '←Versyon 3atiqtır',
+'nextrevision' => 'Versyon ḥaṭtır',
+'currentrevisionlink' => 'Latest revision',
+'cur' => 'du³do',
+'next' => 'Ḥreto',
+'last' => 'dmeqım',
+'page_first' => 'Badaye',
+'page_last' => 'Ḥarayto',
+'histlegend' => "Diff selection: Mark the radio boxes of the revisions to compare and hit enter or the button at the bottom.<br />
 Legend: '''({{int:cur}})''' = difference with latest revision, '''({{int:last}})''' = difference with preceding revision, '''{{int:minoreditletter}}''' = minor edit.",
 'history-fieldset-title' => 'Krax buMaktabzabno',
-'history-show-deleted'   => 'Bes aSlige',
-'histfirst'              => 'Meqım kulle',
-'histlast'               => 'Ḥaṭo',
-'historysize'            => '({{PLURAL:$1|1 byte|$1 bytes}})',
-'historyempty'           => '(xalyo)',
+'history-show-deleted' => 'Bes aSlige',
+'histfirst' => 'Meqım kulle',
+'histlast' => 'Ḥaṭo',
+'historysize' => '({{PLURAL:$1|1 byte|$1 bytes}})',
+'historyempty' => '(xalyo)',
 
 # Revision feed
 'history-feed-item-nocomment' => '$1  b$2',
 
 # Revision deletion
-'rev-delundel'               => 'maḥway / tlay',
-'rev-showdeleted'            => 'maḥway',
+'rev-delundel' => 'maḥway / tlay',
+'rev-showdeleted' => 'maḥway',
 'revdelete-show-file-submit' => 'Eh',
-'revdelete-radio-same'       => '(lo mşaḥalfat)',
-'revdelete-radio-set'        => 'Eh',
-'revdelete-radio-unset'      => 'Lo',
-'revdel-restore'             => 'change visibility',
-'revdel-restore-deleted'     => 'deleted revisions',
-'revdel-restore-visible'     => 'visible revisions',
-'pagehist'                   => 'Maktabzabno diFaṭo',
+'revdelete-radio-same' => '(lo mşaḥalfat)',
+'revdelete-radio-set' => 'Eh',
+'revdelete-radio-unset' => 'Lo',
+'revdel-restore' => 'change visibility',
+'revdel-restore-deleted' => 'deleted revisions',
+'revdel-restore-visible' => 'visible revisions',
+'pagehist' => 'Maktabzabno diFaṭo',
 
 # Merge log
 'revertmerge' => 'Unmerge',
 
 # Diffs
-'history-title'           => 'Revision history of "$1"',
-'lineno'                  => 'Serṫo $1:',
+'history-title' => 'Revision history of "$1"',
+'lineno' => 'Serṫo $1:',
 'compareselectedversions' => 'Compare selected revisions',
-'editundo'                => 'slag',
-'diff-multi'              => '({{PLURAL:$1|One intermediate revision|$1 intermediate revisions}} by {{PLURAL:$2|one user|$2 users}} not shown)',
+'editundo' => 'slag',
+'diff-multi' => '({{PLURAL:$1|One intermediate revision|$1 intermediate revisions}} by {{PLURAL:$2|one user|$2 users}} not shown)',
 
 # Search results
-'searchresults'                    => 'Nafqe duKruxyayḍux',
-'searchresults-title'              => 'Nafqe duKruxyo l"$1"',
-'searchsubtitleinvalid'            => "Karixat '''$1'''",
-'prevn'                            => '{{PLURAL:$1|$1}} meqımtır',
-'nextn'                            => '{{PLURAL:$1 ḥaṭtır| $1 ḥaṭtır }}',
-'prevn-title'                      => '{{PLURAL:$1 Nafqo meqımtır|$1 Nafqe meqımtır}}',
-'nextn-title'                      => '{{PLURAL:$1|Nafqo ḥreno|$1 Nafqe ḥrene}}',
-'shown-title'                      => 'maḥway $1 {{PLURAL:$1|Nafqo|Nafqe}} bḥḍo Faṭo',
-'viewprevnext'                     => 'Maḥway ($1 {{int:pipe-separator}} $2) ($3)',
-'searchmenu-legend'                => '3ayar duKruxyo',
-'searchmenu-exists'                => "'''Kito Faṭo herke Işma \"[[:\$1]]\"yo'''",
-'searchmenu-new'                   => 'Kṭaw iFaṭaṭe "[[:$1]]" buWiki.',
-'searchhelp-url'                   => 'Help: Ḥbişoṭo',
-'searchprofile-articles'           => 'Faṭoṭe daḤbişoṭo',
-'searchprofile-project'            => 'Faṭoṭe du3udrono u daProjat',
-'searchprofile-images'             => 'Multimediya',
-'searchprofile-everything'         => 'Kulmede',
-'searchprofile-advanced'           => 'Advanced',
-'searchprofile-articles-tooltip'   => 'Krax b$1',
-'searchprofile-project-tooltip'    => 'Krax b$1',
-'searchprofile-images-tooltip'     => 'Krax Ṥurtoṭe',
+'searchresults' => 'Nafqe duKruxyayḍux',
+'searchresults-title' => 'Nafqe duKruxyo l"$1"',
+'searchsubtitleinvalid' => "Karixat '''$1'''",
+'prevn' => '{{PLURAL:$1|$1}} meqımtır',
+'nextn' => '{{PLURAL:$1 ḥaṭtır| $1 ḥaṭtır }}',
+'prevn-title' => '{{PLURAL:$1 Nafqo meqımtır|$1 Nafqe meqımtır}}',
+'nextn-title' => '{{PLURAL:$1|Nafqo ḥreno|$1 Nafqe ḥrene}}',
+'shown-title' => 'maḥway $1 {{PLURAL:$1|Nafqo|Nafqe}} bḥḍo Faṭo',
+'viewprevnext' => 'Maḥway ($1 {{int:pipe-separator}} $2) ($3)',
+'searchmenu-legend' => '3ayar duKruxyo',
+'searchmenu-exists' => "'''Kito Faṭo herke Işma \"[[:\$1]]\"yo'''",
+'searchmenu-new' => 'Kṭaw iFaṭaṭe "[[:$1]]" buWiki.',
+'searchhelp-url' => 'Help: Ḥbişoṭo',
+'searchprofile-articles' => 'Faṭoṭe daḤbişoṭo',
+'searchprofile-project' => 'Faṭoṭe du3udrono u daProjat',
+'searchprofile-images' => 'Multimediya',
+'searchprofile-everything' => 'Kulmede',
+'searchprofile-advanced' => 'Advanced',
+'searchprofile-articles-tooltip' => 'Krax b$1',
+'searchprofile-project-tooltip' => 'Krax b$1',
+'searchprofile-images-tooltip' => 'Krax Ṥurtoṭe',
 'searchprofile-everything-tooltip' => 'Krax baḤbişoṭo (baFaṭoṭe duDroşo ste)',
-'searchprofile-advanced-tooltip'   => 'Search in custom namespaces',
-'search-result-size'               => '$1 ({{PLURAL:$2|1 Melṭo|$2 Mele}})',
-'search-result-category-size'      => '{{PLURAL:$1|1 Hadomo|$1 Hadome}} ({{PLURAL:$2|1 Sedro taḥtoyo|$2 Sedre taḥtoye}}, {{PLURAL:$3|1 file|$3 files}})',
-'search-redirect'                  => '(Asiruṭo men $1)',
-'search-section'                   => '(Fusoqo $1)',
-'search-suggest'                   => 'Ub³atwa dkıṭwat: $1?',
-'search-interwiki-more'            => '(heşa)',
-'searchrelated'                    => 'related',
-'searchall'                        => 'kulle',
-'showingresultsheader'             => "{{PLURAL:$5|Nafqo '''$1''' of '''$3'''|Nafqe '''$1 - $2''' men '''$3'''}} l'''$4'''",
-'search-nonefound'                 => 'Für deine Suchanfrage wurden keine Ergebnisse gefunden.',
-'powersearch-field'                => 'Krax',
-'powersearch-togglelabel'          => 'Sım Qontrol:',
-'powersearch-toggleall'            => 'Kulle',
+'searchprofile-advanced-tooltip' => 'Search in custom namespaces',
+'search-result-size' => '$1 ({{PLURAL:$2|1 Melṭo|$2 Mele}})',
+'search-result-category-size' => '{{PLURAL:$1|1 Hadomo|$1 Hadome}} ({{PLURAL:$2|1 Sedro taḥtoyo|$2 Sedre taḥtoye}}, {{PLURAL:$3|1 file|$3 files}})',
+'search-redirect' => '(Asiruṭo men $1)',
+'search-section' => '(Fusoqo $1)',
+'search-suggest' => 'Ub³atwa dkıṭwat: $1?',
+'search-interwiki-more' => '(heşa)',
+'searchrelated' => 'related',
+'searchall' => 'kulle',
+'showingresultsheader' => "{{PLURAL:$5|Nafqo '''$1''' of '''$3'''|Nafqe '''$1 - $2''' men '''$3'''}} l'''$4'''",
+'search-nonefound' => 'Für deine Suchanfrage wurden keine Ergebnisse gefunden.',
+'powersearch-field' => 'Krax',
+'powersearch-togglelabel' => 'Sım Qontrol:',
+'powersearch-toggleall' => 'Kulle',
 
 # Preferences page
-'preferences'               => '3ayarat',
-'mypreferences'             => 'a3ayaratayḍi',
-'prefs-edits'               => 'Menyono daŞuḥlofe kulle:',
-'prefs-resetpass'           => 'Mşaḥlaf uQliḍo',
-'prefs-email'               => '3ayarat duEmail',
-'saveprefs'                 => 'Mqayad',
-'searchresultshead'         => 'Kruxyo',
-'timezoneregion-africa'     => 'Afriqa',
-'timezoneregion-america'    => 'Ameriqa',
+'preferences' => '3ayarat',
+'mypreferences' => 'a3ayaratayḍi',
+'prefs-edits' => 'Menyono daŞuḥlofe kulle:',
+'prefs-resetpass' => 'Mşaḥlaf uQliḍo',
+'prefs-email' => '3ayarat duEmail',
+'saveprefs' => 'Mqayad',
+'searchresultshead' => 'Kruxyo',
+'timezoneregion-africa' => 'Afriqa',
+'timezoneregion-america' => 'Ameriqa',
 'timezoneregion-antarctica' => 'Antarctica',
-'timezoneregion-arctic'     => 'Arctic',
-'timezoneregion-asia'       => 'Asia',
-'timezoneregion-atlantic'   => 'Yamo atlantikoyo',
-'timezoneregion-australia'  => 'Australia',
-'timezoneregion-europe'     => 'Awrifi',
-'timezoneregion-indian'     => 'Yamo hindoyo',
-'youremail'                 => 'Adres duEmail',
-'username'                  => 'Işme duHadomo:',
-'prefs-memberingroups'      => 'Hadomo d{{PLURAL:$1|Gudo|Gudoṭo}}:',
-'prefs-registration'        => 'Zabno duSugolo:',
-'yourrealname'              => 'Işmo şariro:',
-'yourlanguage'              => 'Leşono',
-'yournick'                  => 'Imḍa ḥaṭto:',
-'yourgender'                => 'Ğenso:',
-'gender-male'               => 'Dekronoyo',
-'gender-female'             => 'Neqıbṭonoyo',
-'email'                     => 'Email',
-'prefs-help-email'          => 'Latat majbur dkıṭwat uEmail-Adresayḍox, elo glozam inaqla ṫo³at uQliḍayḍox u hakka dlozam dmişadar lox Qliḍo ḥaṭo.',
-'prefs-help-email-others'   => 'Kibux mijğolat 3am Hadome ğer biFaṭo duMamlo u luglozam dumat Işmux.',
-'prefs-signature'           => 'Imḍa',
+'timezoneregion-arctic' => 'Arctic',
+'timezoneregion-asia' => 'Asia',
+'timezoneregion-atlantic' => 'Yamo atlantikoyo',
+'timezoneregion-australia' => 'Australia',
+'timezoneregion-europe' => 'Awrifi',
+'timezoneregion-indian' => 'Yamo hindoyo',
+'youremail' => 'Adres duEmail',
+'username' => 'Işme duHadomo:',
+'prefs-memberingroups' => 'Hadomo d{{PLURAL:$1|Gudo|Gudoṭo}}:',
+'prefs-registration' => 'Zabno duSugolo:',
+'yourrealname' => 'Işmo şariro:',
+'yourlanguage' => 'Leşono',
+'yournick' => 'Imḍa ḥaṭto:',
+'yourgender' => 'Ğenso:',
+'gender-male' => 'Dekronoyo',
+'gender-female' => 'Neqıbṭonoyo',
+'email' => 'Email',
+'prefs-help-email' => 'Latat majbur dkıṭwat uEmail-Adresayḍox, elo glozam inaqla ṫo³at uQliḍayḍox u hakka dlozam dmişadar lox Qliḍo ḥaṭo.',
+'prefs-help-email-others' => 'Kibux mijğolat 3am Hadome ğer biFaṭo duMamlo u luglozam dumat Işmux.',
+'prefs-signature' => 'Imḍa',
 
 # User preference: e-mail validation using jQuery
 'email-address-validity-valid' => 'uEmail-Adresayḍux m³adlo yo.',
 
 # Groups
 'group-user' => 'Hadome',
-'group-all'  => '(kulle)',
+'group-all' => '(kulle)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-edit' => 'Mşaḥlaf iFaṭaṭe',
 
 # Recent changes
-'nchanges'                        => '$1 {{PLURAL:$1|Şuḥlofo|Şuḥlofe}}',
-'recentchanges'                   => 'Şuḥlofe ḥaroye',
-'recentchanges-legend'            => '3ayar daŞuḥlofe',
-'recentchanges-summary'           => 'biFaṭaṭe kibox ḥozat aŞuḥlofe ḥaroye.',
-'recentchanges-feed-description'  => 'biFaṭaṭe kibox ḥozat aŞuḥlofe ḥaroye.',
-'recentchanges-label-newpage'     => 'Faṭo ḥaṭto',
-'recentchanges-label-minor'       => 'This is a minor edit',
-'recentchanges-label-bot'         => 'uŞuḥlofano sim muBot.',
+'nchanges' => '$1 {{PLURAL:$1|Şuḥlofo|Şuḥlofe}}',
+'recentchanges' => 'Şuḥlofe ḥaroye',
+'recentchanges-legend' => '3ayar daŞuḥlofe',
+'recentchanges-summary' => 'biFaṭaṭe kibox ḥozat aŞuḥlofe ḥaroye.',
+'recentchanges-feed-description' => 'biFaṭaṭe kibox ḥozat aŞuḥlofe ḥaroye.',
+'recentchanges-label-newpage' => 'Faṭo ḥaṭto',
+'recentchanges-label-minor' => 'This is a minor edit',
+'recentchanges-label-bot' => 'uŞuḥlofano sim muBot.',
 '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'                      => 'Herke komaḥwın aŞuḥlofe ḥaroye men ""$2"" (hul buSowudo ""$1"").',
-'rclistfrom'                      => 'Maḥway li Şuḥlofe ḥaṭe men $1',
-'rcshowhideminor'                 => '$1 minor edits',
-'rcshowhidebots'                  => '$1 bots',
-'rcshowhideliu'                   => '$1 Hadome d3abiri',
-'rcshowhideanons'                 => '$1 Hadomo nuxroyo',
-'rcshowhidepatr'                  => '$1 patrolled edits',
-'rcshowhidemine'                  => 'aMaṫwoṭayḍi ($1)',
-'rclinks'                         => 'Maḥway li $1 aŞuḥlofe ḥaroye men meqım $2 Yawme hul u³do. <br />$3',
-'diff'                            => 'Frişuṭo',
-'hist'                            => 'Maktabzabno',
-'hide'                            => 'Tlay',
-'show'                            => 'Maḥway',
-'minoreditletter'                 => 'm',
-'newpageletter'                   => 'N',
-'boteditletter'                   => 'b',
-'rc-enhanced-expand'              => 'Maḥway aŞelole',
-'rc-enhanced-hide'                => 'Tlay aŞelole',
+'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' => 'Herke komaḥwın aŞuḥlofe ḥaroye men ""$2"" (hul buSowudo ""$1"").',
+'rclistfrom' => 'Maḥway li Şuḥlofe ḥaṭe men $1',
+'rcshowhideminor' => '$1 minor edits',
+'rcshowhidebots' => '$1 bots',
+'rcshowhideliu' => '$1 Hadome d3abiri',
+'rcshowhideanons' => '$1 Hadomo nuxroyo',
+'rcshowhidepatr' => '$1 patrolled edits',
+'rcshowhidemine' => 'aMaṫwoṭayḍi ($1)',
+'rclinks' => 'Maḥway li $1 aŞuḥlofe ḥaroye men meqım $2 Yawme hul u³do. <br />$3',
+'diff' => 'Frişuṭo',
+'hist' => 'Maktabzabno',
+'hide' => 'Tlay',
+'show' => 'Maḥway',
+'minoreditletter' => 'm',
+'newpageletter' => 'N',
+'boteditletter' => 'b',
+'rc-enhanced-expand' => 'Maḥway aŞelole',
+'rc-enhanced-hide' => 'Tlay aŞelole',
 
 # Recent changes linked
-'recentchangeslinked'          => 'Şuḥlofe bFaṭoṭe masre',
-'recentchangeslinked-toolbox'  => 'Şuḥlofe bFaṭoṭe masre',
-'recentchangeslinked-title'    => 'Şuḥlofe bFaṭoṭe dkıtne masre b$1',
+'recentchangeslinked' => 'Şuḥlofe bFaṭoṭe masre',
+'recentchangeslinked-toolbox' => 'Şuḥlofe bFaṭoṭe masre',
+'recentchangeslinked-title' => 'Şuḥlofe bFaṭoṭe dkıtne masre b$1',
 'recentchangeslinked-noresult' => 'No changes on linked pages during the given period.',
-'recentchangeslinked-summary'  => "This is a list of changes made recently to pages linked from a specified page (or to members of a specified category).
+'recentchangeslinked-summary' => "This is a list of changes made recently to pages linked from a specified page (or to members of a specified category).
 Pages on [[Special:Watchlist|your watchlist]] are '''bold'''.",
-'recentchangeslinked-page'     => 'Işmo diFaṭo',
-'recentchangeslinked-to'       => 'Maḥway li Şuḥlofe dFaṭoṭe dkitne masre lerke.',
+'recentchangeslinked-page' => 'Işmo diFaṭo',
+'recentchangeslinked-to' => 'Maḥway li Şuḥlofe dFaṭoṭe dkitne masre lerke.',
 
 # Upload
-'upload'        => 'Mosaq Fayl',
+'upload' => 'Mosaq Fayl',
 'uploadlogpage' => 'Upload log',
-'filedesc'      => 'Sfiquṭo',
+'filedesc' => 'Sfiquṭo',
 'uploadedimage' => 'mosaq "[[$1]]"',
 
-'license'        => 'Fsoso',
+'license' => 'Fsoso',
 'license-header' => 'Fsoso',
 
 # File description page
-'file-anchor-link'       => 'Fayl',
-'filehist'               => 'Maktabzabno duFayl',
-'filehist-help'          => 'Click on a date/time to view the file as it appeared at that time.',
-'filehist-revert'        => 'revert',
-'filehist-current'       => 'current',
-'filehist-datetime'      => 'Zabno',
-'filehist-thumb'         => 'Thumbnail',
-'filehist-thumbtext'     => 'Thumbnail for version as of $1',
-'filehist-user'          => 'Hadomo',
-'filehist-dimensions'    => 'Dimensions',
-'filehist-comment'       => 'Comment',
-'imagelinks'             => 'File usage',
-'linkstoimage'           => 'The following {{PLURAL:$1|page links|$1 pages link}} to this file:',
-'nolinkstoimage'         => 'There are no pages that link to this file.',
+'file-anchor-link' => 'Fayl',
+'filehist' => 'Maktabzabno duFayl',
+'filehist-help' => 'Click on a date/time to view the file as it appeared at that time.',
+'filehist-revert' => 'revert',
+'filehist-current' => 'current',
+'filehist-datetime' => 'Zabno',
+'filehist-thumb' => 'Thumbnail',
+'filehist-thumbtext' => 'Thumbnail for version as of $1',
+'filehist-user' => 'Hadomo',
+'filehist-dimensions' => 'Dimensions',
+'filehist-comment' => 'Comment',
+'imagelinks' => 'File usage',
+'linkstoimage' => 'The following {{PLURAL:$1|page links|$1 pages link}} to this file:',
+'nolinkstoimage' => 'There are no pages that link to this file.',
 'sharedupload-desc-here' => 'This file is from $1 and may be used by other projects.
 The description on its [$2 file description page] there is shown below.',
 
@@ -542,44 +542,44 @@ The description on its [$2 file description page] there is shown below.',
 
 'disambiguationspage' => 'Template:disambig',
 
-'brokenredirects-edit'   => 'mşaḥlaf',
+'brokenredirects-edit' => 'mşaḥlaf',
 'brokenredirects-delete' => 'slag',
 
 # Miscellaneous special pages
-'nbytes'        => '$1 {{PLURAL:$1|byte|bytes}}',
-'nmembers'      => '$1 {{PLURAL:$1|Hadomo|Hadome}}',
-'prefixindex'   => 'aFaṭoṭe kulle dkitte Prefiks',
-'usercreated'   => '{{GENDER:$3|kṭule}}  $1 b$2',
-'newpages'      => 'Faṭoṭe ḥaṭe',
-'move'          => 'Mtaxar',
+'nbytes' => '$1 {{PLURAL:$1|byte|bytes}}',
+'nmembers' => '$1 {{PLURAL:$1|Hadomo|Hadome}}',
+'prefixindex' => 'aFaṭoṭe kulle dkitte Prefiks',
+'usercreated' => '{{GENDER:$3|kṭule}}  $1 b$2',
+'newpages' => 'Faṭoṭe ḥaṭe',
+'move' => 'Mtaxar',
 'pager-newer-n' => '{{PLURAL:$1|1 ḥreno |$1 ḥrene}}',
 'pager-older-n' => '{{PLURAL:$1|3atiqo1|3atiqe $1}}',
 
 # Book sources
-'booksources'               => 'Kruxyo baNumarat duISBN',
+'booksources' => 'Kruxyo baNumarat duISBN',
 'booksources-search-legend' => 'Krax Mabu³e me Kṭowe',
-'booksources-go'            => 'Zux',
+'booksources-go' => 'Zux',
 
 # Special:Log
 'log' => 'Logs',
 
 # Special:AllPages
-'allpages'       => 'aFaṭaṭe kulle',
+'allpages' => 'aFaṭaṭe kulle',
 'alphaindexline' => '$1  l$2',
-'allarticles'    => 'aFaṭaṭe kulle',
-'allpagesnext'   => 'Ḥreto',
+'allarticles' => 'aFaṭaṭe kulle',
+'allpagesnext' => 'Ḥreto',
 'allpagessubmit' => 'Zux',
 
 # Special:Categories
 'categories' => 'Sedre',
 
 # Special:DeletedContributions
-'deletedcontributions'             => 'Maṫwoṭo slige',
-'deletedcontributions-title'       => 'Maṫwoṭo slige',
+'deletedcontributions' => 'Maṫwoṭo slige',
+'deletedcontributions-title' => 'Maṫwoṭo slige',
 'sp-deletedcontributions-contribs' => 'Maṫwoṭo',
 
 # Special:LinkSearch
-'linksearch-ok'   => 'Krax',
+'linksearch-ok' => 'Krax',
 'linksearch-line' => '$1 masro yo b$2',
 
 # Special:ListUsers
@@ -589,183 +589,183 @@ The description on its [$2 file description page] there is shown below.',
 'newuserlogpage' => 'User creation log',
 
 # Special:ListGroupRights
-'listgrouprights-group'    => 'Gudo',
-'listgrouprights-rights'   => 'Ḥaqat',
+'listgrouprights-group' => 'Gudo',
+'listgrouprights-rights' => 'Ḥaqat',
 'listgrouprights-helppage' => 'Help: Ḥaqat diGudo',
-'listgrouprights-members'  => '(Lista daHadome)',
+'listgrouprights-members' => '(Lista daHadome)',
 
 # E-mail user
-'emailuser'     => 'Kṭaw Email luHadomano.',
+'emailuser' => 'Kṭaw Email luHadomano.',
 'emailusername' => 'Işme duHadomo:',
-'emailfrom'     => 'Men:',
-'emailto'       => 'Lwoṭ:',
-'emailmessage'  => 'Ṫebo:',
+'emailfrom' => 'Men:',
+'emailto' => 'Lwoṭ:',
+'emailmessage' => 'Ṫebo:',
 
 # Watchlist
-'watchlist'         => 'My watchlist',
-'mywatchlist'       => 'My watchlist',
-'watchlistfor2'     => 'L$1 $2',
-'watch'             => 'Watch',
-'unwatch'           => 'Unwatch',
+'watchlist' => 'My watchlist',
+'mywatchlist' => 'My watchlist',
+'watchlistfor2' => 'L$1 $2',
+'watch' => 'Watch',
+'unwatch' => 'Unwatch',
 'watchlist-details' => '{{PLURAL:$1|$1 page|$1 pages}} on your watchlist, not counting talk pages.',
-'wlshowlast'        => 'Maḥway li aŞuḥlofe dıtsimi meqım $1 Sa³ayat $2 Yawme $3',
+'wlshowlast' => 'Maḥway li aŞuḥlofe dıtsimi meqım $1 Sa³ayat $2 Yawme $3',
 'watchlist-options' => 'Watchlist options',
 
 # Delete
 'actioncomplete' => 'uDuboro kamıl',
-'actionfailed'   => 'Action failed',
-'dellogpage'     => 'Deletion log',
+'actionfailed' => 'Action failed',
+'dellogpage' => 'Deletion log',
 
 # Rollback
 'rollbacklink' => 'rollback',
 
 # Protect
-'protectlogpage'   => 'Protection log',
+'protectlogpage' => 'Protection log',
 'protectedarticle' => 'mastar "[[$1]]"',
 
 # Undelete
-'undeletelink'              => 'view/restore',
-'undeleteviewlink'          => 'ḥur',
-'undelete-search-submit'    => 'Krax',
+'undeletelink' => 'view/restore',
+'undeleteviewlink' => 'ḥur',
+'undelete-search-submit' => 'Krax',
 'undelete-show-file-submit' => 'Eh',
 
 # Namespace form on various pages
-'namespace'      => 'Dukṭo luIşmo',
-'invert'         => 'Invert selection',
+'namespace' => 'Dukṭo luIşmo',
+'invert' => 'Invert selection',
 'blanknamespace' => '(Rişoyto)',
 
 # Contributions
-'contributions'       => 'Maṫwoṭo duHadomo:',
+'contributions' => 'Maṫwoṭo duHadomo:',
 'contributions-title' => 'Maṫwoṭo d$1',
-'mycontris'           => 'aMaṫwoṭayḍi',
-'contribsub2'         => 'd$1 ($2)',
-'uctop'               => '(ḥaroyo)',
-'month'               => 'muYarḥo',
-'year'                => 'hul iŞato:',
+'mycontris' => 'aMaṫwoṭayḍi',
+'contribsub2' => 'd$1 ($2)',
+'uctop' => '(ḥaroyo)',
+'month' => 'muYarḥo',
+'year' => 'hul iŞato:',
 
-'sp-contributions-newbies'  => 'Bes maḥway Maṫwoṭo dHadome ḥaṭe',
+'sp-contributions-newbies' => 'Bes maḥway Maṫwoṭo dHadome ḥaṭe',
 'sp-contributions-blocklog' => 'Block log',
-'sp-contributions-deleted'  => 'Maṫwoṭo slige',
-'sp-contributions-uploads'  => 'Fayl masalqo',
-'sp-contributions-logs'     => 'logs',
-'sp-contributions-talk'     => 'Mamlo',
-'sp-contributions-search'   => 'Krax Maṫwoṭo',
+'sp-contributions-deleted' => 'Maṫwoṭo slige',
+'sp-contributions-uploads' => 'Fayl masalqo',
+'sp-contributions-logs' => 'logs',
+'sp-contributions-talk' => 'Mamlo',
+'sp-contributions-search' => 'Krax Maṫwoṭo',
 'sp-contributions-username' => 'IP-Adres aw Işme duHadmomo:',
-'sp-contributions-toponly'  => 'Only show edits that are latest revisions',
-'sp-contributions-submit'   => 'Krax',
+'sp-contributions-toponly' => 'Only show edits that are latest revisions',
+'sp-contributions-submit' => 'Krax',
 
 # What links here
-'whatlinkshere'            => 'Asirwoṭo biFaṭaṭe',
-'whatlinkshere-title'      => 'Faṭoṭe dkitte Asiruṭo 3am"$1"',
-'whatlinkshere-page'       => 'Faṭo',
-'linkshere'                => "aFaṭoṭani masre ne 3am '''[[:$1]]''':",
-'nolinkshere'              => "Layto Faṭoṭe dkitte Asiruṭo 3am '''[[:$1]]'''.",
-'isredirect'               => 'redirect page',
-'istemplate'               => 'transclusion',
-'isimage'                  => 'Asiruṭo duFayl',
-'whatlinkshere-prev'       => '{{PLURAL:$1|meqımtır|$1 meqımtır}}',
-'whatlinkshere-next'       => '{{PLURAL:$1|ḥreno|$1 ḥrene}}',
-'whatlinkshere-links'      => '← Asirwoṭo',
+'whatlinkshere' => 'Asirwoṭo biFaṭaṭe',
+'whatlinkshere-title' => 'Faṭoṭe dkitte Asiruṭo 3am"$1"',
+'whatlinkshere-page' => 'Faṭo',
+'linkshere' => "aFaṭoṭani masre ne 3am '''[[:$1]]''':",
+'nolinkshere' => "Layto Faṭoṭe dkitte Asiruṭo 3am '''[[:$1]]'''.",
+'isredirect' => 'redirect page',
+'istemplate' => 'transclusion',
+'isimage' => 'Asiruṭo duFayl',
+'whatlinkshere-prev' => '{{PLURAL:$1|meqımtır|$1 meqımtır}}',
+'whatlinkshere-next' => '{{PLURAL:$1|ḥreno|$1 ḥrene}}',
+'whatlinkshere-links' => '← Asirwoṭo',
 'whatlinkshere-hideredirs' => '$1 redirects',
-'whatlinkshere-hidetrans'  => '$1 transclusions',
-'whatlinkshere-hidelinks'  => '$1 Asirwoṭo',
+'whatlinkshere-hidetrans' => '$1 transclusions',
+'whatlinkshere-hidelinks' => '$1 Asirwoṭo',
 'whatlinkshere-hideimages' => '$1 Asiruṭo duFayl',
-'whatlinkshere-filters'    => 'Filtrat',
+'whatlinkshere-filters' => 'Filtrat',
 
 # Block/unblock
-'ipboptions'               => '2 Sa³ayat:2 hours,1 Yawmo:1 day,3 Yawme:3 days,1 Şabṭo:1 week,2 Şabe:2 weeks,1 Yarḥo:1 month,3 Yarḥe:3 months,6 Yarḥe :6 months,1 Şato:1 year,indefinite:infinite',
-'ipblocklist'              => 'Blocked users',
-'ipblocklist-submit'       => 'Krax',
-'blocklink'                => 'Maḥram',
-'unblocklink'              => 'unblock',
-'change-blocklink'         => 'change block',
-'contribslink'             => 'Maṫwoṭo',
-'blocklogpage'             => 'Block log',
-'blocklogentry'            => 'blocked [[$1]] with an expiry time of $2 $3',
+'ipboptions' => '2 Sa³ayat:2 hours,1 Yawmo:1 day,3 Yawme:3 days,1 Şabṭo:1 week,2 Şabe:2 weeks,1 Yarḥo:1 month,3 Yarḥe:3 months,6 Yarḥe :6 months,1 Şato:1 year,indefinite:infinite',
+'ipblocklist' => 'Blocked users',
+'ipblocklist-submit' => 'Krax',
+'blocklink' => 'Maḥram',
+'unblocklink' => 'unblock',
+'change-blocklink' => 'change block',
+'contribslink' => 'Maṫwoṭo',
+'blocklogpage' => 'Block log',
+'blocklogentry' => 'blocked [[$1]] with an expiry time of $2 $3',
 'block-log-flags-nocreate' => 'account creation disabled',
 
 # Move page
 'movelogpage' => 'Move log',
-'revertmove'  => 'revert',
+'revertmove' => 'revert',
 
 # Export
 'export' => 'Mofaq iFaṭaṭe',
 
 # Namespace 8 related
-'allmessages'               => 'Ṫebo duSistem dMEdiaWiki',
-'allmessagesname'           => 'Işmo',
-'allmessagesdefault'        => 'Syomo standard',
-'allmessages-language'      => 'Leşono',
+'allmessages' => 'Ṫebo duSistem dMEdiaWiki',
+'allmessagesname' => 'Işmo',
+'allmessagesdefault' => 'Syomo standard',
+'allmessages-language' => 'Leşono',
 'allmessages-filter-submit' => 'Zux',
 
 # Thumbnails
-'thumbnail-more'  => 'Rabtır',
+'thumbnail-more' => 'Rabtır',
 'thumbnail_error' => 'Error creating thumbnail: $1',
 
 # Tooltip help for the actions
-'tooltip-pt-userpage'             => 'iFaṭaṭyḍox',
-'tooltip-pt-mytalk'               => 'iFaṭayḍux duDroşo',
-'tooltip-pt-preferences'          => 'a3ayaratayḍux',
-'tooltip-pt-watchlist'            => 'Lista dFaṭoṭe dkib³at mşaḥılfat',
-'tooltip-pt-mycontris'            => 'Lista daMaṫwoṭayḍox',
-'tooltip-pt-login'                => 'İnaqa demqaydat ruḥox ṫawo yo, elo letat mejbur',
-'tooltip-pt-logout'               => 'Nfoqo',
-'tooltip-ca-talk'                 => 'Droşo 3al iFaṭo daḤbişoṭo',
-'tooltip-ca-edit'                 => 'Kibux mşaḥılfat iFaṭaṭe, elo bo³o msta³mal uZra³lo duQontrol meqım demqaydat iFaṭo',
-'tooltip-ca-addsection'           => 'Bday Fusoqo ḥaṭo',
-'tooltip-ca-viewsource'           => 'This page is protected.
+'tooltip-pt-userpage' => 'iFaṭaṭyḍox',
+'tooltip-pt-mytalk' => 'iFaṭayḍux duDroşo',
+'tooltip-pt-preferences' => 'a3ayaratayḍux',
+'tooltip-pt-watchlist' => 'Lista dFaṭoṭe dkib³at mşaḥılfat',
+'tooltip-pt-mycontris' => 'Lista daMaṫwoṭayḍox',
+'tooltip-pt-login' => 'İnaqa demqaydat ruḥox ṫawo yo, elo letat mejbur',
+'tooltip-pt-logout' => 'Nfoqo',
+'tooltip-ca-talk' => 'Droşo 3al iFaṭo daḤbişoṭo',
+'tooltip-ca-edit' => 'Kibux mşaḥılfat iFaṭaṭe, elo bo³o msta³mal uZra³lo duQontrol meqım demqaydat iFaṭo',
+'tooltip-ca-addsection' => 'Bday Fusoqo ḥaṭo',
+'tooltip-ca-viewsource' => 'This page is protected.
 You can view its source',
-'tooltip-ca-history'              => 'Past revisions of this page',
-'tooltip-ca-protect'              => 'Mastar iFaṭaṭe',
-'tooltip-ca-delete'               => 'Slag iFaṭaṭe',
-'tooltip-ca-move'                 => 'Mataxar iFaṭaṭe',
-'tooltip-ca-watch'                => 'Add this page to your watchlist',
-'tooltip-ca-unwatch'              => 'Remove this page from your watchlist',
-'tooltip-search'                  => 'Krax{{SITENAME}}',
-'tooltip-search-go'               => 'Zux liFaṭo dkitla tam uIşmano.',
-'tooltip-search-fulltext'         => 'Krax uSyomano baFaṭoṭe',
-'tooltip-p-logo'                  => 'Z³ar iFaṭo rişoyto',
-'tooltip-n-mainpage'              => 'Z³ar iFaṭo rişoyto',
-'tooltip-n-mainpage-description'  => 'Z³ar iFaṭo rişoyto',
-'tooltip-n-portal'                => '3al iProja; mın komisam u ayko u ayko ne a medone.',
-'tooltip-n-currentevents'         => 'Find background information on current events',
-'tooltip-n-recentchanges'         => 'Lista daŞuḥlofe ḥaroye kulle',
-'tooltip-n-randompage'            => 'Ftaḥ Faṭo gedşonoyto',
-'tooltip-n-help'                  => 'Maḥway iFaṭo du3udrono',
-'tooltip-t-whatlinkshere'         => 'Lista daFaṭoṭe kulle dkitte Asiruṭo lerke',
-'tooltip-t-recentchangeslinked'   => 'Şuḥlofe ḥaroye bFaṭoṭe dkitte Asiruṭo lerke',
-'tooltip-feed-atom'               => 'Atom feed diFaṭaṭe',
-'tooltip-t-contributions'         => 'Lista daMaṫwoṭo duHadomano',
-'tooltip-t-emailuser'             => 'Mşadar Email luHadomano',
-'tooltip-t-upload'                => 'Mosaq aFayls',
-'tooltip-t-specialpages'          => 'Lista daFaṭoṭe dilonoye kulle.',
-'tooltip-t-print'                 => 'Printable version of this page',
-'tooltip-t-permalink'             => 'Asiruṭo aminoyto liFaṭaṭe',
-'tooltip-ca-nstab-main'           => 'Maḥway iFaṭo daḤbişoṭo',
-'tooltip-ca-nstab-user'           => 'Maḥway iFaṭo duHadomo',
-'tooltip-ca-nstab-special'        => 'Haṭe Faṭo dilonoyto yo, laybux mşaḥalfatla',
-'tooltip-ca-nstab-project'        => 'Maḥway iFaṭo diProja',
-'tooltip-ca-nstab-image'          => 'Maḥway iFaṭo duFayl',
-'tooltip-ca-nstab-template'       => 'View the template',
-'tooltip-ca-nstab-category'       => 'Maḥway iFaṭo daSedre',
-'tooltip-minoredit'               => 'Mark this as a minor edit',
-'tooltip-save'                    => 'Mqayad uŞuḥlofano',
-'tooltip-preview'                 => 'Preview your changes, please use this before saving!',
-'tooltip-diff'                    => 'Maḥway li aŞuḥlofe buSyomano',
+'tooltip-ca-history' => 'Past revisions of this page',
+'tooltip-ca-protect' => 'Mastar iFaṭaṭe',
+'tooltip-ca-delete' => 'Slag iFaṭaṭe',
+'tooltip-ca-move' => 'Mataxar iFaṭaṭe',
+'tooltip-ca-watch' => 'Add this page to your watchlist',
+'tooltip-ca-unwatch' => 'Remove this page from your watchlist',
+'tooltip-search' => 'Krax{{SITENAME}}',
+'tooltip-search-go' => 'Zux liFaṭo dkitla tam uIşmano.',
+'tooltip-search-fulltext' => 'Krax uSyomano baFaṭoṭe',
+'tooltip-p-logo' => 'Z³ar iFaṭo rişoyto',
+'tooltip-n-mainpage' => 'Z³ar iFaṭo rişoyto',
+'tooltip-n-mainpage-description' => 'Z³ar iFaṭo rişoyto',
+'tooltip-n-portal' => '3al iProja; mın komisam u ayko u ayko ne a medone.',
+'tooltip-n-currentevents' => 'Find background information on current events',
+'tooltip-n-recentchanges' => 'Lista daŞuḥlofe ḥaroye kulle',
+'tooltip-n-randompage' => 'Ftaḥ Faṭo gedşonoyto',
+'tooltip-n-help' => 'Maḥway iFaṭo du3udrono',
+'tooltip-t-whatlinkshere' => 'Lista daFaṭoṭe kulle dkitte Asiruṭo lerke',
+'tooltip-t-recentchangeslinked' => 'Şuḥlofe ḥaroye bFaṭoṭe dkitte Asiruṭo lerke',
+'tooltip-feed-atom' => 'Atom feed diFaṭaṭe',
+'tooltip-t-contributions' => 'Lista daMaṫwoṭo duHadomano',
+'tooltip-t-emailuser' => 'Mşadar Email luHadomano',
+'tooltip-t-upload' => 'Mosaq aFayls',
+'tooltip-t-specialpages' => 'Lista daFaṭoṭe dilonoye kulle.',
+'tooltip-t-print' => 'Printable version of this page',
+'tooltip-t-permalink' => 'Asiruṭo aminoyto liFaṭaṭe',
+'tooltip-ca-nstab-main' => 'Maḥway iFaṭo daḤbişoṭo',
+'tooltip-ca-nstab-user' => 'Maḥway iFaṭo duHadomo',
+'tooltip-ca-nstab-special' => 'Haṭe Faṭo dilonoyto yo, laybux mşaḥalfatla',
+'tooltip-ca-nstab-project' => 'Maḥway iFaṭo diProja',
+'tooltip-ca-nstab-image' => 'Maḥway iFaṭo duFayl',
+'tooltip-ca-nstab-template' => 'View the template',
+'tooltip-ca-nstab-category' => 'Maḥway iFaṭo daSedre',
+'tooltip-minoredit' => 'Mark this as a minor edit',
+'tooltip-save' => 'Mqayad uŞuḥlofano',
+'tooltip-preview' => 'Preview your changes, please use this before saving!',
+'tooltip-diff' => 'Maḥway li aŞuḥlofe buSyomano',
 'tooltip-compareselectedversions' => 'See the differences between the two selected revisions of this page',
-'tooltip-watch'                   => 'Add this page to your watchlist',
-'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-summary'                 => 'Enter a short summary',
+'tooltip-watch' => 'Add this page to your watchlist',
+'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-summary' => 'Enter a short summary',
 
 # Browsing diffs
 'previousdiff' => '← Şuḥlofo 3atiqo',
-'nextdiff'     => 'Hiç lo mşaḥalfat →',
+'nextdiff' => 'Hiç lo mşaḥalfat →',
 
 # Media information
 'file-info-size' => '$1 × $2 pixels, file size: $3, MIME type: $4',
-'file-nohires'   => 'No higher resolution available.',
-'svg-long-desc'  => 'SCG Fayl, Rabuṭo $1 × $2 pixel, Rabuṭo duFayl: $3',
+'file-nohires' => 'No higher resolution available.',
+'svg-long-desc' => 'SCG Fayl, Rabuṭo $1 × $2 pixel, Rabuṭo duFayl: $3',
 'show-big-image' => 'Tam faṥiḥ',
 
 # Special:NewFiles
@@ -773,7 +773,7 @@ You can view its source',
 
 # Video information, used by Language::formatTimePeriod() to format lengths in the above messages
 'seconds' => '{{PLURAL:$1|$1 Ṥaniye|$1 Ṥaniyat}}',
-'ago'     => 'meqım $1',
+'ago' => 'meqım $1',
 
 # Bad image list
 'bad_image_list' => 'The format is as follows:
@@ -783,8 +783,8 @@ The first link on a line must be a link to a bad file.
 Any subsequent links on the same line are considered to be exceptions, i.e. pages where the file may occur inline.',
 
 # Metadata
-'metadata'        => 'Metadata',
-'metadata-help'   => 'This file contains additional information, probably added from the digital camera or scanner used to create or digitize it.
+'metadata' => 'Metadata',
+'metadata-help' => 'This file contains additional information, probably added from the digital camera or scanner used to create or digitize it.
 If the file has been modified from its original state, some details may not fully reflect the modified file.',
 'metadata-fields' => 'Image metadata fields listed in this message will be included on image page display when the metadata table is collapsed.
 Others will be hidden by default.
@@ -803,23 +803,23 @@ Others will be hidden by default.
 * gpsaltitude',
 
 # EXIF tags
-'exif-writer'          => 'Kaṭowo',
-'exif-languagecode'    => 'Leşono',
+'exif-writer' => 'Kaṭowo',
+'exif-languagecode' => 'Leşono',
 'exif-cameraownername' => 'uMoro diQamera',
 
 # External editor support
-'edit-externally'      => 'Edit this file using an external application',
+'edit-externally' => 'Edit this file using an external application',
 'edit-externally-help' => '(See the [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] for more information)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'kulle',
 'namespacesall' => 'kulle',
-'monthsall'     => 'kulle',
+'monthsall' => 'kulle',
 
 # Watchlist editing tools
 'watchlisttools-view' => 'View relevant changes',
 'watchlisttools-edit' => 'View and edit watchlist',
-'watchlisttools-raw'  => 'Edit raw watchlist',
+'watchlisttools-raw' => 'Edit raw watchlist',
 
 # Core parser functions
 'duplicate-defaultsort' => '\'\'\'Warning:\'\'\' Default sort key "$2" overrides earlier default sort key "$1".',
@@ -858,24 +858,24 @@ Others will be hidden by default.
 iFaṭaṭe u3do kitla Qaṫre.',
 
 # HTML forms
-'htmlform-submit'              => 'Mqayad',
+'htmlform-submit' => 'Mqayad',
 'htmlform-selectorother-other' => 'Ḥrene',
 
 # Feedback
 'feedback-message' => 'Ṫebo:',
-'feedback-cancel'  => 'Mbaṫel',
+'feedback-cancel' => 'Mbaṫel',
 
 # API errors
 'api-error-unknownerror' => 'Fawdo nuxroyo: $1',
 
 # Durations
-'duration-seconds'   => '$1 {{PLURAL:$1|Ṥaniye|Ṥaniyat}}',
-'duration-minutes'   => '$1 {{PLURAL:$1|Qaṫınto|Qaṫınoṭo}}',
-'duration-hours'     => '$1 {{PLURAL:$1|Sa³aye|Sa³ayat}}',
-'duration-days'      => '$1 {{PLURAL:$1|Yawmo|Yawme}}',
-'duration-weeks'     => '$1 {{PLURAL:$1|Şabṭo|Şabe}}',
-'duration-years'     => '$1 {{PLURAL:$1|Şato|Şnaye}}',
-'duration-decades'   => '$1 {{PLURAL:$1|decade|decades}}',
+'duration-seconds' => '$1 {{PLURAL:$1|Ṥaniye|Ṥaniyat}}',
+'duration-minutes' => '$1 {{PLURAL:$1|Qaṫınto|Qaṫınoṭo}}',
+'duration-hours' => '$1 {{PLURAL:$1|Sa³aye|Sa³ayat}}',
+'duration-days' => '$1 {{PLURAL:$1|Yawmo|Yawme}}',
+'duration-weeks' => '$1 {{PLURAL:$1|Şabṭo|Şabe}}',
+'duration-years' => '$1 {{PLURAL:$1|Şato|Şnaye}}',
+'duration-decades' => '$1 {{PLURAL:$1|decade|decades}}',
 'duration-centuries' => '$1 {{PLURAL:$1|Doro|Dore}}',
 
 );
index bcf74ec..c4b7190 100644 (file)
@@ -172,38 +172,38 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#ЮНӘЛТҮ', '#перенаправление', '#перенапр', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__БАШЛЫКЮК__', '__БЕЗ_ОГЛАВЛЕНИЯ__', '__БЕЗ_ОГЛ__', '__NOTOC__' ),
-       'forcetoc'                => array( '0', '__ETTIQ__', '__ОБЯЗ_ОГЛ__', '__ОБЯЗАТЕЛЬНОЕ_ОГЛАВЛЕНИЕ__', '__FORCETOC__' ),
-       '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', 'уңда', 'справа', '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__' ),
+       'redirect'                  => array( '0', '#ЮНӘЛТҮ', '#перенаправление', '#перенапр', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__БАШЛЫКЮК__', '__БЕЗ_ОГЛАВЛЕНИЯ__', '__БЕЗ_ОГЛ__', '__NOTOC__' ),
+       'forcetoc'                  => array( '0', '__ETTIQ__', '__ОБЯЗ_ОГЛ__', '__ОБЯЗАТЕЛЬНОЕ_ОГЛАВЛЕНИЕ__', '__FORCETOC__' ),
+       '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', 'уңда', 'справа', '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';
index c7681f0..db0507f 100644 (file)
@@ -61,30 +61,30 @@ $dateFormats = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#YÜNÄLTÜ', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__ETYUQ__', '__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', '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' ),
-       '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' ),
-       'ns'                      => array( '0', 'İA:', 'NS:' ),
-       'localurl'                => array( '0', 'URINLIURL:', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'URINLIURLE:', 'LOCALURLE:' ),
+       'redirect'                  => array( '0', '#YÜNÄLTÜ', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__ETYUQ__', '__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', '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' ),
+       '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' ),
+       'ns'                        => array( '0', 'İA:', 'NS:' ),
+       'localurl'                  => array( '0', 'URINLIURL:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'URINLIURLE:', 'LOCALURLE:' ),
 );
 
 $fallback8bitEncoding = "windows-1254";
index 651f21a..e1213f4 100644 (file)
@@ -102,7 +102,7 @@ $bookstoreList = array(
 );
 
 $specialPageAliases = array(
-       'Activeusers'               => array( 'Активні_учасники' ),
+       'Activeusers'               => array( 'Активні_дописувачі' ),
        'Allmessages'               => array( 'Системні_повідомлення' ),
        'Allpages'                  => array( 'Усі_сторінки' ),
        'Ancientpages'              => array( 'Давні_сторінки' ),
@@ -123,14 +123,14 @@ $specialPageAliases = array(
        'DeletedContributions'      => array( 'Вилучений_внесок' ),
        'Disambiguations'           => array( 'Неоднозначні_посилання' ),
        'DoubleRedirects'           => array( 'Подвійні_перенаправлення' ),
-       'EditWatchlist'             => array( 'Ð\9fÑ\80авити_список_спостереження' ),
+       'EditWatchlist'             => array( 'РедагÑ\83вати_список_спостереження' ),
        'Emailuser'                 => array( 'Лист_користувачеві' ),
        'Export'                    => array( 'Експорт' ),
-       'Fewestrevisions'           => array( 'Ð\9dайменÑ\88Ñ\96_пеÑ\80евÑ\96Ñ\80ки' ),
+       'Fewestrevisions'           => array( 'Ð\9dайменÑ\88Ñ\80едагованÑ\96' ),
        'FileDuplicateSearch'       => array( 'Пошук_дублікатів_файлів' ),
        'Filepath'                  => array( 'Шлях_до_файлу' ),
        'Import'                    => array( 'Імпорт' ),
-       'Invalidateemail'           => array( 'Нечинна_e-mail' ),
+       'Invalidateemail'           => array( 'Неперевірена_email-адреса' ),
        'BlockList'                 => array( 'Список_блокувань', 'Блокування', 'Блокування_IP-адрес' ),
        'LinkSearch'                => array( 'Пошук_посилань' ),
        'Listadmins'                => array( 'Список_адміністраторів' ),
@@ -144,9 +144,9 @@ $specialPageAliases = array(
        'Lonelypages'               => array( 'Ізольовані_сторінки' ),
        'Longpages'                 => array( 'Найдовші_сторінки' ),
        'MergeHistory'              => array( 'Об\'єднання_історії' ),
-       'MIMEsearch'                => array( 'Ð\9fоÑ\88Ñ\83к_по_MIME' ),
-       'Mostcategories'            => array( 'Ð\9dайкаÑ\82егоÑ\80изовÑ\83ванÑ\96Ñ\88і' ),
-       'Mostimages'                => array( 'Найбільш_використовувані_файли' ),
+       'MIMEsearch'                => array( 'Ð\9fоÑ\88Ñ\83к_за_MIME' ),
+       'Mostcategories'            => array( 'Ð\9dайбÑ\96лÑ\8cÑ\88_каÑ\82егоÑ\80изовані' ),
+       'Mostimages'                => array( 'Найуживаніші_файли' ),
        'Mostlinkedcategories'      => array( 'Найуживаніші_категорії' ),
        'Mostlinkedtemplates'       => array( 'Найуживаніші_шаблони' ),
        'Mostrevisions'             => array( 'Найбільш_редаговані' ),
@@ -167,7 +167,7 @@ $specialPageAliases = array(
        'Randomredirect'            => array( 'Випадкове_перенаправлення' ),
        'Recentchanges'             => array( 'Нові_редагування' ),
        'Recentchangeslinked'       => array( 'Пов\'язані_редагування' ),
-       'Revisiondelete'            => array( 'Ð\9fеÑ\80евÑ\96Ñ\80иÑ\82и_видалення' ),
+       'Revisiondelete'            => array( 'Ð\92илÑ\83Ñ\87иÑ\82и_Ñ\80едагÑ\83вання' ),
        'Search'                    => array( 'Пошук' ),
        'Shortpages'                => array( 'Короткі_сторінки' ),
        'Specialpages'              => array( 'Спеціальні_сторінки' ),
@@ -181,8 +181,8 @@ $specialPageAliases = array(
        'Undelete'                  => array( 'Відновити' ),
        'Unlockdb'                  => array( 'Розблокувати_базу_даних' ),
        'Unusedcategories'          => array( 'Порожні_категорії' ),
-       'Unusedimages'              => array( 'Ð\9dевикоÑ\80иÑ\81Ñ\82овÑ\83ванÑ\96\84айли' ),
-       'Unusedtemplates'           => array( 'Ð\9dевикоÑ\80иÑ\81Ñ\82овÑ\83ванÑ\96\88аблони' ),
+       'Unusedimages'              => array( 'Невикористані_файли' ),
+       'Unusedtemplates'           => array( 'Невикористані_шаблони' ),
        'Unwatchedpages'            => array( 'Неспостережувані' ),
        'Upload'                    => array( 'Завантаження' ),
        'UploadStash'               => array( 'Приховане_завантаження' ),
@@ -200,148 +200,153 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#ПЕРЕНАПРАВЛЕННЯ', '#ПЕРЕНАПР', '#перенапр', '#перенаправление', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__БЕЗ_ЗМІСТУ__', '__БЕЗ_ОГЛАВЛЕНИЯ__', '__БЕЗ_ОГЛ__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__БЕЗ_ГАЛЕРЕЇ__', '__БЕЗ_ГАЛЕРЕИ__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__ОБОВ_ЗМІСТ__', '__ОБЯЗАТЕЛЬНОЕ_ОГЛАВЛЕНИЕ__', '__ОБЯЗ_ОГЛ__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__ЗМІСТ__', '__ОГЛАВЛЕНИЕ__', '__ОГЛ__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__БЕЗ_РЕДАГУВ_РОЗДІЛУ__', '__БЕЗ_РЕДАКТИРОВАНИЯ_РАЗДЕЛА__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '__БЕЗ_ЗАГОЛОВКУ__', '__БЕЗ_ЗАГОЛОВКА__', '__NOHEADER__' ),
-       'currentmonth'            => array( '1', 'ПОТОЧНИЙ_МІСЯЦЬ', 'ПОТОЧНИЙ_МІСЯЦЬ_2', 'ТЕКУЩИЙ_МЕСЯЦ', 'ТЕКУЩИЙ_МЕСЯЦ_2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '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', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'НАЗВА_ПОТОЧНОГО_ДНЯ', 'НАЗВАНИЕ_ТЕКУЩЕГО_ДНЯ', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'ПОТОЧНИЙ_РІК', 'ТЕКУЩИЙ_ГОД', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'ПОТОЧНИЙ_ЧАС', 'ТЕКУЩЕЕ_ВРЕМЯ', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'ПОТОЧНА_ГОДИНА', 'ТЕКУЩИЙ_ЧАС', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'ЛОКАЛЬНИЙ_МІСЯЦЬ', 'ЛОКАЛЬНИЙ_МІСЯЦЬ_2', 'МЕСТНЫЙ_МЕСЯЦ', 'МЕСТНЫЙ_МЕСЯЦ_2', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', 'ЛОКАЛЬНИЙ_МІСЯЦЬ_1', 'МЕСТНЫЙ_МЕСЯЦ_1', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'НАЗВА_ЛОКАЛЬНОГО_МІСЯЦЯ', 'НАЗВАНИЕ_МЕСТНОГО_МЕСЯЦА', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'НАЗВА_ЛОКАЛЬНОГО_МІСЯЦЯ_РОД', 'НАЗВАНИЕ_МЕСТНОГО_МЕСЯЦА_РОД', 'LOCALMONTHNAMEGEN' ),
-       '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' ),
-       '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' ),
-       'pagename'                => array( '1', 'НАЗВА_СТОРІНКИ', 'НАЗВАНИЕ_СТРАНИЦЫ', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'НАЗВА_СТОРІНКИ_2', 'НАЗВАНИЕ_СТРАНИЦЫ_2', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'ПРОСТІР_НАЗВ', 'ПРОСТРАНСТВО_ИМЁН', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'ПРОСТІР_НАЗВ_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', 'ПОВНА_НАЗВА_СТОРІНКИ', 'ПОЛНОЕ_НАЗВАНИЕ_СТРАНИЦЫ', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'ПОВНА_НАЗВА_СТОРІНКИ_2', 'ПОЛНОЕ_НАЗВАНИЕ_СТРАНИЦЫ_2', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'НАЗВА_ПІДСТОРІНКИ', 'НАЗВАНИЕ_ПОДСТРАНИЦЫ', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'НАЗВА_ПІДСТОРІНКИ_2', 'НАЗВАНИЕ_ПОДСТРАНИЦЫ_2', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'ОСНОВА_НАЗВИ_ПІДСТОРІНКИ', 'ОСНОВА_НАЗВАНИЯ_СТРАНИЦЫ', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'ОСНОВА_НАЗВИ_ПІДСТОРІНКИ_2', 'ОСНОВА_НАЗВАНИЯ_СТРАНИЦЫ_2', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'НАЗВА_СТОРІНКИ_ОБГОВОРЕННЯ', 'НАЗВАНИЕ_СТРАНИЦЫ_ОБСУЖДЕНИЯ', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'НАЗВА_СТОРІНКИ_ОБГОВОРЕННЯ_2', 'НАЗВАНИЕ_СТРАНИЦЫ_ОБСУЖДЕНИЯ_2', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'НАЗВА_СТАТТІ', 'НАЗВАНИЕ_СТРАНИЦЫ_СТАТЬИ', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'subjectpagenamee'        => array( '1', 'НАЗВА_СТАТТІ_2', 'НАЗВАНИЕ_СТРАНИЦЫ_СТАТЬИ_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', 'мини=$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', 'страница=$1', 'страница $1', 'page=$1', 'page $1' ),
-       'img_upright'             => array( '1', 'зверхуправоруч', 'зверхуправоруч=$1', 'зверхуправоруч $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_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', 'НАЗВА_САЙТУ', 'НАЗВАНИЕ_САЙТА', 'SITENAME' ),
-       'ns'                      => array( '0', 'ПН:', 'ПИ:', 'NS:' ),
-       'nse'                     => array( '0', 'ПН_2:', 'ПИК:', 'NSE:' ),
-       'localurl'                => array( '0', 'ЛОКАЛЬНА_АДРЕСА:', 'ЛОКАЛЬНЫЙ_АДРЕС:', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'ЛОКАЛЬНА_АДРЕСА_2:', 'ЛОКАЛЬНЫЙ_АДРЕС_2:', 'LOCALURLE:' ),
-       'server'                  => array( '0', 'СЕРВЕР', 'SERVER' ),
-       'servername'              => array( '0', 'НАЗВА_СЕРВЕРА', 'НАЗВАНИЕ_СЕРВЕРА', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'ШЛЯХ_ДО_СКРИПТУ', 'ПУТЬ_К_СКРИПТУ', 'SCRIPTPATH' ),
-       'grammar'                 => array( '0', 'ВІДМІНОК:', 'ПАДЕЖ:', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'СТАТЬ:', 'ПОЛ:', 'GENDER:' ),
-       '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', 'ІД_ВЕРСІЇ', 'ИД_ВЕРСИИ', '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', 'ПОКАЗАТИ_ЗАГОЛОВОК', 'ПОКАЗАТЬ_ЗАГОЛОВОК', '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:' ),
-       '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:' ),
-       '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__' ),
-       'numberingroup'           => array( '1', 'КІЛЬКІСТЬ_У_ГРУПІ', 'ЧИСЛО_В_ГРУППЕ', 'NUMBERINGROUP', 'NUMINGROUP' ),
-       'staticredirect'          => array( '1', '__СТАТИЧНЕ_ПЕРЕНАПРАВЛЕННЯ__', '__СТАТИЧЕСКОЕ_ПЕРЕНАПРАВЛЕНИЕ__', '__STATICREDIRECT__' ),
-       'protectionlevel'         => array( '1', 'РІВЕНЬ_ЗАХИСТУ', 'УРОВЕНЬ_ЗАЩИТЫ', 'PROTECTIONLEVEL' ),
-       'formatdate'              => array( '0', 'форматдати', 'форматдаты', 'formatdate', 'dateformat' ),
+       'redirect'                  => array( '0', '#ПЕРЕНАПРАВЛЕННЯ', '#ПЕРЕНАПР', '#перенапр', '#перенаправление', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__БЕЗ_ЗМІСТУ__', '__БЕЗ_ОГЛАВЛЕНИЯ__', '__БЕЗ_ОГЛ__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__БЕЗ_ГАЛЕРЕЇ__', '__БЕЗ_ГАЛЕРЕИ__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__ОБОВ_ЗМІСТ__', '__ОБЯЗАТЕЛЬНОЕ_ОГЛАВЛЕНИЕ__', '__ОБЯЗ_ОГЛ__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__ЗМІСТ__', '__ОГЛАВЛЕНИЕ__', '__ОГЛ__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__БЕЗ_РЕДАГУВ_РОЗДІЛУ__', '__БЕЗ_РЕДАКТИРОВАНИЯ_РАЗДЕЛА__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '__БЕЗ_ЗАГОЛОВКУ__', '__БЕЗ_ЗАГОЛОВКА__', '__NOHEADER__' ),
+       'currentmonth'              => array( '1', 'ПОТОЧНИЙ_МІСЯЦЬ', 'ПОТОЧНИЙ_МІСЯЦЬ_2', 'ТЕКУЩИЙ_МЕСЯЦ', 'ТЕКУЩИЙ_МЕСЯЦ_2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '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', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'НАЗВА_ПОТОЧНОГО_ДНЯ', 'НАЗВАНИЕ_ТЕКУЩЕГО_ДНЯ', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'ПОТОЧНИЙ_РІК', 'ТЕКУЩИЙ_ГОД', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'ПОТОЧНИЙ_ЧАС', 'ТЕКУЩЕЕ_ВРЕМЯ', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'ПОТОЧНА_ГОДИНА', 'ТЕКУЩИЙ_ЧАС', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'ЛОКАЛЬНИЙ_МІСЯЦЬ', 'ЛОКАЛЬНИЙ_МІСЯЦЬ_2', 'МЕСТНЫЙ_МЕСЯЦ', 'МЕСТНЫЙ_МЕСЯЦ_2', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'ЛОКАЛЬНИЙ_МІСЯЦЬ_1', 'МЕСТНЫЙ_МЕСЯЦ_1', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'НАЗВА_ЛОКАЛЬНОГО_МІСЯЦЯ', 'НАЗВАНИЕ_МЕСТНОГО_МЕСЯЦА', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'НАЗВА_ЛОКАЛЬНОГО_МІСЯЦЯ_РОД', 'НАЗВАНИЕ_МЕСТНОГО_МЕСЯЦА_РОД', 'LOCALMONTHNAMEGEN' ),
+       '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' ),
+       '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' ),
+       'pagename'                  => array( '1', 'НАЗВА_СТОРІНКИ', 'НАЗВАНИЕ_СТРАНИЦЫ', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'НАЗВА_СТОРІНКИ_2', 'НАЗВАНИЕ_СТРАНИЦЫ_2', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'ПРОСТІР_НАЗВ', 'ПРОСТРАНСТВО_ИМЁН', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'ПРОСТІР_НАЗВ_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', 'ПОВНА_НАЗВА_СТОРІНКИ', 'ПОЛНОЕ_НАЗВАНИЕ_СТРАНИЦЫ', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'ПОВНА_НАЗВА_СТОРІНКИ_2', 'ПОЛНОЕ_НАЗВАНИЕ_СТРАНИЦЫ_2', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'НАЗВА_ПІДСТОРІНКИ', 'НАЗВАНИЕ_ПОДСТРАНИЦЫ', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'НАЗВА_ПІДСТОРІНКИ_2', 'НАЗВАНИЕ_ПОДСТРАНИЦЫ_2', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'ОСНОВА_НАЗВИ_ПІДСТОРІНКИ', 'ОСНОВА_НАЗВАНИЯ_СТРАНИЦЫ', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'ОСНОВА_НАЗВИ_ПІДСТОРІНКИ_2', 'ОСНОВА_НАЗВАНИЯ_СТРАНИЦЫ_2', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'НАЗВА_СТОРІНКИ_ОБГОВОРЕННЯ', 'НАЗВАНИЕ_СТРАНИЦЫ_ОБСУЖДЕНИЯ', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'НАЗВА_СТОРІНКИ_ОБГОВОРЕННЯ_2', 'НАЗВАНИЕ_СТРАНИЦЫ_ОБСУЖДЕНИЯ_2', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'НАЗВА_СТАТТІ', 'НАЗВАНИЕ_СТРАНИЦЫ_СТАТЬИ', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'          => array( '1', 'НАЗВА_СТАТТІ_2', 'НАЗВАНИЕ_СТРАНИЦЫ_СТАТЬИ_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', 'мини=$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', 'страница=$1', 'страница $1', 'страница $1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', 'зверхуправоруч', 'зверхуправоруч=$1', 'зверхуправоруч $1', 'сверхусправа', 'сверхусправа=$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_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', 'НАЗВА_САЙТУ', 'НАЗВАНИЕ_САЙТА', 'SITENAME' ),
+       'ns'                        => array( '0', 'ПН:', 'ПИ:', 'NS:' ),
+       'nse'                       => array( '0', 'ПН_2:', 'ПИК:', 'NSE:' ),
+       'localurl'                  => array( '0', 'ЛОКАЛЬНА_АДРЕСА:', 'ЛОКАЛЬНЫЙ_АДРЕС:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'ЛОКАЛЬНА_АДРЕСА_2:', 'ЛОКАЛЬНЫЙ_АДРЕС_2:', '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:' ),
+       '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', 'ІД_ВЕРСІЇ', 'ИД_ВЕРСИИ', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'ДЕНЬ_ВЕРСІЇ', 'ДЕНЬ_ВЕРСИИ', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'ДЕНЬ_ВЕРСІЇ_2', 'ДЕНЬ_ВЕРСИИ_2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'МІСЯЦЬ_ВЕРСІЇ', 'МЕСЯЦ_ВЕРСИИ', 'REVISIONMONTH' ),
+       'revisionmonth1'            => array( '1', 'МІСЯЦЬ_ВЕРСІЇ_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', 'ПОВНА_АДРЕСА_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', 'ПОКАЗАТИ_ЗАГОЛОВОК', 'ПОКАЗАТЬ_ЗАГОЛОВОК', '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:' ),
+       '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:' ),
+       '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__' ),
+       'numberingroup'             => array( '1', 'КІЛЬКІСТЬ_У_ГРУПІ', 'ЧИСЛО_В_ГРУППЕ', 'NUMBERINGROUP', 'NUMINGROUP' ),
+       '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';
@@ -615,6 +620,8 @@ $1',
 'youhavenewmessages' => 'Ви отримали $1 ($2).',
 'newmessageslink' => 'нові повідомлення',
 'newmessagesdifflink' => 'остання зміна',
+'newmessageslinkplural' => '{{PLURAL:$1|нове повідомлення|нові повідомлення|нових повідомлень}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|остання зміна|останні зміни|останніх змін}}',
 'youhavenewmessagesmulti' => 'Ви отримали нові повідомлення на $1',
 'editsection' => 'ред.',
 'editsection-brackets' => '[$1]',
@@ -1019,7 +1026,7 @@ $2
 'userpage-userdoesnotexist-view' => 'Обліковий запис користувача „$1“ не зареєстровано.',
 'blocked-notice-logextract' => 'Цей користувач наразі заблокований.
 Останній запис у журналі блокувань такий:',
-'clearyourcache' => "'''Увага:''' Ð\9fÑ\96Ñ\81лÑ\8f Ð·Ð±ÐµÑ\80еженнÑ\8f Ñ\81лÑ\96д Ð¾Ñ\87иÑ\81Ñ\82иÑ\82и ÐºÐµÑ\88 Ð±Ñ\80аÑ\83зеÑ\80а, щоб побачити зміни.
+'clearyourcache' => "'''Увага:''' Ð\9fÑ\96Ñ\81лÑ\8f Ð·Ð±ÐµÑ\80еженнÑ\8f Ñ\81лÑ\96д Ð¾Ñ\87иÑ\81Ñ\82иÑ\82и ÐºÐµÑ\88 Ð¾Ð³Ð»Ñ\8fдаÑ\87а, щоб побачити зміни.
 * '''Firefox / Safari:''' тримайте ''Shift'', коли натискаєте ''Оновити'', або натисніть ''Ctrl-F5'' чи ''Ctrl-Shift-R'' (''⌘-R'' на Apple Mac)
 * '''Google Chrome:''' натисніть ''Ctrl-Shift-R'' (''⌘-Shift-R'' на Apple Mac)
 * '''Internet Explorer:''' тримайте ''Ctrl'', коли натискаєте ''Оновити'', або натисніть ''Ctrl-F5''
@@ -3034,7 +3041,7 @@ $1',
 'tooltip-ca-move' => 'Перейменувати цю сторінку',
 'tooltip-ca-watch' => 'Додати цю сторінку до вашого списку спостереження',
 'tooltip-ca-unwatch' => 'Вилучити цю сторінку з вашого списку спостереження',
-'tooltip-search' => 'Шукати у {{GRAMMAR:locative|{{SITENAME}}}}',
+'tooltip-search' => 'Шукати',
 'tooltip-search-go' => 'Перейти до сторінки, що має точно таку назву (якщо вона існує)',
 'tooltip-search-fulltext' => 'Знайти сторінки, що містять зазначений текст',
 'tooltip-p-logo' => 'Головна сторінка',
@@ -3155,11 +3162,11 @@ The wiki server can't provide data in a format your client can read.",
 
 # Info page
 'pageinfo-title' => 'Інформація про " $1 "',
-'pageinfo-header-edits' => 'РедагÑ\83ваннÑ\8f',
+'pageinfo-header-edits' => 'Ð\86Ñ\81Ñ\82оÑ\80Ñ\96Ñ\8f Ñ\80едагÑ\83ванÑ\8c',
 'pageinfo-views' => 'Кількість переглядів',
 'pageinfo-watchers' => 'Кількість спостерігачів',
-'pageinfo-edits' => 'Ð\9aількість редагувань',
-'pageinfo-authors' => 'Ð\9aількість унікальних авторів',
+'pageinfo-edits' => 'Ð\97агалÑ\8cна Ðºількість редагувань',
+'pageinfo-authors' => 'Ð\97агалÑ\8cна Ðºількість унікальних авторів',
 
 # Skin names
 'skinname-standard' => 'Стандартне',
index bf9373e..b726e80 100644 (file)
@@ -17,6 +17,7 @@
  * @author Wisesabre
  * @author ZxxZxxZ
  * @author לערי ריינהארט
+ * @author زكريا
  * @author سمرقندی
  * @author محبوب عالم
  */
@@ -1002,6 +1003,7 @@ HTML tags جانچئے.',
 'uploadlogpagetext' => 'درج ذیل میں حالیہ زبراثقال (اپ لوڈ) کی گئی املاف (فائلوں) کی فہرست دی گئی ہے۔',
 'filedesc' => 'خلاصہ',
 'fileuploadsummary' => 'خلاصہ :',
+'filesource' => 'ذرائع',
 'uploadedfiles' => 'زبراثقال ملف (فائل اپ لوڈ)',
 'ignorewarning' => 'انتباہ نظرانداز کرتے ہوۓ بہرصورت ملف (فائل) کو محفوظ کرلیا جاۓ۔',
 'ignorewarnings' => 'ہر انتباہ نظرانداز کردیا جاۓ۔',
@@ -1406,6 +1408,34 @@ Also see [[Special:WantedCategories|wanted categories]].',
 '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' => 'شهریور',
+'iranian-calendar-m7' => 'مهر',
+'iranian-calendar-m8' => 'آبان',
+'iranian-calendar-m9' => 'آذر',
+'iranian-calendar-m10' => 'دی',
+'iranian-calendar-m11' => 'بهمن',
+'iranian-calendar-m12' => 'اسفند',
+
+# Hijri month names
+'hijri-calendar-m1' => 'محرم',
+'hijri-calendar-m2' => 'صفر',
+'hijri-calendar-m3' => 'ربیع الاول',
+'hijri-calendar-m4' => 'ربیع الثانی',
+'hijri-calendar-m5' => 'جمادی الاول',
+'hijri-calendar-m6' => 'جمادی الثانی',
+'hijri-calendar-m7' => 'رجب',
+'hijri-calendar-m8' => 'شعبان',
+'hijri-calendar-m9' => 'رمضان',
+'hijri-calendar-m10' => 'شوال',
+'hijri-calendar-m11' => 'ذوالقعدہ',
+'hijri-calendar-m12' => 'ذوالحجہ',
+
 # Special:Version
 'version' => 'ورژن',
 
index b8b41a4..5a924c6 100644 (file)
@@ -23,7 +23,7 @@
  */
 
 $magicWords = array(
-       'redirect'                => array( '0', '#VARDA', '#RINVIA', '#RINVIO', '#RIMANDO', '#REDIRECT' ),
+       'redirect'                  => array( '0', '#VARDA', '#RINVIA', '#RINVIO', '#RIMANDO', '#REDIRECT' ),
 );
 
 $fallback = 'it';
index 5ffdd28..6e7d406 100644 (file)
@@ -70,20 +70,20 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'img_right'               => array( '1', 'oiged', 'paremal', 'right' ),
-       'img_left'                => array( '1', 'hura', 'vasakul', 'left' ),
-       'img_none'                => array( '1', 'eile', 'tühi', 'none' ),
-       'img_width'               => array( '1', '$1piks', '$1px' ),
-       'img_border'              => array( '1', 'röun', 'ääris', 'border' ),
-       'img_top'                 => array( '1', 'üläh', 'top' ),
-       'img_middle'              => array( '1', 'kesk', 'middle' ),
-       'img_bottom'              => array( '1', 'ala', 'bottom' ),
-       'sitename'                => array( '1', 'SAITANNIMI', 'KOHANIMI', 'SITENAME' ),
-       'grammar'                 => array( '0', 'GRAMMATIK:', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'SUGU:', 'GENDER:' ),
-       'plural'                  => array( '0', 'ÄILUGU:', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'TÄUZ\'URL:', 'KOGUURL:', 'FULLURL:' ),
-       'index'                   => array( '1', '__INDEKS__', 'INDEKSIGA', '__INDEX__' ),
+       'img_right'                 => array( '1', 'oiged', 'paremal', 'right' ),
+       'img_left'                  => array( '1', 'hura', 'vasakul', 'left' ),
+       'img_none'                  => array( '1', 'eile', 'tühi', 'none' ),
+       'img_width'                 => array( '1', '$1piks', '$1px' ),
+       'img_border'                => array( '1', 'röun', 'ääris', 'border' ),
+       'img_top'                   => array( '1', 'üläh', 'top' ),
+       'img_middle'                => array( '1', 'kesk', 'middle' ),
+       'img_bottom'                => array( '1', 'ala', 'bottom' ),
+       'sitename'                  => array( '1', 'SAITANNIMI', 'KOHANIMI', 'SITENAME' ),
+       'grammar'                   => array( '0', 'GRAMMATIK:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'SUGU:', 'GENDER:' ),
+       'plural'                    => array( '0', 'ÄILUGU:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'TÄUZ\'URL:', 'KOGUURL:', 'FULLURL:' ),
+       'index'                     => array( '1', '__INDEKS__', 'INDEKSIGA', '__INDEX__' ),
 );
 
 $messages = array(
index fe75596..632f2fa 100644 (file)
@@ -157,100 +157,102 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       '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', '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' ),
-       'currentday'              => array( '1', 'NGÀYNÀY', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'NGÀYNÀY2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'TÊNNGÀYNÀY', 'CURRENTDAYNAME' ),
-       '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' ),
-       'localyear'               => array( '1', 'NĂMĐỊAPHƯƠNG', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'GIỜĐỊAPHƯƠNG', 'LOCALTIME' ),
-       'numberofpages'           => array( '1', 'SỐTRANG', 'NUMBEROFPAGES' ),
-       '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:' ),
-       'img_thumbnail'           => array( '1', 'nhỏ', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'nhỏ=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'phải', 'right' ),
-       'img_left'                => array( '1', 'trái', 'left' ),
-       'img_none'                => array( '1', 'không', 'none' ),
-       'img_center'              => array( '1', 'giữa', 'center', 'centre' ),
-       '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' ),
-       '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:' ),
-       'numberofadmins'          => array( '1', 'SỐQUẢNLÝ', 'NUMBEROFADMINS' ),
-       'formatnum'               => array( '0', 'PHÂNCHIASỐ', 'FORMATNUM' ),
-       'defaultsort'             => array( '1', 'XẾPMẶCĐỊNH:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'filepath'                => array( '0', 'ĐƯỜNGDẪNTẬPTIN', 'FILEPATH:' ),
-       'tag'                     => array( '0', 'thẻ', 'tag' ),
-       'hiddencat'               => array( '1', '__THỂLOẠIẨN__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'CỠTHỂLOẠI', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'CỠTRANG', 'PAGESIZE' ),
-       'numberingroup'           => array( '1', 'CỠNHÓM', 'NUMBERINGROUP', 'NUMINGROUP' ),
-       'staticredirect'          => array( '1', '__ĐỔIHƯỚNGNHẤTĐỊNH__', '__STATICREDIRECT__' ),
+       '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', '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' ),
+       'currentday'                => array( '1', 'NGÀYNÀY', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'NGÀYNÀY2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'TÊNNGÀYNÀY', 'CURRENTDAYNAME' ),
+       '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' ),
+       'localyear'                 => array( '1', 'NĂMĐỊAPHƯƠNG', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'GIỜĐỊAPHƯƠNG', 'LOCALTIME' ),
+       'numberofpages'             => array( '1', 'SỐTRANG', 'NUMBEROFPAGES' ),
+       '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:' ),
+       'img_thumbnail'             => array( '1', 'nhỏ', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'nhỏ=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'phải', 'right' ),
+       'img_left'                  => array( '1', 'trái', 'left' ),
+       'img_none'                  => array( '1', 'không', 'none' ),
+       'img_center'                => array( '1', 'giữa', 'center', 'centre' ),
+       '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' ),
+       '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:' ),
+       'displaytitle'              => array( '1', 'TÊNHIỂNTHỊ', 'DISPLAYTITLE' ),
+       '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:' ),
+       'numberofadmins'            => array( '1', 'SỐQUẢNLÝ', 'NUMBEROFADMINS' ),
+       'formatnum'                 => array( '0', 'PHÂNCHIASỐ', 'FORMATNUM' ),
+       'defaultsort'               => array( '1', 'XẾPMẶCĐỊNH:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'filepath'                  => array( '0', 'ĐƯỜNGDẪNTẬPTIN', 'FILEPATH:' ),
+       'tag'                       => array( '0', 'thẻ', 'tag' ),
+       'hiddencat'                 => array( '1', '__THỂLOẠIẨN__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'CỠTHỂLOẠI', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'CỠTRANG', 'PAGESIZE' ),
+       'numberingroup'             => array( '1', 'CỠNHÓM', 'NUMBERINGROUP', 'NUMINGROUP' ),
+       'staticredirect'            => array( '1', '__ĐỔIHƯỚNGNHẤTĐỊNH__', '__STATICREDIRECT__' ),
+       'url_path'                  => array( '0', 'ĐƯỜNGDẪN', 'PATH' ),
 );
 
 $datePreferences = array(
@@ -1968,6 +1970,7 @@ Có lẽ bạn muốn miêu tả nó trên [$2 trang miêu tả tập tin] tạ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 */',
+'upload-disallowed-here' => 'Rất tiếc, bạn không có thể ghi đè lên hình ảnh này.',
 
 # File reversion
 'filerevert' => 'Lùi lại phiên bản của $1',
@@ -3083,6 +3086,8 @@ Lưu nó vào máy tính của bạn rồi tải nó lên đây.',
 'pageinfo-length' => 'Chiều dài của trang (byte)',
 'pageinfo-article-id' => 'Mã số trang',
 'pageinfo-robot-policy' => 'Trạng thái công cụ tìm kiếm',
+'pageinfo-robot-index' => 'Có thể ghi chỉ mục',
+'pageinfo-robot-noindex' => 'Không thể ghi chỉ mục',
 'pageinfo-views' => 'Số lần xem',
 'pageinfo-watchers' => 'Số người theo dõi trang',
 'pageinfo-redirects-name' => 'Số trang đổi hướng đến trang này',
@@ -3097,10 +3102,10 @@ Lưu nó vào máy tính của bạn rồi tải nó lên đây.',
 'pageinfo-authors' => 'Tổng số tác giả riêng',
 'pageinfo-recent-edits' => 'Số lần sửa đổi gần đây (trong $1 qua)',
 'pageinfo-recent-authors' => 'Số người dùng sửa đổi gần đây',
-'pageinfo-restriction' => 'Mức khóa trang ($1)',
-'pageinfo-magic-words' => 'Số từ thần chú ($1)',
-'pageinfo-hidden-categories' => 'Số thể loại ẩn ($1)',
-'pageinfo-templates' => 'Số bản mẫu được nhúng ($1)',
+'pageinfo-restriction' => 'Mức khóa trang (<code>{{lcfirst:$1}}</code>)',
+'pageinfo-magic-words' => 'Từ thần chú ($1)',
+'pageinfo-hidden-categories' => 'Thể loại ẩn ($1)',
+'pageinfo-templates' => 'Bản mẫu được nhúng ($1)',
 
 # Skin names
 'skinname-standard' => 'Cổ điển',
@@ -3147,12 +3152,14 @@ $1',
 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:<br />''(trên trang miêu tả tập tin)''",
 'thumbsize' => 'Cỡ hình thu nhỏ:',
+'widthheight' => '$1×$2',
 'widthheightpage' => '$1 × $2, $3 {{PLURAL:$3|trang|trang}}',
 '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-info-size-pages' => '$1×$2 điểm ảnh, kích thước tập tin: $3, kiểu MIME: $4, $5 trang',
 '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-animated' => 'tập tin hình động 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-preview' => 'Kích thước của ảnh xem thử: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Độ phân giải|Các độ phân giải}} khác: $1.',
@@ -3162,6 +3169,8 @@ Nếu thực thi nó máy tính của bạn có thể bị tiếm quyền.",
 'file-info-png-looped' => 'có lặp',
 'file-info-png-repeat' => 'chơi $1 lần',
 'file-info-png-frames' => '$1 khung ảnh',
+'file-no-thumb-animation' => "'''Lưu ý: Do hạn chế kỹ thuật, các hình nhỏ của tập tin này sẽ không phải là hình động.'''",
+'file-no-thumb-animation-gif' => "'''Lưu ý: Do hạn chế kỹ thuật, các hình nhỏ của những hình GIF có độ phân giải cao, chẳng hạn tập tin này, sẽ không phải là hình động.'''",
 
 # Special:NewFiles
 'newimages' => 'Trang trưng bày hình ảnh mới',
@@ -3176,6 +3185,7 @@ Nếu thực thi nó máy tính của bạn có thể bị tiếm quyền.",
 'sp-newimages-showfrom' => 'Trưng bày những tập tin mới, bắt đầu từ lúc $2, ngày $1',
 
 # Video information, used by Language::formatTimePeriod() to format lengths in the above messages
+'video-dims' => '$1, $2×$3',
 'seconds-abbrev' => '$1s',
 'minutes-abbrev' => '$1m',
 'hours-abbrev' => '$1h',
@@ -3752,6 +3762,7 @@ Xin hãy xác nhận bạn thực sự muốn tạo lại trang này.",
 'confirm-unwatch-top' => 'Bạn có muốn gỡ trang này khỏi danh sách theo dõi của bạn?',
 
 # Separators for various lists, etc.
+'autocomment-prefix' => '–&#32;',
 'ellipsis' => '…',
 
 # Multipage image navigation
@@ -3781,6 +3792,17 @@ Xin hãy xác nhận bạn thực sự muốn tạo lại trang này.",
 # Size units
 'size-kilobytes' => '$1 kB',
 
+# Bitrate units
+'bitrate-bits' => '$1 bps',
+'bitrate-kilobits' => '$1 kbps',
+'bitrate-megabits' => '$1 Mbps',
+'bitrate-gigabits' => '$1 Gbps',
+'bitrate-terabits' => '$1 Tbps',
+'bitrate-petabits' => '$1 Pbps',
+'bitrate-exabits' => '$1 Ebps',
+'bitrate-zetabits' => '$1 Zbps',
+'bitrate-yottabits' => '$1 Ybps',
+
 # Live preview
 'livepreview-loading' => 'Đang tải…',
 'livepreview-ready' => 'Đang tải… Xong!',
@@ -3902,6 +3924,8 @@ hoặc [//www.gnu.org/licenses/old-licenses/gpl-2.0.html đọc nó trực tuy
 'version-entrypoints' => 'Các URL lối vào',
 'version-entrypoints-header-entrypoint' => 'Lối vào',
 'version-entrypoints-header-url' => 'URL',
+'version-entrypoints-articlepath' => '[https://www.mediawiki.org/wiki/Manual:$wgArticlePath?uselang=vi Đường dẫn bài]',
+'version-entrypoints-scriptpath' => '[https://www.mediawiki.org/wiki/Manual:$wgScriptPath?uselang=vi Đường dẫn kịch bản]',
 
 # Special:FilePath
 'filepath' => 'Đường dẫn tập tin',
index 830d17d..a485807 100644 (file)
@@ -38,7 +38,7 @@ $namespaceNames = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#saadaq', '#suuna', '#REDIRECT' ),
+       'redirect'                  => array( '0', '#saadaq', '#suuna', '#REDIRECT' ),
 );
 
 $messages = array(
index ba804e7..adeb032 100644 (file)
@@ -59,11 +59,17 @@ $specialPageAliases = array(
        'Allpages'                  => array( 'Totes_les_pådjes' ),
        'Block'                     => array( 'Bloker', 'Blocaedje' ),
        'Categories'                => array( 'Categoreyes' ),
+       'Listusers'                 => array( 'Djivêye_des_uzeus' ),
+       'Log'                       => array( 'Djournå', 'Djournås' ),
        'Preferences'               => array( 'Preferinces' ),
        'Prefixindex'               => array( 'Indecse_pa_betchete' ),
        'Search'                    => array( 'Cweri' ),
        'Specialpages'              => array( 'Pådjes_sipeciåles' ),
        'Statistics'                => array( 'Sitatistikes' ),
+       'Undelete'                  => array( 'Rapexhî' ),
+       'Upload'                    => array( 'Eberweter', 'Eberwetaedje' ),
+       'Userlogin'                 => array( 'Elodjaedje' ),
+       'Userlogout'                => array( 'Dislodjaedje' ),
        'Version'                   => array( 'Modêye' ),
        'Watchlist'                 => array( 'Pådjes_shuvowes' ),
 );
index f28a7af..0f1744c 100644 (file)
@@ -141,43 +141,43 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#ווייטערפירן', '#הפניה', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__קיין_אינהאלט_טאבעלע__', '__ללא_תוכן_עניינים__', '__ללא_תוכן__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__קיין_גאלעריע__', '__ללא_גלריה__', '__NOGALLERY__' ),
-       'toc'                     => array( '0', '__אינהאלט__', '__תוכן_עניינים__', '__תוכן__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__נישט_רעדאקטירן__', '__ללא_עריכה__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '__קיינקעפל__', '__ללא_כותרת__', '__NOHEADER__' ),
-       'currentday'              => array( '1', 'לויפיקער_טאג', 'יום נוכחי', 'CURRENTDAY' ),
-       'numberofpages'           => array( '1', 'צאל_בלעטער', 'מספר דפים כולל', 'מספר דפים', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'צאל_ארטיקלען', 'מספר ערכים', 'NUMBEROFARTICLES' ),
-       'pagename'                => array( '1', 'בלאטנאמען', 'שם הדף', 'PAGENAME' ),
-       'namespace'               => array( '1', 'נאמענטייל', 'מרחב השם', 'NAMESPACE' ),
-       'fullpagename'            => array( '1', 'פולבלאטנאמען', 'שם הדף המלא', 'FULLPAGENAME' ),
-       'subpagename'             => array( '1', 'אונטערבלאטנאמען', 'שם דף המשנה', 'SUBPAGENAME' ),
-       'talkpagename'            => array( '1', 'רעדנבלאטנאמען', 'שם דף השיחה', 'TALKPAGENAME' ),
-       'subst'                   => array( '0', 'ס:', 'SUBST:' ),
-       'img_thumbnail'           => array( '1', 'קליין', 'ממוזער', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'קליין=$1', 'ממוזער=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'רעכטס', 'ימין', 'right' ),
-       'img_left'                => array( '1', 'לינקס', 'שמאל', 'left' ),
-       '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:' ),
-       'raw'                     => array( '0', 'רוי:', 'ללא עיבוד:', 'RAW:' ),
-       'displaytitle'            => array( '1', 'ווייזן_קעפל', 'כותרת תצוגה', 'DISPLAYTITLE' ),
-       'language'                => array( '0', '#שפראך:', '#שפה:', '#LANGUAGE:' ),
-       'special'                 => array( '0', 'באזונדער', 'מיוחד', 'special' ),
-       'defaultsort'             => array( '1', 'גרונטסארטיר:', 'מיון רגיל:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'hiddencat'               => array( '1', '__באהאלטענע_קאטעגאריע__', '__באהאלטענע_קאט__', '__קטגוריה_מוסתרת__', '__HIDDENCAT__' ),
-       'pagesize'                => array( '1', 'בלאטגרייס', 'גודל דף', 'PAGESIZE' ),
-       'url_wiki'                => array( '0', 'וויקי', 'ויקי', 'WIKI' ),
+       'redirect'                  => array( '0', '#ווייטערפירן', '#הפניה', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__קיין_אינהאלט_טאבעלע__', '__ללא_תוכן_עניינים__', '__ללא_תוכן__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__קיין_גאלעריע__', '__ללא_גלריה__', '__NOGALLERY__' ),
+       'toc'                       => array( '0', '__אינהאלט__', '__תוכן_עניינים__', '__תוכן__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__נישט_רעדאקטירן__', '__ללא_עריכה__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '__קיינקעפל__', '__ללא_כותרת__', '__NOHEADER__' ),
+       'currentday'                => array( '1', 'לויפיקער_טאג', 'יום נוכחי', 'CURRENTDAY' ),
+       'numberofpages'             => array( '1', 'צאל_בלעטער', 'מספר דפים כולל', 'מספר דפים', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'צאל_ארטיקלען', 'מספר ערכים', 'NUMBEROFARTICLES' ),
+       'pagename'                  => array( '1', 'בלאטנאמען', 'שם הדף', 'PAGENAME' ),
+       'namespace'                 => array( '1', 'נאמענטייל', 'מרחב השם', 'NAMESPACE' ),
+       'fullpagename'              => array( '1', 'פולבלאטנאמען', 'שם הדף המלא', 'FULLPAGENAME' ),
+       'subpagename'               => array( '1', 'אונטערבלאטנאמען', 'שם דף המשנה', 'SUBPAGENAME' ),
+       'talkpagename'              => array( '1', 'רעדנבלאטנאמען', 'שם דף השיחה', 'TALKPAGENAME' ),
+       'subst'                     => array( '0', 'ס:', 'SUBST:' ),
+       'img_thumbnail'             => array( '1', 'קליין', 'ממוזער', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'קליין=$1', 'ממוזער=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'רעכטס', 'ימין', 'right' ),
+       'img_left'                  => array( '1', 'לינקס', 'שמאל', 'left' ),
+       '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:' ),
+       'raw'                       => array( '0', 'רוי:', 'ללא עיבוד:', 'RAW:' ),
+       'displaytitle'              => array( '1', 'ווייזן_קעפל', 'כותרת תצוגה', 'DISPLAYTITLE' ),
+       'language'                  => array( '0', '#שפראך:', '#שפה:', '#LANGUAGE:' ),
+       'special'                   => array( '0', 'באזונדער', 'מיוחד', 'special' ),
+       'defaultsort'               => array( '1', 'גרונטסארטיר:', 'מיון רגיל:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'hiddencat'                 => array( '1', '__באהאלטענע_קאטעגאריע__', '__באהאלטענע_קאט__', '__קטגוריה_מוסתרת__', '__HIDDENCAT__' ),
+       'pagesize'                  => array( '1', 'בלאטגרייס', 'גודל דף', 'PAGESIZE' ),
+       'url_wiki'                  => array( '0', 'וויקי', 'ויקי', 'WIKI' ),
 );
 
 $messages = array(
@@ -378,7 +378,7 @@ $messages = array(
 'protect_change' => 'טוישן',
 'protectthispage' => 'באשיץ דעם בלאט',
 'unprotect' => 'ענדערונג באַשיצונג',
-'unprotectthispage' => '×¢× ×\93ער×\95× ×\92 באַשיצונג פון דעם בלאַט',
+'unprotectthispage' => '×¢× ×\93ער×\9f באַשיצונג פון דעם בלאַט',
 'newpage' => 'נייער בלאַט',
 'talkpage' => 'שמועסט איבער דעם בלאט',
 'talkpagelinktext' => 'שמועס',
@@ -855,7 +855,12 @@ $2
 'noarticletext-nopermission' => 'דערווײַל איז נישט פאַראַן קיין שום טעקסט אין דעם בלאַט.
 איר קענט [[Special:Search/{{PAGENAME}}| זוכן דעם בלאט טיטל]] אין אנדערע בלעטער,
 אדער <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} נאָכזוכן די רעלעוואנטע לאגביכער]</span>.',
-'userpage-userdoesnotexist' => 'באניצער קאנטע "<nowiki>$1</nowiki>" איז נישט אײַנגעשריבן. קוקט איבער צי איר ווילט שאפֿן/רעדאקטירן דעם בלאט.',
+'missing-revision' => 'די רעוויזיע #$1 פונעם בלאט "{{PAGENAME}}" עקזיסטירט נישט.
+
+דאס געשעט געוויינלעך פון פאלגן א פארעלטערטן היסטאריע לינק צו א בלאט וואס איז געווארן אויסגעמעקט.
+פרטים קען מען געפינען אינעם [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} אויסמעקונג לאגבוך].',
+'userpage-userdoesnotexist' => 'באניצער קאנטע "$1" איז נישט אײַנגעשריבן. 
+קוקט איבער צי איר ווילט שאפֿן/רעדאקטירן דעם בלאט.',
 'userpage-userdoesnotexist-view' => 'באניצער קאנטע "$1" איז נישט איינגעשריבן.',
 'blocked-notice-logextract' => 'דער באַניצער איז דערווייַל פֿאַרשפאַרט.
 די לעצטע בלאָקירן לאג אַקציע איז צוגעשטעלט אונטן:',
@@ -1624,15 +1629,19 @@ $1",
 אויב איר ווילט דאך אַרויפֿלאָדן אײַער טעקע, ביטע גיין צוריק און ניצן אַן אַנדער נאָמען. 
 [[File:$1|thumb|center|$1]]',
 'file-exists-duplicate' => 'די טעקע איז א דופליקאַט פון די פֿאלגנדע {{PLURAL:$1|טעקע|טעקעס}}:',
+'file-deleted-duplicate' => "א טעקע אידענטיש מיט דער טעקע ([[:$1]]) האט מען שוין אויסגעמעקט.
+איר זאלט קאנטראלירן דער טעקע'ס אויסמעקן היסטאריע איידער איר טוט ארויפלאדן פונדאסניי.",
 'uploadwarning' => 'אַרויפֿלאָדן וואָרענונג',
 'uploadwarning-text' => 'זײַט אַזוי גוט מאדיפֿיצירן די טעקע באַשרייבונג און פרובירט נאכאַמאָל.',
-'savefile' => '×\98עקע ×\90ױפֿ×\94×\99×\98×\9f',
+'savefile' => '×\90ױפֿ×\94×\99×\98×\9f ×\98עקע',
 'uploadedimage' => 'אַרױפֿגעלאָדן "[[$1]]"',
 'overwroteimage' => 'אַרויפֿגעלאָדן א נײַע ווערסיע פון "[[$1]]"',
 'uploaddisabled' => 'אַרויפֿלאָדן טעקעס מבוטל',
 'copyuploaddisabled' => 'ארויפלאדן דורך URL אומאקטיווירט',
-'uploadfromurl-queued' => 'אייער ארויפלאד איז אין דער רייע.',
-'uploaddisabledtext' => 'אַרויפֿלאָדן טעקעס נישט דערמעגלעכט אצינד.',
+'uploadfromurl-queued' => 'אייער ארויפֿלאד איז אין דער רייע.',
+'uploaddisabledtext' => 'אַרויפֿלאָדן טעקעס נישט דערמעגלעכט.',
+'php-uploaddisabledtext' => 'אַרויפֿלאָדן טעקעס נישט דערמעגלעכט אין PHP.
+זייט אזוי גוט בודק זיין די file_uploads שטעלונג.',
 'uploadscripted' => 'די טעקע האט א סקריפט אדער HTML קאד וואס קען ווערן פֿאלש אויסגעטייטשט דורך א בלעטערער',
 'uploadvirus' => 'די טעקע האָט אַ ווירוס! פרטים: <div dir="rtl">$1</div>',
 'upload-source' => 'מקור טעקע',
@@ -1643,6 +1652,8 @@ $1",
 'upload-description' => 'טעקע שילדערונג',
 'upload-options' => "אַרויפֿלאָדן ברירה'ס",
 'watchthisupload' => 'אויפֿפאַסן דעם בלאט',
+'filewasdeleted' => 'א טעקע מיט דעם נאמען האט מען שוין ארויפגעלאדן און דערנאך אויסגעמעקט.
+איר זאלט בודק זיין דעם $1 איידער איר הייבט אן ארויפלאדן ווידעראמאל.',
 'upload-success-subj' => 'דערפֿאלגרייכער ארויפֿלאָד',
 'upload-success-msg' => 'אײַער אַרויפֿלאָד פֿון [$2] איז געווען דערפֿאלגרייך. עס איז פֿאַראָן דאָ: [[:{{ns:file}}:$1]]',
 'upload-failure-subj' => 'אַרויפֿלאָדן פראבלעם',
@@ -1675,6 +1686,7 @@ $1",
 'backend-fail-closetemp' => 'קען נישט שליסן צייַטווייַליקע טעקע.',
 'backend-fail-read' => 'קען נישט ליינען טעקע "$1".',
 'backend-fail-create' => 'קען נישט שרייבן טעקע "$1".',
+'backend-fail-maxsize' => 'מ\'האט נישט געקענט שרייבן די טעקע "$1" ווייל זי איז גרעסער פון {{PLURAL:$2|איין בייט|$2 בייטן}}.',
 
 # Lock manager
 'lockmanager-notlocked' => 'מ\'קען נישט אויפֿשליסן "$1"; ער איז נישט פֿארשלאסן.',
@@ -1767,6 +1779,7 @@ $1",
 'shared-repo-from' => 'פֿון $1',
 'shared-repo' => 'א געמיינזאַמער זאַפאַס',
 'shared-repo-name-wikimediacommons' => 'וויקימעדיע קאמאנס',
+'upload-disallowed-here' => 'ליידער קענט איר נישט איבערשרייבן דאס בילד.',
 
 # File reversion
 'filerevert' => 'צוריקדרייען $1',
@@ -1793,6 +1806,7 @@ $1",
 ** קאפירעכט פֿאַרלעצונג
 ** דופליקאַט',
 'filedelete-edit-reasonlist' => 'רעדאַקטירן אויסמעקן סיבות',
+'filedelete-maintenance' => 'אויסמעקן און צוריקשטעלן טעקעס צײַטווײַליק אומדערמעגלעכט בשעת אויפהאלטן.',
 'filedelete-maintenance-title' => 'מען קען נישט אויסמעקן די טעקע',
 
 # MIME search
@@ -1860,13 +1874,14 @@ $1",
 'withoutinterwiki' => 'בלעטער אן שפראך פֿארבינדונגען',
 'withoutinterwiki-summary' => 'די פֿאלגנדע בלעטער פֿאַרבינדן נישט מיט אַנדערע שפראַך ווערסיעס',
 'withoutinterwiki-legend' => 'פרעפֿיקס',
-'withoutinterwiki-submit' => 'ווײַז',
+'withoutinterwiki-submit' => 'ווײַזן',
 
 'fewestrevisions' => 'בלעטער מיט די מינדערסטע רעוויזיעס',
 
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|בייט|בייטן}}',
 'ncategories' => '{{PLURAL:$1|קאטעגאריע|$1 קאטעגאריעס}}',
+'ninterwikis' => '$1 {{PLURAL:$1|אינטערוויקי|אינטערוויקיס}}',
 'nlinks' => '$1 {{PLURAL:$1|לינק|לינקען}}',
 'nmembers' => '$1 {{PLURAL:$1|בלאט|בלעטער}}',
 'nrevisions' => '{{PLURAL:$1|איין רעוויזיע|$1 רעוויזיעס}}',
@@ -1894,6 +1909,7 @@ $1",
 'mostlinkedtemplates' => 'מערסט פֿארבינדענע מוסטערן',
 'mostcategories' => 'אַרטיקלען מיט די מערסטע קאַטעגאָריעס',
 'mostimages' => 'מערסט פֿארבונדענע טעקעס',
+'mostinterwikis' => 'בלעטער מיט די מערסטע אינטערוויקיס',
 'mostrevisions' => 'אַרטיקלען מיט די מערסטע באַאַרבעטונגען',
 'prefixindex' => 'פּרעפֿיקס אינדעקס',
 'prefixindex-namespace' => 'אלע בלעטער מיט פרעפֿיקס ($1 נאמענטייל)',
@@ -1920,7 +1936,7 @@ $1",
 'move' => 'באַװעגן',
 'movethispage' => 'באוועג דעם בלאט',
 'unusedimagestext' => 'די פֿאלגנדע טעקעס עקזיסטירן אבער ווערן נישט גענוצט אין קיין שום בלאַט.
\92×\99×\90 אַכט אז אנדערע וועבערטער קענען פֿארבינדן צו א טעקע מיט א דירעקטן URL, און קענען דעריבער באווײַזן זיך דאָ כאטש זיי זענען אין אקטיוון באניץ.',
\92×\99×\98 אַכט אז אנדערע וועבערטער קענען פֿארבינדן צו א טעקע מיט א דירעקטן URL, און קענען דעריבער באווײַזן זיך דאָ כאטש זיי זענען אין אקטיוון באניץ.',
 'unusedcategoriestext' => 'די פֿאלגנדע קאטעגאריעס עקסיסטירן, אבער קיין בלאט אדער קאטעגאריע ניצט זיי נישט.',
 'notargettitle' => 'קיין ציל',
 'notargettext' => 'איר האט נישט ספעציפֿירט קיין ציל בלאַט אדער באַניצער אויף וועמען אויסצופֿירן די פעולה.',
@@ -2033,8 +2049,10 @@ $1",
 # E-mail user
 'mailnologin' => 'נישטא קיין אדרעס צו שיקן',
 'mailnologintext' => 'איר ברויכט זײַן [[Special:UserLogin|אַרײַנלאגירט]] און האָבן א גילטיגן ע־פאסט אַדרעס אין אײַער [[Special:Preferences|פרעפֿערענצן]] צו שיקן ע־פאסט צו אַנדערע באַניצער.',
-'emailuser' => 'אַרויסשיקן ע-פאסט צו דעם באַניצער',
-'emailpage' => 'אַרויסשיקן ע-פאסט צו באַניצער.',
+'emailuser' => 'שיקן ע-פאסט צו דעם באַניצער',
+'emailuser-title-target' => 'שיקן {{GENDER:$1|דעם באניצער|די באניצערין}} ע־פאסט',
+'emailuser-title-notarget' => 'שיקן א באניצער ע־פאסט',
+'emailpage' => 'שיקן ע-פאסט צו באַניצער',
 'emailpagetext' => 'איר קענט ניצן דעם פֿארעם אונטן צו שיקן אן בליצבריוו צו דעם דאזיגן באַניצער.
 דער ע-פאסט אדרעס וואס איר האט אריינגעלייגט אין [[Special:Preferences| אייערע באניצער פרעפערנעצן]] וועט זיך ווייזן כאילו דאס איז געקומען פון דארטן, בכדי צו דערמעגלעכן א תשובה.',
 'usermailererror' => 'בליצבריוו האט צוריקגעשיקט א טעות:',
@@ -2073,7 +2091,7 @@ $1",
 'nowatchlist' => 'איר האט נישט קיין שום בלעטער אין אייער אויפפַּאסונג ליסטע.',
 'watchlistanontext' => 'ביטע $1 כדי צו זען אדער ענדערן בלעטער אין אייער אַכטגעבן ליסטע.',
 'watchnologin' => 'איר זענט נישט אַרײַנלאגירט',
-'watchnologintext' => '×\90×\99ר ×\9e×\95×\96×\98 ×\96×\99×\99×\9f ×\90ר×\99×\99× ×\92עס×\99×\99× ×\98 [[Special:UserLogin|×\90ר×\99×\99× ×\92×\9c×\90×\92×\99ר×\98]] ×¦×\95 ×\9e×\90×\93×\99פֿ×\99צ×\99ר×\9f ×\90×\99×\99ער ×\90×\95×\99פפַּ×\90ס×\9f ליסטע.',
+'watchnologintext' => '×\90×\99ר ×\93×\90רפֿ×\98 ×\96×\99×\99×\9f [[Special:UserLogin|×\90ר×\99×\99× ×\92×\9c×\90×\92×\99ר×\98]] ×¦×\95 ×\9e×\90×\93×\99פֿ×\99צ×\99ר×\9f ×\90×\99×\99ער ×\90×\95×\99פפַּ×\90ס×\95× ×\92Ö¾ליסטע.',
 'addwatch' => 'צולייגן צו דער אויפֿפאַסונג ליסטע',
 'addedwatchtext' => "דער בלאט \"[[:\$1]]\" איז צוגעלײגט געוואָרן צו אײַער [[Special:Watchlist|אויפֿפאַסונג ליסטע]].
 
@@ -2087,12 +2105,12 @@ $1",
 'unwatchthispage' => 'ענדיגן אויפֿפאַסן',
 'notanarticle' => 'דאס איז נישט קיין אינהאלט בלאט',
 'notvisiblerev' => 'די באארבעטונג איז געווארן אויסגעמעקט',
-'watchnochange' => 'ק×\99×\99× ×¢ ×¤Ö¿×\95×\9f ×\90ײַערע ×\90×\95×\99פֿ×\92עפ×\90ַס×\98×¢ ×\91×\9c×¢×\98ער ×\96×¢× ×¢×\9f ×\91×\90Ö·×\90ַר×\91×¢×\98 ×\92×¢×\95×\95×\90ר×\9f אין דעם צײַט פעריאד געוויזן.',
+'watchnochange' => 'ק×\99×\99× ×¢ ×¤Ö¿×\95×\9f ×\90ײַערע ×\90×\95×\99פֿ×\92עפ×\90ַס×\98×¢ ×\91×\9c×¢×\98ער ×\94×\90×\91×\9f ×\96×\99×\9a ×\92×¢×¢× ×\93ער×\98 אין דעם צײַט פעריאד געוויזן.',
 'watchlist-details' => '{{PLURAL:$1|איין בלאט|$1 בלעטער}} אין אייער אויפֿפאסן ליסטע (נישט רעכענען  רעדן בלעטער).',
 'wlheader-enotif' => '* ע-פאסט מעלדונג ערמעגליכט.',
 'wlheader-showupdated' => "* בלעטער געענדערט זײַט אײַער לעצטן וויזיט זען געוויזן '''דיק'''",
 'watchmethod-recent' => 'קאנטראלירן לעצטע ענדערונגען פֿאַר אויפֿגעפאַסטע בלעטער',
-'watchmethod-list' => 'ק×\90× ×\98ר×\90×\9c×\99ר×\9f ×\91×\9c×¢×\98ער ×\90×\99×\9f ×\90Ö·×\9b×\98×\92×¢×\91×\9fÖ¾×\9c×\99ס×\98×¢ ×¤Ö¿×\90ַר × ×²Ö·×¢ ×¨×¢×\93×\90ַק×\98×\99רונגען',
+'watchmethod-list' => 'ק×\90× ×\98ר×\90×\9c×\99ר×\9f ×\91×\9c×¢×\98ער ×\90×\99×\9f ×\90Ö·×\9b×\98×\95× ×\92Ö¾×\9c×\99ס×\98×¢ ×¤Ö¿×\90ַר ×\9cעצ×\98×¢ ×¢× ×\93×¢רונגען',
 'watchlistcontains' => 'אייער אויפֿפאסונג ליסטע אנטהאלט {{PLURAL:$1|איין בלאט|$1 בלעטער}}.',
 'iteminvalidname' => "פּראָבלעם מיט '$1', אומגילטיקער נאָמען ...",
 'wlnote' => "אונטן {{PLURAL:$1|איז די לעצטע ענדערונג|זענען די לעצטע '''$1''' ענדערונגען}} אין {{PLURAL:$2|דער לעצטער שעה|די לעצטע '''$2''' שעה'ן}} ביז $3, $4.",
@@ -2886,6 +2904,9 @@ $1',
 'nextdiff' => 'קומענדיקע ווערסיע ←',
 
 # Media information
+'mediawarning' => "'''ווארענונג''': דער טעקע טיפ קען אנטהאלטן בייזוויליקן קאד.
+דורכפירן דעם קאד קען שעדיקן אייער סיסטעם.",
+'imagemaxsize' => "מאקסימאלע בילד גרייס :<br />''(פאר טעקע באשרייבונג בלעטער)''",
 'thumbsize' => 'קליינבילד גרייס:',
 'widthheight' => '$1 × $2',
 'widthheightpage' => '$1 × $2, {{PLURAL:$3|איין בלאט|$3 בלעטער}}',
@@ -2967,6 +2988,7 @@ $1',
 'exif-orientation' => 'אריענטאַציע',
 'exif-samplesperpixel' => 'צאל קאמאפאנענטן',
 'exif-planarconfiguration' => 'דאטן איינארדנונג',
+'exif-jpeginterchangeformatlength' => 'בייטן פון JPEG דאטן',
 'exif-datetime' => 'טעקע ענדערונג דאטע און צײַט',
 'exif-imagedescription' => 'בילד טיטל',
 'exif-make' => 'פֿאטא-אפאראט פֿאבריצירער',
index 3588e1f..b067087 100644 (file)
@@ -211,33 +211,44 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#重定向', '#REDIRECT' ),
-       'notoc'                   => array( '0', '_无目录_', '__NOTOC__' ),
-       'nogallery'               => array( '0', '_无图库_', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '_强显目录_', '__FORCETOC__' ),
-       'toc'                     => array( '0', '_目录_', '__TOC__' ),
-       'noeditsection'           => array( '0', '_无段落编辑_', '__NOEDITSECTION__' ),
-       'currentmonth'            => array( '1', '本月', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', '本月1', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', '本月名称', 'CURRENTMONTHNAME' ),
-       'currentmonthabbrev'      => array( '1', '本月简称', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', '今天', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', '今天2', 'CURRENTDAY2' ),
-       'currentyear'             => array( '1', '今年', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', '此时', '当前时间', 'CURRENTTIME' ),
-       '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' ),
-       'pagename'                => array( '1', '页名', 'PAGENAME' ),
-       'fullpagename'            => array( '1', '全页名', 'FULLPAGENAME' ),
-       'newsectionlink'          => array( '1', '_新段落链接_', '__NEWSECTIONLINK__' ),
-       'nonewsectionlink'        => array( '1', '_无新段落链接_', '__NONEWSECTIONLINK__' ),
-       'language'                => array( '0', '#语言:', '#LANGUAGE:' ),
-       'pagesize'                => array( '1', '页面大小', 'PAGESIZE' ),
+       'redirect'                  => array( '0', '#重定向', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__无目录__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__无图库__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__强显目录__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__目录__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__无段落编辑__', '__NOEDITSECTION__' ),
+       'currentmonth'              => array( '1', '本月', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', '本月1', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', '本月名称', 'CURRENTMONTHNAME' ),
+       'currentmonthabbrev'        => array( '1', '本月简称', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', '今天', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', '今天2', 'CURRENTDAY2' ),
+       'currentyear'               => array( '1', '今年', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', '此时', '当前时间', 'CURRENTTIME' ),
+       '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' ),
+       'pagename'                  => array( '1', '页面名', 'PAGENAME' ),
+       'fullpagename'              => array( '1', '完整页面名', 'FULLPAGENAME' ),
+       '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_width'                 => array( '1', '$1像素', '$1px' ),
+       'img_center'                => array( '1', '居中', 'center', 'centre' ),
+       'img_page'                  => array( '1', '页数=$1', '$1页', 'page=$1', 'page $1' ),
+       'img_link'                  => array( '1', '链接=$1', 'link=$1' ),
+       'img_alt'                   => array( '1', '替代文本=$1', 'alt=$1' ),
+       'newsectionlink'            => array( '1', '__新段落链接__', '__NEWSECTIONLINK__' ),
+       'nonewsectionlink'          => array( '1', '__无新段落链接__', '__NONEWSECTIONLINK__' ),
+       'language'                  => array( '0', '#语言:', '#LANGUAGE:' ),
+       'tag'                       => array( '0', '标记', 'tag' ),
+       'pagesize'                  => array( '1', '页面大小', 'PAGESIZE' ),
 );
 
 $linkTrail = '/^()(.*)$/sD';
@@ -1847,6 +1858,7 @@ $1',
 'shared-repo-from' => '出自$1',
 'shared-repo' => '一个共用文件库',
 'shared-repo-name-wikimediacommons' => '维基共享资源',
+'upload-disallowed-here' => '您不可以覆盖此图像',
 
 # File reversion
 'filerevert' => '恢复$1',
@@ -2194,14 +2206,14 @@ $1',
 'changed' => '更改',
 '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:
 
 你好!
 
-{{SITENAME}}页面$PAGETITLE已于$PAGEEDITDATE被$PAGEEDITOR$CHANGEDORCREATED,请浏览$PAGETITLE_URL查看当前版本。
+{{SITENAME}}页面$PAGETITLE已于$PAGEEDITDATE被$PAGEEDITOR $CHANGEDORCREATED,请浏览 $PAGETITLE_URL 查看当前版本。
 $NEWPAGE
 编辑摘要:$PAGESUMMARY $PAGEMINOREDIT
 
index 26edd44..27f19e8 100644 (file)
@@ -33,6 +33,7 @@
  * @author PhiLiP
  * @author Philip
  * @author Shinjiman
+ * @author Shirayuki
  * @author Shizhao
  * @author Simon Shek
  * @author Skjackey tse
@@ -250,7 +251,7 @@ $messages = array(
 'tog-watchlisthideliu' => '監視列表中隱藏登入用戶',
 'tog-watchlisthideanons' => '監視列表中隱藏匿名用戶',
 'tog-watchlisthidepatrolled' => '監視清單中隱藏已巡查的編輯',
-'tog-ccmeonemails' => '當我寄電子郵件給其他用戶時,也寄一份複本到我的信箱',
+'tog-ccmeonemails' => '當我寄電子郵件給其他用戶時,也寄一份複本到我的信箱',
 'tog-diffonly' => '比較版本差異時不顯示頁面內容',
 'tog-showhiddencats' => '顯示隱藏分類',
 'tog-noconvertlink' => '不轉換連結標題',
@@ -1831,6 +1832,7 @@ $1',
 'shared-repo-from' => '出自$1',
 'shared-repo' => '一個共用檔案庫',
 'shared-repo-name-wikimediacommons' => '維基共享資源',
+'upload-disallowed-here' => '您不可以覆蓋此圖像。',
 
 # File reversion
 'filerevert' => '恢復$1',
@@ -1941,6 +1943,7 @@ Template:消除歧義',
 # Miscellaneous special pages
 'nbytes' => '$1位元組',
 'ncategories' => '$1個分類',
+'ninterwikis' => '$1 個跨維基',
 'nlinks' => '$1個連結',
 'nmembers' => '$1個成員',
 'nrevisions' => '$1個修訂',
@@ -1969,6 +1972,7 @@ Template:消除歧義',
 'mostlinkedtemplates' => '最多連結模板',
 'mostcategories' => '最多分類頁面',
 'mostimages' => '最多連結檔案',
+'mostinterwikis' => '最多跨維基頁面',
 'mostrevisions' => '最多修訂頁面',
 'prefixindex' => '所有有前綴的頁面',
 'prefixindex-namespace' => '帶有前綴的頁面(屬於$1名字空間)',
@@ -2191,8 +2195,8 @@ Template:消除歧義',
 'changed' => '更改',
 '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:
 
@@ -2754,6 +2758,7 @@ $1被封禁的理由是“$2”',
 'import-interwiki-templates' => '包含所有模板',
 'import-interwiki-submit' => '匯入',
 'import-interwiki-namespace' => '目的名字空間:',
+'import-interwiki-rootpage' => '目標根頁(可選):',
 'import-upload-filename' => '檔案名稱:',
 'import-comment' => '註解:',
 'importtext' => '請使用[[Special:Export|匯出功能]]從來源維基匯出檔案,
@@ -2787,6 +2792,8 @@ $1被封禁的理由是“$2”',
 'import-error-special' => '"$1"未能導入因為該頁面使用一個不能創建頁面的特殊名字空間。',
 'import-error-invalid' => '"$1"不能導入,因為名字無效。',
 'import-options-wrong' => '{{PLURAL:$2|選項}}出錯:<nowiki>$1</nowiki>',
+'import-rootpage-invalid' => '指定的根頁標題無效。',
+'import-rootpage-nosubpage' => '名字空間「$1」的根頁面不允許子頁面。',
 
 # Import log
 'importlogpage' => '匯入日誌',
@@ -2943,6 +2950,8 @@ $1被封禁的理由是“$2”',
 'pageinfo-length' => '頁面長度 (以位元組為單位)',
 'pageinfo-article-id' => '頁面編號',
 'pageinfo-robot-policy' => '搜尋引擎狀態',
+'pageinfo-robot-index' => '可索引',
+'pageinfo-robot-noindex' => '不可索引',
 'pageinfo-views' => '觀看次數',
 'pageinfo-watchers' => '頁面監視者數目',
 'pageinfo-redirects-name' => '重定向到此頁',
@@ -2956,7 +2965,7 @@ $1被封禁的理由是“$2”',
 'pageinfo-authors' => '作者總數',
 'pageinfo-recent-edits' => '最近編輯次數 (過去 $1 內)',
 'pageinfo-recent-authors' => '最近作者數目',
-'pageinfo-restriction' => '保護頁面 ( <code>$1</code> )',
+'pageinfo-restriction' => '保護頁面 ( <code>{{lcfirst:$1}}</code> )',
 'pageinfo-magic-words' => '魔術{{PLURAL:$1|字|字}} ( $1 )',
 'pageinfo-hidden-categories' => '隱藏{{PLURAL:$1|分類|分類}} ( $1 )',
 'pageinfo-templates' => '被引用的{{PLURAL:$1|模版|模版}} ( $1 )',
@@ -3010,6 +3019,7 @@ $1',
 'file-info-size-pages' => '$1 × $2像素,檔案大小: $3,檔案類型: $4, $5 {{PLURAL:$5|頁|頁}}',
 'file-nohires' => '無更高解像度可提供。',
 'svg-long-desc' => 'SVG 檔案,表面大小:$1 × $2 像素,檔案大小:$3',
+'svg-long-desc-animated' => 'SVG 動畫檔案,表面大小:$1 × $2 像素,檔案大小:$3',
 'show-big-image' => '完整解像度',
 'show-big-image-preview' => '此預覽的大小:$1.',
 'show-big-image-other' => '其他{{PLURAL:$2||}}解析度:$1。',
@@ -3019,6 +3029,8 @@ $1',
 'file-info-png-looped' => '循環',
 'file-info-png-repeat' => '已播放$1次',
 'file-info-png-frames' => '$1幀',
+'file-no-thumb-animation' => "'''注意: 由於技術限制,不能播放此檔案縮圖的動畫。'''",
+'file-no-thumb-animation-gif' => "'''注意: 由於技術限制,不能播放此高解析度GIF圖像縮圖的動畫。'''",
 
 # Special:NewFiles
 'newimages' => '新建圖片畫廊',
diff --git a/languages/utils/CLDRPluralRuleEvaluator.php b/languages/utils/CLDRPluralRuleEvaluator.php
new file mode 100644 (file)
index 0000000..6b11704
--- /dev/null
@@ -0,0 +1,574 @@
+<?php
+/**
+ * Parse and evaluate a plural rule.
+ *
+ * http://unicode.org/reports/tr35/#Language_Plural_Rules
+ *
+ * @author Niklas Laxstrom, Tim Starling
+ *
+ * @copyright Copyright © 2010-2012, Niklas Laxström
+ * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
+ * @file
+ * @since 1.20
+ */
+
+class CLDRPluralRuleEvaluator {
+       /**
+        * Evaluate a number against a set of plural rules. If a rule passes,
+        * return the index of plural rule.
+        *
+        * @param int The number to be evaluated against the rules
+        * @param array The associative array of plural rules in pluralform => rule format.
+        * @return int The index of the plural form which passed the evaluation
+        */
+       public static function evaluate( $number, array $rules ) {
+               $rules = self::compile( $rules );
+               return self::evaluateCompiled( $number, $rules );
+       }
+
+       /**
+        * Convert a set of rules to a compiled form which is optimised for
+        * fast evaluation. The result will be an array of strings, and may be cached.
+        *
+        * @param $rules The rules to compile
+        * @return An array of compile rules.
+        */
+       public static function compile( array $rules ) {
+               // We can't use array_map() for this because it generates a warning if
+               // there is an exception.
+               foreach ( $rules as &$rule ) {
+                       $rule = CLDRPluralRuleConverter::convert( $rule );
+               }
+               return $rules;
+       }
+
+       /**
+        * Evaluate a compiled set of rules returned by compile(). Do not allow
+        * the user to edit the compiled form, or else PHP errors may result.
+        */
+       public static function evaluateCompiled( $number, array $rules ) {
+               // The compiled form is RPN, with tokens strictly delimited by
+               // spaces, so this is a simple RPN evaluator.
+               foreach ( $rules as $i => $rule  ) {
+                       $stack = array();
+                       $zero = ord( '0' );
+                       $nine = ord( '9' );
+                       foreach ( StringUtils::explode( ' ', $rule ) as $token ) {
+                               $ord = ord( $token );
+                               if ( $token === 'n' ) {
+                                       $stack[] = $number;
+                               } elseif ( $ord >= $zero && $ord <= $nine ) {
+                                       $stack[] = intval( $token );
+                               } else {
+                                       $right = array_pop( $stack );
+                                       $left = array_pop( $stack );
+                                       $result = self::doOperation( $token, $left, $right );
+                                       $stack[] = $result;
+                               }
+                       }
+                       if ( $stack[0] ) {
+                               return $i;
+                       }
+               }
+               // None of the provided rules match. The number belongs to caregory
+               // 'other' which comes last.
+               return count( $rules );
+       }
+
+       /**
+        * Do a single operation
+        *
+        * @param $token string The token string
+        * @param $left The left operand. If it is an object, its state may be destroyed.
+        * @param $right The right operand
+        * @return mixed
+        */
+       private static function doOperation( $token, $left, $right ) {
+               if ( in_array( $token, array( 'in', 'not-in', 'within', 'not-within' ) ) ) {
+                       if ( !($right instanceof CLDRPluralRuleEvaluator_Range ) ) {
+                               $right = new CLDRPluralRuleEvaluator_Range( $right );
+                       }
+               }
+               switch ( $token ) {
+                       case 'or':
+                               return $left || $right;
+                       case 'and':
+                               return $left && $right;
+                       case 'is':
+                               return $left == $right;
+                       case 'is-not':
+                               return $left != $right;
+                       case 'in':
+                               return $right->isNumberIn( $left );
+                       case 'not-in':
+                               return !$right->isNumberIn( $left );
+                       case 'within':
+                               return $right->isNumberWithin( $left );
+                       case 'not-within':
+                               return !$right->isNumberWithin( $left );
+                       case 'mod':
+                               if ( is_int( $left ) ) {
+                                       return (int) fmod( $left, $right );
+                               }
+                               return fmod( $left, $right );
+                       case ',':
+                               if ( $left instanceof CLDRPluralRuleEvaluator_Range ) {
+                                       $range = $left;
+                               } else {
+                                       $range = new CLDRPluralRuleEvaluator_Range( $left );
+                               }
+                               $range->add( $right );
+                               return $range;
+                       case '..':
+                               return new CLDRPluralRuleEvaluator_Range( $left, $right );
+                       default:
+                               throw new CLDRPluralRuleError( "Invalid RPN token" );
+               }
+       }
+}
+
+/**
+ * Evaluator helper class representing a range list.
+ */
+class CLDRPluralRuleEvaluator_Range {
+       var $parts = array();
+
+       function __construct( $start, $end = false ) {
+               if ( $end === false ) {
+                       $this->parts[] = $start;
+               } else {
+                       $this->parts[] = array( $start, $end );
+               }
+       }
+
+       /**
+        * Determine if the given number is inside the range. If $integerConstraint
+        * is true, the number must additionally be an integer if it is to match
+        * any interval part.
+        */
+       function isNumberIn( $number, $integerConstraint = true ) {
+               foreach ( $this->parts as $part ) {
+                       if ( is_array( $part ) ) {
+                               if ( ( !$integerConstraint || floor( $number ) === (float)$number )
+                                       && $number >= $part[0] && $number <= $part[1] )
+                               {
+                                       return true;
+                               }
+                       } else {
+                               if ( $number == $part ) {
+                                       return true;
+                               }
+                       }
+               }
+               return false;
+       }
+
+       /**
+        * Readable alias for isNumberIn( $number, false ), and the implementation
+        * of the "within" operator.
+        */
+       function isNumberWithin( $number ) {
+               return $this->isNumberIn( $number, false );
+       }
+
+       /**
+        * Add another part to this range. The supplied new part may either be a
+        * range object itself, or a single number.
+        */
+       function add( $other ) {
+               if ( $other instanceof self ) {
+                       $this->parts = array_merge( $this->parts, $other->parts );
+               } else {
+                       $this->parts[] = $other;
+               }
+       }
+
+       /**
+        * For debugging
+        */
+       function __toString() {
+               $s = 'Range(';
+               foreach ( $this->parts as $i => $part ) {
+                       if ( $i ) {
+                               $s .= ', ';
+                       }
+                       if ( is_array( $part ) ) {
+                               $s .= $part[0] . '..' . $part[1];
+                       } else {
+                               $s .= $part;
+                       }
+               }
+               $s .= ')';
+               return $s;
+       }
+
+}
+
+/**
+ * Helper class for converting rules to reverse polish notation (RPN).
+ */
+class CLDRPluralRuleConverter {
+       var $rule, $pos, $end;
+       var $operators = array();
+       var $operands = array();
+
+       /**
+        * Precedence levels. Note that there's no need to worry about associativity
+        * for the level 4 operators, since they return boolean and don't accept
+        * boolean inputs.
+        */
+       static $precedence = array(
+               'or' => 2,
+               'and' => 3,
+               'is' => 4,
+               'is-not' => 4,
+               'in' => 4,
+               'not-in' => 4,
+               'within' => 4,
+               'not-within' => 4,
+               'mod' => 5,
+               ',' => 6,
+               '..' => 7,
+       );
+
+       /**
+        * A character list defining whitespace, for use in strspn() etc.
+        */
+       const WHITESPACE_CLASS = " \t\r\n";
+
+       /**
+        * Same for digits. Note that the grammar given in UTS #35 doesn't allow
+        * negative numbers or decimals.
+        */
+       const NUMBER_CLASS = '0123456789';
+
+       /**
+        * An anchored regular expression which matches a word at the current offset.
+        */
+       const WORD_REGEX = '/[a-zA-Z]+/A';
+
+       /**
+        * Convert a rule to RPN. This is the only public entry point.
+        */
+       public static function convert( $rule ) {
+               $parser = new self( $rule );
+               return $parser->doConvert();
+       }
+
+       /**
+        * Private constructor.
+        */
+       protected function __construct( $rule ) {
+               $this->rule = $rule;
+               $this->pos = 0;
+               $this->end = strlen( $rule );
+       }
+
+       /**
+        * Do the operation.
+        */
+       protected function doConvert() {
+               $expectOperator = true;
+
+               // Iterate through all tokens, saving the operators and operands to a
+               // stack per Dijkstra's shunting yard algorithm.
+               while ( false !== ( $token = $this->nextToken() ) ) {
+                       // In this grammar, there are only binary operators, so every valid
+                       // rule string will alternate between operator and operand tokens.
+                       $expectOperator = !$expectOperator;
+
+                       if ( $token instanceof CLDRPluralRuleConverter_Expression ) {
+                               // Operand
+                               if ( $expectOperator ) {
+                                       $token->error( 'unexpected operand' );
+                               }
+                               $this->operands[] = $token;
+                               continue;
+                       } else {
+                               // Operator
+                               if  ( !$expectOperator ) {
+                                       $token->error( 'unexpected operator' );
+                               }
+                               // Resolve higher precedence levels
+                               $lastOp = end( $this->operators );
+                               while ( $lastOp && self::$precedence[$token->name] <= self::$precedence[$lastOp->name] ) {
+                                       $this->doOperation( $lastOp, $this->operands );
+                                       array_pop( $this->operators );
+                                       $lastOp = end( $this->operators );
+                               }
+                               $this->operators[] = $token;
+                       }
+               }
+
+               // Finish off the stack
+               while ( $op = array_pop( $this->operators ) ) {
+                       $this->doOperation( $op, $this->operands );
+               }
+
+               // Make sure the result is sane. The first case is possible for an empty
+               // string input, the second should be unreachable.
+               if ( !count( $this->operands ) ) {
+                       $this->error( 'condition expected' );
+               } elseif ( count( $this->operands ) > 1 ) {
+                       $this->error( 'missing operator or too many operands' );
+               }
+
+               $value = $this->operands[0];
+               if ( $value->type !== 'boolean' ) {
+                       $this->error( 'the result must have a boolean type' );
+               }
+
+               return $this->operands[0]->rpn;
+       }
+
+       /**
+        * Fetch the next token from the input string. Return it as a
+        * CLDRPluralRuleConverter_Fragment object.
+        */
+       protected function nextToken() {
+               if ( $this->pos >= $this->end ) {
+                       return false;
+               }
+
+               // Whitespace
+               $length = strspn( $this->rule, self::WHITESPACE_CLASS, $this->pos );
+               $this->pos += $length;
+
+               if ( $this->pos >= $this->end ) {
+                       return false;
+               }
+
+               // Number
+               $length = strspn( $this->rule, self::NUMBER_CLASS, $this->pos );
+               if ( $length !== 0 ) {
+                       $token = $this->newNumber( substr( $this->rule, $this->pos, $length ), $this->pos );
+                       $this->pos += $length;
+                       return $token;
+               }
+
+               // Comma
+               if ( $this->rule[$this->pos] === ',' ) {
+                       $token = $this->newOperator( ',', $this->pos, 1 );
+                       $this->pos ++;
+                       return $token;
+               }
+
+               // Dot dot
+               if ( substr( $this->rule, $this->pos, 2 ) === '..' ) {
+                       $token = $this->newOperator( '..', $this->pos, 2 );
+                       $this->pos += 2;
+                       return $token;
+               }
+
+               // Word
+               if ( !preg_match( self::WORD_REGEX, $this->rule, $m, 0, $this->pos ) ) {
+                       $this->error( 'unexpected character "' . $this->rule[$this->pos] . '"'  );
+               }
+               $word1 = strtolower( $m[0] );
+               $word2 = '';
+               $nextTokenPos = $this->pos + strlen( $word1 );
+               if ( $word1 === 'not' || $word1 === 'is' ) {
+                       // Look ahead one word
+                       $nextTokenPos += strspn( $this->rule, self::WHITESPACE_CLASS, $nextTokenPos );
+                       if ( $nextTokenPos < $this->end
+                                       && preg_match( self::WORD_REGEX, $this->rule, $m, 0, $nextTokenPos ) )
+                       {
+                               $word2 = strtolower( $m[0] );
+                               $nextTokenPos += strlen( $word2 );
+                       }
+               }
+
+               // Two-word operators like "is not" take precedence over single-word operators like "is"
+               if ( $word2 !== '' ) {
+                       $bothWords = "{$word1}-{$word2}";
+                       if ( isset( self::$precedence[$bothWords] ) ) {
+                               $token = $this->newOperator( $bothWords, $this->pos, $nextTokenPos - $this->pos );
+                               $this->pos = $nextTokenPos;
+                               return $token;
+                       }
+               }
+
+               // Single-word operators
+               if ( isset( self::$precedence[$word1] ) ) {
+                       $token = $this->newOperator( $word1, $this->pos, strlen( $word1 ) );
+                       $this->pos += strlen( $word1 );
+                       return $token;
+               }
+
+               // The special numerical keyword "n"
+               if ( $word1 === 'n' ) {
+                       $token = $this->newNumber( 'n', $this->pos );
+                       $this->pos ++;
+                       return $token;
+               }
+
+               $this->error( 'unrecognised word' );
+       }
+
+       /**
+        * For the binary operator $op, pop its operands off the stack and push
+        * a fragment with rpn and type members describing the result of that
+        * operation.
+        */
+       protected function doOperation( $op ) {
+               if ( count( $this->operands ) < 2 ) {
+                       $op->error( 'missing operand' );
+               }
+               $right = array_pop( $this->operands );
+               $left = array_pop( $this->operands );
+               $result = $op->operate( $left, $right );
+               $this->operands[] = $result;
+       }
+
+       /**
+        * Create a numerical expression object
+        */
+       protected function newNumber( $text, $pos ) {
+               return new CLDRPluralRuleConverter_Expression( $this, 'number', $text, $pos, strlen( $text ) );
+       }
+
+       /**
+        * Create a binary operator
+        */
+       protected function newOperator( $type, $pos, $length ) {
+               return new CLDRPluralRuleConverter_Operator( $this, $type, $pos, $length );
+       }
+
+       /**
+        * Throw an error
+        */
+       protected function error( $message ) {
+               throw new CLDRPluralRuleError( $message );
+       }
+}
+
+/**
+ * Helper for CLDRPluralRuleConverter.
+ * The base class for operators and expressions, describing a region of the input string.
+ */
+class CLDRPluralRuleConverter_Fragment {
+       var $parser, $pos, $length, $end;
+
+       function __construct( $parser, $pos, $length ) {
+               $this->parser = $parser;
+               $this->pos = $pos;
+               $this->length = $length;
+               $this->end = $pos + $length;
+       }
+
+       public function error( $message ) {
+               $text = $this->getText();
+               throw new CLDRPluralRuleError( "$message at position " . ( $this->pos + 1 ) . ": \"$text\"" );
+       }
+
+       public function getText() {
+               return substr( $this->parser->rule, $this->pos, $this->length );
+       }
+}
+
+/**
+ * Helper for CLDRPluralRuleConverter.
+ * An expression object, representing a region of the input string (for error
+ * messages), the RPN notation used to evaluate it, and the result type for
+ * validation.
+ */
+class CLDRPluralRuleConverter_Expression extends CLDRPluralRuleConverter_Fragment {
+       var $type, $rpn;
+
+       function __construct( $parser, $type, $rpn, $pos, $length ) {
+               parent::__construct( $parser, $pos, $length );
+               $this->type = $type;
+               $this->rpn = $rpn;
+       }
+
+       public function isType( $type ) {
+               if ( $type === 'range' && ( $this->type === 'range' || $this->type === 'number' ) ) {
+                       return true;
+               }
+               if ( $type === $this->type ) {
+                       return true;
+               }
+               return false;
+       }
+}
+
+/**
+ * Helper for CLDRPluralRuleConverter.
+ * An operator object, representing a region of the input string (for error
+ * messages), and the binary operator at that location.
+ */
+class CLDRPluralRuleConverter_Operator extends CLDRPluralRuleConverter_Fragment {
+       var $name;
+
+       /**
+        * Each op type has three characters: left operand type, right operand type and result type
+        *
+        *   b = boolean
+        *   n = number
+        *   r = range
+        *
+        * A number is a kind of range.
+        */
+       static $opTypes = array(
+               'or' => 'bbb',
+               'and' => 'bbb',
+               'is' => 'nnb',
+               'is-not' => 'nnb',
+               'in' => 'nrb',
+               'not-in' => 'nrb',
+               'within' => 'nrb',
+               'not-within' => 'nrb',
+               'mod' => 'nnn',
+               ',' => 'rrr',
+               '..' => 'nnr',
+       );
+
+       /**
+        * Map converting from the abbrevation to the full form.
+        */
+       static $typeSpecMap = array(
+               'b' => 'boolean',
+               'n' => 'number',
+               'r' => 'range',
+       );
+
+       function __construct( $parser, $name, $pos, $length ) {
+               parent::__construct( $parser, $pos, $length );
+               $this->name = $name;
+       }
+
+       public function operate( $left, $right ) {
+               $typeSpec = self::$opTypes[$this->name];
+
+               $leftType = self::$typeSpecMap[$typeSpec[0]];
+               $rightType = self::$typeSpecMap[$typeSpec[1]];
+               $resultType = self::$typeSpecMap[$typeSpec[2]];
+
+               $start = min( $this->pos, $left->pos, $right->pos );
+               $end = max( $this->end, $left->end, $right->end );
+               $length = $end - $start;
+
+               $newExpr = new CLDRPluralRuleConverter_Expression( $this->parser, $resultType,
+                       "{$left->rpn} {$right->rpn} {$this->name}",
+                       $start, $length );
+
+               if ( !$left->isType( $leftType ) ) {
+                       $newExpr->error( "invalid type for left operand: expected $leftType, got {$left->type}" );
+               }
+
+               if ( !$right->isType( $rightType ) ) {
+                       $newExpr->error( "invalid type for right operand: expected $rightType, got {$right->type}" );
+               }
+               return $newExpr;
+       }
+}
+
+/**
+ * The exception class for all the classes in this file. This will be thrown
+ * back to the caller if there is any validation error.
+ */
+class CLDRPluralRuleError extends MWException {
+       function __construct( $message ) {
+               parent::__construct( 'CLDR plural rule error: ' . $message );
+       }
+}
index 4c72080..f363c3f 100644 (file)
--- a/load.php
+++ b/load.php
@@ -24,6 +24,7 @@
 
 // Bail if PHP is too low
 if ( !function_exists( 'version_compare' ) || version_compare( phpversion(), '5.3.2' ) < 0 ) {
+       // We need to use dirname( __FILE__ ) here cause __DIR__ is PHP5.3+
        require( dirname( __FILE__ ) . '/includes/PHPVersionError.php' );
        wfPHPVersionError( 'load.php' );
 }
@@ -31,7 +32,7 @@ if ( !function_exists( 'version_compare' ) || version_compare( phpversion(), '5.
 if ( isset( $_SERVER['MW_COMPILED'] ) ) {
        require ( 'phase3/includes/WebStart.php' );
 } else {
-       require ( dirname( __FILE__ ) . '/includes/WebStart.php' );
+       require ( __DIR__ . '/includes/WebStart.php' );
 }
 
 wfProfileIn( 'load.php' );
index cec1270..69d1131 100644 (file)
  * @defgroup Maintenance Maintenance
  */
 
+// Make sure we're on PHP5.3.2 or better
+if ( !function_exists( 'version_compare' ) || version_compare( PHP_VERSION, '5.3.2' ) < 0 ) {
+       // We need to use dirname( __FILE__ ) here cause __DIR__ is PHP5.3+
+       require_once( dirname( __FILE__ ) . '/../includes/PHPVersionError.php' );
+       wfPHPVersionError( 'cli' );
+}
+
 /**
  * @defgroup MaintenanceArchive Maintenance archives
  * @ingroup Maintenance
  */
 
 // Define this so scripts can easily find doMaintenance.php
-define( 'RUN_MAINTENANCE_IF_MAIN', dirname( __FILE__ ) . '/doMaintenance.php' );
+define( 'RUN_MAINTENANCE_IF_MAIN', __DIR__ . '/doMaintenance.php' );
 define( 'DO_MAINTENANCE', RUN_MAINTENANCE_IF_MAIN ); // original name, harmless
 
 $maintClass = false;
 
-// Make sure we're on PHP5 or better
-if ( !function_exists( 'version_compare' ) || version_compare( PHP_VERSION, '5.3.2' ) < 0 ) {
-       require_once( dirname( __FILE__ ) . '/../includes/PHPVersionError.php' );
-       wfPHPVersionError( 'cli' );
-}
-
 /**
  * Abstract maintenance class for quickly writing and churning out
  * maintenance scripts with minimal effort. All that _must_ be defined
@@ -123,7 +124,7 @@ abstract class Maintenance {
                global $IP;
                $IP = strval( getenv( 'MW_INSTALL_PATH' ) ) !== ''
                        ? getenv( 'MW_INSTALL_PATH' )
-                       : realpath( dirname( __FILE__ ) . '/..' );
+                       : realpath( __DIR__ . '/..' );
 
                $this->addDefaultParams();
                register_shutdown_function( array( $this, 'outputChanneled' ), false );
@@ -988,7 +989,7 @@ abstract class Maintenance {
         * @return string
         */
        protected function getDir() {
-               return dirname( __FILE__ );
+               return __DIR__;
        }
 
        /**
@@ -1009,9 +1010,9 @@ abstract class Maintenance {
        protected static function getCoreScripts() {
                if ( !self::$mCoreScripts ) {
                        $paths = array(
-                               dirname( __FILE__ ),
-                               dirname( __FILE__ ) . '/language',
-                               dirname( __FILE__ ) . '/storage',
+                               __DIR__,
+                               __DIR__ . '/language',
+                               __DIR__ . '/storage',
                        );
                        self::$mCoreScripts = array();
                        foreach ( $paths as $p ) {
index 1765bd9..2c28011 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * Replication-safe online upgrade script for log_id/log_deleted
+ * Replication-safe online upgrade for log_id/log_deleted fields.
  *
  * 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
  * @ingroup MaintenanceArchive
  */
 
-require( dirname( __FILE__ ) . '/../commandLine.inc' );
+require( __DIR__ . '/../commandLine.inc' );
 
+/**
+ * Maintenance script that upgrade for log_id/log_deleted fields in a
+ * replication-safe way.
+ *
+ * @ingroup Maintenance
+ */
 class UpdateLogging {
 
        /**
@@ -63,21 +69,21 @@ CREATE TABLE $logging_1_10 (
   -- action field, but only the type controls categorization.
   log_type varbinary(10) NOT NULL default '',
   log_action varbinary(10) 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,
-  
+
   -- 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 '',
-  
+
   -- 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,
 
@@ -124,7 +130,7 @@ EOT;
                $minTs = $this->dbw->selectField( $srcTable, 'MIN(log_timestamp)', false, __METHOD__ );
                $minTsUnix = wfTimestamp( TS_UNIX, $minTs );
                $numRowsCopied = 0;
-               
+
                while ( true ) {
                        $maxTs = $this->dbw->selectField( $srcTable, 'MAX(log_timestamp)', false, __METHOD__ );
                        $copyPos = $this->dbw->selectField( $dstTable, 'MAX(log_timestamp)', false, __METHOD__ );
@@ -137,7 +143,7 @@ EOT;
                                $percent = ( $copyPosUnix - $minTsUnix ) / ( $maxTsUnix - $minTsUnix ) * 100;
                        }
                        printf( "%s  %.2f%%\n", $copyPos, $percent );
-                       
+
                        # Handle all entries with timestamp equal to $copyPos
                        if ( $copyPos !== null ) {
                                $numRowsCopied += $this->copyExactMatch( $srcTable, $dstTable, $copyPos );
index 78cae8c..475cafc 100644 (file)
@@ -24,7 +24,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script to correct wrong values in the `page_latest` field
index 04c65ba..e3dc488 100644 (file)
@@ -259,7 +259,7 @@ class BackupDumper {
                        $dbr = wfGetDB( DB_SLAVE );
                }
                $this->maxCount = $dbr->selectField( $table, "MAX($field)", '', __METHOD__ );
-               $this->startTime = wfTime();
+               $this->startTime = microtime( true );
                $this->lastTime = $this->startTime;
                $this->ID = getmypid();
        }
@@ -328,9 +328,9 @@ class BackupDumper {
        function showReport() {
                if ( $this->reporting ) {
                        $now = wfTimestamp( TS_DB );
-                       $nowts = wfTime();
-                       $deltaAll = wfTime() - $this->startTime;
-                       $deltaPart = wfTime() - $this->lastTime;
+                       $nowts = microtime( true );
+                       $deltaAll = $nowts - $this->startTime;
+                       $deltaPart = $nowts - $this->lastTime;
                        $this->pageCountPart = $this->pageCount - $this->pageCountLast;
                        $this->revCountPart = $this->revCount - $this->revCountLast;
 
index ec395eb..f1f0954 100644 (file)
@@ -24,7 +24,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/backup.inc' );
+require_once( __DIR__ . '/backup.inc' );
 
 /**
  * @ingroup Maintenance
@@ -247,9 +247,9 @@ class TextPassDumper extends BackupDumper {
 
                if ( $this->reporting ) {
                        $now = wfTimestamp( TS_DB );
-                       $nowts = wfTime();
-                       $deltaAll = wfTime() - $this->startTime;
-                       $deltaPart = wfTime() - $this->lastTime;
+                       $nowts = microtime( true );
+                       $deltaAll = $nowts - $this->startTime;
+                       $deltaPart = $nowts - $this->lastTime;
                        $this->pageCountPart = $this->pageCount - $this->pageCountLast;
                        $this->revCountPart = $this->revCount - $this->revCountLast;
 
@@ -354,12 +354,12 @@ class TextPassDumper extends BackupDumper {
                                wfDebug( "TextDumpPass::readDump encountered XML parsing error\n" );
 
                                $byte = xml_get_current_byte_index( $parser );
-                               $msg = wfMsgHtml( 'xml-error-string',
+                               $msg = wfMessage( 'xml-error-string',
                                        'XML import parse failure',
                                        xml_get_current_line_number( $parser ),
                                        xml_get_current_column_number( $parser ),
                                        $byte . ( is_null( $chunk ) ? null : ( '; "' . substr( $chunk, $byte -$offset, 16 ) . '"' ) ),
-                                       xml_error_string( xml_get_error_code( $parser ) ) );
+                                       xml_error_string( xml_get_error_code( $parser ) ) )->escaped();
 
                                xml_parser_free( $parser );
 
index 0056c3c..9901b37 100644 (file)
@@ -5,7 +5,7 @@
  */
 
 /**
- * Create a doxygen subgroup of Maintenance for benchmarks
+ * Base code for benchmark scripts.
  *
  * 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
  * @ingroup Benchmark
  */
 
-require_once( dirname( __FILE__ ) . '/../Maintenance.php' );
+require_once( __DIR__ . '/../Maintenance.php' );
+
+/**
+ * Base class for benchmark scripts.
+ *
+ * @ingroup Benchmark
+ */
 abstract class Benchmarker extends Maintenance {
        private $results;
 
@@ -61,7 +67,7 @@ abstract class Benchmarker extends Maintenance {
 
                        $this->results[$bench_number] = array(
                                'function'  => $bench['function'],
-                               'arguments' => $bench['args'], 
+                               'arguments' => $bench['args'],
                                'count'     => $count,
                                'delta'     => $delta,
                                'average'   => $delta / $count,
index cf62aad..fa76ae2 100644 (file)
@@ -1,6 +1,8 @@
 <?php
 /**
- * This come from r75429 message
+ * Benchmark HTTP request vs HTTPS request.
+ *
+ * This come from r75429 message.
  *
  * 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
  * @author  Platonides
  */
 
-require_once( dirname( __FILE__ ) . '/Benchmarker.php' );
+require_once( __DIR__ . '/Benchmarker.php' );
+
+/**
+ * Maintenance script that benchmarks HTTP request vs HTTPS request.
+ *
+ * @ingroup Benchmark
+ */
 class bench_HTTP_HTTPS extends Benchmarker {
 
        public function __construct() {
index 7138552..a8e4627 100644 (file)
@@ -1,11 +1,33 @@
 <?php
 /**
+ * Benchmark SQL DELETE vs SQL TRUNCATE.
+ *
+ * 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 Benchmark
  */
 
-require_once( dirname( __FILE__ ) . '/Benchmarker.php' );
+require_once( __DIR__ . '/Benchmarker.php' );
 
+/**
+ * Maintenance script that benchmarks SQL DELETE vs SQL TRUNCATE.
+ *
+ * @ingroup Benchmark
+ */
 class BenchmarkDeleteTruncate extends Benchmarker {
 
        public function __construct() {
index dafce05..1f590d4 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 /**
+ * Benchmark if elseif... versus switch case.
+ *
  * This come from r75429 message
  *
  * This program is free software; you can redistribute it and/or modify
  * @author  Platonides
  */
 
-require_once( dirname( __FILE__ ) . '/Benchmarker.php' );
+require_once( __DIR__ . '/Benchmarker.php' );
+
+/**
+ * Maintenance script that benchmark if elseif... versus switch case.
+ *
+ * @ingroup Maintenance
+ */
 class bench_if_switch extends Benchmarker {
 
        public function __construct() {
index 73ace2b..9fa7c8e 100644 (file)
@@ -1,10 +1,29 @@
 <?php
 /**
+ * Benchmark for strtr() vs str_replace().
+ *
+ * This come from r75429 message.
+ *
+ * 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 Benchmark
  */
 
-require_once( dirname( __FILE__ ) . '/Benchmarker.php' );
+require_once( __DIR__ . '/Benchmarker.php' );
 
 function bfNormalizeTitleStrTr( $str ) {
     return strtr( $str, '_', ' ' );
@@ -14,6 +33,11 @@ function bfNormalizeTitleStrReplace( $str ) {
     return str_replace( '_', ' ', $str );
 }
 
+/**
+ * Maintenance script that benchmarks for strtr() vs str_replace().
+ *
+ * @ingroup Benchmark
+ */
 class bench_strtr_str_replace extends Benchmarker {
 
        public function __construct() {
index 2e4b902..f598780 100644 (file)
@@ -1,22 +1,41 @@
 <?php
-/**\r
- * @file\r
- * @ingroup Benchmark\r
- */\r
-\r
-require_once( dirname( __FILE__ ) . '/Benchmarker.php' );\r
+/**
+ * Benchmark for using a regexp vs. mb_check_encoding to check for UTF-8 encoding.
+ *
+ * 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 Benchmark
+ */
+
+require_once( __DIR__ . '/Benchmarker.php' );
 
 /**
- * This little benchmark executes the regexp used in Language->checkTitleEncoding() and compares its execution time
- * against that of mb_check_encoding, if available.
- */\r
+ * This little benchmark executes the regexp used in Language->checkTitleEncoding()
+ * and compares its execution time against that of mb_check_encoding, if available.
+ *
+ * @ingroup Benchmark
+ */
 class bench_utf8_title_check extends Benchmarker {
 
        private $canRun;
 
        private $data;
 
-       public function __construct() {\r
+       public function __construct() {
                parent::__construct();
 
                $this->data = array (
@@ -43,14 +62,14 @@ class bench_utf8_title_check extends Benchmarker {
 
                $this->canRun = function_exists ( 'mb_check_encoding' );
 
-               if ( $this->canRun ) {\r
+               if ( $this->canRun ) {
                        $this->mDescription = "Benchmark for using a regexp vs. mb_check_encoding to check for UTF-8 encoding.";
                        mb_internal_encoding( 'UTF-8' );
                } else {
                        $this->mDescription = "CANNOT RUN benchmark using mb_check_encoding: function not available.";
-               }\r
-       }\r
-\r
+               }
+       }
+
        public function execute() {
                if ( !$this->canRun ) {
                        return;
@@ -69,22 +88,22 @@ class bench_utf8_title_check extends Benchmarker {
                                'function' => array( $this, 'use_regexp_once_only' ),
                                'args' => array( rawurldecode ( $val ) )
                        );
-                       $benchmarks[] = array(\r
-                               'function' => array( $this, 'use_mb_check_encoding' ),\r
-                               'args' => array( rawurldecode ( $val ) )\r
+                       $benchmarks[] = array(
+                               'function' => array( $this, 'use_mb_check_encoding' ),
+                               'args' => array( rawurldecode ( $val ) )
                        );
-               }\r
+               }
                $this->bench( $benchmarks );
-               print $this->getFormattedResults();\r
-       }\r
+               print $this->getFormattedResults();
+       }
 
        private $isutf8;
-\r
+
        function use_regexp( $s ) {
                $this->isutf8 = preg_match( '/^([\x00-\x7f]|[\xc0-\xdf][\x80-\xbf]|' .
-                               '[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xf7][\x80-\xbf]{3})+$/', $s );\r
-       }\r
-\r
+                               '[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xf7][\x80-\xbf]{3})+$/', $s );
+       }
+
        function use_regexp_non_capturing( $s ) {
                // Same as above with a non-capturing subgroup.
                $this->isutf8 = preg_match( '/^(?:[\x00-\x7f]|[\xc0-\xdf][\x80-\xbf]|' .
@@ -97,11 +116,11 @@ class bench_utf8_title_check extends Benchmarker {
                                '[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xf7][\x80-\xbf]{3})+$/', $s );
        }
 
-       function use_mb_check_encoding( $s ) {\r
-               $this->isutf8 = mb_check_encoding( $s, 'UTF-8' );\r
-       }\r
-\r
-}\r
-\r
-$maintClass = 'bench_utf8_title_check';\r
-require_once( RUN_MAINTENANCE_IF_MAIN );\r
+       function use_mb_check_encoding( $s ) {
+               $this->isutf8 = mb_check_encoding( $s, 'UTF-8' );
+       }
+
+}
+
+$maintClass = 'bench_utf8_title_check';
+require_once( RUN_MAINTENANCE_IF_MAIN );
index 4caebc5..8543982 100644 (file)
@@ -1,6 +1,8 @@
 <?php
 /**
- * This come from r75429 message
+ * Benchmark for wfIsWindows().
+ *
+ * This come from r75429 message.
  *
  * 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
  * @author  Platonides
  */
 
-require_once( dirname( __FILE__ ) . '/Benchmarker.php' );
+require_once( __DIR__ . '/Benchmarker.php' );
+
+/**
+ * Maintenance script that benchmarks wfIsWindows().
+ *
+ * @ingroup Benchmark
+ */
 class bench_wfIsWindows extends Benchmarker {
 
        public function __construct() {
index 4ec2616..9d11601 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 /**
+ * Benchmark %MediaWiki hooks.
+ *
  * 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
  * @ingroup Benchmark
  */
 
-require_once( dirname( __FILE__ ) . '/Benchmarker.php' );
+require_once( __DIR__ . '/Benchmarker.php' );
 
+/**
+ * Maintenance script that benchmarks %MediaWiki hooks.
+ *
+ * @ingroup Benchmark
+ */
 class BenchmarkHooks extends Benchmarker {
 
        public function __construct() {
index e9d2ec7..7ef2116 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * Squid purge benchmark script
+ * Benchmark for Squid purge.
  *
  * 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
  * @ingroup Benchmark
  */
 
-require_once( dirname( __FILE__ ) . '/Benchmarker.php' );
+require_once( __DIR__ . '/Benchmarker.php' );
 
+/**
+ * Maintenance script that benchmarks Squid purge.
+ *
+ * @ingroup Benchmark
+ */
 class BenchmarkPurge extends Benchmarker {
 
        public function __construct() {
index 270f7a6..c06c2cd 100644 (file)
@@ -23,7 +23,7 @@
  */
 
 /** */
-require_once( dirname( __FILE__ ) . '/commandLine.inc' );
+require_once( __DIR__ . '/commandLine.inc' );
 
 function cdbShowHelp( $command ) {
        $commandList = array(
index e4063f9..f276fc1 100644 (file)
@@ -24,7 +24,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script to change the password of a given user.
index ea6c09f..8d0e442 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script to check classes definitions in the autoloader.
index f8b8955..670b93d 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script to check that pages marked as being redirects really are.
index d7463ec..c05d915 100644 (file)
@@ -20,7 +20,7 @@
  * @file
  * @ingroup Maintenance
  */
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script to check images to see if they exist, are readable, etc.
index 3019b84..0a22f58 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script to check syntax of all PHP files in MediaWiki.
index 6a9294a..dd5e002 100644 (file)
@@ -22,7 +22,7 @@
  */
 
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script to check that database usernames are actually valid.
index d449d6c..dbc2e0d 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script to cleans up old database tables, dropping old indexes
index b61f6ff..ec2aa95 100644 (file)
@@ -29,7 +29,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/cleanupTable.inc' );
+require_once( __DIR__ . '/cleanupTable.inc' );
 
 /**
  * Maintenance script to clean up broken page links when somebody turns on $wgCapitalLinks.
index 2beed72..4e7b937 100644 (file)
@@ -29,7 +29,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/cleanupTable.inc' );
+require_once( __DIR__ . '/cleanupTable.inc' );
 
 /**
  * Maintenance script to clean up broken, unparseable upload filenames.
index 706f87f..f37af77 100755 (executable)
@@ -23,7 +23,7 @@
  * @ingroup Maintenance\r
  */\r
 \r
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );\r
+require_once( __DIR__ . '/Maintenance.php' );\r
 \r
 /**\r
  * Maintenance script that removes hidden preferences from the database.\r
index b339bfc..2085da9 100644 (file)
@@ -22,7 +22,7 @@
  * @author Roan Kattouw
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script to remove cache entries for removed ResourceLoader modules
index 2051c89..e20bcd8 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script to cleanup all spam from a given hostname.
index 898bdf4..57acfd8 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Generic class to cleanup a database table. Already subclasses Maintenance.
@@ -62,7 +62,7 @@ class TableCleanup extends Maintenance {
                $this->processed = 0;
                $this->updated = 0;
                $this->count = $count;
-               $this->startTime = wfTime();
+               $this->startTime = microtime( true );
                $this->table = $table;
        }
 
@@ -75,7 +75,7 @@ class TableCleanup extends Maintenance {
                $portion = $this->processed / $this->count;
                $updateRate = $this->updated / $this->processed;
 
-               $now = wfTime();
+               $now = microtime( true );
                $delta = $now - $this->startTime;
                $estimatedTotalTime = $delta / $portion;
                $eta = $this->startTime + $estimatedTotalTime;
index a2dc3a3..ad2577a 100644 (file)
@@ -29,7 +29,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/cleanupTable.inc' );
+require_once( __DIR__ . '/cleanupTable.inc' );
 
 /**
  * Maintenance script to clean up broken, unparseable titles.
index 32377b6..cc32946 100644 (file)
@@ -25,7 +25,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script to remove old or broken uploads from temporary uploaded
index 840337c..fbab6a3 100644 (file)
@@ -29,7 +29,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/cleanupTable.inc' );
+require_once( __DIR__ . '/cleanupTable.inc' );
 
 /**
  * Maintenance script to remove broken, unparseable titles in the watchlist table.
index 638a475..88769df 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script to clear the cache of interwiki prefixes for all local wikis.
index 2ed5a67..4581d53 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script to remove all statistics tracking from the cache.
index c7adbfb..86a558d 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 global $optionsWithArgs;
 if ( !isset( $optionsWithArgs ) ) {
index 9d7f5c7..a333717 100644 (file)
@@ -28,7 +28,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/dumpIterator.php' );
+require_once( __DIR__ . '/dumpIterator.php' );
 
 /**
  * Maintenance script to take page text out of an XML dump file and render
index 275d8fa..5f7b02e 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script to convert from the old links schema (string->ID)
index e666b65..7c9ca26 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script to convert user options to the new `user_properties` table.
index 2363d40..aebdee1 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Copy all files in one container of one backend to another.
index 3f328f9..ad5333f 100644 (file)
@@ -22,7 +22,7 @@
  * @author Rob Church <robchur@gmail.com>
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script to create an account and grant it administrator rights.
index 8709ee8..85ffc23 100644 (file)
@@ -24,8 +24,8 @@
  * @author Aaron Schulz
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
-require_once( dirname( __FILE__ ) . '/deleteArchivedFiles.inc' );
+require_once( __DIR__ . '/Maintenance.php' );
+require_once( __DIR__ . '/deleteArchivedFiles.inc' );
 
 /**
  * Maintenance script to delete archived (non-current) files from the database.
index 353661a..4b658bb 100644 (file)
@@ -24,8 +24,8 @@
  * @author Aaron Schulz
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
-require_once( dirname( __FILE__ ) . '/deleteArchivedRevisions.inc' );
+require_once( __DIR__ . '/Maintenance.php' );
+require_once( __DIR__ . '/deleteArchivedRevisions.inc' );
 
 /**
  * Maintenance script to delete archived (deleted from public) revisions
index 6860a5a..936a52b 100644 (file)
@@ -28,7 +28,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script to delete a batch of pages.
index 540d225..4ab6d1d 100644 (file)
@@ -22,7 +22,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that deletes all pages in the MediaWiki namespace
index 2029b57..3c8c5fd 100644 (file)
@@ -24,7 +24,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that deletes image information from the object cache.
index 45a6b34..6a3e211 100644 (file)
@@ -22,7 +22,7 @@
  * @author Rob Church <robchur@gmail.com>
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that deletes old (non-current) revisions from the database.
index 13b9c91..5dc7567 100644 (file)
@@ -24,7 +24,7 @@
  * @todo More efficient cleanup of text records
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that deletes revisions which refer to a nonexisting page.
index fe3b515..ad6470d 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that deletes one or more revisions by moving them
index 162dcb4..da220d6 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that deletes self-references to $wgServer
index 4638468..c9546c6 100644 (file)
@@ -29,8 +29,8 @@ $originalDir = getcwd();
 
 $optionsWithArgs = array( 'pagelist', 'start', 'end', 'revstart', 'revend');
 
-require_once( dirname( __FILE__ ) . '/commandLine.inc' );
-require_once( dirname( __FILE__ ) . '/backup.inc' );
+require_once( __DIR__ . '/commandLine.inc' );
+require_once( __DIR__ . '/backup.inc' );
 
 $dumper = new BackupDumper( $argv );
 
index 4c04d86..3657f96 100644 (file)
@@ -26,7 +26,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Base class for interating over a dump.
@@ -62,7 +62,7 @@ abstract class DumpIterator extends Maintenance {
                        return;
                }
 
-               $this->startTime = wfTime();
+               $this->startTime = microtime( true );
 
                if ( $this->getOption('dump') == '-' ) {
                        $source = new ImportStreamSource( $this->getStdin() );
@@ -80,7 +80,7 @@ abstract class DumpIterator extends Maintenance {
 
                $this->conclusions();
 
-               $delta = wfTime() - $this->startTime;
+               $delta = microtime( true ) - $this->startTime;
                $this->error( "Done {$this->count} revisions in " . round($delta, 2) . " seconds " );
                if ($delta > 0)
                        $this->error( round($this->count / $delta, 2) . " pages/sec" );
index ad440e7..153fdd7 100644 (file)
@@ -30,7 +30,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that generates a plaintext link dump.
index 5dbb5e2..e05e154 100644 (file)
@@ -25,7 +25,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that generates a page name dump for SisterSites usage.
index 41a7a68..72d7d97 100644 (file)
@@ -26,8 +26,8 @@
 
 $originalDir = getcwd();
 
-require_once( dirname( __FILE__ ) . '/commandLine.inc' );
-require_once( dirname( __FILE__ ) . '/backupTextPass.inc' );
+require_once( __DIR__ . '/commandLine.inc' );
+require_once( __DIR__ . '/backupTextPass.inc' );
 
 
 $dumper = new TextPassDumper( $argv );
index b16b0c2..0d0dfcf 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script to dump a the list of files uploaded,
index 13b3c49..59df5e8 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script to make a page edit.
index 3bd164f..5aefe1c 100644 (file)
@@ -34,7 +34,7 @@
 $optionsWithArgs = array( 'd' );
 
 /** */
-require_once( dirname( __FILE__ ) . "/commandLine.inc" );
+require_once( __DIR__ . "/commandLine.inc" );
 
 if ( isset( $options['d'] ) ) {
        $d = $options['d'];
index 2833081..a705bcc 100644 (file)
@@ -22,7 +22,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script used to fetch page text in a subprocess.
index 69a2a78..501bcfc 100644 (file)
@@ -25,7 +25,7 @@ $initialTime = microtime( true );
 $wgProfiler = array( 'class' => 'ProfilerSimpleText' );
 error_reporting( E_ALL );
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script to test fileop performance.
@@ -40,6 +40,7 @@ class TestFileOpPerformance extends Maintenance {
                $this->addOption( 'b2', 'Backend 2', false, true );
                $this->addOption( 'srcdir', 'File source directory', true, true );
                $this->addOption( 'maxfiles', 'Max files', false, true );
+               $this->addOption( 'quick', 'Avoid operation pre-checks' );
        }
 
        public function execute() {
@@ -76,11 +77,14 @@ class TestFileOpPerformance extends Maintenance {
                        if ( $file[0] != '.' ) {
                                $this->output( "Using '$dirname/$file' in operations.\n" );
                                $dst = $baseDir . '/' . wfBaseName( $file );
-                               $ops1[] = array( 'op' => 'store', 'src' => "$dirname/$file", 'dst' => $dst, 'overwrite' => 1);
-                               $ops2[] = array( 'op' => 'copy', 'src' => "$dst", 'dst' => "$dst-1", 'overwrite' => 1);
-                               $ops3[] = array( 'op' => 'move', 'src' => $dst, 'dst' => "$dst-2", 'overwrite' => 1);
-                               $ops4[] = array( 'op' => 'delete', 'src' => "$dst-1", 'overwrite' => 1 );
-                               $ops5[] = array( 'op' => 'delete', 'src' => "$dst-2", 'overwrite' => 1 );
+                               $ops1[] = array( 'op' => 'store',
+                                       'src' => "$dirname/$file", 'dst' => $dst, 'overwrite' => 1);
+                               $ops2[] = array( 'op' => 'copy',
+                                       'src' => "$dst", 'dst' => "$dst-1", 'overwrite' => 1 );
+                               $ops3[] = array( 'op' => 'move',
+                                       'src' => $dst, 'dst' => "$dst-2", 'overwrite' => 1 );
+                               $ops4[] = array( 'op' => 'delete', 'src' => "$dst-1" );
+                               $ops5[] = array( 'op' => 'delete', 'src' => "$dst-2" );
                        }
                        if ( count( $ops1 ) >= $this->getOption( 'maxfiles', 20 ) ) {
                                break; // enough
@@ -89,8 +93,10 @@ class TestFileOpPerformance extends Maintenance {
                closedir( $dir );
                $this->output( "\n" );
 
+               $method = $this->hasOption( 'quick' ) ? 'doQuickOperations' : 'doOperations';
+
                $start = microtime( true );
-               $status = $backend->doOperations( $ops1, array( 'force' => 1 ) );
+               $status = $backend->$method( $ops1, array( 'force' => 1 ) );
                $e = ( microtime( true ) - $start ) * 1000;
                if ( $status->getErrorsArray() ) {
                        print_r( $status->getErrorsArray() );
@@ -99,7 +105,7 @@ class TestFileOpPerformance extends Maintenance {
                $this->output( $backend->getName() . ": Stored " . count( $ops1 ) . " files in $e ms.\n" );
 
                $start = microtime( true );
-               $backend->doOperations( $ops2, array( 'force' => 1 ) );
+               $backend->$method( $ops2, array( 'force' => 1 ) );
                $e = ( microtime( true ) - $start ) * 1000;
                if ( $status->getErrorsArray() ) {
                        print_r( $status->getErrorsArray() );
@@ -108,7 +114,7 @@ class TestFileOpPerformance extends Maintenance {
                $this->output( $backend->getName() . ": Copied " . count( $ops2 ) . " files in $e ms.\n" );
 
                $start = microtime( true );
-               $backend->doOperations( $ops3, array( 'force' => 1 ) );
+               $backend->$method( $ops3, array( 'force' => 1 ) );
                $e = ( microtime( true ) - $start ) * 1000;
                if ( $status->getErrorsArray() ) {
                        print_r( $status->getErrorsArray() );
@@ -117,7 +123,7 @@ class TestFileOpPerformance extends Maintenance {
                $this->output( $backend->getName() . ": Moved " . count( $ops3 ) . " files in $e ms.\n" );
 
                $start = microtime( true );
-               $backend->doOperations( $ops4, array( 'force' => 1 ) );
+               $backend->$method( $ops4, array( 'force' => 1 ) );
                $e = ( microtime( true ) - $start ) * 1000;
                if ( $status->getErrorsArray() ) {
                        print_r( $status->getErrorsArray() );
@@ -126,7 +132,7 @@ class TestFileOpPerformance extends Maintenance {
                $this->output( $backend->getName() . ": Deleted " . count( $ops4 ) . " files in $e ms.\n" );
 
                $start = microtime( true );
-               $backend->doOperations( $ops5, array( 'force' => 1 ) );
+               $backend->$method( $ops5, array( 'force' => 1 ) );
                $e = ( microtime( true ) - $start ) * 1000;
                if ( $status->getErrorsArray() ) {
                        print_r( $status->getErrorsArray() );
index e4fa5de..e273c54 100644 (file)
@@ -34,7 +34,7 @@
  * @author Antoine Musso <hashar at free dot fr>
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that compares documented and actually present mismatches.
index e52c6c3..6f017ec 100644 (file)
@@ -25,7 +25,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that fixes double redirects.
index d247862..2403ec6 100644 (file)
@@ -23,7 +23,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that fixes any entriy for protocol-relative URLs
index 126eed2..8bf556f 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that fixes erroneous page_latest values
index 3a95251..84d08d3 100644 (file)
@@ -25,7 +25,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that fixes timestamp corruption caused by one or
index 4eca396..91d42a5 100644 (file)
@@ -22,7 +22,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that fixes the user_registration field.
index 474caab..600ca97 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) .'/Maintenance.php' );
+require_once( __DIR__ .'/Maintenance.php' );
 
 /**
  * Maintenance script that formats RELEASE-NOTE file to wiki text or HTML markup.
index 216af37..1c96a57 100644 (file)
@@ -181,7 +181,7 @@ TODO:
 // ///////////////////////// COMMAND LINE HELP ////////////////////////////////////
 
 // This is a command line script, load MediaWiki env (gives command line options);
-require_once( dirname( __FILE__ ) . '/commandLine.inc' );
+require_once( __DIR__ . '/commandLine.inc' );
 
 // if the user asked for an explanation of command line options.
 if ( isset( $options["help"] ) ) {
@@ -381,7 +381,6 @@ class wikiFuzz {
                        "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" ),
@@ -1360,6 +1359,7 @@ class viewPageTest extends pageTest {
                                "rdfrom"         => wikiFuzz::makeFuzz( 2 ),  // things from Article.php from here on:
                                "token"          => wikiFuzz::makeFuzz( 2 ),
                                "tbid"           => wikiFuzz::makeFuzz( 2 ),
+                               // @todo FIXME: Duplicate array key.
                                "action"         => wikiFuzz::chooseInput( array( "purge", wikiFuzz::makeFuzz( 2 ) ) ),
                                "wpReason"       => wikiFuzz::makeFuzz( 2 ),
                                "wpEditToken"    => wikiFuzz::makeFuzz( 2 ),
index a81e3d9..f3a5d87 100644 (file)
@@ -26,7 +26,7 @@
  * @see http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that generates a sitemap for the site.
index c47c61e..72b1d48 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that displays replication lag times.
index 0270052..ec9ed20 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that reports the hostname of a slave server.
index 34558b6..3e2f854 100644 (file)
@@ -23,7 +23,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that outputs page text to stdout.
index 2bb9951..2fa70dc 100755 (executable)
@@ -2,7 +2,7 @@
 <?php
 
 define( 'MW_CONFIG_CALLBACK', 'MakeHipHop::noConfigNeeded' );
-require( dirname( __FILE__ ) . '/../Maintenance.php' );
+require( __DIR__ . '/../Maintenance.php' );
 
 class MakeHipHop extends Maintenance {
        function noConfigNeeded() {}
@@ -12,7 +12,7 @@ class MakeHipHop extends Maintenance {
 
                $startTime = time();
 
-               $thisDir = realpath( dirname( __FILE__ ) );
+               $thisDir = realpath( __DIR__ );
                $IP = realpath( "$thisDir/../.." );
                if ( strval( $wgHipHopBuildDirectory ) !== '' ) {
                        $buildDir = $wgHipHopBuildDirectory;
@@ -278,7 +278,7 @@ class MakeHipHop extends Maintenance {
                        }
                }
 
-               $extraCoreFiles = array_map( 'trim', file( dirname( __FILE__ ) . '/extra-files' ) );
+               $extraCoreFiles = array_map( 'trim', file( __DIR__ . '/extra-files' ) );
                foreach ( $extraCoreFiles as $file ) {
                        if ( $file === '' ) {
                                continue;
index 0ad4313..1c4b51f 100755 (executable)
@@ -1,7 +1,7 @@
 #!/usr/bin/hphpi -f
 <?php
 
-require( dirname( __FILE__ ) . '/../Maintenance.php' );
+require( __DIR__ . '/../Maintenance.php' );
 
 class RunHipHopServer extends Maintenance {
        function __construct() {
@@ -19,7 +19,7 @@ class RunHipHopServer extends Maintenance {
 
        function runCompiled() {
                global $wgHipHopBuildDirectory;
-               $thisDir = realpath( dirname( __FILE__ ) );
+               $thisDir = realpath( __DIR__ );
                $IP = realpath( "$thisDir/../.." );
                if ( strval( $wgHipHopBuildDirectory ) !== '' ) {
                        $buildDir = $wgHipHopBuildDirectory;
@@ -51,7 +51,7 @@ class RunHipHopServer extends Maintenance {
        }
 
        function runInterpreted() {
-               $thisDir = realpath( dirname( __FILE__ ) );
+               $thisDir = realpath( __DIR__ );
                $IP = realpath( "$thisDir/../.." );
                $sourceBase = realpath( "$IP/.." );
 
index b6e0fe0..f51d7ad 100644 (file)
@@ -24,7 +24,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that imports XML dump files into the current wiki.
@@ -208,7 +208,7 @@ TEXT;
 
        function showReport() {
                if ( !$this->mQuiet ) {
-                       $delta = wfTime() - $this->startTime;
+                       $delta = microtime( true ) - $this->startTime;
                        if ( $delta ) {
                                $rate = sprintf( "%.2f", $this->pageCount / $delta );
                                $revrate = sprintf( "%.2f", $this->revCount / $delta );
@@ -254,7 +254,7 @@ TEXT;
        }
 
        function importFromHandle( $handle ) {
-               $this->startTime = wfTime();
+               $this->startTime = microtime( true );
 
                $source = new ImportStreamSource( $handle );
                $importer = new WikiImporter( $source );
index 76ec565..8d92383 100644 (file)
@@ -32,8 +32,8 @@
  */
 
 $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( __DIR__ . '/commandLine.inc' );
+require_once( __DIR__ . '/importImages.inc' );
 $processed = $added = $ignored = $skipped = $overwritten = $failed = 0;
 
 echo( "Import Images\n\n" );
index b4a1bac..e369cb1 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script to import all scripts in the MediaWiki namespace from a
@@ -56,12 +56,9 @@ class ImportSiteScripts extends Maintenance {
                        }
 
                        $this->output( "Importing $page\n" );
-                       $uri = new Uri( $baseUrl );
-                       $uri->extendQuery( array(
+                       $url = wfAppendQuery( $baseUrl, array(
                                'action' => 'raw',
                                'title' => "MediaWiki:{$page}" ) );
-                       $url = $uri->toString();
-
                        $text = Http::get( $url );
 
                        $wikiPage = WikiPage::factory( $title );
@@ -82,9 +79,7 @@ class ImportSiteScripts extends Maintenance {
                $pages = array();
 
                do {
-                       $uri = new Uri( $baseUrl );
-                       $uri->extendQuery( $data );
-                       $url = $uri->toString();
+                       $url = wfAppendQuery( $baseUrl, $data );
                        $strResult = Http::get( $url );
                        //$result = FormatJson::decode( $strResult ); // Still broken
                        $result = unserialize( $strResult );
index 5623fb0..adb5063 100644 (file)
@@ -24,7 +24,7 @@
 
 $options = array( 'help', 'nooverwrite', 'norc' );
 $optionsWithArgs = array( 'title', 'user', 'comment' );
-require_once( dirname( __FILE__ ) . '/commandLine.inc' );
+require_once( __DIR__ . '/commandLine.inc' );
 echo( "Import Text File\n\n" );
 
 if ( count( $args ) < 1 || isset( $options['help'] ) ) {
index 0f13645..3135b4c 100644 (file)
@@ -22,7 +22,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 class InitEditCount extends Maintenance {
        public function __construct() {
index 35918bb..5d8b886 100644 (file)
@@ -23,7 +23,7 @@
  * @author Rob Church <robchur@gmail.com>
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script to re-initialise or update the site statistics table
index 6339773..762bb94 100644 (file)
@@ -30,7 +30,7 @@ if ( !function_exists( 'version_compare' ) || ( version_compare( phpversion(), '
 define( 'MW_CONFIG_CALLBACK', 'Installer::overrideConfig' );
 define( 'MEDIAWIKI_INSTALL', true );
 
-require_once( dirname( dirname( __FILE__ ) )."/maintenance/Maintenance.php" );
+require_once( dirname( __DIR__ )."/maintenance/Maintenance.php" );
 
 /**
  * Maintenance script to install and configure MediaWiki
index c0a4dba..ceafc39 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script to do test JavaScript validity parses using jsmin+'s parser
index 19c549a..3ad0864 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script to show database lag.
index f872e6a..b537f9b 100644 (file)
@@ -20,7 +20,7 @@
  * @ingroup MaintenanceLanguage
  */
 
-require_once( dirname( __FILE__ ) . '/../Maintenance.php' );
+require_once( __DIR__ . '/../Maintenance.php' );
 
 class AllTrans extends Maintenance {
        public function __construct() {
index ea5b187..1888c4c 100644 (file)
@@ -21,8 +21,8 @@
  * @ingroup MaintenanceLanguage
  */
 
-require_once( dirname( __FILE__ ) . '/../commandLine.inc' );
-$messagesDir = dirname( __FILE__ ) . '/../../languages/messages/';
+require_once( __DIR__ . '/../commandLine.inc' );
+$messagesDir = __DIR__ . '/../../languages/messages/';
 $runTest = false;
 $run = false;
 $runMode = 'text';
index a58a8f5..ebc62b6 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup MaintenanceLanguage
  */
 
-require_once( dirname( __FILE__ ) . '/../commandLine.inc' );
+require_once( __DIR__ . '/../commandLine.inc' );
 require_once( 'languages.inc' );
 require_once( 'checkLanguage.inc' );
 
index 69f6108..99ba4e9 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup MaintenanceLanguage
  */
 
-require_once( dirname( __FILE__ ) . '/../commandLine.inc' );
+require_once( __DIR__ . '/../commandLine.inc' );
 require_once( 'checkLanguage.inc' );
 require_once( 'languages.inc' );
 
index f949ddc..d37d22e 100644 (file)
@@ -20,7 +20,7 @@
  * @ingroup MaintenanceLanguage
  */
 
-require_once( dirname( __FILE__ ) . '/../Maintenance.php' );
+require_once( __DIR__ . '/../Maintenance.php' );
 
 class CountMessages extends Maintenance {
        public function __construct() {
index 04f5e8b..505cb57 100644 (file)
@@ -20,7 +20,7 @@
  * @ingroup MaintenanceLanguage
  */
 
-require_once( dirname( __FILE__ ) . '/../Maintenance.php' );
+require_once( __DIR__ . '/../Maintenance.php' );
 
 class DateFormats extends Maintenance {
 
index a80ac01..7e729b4 100644 (file)
@@ -18,7 +18,7 @@
  * @ingroup MaintenanceLanguage
  */
 
-require_once( dirname( __FILE__ ) . '/../Maintenance.php' );
+require_once( __DIR__ . '/../Maintenance.php' );
 
 class Digit2Html extends Maintenance {
 
index b7ca88d..9292ce3 100644 (file)
@@ -22,7 +22,7 @@
  * @todo Make this more useful, right now just dumps $wgContentLang
  */
 
-require_once( dirname( __FILE__ ) . '/../Maintenance.php' );
+require_once( __DIR__ . '/../Maintenance.php' );
 
 class DumpMessages extends Maintenance {
        public function __construct() {
index 4cb90ff..c4a8e54 100644 (file)
@@ -21,7 +21,7 @@
  * @file
  */
 
-require_once( dirname( __FILE__ ) .'/../Maintenance.php' );
+require_once( __DIR__ .'/../Maintenance.php' );
 
 /**
  * Generate first letter data files for Collation.php
index 3dfda92..f3cc568 100644 (file)
@@ -21,9 +21,9 @@
  * @ingroup MaintenanceLanguage
  */
 
-require_once( dirname( __FILE__ ) . '/../Maintenance.php' );
+require_once( __DIR__ . '/../Maintenance.php' );
 
-require_once( dirname( __FILE__ ) . '/../../includes/normal/UtfNormalUtil.php' );
+require_once( __DIR__ . '/../../includes/normal/UtfNormalUtil.php' );
 
 /**
  * Generates normalizer data files for Arabic and Malayalam.
index 28fe120..2323638 100644 (file)
@@ -22,8 +22,8 @@
  */
 
 /** This is a command line script */
-require_once( dirname( __FILE__ ) . '/../Maintenance.php' );
-require_once( dirname( __FILE__ ) . '/languages.inc' );
+require_once( __DIR__ . '/../Maintenance.php' );
+require_once( __DIR__ . '/languages.inc' );
 
 class LangMemUsage extends Maintenance {
 
index 15fa712..b76f921 100644 (file)
@@ -46,7 +46,7 @@ class languages {
         * @param $exif bool Treat the EXIF messages?
         */
        function __construct( $exif = true ) {
-               require( dirname(__FILE__) . '/messageTypes.inc' );
+               require( __DIR__ . '/messageTypes.inc' );
                $this->mIgnoredMessages = $wgIgnoredMessages;
                if ( $exif ) {
                        $this->mOptionalMessages = array_merge( $wgOptionalMessages );
index 2d0f90f..ce1dbb9 100644 (file)
@@ -189,6 +189,7 @@ $wgIgnoredMessages = array(
        'wantedtemplates-summary',
        'activeusers-summary',
        'search-summary',
+       'editpage-head-copy-warn',
        'editpage-tos-summary',
        'addsection-preload',
        'addsection-editintro',
@@ -243,6 +244,8 @@ $wgIgnoredMessages = array(
        'version-entrypoints-api-php',
        'version-entrypoints-load-php',
        'ipb-default-expiry',
+       'pageinfo-header',
+       'pageinfo-footer',
 );
 
 /** Optional messages, which may be translated only if changed in the target language. */
index f6be347..b644d8e 100644 (file)
@@ -653,6 +653,7 @@ $wgMessageStructure = array(
                'yourdiff',
                'copyrightwarning',
                'copyrightwarning2',
+               'editpage-head-copy-warn',
                'editpage-tos-summary',
                'longpage-hint',
                'longpageerror',
@@ -1535,6 +1536,7 @@ $wgMessageStructure = array(
                'shared-repo',
                'shared-repo-name-wikimediacommons',
                'filepage.css',
+               'upload-disallowed-here',
        ),
        'filerevert' => array(
                'filerevert',
@@ -2662,6 +2664,7 @@ $wgMessageStructure = array(
                'spam_deleting',
        ),
        'info' => array(
+               'pageinfo-header',
                'pageinfo-title',
                'pageinfo-header-basic',
                'pageinfo-header-edits',
@@ -2692,6 +2695,7 @@ $wgMessageStructure = array(
                'pageinfo-magic-words',
                'pageinfo-hidden-categories',
                'pageinfo-templates',
+               'pageinfo-footer',
        ),
        'skin' => array(
                'skinname-standard',
@@ -2745,6 +2749,7 @@ $wgMessageStructure = array(
                'file-info-size-pages',
                'file-nohires',
                'svg-long-desc',
+               'svg-long-desc-animated',
                'show-big-image',
                'show-big-image-preview',
                'show-big-image-other',
@@ -2754,6 +2759,8 @@ $wgMessageStructure = array(
                'file-info-png-looped',
                'file-info-png-repeat',
                'file-info-png-frames',
+               'file-no-thumb-animation',
+               'file-no-thumb-animation-gif',
        ),
        'newfiles' => array(
                'newimages',
index ed2dae7..ad83905 100644 (file)
@@ -22,7 +22,7 @@
  * @defgroup MaintenanceLanguage MaintenanceLanguage
  */
 
-require_once( dirname( __FILE__ ) . '/../commandLine.inc' );
+require_once( __DIR__ . '/../commandLine.inc' );
 require_once( 'languages.inc' );
 require_once( 'writeMessagesArray.inc' );
 
index a298841..ba50322 100644 (file)
@@ -28,9 +28,9 @@
  */
 $optionsWithArgs = array( 'output' );
 
-require_once( dirname( __FILE__ ) . '/../commandLine.inc' );
+require_once( __DIR__ . '/../commandLine.inc' );
 require_once( 'languages.inc' );
-require_once( dirname( __FILE__ ) . '/StatOutputs.php' );
+require_once( __DIR__ . '/StatOutputs.php' );
 
 
 if ( isset( $options['help'] ) ) {
index 1e97c37..751e744 100644 (file)
@@ -30,7 +30,7 @@ array_shift( $argv );
 define( 'MEDIAWIKI', 1 );
 define( 'NOT_REALLY_MEDIAWIKI', 1 );
 
-$IP = dirname( __FILE__ ) . '/../..';
+$IP = __DIR__ . '/../..';
 
 require_once( "$IP/includes/Defines.php" );
 require_once( "$IP/languages/Language.php" );
index cd36847..b2e04c7 100644 (file)
@@ -105,7 +105,7 @@ $messages = array(
         */
        public static function writeMessagesArray( $messages, $ignoredComments = false, $prefix = false, $removeUnknown = false ) {
                # Load messages
-               $dir = $prefix ? $prefix : dirname( __FILE__ );
+               $dir = $prefix ? $prefix : __DIR__;
 
                require( $dir . '/messages.inc' );
                self::$messageStructure = $wgMessageStructure;
index 0244527..e07e62d 100644 (file)
@@ -23,7 +23,7 @@
  */
 
 /** */
-require_once( dirname( __FILE__ ) . '/commandLine.inc' );
+require_once( __DIR__ . '/commandLine.inc' );
 
 $mcc = new MWMemcached( array( 'persistent' => true/*, 'debug' => true*/ ) );
 $mcc->set_servers( $wgMemCachedServers );
index ed8250b..691b832 100644 (file)
@@ -22,7 +22,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that  makes several 'set', 'incr' and 'get' requests
index 8107016..cea6433 100644 (file)
@@ -25,7 +25,7 @@
 # Start from scratch
 define( 'MW_NO_EXTENSION_MESSAGES', 1 );
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 $maintClass = 'MergeMessageFileList';
 $mmfl = false;
 
@@ -104,7 +104,7 @@ $s =
 
 $dirs = array(
        $IP,
-       dirname( dirname( __FILE__ ) ),
+       dirname( __DIR__ ),
        realpath( $IP )
 );
 
index 451b598..496af72 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that re-assigns users from an old group to a new one.
@@ -60,7 +60,15 @@ class MigrateUserGroup extends Maintenance {
                        $dbw->update( 'user_groups',
                                array( 'ug_group' => $newGroup ),
                                array( 'ug_group' => $oldGroup,
-                                       "ug_user BETWEEN $blockStart AND $blockEnd" )
+                                       "ug_user BETWEEN $blockStart AND $blockEnd" ),
+                               __METHOD__,
+                               array( 'IGNORE' )
+                       );
+                       $count += $dbw->affectedRows();
+                       $dbw->delete( 'user_groups',
+                               array( 'ug_group' => $oldGroup,
+                                       "ug_user BETWEEN $blockStart AND $blockEnd" ),
+                               __METHOD__
                        );
                        $count += $dbw->affectedRows();
                        $dbw->commit( __METHOD__ );
index b17d8fe..9f5a909 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that minifies a file or set of files.
index 78db8b9..7d15959 100644 (file)
@@ -34,7 +34,7 @@
  * e.g. immobile_namespace for namespaces which can't be moved
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script to move a batch of pages.
index a59ba17..583249a 100644 (file)
@@ -49,7 +49,7 @@ if ( php_sapi_name() != 'cli' ) {
 }
 
 /** Figure out the base directory for MediaWiki location */
-$mwPath = dirname( dirname( __FILE__ ) ) . DIRECTORY_SEPARATOR;
+$mwPath = dirname( __DIR__ ) . DIRECTORY_SEPARATOR;
 
 /** doxygen binary script */
 $doxygenBin = 'doxygen';
index e2de686..4197a35 100644 (file)
@@ -24,7 +24,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that checks for articles to fix after
index bee4065..e66e981 100644 (file)
@@ -22,7 +22,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that picks a database that has pending jobs.
index 1defe1b..c471a44 100644 (file)
@@ -33,7 +33,7 @@
  * based on nukePage by Rob Church
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that removes pages with only one revision from the
index 3193d43..89dffe0 100644 (file)
@@ -23,7 +23,7 @@
  * @author Rob Church <robchur@gmail.com>
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that erases a page record from the database.
index aa20782..e222314 100644 (file)
@@ -26,7 +26,7 @@
  * i.e.: GRANT REFERENCES (user_id) ON mwuser TO hubclient;
  */
 
-require_once( dirname( __FILE__ ) . '/../Maintenance.php' );
+require_once( __DIR__ . '/../Maintenance.php' );
 
 class AlterSharedConstraints extends Maintenance {
        public function __construct() {
index 1ab3b99..78f98f5 100644 (file)
@@ -28,7 +28,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that looks for 'orphan' revisions hooked to pages which
index c1a890b..b0ab624 100644 (file)
@@ -49,7 +49,7 @@
  * @license GNU General Public License 2.0 or later
  */
 
-require_once( dirname(__FILE__) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script to parse some wikitext.
index 0271e1a..1f39355 100644 (file)
@@ -22,7 +22,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that manually runs an SQL patch outside of the general updaters.
index 037849b..ae54d69 100644 (file)
@@ -22,7 +22,7 @@
  * @author Simetrical
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Mainteance script to populate the category table.
index 0bbb5a2..37429a3 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script to populate the img_sha1 field.
index 8a2366a..99d8155 100644 (file)
@@ -22,7 +22,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that makes the required database updates for populating the
index 3b4b2db..059b6fe 100644 (file)
@@ -24,7 +24,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that makes the required database updates for
index 6a1b5c8..e81d4ff 100644 (file)
@@ -23,7 +23,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that makes the required database updates for rev_parent_id
index 65dd91f..6c835f4 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that populates the rev_len field for old revisions
index bb620c5..2e14d31 100644 (file)
@@ -22,7 +22,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that fills the rev_sha1 and ar_sha1 columns of revision
index 5c2b0d4..5952fd9 100644 (file)
@@ -25,7 +25,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/dumpIterator.php' );
+require_once( __DIR__ . '/dumpIterator.php' );
 
 /**
  * Maintenance script that takes page text out of an XML dump file and
index 9dee67e..a53bc88 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/commandLine.inc' );
+require_once( __DIR__ . '/commandLine.inc' );
 
 $wgHooks['BeforeParserFetchTemplateAndtitle'][] = 'PPFuzzTester::templateHook';
 
index e60ee08..2f6aa1a 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that protects or unprotects a page.
index 7828049..e058e3e 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that prunes file cache for pages, objects, resources, etc.
index e9d149b..cd62716 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that scans the deletion log and purges affected files
index 049d6e3..4b3c382 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that sends purge requests for listed pages to squid.
index e68047c..1f0b063 100644 (file)
@@ -22,7 +22,7 @@
  * @author Rob Church <robchur@gmail.com>
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that purges old text records from the database.
index b56794b..1c41798 100644 (file)
@@ -22,7 +22,7 @@
  * @ingroup Maintenance
  */
 
-require( dirname( __FILE__ ) . '/Maintenance.php' );
+require( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script to remove old objects from the parser cache.
index ec7b081..225400f 100644 (file)
@@ -19,7 +19,7 @@
  * @ingroup Maintenance Memcached
  */
 
-require_once( dirname( __FILE__ ) . '/commandLine.inc' );
+require_once( __DIR__ . '/commandLine.inc' );
 
 function purgeStaleMemcachedText() {
        global $wgMemc, $wgDBname;
index 2afd6e0..a91abf9 100644 (file)
@@ -23,7 +23,7 @@
  * @licence GNU General Public Licence 2.0 or later
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that reassigns edits from a user or IP address
index 4dbe267..3165b97 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that builds file cache for content pages.
index 936efd7..2842b40 100644 (file)
@@ -30,7 +30,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script to update image metadata records.
@@ -91,7 +91,7 @@ class ImageBuilder extends Maintenance {
                $this->processed = 0;
                $this->updated = 0;
                $this->count = $count;
-               $this->startTime = wfTime();
+               $this->startTime = microtime( true );
                $this->table = $table;
        }
 
@@ -104,7 +104,7 @@ class ImageBuilder extends Maintenance {
                $portion = $this->processed / $this->count;
                $updateRate = $this->updated / $this->processed;
 
-               $now = wfTime();
+               $now = microtime( true );
                $delta = $now - $this->startTime;
                $estimatedTotalTime = $delta / $portion;
                $eta = $this->startTime + $estimatedTotalTime;
index c48fb74..83849de 100644 (file)
@@ -29,7 +29,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script to rebuild the localisation cache.
index bc9f732..882ae1b 100644 (file)
@@ -22,7 +22,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that rebuilds link tracking tables from scratch.
index a22d3af..a70e591 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that purges all languages from the message cache.
index 5caa0a8..0278f72 100644 (file)
@@ -23,7 +23,7 @@
  * @todo Document
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that rebuilds recent changes from scratch.
index a37d603..41b245f 100644 (file)
@@ -25,7 +25,7 @@
  * @todo document
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that rebuilds search index table from scratch.
index f9bdeea..be6bd18 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 class RefreshImageCount extends Maintenance {
        public function __construct() {
index 6623bea..12da7a8 100644 (file)
@@ -27,7 +27,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script to refresh image metadata fields.
index 699d885..3d9270b 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script to refresh link tables.
index 490602d..8bc27c1 100644 (file)
@@ -23,7 +23,7 @@
  * @author Rob Church <robchur@gmail.com>
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that removes unused user accounts from the database.
index d8e53ee..6f24479 100644 (file)
@@ -23,7 +23,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that changes the prefix of database tables.
index c76a89b..24bedfa 100644 (file)
@@ -28,7 +28,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that takes page text out of an XML dump file
@@ -52,7 +52,7 @@ class DumpRenderer extends Maintenance {
        public function execute() {
                $this->outputDirectory = $this->getOption( 'output-dir' );
                $this->prefix = $this->getOption( 'prefix', 'wiki' );
-               $this->startTime = wfTime();
+               $this->startTime = microtime( true );
 
                if ( $this->hasOption( 'parser' ) ) {
                        global $wgParserConf;
@@ -68,7 +68,7 @@ class DumpRenderer extends Maintenance {
 
                $importer->doImport();
 
-               $delta = wfTime() - $this->startTime;
+               $delta = microtime( true ) - $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" );
index ef8f5b0..d7f8c6d 100644 (file)
@@ -23,7 +23,7 @@
  * @author Daniel Friesen <mediawiki@danielfriesen.name>
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script to reset the user_token for all users on the wiki.
index c9f607e..4660bce 100644 (file)
@@ -22,7 +22,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script to rollback all edits by a given user or IP provided
index 6322d31..e113916 100644 (file)
@@ -23,7 +23,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script to run a database query in batches and wait for slaves.
index af7c906..e909bc0 100644 (file)
@@ -25,7 +25,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that runs pending jobs.
index ff7d3fc..1dceb79 100644 (file)
@@ -1,9 +1,9 @@
 <?php
 /**
- * Based on runJobs.php
- *
  * Report number of jobs currently waiting in master database.
  *
+ * Based on runJobs.php
+ *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
+ * @file
  * @ingroup Maintenance
  * @author Tim Starling
  * @author Antoine Musso
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
+/**
+ * Maintenance script that reports the number of jobs currently waiting
+ * in master database.
+ *
+ * @ingroup Maintenance
+ */
 class ShowJobs extends Maintenance {
        public function __construct() {
                parent::__construct();
index b284a9a..982c7cb 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 
 /**
- * Maintenance script to show the cached statistics.
+ * Show the cached statistics.
  * Give out the same output as [[Special:Statistics]]
  *
  * This program is free software; you can redistribute it and/or modify
@@ -19,6 +19,7 @@
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
+ * @file
  * @ingroup Maintenance
  * @author Antoine Musso <hashar at free dot fr>
  * Based on initStats.php by:
  * @license GNU General Public License 2.0 or later
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
+/**
+ * Maintenance script to show the cached statistics.
+ *
+ * @ingroup Maintenance
+ */
 class ShowStats extends Maintenance {
        public function __construct() {
                parent::__construct();
index c4af630..04e98d9 100644 (file)
  * 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( __DIR__ . '/Maintenance.php' );
 
+/**
+ * Maintenance script that sends SQL queries from the specified file to the database.
+ *
+ * @ingroup Maintenance
+ */
 class MwSql extends Maintenance {
        public function __construct() {
                parent::__construct();
index 1f82191..a8a1fce 100644 (file)
@@ -23,6 +23,8 @@
 
 /**
  * This class contains code common to different SQLite-related maintenance scripts
+ *
+ * @ingroup Maintenance
  */
 class Sqlite {
 
@@ -85,4 +87,4 @@ class Sqlite {
                $db->close();
                return true;
        }
- };
\ No newline at end of file
+ };
index 864d5ab..4085c59 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * Performs some operations specific to SQLite database backend
+ * Performs some operations specific to SQLite database backend.
  *
  * 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
  * 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( __DIR__ . '/Maintenance.php' );
 
+/**
+ * Maintenance script that performs some operations specific to SQLite database backend.
+ *
+ * @ingroup Maintenance
+ */
 class SqliteMaintenance extends Maintenance {
        public function __construct() {
                parent::__construct();
index 46926dd..be448f9 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * Show statistics from the cache
+ * Show statistics from the cache.
  *
  * 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
  * 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( __DIR__ . '/Maintenance.php' );
 
+/**
+ * Maintenance script that shows statistics from the cache.
+ *
+ * @ingroup Maintenance
+ */
 class CacheStats extends Maintenance {
 
        public function __construct() {
index 29904db..6c669bf 100644 (file)
@@ -22,7 +22,7 @@
  */
 
 if ( !defined( 'MEDIAWIKI' ) ) {
-       require_once( dirname( __FILE__ ) . '/../commandLine.inc' );
+       require_once( __DIR__ . '/../commandLine.inc' );
 
        $cs = new CheckStorage;
        $fix = isset( $options['fix'] );
index 5064fe7..4594db7 100644 (file)
@@ -41,7 +41,7 @@
  * @ingroup Maintenance ExternalStorage
  */
 
-require_once( dirname( __FILE__ ) . '/../Maintenance.php' );
+require_once( __DIR__ . '/../Maintenance.php' );
 
 class CompressOld extends Maintenance {
        /**
index b200d8a..6020f22 100644 (file)
@@ -18,7 +18,7 @@
  * @ingroup Maintenance ExternalStorage
  */
 
-require_once( dirname( __FILE__ ) . '/../Maintenance.php' );
+require_once( __DIR__ . '/../Maintenance.php' );
 
 class DumpRev extends Maintenance {
        public function __construct() {
index cf30b0e..52ee825 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance ExternalStorage
  */
 
-require_once( dirname( __FILE__ ) . '/../Maintenance.php' );
+require_once( __DIR__ . '/../Maintenance.php' );
 
 class FixBug20757 extends Maintenance {
        var $batchSize = 10000;
index 64f3ada..2dcc25c 100644 (file)
@@ -24,8 +24,8 @@
 define( 'REPORTING_INTERVAL', 1 );
 
 if ( !defined( 'MEDIAWIKI' ) ) {
-       require_once( dirname( __FILE__ ) . '/../commandLine.inc' );
-       require_once( dirname( __FILE__ ) . '/../../includes/ExternalStoreDB.php' );
+       require_once( __DIR__ . '/../commandLine.inc' );
+       require_once( __DIR__ . '/../../includes/ExternalStoreDB.php' );
        require_once( 'resolveStubs.php' );
 
        $fname = 'moveToExternal';
index f3b521f..82ee135 100644 (file)
@@ -20,7 +20,7 @@
  *
  * @ingroup Maintenance ExternalStorage
  */
-require_once( dirname( __FILE__ ) . '/../Maintenance.php' );
+require_once( __DIR__ . '/../Maintenance.php' );
 
 class OrphanStats extends Maintenance {
        public function __construct() {
index 158aa34..4098077 100644 (file)
@@ -23,7 +23,7 @@
  */
 
 $optionsWithArgs = RecompressTracked::getOptionsWithArgs();
-require( dirname( __FILE__ ) . '/../commandLine.inc' );
+require( __DIR__ . '/../commandLine.inc' );
 
 if ( count( $args ) < 1 ) {
        echo "Usage: php recompressTracked.php [options] <cluster> [... <cluster>...]
index 08d0ee0..7e288e1 100644 (file)
@@ -27,7 +27,7 @@ define( 'REPORTING_INTERVAL', 100 );
 if ( !defined( 'MEDIAWIKI' ) ) {
        $optionsWithArgs = array( 'm' );
 
-       require_once( dirname( __FILE__ ) . '/../commandLine.inc' );
+       require_once( __DIR__ . '/../commandLine.inc' );
 
        resolveStubs();
 }
index 817659f..1afecc4 100644 (file)
@@ -19,7 +19,7 @@
  * @ingroup Maintenance ExternalStorage
  */
 
-require_once( dirname( __FILE__ ) . '/../Maintenance.php' );
+require_once( __DIR__ . '/../Maintenance.php' );
 
 class StorageTypeStats extends Maintenance {
        function execute() {
index 9ae2633..998ebe4 100644 (file)
@@ -21,7 +21,7 @@
  */
 
 $optionsWithArgs = array( 'start', 'limit', 'type' );
-require( dirname( __FILE__ ) . '/../commandLine.inc' );
+require( __DIR__ . '/../commandLine.inc' );
 
 if ( !isset( $args[0] )  ) {
        echo "Usage: php testCompression.php [--type=<type>] [--start=<start-date>] [--limit=<num-revs>] <page-title>\n";
index b5f8004..214168a 100644 (file)
@@ -22,7 +22,7 @@
  * @see wfWaitForSlaves()
  */
 
-require( dirname( __FILE__ ) . '/../commandLine.inc' );
+require( __DIR__ . '/../commandLine.inc' );
 
 
 if ( count( $args ) < 1 ) {
@@ -113,7 +113,7 @@ class TrackBlobs {
                        $dbw->query( 'DROP TABLE ' . $dbw->tableName( 'blob_tracking' ) );
                        $dbw->query( 'DROP TABLE ' . $dbw->tableName( 'blob_orphans' ) );
                }
-               $dbw->sourceFile( dirname( __FILE__ ) . '/blob_tracking.sql' );
+               $dbw->sourceFile( __DIR__ . '/blob_tracking.sql' );
        }
 
        function getTextClause() {
index 2dcf757..2e1d1c3 100644 (file)
  * 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( __DIR__ . '/Maintenance.php' );
 
+/**
+ * Maintenance script that syncs one file backend to another based on
+ * the journal of later.
+ *
+ * @ingroup Maintenance
+ */
 class SyncFileBackend extends Maintenance {
        public function __construct() {
                parent::__construct();
index 1c3b14a..ea8b0c4 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 class Undelete extends Maintenance {
        public function __construct() {
index 741ec90..877f136 100644 (file)
@@ -32,8 +32,13 @@ if ( !function_exists( 'version_compare' ) || ( version_compare( phpversion(), '
 }
 
 $wgUseMasterForMaintenance = true;
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
+/**
+ * Maintenance script to run database schema updates.
+ *
+ * @ingroup Maintenance
+ */
 class UpdateMediaWiki extends Maintenance {
 
        function __construct() {
index dbbfb80..4d49dd2 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 /**
- * Maintenance script to provide a better count of the number of articles
- * and update the site statistics table, if desired
+ * Provide a better count of the number of articles
+ * and update the site statistics table, if desired.
  *
  * 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
  * @author Rob Church <robchur@gmail.com>
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
+/**
+ * Maintenance script to provide a better count of the number of articles
+ * and update the site statistics table, if desired.
+ *
+ * @ingroup Maintenance
+ */
 class UpdateArticleCount extends Maintenance {
 
        public function __construct() {
index 2363665..b732508 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 /**
- * Script will find all rows in the categorylinks table whose collation is
- * out-of-date (cl_collation != $wgCategoryCollation) and repopulate cl_sortkey
+ * Find all rows in the categorylinks table whose collation is out-of-date
+ * (cl_collation != $wgCategoryCollation) and repopulate cl_sortkey
  * using the page title and cl_sortkey_prefix.
  *
  * This program is free software; you can redistribute it and/or modify
 
 #$optionsWithArgs = array( 'begin', 'max-slave-lag' );
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
+/**
+ * Maintenance script that will find all rows in the categorylinks table
+ * whose collation is out-of-date.
+ *
+ * @ingroup Maintenance
+ */
 class UpdateCollation extends Maintenance {
        const BATCH_SIZE = 50; // Number of rows to process in one batch
        const SYNC_INTERVAL = 20; // Wait for slaves after this many batches
@@ -53,8 +59,8 @@ TEXT;
                        'collation, though, so it may miss out-of-date rows with a different, ' .
                        'even older collation.', false, true );
                $this->addOption( 'target-collation', 'Set this to the new collation type to ' .
-                       'use instead of $wgCategoryCollation. Usually you should not use this, ' . 
-                       'you should just update $wgCategoryCollation in LocalSettings.php.', 
+                       'use instead of $wgCategoryCollation. Usually you should not use this, ' .
+                       'you should just update $wgCategoryCollation in LocalSettings.php.',
                        false, true );
                $this->addOption( 'dry-run', 'Don\'t actually change the collations, just ' .
                        'compile statistics.' );
index 61545f8..dc7398a 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * Script to normalize double-byte latin UTF-8 characters
+ * Normalize double-byte latin UTF-8 characters
  *
  * Usage: php updateDoubleWidthSearch.php
  *
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
+/**
+ * Maintenance script to normalize double-byte latin UTF-8 characters.
+ *
+ * @ingroup Maintenance
+ */
 class UpdateDoubleWidthSearch extends Maintenance {
 
        public function __construct() {
index ffbdb2b..8699dc2 100644 (file)
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
+/**
+ * Maintenance script that updates page_restrictions table from
+ * old page_restriction column.
+ *
+ * @ingroup Maintenance
+ */
 class UpdateRestrictions extends Maintenance {
        public function __construct() {
                parent::__construct();
index eed3571..2a71e7e 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * Script for periodic off-peak updating of the search index
+ * Periodic off-peak updating of the search index.
  *
  * Usage: php updateSearchIndex.php [-s START] [-e END] [-p POSFILE] [-l LOCKTIME] [-q]
  * Where START is the starting timestamp
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
+/**
+ * Maintenance script for periodic off-peak updating of the search index.
+ *
+ * @ingroup Maintenance
+ */
 class UpdateSearchIndex extends Maintenance {
 
        public function __construct() {
index a1a2e2f..3f1a90b 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 /**
- * Run this script periodically if you have miser mode enabled, to refresh the
- * caches
+ * Update for cached special pages.
+ * Run this script periodically if you have miser mode enabled.
  *
  * 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
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
+/**
+ * Maintenance script to update cached special pages.
+ *
+ * @ingroup Maintenance
+ */
 class UpdateSpecialPages extends Maintenance {
        public function __construct() {
                parent::__construct();
index f0807b6..1e268de 100644 (file)
@@ -28,7 +28,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 define( 'MW_UPGRADE_COPY',     false );
 define( 'MW_UPGRADE_ENCODE',   true  );
@@ -252,7 +252,7 @@ class FiveUpgrade extends Maintenance {
                $this->chunkSize  = $chunksize;
                $this->chunkFinal = $final;
                $this->chunkCount = 0;
-               $this->chunkStartTime = wfTime();
+               $this->chunkStartTime = microtime( true );
                $this->chunkOptions = array( 'IGNORE' );
                $this->chunkTable = $table;
                $this->chunkFunction = $fname;
@@ -273,7 +273,7 @@ class FiveUpgrade extends Maintenance {
                        $this->insertChunk( $chunk );
 
                        $this->chunkCount += count( $chunk );
-                       $now = wfTime();
+                       $now = microtime( true );
                        $delta = $now - $this->chunkStartTime;
                        $rate = $this->chunkCount / $delta;
 
index 5e35747..2a06657 100644 (file)
@@ -25,7 +25,7 @@
 $options = array( 'list', 'nowarn', 'quiet', 'usage', 'dry' );
 $optionsWithArgs = array( 'old', 'new' );
 
-require_once( dirname( __FILE__ ) . '/commandLine.inc' );
+require_once( __DIR__ . '/commandLine.inc' );
 
 /**
  * @ingroup Maintenance
index 64368f6..2181e44 100644 (file)
@@ -1,8 +1,6 @@
 <?php
 /**
- * Script to change users skins on the fly.
- * This is for at least MediaWiki 1.10alpha (r19611) and have not been
- * tested with previous versions. It should probably work with 1.7+.
+ * Script to change users preferences on the fly.
  *
  * Made on an original idea by Fooey (freenode)
  *
index 720ca28..655be43 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * Script to wait until slave lag goes under a certain value.
+ * Wait until slave lag goes under a certain value.
  *
  * 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
  * @see wfWaitForSlaves()
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
+/**
+ * Maintenance script to wait until slave lag goes under a certain value.
+ *
+ * @ingroup Maintenance
+ */
 class WaitForSlave extends Maintenance {
        public function __construct() {
                $this->addArg( 'maxlag', 'How long to wait for the slaves, default 10 seconds', false );
index 3f993f0..065d187 100644 (file)
@@ -8,11 +8,11 @@
 define( 'MW_CONFIG_CALLBACK', 'Installer::overrideConfig' );
 define( 'MEDIAWIKI_INSTALL', true );
 
-chdir( dirname( dirname( __FILE__ ) ) );
+chdir( dirname( __DIR__ ) );
 if ( isset( $_SERVER['MW_COMPILED'] ) ) {
        require ( 'core/includes/WebStart.php' );
 } else {
-       require( dirname( dirname( __FILE__ ) ) . '/includes/WebStart.php' );
+       require( dirname( __DIR__ ) . '/includes/WebStart.php' );
 }
 
 wfInstallerMain();
index 630b05c..95f028a 100644 (file)
@@ -20,7 +20,7 @@
  * @file
  */
 
-require_once( dirname(__FILE__) . '/includes/WebStart.php' );
+require_once( __DIR__ . '/includes/WebStart.php' );
 
 if( $wgRequest->getVal( 'ctype' ) == 'application/xml' ) {
        // Makes testing tweaks about a billion times easier
index ef038c1..bbd5fc8 100644 (file)
@@ -31,7 +31,7 @@ $wgEnableProfileInfo = $wgProfileToDatabase = false;
 if ( isset( $_SERVER['MW_COMPILED'] ) ) {
        require ( 'core/includes/WebStart.php' );
 } else {
-       require ( dirname( __FILE__ ) . '/includes/WebStart.php' );
+       require ( __DIR__ . '/includes/WebStart.php' );
 }
 
 
index fde960e..5e6cfee 100644 (file)
@@ -24,7 +24,7 @@
 if ( isset( $_SERVER['MW_COMPILED'] ) ) {
        require ( 'phase3/includes/WebStart.php' );
 } else {
-       require ( dirname( __FILE__ ) . '/includes/WebStart.php' );
+       require ( __DIR__ . '/includes/WebStart.php' );
 }
 
 global $wgArticlePath;
index 380a099..5156dd0 100644 (file)
@@ -160,6 +160,7 @@ return array(
        ),
        'jquery.highlightText' => array(
                'scripts' => 'resources/jquery/jquery.highlightText.js',
+               'dependencies' => 'jquery.mwExtension',
        ),
        'jquery.hoverIntent' => array(
                'scripts' => 'resources/jquery/jquery.hoverIntent.js',
@@ -175,10 +176,6 @@ return array(
                'styles' => 'resources/jquery/jquery.makeCollapsible.css',
                'messages' => array( 'collapsible-expand', 'collapsible-collapse' ),
        ),
-       'jquery.messageBox' => array(
-               'scripts' => 'resources/jquery/jquery.messageBox.js',
-               'styles' => 'resources/jquery/jquery.messageBox.css',
-       ),
        'jquery.mockjax' => array(
                'scripts' => 'resources/jquery/jquery.mockjax.js',
        ),
@@ -204,6 +201,10 @@ return array(
                'scripts' => 'resources/jquery/jquery.spinner.js',
                'styles' => 'resources/jquery/jquery.spinner.css',
        ),
+       'jquery.jStorage' => array(
+               'scripts' => 'resources/jquery/jquery.jStorage.js',
+               'dependencies' => 'jquery.json',
+       ),
        'jquery.suggestions' => array(
                'scripts' => 'resources/jquery/jquery.suggestions.js',
                'styles' => 'resources/jquery/jquery.suggestions.css',
@@ -216,6 +217,7 @@ return array(
                'scripts' => 'resources/jquery/jquery.tablesorter.js',
                'styles' => 'resources/jquery/jquery.tablesorter.css',
                'messages' => array( 'sort-descending', 'sort-ascending' ),
+               'dependencies' => 'jquery.mwExtension',
        ),
        'jquery.textSelection' => array(
                'scripts' => 'resources/jquery/jquery.textSelection.js',
@@ -602,6 +604,16 @@ return array(
        'mediawiki.htmlform' => array(
                'scripts' => 'resources/mediawiki/mediawiki.htmlform.js',
        ),
+       'mediawiki.notification' => array(
+               'styles' => 'resources/mediawiki/mediawiki.notification.css',
+               'scripts' => 'resources/mediawiki/mediawiki.notification.js',
+               'dependencies' => array(
+                       'mediawiki.page.startup',
+               ),
+       ),
+       'mediawiki.notify' => array(
+               'scripts' => 'resources/mediawiki/mediawiki.notify.js',
+       ),
        'mediawiki.Title' => array(
                'scripts' => 'resources/mediawiki/mediawiki.Title.js',
                'dependencies' => 'mediawiki.util',
@@ -621,8 +633,8 @@ return array(
                'dependencies' => array(
                        'jquery.client',
                        'jquery.cookie',
-                       'jquery.messageBox',
                        'jquery.mwExtension',
+                       'mediawiki.notify',
                ),
                'messages' => array( 'showtoc', 'hidetoc' ),
                'position' => 'top', // For $wgPreloadJavaScriptMwUtil
@@ -671,7 +683,6 @@ return 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',
@@ -687,7 +698,6 @@ return array(
                        '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',
                        'hu' => 'resources/mediawiki.language/languages/hu.js',
@@ -719,7 +729,21 @@ return array(
                        'uk' => 'resources/mediawiki.language/languages/uk.js',
                        'wa' => 'resources/mediawiki.language/languages/wa.js',
                ),
-               'dependencies' => array( 'mediawiki.language.data' ),
+               'dependencies' => array(
+                               'mediawiki.language.data',
+                               'mediawiki.cldr'
+                       ),
+       ),
+
+       'mediawiki.cldr' => array(
+               'scripts' => 'resources/mediawiki.language/mediawiki.cldr.js',
+               'dependencies' => array(
+                       'mediawiki.libs.pluralruleparser',
+               ),
+       ),
+
+       'mediawiki.libs.pluralruleparser' => array(
+               'scripts' => 'resources/mediawiki.libs/CLDRPluralRuleParser.js',
        ),
 
        'mediawiki.language.init' => array(
@@ -765,7 +789,9 @@ return array(
                'dependencies' => array(
                        'mediawiki.page.startup',
                        'mediawiki.api.watch',
-                       'mediawiki.util'
+                       'mediawiki.util',
+                       'mediawiki.notify',
+                       'jquery.mwExtension',
                ),
                'messages' => array(
                        'watch',
@@ -907,7 +933,10 @@ return array(
                'scripts' => 'common/preview.js',
                'remoteBasePath' => $GLOBALS['wgStylePath'],
                'localBasePath' => $GLOBALS['wgStyleDirectory'],
-               'dependencies' => 'mediawiki.legacy.wikibits',
+               'dependencies' => array(
+                       'mediawiki.legacy.wikibits',
+                       'jquery.form',
+               )
        ),
        'mediawiki.legacy.protect' => array(
                'scripts' => 'common/protect.js',
index 0149ed7..1e99769 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Effects Blind 1.8.22
+ * jQuery UI Effects Blind 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index e376cb9..7927a4a 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Effects Bounce 1.8.22
+ * jQuery UI Effects Bounce 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index 1ae4209..d8b8218 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Effects Clip 1.8.22
+ * jQuery UI Effects Clip 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index a0efe68..91ac575 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Effects 1.8.22
+ * jQuery UI Effects 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -307,7 +307,7 @@ $.fn.extend({
 /******************************************************************************/
 
 $.extend($.effects, {
-       version: "1.8.22",
+       version: "1.8.23",
 
        // Saves a set of properties in a data storage
        save: function(element, set) {
@@ -564,210 +564,49 @@ $.fn.extend({
 /*********************************** 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.
- *
-*/
+// based on easing equations from Robert Penner (http://www.robertpenner.com/easing)
 
-// t: current time, b: begInnIng value, c: change In value, d: duration
-$.easing.jswing = $.easing.swing;
+var baseEasings = {};
 
-$.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;
+$.each( [ "Quad", "Cubic", "Quart", "Quint", "Expo" ], function( i, name ) {
+       baseEasings[ name ] = function( p ) {
+               return Math.pow( p, i + 2 );
+       };
+});
+
+$.extend( baseEasings, {
+       Sine: function ( p ) {
+               return 1 - Math.cos( p * Math.PI / 2 );
        },
-       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;
+       Circ: function ( p ) {
+               return 1 - Math.sqrt( 1 - p * p );
        },
-       easeInBounce: function (x, t, b, c, d) {
-               return c - $.easing.easeOutBounce (x, d-t, 0, c, d) + b;
+       Elastic: function( p ) {
+               return p === 0 || p === 1 ? p :
+                       -Math.pow( 2, 8 * (p - 1) ) * Math.sin( ( (p - 1) * 80 - 7.5 ) * Math.PI / 15 );
        },
-       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;
-               }
+       Back: function( p ) {
+               return p * p * ( 3 * p - 2 );
        },
-       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;
+       Bounce: function ( p ) {
+               var pow2,
+                       bounce = 4;
+
+               while ( p < ( ( pow2 = Math.pow( 2, --bounce ) ) - 1 ) / 11 ) {}
+               return 1 / Math.pow( 4, 3 - bounce ) - 7.5625 * Math.pow( ( pow2 * 3 - 2 ) / 22 - p, 2 );
        }
 });
 
-/*
- *
- * 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.
- *
- */
+$.each( baseEasings, function( name, easeIn ) {
+       $.easing[ "easeIn" + name ] = easeIn;
+       $.easing[ "easeOut" + name ] = function( p ) {
+               return 1 - easeIn( 1 - p );
+       };
+       $.easing[ "easeInOut" + name ] = function( p ) {
+               return p < .5 ?
+                       easeIn( p * 2 ) / 2 :
+                       easeIn( p * -2 + 2 ) / -2 + 1;
+       };
+});
 
 })(jQuery);
index dc5ce44..6d25bd3 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Effects Drop 1.8.22
+ * jQuery UI Effects Drop 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index 6be5582..1caeca8 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Effects Explode 1.8.22
+ * jQuery UI Effects Explode 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index c76e6bf..6124979 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Effects Fade 1.8.22
+ * jQuery UI Effects Fade 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index 1788066..81b15b8 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Effects Fold 1.8.22
+ * jQuery UI Effects Fold 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index 451b02d..dee0639 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Effects Highlight 1.8.22
+ * jQuery UI Effects Highlight 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index f989174..45cdc88 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Effects Pulsate 1.8.22
+ * jQuery UI Effects Pulsate 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index d5761a5..44ecee1 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Effects Scale 1.8.22
+ * jQuery UI Effects Scale 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index 6c2a8db..bc1fd19 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Effects Shake 1.8.22
+ * jQuery UI Effects Shake 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index c77fad6..0a43027 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Effects Slide 1.8.22
+ * jQuery UI Effects Slide 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index 5a68ae8..64f2a17 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Effects Transfer 1.8.22
+ * jQuery UI Effects Transfer 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index d3dbdec..b3340e0 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Accordion 1.8.22
+ * jQuery UI Accordion 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -518,7 +518,7 @@ $.widget( "ui.accordion", {
 });
 
 $.extend( $.ui.accordion, {
-       version: "1.8.22",
+       version: "1.8.23",
        animations: {
                slide: function( options, additions ) {
                        options = $.extend({
index 501b604..b634cce 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Autocomplete 1.8.22
+ * jQuery UI Autocomplete 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index bdee27c..db2637e 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Button 1.8.22
+ * jQuery UI Button 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index 40211cc..1285a6d 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI 1.8.22
+ * jQuery UI 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -18,7 +18,7 @@ if ( $.ui.version ) {
 }
 
 $.extend( $.ui, {
-       version: "1.8.22",
+       version: "1.8.23",
 
        keyCode: {
                ALT: 18,
index 58d3ff2..7ea5b07 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Datepicker 1.8.22
+ * jQuery UI Datepicker 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -12,7 +12,7 @@
  */
 (function( $, undefined ) {
 
-$.extend($.ui, { datepicker: { version: "1.8.22" } });
+$.extend($.ui, { datepicker: { version: "1.8.23" } });
 
 var PROP_NAME = 'datepicker';
 var dpuuid = new Date().getTime();
@@ -1408,7 +1408,7 @@ $.extend(Datepicker.prototype, {
         */
        _attachHandlers: function(inst) {
                var stepMonths = this._get(inst, 'stepMonths');
-               var id = '#' + inst.id;
+               var id = '#' + inst.id.replace( /\\\\/g, "\\" );
                inst.dpDiv.find('[data-handler]').map(function () {
                        var handler = {
                                prev: function () {
@@ -1845,7 +1845,7 @@ $.fn.datepicker = function(options){
 $.datepicker = new Datepicker(); // singleton instance
 $.datepicker.initialized = false;
 $.datepicker.uuid = new Date().getTime();
-$.datepicker.version = "1.8.22";
+$.datepicker.version = "1.8.23";
 
 // Workaround for #4055
 // Add another global to avoid noConflict issues with inline event handlers
index bc66af5..082bf2c 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Dialog 1.8.22
+ * jQuery UI Dialog 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -37,18 +37,6 @@ var uiDialogClasses =
                maxWidth: true,
                minHeight: true,
                minWidth: true
-       },
-       // support for jQuery 1.3.2 - handle common attrFn methods for dialog
-       attrFn = $.attrFn || {
-               val: true,
-               css: true,
-               html: true,
-               text: true,
-               data: true,
-               width: true,
-               height: true,
-               offset: true,
-               click: true
        };
 
 $.widget("ui.dialog", {
@@ -397,7 +385,7 @@ $.widget("ui.dialog", {
                                        if ( key === "click" ) {
                                                return;
                                        }
-                                       if ( key in attrFn ) {
+                                       if ( key in button ) {
                                                button[ key ]( value );
                                        } else {
                                                button.attr( key, value );
@@ -702,7 +690,7 @@ $.widget("ui.dialog", {
 });
 
 $.extend($.ui.dialog, {
-       version: "1.8.22",
+       version: "1.8.23",
 
        uuid: 0,
        maxZ: 0,
index f93bb0b..6da1aaf 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Draggable 1.8.22
+ * jQuery UI Draggable 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -513,7 +513,7 @@ $.widget("ui.draggable", $.ui.mouse, {
 });
 
 $.extend($.ui.draggable, {
-       version: "1.8.22"
+       version: "1.8.23"
 });
 
 $.ui.plugin.add("draggable", "connectToSortable", {
index f4ae96a..4b98b3a 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Droppable 1.8.22
+ * jQuery UI Droppable 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -147,7 +147,7 @@ $.widget("ui.droppable", {
 });
 
 $.extend($.ui.droppable, {
-       version: "1.8.22"
+       version: "1.8.23"
 });
 
 $.ui.intersect = function(draggable, droppable, toleranceMode) {
index c7f37d2..e051055 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Mouse 1.8.22
+ * jQuery UI Mouse 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -45,9 +45,11 @@ $.widget("ui.mouse", {
        // other instances of mouse
        _mouseDestroy: function() {
                this.element.unbind('.'+this.widgetName);
-               $(document)
-                       .unbind('mousemove.'+this.widgetName, this._mouseMoveDelegate)
-                       .unbind('mouseup.'+this.widgetName, this._mouseUpDelegate);
+               if ( this._mouseMoveDelegate ) {
+                       $(document)
+                               .unbind('mousemove.'+this.widgetName, this._mouseMoveDelegate)
+                               .unbind('mouseup.'+this.widgetName, this._mouseUpDelegate);
+               }
        },
 
        _mouseDown: function(event) {
index 881dffe..03f2606 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Position 1.8.22
+ * jQuery UI Position 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -257,6 +257,11 @@ if ( !$.offset.setOffset ) {
        };
 }
 
+// jQuery <1.4.3 uses curCSS, in 1.4.3 - 1.7.2 curCSS = css, 1.8+ only has css
+if ( !$.curCSS ) {
+       $.curCSS = $.css;
+}
+
 // fraction support test (older versions of jQuery don't support fractions)
 (function () {
        var body = document.getElementsByTagName( "body" )[ 0 ], 
index 70ab985..c1d9f3c 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Progressbar 1.8.22
+ * jQuery UI Progressbar 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -103,7 +103,7 @@ $.widget( "ui.progressbar", {
 });
 
 $.extend( $.ui.progressbar, {
-       version: "1.8.22"
+       version: "1.8.23"
 });
 
 })( jQuery );
index d8f6c88..f6ce694 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Resizable 1.8.22
+ * jQuery UI Resizable 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -540,7 +540,7 @@ $.widget("ui.resizable", $.ui.mouse, {
 });
 
 $.extend($.ui.resizable, {
-       version: "1.8.22"
+       version: "1.8.23"
 });
 
 /*
index 9d9e553..ac5bf04 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Selectable 1.8.22
+ * jQuery UI Selectable 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -261,7 +261,7 @@ $.widget("ui.selectable", $.ui.mouse, {
 });
 
 $.extend($.ui.selectable, {
-       version: "1.8.22"
+       version: "1.8.23"
 });
 
 })(jQuery);
index 4b24fb9..5ea589e 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Slider 1.8.22
+ * jQuery UI Slider 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -656,7 +656,7 @@ $.widget( "ui.slider", $.ui.mouse, {
 });
 
 $.extend( $.ui.slider, {
-       version: "1.8.22"
+       version: "1.8.23"
 });
 
 }(jQuery));
index 0e11f46..1d87f65 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Sortable 1.8.22
+ * jQuery UI Sortable 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -1078,7 +1078,7 @@ $.widget("ui.sortable", $.ui.mouse, {
 });
 
 $.extend($.ui.sortable, {
-       version: "1.8.22"
+       version: "1.8.23"
 });
 
 })(jQuery);
index 7a50626..de453cc 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Tabs 1.8.22
+ * jQuery UI Tabs 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -698,7 +698,7 @@ $.widget( "ui.tabs", {
 });
 
 $.extend( $.ui.tabs, {
-       version: "1.8.22"
+       version: "1.8.23"
 });
 
 /*
index 8a9cc3f..befdcc2 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Widget 1.8.22
+ * jQuery UI Widget 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index e15202f..1ce7d5e 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Accordion 1.8.22
+ * jQuery UI Accordion 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index c697c3d..a9817ce 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Autocomplete 1.8.22
+ * jQuery UI Autocomplete 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -13,7 +13,7 @@
 * html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */
 
 /*
- * jQuery UI Menu 1.8.22
+ * jQuery UI Menu 1.8.23
  *
  * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index d4984fb..c1f2600 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Button 1.8.22
+ * jQuery UI Button 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index f8e7e5b..c24627e 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI CSS Framework 1.8.22
+ * jQuery UI CSS Framework 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index d543625..0282eee 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Datepicker 1.8.22
+ * jQuery UI Datepicker 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index bd264da..ba50ba5 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Dialog 1.8.22
+ * jQuery UI Dialog 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index 8f3774e..c775a33 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Progressbar 1.8.22
+ * jQuery UI Progressbar 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index 568b570..420c4af 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Resizable 1.8.22
+ * jQuery UI Resizable 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index 54d504b..3320274 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Selectable 1.8.22
+ * jQuery UI Selectable 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index e0f7bea..650ad7e 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Slider 1.8.22
+ * jQuery UI Slider 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index 6da4af3..64ac9bf 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Tabs 1.8.22
+ * jQuery UI Tabs 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index 36b331c..536c8e0 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI CSS Framework 1.8.22
+ * jQuery UI CSS Framework 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index 1b414dd..488d106 100644 (file)
  * </script>
  *
  */
-
 ( function ( $ ) {
        $.fn.arrowSteps = function () {
+               var $steps, width, arrowWidth;
                this.addClass( 'arrowSteps' );
-               var $steps = this.find( 'li' );
+               $steps = this.find( 'li' );
 
-               var width = parseInt( 100 / $steps.length, 10 );
+               width = parseInt( 100 / $steps.length, 10 );
                $steps.css( 'width', width + '%' );
 
                // every step except the last one has an arrow at the right hand side. Also add in the padding
                // for the calculated arrow width.
-               var arrowWidth = parseInt( this.outerHeight(), 10 );
+               arrowWidth = parseInt( this.outerHeight(), 10 );
                $steps.filter( ':not(:last-child)' ).addClass( 'arrow' )
                      .find( 'div' ).css( 'padding-right', arrowWidth.toString() + 'px' );
 
@@ -60,8 +60,8 @@
        };
 
        $.fn.arrowStepsHighlight = function ( selector ) {
-               var $steps = this.data( 'arrowSteps' );
-               var $previous;
+               var $previous,
+                       $steps = this.data( 'arrowSteps' );
                $.each( $steps, function ( i, step ) {
                        var $step = $( step );
                        if ( $step.is( selector ) ) {
index 23ba074..04bb301 100644 (file)
@@ -3,10 +3,12 @@
  */
 ( function ( $ ) {
 
-// Cache ellipsed substrings for every string-width-position combination
-var cache = { };
-// Use a separate cache when match highlighting is enabled
-var matchTextCache = { };
+var
+       // Cache ellipsed substrings for every string-width-position combination
+       cache = { },
+
+       // Use a separate cache when match highlighting is enabled
+       matchTextCache = { };
 
 $.fn.autoEllipsis = function ( options ) {
        options = $.extend( {
@@ -19,7 +21,7 @@ $.fn.autoEllipsis = function ( options ) {
        $(this).each( function () {
                var $container, $trimmableText,
                        text, trimmableText, w, pw,
-                       l, r, i, side,
+                       l, r, i, side, m,
                        $el = $(this);
                if ( options.restoreText ) {
                        if ( !$el.data( 'autoEllipsis.originalText' ) ) {
@@ -90,7 +92,7 @@ $.fn.autoEllipsis = function ( options ) {
                                        l = 0;
                                        r = trimmableText.length;
                                        do {
-                                               var m = Math.ceil( ( l + r ) / 2 );
+                                               m = Math.ceil( ( l + r ) / 2 );
                                                $trimmableText.text( trimmableText.substr( 0, m ) + '...' );
                                                if ( $trimmableText.width() + pw > w ) {
                                                        // Text is too long
index 49063ba..92e7255 100644 (file)
@@ -2,19 +2,19 @@
        min-width: 8px;
        height: 14px;
        border: 1px solid white;
-       border-radius: 8px;
        -moz-border-radius: 8px;
        -webkit-border-radius: 8px;
-       box-shadow: 0px 1px 4px #ccc;
+       border-radius: 8px;
        -moz-box-shadow: 0px 1px 4px #ccc;
        -webkit-box-shadow: 0px 1px 4px #ccc;
+       box-shadow: 0px 1px 4px #ccc;
        background-color: #b60a00;
-       background-image: linear-gradient(bottom, #a70802 0%, #cf0e00 100%);
        background-image: -o-linear-gradient(bottom, #a70802 0%, #cf0e00 100%);
        background-image: -moz-linear-gradient(bottom, #a70802 0%, #cf0e00 100%);
+       background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #a70802), color-stop(1, #cf0e00));
        background-image: -webkit-linear-gradient(bottom, #a70802 0%, #cf0e00 100%);
        background-image: -ms-linear-gradient(bottom, #a70802 0%, #cf0e00 100%);
-       background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #a70802), color-stop(1, #cf0e00));
+       background-image: linear-gradient(bottom, #a70802 0%, #cf0e00 100%);
        padding: 0 3px;
        text-align: center;
 }
index d40acc6..04495b7 100644 (file)
@@ -1,9 +1,16 @@
-// Badger v1.0 by Daniel Raftery
-// http://thrivingkings.com/badger
-// http://twitter.com/ThrivingKings
-// Modified by Ryan Kaldari <rkaldari@wikimedia.org>
+/**
+ * jQuery Badge plugin
+ *
+ * Based on Badger plugin by Daniel Raftery (http://thrivingkings.com/badger).
+ *
+ * @license MIT
+ */
 
 /**
+ * @author Ryan Kaldari <rkaldari@wikimedia.org>, 2012
+ * @author Andrew Garrett <agarrett@wikimedia.org>, 2012
+ * @author Marius Hoch <hoo@online.de>, 2012
+ *
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to deal
  * in the Software without restriction, including without limitation the rights
  *
  * This program is distributed WITHOUT ANY WARRANTY.
  */
+( function ( $ ) {
 
-(function( $ ) {
-       $.fn.badge = function( badge, options ) {
-               var existingBadge = this.find( '.mw-badge' );
-               options = $.extend( {}, options );
+       /**
+        * Allows you to put a numeric "badge" on an item on the page.
+        * See mediawiki.org/wiki/ResourceLoader/Default_modules#jQuery.badge
+        *
+        * @param {string|number} badgeCount An explicit number, or "+n"/ "-n"
+        *  to modify the existing value. If the new value is equal or lower than 0,
+        *  any existing badge will be removed. The badge container will be appended
+        *  to the selected element(s).
+        * @param {Object} options Optional parameters specified below
+        *   type: 'inline' or 'overlay' (default)
+        *   callback: will be called with the number now shown on the badge as a parameter
+        */
+       $.fn.badge = function ( badgeCount, options ) {
+               var $badge,
+                       oldBadgeCount,
+                       newBadgeCount,
+                       $existingBadge = this.find( '.mw-badge' );
 
-               badge = String(badge);
-               if ( badge.charAt(0) === '+' ) {
-                       if ( existingBadge.length > 0 ) {
-                               oldBadge = existingBadge.text();
-                               badge = Math.round( Number( oldBadge ) + Number( badge.substr(1) ) );
-                       } else {
-                               badge = badge.substr(1);
-                       }
-               } else if ( badge.charAt(0) === '-' ) {
-                       if ( existingBadge.length > 0 ) {
-                               oldBadge = existingBadge.text();
-                               badge = Math.round( Number( oldBadge ) - Number( badge.substr(1) ) );
+               options = $.extend( { type : 'overlay' }, options );
+
+               // If there is no existing badge, this will give an empty string
+               oldBadgeCount = Number( $existingBadge.text() );
+               if ( isNaN( oldBadgeCount ) ) {
+                       oldBadgeCount = 0;
+               }
+
+               // If badgeCount is a number, use that as the new badge
+               if ( typeof badgeCount === 'number' ) {
+                       newBadgeCount = badgeCount;
+               } else if ( typeof badgeCount === 'string' ) {
+                       // If badgeCount is "+x", add x to the old badge
+                       if ( badgeCount.charAt(0) === '+' ) {
+                               newBadgeCount = oldBadgeCount + Number( badgeCount.substr(1) );
+                       // If badgeCount is "-x", subtract x from the old badge
+                       } else if ( badgeCount.charAt(0) === '-' ) {
+                               newBadgeCount = oldBadgeCount - Number( badgeCount.substr(1) );
+                       // If badgeCount can be converted into a number, convert it
+                       } else if ( !isNaN( Number( badgeCount ) ) ) {
+                               newBadgeCount = Number( badgeCount );
                        } else {
-                               badge = 0;
+                               newBadgeCount = 0;
                        }
+               // Other types are not supported, fall back to 0.
+               } else {
+                       newBadgeCount = 0;
                }
 
-               if ( Number(badge) <= 0 ) {
-                       // Clear any existing badge
-                       existingBadge.remove();
+               // Badge count must be a whole number
+               newBadgeCount = Math.round( newBadgeCount );
+
+               if ( newBadgeCount <= 0 ) {
+                       // Badges should only exist for values > 0.
+                       $existingBadge.remove();
                } else {
                        // Don't add duplicates
-                       var $badge = existingBadge;
-                       if ( existingBadge.length > 0 ) {
-                               this.find( '.mw-badge-content' ).text( badge );
+                       if ( $existingBadge.length ) {
+                               $badge = $existingBadge;
+                               // Insert the new count into the badge
+                               this.find( '.mw-badge-content' ).text( newBadgeCount );
                        } else {
-                               $badge = $('<div/>')
-                                       .addClass('mw-badge')
-                                       .addClass('mw-badge-overlay')
+                               // Contruct a new badge with the count
+                               $badge = $( '<div>' )
+                                       .addClass( 'mw-badge' )
                                        .append(
-                                               $('<span/>')
-                                                       .addClass('mw-badge-content')
-                                                       .text(badge)
+                                               $( '<span>' )
+                                                       .addClass( 'mw-badge-content' )
+                                                       .text( newBadgeCount )
                                        );
-                               this.append($badge);
+                               this.append( $badge );
                        }
 
-                       if ( options.type ) {
-                               if ( options.type == 'inline' ) {
-                                       $badge.removeClass('mw-badge-overlay')
-                                               .addClass('mw-badge-inline');
-                               } else if ( options.type == 'overlay' ) {
-                                       $badge.removeClass('mw-badge-inline')
-                                               .addClass('mw-badge-overlay');
-                               }
+                       if ( options.type === 'inline' ) {
+                               $badge
+                                       .removeClass( 'mw-badge-overlay' )
+                                       .addClass( 'mw-badge-inline' );
+                       // Default: overlay
+                       } else {
+                               $badge
+                                       .removeClass( 'mw-badge-inline' )
+                                       .addClass( 'mw-badge-overlay' );
+
                        }
 
-                       // If a callback was specified, call it with the badge number
-                       if ( options.callback ) {
-                               options.callback( badge );
+                       // If a callback was specified, call it with the badge count
+                       if ( $.isFunction( options.callback ) ) {
+                               options.callback( newBadgeCount );
                        }
                }
        };
-} ) ( jQuery );
+}( jQuery ) );
index 3d7f94d..1990dc0 100644 (file)
@@ -6,10 +6,9 @@
  * @author Krinkle <krinklemail@gmail.com>
  * @license GPL v2
  */
-( function( $ ) {
+( function ( $ ) {
        $.fn.checkboxShiftClick = function ( text ) {
-               var prevCheckbox = null;
-               var $box = this;
+               var prevCheckbox = null, $box = this;
                // When our boxes are clicked..
                $box.click( function ( e ) {
                        // And one has been clicked before...
@@ -18,7 +17,7 @@
                                $box.slice(
                                        Math.min( $box.index( prevCheckbox ), $box.index( e.target ) ),
                                        Math.max( $box.index( prevCheckbox ), $box.index( e.target ) ) + 1
-                               ).prop( 'checked', e.target.checked ? true : false );
+                               ).prop( 'checked', !!e.target.checked );
                        }
                        // Either way, update the prevCheckbox variable to the one clicked now
                        prevCheckbox = e.target;
index 26eea96..24f8959 100644 (file)
@@ -32,7 +32,7 @@
                 *  }
                 */
                profile: function ( nav ) {
-                       /*jshint boss:true */
+                       /*jshint boss: true */
 
                        if ( nav === undefined ) {
                                nav = window.navigator;
index a3396a2..063f260 100644 (file)
        $.fn.expandableField = function () {
 
                // Multi-context fields
-               var returnValue;
-               var args = arguments;
+               var returnValue,
+                       args = arguments;
 
                $( this ).each( function () {
-                       var key;
+                       var key, context;
 
                        /* Construction / Loading */
 
-                       var context = $( this ).data( 'expandableField-context' );
+                       context = $( this ).data( 'expandableField-context' );
 
                        // TODO: Do we need to check both null and undefined?
                        if ( context === undefined || context === null ) {
index fdcdd15..13e9a55 100644 (file)
 /*!
  * jQuery Form Plugin
- * version: 2.84 (12-AUG-2011)
+ * version: 3.14 (30-JUL-2012)
  * @requires jQuery v1.3.2 or later
  *
  * Examples and documentation at: http://malsup.com/jquery/form/
+ * Project repository: https://github.com/malsup/form
  * Dual licensed under the MIT and GPL licenses:
- *   http://www.opensource.org/licenses/mit-license.php
- *   http://www.gnu.org/licenses/gpl.html
+ *    http://malsup.github.com/mit-license.txt
+ *    http://malsup.github.com/gpl-license-v2.txt
  */
+/*global ActiveXObject alert */
 ;(function($) {
+"use strict";
 
 /*
-       Usage Note:
-       -----------
-       Do not use both ajaxSubmit and ajaxForm on the same form.  These
-       functions are intended to be exclusive.  Use ajaxSubmit if you want
-       to bind your own submit handler to the form.  For example,
-
-       $(document).ready(function() {
-               $('#myForm').bind('submit', function(e) {
-                       e.preventDefault(); // <-- important
-                       $(this).ajaxSubmit({
-                               target: '#output'
-                       });
-               });
-       });
-
-       Use ajaxForm when you want the plugin to manage all the event binding
-       for you.  For example,
-
-       $(document).ready(function() {
-               $('#myForm').ajaxForm({
-                       target: '#output'
-               });
-       });
-
-       When using ajaxForm, the ajaxSubmit function will be invoked for you
-       at the appropriate time.
+    Usage Note:
+    -----------
+    Do not use both ajaxSubmit and ajaxForm on the same form.  These
+    functions are mutually exclusive.  Use ajaxSubmit if you want
+    to bind your own submit handler to the form.  For example,
+
+    $(document).ready(function() {
+        $('#myForm').on('submit', function(e) {
+            e.preventDefault(); // <-- important
+            $(this).ajaxSubmit({
+                target: '#output'
+            });
+        });
+    });
+
+    Use ajaxForm when you want the plugin to manage all the event binding
+    for you.  For example,
+
+    $(document).ready(function() {
+        $('#myForm').ajaxForm({
+            target: '#output'
+        });
+    });
+    
+    You can also use ajaxForm with delegation (requires jQuery v1.7+), so the
+    form does not have to exist when you invoke ajaxForm:
+
+    $('#myForm').ajaxForm({
+        delegation: true,
+        target: '#output'
+    });
+    
+    When using ajaxForm, the ajaxSubmit function will be invoked for you
+    at the appropriate time.
 */
 
+/**
+ * Feature detection
+ */
+var feature = {};
+feature.fileapi = $("<input type='file'/>").get(0).files !== undefined;
+feature.formdata = window.FormData !== undefined;
+
 /**
  * ajaxSubmit() provides a mechanism for immediately submitting
  * an HTML form using AJAX.
  */
 $.fn.ajaxSubmit = function(options) {
-       // fast fail if nothing selected (http://dev.jquery.com/ticket/2752)
-       if (!this.length) {
-               log('ajaxSubmit: skipping submit process - no element selected');
-               return this;
-       }
-       
-       var method, action, url, $form = this;
-
-       if (typeof options == 'function') {
-               options = { success: options };
-       }
-
-       method = this.attr('method');
-       action = this.attr('action');
-       url = (typeof action === 'string') ? $.trim(action) : '';
-       url = url || window.location.href || '';
-       if (url) {
-               // clean url (don't include hash vaue)
-               url = (url.match(/^([^#]+)/)||[])[1];
-       }
-
-       options = $.extend(true, {
-               url:  url,
-               success: $.ajaxSettings.success,
-               type: method || 'GET',
-               iframeSrc: /^https/i.test(window.location.href || '') ? 'javascript:false' : 'about:blank'
-       }, options);
-
-       // hook for manipulating the form data before it is extracted;
-       // convenient for use with rich editors like tinyMCE or FCKEditor
-       var veto = {};
-       this.trigger('form-pre-serialize', [this, options, veto]);
-       if (veto.veto) {
-               log('ajaxSubmit: submit vetoed via form-pre-serialize trigger');
-               return this;
-       }
-
-       // provide opportunity to alter form data before it is serialized
-       if (options.beforeSerialize && options.beforeSerialize(this, options) === false) {
-               log('ajaxSubmit: submit aborted via beforeSerialize callback');
-               return this;
-       }
-
-       var n,v,a = this.formToArray(options.semantic);
-       if (options.data) {
-               options.extraData = options.data;
-               for (n in options.data) {
-                       if( $.isArray(options.data[n]) ) {
-                               for (var k in options.data[n]) {
-                                       a.push( { name: n, value: options.data[n][k] } );
-                               }
-                       }
-                       else {
-                               v = options.data[n];
-                               v = $.isFunction(v) ? v() : v; // if value is fn, invoke it
-                               a.push( { name: n, value: v } );
-                       }
-               }
-       }
-
-       // give pre-submit callback an opportunity to abort the submit
-       if (options.beforeSubmit && options.beforeSubmit(a, this, options) === false) {
-               log('ajaxSubmit: submit aborted via beforeSubmit callback');
-               return this;
-       }
-
-       // fire vetoable 'validate' event
-       this.trigger('form-submit-validate', [a, this, options, veto]);
-       if (veto.veto) {
-               log('ajaxSubmit: submit vetoed via form-submit-validate trigger');
-               return this;
-       }
-
-       var q = $.param(a);
-
-       if (options.type.toUpperCase() == 'GET') {
-               options.url += (options.url.indexOf('?') >= 0 ? '&' : '?') + q;
-               options.data = null;  // data is null for 'get'
-       }
-       else {
-               options.data = q; // data is the query string for 'post'
-       }
-
-       var callbacks = [];
-       if (options.resetForm) {
-               callbacks.push(function() { $form.resetForm(); });
-       }
-       if (options.clearForm) {
-               callbacks.push(function() { $form.clearForm(); });
-       }
-
-       // perform a load on the target only if dataType is not provided
-       if (!options.dataType && options.target) {
-               var oldSuccess = options.success || function(){};
-               callbacks.push(function(data) {
-                       var fn = options.replaceTarget ? 'replaceWith' : 'html';
-                       $(options.target)[fn](data).each(oldSuccess, arguments);
-               });
-       }
-       else if (options.success) {
-               callbacks.push(options.success);
-       }
-
-       options.success = function(data, status, xhr) { // jQuery 1.4+ passes xhr as 3rd arg
-               var context = options.context || options;   // jQuery 1.4+ supports scope context 
-               for (var i=0, max=callbacks.length; i < max; i++) {
-                       callbacks[i].apply(context, [data, status, xhr || $form, $form]);
-               }
-       };
-
-       // are there files to upload?
-       var fileInputs = $('input:file', this).length > 0;
-       var mp = 'multipart/form-data';
-       var multipart = ($form.attr('enctype') == mp || $form.attr('encoding') == mp);
-
-       // options.iframe allows user to force iframe mode
-       // 06-NOV-09: now defaulting to iframe mode if file input is detected
-   if (options.iframe !== false && (fileInputs || options.iframe || multipart)) {
-          // hack to fix Safari hang (thanks to Tim Molendijk for this)
-          // see:  http://groups.google.com/group/jquery-dev/browse_thread/thread/36395b7ab510dd5d
-          if (options.closeKeepAlive) {
-                  $.get(options.closeKeepAlive, function() { fileUpload(a); });
-               }
-          else {
-                  fileUpload(a);
-               }
-   }
-   else {
-               // IE7 massage (see issue 57)
-               if ($.browser.msie && method == 'get') { 
-                       var ieMeth = $form[0].getAttribute('method');
-                       if (typeof ieMeth === 'string')
-                               options.type = ieMeth;
-               }
-               $.ajax(options);
-   }
-
-       // fire 'notify' event
-       this.trigger('form-submit-notify', [this, options]);
-       return this;
-
-
-       // private function for handling file uploads (hat tip to YAHOO!)
-       function fileUpload(a) {
-               var form = $form[0], el, i, s, g, id, $io, io, xhr, sub, n, timedOut, timeoutHandle;
+    /*jshint scripturl:true */
+
+    // fast fail if nothing selected (http://dev.jquery.com/ticket/2752)
+    if (!this.length) {
+        log('ajaxSubmit: skipping submit process - no element selected');
+        return this;
+    }
+    
+    var method, action, url, $form = this;
+
+    if (typeof options == 'function') {
+        options = { success: options };
+    }
+
+    method = this.attr('method');
+    action = this.attr('action');
+    url = (typeof action === 'string') ? $.trim(action) : '';
+    url = url || window.location.href || '';
+    if (url) {
+        // clean url (don't include hash vaue)
+        url = (url.match(/^([^#]+)/)||[])[1];
+    }
+
+    options = $.extend(true, {
+        url:  url,
+        success: $.ajaxSettings.success,
+        type: method || 'GET',
+        iframeSrc: /^https/i.test(window.location.href || '') ? 'javascript:false' : 'about:blank'
+    }, options);
+
+    // hook for manipulating the form data before it is extracted;
+    // convenient for use with rich editors like tinyMCE or FCKEditor
+    var veto = {};
+    this.trigger('form-pre-serialize', [this, options, veto]);
+    if (veto.veto) {
+        log('ajaxSubmit: submit vetoed via form-pre-serialize trigger');
+        return this;
+    }
+
+    // provide opportunity to alter form data before it is serialized
+    if (options.beforeSerialize && options.beforeSerialize(this, options) === false) {
+        log('ajaxSubmit: submit aborted via beforeSerialize callback');
+        return this;
+    }
+
+    var traditional = options.traditional;
+    if ( traditional === undefined ) {
+        traditional = $.ajaxSettings.traditional;
+    }
+    
+    var elements = [];
+    var qx, a = this.formToArray(options.semantic, elements);
+    if (options.data) {
+        options.extraData = options.data;
+        qx = $.param(options.data, traditional);
+    }
+
+    // give pre-submit callback an opportunity to abort the submit
+    if (options.beforeSubmit && options.beforeSubmit(a, this, options) === false) {
+        log('ajaxSubmit: submit aborted via beforeSubmit callback');
+        return this;
+    }
+
+    // fire vetoable 'validate' event
+    this.trigger('form-submit-validate', [a, this, options, veto]);
+    if (veto.veto) {
+        log('ajaxSubmit: submit vetoed via form-submit-validate trigger');
+        return this;
+    }
+
+    var q = $.param(a, traditional);
+    if (qx) {
+        q = ( q ? (q + '&' + qx) : qx );
+    }    
+    if (options.type.toUpperCase() == 'GET') {
+        options.url += (options.url.indexOf('?') >= 0 ? '&' : '?') + q;
+        options.data = null;  // data is null for 'get'
+    }
+    else {
+        options.data = q; // data is the query string for 'post'
+    }
+
+    var callbacks = [];
+    if (options.resetForm) {
+        callbacks.push(function() { $form.resetForm(); });
+    }
+    if (options.clearForm) {
+        callbacks.push(function() { $form.clearForm(options.includeHidden); });
+    }
+
+    // perform a load on the target only if dataType is not provided
+    if (!options.dataType && options.target) {
+        var oldSuccess = options.success || function(){};
+        callbacks.push(function(data) {
+            var fn = options.replaceTarget ? 'replaceWith' : 'html';
+            $(options.target)[fn](data).each(oldSuccess, arguments);
+        });
+    }
+    else if (options.success) {
+        callbacks.push(options.success);
+    }
+
+    options.success = function(data, status, xhr) { // jQuery 1.4+ passes xhr as 3rd arg
+        var context = options.context || this ;    // jQuery 1.4+ supports scope context 
+        for (var i=0, max=callbacks.length; i < max; i++) {
+            callbacks[i].apply(context, [data, status, xhr || $form, $form]);
+        }
+    };
+
+    // are there files to upload?
+    var fileInputs = $('input:file:enabled[value]', this); // [value] (issue #113)
+    var hasFileInputs = fileInputs.length > 0;
+    var mp = 'multipart/form-data';
+    var multipart = ($form.attr('enctype') == mp || $form.attr('encoding') == mp);
+
+    var fileAPI = feature.fileapi && feature.formdata;
+    log("fileAPI :" + fileAPI);
+    var shouldUseFrame = (hasFileInputs || multipart) && !fileAPI;
+
+    // options.iframe allows user to force iframe mode
+    // 06-NOV-09: now defaulting to iframe mode if file input is detected
+    if (options.iframe !== false && (options.iframe || shouldUseFrame)) {
+        // hack to fix Safari hang (thanks to Tim Molendijk for this)
+        // see:  http://groups.google.com/group/jquery-dev/browse_thread/thread/36395b7ab510dd5d
+        if (options.closeKeepAlive) {
+            $.get(options.closeKeepAlive, function() {
+                fileUploadIframe(a);
+            });
+        }
+          else {
+            fileUploadIframe(a);
+          }
+    }
+    else if ((hasFileInputs || multipart) && fileAPI) {
+        fileUploadXhr(a);
+    }
+    else {
+        $.ajax(options);
+    }
+
+    // clear element array
+    for (var k=0; k < elements.length; k++)
+        elements[k] = null;
+
+    // fire 'notify' event
+    this.trigger('form-submit-notify', [this, options]);
+    return this;
+
+     // XMLHttpRequest Level 2 file uploads (big hat tip to francois2metz)
+    function fileUploadXhr(a) {
+        var formdata = new FormData();
+
+        for (var i=0; i < a.length; i++) {
+            formdata.append(a[i].name, a[i].value);
+        }
+
+        if (options.extraData) {
+            for (var p in options.extraData)
+                if (options.extraData.hasOwnProperty(p))
+                    formdata.append(p, options.extraData[p]);
+        }
+
+        options.data = null;
+
+        var s = $.extend(true, {}, $.ajaxSettings, options, {
+            contentType: false,
+            processData: false,
+            cache: false,
+            type: 'POST'
+        });
+        
+        if (options.uploadProgress) {
+            // workaround because jqXHR does not expose upload property
+            s.xhr = function() {
+                var xhr = jQuery.ajaxSettings.xhr();
+                if (xhr.upload) {
+                    xhr.upload.onprogress = function(event) {
+                        var percent = 0;
+                        var position = event.loaded || event.position; /*event.position is deprecated*/
+                        var total = event.total;
+                        if (event.lengthComputable) {
+                            percent = Math.ceil(position / total * 100);
+                        }
+                        options.uploadProgress(event, position, total, percent);
+                    };
+                }
+                return xhr;
+            };
+        }
+
+        s.data = null;
+            var beforeSend = s.beforeSend;
+            s.beforeSend = function(xhr, o) {
+                o.data = formdata;
+                if(beforeSend)
+                    beforeSend.call(this, xhr, o);
+        };
+        $.ajax(s);
+    }
+
+    // private function for handling file uploads (hat tip to YAHOO!)
+    function fileUploadIframe(a) {
+        var form = $form[0], el, i, s, g, id, $io, io, xhr, sub, n, timedOut, timeoutHandle;
         var useProp = !!$.fn.prop;
 
+        if ($(':input[name=submit],:input[id=submit]', form).length) {
+            // if there is an input with a name or id of 'submit' then we won't be
+            // able to invoke the submit fn on the form (at least not x-browser)
+            alert('Error: Form elements must not have name or id of "submit".');
+            return;
+        }
+        
         if (a) {
-               // ensure that every serialized input is still enabled
-               for (i=0; i < a.length; i++) {
-                el = $(form[a[i].name]);
-                el[ useProp ? 'prop' : 'attr' ]('disabled', false);
-               }
-        }
-
-               if ($(':input[name=submit],:input[id=submit]', form).length) {
-                       // if there is an input with a name or id of 'submit' then we won't be
-                       // able to invoke the submit fn on the form (at least not x-browser)
-                       alert('Error: Form elements must not have name or id of "submit".');
-                       return;
-               }
-               
-               s = $.extend(true, {}, $.ajaxSettings, options);
-               s.context = s.context || s;
-               id = 'jqFormIO' + (new Date().getTime());
-               if (s.iframeTarget) {
-                       $io = $(s.iframeTarget);
-                       n = $io.attr('name');
-                       if (n == null)
-                               $io.attr('name', id);
-                       else
-                               id = n;
-               }
-               else {
-                       $io = $('<iframe name="' + id + '" src="'+ s.iframeSrc +'" />');
-                       $io.css({ position: 'absolute', top: '-1000px', left: '-1000px' });
-               }
-               io = $io[0];
-
-
-               xhr = { // mock object
-                       aborted: 0,
-                       responseText: null,
-                       responseXML: null,
-                       status: 0,
-                       statusText: 'n/a',
-                       getAllResponseHeaders: function() {},
-                       getResponseHeader: function() {},
-                       setRequestHeader: function() {},
-                       abort: function(status) {
-                               var e = (status === 'timeout' ? 'timeout' : 'aborted');
-                               log('aborting upload... ' + e);
-                               this.aborted = 1;
-                               $io.attr('src', s.iframeSrc); // abort op in progress
-                               xhr.error = e;
-                               s.error && s.error.call(s.context, xhr, e, status);
-                               g && $.event.trigger("ajaxError", [xhr, s, e]);
-                               s.complete && s.complete.call(s.context, xhr, e);
-                       }
-               };
-
-               g = s.global;
-               // trigger ajax global events so that activity/block indicators work like normal
-               if (g && ! $.active++) {
-                       $.event.trigger("ajaxStart");
-               }
-               if (g) {
-                       $.event.trigger("ajaxSend", [xhr, s]);
-               }
-
-               if (s.beforeSend && s.beforeSend.call(s.context, xhr, s) === false) {
-                       if (s.global) {
-                               $.active--;
-                       }
-                       return;
-               }
-               if (xhr.aborted) {
-                       return;
-               }
-
-               // add submitting element to data if we know it
-               sub = form.clk;
-               if (sub) {
-                       n = sub.name;
-                       if (n && !sub.disabled) {
-                               s.extraData = s.extraData || {};
-                               s.extraData[n] = sub.value;
-                               if (sub.type == "image") {
-                                       s.extraData[n+'.x'] = form.clk_x;
-                                       s.extraData[n+'.y'] = form.clk_y;
-                               }
-                       }
-               }
-               
-               var CLIENT_TIMEOUT_ABORT = 1;
-               var SERVER_ABORT = 2;
-
-               function getDoc(frame) {
-                       var doc = frame.contentWindow ? frame.contentWindow.document : frame.contentDocument ? frame.contentDocument : frame.document;
-                       return doc;
-               }
-               
-               // take a breath so that pending repaints get some cpu time before the upload starts
-               function doSubmit() {
-                       // make sure form attrs are set
-                       var t = $form.attr('target'), a = $form.attr('action');
-
-                       // update form attrs in IE friendly way
-                       form.setAttribute('target',id);
-                       if (!method) {
-                               form.setAttribute('method', 'POST');
-                       }
-                       if (a != s.url) {
-                               form.setAttribute('action', s.url);
-                       }
-
-                       // ie borks in some cases when setting encoding
-                       if (! s.skipEncodingOverride && (!method || /post/i.test(method))) {
-                               $form.attr({
-                                       encoding: 'multipart/form-data',
-                                       enctype:  'multipart/form-data'
-                               });
-                       }
-
-                       // support timout
-                       if (s.timeout) {
-                               timeoutHandle = setTimeout(function() { timedOut = true; cb(CLIENT_TIMEOUT_ABORT); }, s.timeout);
-                       }
-                       
-                       // look for server aborts
-                       function checkState() {
-                               try {
-                                       var state = getDoc(io).readyState;
-                                       log('state = ' + state);
-                                       if (state.toLowerCase() == 'uninitialized')
-                                               setTimeout(checkState,50);
-                               }
-                               catch(e) {
-                                       log('Server abort: ' , e, ' (', e.name, ')');
-                                       cb(SERVER_ABORT);
-                                       timeoutHandle && clearTimeout(timeoutHandle);
-                                       timeoutHandle = undefined;
-                               }
-                       }
-
-                       // add "extra" data to form if provided in options
-                       var extraInputs = [];
-                       try {
-                               if (s.extraData) {
-                                       for (var n in s.extraData) {
-                                               extraInputs.push(
-                                                       $('<input type="hidden" name="'+n+'" />').attr('value',s.extraData[n])
-                                                               .appendTo(form)[0]);
-                                       }
-                               }
-
-                               if (!s.iframeTarget) {
-                                       // add iframe to doc and submit the form
-                                       $io.appendTo('body');
-                       io.attachEvent ? io.attachEvent('onload', cb) : io.addEventListener('load', cb, false);
-                               }
-                               setTimeout(checkState,15);
-                               form.submit();
-                       }
-                       finally {
-                               // reset attrs and remove "extra" input elements
-                               form.setAttribute('action',a);
-                               if(t) {
-                                       form.setAttribute('target', t);
-                               } else {
-                                       $form.removeAttr('target');
-                               }
-                               $(extraInputs).remove();
-                       }
-               }
-
-               if (s.forceSync) {
-                       doSubmit();
-               }
-               else {
-                       setTimeout(doSubmit, 10); // this lets dom updates render
-               }
-
-               var data, doc, domCheckCount = 50, callbackProcessed;
-
-               function cb(e) {
-                       if (xhr.aborted || callbackProcessed) {
-                               return;
-                       }
-                       try {
-                               doc = getDoc(io);
-                       }
-                       catch(ex) {
-                               log('cannot access response document: ', ex);
-                               e = SERVER_ABORT;
-                       }
-                       if (e === CLIENT_TIMEOUT_ABORT && xhr) {
-                               xhr.abort('timeout');
-                               return;
-                       }
-                       else if (e == SERVER_ABORT && xhr) {
-                               xhr.abort('server abort');
-                               return;
-                       }
-
-                       if (!doc || doc.location.href == s.iframeSrc) {
-                               // response not received yet
-                               if (!timedOut)
-                                       return;
-                       }
-            io.detachEvent ? io.detachEvent('onload', cb) : io.removeEventListener('load', cb, false);
-
-                       var status = 'success', errMsg;
-                       try {
-                               if (timedOut) {
-                                       throw 'timeout';
-                               }
-
-                               var isXml = s.dataType == 'xml' || doc.XMLDocument || $.isXMLDoc(doc);
-                               log('isXml='+isXml);
-                               if (!isXml && window.opera && (doc.body == null || doc.body.innerHTML == '')) {
-                                       if (--domCheckCount) {
-                                               // in some browsers (Opera) the iframe DOM is not always traversable when
-                                               // the onload callback fires, so we loop a bit to accommodate
-                                               log('requeing onLoad callback, DOM not available');
-                                               setTimeout(cb, 250);
-                                               return;
-                                       }
-                                       // let this fall through because server response could be an empty document
-                                       //log('Could not access iframe DOM after mutiple tries.');
-                                       //throw 'DOMException: not available';
-                               }
-
-                               //log('response detected');
+            // ensure that every serialized input is still enabled
+            for (i=0; i < elements.length; i++) {
+                el = $(elements[i]);
+                if ( useProp )
+                    el.prop('disabled', false);
+                else
+                    el.removeAttr('disabled');
+            }
+        }
+
+        s = $.extend(true, {}, $.ajaxSettings, options);
+        s.context = s.context || s;
+        id = 'jqFormIO' + (new Date().getTime());
+        if (s.iframeTarget) {
+            $io = $(s.iframeTarget);
+            n = $io.attr('name');
+            if (!n)
+                 $io.attr('name', id);
+            else
+                id = n;
+        }
+        else {
+            $io = $('<iframe name="' + id + '" src="'+ s.iframeSrc +'" />');
+            $io.css({ position: 'absolute', top: '-1000px', left: '-1000px' });
+        }
+        io = $io[0];
+
+
+        xhr = { // mock object
+            aborted: 0,
+            responseText: null,
+            responseXML: null,
+            status: 0,
+            statusText: 'n/a',
+            getAllResponseHeaders: function() {},
+            getResponseHeader: function() {},
+            setRequestHeader: function() {},
+            abort: function(status) {
+                var e = (status === 'timeout' ? 'timeout' : 'aborted');
+                log('aborting upload... ' + e);
+                this.aborted = 1;
+                // #214
+                if (io.contentWindow.document.execCommand) {
+                    try { // #214
+                        io.contentWindow.document.execCommand('Stop');
+                    } catch(ignore) {}
+                }
+                $io.attr('src', s.iframeSrc); // abort op in progress
+                xhr.error = e;
+                if (s.error)
+                    s.error.call(s.context, xhr, e, status);
+                if (g)
+                    $.event.trigger("ajaxError", [xhr, s, e]);
+                if (s.complete)
+                    s.complete.call(s.context, xhr, e);
+            }
+        };
+
+        g = s.global;
+        // trigger ajax global events so that activity/block indicators work like normal
+        if (g && 0 === $.active++) {
+            $.event.trigger("ajaxStart");
+        }
+        if (g) {
+            $.event.trigger("ajaxSend", [xhr, s]);
+        }
+
+        if (s.beforeSend && s.beforeSend.call(s.context, xhr, s) === false) {
+            if (s.global) {
+                $.active--;
+            }
+            return;
+        }
+        if (xhr.aborted) {
+            return;
+        }
+
+        // add submitting element to data if we know it
+        sub = form.clk;
+        if (sub) {
+            n = sub.name;
+            if (n && !sub.disabled) {
+                s.extraData = s.extraData || {};
+                s.extraData[n] = sub.value;
+                if (sub.type == "image") {
+                    s.extraData[n+'.x'] = form.clk_x;
+                    s.extraData[n+'.y'] = form.clk_y;
+                }
+            }
+        }
+        
+        var CLIENT_TIMEOUT_ABORT = 1;
+        var SERVER_ABORT = 2;
+
+        function getDoc(frame) {
+            var doc = frame.contentWindow ? frame.contentWindow.document : frame.contentDocument ? frame.contentDocument : frame.document;
+            return doc;
+        }
+        
+        // Rails CSRF hack (thanks to Yvan Barthelemy)
+        var csrf_token = $('meta[name=csrf-token]').attr('content');
+        var csrf_param = $('meta[name=csrf-param]').attr('content');
+        if (csrf_param && csrf_token) {
+            s.extraData = s.extraData || {};
+            s.extraData[csrf_param] = csrf_token;
+        }
+
+        // take a breath so that pending repaints get some cpu time before the upload starts
+        function doSubmit() {
+            // make sure form attrs are set
+            var t = $form.attr('target'), a = $form.attr('action');
+
+            // update form attrs in IE friendly way
+            form.setAttribute('target',id);
+            if (!method) {
+                form.setAttribute('method', 'POST');
+            }
+            if (a != s.url) {
+                form.setAttribute('action', s.url);
+            }
+
+            // ie borks in some cases when setting encoding
+            if (! s.skipEncodingOverride && (!method || /post/i.test(method))) {
+                $form.attr({
+                    encoding: 'multipart/form-data',
+                    enctype:  'multipart/form-data'
+                });
+            }
+
+            // support timout
+            if (s.timeout) {
+                timeoutHandle = setTimeout(function() { timedOut = true; cb(CLIENT_TIMEOUT_ABORT); }, s.timeout);
+            }
+            
+            // look for server aborts
+            function checkState() {
+                try {
+                    var state = getDoc(io).readyState;
+                    log('state = ' + state);
+                    if (state && state.toLowerCase() == 'uninitialized')
+                        setTimeout(checkState,50);
+                }
+                catch(e) {
+                    log('Server abort: ' , e, ' (', e.name, ')');
+                    cb(SERVER_ABORT);
+                    if (timeoutHandle)
+                        clearTimeout(timeoutHandle);
+                    timeoutHandle = undefined;
+                }
+            }
+
+            // add "extra" data to form if provided in options
+            var extraInputs = [];
+            try {
+                if (s.extraData) {
+                    for (var n in s.extraData) {
+                        if (s.extraData.hasOwnProperty(n)) {
+                           // if using the $.param format that allows for multiple values with the same name
+                           if($.isPlainObject(s.extraData[n]) && s.extraData[n].hasOwnProperty('name') && s.extraData[n].hasOwnProperty('value')) {
+                               extraInputs.push(
+                               $('<input type="hidden" name="'+s.extraData[n].name+'">').attr('value',s.extraData[n].value)
+                                   .appendTo(form)[0]);
+                           } else {
+                               extraInputs.push(
+                               $('<input type="hidden" name="'+n+'">').attr('value',s.extraData[n])
+                                   .appendTo(form)[0]);
+                           }
+                        }
+                    }
+                }
+
+                if (!s.iframeTarget) {
+                    // add iframe to doc and submit the form
+                    $io.appendTo('body');
+                    if (io.attachEvent)
+                        io.attachEvent('onload', cb);
+                    else
+                        io.addEventListener('load', cb, false);
+                }
+                setTimeout(checkState,15);
+                form.submit();
+            }
+            finally {
+                // reset attrs and remove "extra" input elements
+                form.setAttribute('action',a);
+                if(t) {
+                    form.setAttribute('target', t);
+                } else {
+                    $form.removeAttr('target');
+                }
+                $(extraInputs).remove();
+            }
+        }
+
+        if (s.forceSync) {
+            doSubmit();
+        }
+        else {
+            setTimeout(doSubmit, 10); // this lets dom updates render
+        }
+
+        var data, doc, domCheckCount = 50, callbackProcessed;
+
+        function cb(e) {
+            if (xhr.aborted || callbackProcessed) {
+                return;
+            }
+            try {
+                doc = getDoc(io);
+            }
+            catch(ex) {
+                log('cannot access response document: ', ex);
+                e = SERVER_ABORT;
+            }
+            if (e === CLIENT_TIMEOUT_ABORT && xhr) {
+                xhr.abort('timeout');
+                return;
+            }
+            else if (e == SERVER_ABORT && xhr) {
+                xhr.abort('server abort');
+                return;
+            }
+
+            if (!doc || doc.location.href == s.iframeSrc) {
+                // response not received yet
+                if (!timedOut)
+                    return;
+            }
+            if (io.detachEvent)
+                io.detachEvent('onload', cb);
+            else    
+                io.removeEventListener('load', cb, false);
+
+            var status = 'success', errMsg;
+            try {
+                if (timedOut) {
+                    throw 'timeout';
+                }
+
+                var isXml = s.dataType == 'xml' || doc.XMLDocument || $.isXMLDoc(doc);
+                log('isXml='+isXml);
+                if (!isXml && window.opera && (doc.body === null || !doc.body.innerHTML)) {
+                    if (--domCheckCount) {
+                        // in some browsers (Opera) the iframe DOM is not always traversable when
+                        // the onload callback fires, so we loop a bit to accommodate
+                        log('requeing onLoad callback, DOM not available');
+                        setTimeout(cb, 250);
+                        return;
+                    }
+                    // let this fall through because server response could be an empty document
+                    //log('Could not access iframe DOM after mutiple tries.');
+                    //throw 'DOMException: not available';
+                }
+
+                //log('response detected');
                 var docRoot = doc.body ? doc.body : doc.documentElement;
                 xhr.responseText = docRoot ? docRoot.innerHTML : null;
-                               xhr.responseXML = doc.XMLDocument ? doc.XMLDocument : doc;
-                               if (isXml)
-                                       s.dataType = 'xml';
-                               xhr.getResponseHeader = function(header){
-                                       var headers = {'content-type': s.dataType};
-                                       return headers[header];
-                               };
+                xhr.responseXML = doc.XMLDocument ? doc.XMLDocument : doc;
+                if (isXml)
+                    s.dataType = 'xml';
+                xhr.getResponseHeader = function(header){
+                    var headers = {'content-type': s.dataType};
+                    return headers[header];
+                };
                 // support for XHR 'status' & 'statusText' emulation :
                 if (docRoot) {
                     xhr.status = Number( docRoot.getAttribute('status') ) || xhr.status;
                     xhr.statusText = docRoot.getAttribute('statusText') || xhr.statusText;
                 }
 
-                               var dt = s.dataType || '';
-                               var scr = /(json|script|text)/.test(dt.toLowerCase());
-                               if (scr || s.textarea) {
-                                       // see if user embedded response in textarea
-                                       var ta = doc.getElementsByTagName('textarea')[0];
-                                       if (ta) {
-                                               xhr.responseText = ta.value;
+                var dt = (s.dataType || '').toLowerCase();
+                var scr = /(json|script|text)/.test(dt);
+                if (scr || s.textarea) {
+                    // see if user embedded response in textarea
+                    var ta = doc.getElementsByTagName('textarea')[0];
+                    if (ta) {
+                        xhr.responseText = ta.value;
                         // support for XHR 'status' & 'statusText' emulation :
                         xhr.status = Number( ta.getAttribute('status') ) || xhr.status;
                         xhr.statusText = ta.getAttribute('statusText') || xhr.statusText;
-                                       }
-                                       else if (scr) {
-                                               // account for browsers injecting pre around json response
-                                               var pre = doc.getElementsByTagName('pre')[0];
-                                               var b = doc.getElementsByTagName('body')[0];
-                                               if (pre) {
-                                                       xhr.responseText = pre.textContent ? pre.textContent : pre.innerHTML;
-                                               }
-                                               else if (b) {
-                                                       xhr.responseText = b.innerHTML;
-                                               }
-                                       }
-                               }
-                               else if (s.dataType == 'xml' && !xhr.responseXML && xhr.responseText != null) {
-                                       xhr.responseXML = toXml(xhr.responseText);
-                               }
+                    }
+                    else if (scr) {
+                        // account for browsers injecting pre around json response
+                        var pre = doc.getElementsByTagName('pre')[0];
+                        var b = doc.getElementsByTagName('body')[0];
+                        if (pre) {
+                            xhr.responseText = pre.textContent ? pre.textContent : pre.innerText;
+                        }
+                        else if (b) {
+                            xhr.responseText = b.textContent ? b.textContent : b.innerText;
+                        }
+                    }
+                }
+                else if (dt == 'xml' && !xhr.responseXML && xhr.responseText) {
+                    xhr.responseXML = toXml(xhr.responseText);
+                }
 
                 try {
-                    data = httpData(xhr, s.dataType, s);
+                    data = httpData(xhr, dt, s);
                 }
                 catch (e) {
                     status = 'parsererror';
                     xhr.error = errMsg = (e || status);
                 }
-                       }
-                       catch (e) {
-                               log('error caught: ',e);
-                               status = 'error';
+            }
+            catch (e) {
+                log('error caught: ',e);
+                status = 'error';
                 xhr.error = errMsg = (e || status);
-                       }
+            }
 
-                       if (xhr.aborted) {
-                               log('upload aborted');
-                               status = null;
-                       }
+            if (xhr.aborted) {
+                log('upload aborted');
+                status = null;
+            }
 
             if (xhr.status) { // we've set xhr.status
                 status = (xhr.status >= 200 && xhr.status < 300 || xhr.status === 304) ? 'success' : 'error';
             }
 
-                       // ordering of these callbacks/triggers is odd, but that's how $.ajax does it
-                       if (status === 'success') {
-                               s.success && s.success.call(s.context, data, 'success', xhr);
-                               g && $.event.trigger("ajaxSuccess", [xhr, s]);
-                       }
+            // ordering of these callbacks/triggers is odd, but that's how $.ajax does it
+            if (status === 'success') {
+                if (s.success)
+                    s.success.call(s.context, data, 'success', xhr);
+                if (g)
+                    $.event.trigger("ajaxSuccess", [xhr, s]);
+            }
             else if (status) {
-                               if (errMsg == undefined)
-                                       errMsg = xhr.statusText;
-                               s.error && s.error.call(s.context, xhr, status, errMsg);
-                               g && $.event.trigger("ajaxError", [xhr, s, errMsg]);
-            }
-
-                       g && $.event.trigger("ajaxComplete", [xhr, s]);
-
-                       if (g && ! --$.active) {
-                               $.event.trigger("ajaxStop");
-                       }
-
-                       s.complete && s.complete.call(s.context, xhr, status);
-
-                       callbackProcessed = true;
-                       if (s.timeout)
-                               clearTimeout(timeoutHandle);
-
-                       // clean up
-                       setTimeout(function() {
-                               if (!s.iframeTarget)
-                                       $io.remove();
-                               xhr.responseXML = null;
-                       }, 100);
-               }
-
-               var toXml = $.parseXML || function(s, doc) { // use parseXML if available (jQuery 1.5+)
-                       if (window.ActiveXObject) {
-                               doc = new ActiveXObject('Microsoft.XMLDOM');
-                               doc.async = 'false';
-                               doc.loadXML(s);
-                       }
-                       else {
-                               doc = (new DOMParser()).parseFromString(s, 'text/xml');
-                       }
-                       return (doc && doc.documentElement && doc.documentElement.nodeName != 'parsererror') ? doc : null;
-               };
-               var parseJSON = $.parseJSON || function(s) {
-                       return window['eval']('(' + s + ')');
-               };
-
-               var httpData = function( xhr, type, s ) { // mostly lifted from jq1.4.4
-
-                       var ct = xhr.getResponseHeader('content-type') || '',
-                               xml = type === 'xml' || !type && ct.indexOf('xml') >= 0,
-                               data = xml ? xhr.responseXML : xhr.responseText;
-
-                       if (xml && data.documentElement.nodeName === 'parsererror') {
-                               $.error && $.error('parsererror');
-                       }
-                       if (s && s.dataFilter) {
-                               data = s.dataFilter(data, type);
-                       }
-                       if (typeof data === 'string') {
-                               if (type === 'json' || !type && ct.indexOf('json') >= 0) {
-                                       data = parseJSON(data);
-                               } else if (type === "script" || !type && ct.indexOf("javascript") >= 0) {
-                                       $.globalEval(data);
-                               }
-                       }
-                       return data;
-               };
-       }
+                if (errMsg === undefined)
+                    errMsg = xhr.statusText;
+                if (s.error)
+                    s.error.call(s.context, xhr, status, errMsg);
+                if (g)
+                    $.event.trigger("ajaxError", [xhr, s, errMsg]);
+            }
+
+            if (g)
+                $.event.trigger("ajaxComplete", [xhr, s]);
+
+            if (g && ! --$.active) {
+                $.event.trigger("ajaxStop");
+            }
+
+            if (s.complete)
+                s.complete.call(s.context, xhr, status);
+
+            callbackProcessed = true;
+            if (s.timeout)
+                clearTimeout(timeoutHandle);
+
+            // clean up
+            setTimeout(function() {
+                if (!s.iframeTarget)
+                    $io.remove();
+                xhr.responseXML = null;
+            }, 100);
+        }
+
+        var toXml = $.parseXML || function(s, doc) { // use parseXML if available (jQuery 1.5+)
+            if (window.ActiveXObject) {
+                doc = new ActiveXObject('Microsoft.XMLDOM');
+                doc.async = 'false';
+                doc.loadXML(s);
+            }
+            else {
+                doc = (new DOMParser()).parseFromString(s, 'text/xml');
+            }
+            return (doc && doc.documentElement && doc.documentElement.nodeName != 'parsererror') ? doc : null;
+        };
+        var parseJSON = $.parseJSON || function(s) {
+            /*jslint evil:true */
+            return window['eval']('(' + s + ')');
+        };
+
+        var httpData = function( xhr, type, s ) { // mostly lifted from jq1.4.4
+
+            var ct = xhr.getResponseHeader('content-type') || '',
+                xml = type === 'xml' || !type && ct.indexOf('xml') >= 0,
+                data = xml ? xhr.responseXML : xhr.responseText;
+
+            if (xml && data.documentElement.nodeName === 'parsererror') {
+                if ($.error)
+                    $.error('parsererror');
+            }
+            if (s && s.dataFilter) {
+                data = s.dataFilter(data, type);
+            }
+            if (typeof data === 'string') {
+                if (type === 'json' || !type && ct.indexOf('json') >= 0) {
+                    data = parseJSON(data);
+                } else if (type === "script" || !type && ct.indexOf("javascript") >= 0) {
+                    $.globalEval(data);
+                }
+            }
+            return data;
+        };
+    }
 };
 
 /**
@@ -560,9 +680,9 @@ $.fn.ajaxSubmit = function(options) {
  * The advantages of using this method instead of ajaxSubmit() are:
  *
  * 1: This method will include coordinates for <input type="image" /> elements (if the element
- *     is used to submit the form).
+ *    is used to submit the form).
  * 2. This method will include the submit element's name/value data (for the element that was
- *     used to submit the form).
+ *    used to submit the form).
  * 3. This method binds the submit() method to the form for you.
  *
  * The options argument for ajaxForm works exactly as it does for ajaxSubmit.  ajaxForm merely
@@ -570,60 +690,83 @@ $.fn.ajaxSubmit = function(options) {
  * the form itself.
  */
 $.fn.ajaxForm = function(options) {
-       // in jQuery 1.3+ we can fix mistakes with the ready state
-       if (this.length === 0) {
-               var o = { s: this.selector, c: this.context };
-               if (!$.isReady && o.s) {
-                       log('DOM not ready, queuing ajaxForm');
-                       $(function() {
-                               $(o.s,o.c).ajaxForm(options);
-                       });
-                       return this;
-               }
-               // is your DOM ready?  http://docs.jquery.com/Tutorials:Introducing_$(document).ready()
-               log('terminating; zero elements found by selector' + ($.isReady ? '' : ' (DOM not ready)'));
-               return this;
-       }
-
-       return this.ajaxFormUnbind().bind('submit.form-plugin', function(e) {
-               if (!e.isDefaultPrevented()) { // if event has been canceled, don't proceed
-                       e.preventDefault();
-                       $(this).ajaxSubmit(options);
-               }
-       }).bind('click.form-plugin', function(e) {
-               var target = e.target;
-               var $el = $(target);
-               if (!($el.is(":submit,input:image"))) {
-                       // is this a child element of the submit el?  (ex: a span within a button)
-                       var t = $el.closest(':submit');
-                       if (t.length == 0) {
-                               return;
-                       }
-                       target = t[0];
-               }
-               var form = this;
-               form.clk = target;
-               if (target.type == 'image') {
-                       if (e.offsetX != undefined) {
-                               form.clk_x = e.offsetX;
-                               form.clk_y = e.offsetY;
-                       } else if (typeof $.fn.offset == 'function') { // try to use dimensions plugin
-                               var offset = $el.offset();
-                               form.clk_x = e.pageX - offset.left;
-                               form.clk_y = e.pageY - offset.top;
-                       } else {
-                               form.clk_x = e.pageX - target.offsetLeft;
-                               form.clk_y = e.pageY - target.offsetTop;
-                       }
-               }
-               // clear form vars
-               setTimeout(function() { form.clk = form.clk_x = form.clk_y = null; }, 100);
-       });
+    options = options || {};
+    options.delegation = options.delegation && $.isFunction($.fn.on);
+    
+    // in jQuery 1.3+ we can fix mistakes with the ready state
+    if (!options.delegation && this.length === 0) {
+        var o = { s: this.selector, c: this.context };
+        if (!$.isReady && o.s) {
+            log('DOM not ready, queuing ajaxForm');
+            $(function() {
+                $(o.s,o.c).ajaxForm(options);
+            });
+            return this;
+        }
+        // is your DOM ready?  http://docs.jquery.com/Tutorials:Introducing_$(document).ready()
+        log('terminating; zero elements found by selector' + ($.isReady ? '' : ' (DOM not ready)'));
+        return this;
+    }
+
+    if ( options.delegation ) {
+        $(document)
+            .off('submit.form-plugin', this.selector, doAjaxSubmit)
+            .off('click.form-plugin', this.selector, captureSubmittingElement)
+            .on('submit.form-plugin', this.selector, options, doAjaxSubmit)
+            .on('click.form-plugin', this.selector, options, captureSubmittingElement);
+        return this;
+    }
+
+    return this.ajaxFormUnbind()
+        .bind('submit.form-plugin', options, doAjaxSubmit)
+        .bind('click.form-plugin', options, captureSubmittingElement);
 };
 
+// private event handlers    
+function doAjaxSubmit(e) {
+    /*jshint validthis:true */
+    var options = e.data;
+    if (!e.isDefaultPrevented()) { // if event has been canceled, don't proceed
+        e.preventDefault();
+        $(this).ajaxSubmit(options);
+    }
+}
+    
+function captureSubmittingElement(e) {
+    /*jshint validthis:true */
+    var target = e.target;
+    var $el = $(target);
+    if (!($el.is(":submit,input:image"))) {
+        // is this a child element of the submit el?  (ex: a span within a button)
+        var t = $el.closest(':submit');
+        if (t.length === 0) {
+            return;
+        }
+        target = t[0];
+    }
+    var form = this;
+    form.clk = target;
+    if (target.type == 'image') {
+        if (e.offsetX !== undefined) {
+            form.clk_x = e.offsetX;
+            form.clk_y = e.offsetY;
+        } else if (typeof $.fn.offset == 'function') {
+            var offset = $el.offset();
+            form.clk_x = e.pageX - offset.left;
+            form.clk_y = e.pageY - offset.top;
+        } else {
+            form.clk_x = e.pageX - target.offsetLeft;
+            form.clk_y = e.pageY - target.offsetTop;
+        }
+    }
+    // clear form vars
+    setTimeout(function() { form.clk = form.clk_x = form.clk_y = null; }, 100);
+}
+
+
 // ajaxFormUnbind unbinds the event handlers that were bound by ajaxForm
 $.fn.ajaxFormUnbind = function() {
-       return this.unbind('submit.form-plugin click.form-plugin');
+    return this.unbind('submit.form-plugin click.form-plugin');
 };
 
 /**
@@ -637,56 +780,74 @@ $.fn.ajaxFormUnbind = function() {
  * It is this array that is passed to pre-submit callback functions provided to the
  * ajaxSubmit() and ajaxForm() methods.
  */
-$.fn.formToArray = function(semantic) {
-       var a = [];
-       if (this.length === 0) {
-               return a;
-       }
-
-       var form = this[0];
-       var els = semantic ? form.getElementsByTagName('*') : form.elements;
-       if (!els) {
-               return a;
-       }
-
-       var i,j,n,v,el,max,jmax;
-       for(i=0, max=els.length; i < max; i++) {
-               el = els[i];
-               n = el.name;
-               if (!n) {
-                       continue;
-               }
-
-               if (semantic && form.clk && el.type == "image") {
-                       // handle image inputs on the fly when semantic == true
-                       if(!el.disabled && form.clk == el) {
-                               a.push({name: n, value: $(el).val()});
-                               a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y});
-                       }
-                       continue;
-               }
-
-               v = $.fieldValue(el, true);
-               if (v && v.constructor == Array) {
-                       for(j=0, jmax=v.length; j < jmax; j++) {
-                               a.push({name: n, value: v[j]});
-                       }
-               }
-               else if (v !== null && typeof v != 'undefined') {
-                       a.push({name: n, value: v});
-               }
-       }
-
-       if (!semantic && form.clk) {
-               // input type=='image' are not found in elements array! handle it here
-               var $input = $(form.clk), input = $input[0];
-               n = input.name;
-               if (n && !input.disabled && input.type == 'image') {
-                       a.push({name: n, value: $input.val()});
-                       a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y});
-               }
-       }
-       return a;
+$.fn.formToArray = function(semantic, elements) {
+    var a = [];
+    if (this.length === 0) {
+        return a;
+    }
+
+    var form = this[0];
+    var els = semantic ? form.getElementsByTagName('*') : form.elements;
+    if (!els) {
+        return a;
+    }
+
+    var i,j,n,v,el,max,jmax;
+    for(i=0, max=els.length; i < max; i++) {
+        el = els[i];
+        n = el.name;
+        if (!n) {
+            continue;
+        }
+
+        if (semantic && form.clk && el.type == "image") {
+            // handle image inputs on the fly when semantic == true
+            if(!el.disabled && form.clk == el) {
+                a.push({name: n, value: $(el).val(), type: el.type });
+                a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y});
+            }
+            continue;
+        }
+
+        v = $.fieldValue(el, true);
+        if (v && v.constructor == Array) {
+            if (elements) 
+                elements.push(el);
+            for(j=0, jmax=v.length; j < jmax; j++) {
+                a.push({name: n, value: v[j]});
+            }
+        }
+        else if (feature.fileapi && el.type == 'file' && !el.disabled) {
+            if (elements) 
+                elements.push(el);
+            var files = el.files;
+            if (files.length) {
+                for (j=0; j < files.length; j++) {
+                    a.push({name: n, value: files[j], type: el.type});
+                }
+            }
+            else {
+                // #180
+                a.push({ name: n, value: '', type: el.type });
+            }
+        }
+        else if (v !== null && typeof v != 'undefined') {
+            if (elements) 
+                elements.push(el);
+            a.push({name: n, value: v, type: el.type, required: el.required});
+        }
+    }
+
+    if (!semantic && form.clk) {
+        // input type=='image' are not found in elements array! handle it here
+        var $input = $(form.clk), input = $input[0];
+        n = input.name;
+        if (n && !input.disabled && input.type == 'image') {
+            a.push({name: n, value: $input.val()});
+            a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y});
+        }
+    }
+    return a;
 };
 
 /**
@@ -694,8 +855,8 @@ $.fn.formToArray = function(semantic) {
  * in the format: name1=value1&amp;name2=value2
  */
 $.fn.formSerialize = function(semantic) {
-       //hand off to jQuery.param for proper encoding
-       return $.param(this.formToArray(semantic));
+    //hand off to jQuery.param for proper encoding
+    return $.param(this.formToArray(semantic));
 };
 
 /**
@@ -703,36 +864,36 @@ $.fn.formSerialize = function(semantic) {
  * This method will return a string in the format: name1=value1&amp;name2=value2
  */
 $.fn.fieldSerialize = function(successful) {
-       var a = [];
-       this.each(function() {
-               var n = this.name;
-               if (!n) {
-                       return;
-               }
-               var v = $.fieldValue(this, successful);
-               if (v && v.constructor == Array) {
-                       for (var i=0,max=v.length; i < max; i++) {
-                               a.push({name: n, value: v[i]});
-                       }
-               }
-               else if (v !== null && typeof v != 'undefined') {
-                       a.push({name: this.name, value: v});
-               }
-       });
-       //hand off to jQuery.param for proper encoding
-       return $.param(a);
+    var a = [];
+    this.each(function() {
+        var n = this.name;
+        if (!n) {
+            return;
+        }
+        var v = $.fieldValue(this, successful);
+        if (v && v.constructor == Array) {
+            for (var i=0,max=v.length; i < max; i++) {
+                a.push({name: n, value: v[i]});
+            }
+        }
+        else if (v !== null && typeof v != 'undefined') {
+            a.push({name: this.name, value: v});
+        }
+    });
+    //hand off to jQuery.param for proper encoding
+    return $.param(a);
 };
 
 /**
  * Returns the value(s) of the element in the matched set.  For example, consider the following form:
  *
  *  <form><fieldset>
- *       <input name="A" type="text" />
- *       <input name="A" type="text" />
- *       <input name="B" type="checkbox" value="B1" />
- *       <input name="B" type="checkbox" value="B2"/>
- *       <input name="C" type="radio" value="C1" />
- *       <input name="C" type="radio" value="C2" />
+ *      <input name="A" type="text" />
+ *      <input name="A" type="text" />
+ *      <input name="B" type="checkbox" value="B1" />
+ *      <input name="B" type="checkbox" value="B2"/>
+ *      <input name="C" type="radio" value="C1" />
+ *      <input name="C" type="radio" value="C2" />
  *  </fieldset></form>
  *
  *  var v = $(':text').fieldValue();
@@ -759,60 +920,63 @@ $.fn.fieldSerialize = function(successful) {
  * for each element is returned.
  *
  * Note: This method *always* returns an array.  If no valid value can be determined the
- *        array will be empty, otherwise it will contain one or more values.
+ *    array will be empty, otherwise it will contain one or more values.
  */
 $.fn.fieldValue = function(successful) {
-       for (var val=[], i=0, max=this.length; i < max; i++) {
-               var el = this[i];
-               var v = $.fieldValue(el, successful);
-               if (v === null || typeof v == 'undefined' || (v.constructor == Array && !v.length)) {
-                       continue;
-               }
-               v.constructor == Array ? $.merge(val, v) : val.push(v);
-       }
-       return val;
+    for (var val=[], i=0, max=this.length; i < max; i++) {
+        var el = this[i];
+        var v = $.fieldValue(el, successful);
+        if (v === null || typeof v == 'undefined' || (v.constructor == Array && !v.length)) {
+            continue;
+        }
+        if (v.constructor == Array)
+            $.merge(val, v);
+        else
+            val.push(v);
+    }
+    return val;
 };
 
 /**
  * Returns the value of the field element.
  */
 $.fieldValue = function(el, successful) {
-       var n = el.name, t = el.type, tag = el.tagName.toLowerCase();
-       if (successful === undefined) {
-               successful = true;
-       }
-
-       if (successful && (!n || el.disabled || t == 'reset' || t == 'button' ||
-               (t == 'checkbox' || t == 'radio') && !el.checked ||
-               (t == 'submit' || t == 'image') && el.form && el.form.clk != el ||
-               tag == 'select' && el.selectedIndex == -1)) {
-                       return null;
-       }
-
-       if (tag == 'select') {
-               var index = el.selectedIndex;
-               if (index < 0) {
-                       return null;
-               }
-               var a = [], ops = el.options;
-               var one = (t == 'select-one');
-               var max = (one ? index+1 : ops.length);
-               for(var i=(one ? index : 0); i < max; i++) {
-                       var op = ops[i];
-                       if (op.selected) {
-                               var v = op.value;
-                               if (!v) { // extra pain for IE...
-                                       v = (op.attributes && op.attributes['value'] && !(op.attributes['value'].specified)) ? op.text : op.value;
-                               }
-                               if (one) {
-                                       return v;
-                               }
-                               a.push(v);
-                       }
-               }
-               return a;
-       }
-       return $(el).val();
+    var n = el.name, t = el.type, tag = el.tagName.toLowerCase();
+    if (successful === undefined) {
+        successful = true;
+    }
+
+    if (successful && (!n || el.disabled || t == 'reset' || t == 'button' ||
+        (t == 'checkbox' || t == 'radio') && !el.checked ||
+        (t == 'submit' || t == 'image') && el.form && el.form.clk != el ||
+        tag == 'select' && el.selectedIndex == -1)) {
+            return null;
+    }
+
+    if (tag == 'select') {
+        var index = el.selectedIndex;
+        if (index < 0) {
+            return null;
+        }
+        var a = [], ops = el.options;
+        var one = (t == 'select-one');
+        var max = (one ? index+1 : ops.length);
+        for(var i=(one ? index : 0); i < max; i++) {
+            var op = ops[i];
+            if (op.selected) {
+                var v = op.value;
+                if (!v) { // extra pain for IE...
+                    v = (op.attributes && op.attributes['value'] && !(op.attributes['value'].specified)) ? op.text : op.value;
+                }
+                if (one) {
+                    return v;
+                }
+                a.push(v);
+            }
+        }
+        return a;
+    }
+    return $(el).val();
 };
 
 /**
@@ -823,54 +987,63 @@ $.fieldValue = function(el, successful) {
  *  - inputs of type submit, button, reset, and hidden will *not* be effected
  *  - button elements will *not* be effected
  */
-$.fn.clearForm = function() {
-       return this.each(function() {
-               $('input,select,textarea', this).clearFields();
-       });
+$.fn.clearForm = function(includeHidden) {
+    return this.each(function() {
+        $('input,select,textarea', this).clearFields(includeHidden);
+    });
 };
 
 /**
  * Clears the selected form elements.
  */
-$.fn.clearFields = $.fn.clearInputs = function() {
-       var re = /^(?:color|date|datetime|email|month|number|password|range|search|tel|text|time|url|week)$/i; // 'hidden' is not in this list
-       return this.each(function() {
-               var t = this.type, tag = this.tagName.toLowerCase();
-               if (re.test(t) || tag == 'textarea') {
-                       this.value = '';
-               }
-               else if (t == 'checkbox' || t == 'radio') {
-                       this.checked = false;
-               }
-               else if (tag == 'select') {
-                       this.selectedIndex = -1;
-               }
-       });
+$.fn.clearFields = $.fn.clearInputs = function(includeHidden) {
+    var re = /^(?:color|date|datetime|email|month|number|password|range|search|tel|text|time|url|week)$/i; // 'hidden' is not in this list
+    return this.each(function() {
+        var t = this.type, tag = this.tagName.toLowerCase();
+        if (re.test(t) || tag == 'textarea') {
+            this.value = '';
+        }
+        else if (t == 'checkbox' || t == 'radio') {
+            this.checked = false;
+        }
+        else if (tag == 'select') {
+            this.selectedIndex = -1;
+        }
+        else if (includeHidden) {
+            // includeHidden can be the value true, or it can be a selector string
+            // indicating a special test; for example:
+            //  $('#myForm').clearForm('.special:hidden')
+            // the above would clean hidden inputs that have the class of 'special'
+            if ( (includeHidden === true && /hidden/.test(t)) ||
+                 (typeof includeHidden == 'string' && $(this).is(includeHidden)) )
+                this.value = '';
+        }
+    });
 };
 
 /**
  * Resets the form data.  Causes all form elements to be reset to their original value.
  */
 $.fn.resetForm = function() {
-       return this.each(function() {
-               // guard against an input with the name of 'reset'
-               // note that IE reports the reset function as an 'object'
-               if (typeof this.reset == 'function' || (typeof this.reset == 'object' && !this.reset.nodeType)) {
-                       this.reset();
-               }
-       });
+    return this.each(function() {
+        // guard against an input with the name of 'reset'
+        // note that IE reports the reset function as an 'object'
+        if (typeof this.reset == 'function' || (typeof this.reset == 'object' && !this.reset.nodeType)) {
+            this.reset();
+        }
+    });
 };
 
 /**
  * Enables or disables any matching elements.
  */
 $.fn.enable = function(b) {
-       if (b === undefined) {
-               b = true;
-       }
-       return this.each(function() {
-               this.disabled = !b;
-       });
+    if (b === undefined) {
+        b = true;
+    }
+    return this.each(function() {
+        this.disabled = !b;
+    });
 };
 
 /**
@@ -878,34 +1051,39 @@ $.fn.enable = function(b) {
  * selects/deselects and matching option elements.
  */
 $.fn.selected = function(select) {
-       if (select === undefined) {
-               select = true;
-       }
-       return this.each(function() {
-               var t = this.type;
-               if (t == 'checkbox' || t == 'radio') {
-                       this.checked = select;
-               }
-               else if (this.tagName.toLowerCase() == 'option') {
-                       var $sel = $(this).parent('select');
-                       if (select && $sel[0] && $sel[0].type == 'select-one') {
-                               // deselect all other options
-                               $sel.find('option').selected(false);
-                       }
-                       this.selected = select;
-               }
-       });
+    if (select === undefined) {
+        select = true;
+    }
+    return this.each(function() {
+        var t = this.type;
+        if (t == 'checkbox' || t == 'radio') {
+            this.checked = select;
+        }
+        else if (this.tagName.toLowerCase() == 'option') {
+            var $sel = $(this).parent('select');
+            if (select && $sel[0] && $sel[0].type == 'select-one') {
+                // deselect all other options
+                $sel.find('option').selected(false);
+            }
+            this.selected = select;
+        }
+    });
 };
 
+// expose debug var
+$.fn.ajaxSubmit.debug = false;
+
 // helper fn for console logging
 function log() {
-       var msg = '[jquery.form] ' + Array.prototype.join.call(arguments,'');
-       if (window.console && window.console.log) {
-               window.console.log(msg);
-       }
-       else if (window.opera && window.opera.postError) {
-               window.opera.postError(msg);
-       }
-};
+    if (!$.fn.ajaxSubmit.debug) 
+        return;
+    var msg = '[jquery.form] ' + Array.prototype.join.call(arguments,'');
+    if (window.console && window.console.log) {
+        window.console.log(msg);
+    }
+    else if (window.opera && window.opera.postError) {
+        window.opera.postError(msg);
+    }
+}
 
 })(jQuery);
index fa4416c..0844da7 100644 (file)
@@ -9,8 +9,9 @@
 
                // 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++ ) {
+                       var i,
+                               patArray = pat.split( ' ' );
+                       for ( i = 0; i < patArray.length; i++ ) {
                                if ( patArray[i].length === 0 ) {
                                        continue;
                                }
 
                // scans a node looking for the pattern and wraps a span around each match
                innerHighlight: function ( node, pat ) {
+                       var i, match, pos, spannode, middlebit, middleclone;
                        // 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: do not use \b
                                // http://stackoverflow.com/questions/3787072/regex-wordwrap-with-utf8-characters-in-js
                                // look for an occurrence of our pattern and store the starting position
-                               var match = node.data.match( new RegExp( "(^|\\s)" + $.escapeRE( pat ), "i" ) );
+                               match = node.data.match( new RegExp( "(^|\\s)" + $.escapeRE( pat ), "i" ) );
                                if ( match ) {
-                                       var pos = match.index + match[1].length; // include length of any matched spaces
+                                       pos = match.index + match[1].length; // include length of any matched spaces
                                        // create the span wrapper for the matched text
-                                       var spannode = document.createElement( 'span' );
+                                       spannode = document.createElement( 'span' );
                                        spannode.className = 'highlight';
                                        // shave off the characters preceding the matched text
-                                       var middlebit = node.splitText( pos );
+                                       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 );
+                                       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
@@ -47,7 +49,7 @@
                        // 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 ) {
+                               for ( i = 0; i < node.childNodes.length; ++i ) {
                                        // call the highlight function for each child node
                                        $.highlightText.innerHighlight( node.childNodes[i], pat );
                                }
diff --git a/resources/jquery/jquery.jStorage.js b/resources/jquery/jquery.jStorage.js
new file mode 100644 (file)
index 0000000..95959cf
--- /dev/null
@@ -0,0 +1,532 @@
+/*
+ * ----------------------------- JSTORAGE -------------------------------------
+ * Simple local storage wrapper to save data on the browser side, supporting
+ * all major browsers - IE6+, Firefox2+, Safari4+, Chrome4+ and Opera 10.5+
+ *
+ * Copyright (c) 2010 Andris Reinman, andris.reinman@gmail.com
+ * Project homepage: www.jstorage.info
+ *
+ * Taken from Github with slight modifications by Hoo man
+ * https://raw.github.com/andris9/jStorage/master/jstorage.js
+ *
+ * Licensed under MIT-style license:
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/**
+ * $.jStorage
+ *
+ * USAGE:
+ *
+ * jStorage requires Prototype, MooTools or jQuery! If jQuery is used, then
+ * jQuery-JSON (http://code.google.com/p/jquery-json/) is also needed.
+ * (jQuery-JSON needs to be loaded BEFORE jStorage!)
+ *
+ * Methods:
+ *
+ * -set(key, value[, options])
+ * $.jStorage.set(key, value) -> saves a value
+ *
+ * -get(key[, default])
+ * value = $.jStorage.get(key [, default]) ->
+ *    retrieves value if key exists, or default if it doesn't
+ *
+ * -deleteKey(key)
+ * $.jStorage.deleteKey(key) -> removes a key from the storage
+ *
+ * -flush()
+ * $.jStorage.flush() -> clears the cache
+ *
+ * -storageObj()
+ * $.jStorage.storageObj() -> returns a read-ony copy of the actual storage
+ *
+ * -storageSize()
+ * $.jStorage.storageSize() -> returns the size of the storage in bytes
+ *
+ * -index()
+ * $.jStorage.index() -> returns the used keys as an array
+ *
+ * -storageAvailable()
+ * $.jStorage.storageAvailable() -> returns true if storage is available
+ *
+ * -reInit()
+ * $.jStorage.reInit() -> reloads the data from browser storage
+ *
+ * <value> can be any JSON-able value, including objects and arrays.
+ *
+ **/
+
+(function($){
+    if(!$ || !($.toJSON || Object.toJSON || window.JSON)){
+        throw new Error("jQuery, MooTools or Prototype needs to be loaded before jStorage!");
+    }
+
+    var
+        /* This is the object, that holds the cached values */
+        _storage = {},
+
+        /* Actual browser storage (localStorage or globalStorage['domain']) */
+        _storage_service = {jStorage:"{}"},
+
+        /* DOM element for older IE versions, holds userData behavior */
+        _storage_elm = null,
+
+        /* How much space does the storage take */
+        _storage_size = 0,
+
+        /* function to encode objects to JSON strings */
+        json_encode = $.toJSON || Object.toJSON || (window.JSON && (JSON.encode || JSON.stringify)),
+
+        /* function to decode objects from JSON strings */
+        json_decode = $.evalJSON || (window.JSON && (JSON.decode || JSON.parse)) || function(str){
+            return String(str).evalJSON();
+        },
+
+        /* which backend is currently used */
+        _backend = false,
+
+        /* Next check for TTL */
+        _ttl_timeout,
+
+        /**
+         * XML encoding and decoding as XML nodes can't be JSON'ized
+         * XML nodes are encoded and decoded if the node is the value to be saved
+         * but not if it's as a property of another object
+         * Eg. -
+         *   $.jStorage.set("key", xmlNode);        // IS OK
+         *   $.jStorage.set("key", {xml: xmlNode}); // NOT OK
+         */
+        _XMLService = {
+
+            /**
+             * Validates a XML node to be XML
+             * based on jQuery.isXML function
+             */
+            isXML: function(elm){
+                var documentElement = (elm ? elm.ownerDocument || elm : 0).documentElement;
+                return documentElement ? documentElement.nodeName !== "HTML" : false;
+            },
+
+            /**
+             * Encodes a XML node to string
+             * based on http://www.mercurytide.co.uk/news/article/issues-when-working-ajax/
+             */
+            encode: function(xmlNode) {
+                if(!this.isXML(xmlNode)){
+                    return false;
+                }
+                try{ // Mozilla, Webkit, Opera
+                    return new XMLSerializer().serializeToString(xmlNode);
+                }catch(E1) {
+                    try {  // IE
+                        return xmlNode.xml;
+                    }catch(E2){}
+                }
+                return false;
+            },
+
+            /**
+             * Decodes a XML node from string
+             * loosely based on http://outwestmedia.com/jquery-plugins/xmldom/
+             */
+            decode: function(xmlString){
+                var dom_parser = ("DOMParser" in window && (new DOMParser()).parseFromString) ||
+                        (window.ActiveXObject && function(_xmlString) {
+                    var xml_doc = new ActiveXObject('Microsoft.XMLDOM');
+                    xml_doc.async = 'false';
+                    xml_doc.loadXML(_xmlString);
+                    return xml_doc;
+                }),
+                resultXML;
+                if(!dom_parser){
+                    return false;
+                }
+                resultXML = dom_parser.call("DOMParser" in window && (new DOMParser()) || window, xmlString, 'text/xml');
+                return this.isXML(resultXML)?resultXML:false;
+            }
+        };
+
+    ////////////////////////// PRIVATE METHODS ////////////////////////
+
+    /**
+     * Initialization function. Detects if the browser supports DOM Storage
+     * or userData behavior and behaves accordingly.
+     * @returns undefined
+     */
+    function _init(){
+        /* Check if browser supports localStorage */
+        var localStorageReallyWorks = false;
+        if("localStorage" in window){
+            try {
+                window.localStorage.setItem('_tmptest', 'tmpval');
+                localStorageReallyWorks = true;
+                window.localStorage.removeItem('_tmptest');
+            } catch(BogusQuotaExceededErrorOnIos5) {
+                // Thanks be to iOS5 Private Browsing mode which throws
+                // QUOTA_EXCEEDED_ERRROR DOM Exception 22.
+            }
+        }
+        if(localStorageReallyWorks){
+            try {
+                if(window.localStorage) {
+                    _storage_service = window.localStorage;
+                    _backend = "localStorage";
+                }
+            } catch(E3) {/* Firefox fails when touching localStorage and cookies are disabled */}
+        }
+        /* Check if browser supports globalStorage */
+        else if("globalStorage" in window){
+            try {
+                if(window.globalStorage) {
+                    _storage_service = window.globalStorage[window.location.hostname];
+                    _backend = "globalStorage";
+                }
+            } catch(E4) {/* Firefox fails when touching localStorage and cookies are disabled */}
+        }
+        /* Check if browser supports userData behavior */
+        else {
+            _storage_elm = document.createElement('link');
+            if(_storage_elm.addBehavior){
+
+                /* Use a DOM element to act as userData storage */
+                _storage_elm.style.behavior = 'url(#default#userData)';
+
+                /* userData element needs to be inserted into the DOM! */
+                document.getElementsByTagName('head')[0].appendChild(_storage_elm);
+
+                _storage_elm.load("jStorage");
+                var data = "{}";
+                try{
+                    data = _storage_elm.getAttribute("jStorage");
+                }catch(E5){}
+                _storage_service.jStorage = data;
+                _backend = "userDataBehavior";
+            }else{
+                _storage_elm = null;
+                return;
+            }
+        }
+
+        _load_storage();
+
+        // remove dead keys
+        _handleTTL();
+    }
+
+    /**
+     * Loads the data from the storage based on the supported mechanism
+     * @returns undefined
+     */
+    function _load_storage(){
+        /* if jStorage string is retrieved, then decode it */
+        if(_storage_service.jStorage){
+            try{
+                _storage = json_decode(String(_storage_service.jStorage));
+            }catch(E6){_storage_service.jStorage = "{}";}
+        }else{
+            _storage_service.jStorage = "{}";
+        }
+        _storage_size = _storage_service.jStorage?String(_storage_service.jStorage).length:0;
+    }
+
+    /**
+     * This functions provides the "save" mechanism to store the jStorage object
+     * @returns undefined
+     */
+    function _save(){
+        try{
+            _storage_service.jStorage = json_encode(_storage);
+            // If userData is used as the storage engine, additional
+            if(_storage_elm) {
+                _storage_elm.setAttribute("jStorage",_storage_service.jStorage);
+                _storage_elm.save("jStorage");
+            }
+            _storage_size = _storage_service.jStorage?String(_storage_service.jStorage).length:0;
+        }catch(E7){/* probably cache is full, nothing is saved this way*/}
+    }
+
+    /**
+     * Function checks if a key is set and is string or numberic
+     */
+    function _checkKey(key){
+        if(!key || (typeof key !== "string" && typeof key !== "number")){
+            throw new TypeError('Key name must be string or numeric');
+        }
+        if(key === "__jstorage_meta"){
+            throw new TypeError('Reserved key name');
+        }
+        return true;
+    }
+
+    /**
+     * Removes expired keys
+     */
+    function _handleTTL(){
+        var curtime, i, TTL, nextExpire = Infinity, changed = false;
+
+        clearTimeout(_ttl_timeout);
+
+        if(!_storage.__jstorage_meta || typeof _storage.__jstorage_meta.TTL !== "object"){
+            // nothing to do here
+            return;
+        }
+
+        curtime = +new Date();
+        TTL = _storage.__jstorage_meta.TTL;
+        for(i in TTL){
+            if(TTL.hasOwnProperty(i)){
+                if(TTL[i] <= curtime){
+                    delete TTL[i];
+                    delete _storage[i];
+                    changed = true;
+                }else if(TTL[i] < nextExpire){
+                    nextExpire = TTL[i];
+                }
+            }
+        }
+
+        // set next check
+        if(nextExpire != Infinity){
+            _ttl_timeout = setTimeout(_handleTTL, nextExpire - curtime);
+        }
+
+        // save changes
+        if(changed){
+            _save();
+        }
+    }
+
+    ////////////////////////// PUBLIC INTERFACE /////////////////////////
+
+    $.jStorage = {
+        /* Version number */
+        version: "0.1.7.0",
+
+        /**
+         * Sets a key's value.
+         *
+         * @param {String} key - Key to set. If this value is not set or not
+         *              a string an exception is raised.
+         * @param {Mixed} value - Value to set. This can be any value that is JSON
+         *              compatible (Numbers, Strings, Objects etc.).
+         * @param {Object} [options] - possible options to use
+         * @param {Number} [options.TTL] - optional TTL value
+         * @returns the used value
+         */
+        set: function(key, value, options){
+            _checkKey(key);
+
+            options = options || {};
+
+            if(_XMLService.isXML(value)){
+                value = {_is_xml:true,xml:_XMLService.encode(value)};
+            }else if(typeof value === "function"){
+                value = null; // functions can't be saved!
+            }else if(value && typeof value === "object"){
+                // clone the object before saving to _storage tree
+                value = json_decode(json_encode(value));
+            }
+            _storage[key] = value;
+
+            if(!isNaN(options.TTL)){
+                this.setTTL(key, options.TTL);
+                // also handles saving
+            }else{
+                _save();
+            }
+            return value;
+        },
+
+        /**
+         * Looks up a key in cache
+         *
+         * @param {String} key - Key to look up.
+         * @param {mixed} def - Default value to return, if key didn't exist.
+         * @returns the key value, default value or <null>
+         */
+        get: function(key, def){
+            _checkKey(key);
+            if(key in _storage){
+                if(_storage[key] && typeof _storage[key] === "object" &&
+                        _storage[key]._is_xml &&
+                            _storage[key]._is_xml){
+                    return _XMLService.decode(_storage[key].xml);
+                }else{
+                    return _storage[key];
+                }
+            }
+            return typeof(def) === 'undefined' ? null : def;
+        },
+
+        /**
+         * Deletes a key from cache.
+         *
+         * @param {String} key - Key to delete.
+         * @returns true if key existed or false if it didn't
+         */
+        deleteKey: function(key){
+            _checkKey(key);
+            if(key in _storage){
+                delete _storage[key];
+                // remove from TTL list
+                if(_storage.__jstorage_meta &&
+                  typeof _storage.__jstorage_meta.TTL === "object" &&
+                  key in _storage.__jstorage_meta.TTL){
+                    delete _storage.__jstorage_meta.TTL[key];
+                }
+                _save();
+                return true;
+            }
+            return false;
+        },
+
+        /**
+         * Sets a TTL for a key, or remove it if ttl value is 0 or below
+         *
+         * @param {String} key - key to set the TTL for
+         * @param {Number} ttl - TTL timeout in milliseconds
+         * @returns true if key existed or false if it didn't
+         */
+        setTTL: function(key, ttl){
+            var curtime = +new Date();
+            _checkKey(key);
+            ttl = Number(ttl) || 0;
+            if(key in _storage){
+
+                if(!_storage.__jstorage_meta){
+                    _storage.__jstorage_meta = {};
+                }
+                if(!_storage.__jstorage_meta.TTL){
+                    _storage.__jstorage_meta.TTL = {};
+                }
+
+                // Set TTL value for the key
+                if(ttl>0){
+                    _storage.__jstorage_meta.TTL[key] = curtime + ttl;
+                }else{
+                    delete _storage.__jstorage_meta.TTL[key];
+                }
+
+                _save();
+
+                _handleTTL();
+                return true;
+            }
+            return false;
+        },
+
+        /**
+         * Deletes everything in cache.
+         *
+         * @return true
+         */
+        flush: function(){
+            _storage = {};
+            _save();
+            return true;
+        },
+
+        /**
+         * Returns a read-only copy of _storage
+         *
+         * @returns Object
+        */
+        storageObj: function(){
+            function F() {}
+            F.prototype = _storage;
+            return new F();
+        },
+
+        /**
+         * Returns an index of all used keys as an array
+         * ['key1', 'key2',..'keyN']
+         *
+         * @returns Array
+        */
+        index: function(){
+            var index = [], i;
+            for(i in _storage){
+                if(_storage.hasOwnProperty(i) && i !== "__jstorage_meta"){
+                    index.push(i);
+                }
+            }
+            return index;
+        },
+
+        /**
+         * How much space in bytes does the storage take?
+         *
+         * @returns Number
+         */
+        storageSize: function(){
+            return _storage_size;
+        },
+
+        /**
+         * Which backend is currently in use?
+         *
+         * @returns String
+         */
+        currentBackend: function(){
+            return _backend;
+        },
+
+        /**
+         * Test if storage is available
+         *
+         * @returns Boolean
+         */
+        storageAvailable: function(){
+            return !!_backend;
+        },
+
+        /**
+         * Reloads the data from browser storage
+         *
+         * @returns undefined
+         */
+        reInit: function(){
+            var new_storage_elm, data;
+            if(_storage_elm && _storage_elm.addBehavior){
+                new_storage_elm = document.createElement('link');
+
+                _storage_elm.parentNode.replaceChild(new_storage_elm, _storage_elm);
+                _storage_elm = new_storage_elm;
+
+                /* Use a DOM element to act as userData storage */
+                _storage_elm.style.behavior = 'url(#default#userData)';
+
+                /* userData element needs to be inserted into the DOM! */
+                document.getElementsByTagName('head')[0].appendChild(_storage_elm);
+
+                _storage_elm.load("jStorage");
+                data = "{}";
+                try{
+                    data = _storage_elm.getAttribute("jStorage");
+                }catch(E5){}
+                _storage_service.jStorage = data;
+                _backend = "userDataBehavior";
+            }
+
+            _load_storage();
+        }
+    };
+
+    // Initialize jStorage
+    _init();
+
+})(window.$ || window.jQuery);
index 0770682..b7dd119 100644 (file)
 /*!
- * jQuery JavaScript Library v1.8.0
+ * jQuery JavaScript Library v1.7.2
  * http://jquery.com/
  *
+ * Copyright 2011, John Resig
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
  * Includes Sizzle.js
  * http://sizzlejs.com/
+ * Copyright 2011, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
  *
- * Copyright 2012 jQuery Foundation and other contributors
- * Released under the MIT license
- * http://jquery.org/license
- *
- * Date: Thu Aug 09 2012 16:24:48 GMT-0400 (Eastern Daylight Time)
+ * Date: Wed Mar 21 12:46:34 2012 -0700
  */
 (function( window, undefined ) {
-var
-       // A central reference to the root jQuery(document)
-       rootjQuery,
-
-       // The deferred used on DOM ready
-       readyList,
-
-       // Use the correct document accordingly with window argument (sandbox)
-       document = window.document,
-       location = window.location,
-       navigator = window.navigator,
-
-       // Map over jQuery in case of overwrite
-       _jQuery = window.jQuery,
-
-       // Map over the $ in case of overwrite
-       _$ = window.$,
-
-       // Save a reference to some core methods
-       core_push = Array.prototype.push,
-       core_slice = Array.prototype.slice,
-       core_indexOf = Array.prototype.indexOf,
-       core_toString = Object.prototype.toString,
-       core_hasOwn = Object.prototype.hasOwnProperty,
-       core_trim = String.prototype.trim,
-
-       // Define a local copy of jQuery
-       jQuery = function( selector, context ) {
-               // The jQuery object is actually just the init constructor 'enhanced'
-               return new jQuery.fn.init( selector, context, rootjQuery );
-       },
-
-       // Used for matching numbers
-       core_pnum = /[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source,
-
-       // Used for detecting and trimming whitespace
-       core_rnotwhite = /\S/,
-       core_rspace = /\s+/,
-
-       // IE doesn't match non-breaking spaces with \s
-       rtrim = core_rnotwhite.test("\xA0") ? (/^[\s\xA0]+|[\s\xA0]+$/g) : /^\s+|\s+$/g,
-
-       // A simple way to check for HTML strings
-       // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
-       rquickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,
-
-       // Match a standalone tag
-       rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/,
-
-       // JSON RegExp
-       rvalidchars = /^[\],:{}\s]*$/,
-       rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
-       rvalidescape = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,
-       rvalidtokens = /"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g,
-
-       // Matches dashed string for camelizing
-       rmsPrefix = /^-ms-/,
-       rdashAlpha = /-([\da-z])/gi,
-
-       // Used by jQuery.camelCase as callback to replace()
-       fcamelCase = function( all, letter ) {
-               return ( letter + "" ).toUpperCase();
-       },
-
-       // The ready event handler and self cleanup method
-       DOMContentLoaded = function() {
-               if ( document.addEventListener ) {
-                       document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false );
-                       jQuery.ready();
-               } else if ( document.readyState === "complete" ) {
-                       // we're here because readyState === "complete" in oldIE
-                       // which is good enough for us to call the dom ready!
-                       document.detachEvent( "onreadystatechange", DOMContentLoaded );
-                       jQuery.ready();
-               }
-       },
 
-       // [[Class]] -> type pairs
-       class2type = {};
+// Use the correct document accordingly with window argument (sandbox)
+       var document = window.document,
+               navigator = window.navigator,
+               location = window.location;
+       var jQuery = (function() {
 
-jQuery.fn = jQuery.prototype = {
-       constructor: jQuery,
-       init: function( selector, context, rootjQuery ) {
-               var match, elem, ret, doc;
+// 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, rootjQuery );
+                       },
 
-               // Handle $(""), $(null), $(undefined), $(false)
-               if ( !selector ) {
-                       return this;
-               }
+               // Map over jQuery in case of overwrite
+                       _jQuery = window.jQuery,
 
-               // Handle $(DOMElement)
-               if ( selector.nodeType ) {
-                       this.context = this[0] = selector;
-                       this.length = 1;
-                       return this;
-               }
+               // Map over the $ in case of overwrite
+                       _$ = window.$,
 
-               // Handle HTML strings
-               if ( typeof selector === "string" ) {
-                       if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
-                               // Assume that strings that start and end with <> are HTML and skip the regex check
-                               match = [ null, selector, null ];
+               // A central reference to the root jQuery(document)
+                       rootjQuery,
 
-                       } else {
-                               match = rquickExpr.exec( selector );
-                       }
+               // A simple way to check for HTML strings or ID strings
+               // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
+                       quickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,
 
-                       // Match html or make sure no context is specified for #id
-                       if ( match && (match[1] || !context) ) {
+               // Check if a string has a non-whitespace character in it
+                       rnotwhite = /\S/,
 
-                               // HANDLE: $(html) -> $(array)
-                               if ( match[1] ) {
-                                       context = context instanceof jQuery ? context[0] : context;
-                                       doc = ( context && context.nodeType ? context.ownerDocument || context : document );
+               // Used for trimming whitespace
+                       trimLeft = /^\s+/,
+                       trimRight = /\s+$/,
 
-                                       // scripts is true for back-compat
-                                       selector = jQuery.parseHTML( match[1], doc, true );
-                                       if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {
-                                               this.attr.call( selector, context, true );
-                                       }
+               // Match a standalone tag
+                       rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/,
 
-                                       return jQuery.merge( this, selector );
+               // JSON RegExp
+                       rvalidchars = /^[\],:{}\s]*$/,
+                       rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,
+                       rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
+                       rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
 
-                               // HANDLE: $(#id)
-                               } else {
-                                       elem = document.getElementById( match[2] );
-
-                                       // Check parentNode to catch when Blackberry 4.6 returns
-                                       // nodes that are no longer in the document #6963
-                                       if ( elem && elem.parentNode ) {
-                                               // Handle the case where IE and Opera return items
-                                               // by name instead of ID
-                                               if ( elem.id !== match[2] ) {
-                                                       return rootjQuery.find( selector );
-                                               }
+               // Useragent RegExp
+                       rwebkit = /(webkit)[ \/]([\w.]+)/,
+                       ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/,
+                       rmsie = /(msie) ([\w.]+)/,
+                       rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/,
 
-                                               // Otherwise, we inject the element directly into the jQuery object
-                                               this.length = 1;
-                                               this[0] = elem;
-                                       }
+               // Matches dashed string for camelizing
+                       rdashAlpha = /-([a-z]|[0-9])/ig,
+                       rmsPrefix = /^-ms-/,
+
+               // Used by jQuery.camelCase as callback to replace()
+                       fcamelCase = function( all, letter ) {
+                               return ( letter + "" ).toUpperCase();
+                       },
+
+               // Keep a UserAgent string for use with jQuery.browser
+                       userAgent = navigator.userAgent,
+
+               // For matching the engine and version of the browser
+                       browserMatch,
+
+               // The deferred used on DOM ready
+                       readyList,
+
+               // The ready event handler
+                       DOMContentLoaded,
+
+               // Save a reference to some core methods
+                       toString = Object.prototype.toString,
+                       hasOwn = Object.prototype.hasOwnProperty,
+                       push = Array.prototype.push,
+                       slice = Array.prototype.slice,
+                       trim = String.prototype.trim,
+                       indexOf = Array.prototype.indexOf,
+
+               // [[Class]] -> type pairs
+                       class2type = {};
+
+               jQuery.fn = jQuery.prototype = {
+                       constructor: jQuery,
+                       init: function( selector, context, rootjQuery ) {
+                               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 && document.body ) {
                                        this.context = document;
+                                       this[0] = document.body;
                                        this.selector = selector;
+                                       this.length = 1;
                                        return this;
                                }
 
-                       // HANDLE: $(expr, $(...))
-                       } else if ( !context || context.jquery ) {
-                               return ( context || rootjQuery ).find( selector );
+                               // Handle HTML strings
+                               if ( typeof selector === "string" ) {
+                                       // Are we dealing with HTML string or an ID?
+                                       if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
+                                               // Assume that strings that start and end with <> are HTML and skip the regex check
+                                               match = [ null, selector, null ];
 
-                       // HANDLE: $(expr, context)
-                       // (which is just equivalent to: $(context).find(expr)
-                       } else {
-                               return this.constructor( context ).find( selector );
-                       }
+                                       } else {
+                                               match = quickExpr.exec( selector );
+                                       }
 
-               // HANDLE: $(function)
-               // Shortcut for document ready
-               } else if ( jQuery.isFunction( selector ) ) {
-                       return rootjQuery.ready( selector );
-               }
+                                       // Verify a match, and that no context was specified for #id
+                                       if ( match && (match[1] || !context) ) {
 
-               if ( selector.selector !== undefined ) {
-                       this.selector = selector.selector;
-                       this.context = selector.context;
-               }
+                                               // HANDLE: $(html) -> $(array)
+                                               if ( match[1] ) {
+                                                       context = context instanceof jQuery ? context[0] : context;
+                                                       doc = ( context ? context.ownerDocument || context : document );
 
-               return jQuery.makeArray( selector, this );
-       },
+                                                       // 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 );
 
-       // Start with an empty selector
-       selector: "",
+                                                       if ( ret ) {
+                                                               if ( jQuery.isPlainObject( context ) ) {
+                                                                       selector = [ document.createElement( ret[1] ) ];
+                                                                       jQuery.fn.attr.call( selector, context, true );
 
-       // The current version of jQuery being used
-       jquery: "1.8.0",
+                                                               } else {
+                                                                       selector = [ doc.createElement( ret[1] ) ];
+                                                               }
 
-       // The default length of a jQuery object is 0
-       length: 0,
+                                                       } else {
+                                                               ret = jQuery.buildFragment( [ match[1] ], [ doc ] );
+                                                               selector = ( ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment ).childNodes;
+                                                       }
 
-       // The number of elements contained in the matched element set
-       size: function() {
-               return this.length;
-       },
+                                                       return jQuery.merge( this, selector );
 
-       toArray: function() {
-               return core_slice.call( this );
-       },
+                                                       // HANDLE: $("#id")
+                                               } else {
+                                                       elem = document.getElementById( match[2] );
+
+                                                       // Check parentNode to catch when Blackberry 4.6 returns
+                                                       // nodes that are no longer in the document #6963
+                                                       if ( elem && elem.parentNode ) {
+                                                               // Handle the case where IE and Opera return items
+                                                               // by name instead of ID
+                                                               if ( elem.id !== match[2] ) {
+                                                                       return rootjQuery.find( selector );
+                                                               }
 
-       // 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 ?
+                                                               // Otherwise, we inject the element directly into the jQuery object
+                                                               this.length = 1;
+                                                               this[0] = elem;
+                                                       }
 
-                       // Return a 'clean' array
-                       this.toArray() :
+                                                       this.context = document;
+                                                       this.selector = selector;
+                                                       return this;
+                                               }
 
-                       // Return just the object
-                       ( num < 0 ? this[ this.length + num ] : this[ num ] );
-       },
+                                               // HANDLE: $(expr, $(...))
+                                       } else if ( !context || context.jquery ) {
+                                               return ( context || rootjQuery ).find( selector );
 
-       // Take an array of elements and push it onto the stack
-       // (returning the new matched element set)
-       pushStack: function( elems, name, selector ) {
+                                               // HANDLE: $(expr, context)
+                                               // (which is just equivalent to: $(context).find(expr)
+                                       } else {
+                                               return this.constructor( context ).find( selector );
+                                       }
 
-               // Build a new jQuery matched element set
-               var ret = jQuery.merge( this.constructor(), elems );
+                                       // HANDLE: $(function)
+                                       // Shortcut for document ready
+                               } else if ( jQuery.isFunction( selector ) ) {
+                                       return rootjQuery.ready( selector );
+                               }
 
-               // Add the old object onto the stack (as a reference)
-               ret.prevObject = this;
+                               if ( selector.selector !== undefined ) {
+                                       this.selector = selector.selector;
+                                       this.context = selector.context;
+                               }
 
-               ret.context = this.context;
+                               return jQuery.makeArray( selector, this );
+                       },
 
-               if ( name === "find" ) {
-                       ret.selector = this.selector + ( this.selector ? " " : "" ) + selector;
-               } else if ( name ) {
-                       ret.selector = this.selector + "." + name + "(" + selector + ")";
-               }
+                       // Start with an empty selector
+                       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 ) {
-               // Add the callback
-               jQuery.ready.promise().done( fn );
-
-               return this;
-       },
-
-       eq: function( i ) {
-               i = +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( core_slice.apply( this, arguments ),
-                       "slice", core_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 || this.constructor(null);
-       },
-
-       // For internal use only.
-       // Behaves like an Array's method, not like a jQuery method.
-       push: core_push,
-       sort: [].sort,
-       splice: [].splice
-};
+                       // The current version of jQuery being used
+                       jquery: "1.7.2",
 
-// Give the init function the jQuery prototype for later instantiation
-jQuery.fn.init.prototype = jQuery.fn;
-
-jQuery.extend = jQuery.fn.extend = function() {
-       var options, name, src, copy, copyIsArray, clone,
-               target = arguments[0] || {},
-               i = 1,
-               length = arguments.length,
-               deep = false;
-
-       // Handle a deep copy situation
-       if ( typeof target === "boolean" ) {
-               deep = target;
-               target = arguments[1] || {};
-               // skip the boolean and the target
-               i = 2;
-       }
+                       // The default length of a jQuery object is 0
+                       length: 0,
 
-       // Handle case when target is a string or something (possible in deep copy)
-       if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
-               target = {};
-       }
+                       // The number of elements contained in the matched element set
+                       size: function() {
+                               return this.length;
+                       },
 
-       // extend jQuery itself if only one argument is passed
-       if ( length === i ) {
-               target = this;
-               --i;
-       }
+                       toArray: function() {
+                               return slice.call( this, 0 );
+                       },
 
-       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 ];
+                       // 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 ?
 
-                               // Prevent never-ending loop
-                               if ( target === copy ) {
-                                       continue;
-                               }
+                                       // Return a 'clean' array
+                                       this.toArray() :
 
-                               // Recurse if we're merging plain objects or arrays
-                               if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
-                                       if ( copyIsArray ) {
-                                               copyIsArray = false;
-                                               clone = src && jQuery.isArray(src) ? src : [];
+                                       // Return just the object
+                                       ( num < 0 ? this[ this.length + num ] : this[ num ] );
+                       },
 
-                                       } else {
-                                               clone = src && jQuery.isPlainObject(src) ? src : {};
-                                       }
+                       // 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 = this.constructor();
 
-                                       // Never move original objects, clone them
-                                       target[ name ] = jQuery.extend( deep, clone, copy );
+                               if ( jQuery.isArray( elems ) ) {
+                                       push.apply( ret, elems );
 
-                               // Don't bring in undefined values
-                               } else if ( copy !== undefined ) {
-                                       target[ name ] = copy;
+                               } else {
+                                       jQuery.merge( ret, elems );
                                }
-                       }
-               }
-       }
 
-       // Return the modified object
-       return target;
-};
+                               // Add the old object onto the stack (as a reference)
+                               ret.prevObject = this;
 
-jQuery.extend({
-       noConflict: function( deep ) {
-               if ( window.$ === jQuery ) {
-                       window.$ = _$;
-               }
+                               ret.context = this.context;
 
-               if ( deep && window.jQuery === jQuery ) {
-                       window.jQuery = _jQuery;
-               }
+                               if ( name === "find" ) {
+                                       ret.selector = this.selector + ( this.selector ? " " : "" ) + selector;
+                               } else if ( name ) {
+                                       ret.selector = this.selector + "." + name + "(" + selector + ")";
+                               }
 
-               return jQuery;
-       },
+                               // Return the newly-formed element set
+                               return ret;
+                       },
 
-       // Is the DOM ready to be used? Set to true once it occurs.
-       isReady: false,
+                       // 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 );
+                       },
 
-       // A counter to track how many items to wait for before
-       // the ready event fires. See #6781
-       readyWait: 1,
+                       ready: function( fn ) {
+                               // Attach the listeners
+                               jQuery.bindReady();
 
-       // Hold (or release) the ready event
-       holdReady: function( hold ) {
-               if ( hold ) {
-                       jQuery.readyWait++;
-               } else {
-                       jQuery.ready( true );
-               }
-       },
+                               // Add the callback
+                               readyList.add( fn );
 
-       // Handle when the DOM is ready
-       ready: function( wait ) {
+                               return this;
+                       },
 
-               // Abort if there are pending holds or we're already ready
-               if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
-                       return;
-               }
+                       eq: function( i ) {
+                               i = +i;
+                               return i === -1 ?
+                                       this.slice( i ) :
+                                       this.slice( i, i + 1 );
+                       },
 
-               // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
-               if ( !document.body ) {
-                       return setTimeout( jQuery.ready, 1 );
-               }
+                       first: function() {
+                               return this.eq( 0 );
+                       },
 
-               // Remember that the DOM is ready
-               jQuery.isReady = true;
+                       last: function() {
+                               return this.eq( -1 );
+                       },
 
-               // If a normal DOM Ready event fired, decrement, and wait if need be
-               if ( wait !== true && --jQuery.readyWait > 0 ) {
-                       return;
-               }
+                       slice: function() {
+                               return this.pushStack( slice.apply( this, arguments ),
+                                       "slice", slice.call(arguments).join(",") );
+                       },
 
-               // If there are functions bound, to execute
-               readyList.resolveWith( document, [ jQuery ] );
+                       map: function( callback ) {
+                               return this.pushStack( jQuery.map(this, function( elem, i ) {
+                                       return callback.call( elem, i, elem );
+                               }));
+                       },
 
-               // Trigger any bound ready events
-               if ( jQuery.fn.trigger ) {
-                       jQuery( document ).trigger("ready").off("ready");
-               }
-       },
-
-       // 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 jQuery.type(obj) === "function";
-       },
-
-       isArray: Array.isArray || function( obj ) {
-               return jQuery.type(obj) === "array";
-       },
-
-       isWindow: function( obj ) {
-               return obj != null && obj == obj.window;
-       },
-
-       isNumeric: function( obj ) {
-               return !isNaN( parseFloat(obj) ) && isFinite( obj );
-       },
-
-       type: function( obj ) {
-               return obj == null ?
-                       String( obj ) :
-                       class2type[ core_toString.call(obj) ] || "object";
-       },
-
-       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 || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
-                       return false;
-               }
+                       end: function() {
+                               return this.prevObject || this.constructor(null);
+                       },
 
-               try {
-                       // Not own constructor property must be Object
-                       if ( obj.constructor &&
-                               !core_hasOwn.call(obj, "constructor") &&
-                               !core_hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
-                               return false;
-                       }
-               } catch ( e ) {
-                       // IE8,9 Will throw exceptions on certain host objects #9897
-                       return false;
-               }
+                       // For internal use only.
+                       // Behaves like an Array's method, not like a jQuery method.
+                       push: push,
+                       sort: [].sort,
+                       splice: [].splice
+               };
 
-               // Own properties are enumerated firstly, so to speed up,
-               // if last one is own, then all properties are own.
+// Give the init function the jQuery prototype for later instantiation
+               jQuery.fn.init.prototype = jQuery.fn;
 
-               var key;
-               for ( key in obj ) {}
+               jQuery.extend = jQuery.fn.extend = function() {
+                       var options, name, src, copy, copyIsArray, clone,
+                               target = arguments[0] || {},
+                               i = 1,
+                               length = arguments.length,
+                               deep = false;
 
-               return key === undefined || core_hasOwn.call( obj, key );
-       },
+                       // Handle a deep copy situation
+                       if ( typeof target === "boolean" ) {
+                               deep = target;
+                               target = arguments[1] || {};
+                               // skip the boolean and the target
+                               i = 2;
+                       }
 
-       isEmptyObject: function( obj ) {
-               var name;
-               for ( name in obj ) {
-                       return false;
-               }
-               return true;
-       },
-
-       error: function( msg ) {
-               throw new Error( msg );
-       },
-
-       // data: string of html
-       // context (optional): If specified, the fragment will be created in this context, defaults to document
-       // scripts (optional): If true, will include scripts passed in the html string
-       parseHTML: function( data, context, scripts ) {
-               var parsed;
-               if ( !data || typeof data !== "string" ) {
-                       return null;
-               }
-               if ( typeof context === "boolean" ) {
-                       scripts = context;
-                       context = 0;
-               }
-               context = context || document;
+                       // Handle case when target is a string or something (possible in deep copy)
+                       if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
+                               target = {};
+                       }
 
-               // Single tag
-               if ( (parsed = rsingleTag.exec( data )) ) {
-                       return [ context.createElement( parsed[1] ) ];
-               }
+                       // extend jQuery itself if only one argument is passed
+                       if ( length === i ) {
+                               target = this;
+                               --i;
+                       }
 
-               parsed = jQuery.buildFragment( [ data ], context, scripts ? null : [] );
-               return jQuery.merge( [],
-                       (parsed.cacheable ? jQuery.clone( parsed.fragment ) : parsed.fragment).childNodes );
-       },
+                       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;
+                                               }
 
-       parseJSON: function( data ) {
-               if ( !data || typeof data !== "string") {
-                       return null;
-               }
+                                               // Recurse if we're merging plain objects or arrays
+                                               if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
+                                                       if ( copyIsArray ) {
+                                                               copyIsArray = false;
+                                                               clone = src && jQuery.isArray(src) ? src : [];
 
-               // Make sure leading/trailing whitespace is removed (IE can't handle it)
-               data = jQuery.trim( data );
+                                                       } else {
+                                                               clone = src && jQuery.isPlainObject(src) ? src : {};
+                                                       }
 
-               // Attempt to parse using the native JSON parser first
-               if ( window.JSON && window.JSON.parse ) {
-                       return window.JSON.parse( data );
-               }
+                                                       // Never move original objects, clone them
+                                                       target[ name ] = jQuery.extend( deep, clone, copy );
 
-               // Make sure the incoming data is actual JSON
-               // Logic borrowed from http://json.org/json2.js
-               if ( rvalidchars.test( data.replace( rvalidescape, "@" )
-                       .replace( rvalidtokens, "]" )
-                       .replace( rvalidbraces, "")) ) {
+                                                       // Don't bring in undefined values
+                                               } else if ( copy !== undefined ) {
+                                                       target[ name ] = copy;
+                                               }
+                                       }
+                               }
+                       }
 
-                       return ( new Function( "return " + data ) )();
+                       // Return the modified object
+                       return target;
+               };
 
-               }
-               jQuery.error( "Invalid JSON: " + data );
-       },
+               jQuery.extend({
+                       noConflict: function( deep ) {
+                               if ( window.$ === jQuery ) {
+                                       window.$ = _$;
+                               }
 
-       // Cross-browser xml parsing
-       parseXML: function( data ) {
-               var xml, tmp;
-               if ( !data || typeof data !== "string" ) {
-                       return null;
-               }
-               try {
-                       if ( window.DOMParser ) { // Standard
-                               tmp = new DOMParser();
-                               xml = tmp.parseFromString( data , "text/xml" );
-                       } else { // IE
-                               xml = new ActiveXObject( "Microsoft.XMLDOM" );
-                               xml.async = "false";
-                               xml.loadXML( data );
-                       }
-               } catch( e ) {
-                       xml = undefined;
-               }
-               if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
-                       jQuery.error( "Invalid XML: " + data );
-               }
-               return xml;
-       },
-
-       noop: function() {},
-
-       // Evaluates a script in a global context
-       // Workarounds based on findings by Jim Driscoll
-       // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
-       globalEval: function( data ) {
-               if ( data && core_rnotwhite.test( data ) ) {
-                       // We use execScript on Internet Explorer
-                       // We use an anonymous function so that context is window
-                       // rather than jQuery in Firefox
-                       ( window.execScript || function( data ) {
-                               window[ "eval" ].call( window, data );
-                       } )( data );
-               }
-       },
+                               if ( deep && window.jQuery === jQuery ) {
+                                       window.jQuery = _jQuery;
+                               }
 
-       // Convert dashed to camelCase; used by the css and data modules
-       // Microsoft forgot to hump their vendor prefix (#9572)
-       camelCase: function( string ) {
-               return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
-       },
+                               return jQuery;
+                       },
 
-       nodeName: function( elem, name ) {
-               return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase();
-       },
+                       // Is the DOM ready to be used? Set to true once it occurs.
+                       isReady: false,
 
-       // args is for internal usage only
-       each: function( obj, callback, args ) {
-               var name,
-                       i = 0,
-                       length = obj.length,
-                       isObj = length === undefined || jQuery.isFunction( obj );
+                       // A counter to track how many items to wait for before
+                       // the ready event fires. See #6781
+                       readyWait: 1,
 
-               if ( args ) {
-                       if ( isObj ) {
-                               for ( name in obj ) {
-                                       if ( callback.apply( obj[ name ], args ) === false ) {
-                                               break;
-                                       }
+                       // Hold (or release) the ready event
+                       holdReady: function( hold ) {
+                               if ( hold ) {
+                                       jQuery.readyWait++;
+                               } else {
+                                       jQuery.ready( true );
                                }
-                       } else {
-                               for ( ; i < length; ) {
-                                       if ( callback.apply( obj[ i++ ], args ) === false ) {
-                                               break;
+                       },
+
+                       // Handle when the DOM is ready
+                       ready: function( wait ) {
+                               // Either a released hold or an DOMready/load event and not yet ready
+                               if ( (wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady) ) {
+                                       // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
+                                       if ( !document.body ) {
+                                               return setTimeout( jQuery.ready, 1 );
                                        }
-                               }
-                       }
 
-               // A special, fast, case for the most common use of each
-               } else {
-                       if ( isObj ) {
-                               for ( name in obj ) {
-                                       if ( callback.call( obj[ name ], name, obj[ name ] ) === false ) {
-                                               break;
+                                       // Remember that the DOM is ready
+                                       jQuery.isReady = true;
+
+                                       // If a normal DOM Ready event fired, decrement, and wait if need be
+                                       if ( wait !== true && --jQuery.readyWait > 0 ) {
+                                               return;
                                        }
-                               }
-                       } else {
-                               for ( ; i < length; ) {
-                                       if ( callback.call( obj[ i ], i, obj[ i++ ] ) === false ) {
-                                               break;
+
+                                       // If there are functions bound, to execute
+                                       readyList.fireWith( document, [ jQuery ] );
+
+                                       // Trigger any bound ready events
+                                       if ( jQuery.fn.trigger ) {
+                                               jQuery( document ).trigger( "ready" ).off( "ready" );
                                        }
                                }
-                       }
-               }
+                       },
 
-               return obj;
-       },
-
-       // Use native String.trim function wherever possible
-       trim: core_trim ?
-               function( text ) {
-                       return text == null ?
-                               "" :
-                               core_trim.call( text );
-               } :
+                       bindReady: function() {
+                               if ( readyList ) {
+                                       return;
+                               }
 
-               // Otherwise use our own trimming functionality
-               function( text ) {
-                       return text == null ?
-                               "" :
-                               text.toString().replace( rtrim, "" );
-               },
+                               readyList = jQuery.Callbacks( "once memory" );
 
-       // results is for internal usage only
-       makeArray: function( arr, results ) {
-               var type,
-                       ret = results || [];
+                               // Catch cases where $(document).ready() is called after the
+                               // browser event has already occurred.
+                               if ( document.readyState === "complete" ) {
+                                       // Handle it asynchronously to allow scripts the opportunity to delay ready
+                                       return setTimeout( jQuery.ready, 1 );
+                               }
 
-               if ( arr != null ) {
-                       // The window, strings (and functions) also have 'length'
-                       // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930
-                       type = jQuery.type( arr );
+                               // Mozilla, Opera and webkit nightlies currently support this event
+                               if ( document.addEventListener ) {
+                                       // Use the handy event callback
+                                       document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
 
-                       if ( arr.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( arr ) ) {
-                               core_push.call( ret, arr );
-                       } else {
-                               jQuery.merge( ret, arr );
-                       }
-               }
+                                       // A fallback to window.onload, that will always work
+                                       window.addEventListener( "load", jQuery.ready, false );
 
-               return ret;
-       },
+                                       // 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 );
 
-       inArray: function( elem, arr, i ) {
-               var len;
+                                       // A fallback to window.onload, that will always work
+                                       window.attachEvent( "onload", jQuery.ready );
 
-               if ( arr ) {
-                       if ( core_indexOf ) {
-                               return core_indexOf.call( arr, elem, i );
-                       }
+                                       // If IE and not a frame
+                                       // continually check to see if the document is ready
+                                       var toplevel = false;
 
-                       len = arr.length;
-                       i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
+                                       try {
+                                               toplevel = window.frameElement == null;
+                                       } catch(e) {}
 
-                       for ( ; i < len; i++ ) {
-                               // Skip accessing in sparse arrays
-                               if ( i in arr && arr[ i ] === elem ) {
-                                       return i;
+                                       if ( document.documentElement.doScroll && toplevel ) {
+                                               doScrollCheck();
+                                       }
                                }
-                       }
-               }
+                       },
 
-               return -1;
-       },
+                       // 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 jQuery.type(obj) === "function";
+                       },
 
-       merge: function( first, second ) {
-               var l = second.length,
-                       i = first.length,
-                       j = 0;
+                       isArray: Array.isArray || function( obj ) {
+                               return jQuery.type(obj) === "array";
+                       },
 
-               if ( typeof l === "number" ) {
-                       for ( ; j < l; j++ ) {
-                               first[ i++ ] = second[ j ];
-                       }
+                       isWindow: function( obj ) {
+                               return obj != null && obj == obj.window;
+                       },
 
-               } else {
-                       while ( second[j] !== undefined ) {
-                               first[ i++ ] = second[ j++ ];
-                       }
-               }
+                       isNumeric: function( obj ) {
+                               return !isNaN( parseFloat(obj) ) && isFinite( obj );
+                       },
 
-               first.length = i;
+                       type: function( obj ) {
+                               return obj == null ?
+                                       String( obj ) :
+                                       class2type[ toString.call(obj) ] || "object";
+                       },
 
-               return first;
-       },
+                       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 || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
+                                       return false;
+                               }
 
-       grep: function( elems, callback, inv ) {
-               var retVal,
-                       ret = [],
-                       i = 0,
-                       length = elems.length;
-               inv = !!inv;
+                               try {
+                                       // Not own constructor property must be Object
+                                       if ( obj.constructor &&
+                                               !hasOwn.call(obj, "constructor") &&
+                                               !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
+                                               return false;
+                                       }
+                               } catch ( e ) {
+                                       // IE8,9 Will throw exceptions on certain host objects #9897
+                                       return false;
+                               }
 
-               // Go through the array, only saving the items
-               // that pass the validator function
-               for ( ; i < length; i++ ) {
-                       retVal = !!callback( elems[ i ], i );
-                       if ( inv !== retVal ) {
-                               ret.push( elems[ i ] );
-                       }
-               }
+                               // Own properties are enumerated firstly, so to speed up,
+                               // if last one is own, then all properties are own.
 
-               return ret;
-       },
+                               var key;
+                               for ( key in obj ) {}
 
-       // arg is for internal usage only
-       map: function( elems, callback, arg ) {
-               var value, key,
-                       ret = [],
-                       i = 0,
-                       length = elems.length,
-                       // jquery objects are treated as arrays
-                       isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ;
+                               return key === undefined || hasOwn.call( obj, key );
+                       },
 
-               // Go through the array, translating each of the items to their
-               if ( isArray ) {
-                       for ( ; i < length; i++ ) {
-                               value = callback( elems[ i ], i, arg );
+                       isEmptyObject: function( obj ) {
+                               for ( var name in obj ) {
+                                       return false;
+                               }
+                               return true;
+                       },
+
+                       error: function( msg ) {
+                               throw new Error( msg );
+                       },
 
-                               if ( value != null ) {
-                                       ret[ ret.length ] = value;
+                       parseJSON: function( data ) {
+                               if ( typeof data !== "string" || !data ) {
+                                       return null;
                                }
-                       }
 
-               // Go through every key on the object,
-               } else {
-                       for ( key in elems ) {
-                               value = callback( elems[ key ], key, arg );
+                               // Make sure leading/trailing whitespace is removed (IE can't handle it)
+                               data = jQuery.trim( data );
 
-                               if ( value != null ) {
-                                       ret[ ret.length ] = value;
+                               // Attempt to parse using the native JSON parser first
+                               if ( window.JSON && window.JSON.parse ) {
+                                       return window.JSON.parse( data );
                                }
-                       }
-               }
 
-               // Flatten any nested arrays
-               return ret.concat.apply( [], ret );
-       },
+                               // Make sure the incoming data is actual JSON
+                               // Logic borrowed from http://json.org/json2.js
+                               if ( rvalidchars.test( data.replace( rvalidescape, "@" )
+                                       .replace( rvalidtokens, "]" )
+                                       .replace( rvalidbraces, "")) ) {
 
-       // A global GUID counter for objects
-       guid: 1,
+                                       return ( new Function( "return " + data ) )();
 
-       // Bind a function to a context, optionally partially applying any
-       // arguments.
-       proxy: function( fn, context ) {
-               var tmp, args, proxy;
+                               }
+                               jQuery.error( "Invalid JSON: " + data );
+                       },
 
-               if ( typeof context === "string" ) {
-                       tmp = fn[ context ];
-                       context = fn;
-                       fn = tmp;
-               }
+                       // Cross-browser xml parsing
+                       parseXML: function( data ) {
+                               if ( typeof data !== "string" || !data ) {
+                                       return null;
+                               }
+                               var xml, tmp;
+                               try {
+                                       if ( window.DOMParser ) { // Standard
+                                               tmp = new DOMParser();
+                                               xml = tmp.parseFromString( data , "text/xml" );
+                                       } else { // IE
+                                               xml = new ActiveXObject( "Microsoft.XMLDOM" );
+                                               xml.async = "false";
+                                               xml.loadXML( data );
+                                       }
+                               } catch( e ) {
+                                       xml = undefined;
+                               }
+                               if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
+                                       jQuery.error( "Invalid XML: " + data );
+                               }
+                               return xml;
+                       },
 
-               // Quick check to determine if target is callable, in the spec
-               // this throws a TypeError, but we will just return undefined.
-               if ( !jQuery.isFunction( fn ) ) {
-                       return undefined;
-               }
+                       noop: function() {},
+
+                       // Evaluates a script in a global context
+                       // Workarounds based on findings by Jim Driscoll
+                       // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
+                       globalEval: function( data ) {
+                               if ( data && rnotwhite.test( data ) ) {
+                                       // We use execScript on Internet Explorer
+                                       // We use an anonymous function so that context is window
+                                       // rather than jQuery in Firefox
+                                       ( window.execScript || function( data ) {
+                                               window[ "eval" ].call( window, data );
+                                       } )( data );
+                               }
+                       },
 
-               // Simulated bind
-               args = core_slice.call( arguments, 2 );
-               proxy = function() {
-                       return fn.apply( context, args.concat( core_slice.call( arguments ) ) );
-               };
+                       // Convert dashed to camelCase; used by the css and data modules
+                       // Microsoft forgot to hump their vendor prefix (#9572)
+                       camelCase: function( string ) {
+                               return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
+                       },
 
-               // Set the guid of unique handler to the same of original handler, so it can be removed
-               proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++;
+                       nodeName: function( elem, name ) {
+                               return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase();
+                       },
 
-               return proxy;
-       },
+                       // args is for internal usage only
+                       each: function( object, callback, args ) {
+                               var name, i = 0,
+                                       length = object.length,
+                                       isObj = length === undefined || jQuery.isFunction( object );
 
-       // Multifunctional method to get and set values of a collection
-       // The value/s can optionally be executed if it's a function
-       access: function( elems, fn, key, value, chainable, emptyGet, pass ) {
-               var exec,
-                       bulk = key == null,
-                       i = 0,
-                       length = elems.length;
-
-               // Sets many values
-               if ( key && typeof key === "object" ) {
-                       for ( i in key ) {
-                               jQuery.access( elems, fn, i, key[i], 1, emptyGet, value );
-                       }
-                       chainable = 1;
-
-               // Sets one value
-               } else if ( value !== undefined ) {
-                       // Optionally, function values get executed if exec is true
-                       exec = pass === undefined && jQuery.isFunction( value );
-
-                       if ( bulk ) {
-                               // Bulk operations only iterate when executing function values
-                               if ( exec ) {
-                                       exec = fn;
-                                       fn = function( elem, key, value ) {
-                                               return exec.call( jQuery( elem ), value );
-                                       };
+                               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;
+                                                       }
+                                               }
+                                       }
 
-                               // Otherwise they run against the entire set
+                                       // A special, fast, case for the most common use of each
                                } else {
-                                       fn.call( elems, value );
-                                       fn = null;
+                                       if ( isObj ) {
+                                               for ( name in object ) {
+                                                       if ( callback.call( object[ name ], name, object[ name ] ) === false ) {
+                                                               break;
+                                                       }
+                                               }
+                                       } else {
+                                               for ( ; i < length; ) {
+                                                       if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) {
+                                                               break;
+                                                       }
+                                               }
+                                       }
                                }
-                       }
 
-                       if ( fn ) {
-                               for (; i < length; i++ ) {
-                                       fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );
-                               }
-                       }
+                               return object;
+                       },
 
-                       chainable = 1;
-               }
+                       // Use native String.trim function wherever possible
+                       trim: trim ?
+                               function( text ) {
+                                       return text == null ?
+                                               "" :
+                                               trim.call( text );
+                               } :
+
+                               // Otherwise use our own trimming functionality
+                               function( text ) {
+                                       return text == null ?
+                                               "" :
+                                               text.toString().replace( trimLeft, "" ).replace( trimRight, "" );
+                               },
 
-               return chainable ?
-                       elems :
+                       // results is for internal usage only
+                       makeArray: function( array, results ) {
+                               var ret = results || [];
 
-                       // Gets
-                       bulk ?
-                               fn.call( elems ) :
-                               length ? fn( elems[0], key ) : emptyGet;
-       },
+                               if ( array != null ) {
+                                       // The window, strings (and functions) also have 'length'
+                                       // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930
+                                       var type = jQuery.type( array );
 
-       now: function() {
-               return ( new Date() ).getTime();
-       }
-});
+                                       if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) {
+                                               push.call( ret, array );
+                                       } else {
+                                               jQuery.merge( ret, array );
+                                       }
+                               }
 
-jQuery.ready.promise = function( obj ) {
-       if ( !readyList ) {
+                               return ret;
+                       },
 
-               readyList = jQuery.Deferred();
+                       inArray: function( elem, array, i ) {
+                               var len;
 
-               // Catch cases where $(document).ready() is called after the
-               // browser event has already occurred.
-               if ( document.readyState === "complete" || ( document.readyState !== "loading" && document.addEventListener ) ) {
-                       // Handle it asynchronously to allow scripts the opportunity to delay ready
-                       setTimeout( jQuery.ready, 1 );
+                               if ( array ) {
+                                       if ( indexOf ) {
+                                               return indexOf.call( array, elem, i );
+                                       }
 
-               // Standards-based browsers support DOMContentLoaded
-               } else if ( document.addEventListener ) {
-                       // Use the handy event callback
-                       document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
+                                       len = array.length;
+                                       i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
 
-                       // A fallback to window.onload, that will always work
-                       window.addEventListener( "load", jQuery.ready, false );
+                                       for ( ; i < len; i++ ) {
+                                               // Skip accessing in sparse arrays
+                                               if ( i in array && array[ i ] === elem ) {
+                                                       return i;
+                                               }
+                                       }
+                               }
 
-               // If IE event model is used
-               } else {
-                       // Ensure firing before onload, maybe late but safe also for iframes
-                       document.attachEvent( "onreadystatechange", DOMContentLoaded );
+                               return -1;
+                       },
 
-                       // A fallback to window.onload, that will always work
-                       window.attachEvent( "onload", jQuery.ready );
+                       merge: function( first, second ) {
+                               var i = first.length,
+                                       j = 0;
 
-                       // If IE and not a frame
-                       // continually check to see if the document is ready
-                       var top = false;
+                               if ( typeof second.length === "number" ) {
+                                       for ( var l = second.length; j < l; j++ ) {
+                                               first[ i++ ] = second[ j ];
+                                       }
 
-                       try {
-                               top = window.frameElement == null && document.documentElement;
-                       } catch(e) {}
+                               } else {
+                                       while ( second[j] !== undefined ) {
+                                               first[ i++ ] = second[ j++ ];
+                                       }
+                               }
+
+                               first.length = i;
+
+                               return first;
+                       },
+
+                       grep: function( elems, callback, inv ) {
+                               var ret = [], retVal;
+                               inv = !!inv;
+
+                               // Go through the array, only saving the items
+                               // that pass the validator function
+                               for ( var i = 0, length = elems.length; i < length; i++ ) {
+                                       retVal = !!callback( elems[ i ], i );
+                                       if ( inv !== retVal ) {
+                                               ret.push( elems[ i ] );
+                                       }
+                               }
+
+                               return ret;
+                       },
+
+                       // arg is for internal usage only
+                       map: function( elems, callback, arg ) {
+                               var value, key, ret = [],
+                                       i = 0,
+                                       length = elems.length,
+                               // jquery objects are treated as arrays
+                                       isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ;
+
+                               // Go through the array, translating each of the items to their
+                               if ( isArray ) {
+                                       for ( ; i < length; i++ ) {
+                                               value = callback( elems[ i ], i, arg );
+
+                                               if ( value != null ) {
+                                                       ret[ ret.length ] = value;
+                                               }
+                                       }
+
+                                       // Go through every key on the object,
+                               } else {
+                                       for ( key in elems ) {
+                                               value = callback( elems[ key ], key, arg );
+
+                                               if ( value != null ) {
+                                                       ret[ ret.length ] = value;
+                                               }
+                                       }
+                               }
+
+                               // Flatten any nested arrays
+                               return ret.concat.apply( [], ret );
+                       },
+
+                       // A global GUID counter for objects
+                       guid: 1,
+
+                       // Bind a function to a context, optionally partially applying any
+                       // arguments.
+                       proxy: function( fn, context ) {
+                               if ( typeof context === "string" ) {
+                                       var tmp = fn[ context ];
+                                       context = fn;
+                                       fn = tmp;
+                               }
+
+                               // Quick check to determine if target is callable, in the spec
+                               // this throws a TypeError, but we will just return undefined.
+                               if ( !jQuery.isFunction( fn ) ) {
+                                       return undefined;
+                               }
+
+                               // Simulated bind
+                               var args = slice.call( arguments, 2 ),
+                                       proxy = function() {
+                                               return fn.apply( context, args.concat( slice.call( arguments ) ) );
+                                       };
+
+                               // Set the guid of unique handler to the same of original handler, so it can be removed
+                               proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++;
+
+                               return proxy;
+                       },
+
+                       // Mutifunctional method to get and set values to a collection
+                       // The value/s can optionally be executed if it's a function
+                       access: function( elems, fn, key, value, chainable, emptyGet, pass ) {
+                               var exec,
+                                       bulk = key == null,
+                                       i = 0,
+                                       length = elems.length;
+
+                               // Sets many values
+                               if ( key && typeof key === "object" ) {
+                                       for ( i in key ) {
+                                               jQuery.access( elems, fn, i, key[i], 1, emptyGet, value );
+                                       }
+                                       chainable = 1;
+
+                                       // Sets one value
+                               } else if ( value !== undefined ) {
+                                       // Optionally, function values get executed if exec is true
+                                       exec = pass === undefined && jQuery.isFunction( value );
+
+                                       if ( bulk ) {
+                                               // Bulk operations only iterate when executing function values
+                                               if ( exec ) {
+                                                       exec = fn;
+                                                       fn = function( elem, key, value ) {
+                                                               return exec.call( jQuery( elem ), value );
+                                                       };
+
+                                                       // Otherwise they run against the entire set
+                                               } else {
+                                                       fn.call( elems, value );
+                                                       fn = null;
+                                               }
+                                       }
+
+                                       if ( fn ) {
+                                               for (; i < length; i++ ) {
+                                                       fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );
+                                               }
+                                       }
+
+                                       chainable = 1;
+                               }
+
+                               return chainable ?
+                                       elems :
+
+                                       // Gets
+                                       bulk ?
+                                               fn.call( elems ) :
+                                               length ? fn( elems[0], key ) : emptyGet;
+                       },
+
+                       now: function() {
+                               return ( new Date() ).getTime();
+                       },
+
+                       // Use of jQuery.browser is frowned upon.
+                       // More details: http://docs.jquery.com/Utilities/jQuery.browser
+                       uaMatch: function( ua ) {
+                               ua = ua.toLowerCase();
+
+                               var match = rwebkit.exec( ua ) ||
+                                       ropera.exec( ua ) ||
+                                       rmsie.exec( ua ) ||
+                                       ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) ||
+                                       [];
+
+                               return { browser: match[1] || "", version: match[2] || "0" };
+                       },
+
+                       sub: function() {
+                               function jQuerySub( selector, context ) {
+                                       return new jQuerySub.fn.init( selector, context );
+                               }
+                               jQuery.extend( true, jQuerySub, this );
+                               jQuerySub.superclass = this;
+                               jQuerySub.fn = jQuerySub.prototype = this();
+                               jQuerySub.fn.constructor = jQuerySub;
+                               jQuerySub.sub = this.sub;
+                               jQuerySub.fn.init = function init( selector, context ) {
+                                       if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) {
+                                               context = jQuerySub( context );
+                                       }
+
+                                       return jQuery.fn.init.call( this, selector, context, rootjQuerySub );
+                               };
+                               jQuerySub.fn.init.prototype = jQuerySub.fn;
+                               var rootjQuerySub = jQuerySub(document);
+                               return jQuerySub;
+                       },
+
+                       browser: {}
+               });
+
+// Populate the class2type map
+               jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) {
+                       class2type[ "[object " + name + "]" ] = name.toLowerCase();
+               });
+
+               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;
+               }
+
+// IE doesn't match non-breaking spaces with \s
+               if ( rnotwhite.test( "\xA0" ) ) {
+                       trimLeft = /^[\s\xA0]+/;
+                       trimRight = /[\s\xA0]+$/;
+               }
+
+// 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(e) {
+                               setTimeout( doScrollCheck, 1 );
+                               return;
+                       }
+
+                       // and execute any waiting functions
+                       jQuery.ready();
+               }
+
+               return jQuery;
+
+       })();
+
+
+// String to Object flags format cache
+       var flagsCache = {};
+
+// Convert String-formatted flags into Object-formatted ones and store in cache
+       function createFlags( flags ) {
+               var object = flagsCache[ flags ] = {},
+                       i, length;
+               flags = flags.split( /\s+/ );
+               for ( i = 0, length = flags.length; i < length; i++ ) {
+                       object[ flags[i] ] = true;
+               }
+               return object;
+       }
+
+       /*
+        * Create a callback list using the following parameters:
+        *
+        *      flags:  an optional list of space-separated flags that will change how
+        *                      the callback list behaves
+        *
+        * By default a callback list will act like an event callback list and can be
+        * "fired" multiple times.
+        *
+        * Possible flags:
+        *
+        *      once:                   will ensure the callback list can only be fired once (like a Deferred)
+        *
+        *      memory:                 will keep track of previous values and will call any callback added
+        *                                      after the list has been fired right away with the latest "memorized"
+        *                                      values (like a Deferred)
+        *
+        *      unique:                 will ensure a callback can only be added once (no duplicate in the list)
+        *
+        *      stopOnFalse:    interrupt callings when a callback returns false
+        *
+        */
+       jQuery.Callbacks = function( flags ) {
+
+               // Convert flags from String-formatted to Object-formatted
+               // (we check in cache first)
+               flags = flags ? ( flagsCache[ flags ] || createFlags( flags ) ) : {};
+
+               var // Actual callback list
+                       list = [],
+               // Stack of fire calls for repeatable lists
+                       stack = [],
+               // Last fire value (for non-forgettable lists)
+                       memory,
+               // Flag to know if list was already fired
+                       fired,
+               // Flag to know if list is currently firing
+                       firing,
+               // First callback to fire (used internally by add and fireWith)
+                       firingStart,
+               // End of the loop when firing
+                       firingLength,
+               // Index of currently firing callback (modified by remove if needed)
+                       firingIndex,
+               // Add one or several callbacks to the list
+                       add = function( args ) {
+                               var i,
+                                       length,
+                                       elem,
+                                       type,
+                                       actual;
+                               for ( i = 0, length = args.length; i < length; i++ ) {
+                                       elem = args[ i ];
+                                       type = jQuery.type( elem );
+                                       if ( type === "array" ) {
+                                               // Inspect recursively
+                                               add( elem );
+                                       } else if ( type === "function" ) {
+                                               // Add if not in unique mode and callback is not in
+                                               if ( !flags.unique || !self.has( elem ) ) {
+                                                       list.push( elem );
+                                               }
+                                       }
+                               }
+                       },
+               // Fire callbacks
+                       fire = function( context, args ) {
+                               args = args || [];
+                               memory = !flags.memory || [ context, args ];
+                               fired = true;
+                               firing = true;
+                               firingIndex = firingStart || 0;
+                               firingStart = 0;
+                               firingLength = list.length;
+                               for ( ; list && firingIndex < firingLength; firingIndex++ ) {
+                                       if ( list[ firingIndex ].apply( context, args ) === false && flags.stopOnFalse ) {
+                                               memory = true; // Mark as halted
+                                               break;
+                                       }
+                               }
+                               firing = false;
+                               if ( list ) {
+                                       if ( !flags.once ) {
+                                               if ( stack && stack.length ) {
+                                                       memory = stack.shift();
+                                                       self.fireWith( memory[ 0 ], memory[ 1 ] );
+                                               }
+                                       } else if ( memory === true ) {
+                                               self.disable();
+                                       } else {
+                                               list = [];
+                                       }
+                               }
+                       },
+               // Actual Callbacks object
+                       self = {
+                               // Add a callback or a collection of callbacks to the list
+                               add: function() {
+                                       if ( list ) {
+                                               var length = list.length;
+                                               add( arguments );
+                                               // Do we need to add the callbacks to the
+                                               // current firing batch?
+                                               if ( firing ) {
+                                                       firingLength = list.length;
+                                                       // With memory, if we're not firing then
+                                                       // we should call right away, unless previous
+                                                       // firing was halted (stopOnFalse)
+                                               } else if ( memory && memory !== true ) {
+                                                       firingStart = length;
+                                                       fire( memory[ 0 ], memory[ 1 ] );
+                                               }
+                                       }
+                                       return this;
+                               },
+                               // Remove a callback from the list
+                               remove: function() {
+                                       if ( list ) {
+                                               var args = arguments,
+                                                       argIndex = 0,
+                                                       argLength = args.length;
+                                               for ( ; argIndex < argLength ; argIndex++ ) {
+                                                       for ( var i = 0; i < list.length; i++ ) {
+                                                               if ( args[ argIndex ] === list[ i ] ) {
+                                                                       // Handle firingIndex and firingLength
+                                                                       if ( firing ) {
+                                                                               if ( i <= firingLength ) {
+                                                                                       firingLength--;
+                                                                                       if ( i <= firingIndex ) {
+                                                                                               firingIndex--;
+                                                                                       }
+                                                                               }
+                                                                       }
+                                                                       // Remove the element
+                                                                       list.splice( i--, 1 );
+                                                                       // If we have some unicity property then
+                                                                       // we only need to do this once
+                                                                       if ( flags.unique ) {
+                                                                               break;
+                                                                       }
+                                                               }
+                                                       }
+                                               }
+                                       }
+                                       return this;
+                               },
+                               // Control if a given callback is in the list
+                               has: function( fn ) {
+                                       if ( list ) {
+                                               var i = 0,
+                                                       length = list.length;
+                                               for ( ; i < length; i++ ) {
+                                                       if ( fn === list[ i ] ) {
+                                                               return true;
+                                                       }
+                                               }
+                                       }
+                                       return false;
+                               },
+                               // Remove all callbacks from the list
+                               empty: function() {
+                                       list = [];
+                                       return this;
+                               },
+                               // Have the list do nothing anymore
+                               disable: function() {
+                                       list = stack = memory = undefined;
+                                       return this;
+                               },
+                               // Is it disabled?
+                               disabled: function() {
+                                       return !list;
+                               },
+                               // Lock the list in its current state
+                               lock: function() {
+                                       stack = undefined;
+                                       if ( !memory || memory === true ) {
+                                               self.disable();
+                                       }
+                                       return this;
+                               },
+                               // Is it locked?
+                               locked: function() {
+                                       return !stack;
+                               },
+                               // Call all callbacks with the given context and arguments
+                               fireWith: function( context, args ) {
+                                       if ( stack ) {
+                                               if ( firing ) {
+                                                       if ( !flags.once ) {
+                                                               stack.push( [ context, args ] );
+                                                       }
+                                               } else if ( !( flags.once && memory ) ) {
+                                                       fire( context, args );
+                                               }
+                                       }
+                                       return this;
+                               },
+                               // Call all the callbacks with the given arguments
+                               fire: function() {
+                                       self.fireWith( this, arguments );
+                                       return this;
+                               },
+                               // To know if the callbacks have already been called at least once
+                               fired: function() {
+                                       return !!fired;
+                               }
+                       };
+
+               return self;
+       };
+
+
+
+
+       var // Static reference to slice
+               sliceDeferred = [].slice;
+
+       jQuery.extend({
+
+               Deferred: function( func ) {
+                       var doneList = jQuery.Callbacks( "once memory" ),
+                               failList = jQuery.Callbacks( "once memory" ),
+                               progressList = jQuery.Callbacks( "memory" ),
+                               state = "pending",
+                               lists = {
+                                       resolve: doneList,
+                                       reject: failList,
+                                       notify: progressList
+                               },
+                               promise = {
+                                       done: doneList.add,
+                                       fail: failList.add,
+                                       progress: progressList.add,
+
+                                       state: function() {
+                                               return state;
+                                       },
+
+                                       // Deprecated
+                                       isResolved: doneList.fired,
+                                       isRejected: failList.fired,
+
+                                       then: function( doneCallbacks, failCallbacks, progressCallbacks ) {
+                                               deferred.done( doneCallbacks ).fail( failCallbacks ).progress( progressCallbacks );
+                                               return this;
+                                       },
+                                       always: function() {
+                                               deferred.done.apply( deferred, arguments ).fail.apply( deferred, arguments );
+                                               return this;
+                                       },
+                                       pipe: function( fnDone, fnFail, fnProgress ) {
+                                               return jQuery.Deferred(function( newDefer ) {
+                                                       jQuery.each( {
+                                                               done: [ fnDone, "resolve" ],
+                                                               fail: [ fnFail, "reject" ],
+                                                               progress: [ fnProgress, "notify" ]
+                                                       }, function( handler, data ) {
+                                                               var fn = data[ 0 ],
+                                                                       action = data[ 1 ],
+                                                                       returned;
+                                                               if ( jQuery.isFunction( fn ) ) {
+                                                                       deferred[ handler ](function() {
+                                                                               returned = fn.apply( this, arguments );
+                                                                               if ( returned && jQuery.isFunction( returned.promise ) ) {
+                                                                                       returned.promise().then( newDefer.resolve, newDefer.reject, newDefer.notify );
+                                                                               } else {
+                                                                                       newDefer[ action + "With" ]( this === deferred ? newDefer : this, [ returned ] );
+                                                                               }
+                                                                       });
+                                                               } else {
+                                                                       deferred[ handler ]( newDefer[ action ] );
+                                                               }
+                                                       });
+                                               }).promise();
+                                       },
+                                       // Get a promise for this deferred
+                                       // If obj is provided, the promise aspect is added to the object
+                                       promise: function( obj ) {
+                                               if ( obj == null ) {
+                                                       obj = promise;
+                                               } else {
+                                                       for ( var key in promise ) {
+                                                               obj[ key ] = promise[ key ];
+                                                       }
+                                               }
+                                               return obj;
+                                       }
+                               },
+                               deferred = promise.promise({}),
+                               key;
+
+                       for ( key in lists ) {
+                               deferred[ key ] = lists[ key ].fire;
+                               deferred[ key + "With" ] = lists[ key ].fireWith;
+                       }
+
+                       // Handle state
+                       deferred.done( function() {
+                               state = "resolved";
+                       }, failList.disable, progressList.lock ).fail( function() {
+                                       state = "rejected";
+                               }, doneList.disable, progressList.lock );
+
+                       // Call given func if any
+                       if ( func ) {
+                               func.call( deferred, deferred );
+                       }
+
+                       // All done!
+                       return deferred;
+               },
+
+               // Deferred helper
+               when: function( firstParam ) {
+                       var args = sliceDeferred.call( arguments, 0 ),
+                               i = 0,
+                               length = args.length,
+                               pValues = new Array( length ),
+                               count = length,
+                               pCount = length,
+                               deferred = length <= 1 && firstParam && jQuery.isFunction( firstParam.promise ) ?
+                                       firstParam :
+                                       jQuery.Deferred(),
+                               promise = deferred.promise();
+                       function resolveFunc( i ) {
+                               return function( value ) {
+                                       args[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value;
+                                       if ( !( --count ) ) {
+                                               deferred.resolveWith( deferred, args );
+                                       }
+                               };
+                       }
+                       function progressFunc( i ) {
+                               return function( value ) {
+                                       pValues[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value;
+                                       deferred.notifyWith( promise, pValues );
+                               };
+                       }
+                       if ( length > 1 ) {
+                               for ( ; i < length; i++ ) {
+                                       if ( args[ i ] && args[ i ].promise && jQuery.isFunction( args[ i ].promise ) ) {
+                                               args[ i ].promise().then( resolveFunc(i), deferred.reject, progressFunc(i) );
+                                       } else {
+                                               --count;
+                                       }
+                               }
+                               if ( !count ) {
+                                       deferred.resolveWith( deferred, args );
+                               }
+                       } else if ( deferred !== firstParam ) {
+                               deferred.resolveWith( deferred, length ? [ firstParam ] : [] );
+                       }
+                       return promise;
+               }
+       });
+
+
+
+
+       jQuery.support = (function() {
+
+               var support,
+                       all,
+                       a,
+                       select,
+                       opt,
+                       input,
+                       fragment,
+                       tds,
+                       events,
+                       eventName,
+                       i,
+                       isSupported,
+                       div = document.createElement( "div" ),
+                       documentElement = document.documentElement;
+
+               // Preliminary tests
+               div.setAttribute("className", "t");
+               div.innerHTML = "   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
+
+               all = div.getElementsByTagName( "*" );
+               a = div.getElementsByTagName( "a" )[ 0 ];
+
+               // Can't get basic test support
+               if ( !all || !all.length || !a ) {
+                       return {};
+               }
+
+               // First batch of supports tests
+               select = document.createElement( "select" );
+               opt = select.appendChild( document.createElement("option") );
+               input = div.getElementsByTagName( "input" )[ 0 ];
+
+               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 instead)
+                       style: /top/.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: ( input.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: opt.selected,
+
+                       // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
+                       getSetAttribute: div.className !== "t",
+
+                       // Tests for enctype support on a form(#6743)
+                       enctype: !!document.createElement("form").enctype,
+
+                       // Makes sure cloning an html5 element does not cause problems
+                       // Where outerHTML is undefined, this still works
+                       html5Clone: document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav></:nav>",
+
+                       // Will be defined later
+                       submitBubbles: true,
+                       changeBubbles: true,
+                       focusinBubbles: false,
+                       deleteExpando: true,
+                       noCloneEvent: true,
+                       inlineBlockNeedsLayout: false,
+                       shrinkWrapBlocks: false,
+                       reliableMarginRight: true,
+                       pixelMargin: true
+               };
+
+               // jQuery.boxModel DEPRECATED in 1.3, use jQuery.support.boxModel instead
+               jQuery.boxModel = support.boxModel = (document.compatMode === "CSS1Compat");
+
+               // Make sure checked status is properly cloned
+               input.checked = true;
+               support.noCloneChecked = input.cloneNode( true ).checked;
+
+               // Make sure that the options inside disabled selects aren't marked as disabled
+               // (WebKit marks them as disabled)
+               select.disabled = true;
+               support.optDisabled = !opt.disabled;
+
+               // Test to see if it's possible to delete an expando from an element
+               // Fails in Internet Explorer
+               try {
+                       delete div.test;
+               } catch( e ) {
+                       support.deleteExpando = false;
+               }
+
+               if ( !div.addEventListener && div.attachEvent && div.fireEvent ) {
+                       div.attachEvent( "onclick", function() {
+                               // Cloning a node shouldn't copy over any
+                               // bound event handlers (IE does this)
+                               support.noCloneEvent = false;
+                       });
+                       div.cloneNode( true ).fireEvent( "onclick" );
+               }
+
+               // Check if a radio maintains its value
+               // after being appended to the DOM
+               input = document.createElement("input");
+               input.value = "t";
+               input.setAttribute("type", "radio");
+               support.radioValue = input.value === "t";
+
+               input.setAttribute("checked", "checked");
+
+               // #11217 - WebKit loses check when the name is after the checked attribute
+               input.setAttribute( "name", "t" );
+
+               div.appendChild( input );
+               fragment = document.createDocumentFragment();
+               fragment.appendChild( div.lastChild );
+
+               // WebKit doesn't clone checked state correctly in fragments
+               support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;
+
+               // Check if a disconnected checkbox will retain its checked
+               // value of true after appended to the DOM (IE6/7)
+               support.appendChecked = input.checked;
+
+               fragment.removeChild( input );
+               fragment.appendChild( div );
+
+               // Technique from Juriy Zaytsev
+               // http://perfectionkills.com/detecting-event-support-without-browser-sniffing/
+               // We only care about the case where non-standard event systems
+               // are used, namely in IE. Short-circuiting here helps us to
+               // avoid an eval call (in setAttribute) which can cause CSP
+               // to go haywire. See: https://developer.mozilla.org/en/Security/CSP
+               if ( div.attachEvent ) {
+                       for ( i in {
+                               submit: 1,
+                               change: 1,
+                               focusin: 1
+                       }) {
+                               eventName = "on" + i;
+                               isSupported = ( eventName in div );
+                               if ( !isSupported ) {
+                                       div.setAttribute( eventName, "return;" );
+                                       isSupported = ( typeof div[ eventName ] === "function" );
+                               }
+                               support[ i + "Bubbles" ] = isSupported;
+                       }
+               }
+
+               fragment.removeChild( div );
+
+               // Null elements to avoid leaks in IE
+               fragment = select = opt = div = input = null;
+
+               // Run tests that need a body at doc ready
+               jQuery(function() {
+                       var container, outer, inner, table, td, offsetSupport,
+                               marginDiv, conMarginTop, style, html, positionTopLeftWidthHeight,
+                               paddingMarginBorderVisibility, paddingMarginBorder,
+                               body = document.getElementsByTagName("body")[0];
+
+                       if ( !body ) {
+                               // Return for frameset docs that don't have a body
+                               return;
+                       }
+
+                       conMarginTop = 1;
+                       paddingMarginBorder = "padding:0;margin:0;border:";
+                       positionTopLeftWidthHeight = "position:absolute;top:0;left:0;width:1px;height:1px;";
+                       paddingMarginBorderVisibility = paddingMarginBorder + "0;visibility:hidden;";
+                       style = "style='" + positionTopLeftWidthHeight + paddingMarginBorder + "5px solid #000;";
+                       html = "<div " + style + "display:block;'><div style='" + paddingMarginBorder + "0;display:block;overflow:hidden;'></div></div>" +
+                               "<table " + style + "' cellpadding='0' cellspacing='0'>" +
+                               "<tr><td></td></tr></table>";
+
+                       container = document.createElement("div");
+                       container.style.cssText = paddingMarginBorderVisibility + "width:0;height:0;position:static;top:0;margin-top:" + conMarginTop + "px";
+                       body.insertBefore( container, body.firstChild );
+
+                       // Construct the test element
+                       div = document.createElement("div");
+                       container.appendChild( div );
+
+                       // Check if table cells still have offsetWidth/Height when they are set
+                       // to display:none and there are still other visible table cells in a
+                       // table row; if so, offsetWidth/Height are not reliable for use when
+                       // determining if an element has been hidden directly using
+                       // display:none (it is still safe to use offsets if a parent element is
+                       // hidden; don safety goggles and see bug #4512 for more information).
+                       // (only IE 8 fails this test)
+                       div.innerHTML = "<table><tr><td style='" + paddingMarginBorder + "0;display:none'></td><td>t</td></tr></table>";
+                       tds = div.getElementsByTagName( "td" );
+                       isSupported = ( tds[ 0 ].offsetHeight === 0 );
+
+                       tds[ 0 ].style.display = "";
+                       tds[ 1 ].style.display = "none";
+
+                       // Check if empty table cells still have offsetWidth/Height
+                       // (IE <= 8 fail this test)
+                       support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );
+
+                       // Check if div with explicit width and no margin-right incorrectly
+                       // gets computed margin-right based on width of container. For more
+                       // info see bug #3333
+                       // Fails in WebKit before Feb 2011 nightlies
+                       // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+                       if ( window.getComputedStyle ) {
+                               div.innerHTML = "";
+                               marginDiv = document.createElement( "div" );
+                               marginDiv.style.width = "0";
+                               marginDiv.style.marginRight = "0";
+                               div.style.width = "2px";
+                               div.appendChild( marginDiv );
+                               support.reliableMarginRight =
+                                       ( parseInt( ( window.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) === 0;
+                       }
+
+                       if ( typeof div.style.zoom !== "undefined" ) {
+                               // Check if natively block-level elements act like inline-block
+                               // elements when setting their display to 'inline' and giving
+                               // them layout
+                               // (IE < 8 does this)
+                               div.innerHTML = "";
+                               div.style.width = div.style.padding = "1px";
+                               div.style.border = 0;
+                               div.style.overflow = "hidden";
+                               div.style.display = "inline";
+                               div.style.zoom = 1;
+                               support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 );
+
+                               // Check if elements with layout shrink-wrap their children
+                               // (IE 6 does this)
+                               div.style.display = "block";
+                               div.style.overflow = "visible";
+                               div.innerHTML = "<div style='width:5px;'></div>";
+                               support.shrinkWrapBlocks = ( div.offsetWidth !== 3 );
+                       }
+
+                       div.style.cssText = positionTopLeftWidthHeight + paddingMarginBorderVisibility;
+                       div.innerHTML = html;
+
+                       outer = div.firstChild;
+                       inner = outer.firstChild;
+                       td = outer.nextSibling.firstChild.firstChild;
+
+                       offsetSupport = {
+                               doesNotAddBorder: ( inner.offsetTop !== 5 ),
+                               doesAddBorderForTableAndCells: ( td.offsetTop === 5 )
+                       };
+
+                       inner.style.position = "fixed";
+                       inner.style.top = "20px";
+
+                       // safari subtracts parent border width here which is 5px
+                       offsetSupport.fixedPosition = ( inner.offsetTop === 20 || inner.offsetTop === 15 );
+                       inner.style.position = inner.style.top = "";
+
+                       outer.style.overflow = "hidden";
+                       outer.style.position = "relative";
+
+                       offsetSupport.subtractsBorderForOverflowNotVisible = ( inner.offsetTop === -5 );
+                       offsetSupport.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== conMarginTop );
+
+                       if ( window.getComputedStyle ) {
+                               div.style.marginTop = "1%";
+                               support.pixelMargin = ( window.getComputedStyle( div, null ) || { marginTop: 0 } ).marginTop !== "1%";
+                       }
+
+                       if ( typeof container.style.zoom !== "undefined" ) {
+                               container.style.zoom = 1;
+                       }
+
+                       body.removeChild( container );
+                       marginDiv = div = container = null;
+
+                       jQuery.extend( support, offsetSupport );
+               });
+
+               return support;
+       })();
+
+
+
+
+       var rbrace = /^(?:\{.*\}|\[.*\])$/,
+               rmultiDash = /([A-Z])/g;
+
+       jQuery.extend({
+               cache: {},
+
+               // Please use with caution
+               uuid: 0,
+
+               // Unique for each copy of jQuery on the page
+               // Non-digits removed to match rinlinejQuery
+               expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ),
+
+               // The following elements throw uncatchable exceptions if you
+               // attempt to add expando properties to them.
+               noData: {
+                       "embed": true,
+                       // Ban all objects except for Flash (which handle expandos)
+                       "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
+                       "applet": true
+               },
+
+               hasData: function( elem ) {
+                       elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
+                       return !!elem && !isEmptyDataObject( elem );
+               },
+
+               data: function( elem, name, data, pvt /* Internal Use Only */ ) {
+                       if ( !jQuery.acceptData( elem ) ) {
+                               return;
+                       }
+
+                       var privateCache, thisCache, ret,
+                               internalKey = jQuery.expando,
+                               getByName = typeof name === "string",
+
+                       // We have to handle DOM nodes and JS objects differently because IE6-7
+                       // can't GC object references properly across the DOM-JS boundary
+                               isNode = elem.nodeType,
+
+                       // Only DOM nodes need the global jQuery cache; JS object data is
+                       // attached directly to the object so GC can occur automatically
+                               cache = isNode ? jQuery.cache : elem,
+
+                       // Only defining an ID for JS objects if its cache already exists allows
+                       // the code to shortcut on the same path as a DOM node with no cache
+                               id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey,
+                               isEvents = name === "events";
+
+                       // Avoid doing any more work than we need to when trying to get data on an
+                       // object that has no data at all
+                       if ( (!id || !cache[id] || (!isEvents && !pvt && !cache[id].data)) && getByName && data === undefined ) {
+                               return;
+                       }
+
+                       if ( !id ) {
+                               // Only DOM nodes need a new unique ID for each element since their data
+                               // ends up in the global cache
+                               if ( isNode ) {
+                                       elem[ internalKey ] = id = ++jQuery.uuid;
+                               } else {
+                                       id = internalKey;
+                               }
+                       }
+
+                       if ( !cache[ id ] ) {
+                               cache[ id ] = {};
+
+                               // Avoids exposing jQuery metadata on plain JS objects when the object
+                               // is serialized using JSON.stringify
+                               if ( !isNode ) {
+                                       cache[ id ].toJSON = jQuery.noop;
+                               }
+                       }
+
+                       // An object can be passed to jQuery.data instead of a key/value pair; this gets
+                       // shallow copied over onto the existing cache
+                       if ( typeof name === "object" || typeof name === "function" ) {
+                               if ( pvt ) {
+                                       cache[ id ] = jQuery.extend( cache[ id ], name );
+                               } else {
+                                       cache[ id ].data = jQuery.extend( cache[ id ].data, name );
+                               }
+                       }
+
+                       privateCache = thisCache = cache[ id ];
+
+                       // jQuery data() is stored in a separate object inside the object's internal data
+                       // cache in order to avoid key collisions between internal data and user-defined
+                       // data.
+                       if ( !pvt ) {
+                               if ( !thisCache.data ) {
+                                       thisCache.data = {};
+                               }
+
+                               thisCache = thisCache.data;
+                       }
+
+                       if ( data !== undefined ) {
+                               thisCache[ jQuery.camelCase( name ) ] = data;
+                       }
+
+                       // Users should not attempt to inspect the internal events object using jQuery.data,
+                       // it is undocumented and subject to change. But does anyone listen? No.
+                       if ( isEvents && !thisCache[ name ] ) {
+                               return privateCache.events;
+                       }
+
+                       // Check for both converted-to-camel and non-converted data property names
+                       // If a data property was specified
+                       if ( getByName ) {
+
+                               // First Try to find as-is property data
+                               ret = thisCache[ name ];
+
+                               // Test for null|undefined property data
+                               if ( ret == null ) {
+
+                                       // Try to find the camelCased property
+                                       ret = thisCache[ jQuery.camelCase( name ) ];
+                               }
+                       } else {
+                               ret = thisCache;
+                       }
+
+                       return ret;
+               },
+
+               removeData: function( elem, name, pvt /* Internal Use Only */ ) {
+                       if ( !jQuery.acceptData( elem ) ) {
+                               return;
+                       }
+
+                       var thisCache, i, l,
+
+                       // Reference to internal data cache key
+                               internalKey = jQuery.expando,
+
+                               isNode = elem.nodeType,
+
+                       // See jQuery.data for more information
+                               cache = isNode ? jQuery.cache : elem,
+
+                       // See jQuery.data for more information
+                               id = isNode ? elem[ internalKey ] : internalKey;
+
+                       // If there is already no cache entry for this object, there is no
+                       // purpose in continuing
+                       if ( !cache[ id ] ) {
+                               return;
+                       }
+
+                       if ( name ) {
+
+                               thisCache = pvt ? cache[ id ] : cache[ id ].data;
+
+                               if ( thisCache ) {
+
+                                       // Support array or space separated string names for data keys
+                                       if ( !jQuery.isArray( name ) ) {
+
+                                               // try the string as a key before any manipulation
+                                               if ( name in thisCache ) {
+                                                       name = [ name ];
+                                               } else {
+
+                                                       // split the camel cased version by spaces unless a key with the spaces exists
+                                                       name = jQuery.camelCase( name );
+                                                       if ( name in thisCache ) {
+                                                               name = [ name ];
+                                                       } else {
+                                                               name = name.split( " " );
+                                                       }
+                                               }
+                                       }
+
+                                       for ( i = 0, l = name.length; i < l; i++ ) {
+                                               delete thisCache[ name[i] ];
+                                       }
+
+                                       // If there is no data left in the cache, we want to continue
+                                       // and let the cache object itself get destroyed
+                                       if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) {
+                                               return;
+                                       }
+                               }
+                       }
+
+                       // See jQuery.data for more information
+                       if ( !pvt ) {
+                               delete cache[ id ].data;
+
+                               // Don't destroy the parent cache unless the internal data object
+                               // had been the only thing left in it
+                               if ( !isEmptyDataObject(cache[ id ]) ) {
+                                       return;
+                               }
+                       }
+
+                       // Browsers that fail expando deletion also refuse to delete expandos on
+                       // the window, but it will allow it on all other JS objects; other browsers
+                       // don't care
+                       // Ensure that `cache` is not a window object #10080
+                       if ( jQuery.support.deleteExpando || !cache.setInterval ) {
+                               delete cache[ id ];
+                       } else {
+                               cache[ id ] = null;
+                       }
+
+                       // We destroyed the cache and need to eliminate the expando on the node to avoid
+                       // false lookups in the cache for entries that no longer exist
+                       if ( isNode ) {
+                               // IE does not allow us to delete expando properties from nodes,
+                               // nor does it have a removeAttribute function on Document nodes;
+                               // we must handle all of these cases
+                               if ( jQuery.support.deleteExpando ) {
+                                       delete elem[ internalKey ];
+                               } else if ( elem.removeAttribute ) {
+                                       elem.removeAttribute( internalKey );
+                               } else {
+                                       elem[ internalKey ] = null;
+                               }
+                       }
+               },
+
+               // For internal use only.
+               _data: function( elem, name, data ) {
+                       return jQuery.data( elem, name, data, true );
+               },
+
+               // A method for determining if a DOM node can handle the data expando
+               acceptData: function( elem ) {
+                       if ( elem.nodeName ) {
+                               var match = jQuery.noData[ elem.nodeName.toLowerCase() ];
+
+                               if ( match ) {
+                                       return !(match === true || elem.getAttribute("classid") !== match);
+                               }
+                       }
+
+                       return true;
+               }
+       });
+
+       jQuery.fn.extend({
+               data: function( key, value ) {
+                       var parts, part, attr, name, l,
+                               elem = this[0],
+                               i = 0,
+                               data = null;
+
+                       // Gets all values
+                       if ( key === undefined ) {
+                               if ( this.length ) {
+                                       data = jQuery.data( elem );
+
+                                       if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) {
+                                               attr = elem.attributes;
+                                               for ( l = attr.length; i < l; i++ ) {
+                                                       name = attr[i].name;
+
+                                                       if ( name.indexOf( "data-" ) === 0 ) {
+                                                               name = jQuery.camelCase( name.substring(5) );
+
+                                                               dataAttr( elem, name, data[ name ] );
+                                                       }
+                                               }
+                                               jQuery._data( elem, "parsedAttrs", true );
+                                       }
+                               }
+
+                               return data;
+                       }
+
+                       // Sets multiple values
+                       if ( typeof key === "object" ) {
+                               return this.each(function() {
+                                       jQuery.data( this, key );
+                               });
+                       }
+
+                       parts = key.split( ".", 2 );
+                       parts[1] = parts[1] ? "." + parts[1] : "";
+                       part = parts[1] + "!";
+
+                       return jQuery.access( this, function( value ) {
+
+                               if ( value === undefined ) {
+                                       data = this.triggerHandler( "getData" + part, [ parts[0] ] );
+
+                                       // Try to fetch any internally stored data first
+                                       if ( data === undefined && elem ) {
+                                               data = jQuery.data( elem, key );
+                                               data = dataAttr( elem, key, data );
+                                       }
+
+                                       return data === undefined && parts[1] ?
+                                               this.data( parts[0] ) :
+                                               data;
+                               }
+
+                               parts[1] = value;
+                               this.each(function() {
+                                       var self = jQuery( this );
+
+                                       self.triggerHandler( "setData" + part, parts );
+                                       jQuery.data( this, key, value );
+                                       self.triggerHandler( "changeData" + part, parts );
+                               });
+                       }, null, value, arguments.length > 1, null, false );
+               },
+
+               removeData: function( key ) {
+                       return this.each(function() {
+                               jQuery.removeData( this, key );
+                       });
+               }
+       });
+
+       function dataAttr( elem, key, data ) {
+               // If nothing was found internally, try to fetch any
+               // data from the HTML5 data-* attribute
+               if ( data === undefined && elem.nodeType === 1 ) {
+
+                       var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
+
+                       data = elem.getAttribute( name );
+
+                       if ( typeof data === "string" ) {
+                               try {
+                                       data = data === "true" ? true :
+                                               data === "false" ? false :
+                                                       data === "null" ? null :
+                                                               jQuery.isNumeric( data ) ? +data :
+                                                                       rbrace.test( data ) ? jQuery.parseJSON( data ) :
+                                                                               data;
+                               } catch( e ) {}
+
+                               // Make sure we set the data so it isn't changed later
+                               jQuery.data( elem, key, data );
+
+                       } else {
+                               data = undefined;
+                       }
+               }
+
+               return data;
+       }
+
+// checks a cache object for emptiness
+       function isEmptyDataObject( obj ) {
+               for ( var name in obj ) {
+
+                       // if the public data object is empty, the private is still empty
+                       if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) {
+                               continue;
+                       }
+                       if ( name !== "toJSON" ) {
+                               return false;
+                       }
+               }
+
+               return true;
+       }
+
+
+
+
+       function handleQueueMarkDefer( elem, type, src ) {
+               var deferDataKey = type + "defer",
+                       queueDataKey = type + "queue",
+                       markDataKey = type + "mark",
+                       defer = jQuery._data( elem, deferDataKey );
+               if ( defer &&
+                       ( src === "queue" || !jQuery._data(elem, queueDataKey) ) &&
+                       ( src === "mark" || !jQuery._data(elem, markDataKey) ) ) {
+                       // Give room for hard-coded callbacks to fire first
+                       // and eventually mark/queue something else on the element
+                       setTimeout( function() {
+                               if ( !jQuery._data( elem, queueDataKey ) &&
+                                       !jQuery._data( elem, markDataKey ) ) {
+                                       jQuery.removeData( elem, deferDataKey, true );
+                                       defer.fire();
+                               }
+                       }, 0 );
+               }
+       }
+
+       jQuery.extend({
+
+               _mark: function( elem, type ) {
+                       if ( elem ) {
+                               type = ( type || "fx" ) + "mark";
+                               jQuery._data( elem, type, (jQuery._data( elem, type ) || 0) + 1 );
+                       }
+               },
+
+               _unmark: function( force, elem, type ) {
+                       if ( force !== true ) {
+                               type = elem;
+                               elem = force;
+                               force = false;
+                       }
+                       if ( elem ) {
+                               type = type || "fx";
+                               var key = type + "mark",
+                                       count = force ? 0 : ( (jQuery._data( elem, key ) || 1) - 1 );
+                               if ( count ) {
+                                       jQuery._data( elem, key, count );
+                               } else {
+                                       jQuery.removeData( elem, key, true );
+                                       handleQueueMarkDefer( elem, type, "mark" );
+                               }
+                       }
+               },
+
+               queue: function( elem, type, data ) {
+                       var q;
+                       if ( elem ) {
+                               type = ( type || "fx" ) + "queue";
+                               q = jQuery._data( elem, type );
+
+                               // Speed up dequeue by getting out quickly if this is just a lookup
+                               if ( data ) {
+                                       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(),
+                               hooks = {};
+
+                       // 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" );
+                               }
+
+                               jQuery._data( elem, type + ".run", hooks );
+                               fn.call( elem, function() {
+                                       jQuery.dequeue( elem, type );
+                               }, hooks );
+                       }
+
+                       if ( !queue.length ) {
+                               jQuery.removeData( elem, type + "queue " + type + ".run", true );
+                               handleQueueMarkDefer( elem, type, "queue" );
+                       }
+               }
+       });
+
+       jQuery.fn.extend({
+               queue: function( type, data ) {
+                       var setter = 2;
+
+                       if ( typeof type !== "string" ) {
+                               data = type;
+                               type = "fx";
+                               setter--;
+                       }
+
+                       if ( arguments.length < setter ) {
+                               return jQuery.queue( this[0], type );
+                       }
+
+                       return data === undefined ?
+                               this :
+                               this.each(function() {
+                                       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( next, hooks ) {
+                               var timeout = setTimeout( next, time );
+                               hooks.stop = function() {
+                                       clearTimeout( timeout );
+                               };
+                       });
+               },
+               clearQueue: function( type ) {
+                       return this.queue( type || "fx", [] );
+               },
+               // Get a promise resolved when queues of a certain type
+               // are emptied (fx is the type by default)
+               promise: function( type, object ) {
+                       if ( typeof type !== "string" ) {
+                               object = type;
+                               type = undefined;
+                       }
+                       type = type || "fx";
+                       var defer = jQuery.Deferred(),
+                               elements = this,
+                               i = elements.length,
+                               count = 1,
+                               deferDataKey = type + "defer",
+                               queueDataKey = type + "queue",
+                               markDataKey = type + "mark",
+                               tmp;
+                       function resolve() {
+                               if ( !( --count ) ) {
+                                       defer.resolveWith( elements, [ elements ] );
+                               }
+                       }
+                       while( i-- ) {
+                               if (( tmp = jQuery.data( elements[ i ], deferDataKey, undefined, true ) ||
+                                       ( jQuery.data( elements[ i ], queueDataKey, undefined, true ) ||
+                                               jQuery.data( elements[ i ], markDataKey, undefined, true ) ) &&
+                                               jQuery.data( elements[ i ], deferDataKey, jQuery.Callbacks( "once memory" ), true ) )) {
+                                       count++;
+                                       tmp.add( resolve );
+                               }
+                       }
+                       resolve();
+                       return defer.promise( object );
+               }
+       });
+
+
+
+
+       var rclass = /[\n\t\r]/g,
+               rspace = /\s+/,
+               rreturn = /\r/g,
+               rtype = /^(?:button|input)$/i,
+               rfocusable = /^(?:button|input|object|select|textarea)$/i,
+               rclickable = /^a(?:rea)?$/i,
+               rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,
+               getSetAttribute = jQuery.support.getSetAttribute,
+               nodeHook, boolHook, fixSpecified;
+
+       jQuery.fn.extend({
+               attr: function( name, value ) {
+                       return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 );
+               },
+
+               removeAttr: function( name ) {
+                       return this.each(function() {
+                               jQuery.removeAttr( this, name );
+                       });
+               },
+
+               prop: function( name, value ) {
+                       return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 );
+               },
+
+               removeProp: function( name ) {
+                       name = jQuery.propFix[ name ] || name;
+                       return this.each(function() {
+                               // try/catch handles cases where IE balks (such as removing a property on window)
+                               try {
+                                       this[ name ] = undefined;
+                                       delete this[ name ];
+                               } catch( e ) {}
+                       });
+               },
+
+               addClass: function( value ) {
+                       var classNames, i, l, elem,
+                               setClass, c, cl;
+
+                       if ( jQuery.isFunction( value ) ) {
+                               return this.each(function( j ) {
+                                       jQuery( this ).addClass( value.call(this, j, this.className) );
+                               });
+                       }
+
+                       if ( value && typeof value === "string" ) {
+                               classNames = value.split( rspace );
+
+                               for ( i = 0, l = this.length; i < l; i++ ) {
+                                       elem = this[ i ];
+
+                                       if ( elem.nodeType === 1 ) {
+                                               if ( !elem.className && classNames.length === 1 ) {
+                                                       elem.className = value;
+
+                                               } else {
+                                                       setClass = " " + elem.className + " ";
+
+                                                       for ( c = 0, cl = classNames.length; c < cl; c++ ) {
+                                                               if ( !~setClass.indexOf( " " + classNames[ c ] + " " ) ) {
+                                                                       setClass += classNames[ c ] + " ";
+                                                               }
+                                                       }
+                                                       elem.className = jQuery.trim( setClass );
+                                               }
+                                       }
+                               }
+                       }
+
+                       return this;
+               },
+
+               removeClass: function( value ) {
+                       var classNames, i, l, elem, className, c, cl;
+
+                       if ( jQuery.isFunction( value ) ) {
+                               return this.each(function( j ) {
+                                       jQuery( this ).removeClass( value.call(this, j, this.className) );
+                               });
+                       }
+
+                       if ( (value && typeof value === "string") || value === undefined ) {
+                               classNames = ( value || "" ).split( rspace );
+
+                               for ( i = 0, l = this.length; i < l; i++ ) {
+                                       elem = this[ i ];
+
+                                       if ( elem.nodeType === 1 && elem.className ) {
+                                               if ( value ) {
+                                                       className = (" " + elem.className + " ").replace( rclass, " " );
+                                                       for ( 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 ) {
+                                       jQuery( this ).toggleClass( value.call(this, i, this.className, 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 + " ",
+                               i = 0,
+                               l = this.length;
+                       for ( ; i < l; i++ ) {
+                               if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) {
+                                       return true;
+                               }
+                       }
+
+                       return false;
+               },
+
+               val: function( value ) {
+                       var hooks, ret, isFunction,
+                               elem = this[0];
+
+                       if ( !arguments.length ) {
+                               if ( elem ) {
+                                       hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];
+
+                                       if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
+                                               return ret;
+                                       }
+
+                                       ret = elem.value;
+
+                                       return typeof ret === "string" ?
+                                               // handle most common string cases
+                                               ret.replace(rreturn, "") :
+                                               // handle cases where value is null/undef or number
+                                               ret == null ? "" : ret;
+                               }
+
+                               return;
+                       }
+
+                       isFunction = jQuery.isFunction( value );
+
+                       return this.each(function( i ) {
+                               var self = jQuery(this), val;
+
+                               if ( this.nodeType !== 1 ) {
+                                       return;
+                               }
+
+                               if ( isFunction ) {
+                                       val = value.call( this, i, self.val() );
+                               } else {
+                                       val = value;
+                               }
+
+                               // Treat null/undefined as ""; convert numbers to string
+                               if ( val == null ) {
+                                       val = "";
+                               } else if ( typeof val === "number" ) {
+                                       val += "";
+                               } else if ( jQuery.isArray( val ) ) {
+                                       val = jQuery.map(val, function ( value ) {
+                                               return value == null ? "" : value + "";
+                                       });
+                               }
+
+                               hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
+
+                               // If set returns undefined, fall back to normal setting
+                               if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
+                                       this.value = val;
+                               }
+                       });
+               }
+       });
+
+       jQuery.extend({
+               valHooks: {
+                       option: {
+                               get: function( elem ) {
+                                       // attributes.value is undefined in Blackberry 4.7 but
+                                       // uses .value. See #6932
+                                       var val = elem.attributes.value;
+                                       return !val || val.specified ? elem.value : elem.text;
+                               }
+                       },
+                       select: {
+                               get: function( elem ) {
+                                       var value, i, max, option,
+                                               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
+                                       i = one ? index : 0;
+                                       max = one ? index + 1 : options.length;
+                                       for ( ; i < max; i++ ) {
+                                               option = options[ i ];
+
+                                               // Don't return options that are disabled or in a disabled optgroup
+                                               if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) &&
+                                                       (!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) {
+
+                                                       // Get the specific 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 );
+                                               }
+                                       }
+
+                                       // Fixes Bug #2551 -- select.val() broken in IE after form.reset()
+                                       if ( one && !values.length && options.length ) {
+                                               return jQuery( options[ index ] ).val();
+                                       }
+
+                                       return values;
+                               },
+
+                               set: function( elem, value ) {
+                                       var values = jQuery.makeArray( value );
+
+                                       jQuery(elem).find("option").each(function() {
+                                               this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
+                                       });
+
+                                       if ( !values.length ) {
+                                               elem.selectedIndex = -1;
+                                       }
+                                       return values;
+                               }
+                       }
+               },
+
+               attrFn: {
+                       val: true,
+                       css: true,
+                       html: true,
+                       text: true,
+                       data: true,
+                       width: true,
+                       height: true,
+                       offset: true
+               },
+
+               attr: function( elem, name, value, pass ) {
+                       var ret, hooks, notxml,
+                               nType = elem.nodeType;
+
+                       // don't get/set attributes on text, comment and attribute nodes
+                       if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
+                               return;
+                       }
+
+                       if ( pass && name in jQuery.attrFn ) {
+                               return jQuery( elem )[ name ]( value );
+                       }
+
+                       // Fallback to prop when attributes are not supported
+                       if ( typeof elem.getAttribute === "undefined" ) {
+                               return jQuery.prop( elem, name, value );
+                       }
+
+                       notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
+
+                       // All attributes are lowercase
+                       // Grab necessary hook if one is defined
+                       if ( notxml ) {
+                               name = name.toLowerCase();
+                               hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook );
+                       }
+
+                       if ( value !== undefined ) {
+
+                               if ( value === null ) {
+                                       jQuery.removeAttr( elem, name );
+                                       return;
+
+                               } else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) {
+                                       return ret;
+
+                               } else {
+                                       elem.setAttribute( name, "" + value );
+                                       return value;
+                               }
+
+                       } else if ( hooks && "get" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) {
+                               return ret;
+
+                       } else {
+
+                               ret = elem.getAttribute( name );
+
+                               // Non-existent attributes return null, we normalize to undefined
+                               return ret === null ?
+                                       undefined :
+                                       ret;
+                       }
+               },
+
+               removeAttr: function( elem, value ) {
+                       var propName, attrNames, name, l, isBool,
+                               i = 0;
+
+                       if ( value && elem.nodeType === 1 ) {
+                               attrNames = value.toLowerCase().split( rspace );
+                               l = attrNames.length;
+
+                               for ( ; i < l; i++ ) {
+                                       name = attrNames[ i ];
+
+                                       if ( name ) {
+                                               propName = jQuery.propFix[ name ] || name;
+                                               isBool = rboolean.test( name );
+
+                                               // See #9699 for explanation of this approach (setting first, then removal)
+                                               // Do not do this for boolean attributes (see #10870)
+                                               if ( !isBool ) {
+                                                       jQuery.attr( elem, name, "" );
+                                               }
+                                               elem.removeAttribute( getSetAttribute ? name : propName );
+
+                                               // Set corresponding property to false for boolean attributes
+                                               if ( isBool && propName in elem ) {
+                                                       elem[ propName ] = false;
+                                               }
+                                       }
+                               }
+                       }
+               },
+
+               attrHooks: {
+                       type: {
+                               set: function( elem, value ) {
+                                       // We can't allow the type property to be changed (since it causes problems in IE)
+                                       if ( rtype.test( elem.nodeName ) && elem.parentNode ) {
+                                               jQuery.error( "type property can't be changed" );
+                                       } else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
+                                               // Setting the type on a radio button after the value resets the value in IE6-9
+                                               // Reset value to it's default in case type is set after value
+                                               // This is for element creation
+                                               var val = elem.value;
+                                               elem.setAttribute( "type", value );
+                                               if ( val ) {
+                                                       elem.value = val;
+                                               }
+                                               return value;
+                                       }
+                               }
+                       },
+                       // Use the value property for back compat
+                       // Use the nodeHook for button elements in IE6/7 (#1954)
+                       value: {
+                               get: function( elem, name ) {
+                                       if ( nodeHook && jQuery.nodeName( elem, "button" ) ) {
+                                               return nodeHook.get( elem, name );
+                                       }
+                                       return name in elem ?
+                                               elem.value :
+                                               null;
+                               },
+                               set: function( elem, value, name ) {
+                                       if ( nodeHook && jQuery.nodeName( elem, "button" ) ) {
+                                               return nodeHook.set( elem, value, name );
+                                       }
+                                       // Does not return so that setAttribute is also used
+                                       elem.value = value;
+                               }
+                       }
+               },
+
+               propFix: {
+                       tabindex: "tabIndex",
+                       readonly: "readOnly",
+                       "for": "htmlFor",
+                       "class": "className",
+                       maxlength: "maxLength",
+                       cellspacing: "cellSpacing",
+                       cellpadding: "cellPadding",
+                       rowspan: "rowSpan",
+                       colspan: "colSpan",
+                       usemap: "useMap",
+                       frameborder: "frameBorder",
+                       contenteditable: "contentEditable"
+               },
+
+               prop: function( elem, name, value ) {
+                       var ret, hooks, notxml,
+                               nType = elem.nodeType;
+
+                       // don't get/set properties on text, comment and attribute nodes
+                       if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
+                               return;
+                       }
+
+                       notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
+
+                       if ( notxml ) {
+                               // Fix name and attach hooks
+                               name = jQuery.propFix[ name ] || name;
+                               hooks = jQuery.propHooks[ name ];
+                       }
+
+                       if ( value !== undefined ) {
+                               if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
+                                       return ret;
+
+                               } else {
+                                       return ( elem[ name ] = value );
+                               }
+
+                       } else {
+                               if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
+                                       return ret;
+
+                               } else {
+                                       return elem[ name ];
+                               }
+                       }
+               },
+
+               propHooks: {
+                       tabIndex: {
+                               get: function( elem ) {
+                                       // 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/
+                                       var attributeNode = elem.getAttributeNode("tabindex");
+
+                                       return attributeNode && attributeNode.specified ?
+                                               parseInt( attributeNode.value, 10 ) :
+                                               rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
+                                                       0 :
+                                                       undefined;
+                               }
+                       }
+               }
+       });
+
+// Add the tabIndex propHook to attrHooks for back-compat (different case is intentional)
+       jQuery.attrHooks.tabindex = jQuery.propHooks.tabIndex;
+
+// Hook for boolean attributes
+       boolHook = {
+               get: function( elem, name ) {
+                       // Align boolean attributes with corresponding properties
+                       // Fall back to attribute presence where some booleans are not supported
+                       var attrNode,
+                               property = jQuery.prop( elem, name );
+                       return property === true || typeof property !== "boolean" && ( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ?
+                               name.toLowerCase() :
+                               undefined;
+               },
+               set: function( elem, value, name ) {
+                       var propName;
+                       if ( value === false ) {
+                               // Remove boolean attributes when set to false
+                               jQuery.removeAttr( elem, name );
+                       } else {
+                               // value is true since we know at this point it's type boolean and not false
+                               // Set boolean attributes to the same name and set the DOM property
+                               propName = jQuery.propFix[ name ] || name;
+                               if ( propName in elem ) {
+                                       // Only set the IDL specifically if it already exists on the element
+                                       elem[ propName ] = true;
+                               }
+
+                               elem.setAttribute( name, name.toLowerCase() );
+                       }
+                       return name;
+               }
+       };
+
+// IE6/7 do not support getting/setting some attributes with get/setAttribute
+       if ( !getSetAttribute ) {
+
+               fixSpecified = {
+                       name: true,
+                       id: true,
+                       coords: true
+               };
+
+               // Use this for any attribute in IE6/7
+               // This fixes almost every IE6/7 issue
+               nodeHook = jQuery.valHooks.button = {
+                       get: function( elem, name ) {
+                               var ret;
+                               ret = elem.getAttributeNode( name );
+                               return ret && ( fixSpecified[ name ] ? ret.nodeValue !== "" : ret.specified ) ?
+                                       ret.nodeValue :
+                                       undefined;
+                       },
+                       set: function( elem, value, name ) {
+                               // Set the existing or create a new attribute node
+                               var ret = elem.getAttributeNode( name );
+                               if ( !ret ) {
+                                       ret = document.createAttribute( name );
+                                       elem.setAttributeNode( ret );
+                               }
+                               return ( ret.nodeValue = value + "" );
+                       }
+               };
+
+               // Apply the nodeHook to tabindex
+               jQuery.attrHooks.tabindex.set = nodeHook.set;
+
+               // Set width and height to auto instead of 0 on empty string( Bug #8150 )
+               // This is for removals
+               jQuery.each([ "width", "height" ], function( i, name ) {
+                       jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
+                               set: function( elem, value ) {
+                                       if ( value === "" ) {
+                                               elem.setAttribute( name, "auto" );
+                                               return value;
+                                       }
+                               }
+                       });
+               });
+
+               // Set contenteditable to false on removals(#10429)
+               // Setting to empty string throws an error as an invalid value
+               jQuery.attrHooks.contenteditable = {
+                       get: nodeHook.get,
+                       set: function( elem, value, name ) {
+                               if ( value === "" ) {
+                                       value = "false";
+                               }
+                               nodeHook.set( elem, value, name );
+                       }
+               };
+       }
+
+
+// Some attributes require a special call on IE
+       if ( !jQuery.support.hrefNormalized ) {
+               jQuery.each([ "href", "src", "width", "height" ], function( i, name ) {
+                       jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
+                               get: function( elem ) {
+                                       var ret = elem.getAttribute( name, 2 );
+                                       return ret === null ? undefined : ret;
+                               }
+                       });
+               });
+       }
+
+       if ( !jQuery.support.style ) {
+               jQuery.attrHooks.style = {
+                       get: function( elem ) {
+                               // Return undefined in the case of empty string
+                               // Normalize to lowercase since IE uppercases css property names
+                               return elem.style.cssText.toLowerCase() || undefined;
+                       },
+                       set: function( elem, value ) {
+                               return ( elem.style.cssText = "" + value );
+                       }
+               };
+       }
+
+// Safari mis-reports the default selected property of an option
+// Accessing the parent's selectedIndex property fixes it
+       if ( !jQuery.support.optSelected ) {
+               jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, {
+                       get: function( elem ) {
+                               var parent = elem.parentNode;
+
+                               if ( parent ) {
+                                       parent.selectedIndex;
+
+                                       // Make sure that it also works with optgroups, see #5701
+                                       if ( parent.parentNode ) {
+                                               parent.parentNode.selectedIndex;
+                                       }
+                               }
+                               return null;
+                       }
+               });
+       }
+
+// IE6/7 call enctype encoding
+       if ( !jQuery.support.enctype ) {
+               jQuery.propFix.enctype = "encoding";
+       }
+
+// Radios and checkboxes getter/setter
+       if ( !jQuery.support.checkOn ) {
+               jQuery.each([ "radio", "checkbox" ], function() {
+                       jQuery.valHooks[ this ] = {
+                               get: function( elem ) {
+                                       // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified
+                                       return elem.getAttribute("value") === null ? "on" : elem.value;
+                               }
+                       };
+               });
+       }
+       jQuery.each([ "radio", "checkbox" ], function() {
+               jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], {
+                       set: function( elem, value ) {
+                               if ( jQuery.isArray( value ) ) {
+                                       return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );
+                               }
+                       }
+               });
+       });
+
+
+
+
+       var rformElems = /^(?:textarea|input|select)$/i,
+               rtypenamespace = /^([^\.]*)?(?:\.(.+))?$/,
+               rhoverHack = /(?:^|\s)hover(\.\S+)?\b/,
+               rkeyEvent = /^key/,
+               rmouseEvent = /^(?:mouse|contextmenu)|click/,
+               rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
+               rquickIs = /^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,
+               quickParse = function( selector ) {
+                       var quick = rquickIs.exec( selector );
+                       if ( quick ) {
+                               //   0  1    2   3
+                               // [ _, tag, id, class ]
+                               quick[1] = ( quick[1] || "" ).toLowerCase();
+                               quick[3] = quick[3] && new RegExp( "(?:^|\\s)" + quick[3] + "(?:\\s|$)" );
+                       }
+                       return quick;
+               },
+               quickIs = function( elem, m ) {
+                       var attrs = elem.attributes || {};
+                       return (
+                               (!m[1] || elem.nodeName.toLowerCase() === m[1]) &&
+                                       (!m[2] || (attrs.id || {}).value === m[2]) &&
+                                       (!m[3] || m[3].test( (attrs[ "class" ] || {}).value ))
+                               );
+               },
+               hoverHack = function( events ) {
+                       return jQuery.event.special.hover ? events : events.replace( rhoverHack, "mouseenter$1 mouseleave$1" );
+               };
+
+       /*
+        * Helper functions for managing events -- not part of the public interface.
+        * Props to Dean Edwards' addEvent library for many of the ideas.
+        */
+       jQuery.event = {
+
+               add: function( elem, types, handler, data, selector ) {
+
+                       var elemData, eventHandle, events,
+                               t, tns, type, namespaces, handleObj,
+                               handleObjIn, quick, handlers, special;
+
+                       // Don't attach events to noData or text/comment nodes (allow plain objects tho)
+                       if ( elem.nodeType === 3 || elem.nodeType === 8 || !types || !handler || !(elemData = jQuery._data( elem )) ) {
+                               return;
+                       }
+
+                       // Caller can pass in an object of custom data in lieu of the handler
+                       if ( handler.handler ) {
+                               handleObjIn = handler;
+                               handler = handleObjIn.handler;
+                               selector = handleObjIn.selector;
+                       }
+
+                       // Make sure that the handler has a unique ID, used to find/remove it later
+                       if ( !handler.guid ) {
+                               handler.guid = jQuery.guid++;
+                       }
+
+                       // Init the element's event structure and main handler, if this is the first
+                       events = elemData.events;
+                       if ( !events ) {
+                               elemData.events = events = {};
+                       }
+                       eventHandle = elemData.handle;
+                       if ( !eventHandle ) {
+                               elemData.handle = eventHandle = function( e ) {
+                                       // Discard the second event of a jQuery.event.trigger() and
+                                       // when an event is called after a page has unloaded
+                                       return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ?
+                                               jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :
+                                               undefined;
+                               };
+                               // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events
+                               eventHandle.elem = elem;
+                       }
+
+                       // Handle multiple events separated by a space
+                       // jQuery(...).bind("mouseover mouseout", fn);
+                       types = jQuery.trim( hoverHack(types) ).split( " " );
+                       for ( t = 0; t < types.length; t++ ) {
+
+                               tns = rtypenamespace.exec( types[t] ) || [];
+                               type = tns[1];
+                               namespaces = ( tns[2] || "" ).split( "." ).sort();
+
+                               // If event changes its type, use the special event handlers for the changed type
+                               special = jQuery.event.special[ type ] || {};
+
+                               // If selector defined, determine special event api type, otherwise given type
+                               type = ( selector ? special.delegateType : special.bindType ) || type;
+
+                               // Update special based on newly reset type
+                               special = jQuery.event.special[ type ] || {};
+
+                               // handleObj is passed to all event handlers
+                               handleObj = jQuery.extend({
+                                       type: type,
+                                       origType: tns[1],
+                                       data: data,
+                                       handler: handler,
+                                       guid: handler.guid,
+                                       selector: selector,
+                                       quick: selector && quickParse( selector ),
+                                       namespace: namespaces.join(".")
+                               }, handleObjIn );
+
+                               // Init the event handler queue if we're the first
+                               handlers = events[ type ];
+                               if ( !handlers ) {
+                                       handlers = events[ type ] = [];
+                                       handlers.delegateCount = 0;
+
+                                       // 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 to the element's handler list, delegates in front
+                               if ( selector ) {
+                                       handlers.splice( handlers.delegateCount++, 0, handleObj );
+                               } else {
+                                       handlers.push( handleObj );
+                               }
+
+                               // Keep track of which events have ever been used, for event optimization
+                               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, selector, mappedTypes ) {
+
+                       var elemData = jQuery.hasData( elem ) && jQuery._data( elem ),
+                               t, tns, type, origType, namespaces, origCount,
+                               j, events, special, handle, eventType, handleObj;
+
+                       if ( !elemData || !(events = elemData.events) ) {
+                               return;
+                       }
+
+                       // Once for each type.namespace in types; type may be omitted
+                       types = jQuery.trim( hoverHack( types || "" ) ).split(" ");
+                       for ( t = 0; t < types.length; t++ ) {
+                               tns = rtypenamespace.exec( types[t] ) || [];
+                               type = origType = tns[1];
+                               namespaces = tns[2];
+
+                               // Unbind all events (on this namespace, if provided) for the element
+                               if ( !type ) {
+                                       for ( type in events ) {
+                                               jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
+                                       }
+                                       continue;
+                               }
+
+                               special = jQuery.event.special[ type ] || {};
+                               type = ( selector? special.delegateType : special.bindType ) || type;
+                               eventType = events[ type ] || [];
+                               origCount = eventType.length;
+                               namespaces = namespaces ? new RegExp("(^|\\.)" + namespaces.split(".").sort().join("\\.(?:.*\\.)?") + "(\\.|$)") : null;
+
+                               // Remove matching events
+                               for ( j = 0; j < eventType.length; j++ ) {
+                                       handleObj = eventType[ j ];
+
+                                       if ( ( mappedTypes || origType === handleObj.origType ) &&
+                                               ( !handler || handler.guid === handleObj.guid ) &&
+                                               ( !namespaces || namespaces.test( handleObj.namespace ) ) &&
+                                               ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {
+                                               eventType.splice( j--, 1 );
+
+                                               if ( handleObj.selector ) {
+                                                       eventType.delegateCount--;
+                                               }
+                                               if ( special.remove ) {
+                                                       special.remove.call( elem, handleObj );
+                                               }
+                                       }
+                               }
+
+                               // Remove generic event handler if we removed something and no more handlers exist
+                               // (avoids potential for endless recursion during removal of special event handlers)
+                               if ( eventType.length === 0 && origCount !== eventType.length ) {
+                                       if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) {
+                                               jQuery.removeEvent( elem, type, elemData.handle );
+                                       }
+
+                                       delete events[ type ];
+                               }
+                       }
+
+                       // Remove the expando if it's no longer used
+                       if ( jQuery.isEmptyObject( events ) ) {
+                               handle = elemData.handle;
+                               if ( handle ) {
+                                       handle.elem = null;
+                               }
+
+                               // removeData also checks for emptiness and clears the expando if empty
+                               // so use it instead of delete
+                               jQuery.removeData( elem, [ "events", "handle" ], true );
+                       }
+               },
+
+               // Events that are safe to short-circuit if no handlers are attached.
+               // Native DOM events should not be added, they may have inline handlers.
+               customEvent: {
+                       "getData": true,
+                       "setData": true,
+                       "changeData": true
+               },
+
+               trigger: function( event, data, elem, onlyHandlers ) {
+                       // Don't do events on text and comment nodes
+                       if ( elem && (elem.nodeType === 3 || elem.nodeType === 8) ) {
+                               return;
+                       }
+
+                       // Event object or event type
+                       var type = event.type || event,
+                               namespaces = [],
+                               cache, exclusive, i, cur, old, ontype, special, handle, eventPath, bubbleType;
+
+                       // focus/blur morphs to focusin/out; ensure we're not firing them right now
+                       if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
+                               return;
+                       }
+
+                       if ( type.indexOf( "!" ) >= 0 ) {
+                               // Exclusive events trigger only for the exact event (no namespaces)
+                               type = type.slice(0, -1);
+                               exclusive = true;
+                       }
+
+                       if ( type.indexOf( "." ) >= 0 ) {
+                               // Namespaced trigger; create a regexp to match event type in handle()
+                               namespaces = type.split(".");
+                               type = namespaces.shift();
+                               namespaces.sort();
+                       }
+
+                       if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) {
+                               // No jQuery handlers for this event type, and it can't have inline handlers
+                               return;
+                       }
+
+                       // Caller can pass in an Event, Object, or just an event type string
+                       event = typeof event === "object" ?
+                               // jQuery.Event object
+                               event[ jQuery.expando ] ? event :
+                                       // Object literal
+                                       new jQuery.Event( type, event ) :
+                               // Just the event type (string)
+                               new jQuery.Event( type );
+
+                       event.type = type;
+                       event.isTrigger = true;
+                       event.exclusive = exclusive;
+                       event.namespace = namespaces.join( "." );
+                       event.namespace_re = event.namespace? new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.)?") + "(\\.|$)") : null;
+                       ontype = type.indexOf( ":" ) < 0 ? "on" + type : "";
+
+                       // Handle a global trigger
+                       if ( !elem ) {
+
+                               // TODO: Stop taunting the data cache; remove global events and always attach to document
+                               cache = jQuery.cache;
+                               for ( i in cache ) {
+                                       if ( cache[ i ].events && cache[ i ].events[ type ] ) {
+                                               jQuery.event.trigger( event, data, cache[ i ].handle.elem, true );
+                                       }
+                               }
+                               return;
+                       }
+
+                       // Clean up the event in case it is being reused
+                       event.result = undefined;
+                       if ( !event.target ) {
+                               event.target = elem;
+                       }
+
+                       // Clone any incoming data and prepend the event, creating the handler arg list
+                       data = data != null ? jQuery.makeArray( data ) : [];
+                       data.unshift( event );
+
+                       // Allow special events to draw outside the lines
+                       special = jQuery.event.special[ type ] || {};
+                       if ( special.trigger && special.trigger.apply( elem, data ) === false ) {
+                               return;
+                       }
+
+                       // Determine event propagation path in advance, per W3C events spec (#9951)
+                       // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
+                       eventPath = [[ elem, special.bindType || type ]];
+                       if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
+
+                               bubbleType = special.delegateType || type;
+                               cur = rfocusMorph.test( bubbleType + type ) ? elem : elem.parentNode;
+                               old = null;
+                               for ( ; cur; cur = cur.parentNode ) {
+                                       eventPath.push([ cur, bubbleType ]);
+                                       old = cur;
+                               }
+
+                               // Only add window if we got to document (e.g., not plain obj or detached DOM)
+                               if ( old && old === elem.ownerDocument ) {
+                                       eventPath.push([ old.defaultView || old.parentWindow || window, bubbleType ]);
+                               }
+                       }
+
+                       // Fire handlers on the event path
+                       for ( i = 0; i < eventPath.length && !event.isPropagationStopped(); i++ ) {
+
+                               cur = eventPath[i][0];
+                               event.type = eventPath[i][1];
+
+                               handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" );
+                               if ( handle ) {
+                                       handle.apply( cur, data );
+                               }
+                               // Note that this is a bare JS function and not a jQuery handler
+                               handle = ontype && cur[ ontype ];
+                               if ( handle && jQuery.acceptData( cur ) && handle.apply( cur, data ) === false ) {
+                                       event.preventDefault();
+                               }
+                       }
+                       event.type = type;
+
+                       // If nobody prevented the default action, do it now
+                       if ( !onlyHandlers && !event.isDefaultPrevented() ) {
+
+                               if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) &&
+                                       !(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) {
+
+                                       // Call a native DOM method on the target with the same name name as the event.
+                                       // Can't use an .isFunction() check here because IE6/7 fails that test.
+                                       // Don't do default actions on window, that's where global variables be (#6170)
+                                       // IE<9 dies on focus/blur to hidden element (#1486)
+                                       if ( ontype && elem[ type ] && ((type !== "focus" && type !== "blur") || event.target.offsetWidth !== 0) && !jQuery.isWindow( elem ) ) {
+
+                                               // Don't re-trigger an onFOO event when we call its FOO() method
+                                               old = elem[ ontype ];
+
+                                               if ( old ) {
+                                                       elem[ ontype ] = null;
+                                               }
+
+                                               // Prevent re-triggering of the same event, since we already bubbled it above
+                                               jQuery.event.triggered = type;
+                                               elem[ type ]();
+                                               jQuery.event.triggered = undefined;
+
+                                               if ( old ) {
+                                                       elem[ ontype ] = old;
+                                               }
+                                       }
+                               }
+                       }
+
+                       return event.result;
+               },
+
+               dispatch: function( event ) {
+
+                       // Make a writable jQuery.Event from the native event object
+                       event = jQuery.event.fix( event || window.event );
+
+                       var handlers = ( (jQuery._data( this, "events" ) || {} )[ event.type ] || []),
+                               delegateCount = handlers.delegateCount,
+                               args = [].slice.call( arguments, 0 ),
+                               run_all = !event.exclusive && !event.namespace,
+                               special = jQuery.event.special[ event.type ] || {},
+                               handlerQueue = [],
+                               i, j, cur, jqcur, ret, selMatch, matched, matches, handleObj, sel, related;
+
+                       // Use the fix-ed jQuery.Event rather than the (read-only) native event
+                       args[0] = event;
+                       event.delegateTarget = this;
+
+                       // Call the preDispatch hook for the mapped type, and let it bail if desired
+                       if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
+                               return;
+                       }
+
+                       // Determine handlers that should run if there are delegated events
+                       // Avoid non-left-click bubbling in Firefox (#3861)
+                       if ( delegateCount && !(event.button && event.type === "click") ) {
+
+                               // Pregenerate a single jQuery object for reuse with .is()
+                               jqcur = jQuery(this);
+                               jqcur.context = this.ownerDocument || this;
+
+                               for ( cur = event.target; cur != this; cur = cur.parentNode || this ) {
+
+                                       // Don't process events on disabled elements (#6911, #8165)
+                                       if ( cur.disabled !== true ) {
+                                               selMatch = {};
+                                               matches = [];
+                                               jqcur[0] = cur;
+                                               for ( i = 0; i < delegateCount; i++ ) {
+                                                       handleObj = handlers[ i ];
+                                                       sel = handleObj.selector;
+
+                                                       if ( selMatch[ sel ] === undefined ) {
+                                                               selMatch[ sel ] = (
+                                                                       handleObj.quick ? quickIs( cur, handleObj.quick ) : jqcur.is( sel )
+                                                                       );
+                                                       }
+                                                       if ( selMatch[ sel ] ) {
+                                                               matches.push( handleObj );
+                                                       }
+                                               }
+                                               if ( matches.length ) {
+                                                       handlerQueue.push({ elem: cur, matches: matches });
+                                               }
+                                       }
+                               }
+                       }
+
+                       // Add the remaining (directly-bound) handlers
+                       if ( handlers.length > delegateCount ) {
+                               handlerQueue.push({ elem: this, matches: handlers.slice( delegateCount ) });
+                       }
+
+                       // Run delegates first; they may want to stop propagation beneath us
+                       for ( i = 0; i < handlerQueue.length && !event.isPropagationStopped(); i++ ) {
+                               matched = handlerQueue[ i ];
+                               event.currentTarget = matched.elem;
+
+                               for ( j = 0; j < matched.matches.length && !event.isImmediatePropagationStopped(); j++ ) {
+                                       handleObj = matched.matches[ j ];
+
+                                       // Triggered event must either 1) be non-exclusive and have no namespace, or
+                                       // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).
+                                       if ( run_all || (!event.namespace && !handleObj.namespace) || event.namespace_re && event.namespace_re.test( handleObj.namespace ) ) {
+
+                                               event.data = handleObj.data;
+                                               event.handleObj = handleObj;
+
+                                               ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )
+                                                       .apply( matched.elem, args );
+
+                                               if ( ret !== undefined ) {
+                                                       event.result = ret;
+                                                       if ( ret === false ) {
+                                                               event.preventDefault();
+                                                               event.stopPropagation();
+                                                       }
+                                               }
+                                       }
+                               }
+                       }
+
+                       // Call the postDispatch hook for the mapped type
+                       if ( special.postDispatch ) {
+                               special.postDispatch.call( this, event );
+                       }
+
+                       return event.result;
+               },
+
+               // Includes some event props shared by KeyEvent and MouseEvent
+               // *** attrChange attrName relatedNode srcElement  are not normalized, non-W3C, deprecated, will be removed in 1.8 ***
+               props: "attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
+
+               fixHooks: {},
+
+               keyHooks: {
+                       props: "char charCode key keyCode".split(" "),
+                       filter: function( event, original ) {
+
+                               // Add which for key events
+                               if ( event.which == null ) {
+                                       event.which = original.charCode != null ? original.charCode : original.keyCode;
+                               }
+
+                               return event;
+                       }
+               },
+
+               mouseHooks: {
+                       props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
+                       filter: function( event, original ) {
+                               var eventDoc, doc, body,
+                                       button = original.button,
+                                       fromElement = original.fromElement;
+
+                               // Calculate pageX/Y if missing and clientX/Y available
+                               if ( event.pageX == null && original.clientX != null ) {
+                                       eventDoc = event.target.ownerDocument || document;
+                                       doc = eventDoc.documentElement;
+                                       body = eventDoc.body;
+
+                                       event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );
+                                       event.pageY = original.clientY + ( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) - ( doc && doc.clientTop  || body && body.clientTop  || 0 );
+                               }
+
+                               // Add relatedTarget, if necessary
+                               if ( !event.relatedTarget && fromElement ) {
+                                       event.relatedTarget = fromElement === event.target ? original.toElement : fromElement;
+                               }
+
+                               // Add which for click: 1 === left; 2 === middle; 3 === right
+                               // Note: button is not normalized, so don't use it
+                               if ( !event.which && button !== undefined ) {
+                                       event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
+                               }
+
+                               return event;
+                       }
+               },
+
+               fix: function( event ) {
+                       if ( event[ jQuery.expando ] ) {
+                               return event;
+                       }
+
+                       // Create a writable copy of the event object and normalize some properties
+                       var i, prop,
+                               originalEvent = event,
+                               fixHook = jQuery.event.fixHooks[ event.type ] || {},
+                               copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
+
+                       event = jQuery.Event( originalEvent );
+
+                       for ( i = copy.length; i; ) {
+                               prop = copy[ --i ];
+                               event[ prop ] = originalEvent[ prop ];
+                       }
+
+                       // Fix target property, if necessary (#1925, IE 6/7/8 & Safari2)
+                       if ( !event.target ) {
+                               event.target = originalEvent.srcElement || document;
+                       }
+
+                       // Target should not be a text node (#504, Safari)
+                       if ( event.target.nodeType === 3 ) {
+                               event.target = event.target.parentNode;
+                       }
+
+                       // For mouse/key events; add metaKey if it's not there (#3368, IE6/7/8)
+                       if ( event.metaKey === undefined ) {
+                               event.metaKey = event.ctrlKey;
+                       }
+
+                       return fixHook.filter? fixHook.filter( event, originalEvent ) : event;
+               },
+
+               special: {
+                       ready: {
+                               // Make sure the ready event is setup
+                               setup: jQuery.bindReady
+                       },
+
+                       load: {
+                               // Prevent triggered image.load events from bubbling to window.load
+                               noBubble: true
+                       },
+
+                       focus: {
+                               delegateType: "focusin"
+                       },
+                       blur: {
+                               delegateType: "focusout"
+                       },
+
+                       beforeunload: {
+                               setup: function( data, namespaces, eventHandle ) {
+                                       // We only want to do this special case on windows
+                                       if ( jQuery.isWindow( this ) ) {
+                                               this.onbeforeunload = eventHandle;
+                                       }
+                               },
+
+                               teardown: function( namespaces, eventHandle ) {
+                                       if ( this.onbeforeunload === eventHandle ) {
+                                               this.onbeforeunload = null;
+                                       }
+                               }
+                       }
+               },
+
+               simulate: function( type, elem, event, bubble ) {
+                       // Piggyback on a donor event to simulate a different one.
+                       // Fake originalEvent to avoid donor's stopPropagation, but if the
+                       // simulated event prevents default then we do the same on the donor.
+                       var e = jQuery.extend(
+                               new jQuery.Event(),
+                               event,
+                               { type: type,
+                                       isSimulated: true,
+                                       originalEvent: {}
+                               }
+                       );
+                       if ( bubble ) {
+                               jQuery.event.trigger( e, null, elem );
+                       } else {
+                               jQuery.event.dispatch.call( elem, e );
+                       }
+                       if ( e.isDefaultPrevented() ) {
+                               event.preventDefault();
+                       }
+               }
+       };
+
+// Some plugins are using, but it's undocumented/deprecated and will be removed.
+// The 1.7 special event interface should provide all the hooks needed now.
+       jQuery.event.handle = jQuery.event.dispatch;
+
+       jQuery.removeEvent = document.removeEventListener ?
+               function( elem, type, handle ) {
+                       if ( elem.removeEventListener ) {
+                               elem.removeEventListener( type, handle, false );
+                       }
+               } :
+               function( elem, type, handle ) {
+                       if ( elem.detachEvent ) {
+                               elem.detachEvent( "on" + type, handle );
+                       }
+               };
+
+       jQuery.Event = function( src, props ) {
+               // Allow instantiation without the 'new' keyword
+               if ( !(this instanceof jQuery.Event) ) {
+                       return new jQuery.Event( src, props );
+               }
+
+               // Event object
+               if ( src && src.type ) {
+                       this.originalEvent = src;
+                       this.type = src.type;
+
+                       // Events bubbling up the document may have been marked as prevented
+                       // by a handler lower down the tree; reflect the correct value.
+                       this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false ||
+                               src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse;
+
+                       // Event type
+               } else {
+                       this.type = src;
+               }
+
+               // Put explicitly provided properties onto the event object
+               if ( props ) {
+                       jQuery.extend( this, props );
+               }
+
+               // Create a timestamp if incoming event doesn't have one
+               this.timeStamp = src && src.timeStamp || jQuery.now();
+
+               // Mark it as fixed
+               this[ jQuery.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)
+                       } else {
+                               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
+       };
+
+// Create mouseenter/leave events using mouseover/out and event-time checks
+       jQuery.each({
+               mouseenter: "mouseover",
+               mouseleave: "mouseout"
+       }, function( orig, fix ) {
+               jQuery.event.special[ orig ] = {
+                       delegateType: fix,
+                       bindType: fix,
+
+                       handle: function( event ) {
+                               var target = this,
+                                       related = event.relatedTarget,
+                                       handleObj = event.handleObj,
+                                       selector = handleObj.selector,
+                                       ret;
+
+                               // For mousenter/leave call the handler if related is outside the target.
+                               // NB: No relatedTarget if the mouse left/entered the browser window
+                               if ( !related || (related !== target && !jQuery.contains( target, related )) ) {
+                                       event.type = handleObj.origType;
+                                       ret = handleObj.handler.apply( this, arguments );
+                                       event.type = fix;
+                               }
+                               return ret;
+                       }
+               };
+       });
+
+// IE submit delegation
+       if ( !jQuery.support.submitBubbles ) {
+
+               jQuery.event.special.submit = {
+                       setup: function() {
+                               // Only need this for delegated form submit events
+                               if ( jQuery.nodeName( this, "form" ) ) {
+                                       return false;
+                               }
+
+                               // Lazy-add a submit handler when a descendant form may potentially be submitted
+                               jQuery.event.add( this, "click._submit keypress._submit", function( e ) {
+                                       // Node name check avoids a VML-related crash in IE (#9807)
+                                       var elem = e.target,
+                                               form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined;
+                                       if ( form && !form._submit_attached ) {
+                                               jQuery.event.add( form, "submit._submit", function( event ) {
+                                                       event._submit_bubble = true;
+                                               });
+                                               form._submit_attached = true;
+                                       }
+                               });
+                               // return undefined since we don't need an event listener
+                       },
+
+                       postDispatch: function( event ) {
+                               // If form was submitted by the user, bubble the event up the tree
+                               if ( event._submit_bubble ) {
+                                       delete event._submit_bubble;
+                                       if ( this.parentNode && !event.isTrigger ) {
+                                               jQuery.event.simulate( "submit", this.parentNode, event, true );
+                                       }
+                               }
+                       },
+
+                       teardown: function() {
+                               // Only need this for delegated form submit events
+                               if ( jQuery.nodeName( this, "form" ) ) {
+                                       return false;
+                               }
+
+                               // Remove delegated handlers; cleanData eventually reaps submit handlers attached above
+                               jQuery.event.remove( this, "._submit" );
+                       }
+               };
+       }
+
+// IE change delegation and checkbox/radio fix
+       if ( !jQuery.support.changeBubbles ) {
+
+               jQuery.event.special.change = {
+
+                       setup: function() {
+
+                               if ( rformElems.test( this.nodeName ) ) {
+                                       // IE doesn't fire change on a check/radio until blur; trigger it on click
+                                       // after a propertychange. Eat the blur-change in special.change.handle.
+                                       // This still fires onchange a second time for check/radio after blur.
+                                       if ( this.type === "checkbox" || this.type === "radio" ) {
+                                               jQuery.event.add( this, "propertychange._change", function( event ) {
+                                                       if ( event.originalEvent.propertyName === "checked" ) {
+                                                               this._just_changed = true;
+                                                       }
+                                               });
+                                               jQuery.event.add( this, "click._change", function( event ) {
+                                                       if ( this._just_changed && !event.isTrigger ) {
+                                                               this._just_changed = false;
+                                                               jQuery.event.simulate( "change", this, event, true );
+                                                       }
+                                               });
+                                       }
+                                       return false;
+                               }
+                               // Delegated event; lazy-add a change handler on descendant inputs
+                               jQuery.event.add( this, "beforeactivate._change", function( e ) {
+                                       var elem = e.target;
+
+                                       if ( rformElems.test( elem.nodeName ) && !elem._change_attached ) {
+                                               jQuery.event.add( elem, "change._change", function( event ) {
+                                                       if ( this.parentNode && !event.isSimulated && !event.isTrigger ) {
+                                                               jQuery.event.simulate( "change", this.parentNode, event, true );
+                                                       }
+                                               });
+                                               elem._change_attached = true;
+                                       }
+                               });
+                       },
+
+                       handle: function( event ) {
+                               var elem = event.target;
+
+                               // Swallow native change events from checkbox/radio, we already triggered them above
+                               if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) {
+                                       return event.handleObj.handler.apply( this, arguments );
+                               }
+                       },
+
+                       teardown: function() {
+                               jQuery.event.remove( this, "._change" );
+
+                               return rformElems.test( this.nodeName );
+                       }
+               };
+       }
+
+// Create "bubbling" focus and blur events
+       if ( !jQuery.support.focusinBubbles ) {
+               jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
+
+                       // Attach a single capturing handler while someone wants focusin/focusout
+                       var attaches = 0,
+                               handler = function( event ) {
+                                       jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );
+                               };
+
+                       jQuery.event.special[ fix ] = {
+                               setup: function() {
+                                       if ( attaches++ === 0 ) {
+                                               document.addEventListener( orig, handler, true );
+                                       }
+                               },
+                               teardown: function() {
+                                       if ( --attaches === 0 ) {
+                                               document.removeEventListener( orig, handler, true );
+                                       }
+                               }
+                       };
+               });
+       }
+
+       jQuery.fn.extend({
+
+               on: function( types, selector, data, fn, /*INTERNAL*/ one ) {
+                       var origFn, type;
+
+                       // Types can be a map of types/handlers
+                       if ( typeof types === "object" ) {
+                               // ( types-Object, selector, data )
+                               if ( typeof selector !== "string" ) { // && selector != null
+                                       // ( types-Object, data )
+                                       data = data || selector;
+                                       selector = undefined;
+                               }
+                               for ( type in types ) {
+                                       this.on( type, selector, data, types[ type ], one );
+                               }
+                               return this;
+                       }
+
+                       if ( data == null && fn == null ) {
+                               // ( types, fn )
+                               fn = selector;
+                               data = selector = undefined;
+                       } else if ( fn == null ) {
+                               if ( typeof selector === "string" ) {
+                                       // ( types, selector, fn )
+                                       fn = data;
+                                       data = undefined;
+                               } else {
+                                       // ( types, data, fn )
+                                       fn = data;
+                                       data = selector;
+                                       selector = undefined;
+                               }
+                       }
+                       if ( fn === false ) {
+                               fn = returnFalse;
+                       } else if ( !fn ) {
+                               return this;
+                       }
+
+                       if ( one === 1 ) {
+                               origFn = fn;
+                               fn = function( event ) {
+                                       // Can use an empty set, since event contains the info
+                                       jQuery().off( event );
+                                       return origFn.apply( this, arguments );
+                               };
+                               // Use same guid so caller can remove using origFn
+                               fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
+                       }
+                       return this.each( function() {
+                               jQuery.event.add( this, types, fn, data, selector );
+                       });
+               },
+               one: function( types, selector, data, fn ) {
+                       return this.on( types, selector, data, fn, 1 );
+               },
+               off: function( types, selector, fn ) {
+                       if ( types && types.preventDefault && types.handleObj ) {
+                               // ( event )  dispatched jQuery.Event
+                               var handleObj = types.handleObj;
+                               jQuery( types.delegateTarget ).off(
+                                       handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType,
+                                       handleObj.selector,
+                                       handleObj.handler
+                               );
+                               return this;
+                       }
+                       if ( typeof types === "object" ) {
+                               // ( types-object [, selector] )
+                               for ( var type in types ) {
+                                       this.off( type, selector, types[ type ] );
+                               }
+                               return this;
+                       }
+                       if ( selector === false || typeof selector === "function" ) {
+                               // ( types [, fn] )
+                               fn = selector;
+                               selector = undefined;
+                       }
+                       if ( fn === false ) {
+                               fn = returnFalse;
+                       }
+                       return this.each(function() {
+                               jQuery.event.remove( this, types, fn, selector );
+                       });
+               },
+
+               bind: function( types, data, fn ) {
+                       return this.on( types, null, data, fn );
+               },
+               unbind: function( types, fn ) {
+                       return this.off( types, null, fn );
+               },
+
+               live: function( types, data, fn ) {
+                       jQuery( this.context ).on( types, this.selector, data, fn );
+                       return this;
+               },
+               die: function( types, fn ) {
+                       jQuery( this.context ).off( types, this.selector || "**", fn );
+                       return this;
+               },
+
+               delegate: function( selector, types, data, fn ) {
+                       return this.on( types, selector, data, fn );
+               },
+               undelegate: function( selector, types, fn ) {
+                       // ( namespace ) or ( selector, types [, fn] )
+                       return arguments.length == 1? this.off( selector, "**" ) : this.off( types, selector, fn );
+               },
+
+               trigger: function( type, data ) {
+                       return this.each(function() {
+                               jQuery.event.trigger( type, data, this );
+                       });
+               },
+               triggerHandler: function( type, data ) {
+                       if ( this[0] ) {
+                               return jQuery.event.trigger( type, data, this[0], true );
+                       }
+               },
+
+               toggle: function( fn ) {
+                       // Save reference to arguments for access in closure
+                       var args = arguments,
+                               guid = fn.guid || jQuery.guid++,
+                               i = 0,
+                               toggler = 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;
+                               };
+
+                       // link all the functions, so any of them can unbind this click handler
+                       toggler.guid = guid;
+                       while ( i < args.length ) {
+                               args[ i++ ].guid = guid;
+                       }
+
+                       return this.click( toggler );
+               },
+
+               hover: function( fnOver, fnOut ) {
+                       return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
+               }
+       });
+
+       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 contextmenu").split(" "), function( i, name ) {
+
+               // Handle event binding
+               jQuery.fn[ name ] = function( data, fn ) {
+                       if ( fn == null ) {
+                               fn = data;
+                               data = null;
+                       }
+
+                       return arguments.length > 0 ?
+                               this.on( name, null, data, fn ) :
+                               this.trigger( name );
+               };
+
+               if ( jQuery.attrFn ) {
+                       jQuery.attrFn[ name ] = true;
+               }
+
+               if ( rkeyEvent.test( name ) ) {
+                       jQuery.event.fixHooks[ name ] = jQuery.event.keyHooks;
+               }
+
+               if ( rmouseEvent.test( name ) ) {
+                       jQuery.event.fixHooks[ name ] = jQuery.event.mouseHooks;
+               }
+       });
+
+
+
+       /*!
+        * Sizzle CSS Selector Engine
+        *  Copyright 2011, The Dojo Foundation
+        *  Released under the MIT, BSD, and GPL Licenses.
+        *  More information: http://sizzlejs.com/
+        */
+       (function(){
+
+               var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
+                       expando = "sizcache" + (Math.random() + '').replace('.', ''),
+                       done = 0,
+                       toString = Object.prototype.toString,
+                       hasDuplicate = false,
+                       baseHasDuplicate = true,
+                       rBackslash = /\\/g,
+                       rReturn = /\r\n/g,
+                       rNonWord = /\W/;
+
+// 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 || [];
+                       context = context || document;
+
+                       var origContext = context;
+
+                       if ( context.nodeType !== 1 && context.nodeType !== 9 ) {
+                               return [];
+                       }
+
+                       if ( !selector || typeof selector !== "string" ) {
+                               return results;
+                       }
+
+                       var m, set, checkSet, extra, ret, cur, pop, i,
+                               prune = true,
+                               contextXML = Sizzle.isXML( context ),
+                               parts = [],
+                               soFar = selector;
+
+                       // Reset the position of the chunker regexp (start from head)
+                       do {
+                               chunker.exec( "" );
+                               m = chunker.exec( soFar );
+
+                               if ( m ) {
+                                       soFar = m[3];
+
+                                       parts.push( m[1] );
+
+                                       if ( m[2] ) {
+                                               extra = m[3];
+                                               break;
+                                       }
+                               }
+                       } while ( m );
+
+                       if ( parts.length > 1 && origPOS.exec( selector ) ) {
+
+                               if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {
+                                       set = posProcess( parts[0] + parts[1], context, seed );
+
+                               } else {
+                                       set = Expr.relative[ parts[0] ] ?
+                                               [ context ] :
+                                               Sizzle( parts.shift(), context );
 
-                       if ( top && top.doScroll ) {
-                               (function doScrollCheck() {
-                                       if ( !jQuery.isReady ) {
+                                       while ( parts.length ) {
+                                               selector = parts.shift();
 
-                                               try {
-                                                       // Use the trick by Diego Perini
-                                                       // http://javascript.nwbox.com/IEContentLoaded/
-                                                       top.doScroll("left");
-                                               } catch(e) {
-                                                       return setTimeout( doScrollCheck, 50 );
+                                               if ( Expr.relative[ selector ] ) {
+                                                       selector += parts.shift();
                                                }
 
-                                               // and execute any waiting functions
-                                               jQuery.ready();
+                                               set = posProcess( selector, set, seed );
                                        }
-                               })();
-                       }
-               }
-       }
-       return readyList.promise( obj );
-};
+                               }
 
-// Populate the class2type map
-jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) {
-       class2type[ "[object " + name + "]" ] = name.toLowerCase();
-});
+                       } 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]) ) {
+
+                                       ret = Sizzle.find( parts.shift(), context, contextXML );
+                                       context = ret.expr ?
+                                               Sizzle.filter( ret.expr, ret.set )[0] :
+                                               ret.set[0];
+                               }
 
-// All jQuery objects should point back to these
-rootjQuery = jQuery(document);
-// String to Object options format cache
-var optionsCache = {};
-
-// Convert String-formatted options into Object-formatted ones and store in cache
-function createOptions( options ) {
-       var object = optionsCache[ options ] = {};
-       jQuery.each( options.split( core_rspace ), function( _, flag ) {
-               object[ flag ] = true;
-       });
-       return object;
-}
+                               if ( context ) {
+                                       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 );
 
-/*
- * Create a callback list using the following parameters:
- *
- *     options: an optional list of space-separated options that will change how
- *                     the callback list behaves or a more traditional option object
- *
- * By default a callback list will act like an event callback list and can be
- * "fired" multiple times.
- *
- * Possible options:
- *
- *     once:                   will ensure the callback list can only be fired once (like a Deferred)
- *
- *     memory:                 will keep track of previous values and will call any callback added
- *                                     after the list has been fired right away with the latest "memorized"
- *                                     values (like a Deferred)
- *
- *     unique:                 will ensure a callback can only be added once (no duplicate in the list)
- *
- *     stopOnFalse:    interrupt callings when a callback returns false
- *
- */
-jQuery.Callbacks = function( options ) {
+                                       set = ret.expr ?
+                                               Sizzle.filter( ret.expr, ret.set ) :
+                                               ret.set;
 
-       // Convert options from String-formatted to Object-formatted if needed
-       // (we check in cache first)
-       options = typeof options === "string" ?
-               ( optionsCache[ options ] || createOptions( options ) ) :
-               jQuery.extend( {}, options );
+                                       if ( parts.length > 0 ) {
+                                               checkSet = makeArray( set );
 
-       var // Last fire value (for non-forgettable lists)
-               memory,
-               // Flag to know if list was already fired
-               fired,
-               // Flag to know if list is currently firing
-               firing,
-               // First callback to fire (used internally by add and fireWith)
-               firingStart,
-               // End of the loop when firing
-               firingLength,
-               // Index of currently firing callback (modified by remove if needed)
-               firingIndex,
-               // Actual callback list
-               list = [],
-               // Stack of fire calls for repeatable lists
-               stack = !options.once && [],
-               // Fire callbacks
-               fire = function( data ) {
-                       memory = options.memory && data;
-                       fired = true;
-                       firingIndex = firingStart || 0;
-                       firingStart = 0;
-                       firingLength = list.length;
-                       firing = true;
-                       for ( ; list && firingIndex < firingLength; firingIndex++ ) {
-                               if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {
-                                       memory = false; // To prevent further calls using add
-                                       break;
+                                       } else {
+                                               prune = false;
+                                       }
+
+                                       while ( parts.length ) {
+                                               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 = [];
                                }
                        }
-                       firing = false;
-                       if ( list ) {
-                               if ( stack ) {
-                                       if ( stack.length ) {
-                                               fire( stack.shift() );
+
+                       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 ( i = 0; checkSet[i] != null; i++ ) {
+                                               if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) {
+                                                       results.push( set[i] );
+                                               }
                                        }
-                               } else if ( memory ) {
-                                       list = [];
+
                                } else {
-                                       self.disable();
+                                       for ( i = 0; checkSet[i] != null; i++ ) {
+                                               if ( checkSet[i] && checkSet[i].nodeType === 1 ) {
+                                                       results.push( set[i] );
+                                               }
+                                       }
                                }
+
+                       } else {
+                               makeArray( checkSet, results );
                        }
-               },
-               // Actual Callbacks object
-               self = {
-                       // Add a callback or a collection of callbacks to the list
-                       add: function() {
-                               if ( list ) {
-                                       // First, we save the current length
-                                       var start = list.length;
-                                       (function add( args ) {
-                                               jQuery.each( args, function( _, arg ) {
-                                                       if ( jQuery.isFunction( arg ) && ( !options.unique || !self.has( arg ) ) ) {
-                                                               list.push( arg );
-                                                       } else if ( arg && arg.length ) {
-                                                               // Inspect recursively
-                                                               add( arg );
-                                                       }
-                                               });
-                                       })( arguments );
-                                       // Do we need to add the callbacks to the
-                                       // current firing batch?
-                                       if ( firing ) {
-                                               firingLength = list.length;
-                                       // With memory, if we're not firing then
-                                       // we should call right away
-                                       } else if ( memory ) {
-                                               firingStart = start;
-                                               fire( memory );
+
+                       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 this;
-                       },
-                       // Remove a callback from the list
-                       remove: function() {
-                               if ( list ) {
-                                       jQuery.each( arguments, function( _, arg ) {
-                                               var index;
-                                               while( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
-                                                       list.splice( index, 1 );
-                                                       // Handle firing indexes
-                                                       if ( firing ) {
-                                                               if ( index <= firingLength ) {
-                                                                       firingLength--;
-                                                               }
-                                                               if ( index <= firingIndex ) {
-                                                                       firingIndex--;
-                                                               }
-                                                       }
+                       }
+
+                       return results;
+               };
+
+               Sizzle.matches = function( expr, set ) {
+                       return Sizzle( expr, null, null, set );
+               };
+
+               Sizzle.matchesSelector = function( node, expr ) {
+                       return Sizzle( expr, null, null, [node] ).length > 0;
+               };
+
+               Sizzle.find = function( expr, context, isXML ) {
+                       var set, i, len, match, type, left;
+
+                       if ( !expr ) {
+                               return [];
+                       }
+
+                       for ( i = 0, len = Expr.order.length; i < len; i++ ) {
+                               type = Expr.order[i];
+
+                               if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {
+                                       left = match[1];
+                                       match.splice( 1, 1 );
+
+                                       if ( left.substr( left.length - 1 ) !== "\\" ) {
+                                               match[1] = (match[1] || "").replace( rBackslash, "" );
+                                               set = Expr.find[ type ]( match, context, isXML );
+
+                                               if ( set != null ) {
+                                                       expr = expr.replace( Expr.match[ type ], "" );
+                                                       break;
                                                }
-                                       });
-                               }
-                               return this;
-                       },
-                       // Control if a given callback is in the list
-                       has: function( fn ) {
-                               return jQuery.inArray( fn, list ) > -1;
-                       },
-                       // Remove all callbacks from the list
-                       empty: function() {
-                               list = [];
-                               return this;
-                       },
-                       // Have the list do nothing anymore
-                       disable: function() {
-                               list = stack = memory = undefined;
-                               return this;
-                       },
-                       // Is it disabled?
-                       disabled: function() {
-                               return !list;
-                       },
-                       // Lock the list in its current state
-                       lock: function() {
-                               stack = undefined;
-                               if ( !memory ) {
-                                       self.disable();
-                               }
-                               return this;
-                       },
-                       // Is it locked?
-                       locked: function() {
-                               return !stack;
-                       },
-                       // Call all callbacks with the given context and arguments
-                       fireWith: function( context, args ) {
-                               args = args || [];
-                               args = [ context, args.slice ? args.slice() : args ];
-                               if ( list && ( !fired || stack ) ) {
-                                       if ( firing ) {
-                                               stack.push( args );
-                                       } else {
-                                               fire( args );
                                        }
                                }
-                               return this;
-                       },
-                       // Call all the callbacks with the given arguments
-                       fire: function() {
-                               self.fireWith( this, arguments );
-                               return this;
-                       },
-                       // To know if the callbacks have already been called at least once
-                       fired: function() {
-                               return !!fired;
                        }
+
+                       if ( !set ) {
+                               set = typeof context.getElementsByTagName !== "undefined" ?
+                                       context.getElementsByTagName( "*" ) :
+                                       [];
+                       }
+
+                       return { set: set, expr: expr };
                };
 
-       return self;
-};
-jQuery.extend({
-
-       Deferred: function( func ) {
-               var tuples = [
-                               // action, add listener, listener list, final state
-                               [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ],
-                               [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ],
-                               [ "notify", "progress", jQuery.Callbacks("memory") ]
-                       ],
-                       state = "pending",
-                       promise = {
-                               state: function() {
-                                       return state;
-                               },
-                               always: function() {
-                                       deferred.done( arguments ).fail( arguments );
-                                       return this;
-                               },
-                               then: function( /* fnDone, fnFail, fnProgress */ ) {
-                                       var fns = arguments;
-                                       return jQuery.Deferred(function( newDefer ) {
-                                               jQuery.each( tuples, function( i, tuple ) {
-                                                       var action = tuple[ 0 ],
-                                                               fn = fns[ i ];
-                                                       // deferred[ done | fail | progress ] for forwarding actions to newDefer
-                                                       deferred[ tuple[1] ]( jQuery.isFunction( fn ) ?
-                                                               function() {
-                                                                       var returned = fn.apply( this, arguments );
-                                                                       if ( returned && jQuery.isFunction( returned.promise ) ) {
-                                                                               returned.promise()
-                                                                                       .done( newDefer.resolve )
-                                                                                       .fail( newDefer.reject )
-                                                                                       .progress( newDefer.notify );
-                                                                       } else {
-                                                                               newDefer[ action + "With" ]( this === deferred ? newDefer : this, [ returned ] );
-                                                                       }
-                                                               } :
-                                                               newDefer[ action ]
-                                                       );
-                                               });
-                                               fns = null;
-                                       }).promise();
-                               },
-                               // Get a promise for this deferred
-                               // If obj is provided, the promise aspect is added to the object
-                               promise: function( obj ) {
-                                       return typeof obj === "object" ? jQuery.extend( obj, promise ) : promise;
-                               }
-                       },
-                       deferred = {};
+               Sizzle.filter = function( expr, set, inplace, not ) {
+                       var match, anyFound,
+                               type, found, item, filter, left,
+                               i, pass,
+                               old = expr,
+                               result = [],
+                               curLoop = set,
+                               isXMLFilter = set && set[0] && Sizzle.isXML( set[0] );
 
-               // Keep pipe for back-compat
-               promise.pipe = promise.then;
+                       while ( expr && set.length ) {
+                               for ( type in Expr.filter ) {
+                                       if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {
+                                               filter = Expr.filter[ type ];
+                                               left = match[1];
 
-               // Add list-specific methods
-               jQuery.each( tuples, function( i, tuple ) {
-                       var list = tuple[ 2 ],
-                               stateString = tuple[ 3 ];
+                                               anyFound = false;
 
-                       // promise[ done | fail | progress ] = list.add
-                       promise[ tuple[1] ] = list.add;
+                                               match.splice(1,1);
 
-                       // Handle state
-                       if ( stateString ) {
-                               list.add(function() {
-                                       // state = [ resolved | rejected ]
-                                       state = stateString;
+                                               if ( left.substr( left.length - 1 ) === "\\" ) {
+                                                       continue;
+                                               }
 
-                               // [ reject_list | resolve_list ].disable; progress_list.lock
-                               }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );
-                       }
+                                               if ( curLoop === result ) {
+                                                       result = [];
+                                               }
 
-                       // deferred[ resolve | reject | notify ] = list.fire
-                       deferred[ tuple[0] ] = list.fire;
-                       deferred[ tuple[0] + "With" ] = list.fireWith;
-               });
+                                               if ( Expr.preFilter[ type ] ) {
+                                                       match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );
 
-               // Make the deferred a promise
-               promise.promise( deferred );
+                                                       if ( !match ) {
+                                                               anyFound = found = true;
 
-               // Call given func if any
-               if ( func ) {
-                       func.call( deferred, deferred );
-               }
+                                                       } else if ( match === true ) {
+                                                               continue;
+                                                       }
+                                               }
+
+                                               if ( match ) {
+                                                       for ( i = 0; (item = curLoop[i]) != null; i++ ) {
+                                                               if ( item ) {
+                                                                       found = filter( item, match, i, curLoop );
+                                                                       pass = not ^ found;
+
+                                                                       if ( inplace && found != null ) {
+                                                                               if ( pass ) {
+                                                                                       anyFound = true;
 
-               // All done!
-               return deferred;
-       },
+                                                                               } else {
+                                                                                       curLoop[i] = false;
+                                                                               }
 
-       // Deferred helper
-       when: function( subordinate /* , ..., subordinateN */ ) {
-               var i = 0,
-                       resolveValues = core_slice.call( arguments ),
-                       length = resolveValues.length,
+                                                                       } else if ( pass ) {
+                                                                               result.push( item );
+                                                                               anyFound = true;
+                                                                       }
+                                                               }
+                                                       }
+                                               }
 
-                       // the count of uncompleted subordinates
-                       remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,
+                                               if ( found !== undefined ) {
+                                                       if ( !inplace ) {
+                                                               curLoop = result;
+                                                       }
 
-                       // the master Deferred. If resolveValues consist of only a single Deferred, just use that.
-                       deferred = remaining === 1 ? subordinate : jQuery.Deferred(),
+                                                       expr = expr.replace( Expr.match[ type ], "" );
 
-                       // Update function for both resolve and progress values
-                       updateFunc = function( i, contexts, values ) {
-                               return function( value ) {
-                                       contexts[ i ] = this;
-                                       values[ i ] = arguments.length > 1 ? core_slice.call( arguments ) : value;
-                                       if( values === progressValues ) {
-                                               deferred.notifyWith( contexts, values );
-                                       } else if ( !( --remaining ) ) {
-                                               deferred.resolveWith( contexts, values );
+                                                       if ( !anyFound ) {
+                                                               return [];
+                                                       }
+
+                                                       break;
+                                               }
                                        }
-                               };
-                       },
+                               }
 
-                       progressValues, progressContexts, resolveContexts;
+                               // Improper expression
+                               if ( expr === old ) {
+                                       if ( anyFound == null ) {
+                                               Sizzle.error( expr );
 
-               // add listeners to Deferred subordinates; treat others as resolved
-               if ( length > 1 ) {
-                       progressValues = new Array( length );
-                       progressContexts = new Array( length );
-                       resolveContexts = new Array( length );
-                       for ( ; i < length; i++ ) {
-                               if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {
-                                       resolveValues[ i ].promise()
-                                               .done( updateFunc( i, resolveContexts, resolveValues ) )
-                                               .fail( deferred.reject )
-                                               .progress( updateFunc( i, progressContexts, progressValues ) );
-                               } else {
-                                       --remaining;
+                                       } else {
+                                               break;
+                                       }
                                }
+
+                               old = expr;
                        }
-               }
 
-               // if we're not waiting on anything, resolve the master
-               if ( !remaining ) {
-                       deferred.resolveWith( resolveContexts, resolveValues );
-               }
+                       return curLoop;
+               };
 
-               return deferred.promise();
-       }
-});
-jQuery.support = (function() {
-
-       var support,
-               all,
-               a,
-               select,
-               opt,
-               input,
-               fragment,
-               eventName,
-               i,
-               isSupported,
-               clickFn,
-               div = document.createElement("div");
-
-       // Preliminary tests
-       div.setAttribute( "className", "t" );
-       div.innerHTML = "  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
-
-       all = div.getElementsByTagName("*");
-       a = div.getElementsByTagName("a")[ 0 ];
-       a.style.cssText = "top:1px;float:left;opacity:.5";
-
-       // Can't get basic test support
-       if ( !all || !all.length || !a ) {
-               return {};
-       }
+               Sizzle.error = function( msg ) {
+                       throw new Error( "Syntax error, unrecognized expression: " + msg );
+               };
 
-       // First batch of supports tests
-       select = document.createElement("select");
-       opt = select.appendChild( document.createElement("option") );
-       input = div.getElementsByTagName("input")[ 0 ];
-
-       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 instead)
-               style: /top/.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.5/.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: ( input.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: opt.selected,
-
-               // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
-               getSetAttribute: div.className !== "t",
-
-               // Tests for enctype support on a form(#6743)
-               enctype: !!document.createElement("form").enctype,
-
-               // Makes sure cloning an html5 element does not cause problems
-               // Where outerHTML is undefined, this still works
-               html5Clone: document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav></:nav>",
-
-               // jQuery.support.boxModel DEPRECATED in 1.8 since we don't support Quirks Mode
-               boxModel: ( document.compatMode === "CSS1Compat" ),
-
-               // Will be defined later
-               submitBubbles: true,
-               changeBubbles: true,
-               focusinBubbles: false,
-               deleteExpando: true,
-               noCloneEvent: true,
-               inlineBlockNeedsLayout: false,
-               shrinkWrapBlocks: false,
-               reliableMarginRight: true,
-               boxSizingReliable: true,
-               pixelPosition: false
-       };
+               /**
+                * Utility function for retreiving the text value of an array of DOM nodes
+                * @param {Array|Element} elem
+                */
+               var getText = Sizzle.getText = function( elem ) {
+                       var i, node,
+                               nodeType = elem.nodeType,
+                               ret = "";
+
+                       if ( nodeType ) {
+                               if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
+                                       // Use textContent || innerText for elements
+                                       if ( typeof elem.textContent === 'string' ) {
+                                               return elem.textContent;
+                                       } else if ( typeof elem.innerText === 'string' ) {
+                                               // Replace IE's carriage returns
+                                               return elem.innerText.replace( rReturn, '' );
+                                       } else {
+                                               // Traverse it's children
+                                               for ( elem = elem.firstChild; elem; elem = elem.nextSibling) {
+                                                       ret += getText( elem );
+                                               }
+                                       }
+                               } else if ( nodeType === 3 || nodeType === 4 ) {
+                                       return elem.nodeValue;
+                               }
+                       } else {
 
-       // Make sure checked status is properly cloned
-       input.checked = true;
-       support.noCloneChecked = input.cloneNode( true ).checked;
+                               // If no nodeType, this is expected to be an array
+                               for ( i = 0; (node = elem[i]); i++ ) {
+                                       // Do not traverse comment nodes
+                                       if ( node.nodeType !== 8 ) {
+                                               ret += getText( node );
+                                       }
+                               }
+                       }
+                       return ret;
+               };
 
-       // Make sure that the options inside disabled selects aren't marked as disabled
-       // (WebKit marks them as disabled)
-       select.disabled = true;
-       support.optDisabled = !opt.disabled;
+               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|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,
+                               TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,
+                               CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,
+                               POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,
+                               PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/
+                       },
 
-       // Test to see if it's possible to delete an expando from an element
-       // Fails in Internet Explorer
-       try {
-               delete div.test;
-       } catch( e ) {
-               support.deleteExpando = false;
-       }
+                       leftMatch: {},
 
-       if ( !div.addEventListener && div.attachEvent && div.fireEvent ) {
-               div.attachEvent( "onclick", clickFn = function() {
-                       // Cloning a node shouldn't copy over any
-                       // bound event handlers (IE does this)
-                       support.noCloneEvent = false;
-               });
-               div.cloneNode( true ).fireEvent("onclick");
-               div.detachEvent( "onclick", clickFn );
-       }
+                       attrMap: {
+                               "class": "className",
+                               "for": "htmlFor"
+                       },
 
-       // Check if a radio maintains its value
-       // after being appended to the DOM
-       input = document.createElement("input");
-       input.value = "t";
-       input.setAttribute( "type", "radio" );
-       support.radioValue = input.value === "t";
-
-       input.setAttribute( "checked", "checked" );
-
-       // #11217 - WebKit loses check when the name is after the checked attribute
-       input.setAttribute( "name", "t" );
-
-       div.appendChild( input );
-       fragment = document.createDocumentFragment();
-       fragment.appendChild( div.lastChild );
-
-       // WebKit doesn't clone checked state correctly in fragments
-       support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;
-
-       // Check if a disconnected checkbox will retain its checked
-       // value of true after appended to the DOM (IE6/7)
-       support.appendChecked = input.checked;
-
-       fragment.removeChild( input );
-       fragment.appendChild( div );
-
-       // Technique from Juriy Zaytsev
-       // http://perfectionkills.com/detecting-event-support-without-browser-sniffing/
-       // We only care about the case where non-standard event systems
-       // are used, namely in IE. Short-circuiting here helps us to
-       // avoid an eval call (in setAttribute) which can cause CSP
-       // to go haywire. See: https://developer.mozilla.org/en/Security/CSP
-       if ( div.attachEvent ) {
-               for ( i in {
-                       submit: true,
-                       change: true,
-                       focusin: true
-               }) {
-                       eventName = "on" + i;
-                       isSupported = ( eventName in div );
-                       if ( !isSupported ) {
-                               div.setAttribute( eventName, "return;" );
-                               isSupported = ( typeof div[ eventName ] === "function" );
-                       }
-                       support[ i + "Bubbles" ] = isSupported;
-               }
-       }
+                       attrHandle: {
+                               href: function( elem ) {
+                                       return elem.getAttribute( "href" );
+                               },
+                               type: function( elem ) {
+                                       return elem.getAttribute( "type" );
+                               }
+                       },
 
-       // Run tests that need a body at doc ready
-       jQuery(function() {
-               var container, div, tds, marginDiv,
-                       divReset = "padding:0;margin:0;border:0;display:block;overflow:hidden;",
-                       body = document.getElementsByTagName("body")[0];
+                       relative: {
+                               "+": function(checkSet, part){
+                                       var isPartStr = typeof part === "string",
+                                               isTag = isPartStr && !rNonWord.test( part ),
+                                               isPartStrNotTag = isPartStr && !isTag;
 
-               if ( !body ) {
-                       // Return for frameset docs that don't have a body
-                       return;
-               }
+                                       if ( isTag ) {
+                                               part = part.toLowerCase();
+                                       }
 
-               container = document.createElement("div");
-               container.style.cssText = "visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px";
-               body.insertBefore( container, body.firstChild );
-
-               // Construct the test element
-               div = document.createElement("div");
-               container.appendChild( div );
-
-               // Check if table cells still have offsetWidth/Height when they are set
-               // to display:none and there are still other visible table cells in a
-               // table row; if so, offsetWidth/Height are not reliable for use when
-               // determining if an element has been hidden directly using
-               // display:none (it is still safe to use offsets if a parent element is
-               // hidden; don safety goggles and see bug #4512 for more information).
-               // (only IE 8 fails this test)
-               div.innerHTML = "<table><tr><td></td><td>t</td></tr></table>";
-               tds = div.getElementsByTagName("td");
-               tds[ 0 ].style.cssText = "padding:0;margin:0;border:0;display:none";
-               isSupported = ( tds[ 0 ].offsetHeight === 0 );
-
-               tds[ 0 ].style.display = "";
-               tds[ 1 ].style.display = "none";
-
-               // Check if empty table cells still have offsetWidth/Height
-               // (IE <= 8 fail this test)
-               support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );
-
-               // Check box-sizing and margin behavior
-               div.innerHTML = "";
-               div.style.cssText = "box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;";
-               support.boxSizing = ( div.offsetWidth === 4 );
-               support.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== 1 );
-
-               // NOTE: To any future maintainer, window.getComputedStyle was used here
-               // instead of getComputedStyle because it gave a better gzip size.
-               // The difference between window.getComputedStyle and getComputedStyle is
-               // 7 bytes
-               if ( window.getComputedStyle ) {
-                       support.pixelPosition = ( window.getComputedStyle( div, null ) || {} ).top !== "1%";
-                       support.boxSizingReliable = ( window.getComputedStyle( div, null ) || { width: "4px" } ).width === "4px";
+                                       for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {
+                                               if ( (elem = checkSet[i]) ) {
+                                                       while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}
 
-                       // Check if div with explicit width and no margin-right incorrectly
-                       // gets computed margin-right based on width of container. For more
-                       // info see bug #3333
-                       // Fails in WebKit before Feb 2011 nightlies
-                       // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
-                       marginDiv = document.createElement("div");
-                       marginDiv.style.cssText = div.style.cssText = divReset;
-                       marginDiv.style.marginRight = marginDiv.style.width = "0";
-                       div.style.width = "1px";
-                       div.appendChild( marginDiv );
-                       support.reliableMarginRight =
-                               !parseFloat( ( window.getComputedStyle( marginDiv, null ) || {} ).marginRight );
-               }
+                                                       checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ?
+                                                               elem || false :
+                                                               elem === part;
+                                               }
+                                       }
 
-               if ( typeof div.style.zoom !== "undefined" ) {
-                       // Check if natively block-level elements act like inline-block
-                       // elements when setting their display to 'inline' and giving
-                       // them layout
-                       // (IE < 8 does this)
-                       div.innerHTML = "";
-                       div.style.cssText = divReset + "width:1px;padding:1px;display:inline;zoom:1";
-                       support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 );
-
-                       // Check if elements with layout shrink-wrap their children
-                       // (IE 6 does this)
-                       div.style.display = "block";
-                       div.style.overflow = "visible";
-                       div.innerHTML = "<div></div>";
-                       div.firstChild.style.width = "5px";
-                       support.shrinkWrapBlocks = ( div.offsetWidth !== 3 );
-
-                       container.style.zoom = 1;
-               }
+                                       if ( isPartStrNotTag ) {
+                                               Sizzle.filter( part, checkSet, true );
+                                       }
+                               },
 
-               // Null elements to avoid leaks in IE
-               body.removeChild( container );
-               container = div = tds = marginDiv = null;
-       });
+                               ">": function( checkSet, part ) {
+                                       var elem,
+                                               isPartStr = typeof part === "string",
+                                               i = 0,
+                                               l = checkSet.length;
 
-       // Null elements to avoid leaks in IE
-       fragment.removeChild( div );
-       all = a = select = opt = input = fragment = div = null;
+                                       if ( isPartStr && !rNonWord.test( part ) ) {
+                                               part = part.toLowerCase();
 
-       return support;
-})();
-var rbrace = /^(?:\{.*\}|\[.*\])$/,
-       rmultiDash = /([A-Z])/g;
+                                               for ( ; i < l; i++ ) {
+                                                       elem = checkSet[i];
 
-jQuery.extend({
-       cache: {},
+                                                       if ( elem ) {
+                                                               var parent = elem.parentNode;
+                                                               checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false;
+                                                       }
+                                               }
 
-       deletedIds: [],
+                                       } else {
+                                               for ( ; i < l; i++ ) {
+                                                       elem = checkSet[i];
 
-       // Please use with caution
-       uuid: 0,
+                                                       if ( elem ) {
+                                                               checkSet[i] = isPartStr ?
+                                                                       elem.parentNode :
+                                                                       elem.parentNode === part;
+                                                       }
+                                               }
 
-       // Unique for each copy of jQuery on the page
-       // Non-digits removed to match rinlinejQuery
-       expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ),
+                                               if ( isPartStr ) {
+                                                       Sizzle.filter( part, checkSet, true );
+                                               }
+                                       }
+                               },
 
-       // The following elements throw uncatchable exceptions if you
-       // attempt to add expando properties to them.
-       noData: {
-               "embed": true,
-               // Ban all objects except for Flash (which handle expandos)
-               "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
-               "applet": true
-       },
+                               "": function(checkSet, part, isXML){
+                                       var nodeCheck,
+                                               doneName = done++,
+                                               checkFn = dirCheck;
 
-       hasData: function( elem ) {
-               elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
-               return !!elem && !isEmptyDataObject( elem );
-       },
+                                       if ( typeof part === "string" && !rNonWord.test( part ) ) {
+                                               part = part.toLowerCase();
+                                               nodeCheck = part;
+                                               checkFn = dirNodeCheck;
+                                       }
 
-       data: function( elem, name, data, pvt /* Internal Use Only */ ) {
-               if ( !jQuery.acceptData( elem ) ) {
-                       return;
-               }
+                                       checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML );
+                               },
 
-               var thisCache, ret,
-                       internalKey = jQuery.expando,
-                       getByName = typeof name === "string",
+                               "~": function( checkSet, part, isXML ) {
+                                       var nodeCheck,
+                                               doneName = done++,
+                                               checkFn = dirCheck;
 
-                       // We have to handle DOM nodes and JS objects differently because IE6-7
-                       // can't GC object references properly across the DOM-JS boundary
-                       isNode = elem.nodeType,
+                                       if ( typeof part === "string" && !rNonWord.test( part ) ) {
+                                               part = part.toLowerCase();
+                                               nodeCheck = part;
+                                               checkFn = dirNodeCheck;
+                                       }
 
-                       // Only DOM nodes need the global jQuery cache; JS object data is
-                       // attached directly to the object so GC can occur automatically
-                       cache = isNode ? jQuery.cache : elem,
+                                       checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML );
+                               }
+                       },
 
-                       // Only defining an ID for JS objects if its cache already exists allows
-                       // the code to shortcut on the same path as a DOM node with no cache
-                       id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey;
+                       find: {
+                               ID: function( match, context, isXML ) {
+                                       if ( typeof context.getElementById !== "undefined" && !isXML ) {
+                                               var m = context.getElementById(match[1]);
+                                               // Check parentNode to catch when Blackberry 4.6 returns
+                                               // nodes that are no longer in the document #6963
+                                               return m && m.parentNode ? [m] : [];
+                                       }
+                               },
 
-               // Avoid doing any more work than we need to when trying to get data on an
-               // object that has no data at all
-               if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && getByName && data === undefined ) {
-                       return;
-               }
+                               NAME: function( match, context ) {
+                                       if ( typeof context.getElementsByName !== "undefined" ) {
+                                               var ret = [],
+                                                       results = context.getElementsByName( match[1] );
 
-               if ( !id ) {
-                       // Only DOM nodes need a new unique ID for each element since their data
-                       // ends up in the global cache
-                       if ( isNode ) {
-                               elem[ internalKey ] = id = jQuery.deletedIds.pop() || ++jQuery.uuid;
-                       } else {
-                               id = internalKey;
-                       }
-               }
+                                               for ( var i = 0, l = results.length; i < l; i++ ) {
+                                                       if ( results[i].getAttribute("name") === match[1] ) {
+                                                               ret.push( results[i] );
+                                                       }
+                                               }
 
-               if ( !cache[ id ] ) {
-                       cache[ id ] = {};
+                                               return ret.length === 0 ? null : ret;
+                                       }
+                               },
 
-                       // Avoids exposing jQuery metadata on plain JS objects when the object
-                       // is serialized using JSON.stringify
-                       if ( !isNode ) {
-                               cache[ id ].toJSON = jQuery.noop;
-                       }
-               }
+                               TAG: function( match, context ) {
+                                       if ( typeof context.getElementsByTagName !== "undefined" ) {
+                                               return context.getElementsByTagName( match[1] );
+                                       }
+                               }
+                       },
+                       preFilter: {
+                               CLASS: function( match, curLoop, inplace, result, not, isXML ) {
+                                       match = " " + match[1].replace( rBackslash, "" ) + " ";
 
-               // An object can be passed to jQuery.data instead of a key/value pair; this gets
-               // shallow copied over onto the existing cache
-               if ( typeof name === "object" || typeof name === "function" ) {
-                       if ( pvt ) {
-                               cache[ id ] = jQuery.extend( cache[ id ], name );
-                       } else {
-                               cache[ id ].data = jQuery.extend( cache[ id ].data, name );
-                       }
-               }
+                                       if ( isXML ) {
+                                               return match;
+                                       }
 
-               thisCache = cache[ id ];
+                                       for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {
+                                               if ( elem ) {
+                                                       if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n\r]/g, " ").indexOf(match) >= 0) ) {
+                                                               if ( !inplace ) {
+                                                                       result.push( elem );
+                                                               }
 
-               // jQuery data() is stored in a separate object inside the object's internal data
-               // cache in order to avoid key collisions between internal data and user-defined
-               // data.
-               if ( !pvt ) {
-                       if ( !thisCache.data ) {
-                               thisCache.data = {};
-                       }
+                                                       } else if ( inplace ) {
+                                                               curLoop[i] = false;
+                                                       }
+                                               }
+                                       }
 
-                       thisCache = thisCache.data;
-               }
+                                       return false;
+                               },
+
+                               ID: function( match ) {
+                                       return match[1].replace( rBackslash, "" );
+                               },
+
+                               TAG: function( match, curLoop ) {
+                                       return match[1].replace( rBackslash, "" ).toLowerCase();
+                               },
+
+                               CHILD: function( match ) {
+                                       if ( match[1] === "nth" ) {
+                                               if ( !match[2] ) {
+                                                       Sizzle.error( match[0] );
+                                               }
+
+                                               match[2] = match[2].replace(/^\+|\s*/g, '');
+
+                                               // 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;
+                                       }
+                                       else if ( match[2] ) {
+                                               Sizzle.error( match[0] );
+                                       }
+
+                                       // TODO: Move to normal caching system
+                                       match[0] = done++;
+
+                                       return match;
+                               },
 
-               if ( data !== undefined ) {
-                       thisCache[ jQuery.camelCase( name ) ] = data;
-               }
+                               ATTR: function( match, curLoop, inplace, result, not, isXML ) {
+                                       var name = match[1] = match[1].replace( rBackslash, "" );
 
-               // Check for both converted-to-camel and non-converted data property names
-               // If a data property was specified
-               if ( getByName ) {
+                                       if ( !isXML && Expr.attrMap[name] ) {
+                                               match[1] = Expr.attrMap[name];
+                                       }
 
-                       // First Try to find as-is property data
-                       ret = thisCache[ name ];
+                                       // Handle if an un-quoted value was used
+                                       match[4] = ( match[4] || match[5] || "" ).replace( rBackslash, "" );
 
-                       // Test for null|undefined property data
-                       if ( ret == null ) {
+                                       if ( match[2] === "~=" ) {
+                                               match[4] = " " + match[4] + " ";
+                                       }
 
-                               // Try to find the camelCased property
-                               ret = thisCache[ jQuery.camelCase( name ) ];
-                       }
-               } else {
-                       ret = thisCache;
-               }
+                                       return match;
+                               },
 
-               return ret;
-       },
+                               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);
 
-       removeData: function( elem, name, pvt /* Internal Use Only */ ) {
-               if ( !jQuery.acceptData( elem ) ) {
-                       return;
-               }
+                                               } else {
+                                                       var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);
 
-               var thisCache, i, l,
+                                                       if ( !inplace ) {
+                                                               result.push.apply( result, ret );
+                                                       }
 
-                       isNode = elem.nodeType,
+                                                       return false;
+                                               }
 
-                       // See jQuery.data for more information
-                       cache = isNode ? jQuery.cache : elem,
-                       id = isNode ? elem[ jQuery.expando ] : jQuery.expando;
+                                       } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {
+                                               return true;
+                                       }
 
-               // If there is already no cache entry for this object, there is no
-               // purpose in continuing
-               if ( !cache[ id ] ) {
-                       return;
-               }
+                                       return match;
+                               },
 
-               if ( name ) {
+                               POS: function( match ) {
+                                       match.unshift( true );
 
-                       thisCache = pvt ? cache[ id ] : cache[ id ].data;
+                                       return match;
+                               }
+                       },
 
-                       if ( thisCache ) {
+                       filters: {
+                               enabled: function( elem ) {
+                                       return elem.disabled === false && elem.type !== "hidden";
+                               },
 
-                               // Support array or space separated string names for data keys
-                               if ( !jQuery.isArray( name ) ) {
+                               disabled: function( elem ) {
+                                       return elem.disabled === true;
+                               },
 
-                                       // try the string as a key before any manipulation
-                                       if ( name in thisCache ) {
-                                               name = [ name ];
-                                       } else {
+                               checked: function( elem ) {
+                                       return elem.checked === true;
+                               },
 
-                                               // split the camel cased version by spaces unless a key with the spaces exists
-                                               name = jQuery.camelCase( name );
-                                               if ( name in thisCache ) {
-                                                       name = [ name ];
-                                               } else {
-                                                       name = name.split(" ");
-                                               }
+                               selected: function( elem ) {
+                                       // Accessing this property makes selected-by-default
+                                       // options in Safari work properly
+                                       if ( elem.parentNode ) {
+                                               elem.parentNode.selectedIndex;
                                        }
-                               }
 
-                               for ( i = 0, l = name.length; i < l; i++ ) {
-                                       delete thisCache[ name[i] ];
-                               }
+                                       return elem.selected === true;
+                               },
 
-                               // If there is no data left in the cache, we want to continue
-                               // and let the cache object itself get destroyed
-                               if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) {
-                                       return;
-                               }
-                       }
-               }
+                               parent: function( elem ) {
+                                       return !!elem.firstChild;
+                               },
 
-               // See jQuery.data for more information
-               if ( !pvt ) {
-                       delete cache[ id ].data;
+                               empty: function( elem ) {
+                                       return !elem.firstChild;
+                               },
 
-                       // Don't destroy the parent cache unless the internal data object
-                       // had been the only thing left in it
-                       if ( !isEmptyDataObject( cache[ id ] ) ) {
-                               return;
-                       }
-               }
+                               has: function( elem, i, match ) {
+                                       return !!Sizzle( match[3], elem ).length;
+                               },
+
+                               header: function( elem ) {
+                                       return (/h\d/i).test( elem.nodeName );
+                               },
 
-               // Destroy the cache
-               if ( isNode ) {
-                       jQuery.cleanData( [ elem ], true );
+                               text: function( elem ) {
+                                       var attr = elem.getAttribute( "type" ), type = elem.type;
+                                       // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)
+                                       // use getAttribute instead to test this case
+                                       return elem.nodeName.toLowerCase() === "input" && "text" === type && ( attr === type || attr === null );
+                               },
 
-               // Use delete when supported for expandos or `cache` is not a window per isWindow (#10080)
-               } else if ( jQuery.support.deleteExpando || cache != cache.window ) {
-                       delete cache[ id ];
+                               radio: function( elem ) {
+                                       return elem.nodeName.toLowerCase() === "input" && "radio" === elem.type;
+                               },
 
-               // When all else fails, null
-               } else {
-                       cache[ id ] = null;
-               }
-       },
+                               checkbox: function( elem ) {
+                                       return elem.nodeName.toLowerCase() === "input" && "checkbox" === elem.type;
+                               },
 
-       // For internal use only.
-       _data: function( elem, name, data ) {
-               return jQuery.data( elem, name, data, true );
-       },
+                               file: function( elem ) {
+                                       return elem.nodeName.toLowerCase() === "input" && "file" === elem.type;
+                               },
 
-       // A method for determining if a DOM node can handle the data expando
-       acceptData: function( elem ) {
-               var noData = elem.nodeName && jQuery.noData[ elem.nodeName.toLowerCase() ];
+                               password: function( elem ) {
+                                       return elem.nodeName.toLowerCase() === "input" && "password" === elem.type;
+                               },
 
-               // nodes accept data unless otherwise specified; rejection can be conditional
-               return !noData || noData !== true && elem.getAttribute("classid") === noData;
-       }
-});
+                               submit: function( elem ) {
+                                       var name = elem.nodeName.toLowerCase();
+                                       return (name === "input" || name === "button") && "submit" === elem.type;
+                               },
 
-jQuery.fn.extend({
-       data: function( key, value ) {
-               var parts, part, attr, name, l,
-                       elem = this[0],
-                       i = 0,
-                       data = null;
+                               image: function( elem ) {
+                                       return elem.nodeName.toLowerCase() === "input" && "image" === elem.type;
+                               },
 
-               // Gets all values
-               if ( key === undefined ) {
-                       if ( this.length ) {
-                               data = jQuery.data( elem );
+                               reset: function( elem ) {
+                                       var name = elem.nodeName.toLowerCase();
+                                       return (name === "input" || name === "button") && "reset" === elem.type;
+                               },
 
-                               if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) {
-                                       attr = elem.attributes;
-                                       for ( l = attr.length; i < l; i++ ) {
-                                               name = attr[i].name;
+                               button: function( elem ) {
+                                       var name = elem.nodeName.toLowerCase();
+                                       return name === "input" && "button" === elem.type || name === "button";
+                               },
 
-                                               if ( name.indexOf( "data-" ) === 0 ) {
-                                                       name = jQuery.camelCase( name.substring(5) );
+                               input: function( elem ) {
+                                       return (/input|select|textarea|button/i).test( elem.nodeName );
+                               },
 
-                                                       dataAttr( elem, name, data[ name ] );
-                                               }
-                                       }
-                                       jQuery._data( elem, "parsedAttrs", true );
+                               focus: function( elem ) {
+                                       return elem === elem.ownerDocument.activeElement;
                                }
-                       }
+                       },
+                       setFilters: {
+                               first: function( elem, i ) {
+                                       return i === 0;
+                               },
 
-                       return data;
-               }
+                               last: function( elem, i, match, array ) {
+                                       return i === array.length - 1;
+                               },
 
-               // Sets multiple values
-               if ( typeof key === "object" ) {
-                       return this.each(function() {
-                               jQuery.data( this, key );
-                       });
-               }
+                               even: function( elem, i ) {
+                                       return i % 2 === 0;
+                               },
+
+                               odd: function( elem, i ) {
+                                       return i % 2 === 1;
+                               },
 
-               parts = key.split( ".", 2 );
-               parts[1] = parts[1] ? "." + parts[1] : "";
-               part = parts[1] + "!";
+                               lt: function( elem, i, match ) {
+                                       return i < match[3] - 0;
+                               },
 
-               return jQuery.access( this, function( value ) {
+                               gt: function( elem, i, match ) {
+                                       return i > match[3] - 0;
+                               },
 
-                       if ( value === undefined ) {
-                               data = this.triggerHandler( "getData" + part, [ parts[0] ] );
+                               nth: function( elem, i, match ) {
+                                       return match[3] - 0 === i;
+                               },
 
-                               // Try to fetch any internally stored data first
-                               if ( data === undefined && elem ) {
-                                       data = jQuery.data( elem, key );
-                                       data = dataAttr( elem, key, data );
+                               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 ];
 
-                               return data === undefined && parts[1] ?
-                                       this.data( parts[0] ) :
-                                       data;
-                       }
-
-                       parts[1] = value;
-                       this.each(function() {
-                               var self = jQuery( this );
+                                       if ( filter ) {
+                                               return filter( elem, i, match, array );
 
-                               self.triggerHandler( "setData" + part, parts );
-                               jQuery.data( this, key, value );
-                               self.triggerHandler( "changeData" + part, parts );
-                       });
-               }, null, value, arguments.length > 1, null, false );
-       },
+                                       } else if ( name === "contains" ) {
+                                               return (elem.textContent || elem.innerText || getText([ elem ]) || "").indexOf(match[3]) >= 0;
 
-       removeData: function( key ) {
-               return this.each(function() {
-                       jQuery.removeData( this, key );
-               });
-       }
-});
+                                       } else if ( name === "not" ) {
+                                               var not = match[3];
 
-function dataAttr( elem, key, data ) {
-       // If nothing was found internally, try to fetch any
-       // data from the HTML5 data-* attribute
-       if ( data === undefined && elem.nodeType === 1 ) {
+                                               for ( var j = 0, l = not.length; j < l; j++ ) {
+                                                       if ( not[j] === elem ) {
+                                                               return false;
+                                                       }
+                                               }
 
-               var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
+                                               return true;
 
-               data = elem.getAttribute( name );
+                                       } else {
+                                               Sizzle.error( name );
+                                       }
+                               },
 
-               if ( typeof data === "string" ) {
-                       try {
-                               data = data === "true" ? true :
-                               data === "false" ? false :
-                               data === "null" ? null :
-                               // Only convert to a number if it doesn't change the string
-                               +data + "" === data ? +data :
-                               rbrace.test( data ) ? jQuery.parseJSON( data ) :
-                                       data;
-                       } catch( e ) {}
-
-                       // Make sure we set the data so it isn't changed later
-                       jQuery.data( elem, key, data );
+                               CHILD: function( elem, match ) {
+                                       var first, last,
+                                               doneName, parent, cache,
+                                               count, diff,
+                                               type = match[1],
+                                               node = elem;
+
+                                       switch ( type ) {
+                                               case "only":
+                                               case "first":
+                                                       while ( (node = node.previousSibling) ) {
+                                                               if ( node.nodeType === 1 ) {
+                                                                       return false;
+                                                               }
+                                                       }
 
-               } else {
-                       data = undefined;
-               }
-       }
+                                                       if ( type === "first" ) {
+                                                               return true;
+                                                       }
 
-       return data;
-}
+                                                       node = elem;
 
-// checks a cache object for emptiness
-function isEmptyDataObject( obj ) {
-       var name;
-       for ( name in obj ) {
+                                               /* falls through */
+                                               case "last":
+                                                       while ( (node = node.nextSibling) ) {
+                                                               if ( node.nodeType === 1 ) {
+                                                                       return false;
+                                                               }
+                                                       }
 
-               // if the public data object is empty, the private is still empty
-               if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) {
-                       continue;
-               }
-               if ( name !== "toJSON" ) {
-                       return false;
-               }
-       }
+                                                       return true;
 
-       return true;
-}
-jQuery.extend({
-       queue: function( elem, type, data ) {
-               var queue;
+                                               case "nth":
+                                                       first = match[2];
+                                                       last = match[3];
 
-               if ( elem ) {
-                       type = ( type || "fx" ) + "queue";
-                       queue = jQuery._data( elem, type );
+                                                       if ( first === 1 && last === 0 ) {
+                                                               return true;
+                                                       }
 
-                       // Speed up dequeue by getting out quickly if this is just a lookup
-                       if ( data ) {
-                               if ( !queue || jQuery.isArray(data) ) {
-                                       queue = jQuery._data( elem, type, jQuery.makeArray(data) );
-                               } else {
-                                       queue.push( data );
-                               }
-                       }
-                       return queue || [];
-               }
-       },
+                                                       doneName = match[0];
+                                                       parent = elem.parentNode;
 
-       dequeue: function( elem, type ) {
-               type = type || "fx";
+                                                       if ( parent && (parent[ expando ] !== doneName || !elem.nodeIndex) ) {
+                                                               count = 0;
 
-               var queue = jQuery.queue( elem, type ),
-                       fn = queue.shift(),
-                       hooks = jQuery._queueHooks( elem, type ),
-                       next = function() {
-                               jQuery.dequeue( elem, type );
-                       };
+                                                               for ( node = parent.firstChild; node; node = node.nextSibling ) {
+                                                                       if ( node.nodeType === 1 ) {
+                                                                               node.nodeIndex = ++count;
+                                                                       }
+                                                               }
 
-               // If the fx queue is dequeued, always remove the progress sentinel
-               if ( fn === "inprogress" ) {
-                       fn = queue.shift();
-               }
+                                                               parent[ expando ] = doneName;
+                                                       }
 
-               if ( fn ) {
+                                                       diff = elem.nodeIndex - last;
 
-                       // Add a progress sentinel to prevent the fx queue from being
-                       // automatically dequeued
-                       if ( type === "fx" ) {
-                               queue.unshift( "inprogress" );
-                       }
+                                                       if ( first === 0 ) {
+                                                               return diff === 0;
 
-                       // clear up the last queue stop function
-                       delete hooks.stop;
-                       fn.call( elem, next, hooks );
-               }
-               if ( !queue.length && hooks ) {
-                       hooks.empty.fire();
-               }
-       },
-
-       // not intended for public consumption - generates a queueHooks object, or returns the current one
-       _queueHooks: function( elem, type ) {
-               var key = type + "queueHooks";
-               return jQuery._data( elem, key ) || jQuery._data( elem, key, {
-                       empty: jQuery.Callbacks("once memory").add(function() {
-                               jQuery.removeData( elem, type + "queue", true );
-                               jQuery.removeData( elem, key, true );
-                       })
-               });
-       }
-});
+                                                       } else {
+                                                               return ( diff % first === 0 && diff / first >= 0 );
+                                                       }
+                                       }
+                               },
 
-jQuery.fn.extend({
-       queue: function( type, data ) {
-               var setter = 2;
+                               ID: function( elem, match ) {
+                                       return elem.nodeType === 1 && elem.getAttribute("id") === match;
+                               },
 
-               if ( typeof type !== "string" ) {
-                       data = type;
-                       type = "fx";
-                       setter--;
-               }
+                               TAG: function( elem, match ) {
+                                       return (match === "*" && elem.nodeType === 1) || !!elem.nodeName && elem.nodeName.toLowerCase() === match;
+                               },
 
-               if ( arguments.length < setter ) {
-                       return jQuery.queue( this[0], type );
-               }
+                               CLASS: function( elem, match ) {
+                                       return (" " + (elem.className || elem.getAttribute("class")) + " ")
+                                               .indexOf( match ) > -1;
+                               },
 
-               return data === undefined ?
-                       this :
-                       this.each(function() {
-                               var queue = jQuery.queue( this, type, data );
+                               ATTR: function( elem, match ) {
+                                       var name = match[1],
+                                               result = Sizzle.attr ?
+                                                       Sizzle.attr( elem, name ) :
+                                                       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 && Sizzle.attr ?
+                                                       result != null :
+                                                       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;
+                               },
 
-                               // ensure a hooks for this queue
-                               jQuery._queueHooks( this, type );
+                               POS: function( elem, match, i, array ) {
+                                       var name = match[2],
+                                               filter = Expr.setFilters[ name ];
 
-                               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( next, hooks ) {
-                       var timeout = setTimeout( next, time );
-                       hooks.stop = function() {
-                               clearTimeout( timeout );
-                       };
-               });
-       },
-       clearQueue: function( type ) {
-               return this.queue( type || "fx", [] );
-       },
-       // Get a promise resolved when queues of a certain type
-       // are emptied (fx is the type by default)
-       promise: function( type, obj ) {
-               var tmp,
-                       count = 1,
-                       defer = jQuery.Deferred(),
-                       elements = this,
-                       i = this.length,
-                       resolve = function() {
-                               if ( !( --count ) ) {
-                                       defer.resolveWith( elements, [ elements ] );
+                                       if ( filter ) {
+                                               return filter( elem, i, match, array );
+                                       }
                                }
-                       };
+                       }
+               };
 
-               if ( typeof type !== "string" ) {
-                       obj = type;
-                       type = undefined;
-               }
-               type = type || "fx";
+               var origPOS = Expr.match.POS,
+                       fescape = function(all, num){
+                               return "\\" + (num - 0 + 1);
+                       };
 
-               while( i-- ) {
-                       if ( (tmp = jQuery._data( elements[ i ], type + "queueHooks" )) && tmp.empty ) {
-                               count++;
-                               tmp.empty.add( resolve );
-                       }
+               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, fescape) );
                }
-               resolve();
-               return defer.promise( obj );
-       }
-});
-var nodeHook, boolHook, fixSpecified,
-       rclass = /[\t\r\n]/g,
-       rreturn = /\r/g,
-       rtype = /^(?:button|input)$/i,
-       rfocusable = /^(?:button|input|object|select|textarea)$/i,
-       rclickable = /^a(?:rea|)$/i,
-       rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,
-       getSetAttribute = jQuery.support.getSetAttribute;
-
-jQuery.fn.extend({
-       attr: function( name, value ) {
-               return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 );
-       },
-
-       removeAttr: function( name ) {
-               return this.each(function() {
-                       jQuery.removeAttr( this, name );
-               });
-       },
+// Expose origPOS
+// "global" as in regardless of relation to brackets/parens
+               Expr.match.globalPOS = origPOS;
 
-       prop: function( name, value ) {
-               return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 );
-       },
+               var makeArray = function( array, results ) {
+                       array = Array.prototype.slice.call( array, 0 );
 
-       removeProp: function( name ) {
-               name = jQuery.propFix[ name ] || name;
-               return this.each(function() {
-                       // try/catch handles cases where IE balks (such as removing a property on window)
-                       try {
-                               this[ name ] = undefined;
-                               delete this[ name ];
-                       } catch( e ) {}
-               });
-       },
+                       if ( results ) {
+                               results.push.apply( results, array );
+                               return results;
+                       }
 
-       addClass: function( value ) {
-               var classNames, i, l, elem,
-                       setClass, c, cl;
+                       return array;
+               };
 
-               if ( jQuery.isFunction( value ) ) {
-                       return this.each(function( j ) {
-                               jQuery( this ).addClass( value.call(this, j, this.className) );
-                       });
-               }
+// 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;
 
-               if ( value && typeof value === "string" ) {
-                       classNames = value.split( core_rspace );
+// Provide a fallback method if it does not work
+               } catch( e ) {
+                       makeArray = function( array, results ) {
+                               var i = 0,
+                                       ret = results || [];
 
-                       for ( i = 0, l = this.length; i < l; i++ ) {
-                               elem = this[ i ];
+                               if ( toString.call(array) === "[object Array]" ) {
+                                       Array.prototype.push.apply( ret, array );
 
-                               if ( elem.nodeType === 1 ) {
-                                       if ( !elem.className && classNames.length === 1 ) {
-                                               elem.className = value;
+                               } else {
+                                       if ( typeof array.length === "number" ) {
+                                               for ( var l = array.length; i < l; i++ ) {
+                                                       ret.push( array[i] );
+                                               }
 
                                        } else {
-                                               setClass = " " + elem.className + " ";
-
-                                               for ( c = 0, cl = classNames.length; c < cl; c++ ) {
-                                                       if ( !~setClass.indexOf( " " + classNames[ c ] + " " ) ) {
-                                                               setClass += classNames[ c ] + " ";
-                                                       }
+                                               for ( ; array[i]; i++ ) {
+                                                       ret.push( array[i] );
                                                }
-                                               elem.className = jQuery.trim( setClass );
                                        }
                                }
-                       }
-               }
-
-               return this;
-       },
 
-       removeClass: function( value ) {
-               var removes, className, elem, c, cl, i, l;
-
-               if ( jQuery.isFunction( value ) ) {
-                       return this.each(function( j ) {
-                               jQuery( this ).removeClass( value.call(this, j, this.className) );
-                       });
+                               return ret;
+                       };
                }
-               if ( (value && typeof value === "string") || value === undefined ) {
-                       removes = ( value || "" ).split( core_rspace );
 
-                       for ( i = 0, l = this.length; i < l; i++ ) {
-                               elem = this[ i ];
-                               if ( elem.nodeType === 1 && elem.className ) {
+               var sortOrder, siblingCheck;
 
-                                       className = (" " + elem.className + " ").replace( rclass, " " );
+               if ( document.documentElement.compareDocumentPosition ) {
+                       sortOrder = function( a, b ) {
+                               if ( a === b ) {
+                                       hasDuplicate = true;
+                                       return 0;
+                               }
 
-                                       // loop over each item in the removal list
-                                       for ( c = 0, cl = removes.length; c < cl; c++ ) {
-                                               // Remove until there is nothing to remove,
-                                               while ( className.indexOf(" " + removes[ c ] + " ") > -1 ) {
-                                                       className = className.replace( " " + removes[ c ] + " " , " " );
-                                               }
-                                       }
-                                       elem.className = value ? jQuery.trim( className ) : "";
+                               if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {
+                                       return a.compareDocumentPosition ? -1 : 1;
                                }
-                       }
-               }
 
-               return this;
-       },
+                               return a.compareDocumentPosition(b) & 4 ? -1 : 1;
+                       };
 
-       toggleClass: function( value, stateVal ) {
-               var type = typeof value,
-                       isBool = typeof stateVal === "boolean";
+               } else {
+                       sortOrder = function( a, b ) {
+                               // The nodes are identical, we can exit early
+                               if ( a === b ) {
+                                       hasDuplicate = true;
+                                       return 0;
+
+                                       // Fallback to using sourceIndex (in IE) if it's available on both nodes
+                               } else if ( a.sourceIndex && b.sourceIndex ) {
+                                       return a.sourceIndex - b.sourceIndex;
+                               }
 
-               if ( jQuery.isFunction( value ) ) {
-                       return this.each(function( i ) {
-                               jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
-                       });
-               }
+                               var al, bl,
+                                       ap = [],
+                                       bp = [],
+                                       aup = a.parentNode,
+                                       bup = b.parentNode,
+                                       cur = aup;
 
-               return this.each(function() {
-                       if ( type === "string" ) {
-                               // toggle individual class names
-                               var className,
-                                       i = 0,
-                                       self = jQuery( this ),
-                                       state = stateVal,
-                                       classNames = value.split( core_rspace );
+                               // If the nodes are siblings (or identical) we can do a quick check
+                               if ( aup === bup ) {
+                                       return siblingCheck( a, b );
+
+                                       // If no parents were found then the nodes are disconnected
+                               } else if ( !aup ) {
+                                       return -1;
 
-                               while ( (className = classNames[ i++ ]) ) {
-                                       // check each className given, space separated list
-                                       state = isBool ? state : !self.hasClass( className );
-                                       self[ state ? "addClass" : "removeClass" ]( className );
+                               } else if ( !bup ) {
+                                       return 1;
                                }
 
-                       } else if ( type === "undefined" || type === "boolean" ) {
-                               if ( this.className ) {
-                                       // store className if set
-                                       jQuery._data( this, "__className__", this.className );
+                               // Otherwise they're somewhere else in the tree so we need
+                               // to build up a full list of the parentNodes for comparison
+                               while ( cur ) {
+                                       ap.unshift( cur );
+                                       cur = cur.parentNode;
                                }
 
-                               // toggle whole className
-                               this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
-                       }
-               });
-       },
+                               cur = bup;
 
-       hasClass: function( selector ) {
-               var className = " " + selector + " ",
-                       i = 0,
-                       l = this.length;
-               for ( ; i < l; i++ ) {
-                       if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) {
-                               return true;
-                       }
-               }
+                               while ( cur ) {
+                                       bp.unshift( cur );
+                                       cur = cur.parentNode;
+                               }
 
-               return false;
-       },
+                               al = ap.length;
+                               bl = bp.length;
 
-       val: function( value ) {
-               var hooks, ret, isFunction,
-                       elem = this[0];
+                               // Start walking down the tree looking for a discrepancy
+                               for ( var i = 0; i < al && i < bl; i++ ) {
+                                       if ( ap[i] !== bp[i] ) {
+                                               return siblingCheck( ap[i], bp[i] );
+                                       }
+                               }
 
-               if ( !arguments.length ) {
-                       if ( elem ) {
-                               hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];
+                               // We ended someplace up the tree so do a sibling check
+                               return i === al ?
+                                       siblingCheck( a, bp[i], -1 ) :
+                                       siblingCheck( ap[i], b, 1 );
+                       };
 
-                               if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
+                       siblingCheck = function( a, b, ret ) {
+                               if ( a === b ) {
                                        return ret;
                                }
 
-                               ret = elem.value;
+                               var cur = a.nextSibling;
 
-                               return typeof ret === "string" ?
-                                       // handle most common string cases
-                                       ret.replace(rreturn, "") :
-                                       // handle cases where value is null/undef or number
-                                       ret == null ? "" : ret;
-                       }
+                               while ( cur ) {
+                                       if ( cur === b ) {
+                                               return -1;
+                                       }
 
-                       return;
+                                       cur = cur.nextSibling;
+                               }
+
+                               return 1;
+                       };
                }
 
-               isFunction = jQuery.isFunction( value );
+// 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(),
+                               root = document.documentElement;
 
-               return this.each(function( i ) {
-                       var val,
-                               self = jQuery(this);
+                       form.innerHTML = "<a name='" + id + "'/>";
 
-                       if ( this.nodeType !== 1 ) {
-                               return;
-                       }
+                       // Inject it into the root element, check its status, and remove it quickly
+                       root.insertBefore( form, root.firstChild );
 
-                       if ( isFunction ) {
-                               val = value.call( this, i, self.val() );
-                       } else {
-                               val = value;
-                       }
+                       // 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]);
 
-                       // Treat null/undefined as ""; convert numbers to string
-                       if ( val == null ) {
-                               val = "";
-                       } else if ( typeof val === "number" ) {
-                               val += "";
-                       } else if ( jQuery.isArray( val ) ) {
-                               val = jQuery.map(val, function ( value ) {
-                                       return value == null ? "" : value + "";
-                               });
-                       }
+                                               return m ?
+                                                       m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ?
+                                                               [m] :
+                                                               undefined :
+                                                       [];
+                                       }
+                               };
 
-                       hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
+                               Expr.filter.ID = function( elem, match ) {
+                                       var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
 
-                       // If set returns undefined, fall back to normal setting
-                       if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
-                               this.value = val;
+                                       return elem.nodeType === 1 && node && node.nodeValue === match;
+                               };
                        }
-               });
-       }
-});
 
-jQuery.extend({
-       valHooks: {
-               option: {
-                       get: function( elem ) {
-                               // attributes.value is undefined in Blackberry 4.7 but
-                               // uses .value. See #6932
-                               var val = elem.attributes.value;
-                               return !val || val.specified ? elem.value : elem.text;
-                       }
-               },
-               select: {
-                       get: function( elem ) {
-                               var value, i, max, option,
-                                       index = elem.selectedIndex,
-                                       values = [],
-                                       options = elem.options,
-                                       one = elem.type === "select-one";
-
-                               // Nothing was selected
-                               if ( index < 0 ) {
-                                       return null;
-                               }
+                       root.removeChild( form );
 
-                               // Loop through all the selected options
-                               i = one ? index : 0;
-                               max = one ? index + 1 : options.length;
-                               for ( ; i < max; i++ ) {
-                                       option = options[ i ];
+                       // release memory in IE
+                       root = form = null;
+               })();
 
-                                       // Don't return options that are disabled or in a disabled optgroup
-                                       if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) &&
-                                                       (!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) {
+               (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] );
 
-                                               // Get the specific value for the option
-                                               value = jQuery( option ).val();
+                                       // Filter out possible comments
+                                       if ( match[1] === "*" ) {
+                                               var tmp = [];
 
-                                               // We don't need an array for one selects
-                                               if ( one ) {
-                                                       return value;
+                                               for ( var i = 0; results[i]; i++ ) {
+                                                       if ( results[i].nodeType === 1 ) {
+                                                               tmp.push( results[i] );
+                                                       }
                                                }
 
-                                               // Multi-Selects return an array
-                                               values.push( value );
+                                               results = tmp;
                                        }
-                               }
-
-                               // Fixes Bug #2551 -- select.val() broken in IE after form.reset()
-                               if ( one && !values.length && options.length ) {
-                                       return jQuery( options[ index ] ).val();
-                               }
 
-                               return values;
-                       },
+                                       return results;
+                               };
+                       }
 
-                       set: function( elem, value ) {
-                               var values = jQuery.makeArray( value );
+                       // Check to see if an attribute returns normalized href attributes
+                       div.innerHTML = "<a href='#'></a>";
 
-                               jQuery(elem).find("option").each(function() {
-                                       this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
-                               });
+                       if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&
+                               div.firstChild.getAttribute("href") !== "#" ) {
 
-                               if ( !values.length ) {
-                                       elem.selectedIndex = -1;
-                               }
-                               return values;
+                               Expr.attrHandle.href = function( elem ) {
+                                       return elem.getAttribute( "href", 2 );
+                               };
                        }
-               }
-       },
 
-       // Unused in 1.8, left in so attrFn-stabbers won't die; remove in 1.9
-       attrFn: {},
+                       // release memory in IE
+                       div = null;
+               })();
 
-       attr: function( elem, name, value, pass ) {
-               var ret, hooks, notxml,
-                       nType = elem.nodeType;
+               if ( document.querySelectorAll ) {
+                       (function(){
+                               var oldSizzle = Sizzle,
+                                       div = document.createElement("div"),
+                                       id = "__sizzle__";
 
-               // don't get/set attributes on text, comment and attribute nodes
-               if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
-                       return;
-               }
+                               div.innerHTML = "<p class='TEST'></p>";
 
-               if ( pass && jQuery.isFunction( jQuery.fn[ name ] ) ) {
-                       return jQuery( elem )[ name ]( value );
-               }
+                               // Safari can't handle uppercase or unicode characters when
+                               // in quirks mode.
+                               if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
+                                       return;
+                               }
 
-               // Fallback to prop when attributes are not supported
-               if ( typeof elem.getAttribute === "undefined" ) {
-                       return jQuery.prop( elem, name, value );
-               }
+                               Sizzle = function( query, context, extra, seed ) {
+                                       context = context || document;
 
-               notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
+                                       // Only use querySelectorAll on non-XML documents
+                                       // (ID selectors don't work in non-HTML documents)
+                                       if ( !seed && !Sizzle.isXML(context) ) {
+                                               // See if we find a selector to speed up
+                                               var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query );
 
-               // All attributes are lowercase
-               // Grab necessary hook if one is defined
-               if ( notxml ) {
-                       name = name.toLowerCase();
-                       hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook );
-               }
+                                               if ( match && (context.nodeType === 1 || context.nodeType === 9) ) {
+                                                       // Speed-up: Sizzle("TAG")
+                                                       if ( match[1] ) {
+                                                               return makeArray( context.getElementsByTagName( query ), extra );
 
-               if ( value !== undefined ) {
+                                                               // Speed-up: Sizzle(".CLASS")
+                                                       } else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) {
+                                                               return makeArray( context.getElementsByClassName( match[2] ), extra );
+                                                       }
+                                               }
 
-                       if ( value === null ) {
-                               jQuery.removeAttr( elem, name );
-                               return;
+                                               if ( context.nodeType === 9 ) {
+                                                       // Speed-up: Sizzle("body")
+                                                       // The body element only exists once, optimize finding it
+                                                       if ( query === "body" && context.body ) {
+                                                               return makeArray( [ context.body ], extra );
+
+                                                               // Speed-up: Sizzle("#ID")
+                                                       } else if ( match && match[3] ) {
+                                                               var elem = context.getElementById( match[3] );
+
+                                                               // Check parentNode to catch when Blackberry 4.6 returns
+                                                               // nodes that are no longer in the document #6963
+                                                               if ( elem && elem.parentNode ) {
+                                                                       // Handle the case where IE and Opera return items
+                                                                       // by name instead of ID
+                                                                       if ( elem.id === match[3] ) {
+                                                                               return makeArray( [ elem ], extra );
+                                                                       }
 
-                       } else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) {
-                               return ret;
+                                                               } else {
+                                                                       return makeArray( [], extra );
+                                                               }
+                                                       }
 
-                       } else {
-                               elem.setAttribute( name, "" + value );
-                               return value;
-                       }
+                                                       try {
+                                                               return makeArray( context.querySelectorAll(query), extra );
+                                                       } catch(qsaError) {}
+
+                                                       // qSA works strangely on Element-rooted queries
+                                                       // We can work around this by specifying an extra ID on the root
+                                                       // and working up from there (Thanks to Andrew Dupont for the technique)
+                                                       // IE 8 doesn't work on object elements
+                                               } else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
+                                                       var oldContext = context,
+                                                               old = context.getAttribute( "id" ),
+                                                               nid = old || id,
+                                                               hasParent = context.parentNode,
+                                                               relativeHierarchySelector = /^\s*[+~]/.test( query );
+
+                                                       if ( !old ) {
+                                                               context.setAttribute( "id", nid );
+                                                       } else {
+                                                               nid = nid.replace( /'/g, "\\$&" );
+                                                       }
+                                                       if ( relativeHierarchySelector && hasParent ) {
+                                                               context = context.parentNode;
+                                                       }
 
-               } else if ( hooks && "get" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) {
-                       return ret;
+                                                       try {
+                                                               if ( !relativeHierarchySelector || hasParent ) {
+                                                                       return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra );
+                                                               }
+
+                                                       } catch(pseudoError) {
+                                                       } finally {
+                                                               if ( !old ) {
+                                                                       oldContext.removeAttribute( "id" );
+                                                               }
+                                                       }
+                                               }
+                                       }
 
-               } else {
+                                       return oldSizzle(query, context, extra, seed);
+                               };
 
-                       ret = elem.getAttribute( name );
+                               for ( var prop in oldSizzle ) {
+                                       Sizzle[ prop ] = oldSizzle[ prop ];
+                               }
 
-                       // Non-existent attributes return null, we normalize to undefined
-                       return ret === null ?
-                               undefined :
-                               ret;
+                               // release memory in IE
+                               div = null;
+                       })();
                }
-       },
-
-       removeAttr: function( elem, value ) {
-               var propName, attrNames, name, isBool,
-                       i = 0;
 
-               if ( value && elem.nodeType === 1 ) {
+               (function(){
+                       var html = document.documentElement,
+                               matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector;
 
-                       attrNames = value.split( core_rspace );
+                       if ( matches ) {
+                               // Check to see if it's possible to do matchesSelector
+                               // on a disconnected node (IE 9 fails this)
+                               var disconnectedMatch = !matches.call( document.createElement( "div" ), "div" ),
+                                       pseudoWorks = false;
 
-                       for ( ; i < attrNames.length; i++ ) {
-                               name = attrNames[ i ];
+                               try {
+                                       // This should fail with an exception
+                                       // Gecko does not error, returns false instead
+                                       matches.call( document.documentElement, "[test!='']:sizzle" );
 
-                               if ( name ) {
-                                       propName = jQuery.propFix[ name ] || name;
-                                       isBool = rboolean.test( name );
+                               } catch( pseudoError ) {
+                                       pseudoWorks = true;
+                               }
 
-                                       // See #9699 for explanation of this approach (setting first, then removal)
-                                       // Do not do this for boolean attributes (see #10870)
-                                       if ( !isBool ) {
-                                               jQuery.attr( elem, name, "" );
-                                       }
-                                       elem.removeAttribute( getSetAttribute ? name : propName );
+                               Sizzle.matchesSelector = function( node, expr ) {
+                                       // Make sure that attribute selectors are quoted
+                                       expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']");
 
-                                       // Set corresponding property to false for boolean attributes
-                                       if ( isBool && propName in elem ) {
-                                               elem[ propName ] = false;
+                                       if ( !Sizzle.isXML( node ) ) {
+                                               try {
+                                                       if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) {
+                                                               var ret = matches.call( node, expr );
+
+                                                               // IE 9's matchesSelector returns false on disconnected nodes
+                                                               if ( ret || !disconnectedMatch ||
+                                                                       // As well, disconnected nodes are said to be in a document
+                                                                       // fragment in IE 9, so check for that
+                                                                       node.document && node.document.nodeType !== 11 ) {
+                                                                       return ret;
+                                                               }
+                                                       }
+                                               } catch(e) {}
                                        }
-                               }
-                       }
-               }
-       },
 
-       attrHooks: {
-               type: {
-                       set: function( elem, value ) {
-                               // We can't allow the type property to be changed (since it causes problems in IE)
-                               if ( rtype.test( elem.nodeName ) && elem.parentNode ) {
-                                       jQuery.error( "type property can't be changed" );
-                               } else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
-                                       // Setting the type on a radio button after the value resets the value in IE6-9
-                                       // Reset value to it's default in case type is set after value
-                                       // This is for element creation
-                                       var val = elem.value;
-                                       elem.setAttribute( "type", value );
-                                       if ( val ) {
-                                               elem.value = val;
-                                       }
-                                       return value;
-                               }
-                       }
-               },
-               // Use the value property for back compat
-               // Use the nodeHook for button elements in IE6/7 (#1954)
-               value: {
-                       get: function( elem, name ) {
-                               if ( nodeHook && jQuery.nodeName( elem, "button" ) ) {
-                                       return nodeHook.get( elem, name );
-                               }
-                               return name in elem ?
-                                       elem.value :
-                                       null;
-                       },
-                       set: function( elem, value, name ) {
-                               if ( nodeHook && jQuery.nodeName( elem, "button" ) ) {
-                                       return nodeHook.set( elem, value, name );
-                               }
-                               // Does not return so that setAttribute is also used
-                               elem.value = value;
+                                       return Sizzle(expr, null, null, [node]).length > 0;
+                               };
                        }
-               }
-       },
-
-       propFix: {
-               tabindex: "tabIndex",
-               readonly: "readOnly",
-               "for": "htmlFor",
-               "class": "className",
-               maxlength: "maxLength",
-               cellspacing: "cellSpacing",
-               cellpadding: "cellPadding",
-               rowspan: "rowSpan",
-               colspan: "colSpan",
-               usemap: "useMap",
-               frameborder: "frameBorder",
-               contenteditable: "contentEditable"
-       },
-
-       prop: function( elem, name, value ) {
-               var ret, hooks, notxml,
-                       nType = elem.nodeType;
-
-               // don't get/set properties on text, comment and attribute nodes
-               if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
-                       return;
-               }
+               })();
 
-               notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
+               (function(){
+                       var div = document.createElement("div");
 
-               if ( notxml ) {
-                       // Fix name and attach hooks
-                       name = jQuery.propFix[ name ] || name;
-                       hooks = jQuery.propHooks[ name ];
-               }
-
-               if ( value !== undefined ) {
-                       if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
-                               return ret;
+                       div.innerHTML = "<div class='test e'></div><div class='test'></div>";
 
-                       } else {
-                               return ( elem[ name ] = value );
+                       // 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;
                        }
 
-               } else {
-                       if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
-                               return ret;
+                       // Safari caches class attributes, doesn't catch changes (in 3.2)
+                       div.lastChild.className = "e";
 
-                       } else {
-                               return elem[ name ];
+                       if ( div.getElementsByClassName("e").length === 1 ) {
+                               return;
                        }
-               }
-       },
 
-       propHooks: {
-               tabIndex: {
-                       get: function( elem ) {
-                               // 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/
-                               var attributeNode = elem.getAttributeNode("tabindex");
-
-                               return attributeNode && attributeNode.specified ?
-                                       parseInt( attributeNode.value, 10 ) :
-                                       rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
-                                               0 :
-                                               undefined;
-                       }
-               }
-       }
-});
+                       Expr.order.splice(1, 0, "CLASS");
+                       Expr.find.CLASS = function( match, context, isXML ) {
+                               if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {
+                                       return context.getElementsByClassName(match[1]);
+                               }
+                       };
 
-// Hook for boolean attributes
-boolHook = {
-       get: function( elem, name ) {
-               // Align boolean attributes with corresponding properties
-               // Fall back to attribute presence where some booleans are not supported
-               var attrNode,
-                       property = jQuery.prop( elem, name );
-               return property === true || typeof property !== "boolean" && ( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ?
-                       name.toLowerCase() :
-                       undefined;
-       },
-       set: function( elem, value, name ) {
-               var propName;
-               if ( value === false ) {
-                       // Remove boolean attributes when set to false
-                       jQuery.removeAttr( elem, name );
-               } else {
-                       // value is true since we know at this point it's type boolean and not false
-                       // Set boolean attributes to the same name and set the DOM property
-                       propName = jQuery.propFix[ name ] || name;
-                       if ( propName in elem ) {
-                               // Only set the IDL specifically if it already exists on the element
-                               elem[ propName ] = true;
-                       }
+                       // release memory in IE
+                       div = null;
+               })();
 
-                       elem.setAttribute( name, name.toLowerCase() );
-               }
-               return name;
-       }
-};
+               function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
+                       for ( var i = 0, l = checkSet.length; i < l; i++ ) {
+                               var elem = checkSet[i];
 
-// IE6/7 do not support getting/setting some attributes with get/setAttribute
-if ( !getSetAttribute ) {
+                               if ( elem ) {
+                                       var match = false;
 
-       fixSpecified = {
-               name: true,
-               id: true,
-               coords: true
-       };
+                                       elem = elem[dir];
 
-       // Use this for any attribute in IE6/7
-       // This fixes almost every IE6/7 issue
-       nodeHook = jQuery.valHooks.button = {
-               get: function( elem, name ) {
-                       var ret;
-                       ret = elem.getAttributeNode( name );
-                       return ret && ( fixSpecified[ name ] ? ret.value !== "" : ret.specified ) ?
-                               ret.value :
-                               undefined;
-               },
-               set: function( elem, value, name ) {
-                       // Set the existing or create a new attribute node
-                       var ret = elem.getAttributeNode( name );
-                       if ( !ret ) {
-                               ret = document.createAttribute( name );
-                               elem.setAttributeNode( ret );
-                       }
-                       return ( ret.value = value + "" );
-               }
-       };
+                                       while ( elem ) {
+                                               if ( elem[ expando ] === doneName ) {
+                                                       match = checkSet[elem.sizset];
+                                                       break;
+                                               }
 
-       // Set width and height to auto instead of 0 on empty string( Bug #8150 )
-       // This is for removals
-       jQuery.each([ "width", "height" ], function( i, name ) {
-               jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
-                       set: function( elem, value ) {
-                               if ( value === "" ) {
-                                       elem.setAttribute( name, "auto" );
-                                       return value;
-                               }
-                       }
-               });
-       });
+                                               if ( elem.nodeType === 1 && !isXML ){
+                                                       elem[ expando ] = doneName;
+                                                       elem.sizset = i;
+                                               }
 
-       // Set contenteditable to false on removals(#10429)
-       // Setting to empty string throws an error as an invalid value
-       jQuery.attrHooks.contenteditable = {
-               get: nodeHook.get,
-               set: function( elem, value, name ) {
-                       if ( value === "" ) {
-                               value = "false";
-                       }
-                       nodeHook.set( elem, value, name );
-               }
-       };
-}
+                                               if ( elem.nodeName.toLowerCase() === cur ) {
+                                                       match = elem;
+                                                       break;
+                                               }
 
+                                               elem = elem[dir];
+                                       }
 
-// Some attributes require a special call on IE
-if ( !jQuery.support.hrefNormalized ) {
-       jQuery.each([ "href", "src", "width", "height" ], function( i, name ) {
-               jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
-                       get: function( elem ) {
-                               var ret = elem.getAttribute( name, 2 );
-                               return ret === null ? undefined : ret;
+                                       checkSet[i] = match;
+                               }
                        }
-               });
-       });
-}
-
-if ( !jQuery.support.style ) {
-       jQuery.attrHooks.style = {
-               get: function( elem ) {
-                       // Return undefined in the case of empty string
-                       // Normalize to lowercase since IE uppercases css property names
-                       return elem.style.cssText.toLowerCase() || undefined;
-               },
-               set: function( elem, value ) {
-                       return ( elem.style.cssText = "" + value );
                }
-       };
-}
 
-// Safari mis-reports the default selected property of an option
-// Accessing the parent's selectedIndex property fixes it
-if ( !jQuery.support.optSelected ) {
-       jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, {
-               get: function( elem ) {
-                       var parent = elem.parentNode;
+               function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
+                       for ( var i = 0, l = checkSet.length; i < l; i++ ) {
+                               var elem = checkSet[i];
 
-                       if ( parent ) {
-                               parent.selectedIndex;
+                               if ( elem ) {
+                                       var match = false;
 
-                               // Make sure that it also works with optgroups, see #5701
-                               if ( parent.parentNode ) {
-                                       parent.parentNode.selectedIndex;
-                               }
-                       }
-                       return null;
-               }
-       });
-}
+                                       elem = elem[dir];
 
-// IE6/7 call enctype encoding
-if ( !jQuery.support.enctype ) {
-       jQuery.propFix.enctype = "encoding";
-}
+                                       while ( elem ) {
+                                               if ( elem[ expando ] === doneName ) {
+                                                       match = checkSet[elem.sizset];
+                                                       break;
+                                               }
 
-// Radios and checkboxes getter/setter
-if ( !jQuery.support.checkOn ) {
-       jQuery.each([ "radio", "checkbox" ], function() {
-               jQuery.valHooks[ this ] = {
-                       get: function( elem ) {
-                               // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified
-                               return elem.getAttribute("value") === null ? "on" : elem.value;
-                       }
-               };
-       });
-}
-jQuery.each([ "radio", "checkbox" ], function() {
-       jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], {
-               set: function( elem, value ) {
-                       if ( jQuery.isArray( value ) ) {
-                               return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );
-                       }
-               }
-       });
-});
-var rformElems = /^(?:textarea|input|select)$/i,
-       rtypenamespace = /^([^\.]*|)(?:\.(.+)|)$/,
-       rhoverHack = /(?:^|\s)hover(\.\S+|)\b/,
-       rkeyEvent = /^key/,
-       rmouseEvent = /^(?:mouse|contextmenu)|click/,
-       rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
-       hoverHack = function( events ) {
-               return jQuery.event.special.hover ? events : events.replace( rhoverHack, "mouseenter$1 mouseleave$1" );
-       };
+                                               if ( elem.nodeType === 1 ) {
+                                                       if ( !isXML ) {
+                                                               elem[ expando ] = doneName;
+                                                               elem.sizset = i;
+                                                       }
 
-/*
- * Helper functions for managing events -- not part of the public interface.
- * Props to Dean Edwards' addEvent library for many of the ideas.
- */
-jQuery.event = {
+                                                       if ( typeof cur !== "string" ) {
+                                                               if ( elem === cur ) {
+                                                                       match = true;
+                                                                       break;
+                                                               }
 
-       add: function( elem, types, handler, data, selector ) {
+                                                       } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {
+                                                               match = elem;
+                                                               break;
+                                                       }
+                                               }
 
-               var elemData, eventHandle, events,
-                       t, tns, type, namespaces, handleObj,
-                       handleObjIn, handlers, special;
+                                               elem = elem[dir];
+                                       }
 
-               // Don't attach events to noData or text/comment nodes (allow plain objects tho)
-               if ( elem.nodeType === 3 || elem.nodeType === 8 || !types || !handler || !(elemData = jQuery._data( elem )) ) {
-                       return;
+                                       checkSet[i] = match;
+                               }
+                       }
                }
 
-               // Caller can pass in an object of custom data in lieu of the handler
-               if ( handler.handler ) {
-                       handleObjIn = handler;
-                       handler = handleObjIn.handler;
-                       selector = handleObjIn.selector;
-               }
+               if ( document.documentElement.contains ) {
+                       Sizzle.contains = function( a, b ) {
+                               return a !== b && (a.contains ? a.contains(b) : true);
+                       };
 
-               // Make sure that the handler has a unique ID, used to find/remove it later
-               if ( !handler.guid ) {
-                       handler.guid = jQuery.guid++;
-               }
+               } else if ( document.documentElement.compareDocumentPosition ) {
+                       Sizzle.contains = function( a, b ) {
+                               return !!(a.compareDocumentPosition(b) & 16);
+                       };
 
-               // Init the element's event structure and main handler, if this is the first
-               events = elemData.events;
-               if ( !events ) {
-                       elemData.events = events = {};
-               }
-               eventHandle = elemData.handle;
-               if ( !eventHandle ) {
-                       elemData.handle = eventHandle = function( e ) {
-                               // Discard the second event of a jQuery.event.trigger() and
-                               // when an event is called after a page has unloaded
-                               return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ?
-                                       jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :
-                                       undefined;
+               } else {
+                       Sizzle.contains = function() {
+                               return false;
                        };
-                       // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events
-                       eventHandle.elem = elem;
                }
 
-               // Handle multiple events separated by a space
-               // jQuery(...).bind("mouseover mouseout", fn);
-               types = jQuery.trim( hoverHack(types) ).split( " " );
-               for ( t = 0; t < types.length; t++ ) {
+               Sizzle.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;
 
-                       tns = rtypenamespace.exec( types[t] ) || [];
-                       type = tns[1];
-                       namespaces = ( tns[2] || "" ).split( "." ).sort();
+                       return documentElement ? documentElement.nodeName !== "HTML" : false;
+               };
 
-                       // If event changes its type, use the special event handlers for the changed type
-                       special = jQuery.event.special[ type ] || {};
+               var posProcess = function( selector, context, seed ) {
+                       var match,
+                               tmpSet = [],
+                               later = "",
+                               root = context.nodeType ? [context] : context;
 
-                       // If selector defined, determine special event api type, otherwise given type
-                       type = ( selector ? special.delegateType : special.bindType ) || type;
+                       // 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, "" );
+                       }
 
-                       // Update special based on newly reset type
-                       special = jQuery.event.special[ type ] || {};
+                       selector = Expr.relative[selector] ? selector + "*" : selector;
 
-                       // handleObj is passed to all event handlers
-                       handleObj = jQuery.extend({
-                               type: type,
-                               origType: tns[1],
-                               data: data,
-                               handler: handler,
-                               guid: handler.guid,
-                               selector: selector,
-                               namespace: namespaces.join(".")
-                       }, handleObjIn );
+                       for ( var i = 0, l = root.length; i < l; i++ ) {
+                               Sizzle( selector, root[i], tmpSet, seed );
+                       }
+
+                       return Sizzle.filter( later, tmpSet );
+               };
 
-                       // Init the event handler queue if we're the first
-                       handlers = events[ type ];
-                       if ( !handlers ) {
-                               handlers = events[ type ] = [];
-                               handlers.delegateCount = 0;
+// EXPOSE
+// Override sizzle attribute retrieval
+               Sizzle.attr = jQuery.attr;
+               Sizzle.selectors.attrMap = {};
+               jQuery.find = Sizzle;
+               jQuery.expr = Sizzle.selectors;
+               jQuery.expr[":"] = jQuery.expr.filters;
+               jQuery.unique = Sizzle.uniqueSort;
+               jQuery.text = Sizzle.getText;
+               jQuery.isXMLDoc = Sizzle.isXML;
+               jQuery.contains = Sizzle.contains;
+
+
+       })();
+
+
+       var runtil = /Until$/,
+               rparentsprev = /^(?:parents|prevUntil|prevAll)/,
+       // Note: This RegExp should be improved, or likely pulled from Sizzle
+               rmultiselector = /,/,
+               isSimple = /^.[^:#\[\.,]*$/,
+               slice = Array.prototype.slice,
+               POS = jQuery.expr.match.globalPOS,
+       // methods guaranteed to produce a unique set when starting from a unique set
+               guaranteedUnique = {
+                       children: true,
+                       contents: true,
+                       next: true,
+                       prev: true
+               };
 
-                               // 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 );
+       jQuery.fn.extend({
+               find: function( selector ) {
+                       var self = this,
+                               i, l;
 
-                                       } else if ( elem.attachEvent ) {
-                                               elem.attachEvent( "on" + type, eventHandle );
+                       if ( typeof selector !== "string" ) {
+                               return jQuery( selector ).filter(function() {
+                                       for ( i = 0, l = self.length; i < l; i++ ) {
+                                               if ( jQuery.contains( self[ i ], this ) ) {
+                                                       return true;
+                                               }
                                        }
-                               }
+                               });
                        }
 
-                       if ( special.add ) {
-                               special.add.call( elem, handleObj );
+                       var ret = this.pushStack( "", "find", selector ),
+                               length, n, r;
 
-                               if ( !handleObj.handler.guid ) {
-                                       handleObj.handler.guid = handler.guid;
+                       for ( 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 ( n = length; n < ret.length; n++ ) {
+                                               for ( r = 0; r < length; r++ ) {
+                                                       if ( ret[r] === ret[n] ) {
+                                                               ret.splice(n--, 1);
+                                                               break;
+                                                       }
+                                               }
+                                       }
                                }
                        }
 
-                       // Add to the element's handler list, delegates in front
-                       if ( selector ) {
-                               handlers.splice( handlers.delegateCount++, 0, handleObj );
-                       } else {
-                               handlers.push( handleObj );
-                       }
+                       return ret;
+               },
 
-                       // Keep track of which events have ever been used, for event optimization
-                       jQuery.event.global[ type ] = true;
-               }
+               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);
+               },
 
-               // Nullify elem to prevent memory leaks in IE
-               elem = null;
-       },
+               filter: function( selector ) {
+                       return this.pushStack( winnow(this, selector, true), "filter", selector );
+               },
 
-       global: {},
+               is: function( selector ) {
+                       return !!selector && (
+                               typeof selector === "string" ?
+                                       // If this is a positional selector, check membership in the returned set
+                                       // so $("p:first").is("p:last") won't return true for a doc with two "p".
+                                       POS.test( selector ) ?
+                                               jQuery( selector, this.context ).index( this[0] ) >= 0 :
+                                               jQuery.filter( selector, this ).length > 0 :
+                                       this.filter( selector ).length > 0 );
+               },
 
-       // Detach an event or set of events from an element
-       remove: function( elem, types, handler, selector, mappedTypes ) {
+               closest: function( selectors, context ) {
+                       var ret = [], i, l, cur = this[0];
 
-               var t, tns, type, origType, namespaces, origCount,
-                       j, events, special, eventType, handleObj,
-                       elemData = jQuery.hasData( elem ) && jQuery._data( elem );
+                       // Array (deprecated as of jQuery 1.7)
+                       if ( jQuery.isArray( selectors ) ) {
+                               var level = 1;
 
-               if ( !elemData || !(events = elemData.events) ) {
-                       return;
-               }
+                               while ( cur && cur.ownerDocument && cur !== context ) {
+                                       for ( i = 0; i < selectors.length; i++ ) {
 
-               // Once for each type.namespace in types; type may be omitted
-               types = jQuery.trim( hoverHack( types || "" ) ).split(" ");
-               for ( t = 0; t < types.length; t++ ) {
-                       tns = rtypenamespace.exec( types[t] ) || [];
-                       type = origType = tns[1];
-                       namespaces = tns[2];
+                                               if ( jQuery( cur ).is( selectors[ i ] ) ) {
+                                                       ret.push({ selector: selectors[ i ], elem: cur, level: level });
+                                               }
+                                       }
 
-                       // Unbind all events (on this namespace, if provided) for the element
-                       if ( !type ) {
-                               for ( type in events ) {
-                                       jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
+                                       cur = cur.parentNode;
+                                       level++;
                                }
-                               continue;
+
+                               return ret;
                        }
 
-                       special = jQuery.event.special[ type ] || {};
-                       type = ( selector? special.delegateType : special.bindType ) || type;
-                       eventType = events[ type ] || [];
-                       origCount = eventType.length;
-                       namespaces = namespaces ? new RegExp("(^|\\.)" + namespaces.split(".").sort().join("\\.(?:.*\\.|)") + "(\\.|$)") : null;
+                       // String
+                       var pos = POS.test( selectors ) || typeof selectors !== "string" ?
+                               jQuery( selectors, context || this.context ) :
+                               0;
 
-                       // Remove matching events
-                       for ( j = 0; j < eventType.length; j++ ) {
-                               handleObj = eventType[ j ];
+                       for ( i = 0, l = this.length; i < l; i++ ) {
+                               cur = this[i];
 
-                               if ( ( mappedTypes || origType === handleObj.origType ) &&
-                                        ( !handler || handler.guid === handleObj.guid ) &&
-                                        ( !namespaces || namespaces.test( handleObj.namespace ) ) &&
-                                        ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {
-                                       eventType.splice( j--, 1 );
+                               while ( cur ) {
+                                       if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {
+                                               ret.push( cur );
+                                               break;
 
-                                       if ( handleObj.selector ) {
-                                               eventType.delegateCount--;
-                                       }
-                                       if ( special.remove ) {
-                                               special.remove.call( elem, handleObj );
+                                       } else {
+                                               cur = cur.parentNode;
+                                               if ( !cur || !cur.ownerDocument || cur === context || cur.nodeType === 11 ) {
+                                                       break;
+                                               }
                                        }
                                }
                        }
 
-                       // Remove generic event handler if we removed something and no more handlers exist
-                       // (avoids potential for endless recursion during removal of special event handlers)
-                       if ( eventType.length === 0 && origCount !== eventType.length ) {
-                               if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
-                                       jQuery.removeEvent( elem, type, elemData.handle );
-                               }
-
-                               delete events[ type ];
-                       }
-               }
-
-               // Remove the expando if it's no longer used
-               if ( jQuery.isEmptyObject( events ) ) {
-                       delete elemData.handle;
-
-                       // removeData also checks for emptiness and clears the expando if empty
-                       // so use it instead of delete
-                       jQuery.removeData( elem, "events", true );
-               }
-       },
-
-       // Events that are safe to short-circuit if no handlers are attached.
-       // Native DOM events should not be added, they may have inline handlers.
-       customEvent: {
-               "getData": true,
-               "setData": true,
-               "changeData": true
-       },
-
-       trigger: function( event, data, elem, onlyHandlers ) {
-               // Don't do events on text and comment nodes
-               if ( elem && (elem.nodeType === 3 || elem.nodeType === 8) ) {
-                       return;
-               }
-
-               // Event object or event type
-               var cache, exclusive, i, cur, old, ontype, special, handle, eventPath, bubbleType,
-                       type = event.type || event,
-                       namespaces = [];
+                       ret = ret.length > 1 ? jQuery.unique( ret ) : ret;
 
-               // focus/blur morphs to focusin/out; ensure we're not firing them right now
-               if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
-                       return;
-               }
-
-               if ( type.indexOf( "!" ) >= 0 ) {
-                       // Exclusive events trigger only for the exact event (no namespaces)
-                       type = type.slice(0, -1);
-                       exclusive = true;
-               }
+                       return this.pushStack( ret, "closest", selectors );
+               },
 
-               if ( type.indexOf( "." ) >= 0 ) {
-                       // Namespaced trigger; create a regexp to match event type in handle()
-                       namespaces = type.split(".");
-                       type = namespaces.shift();
-                       namespaces.sort();
-               }
+               // Determine the position of an element within
+               // the matched set of elements
+               index: function( elem ) {
 
-               if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) {
-                       // No jQuery handlers for this event type, and it can't have inline handlers
-                       return;
-               }
+                       // No argument, return index in parent
+                       if ( !elem ) {
+                               return ( this[0] && this[0].parentNode ) ? this.prevAll().length : -1;
+                       }
 
-               // Caller can pass in an Event, Object, or just an event type string
-               event = typeof event === "object" ?
-                       // jQuery.Event object
-                       event[ jQuery.expando ] ? event :
-                       // Object literal
-                       new jQuery.Event( type, event ) :
-                       // Just the event type (string)
-                       new jQuery.Event( type );
+                       // index in selector
+                       if ( typeof elem === "string" ) {
+                               return jQuery.inArray( this[0], jQuery( elem ) );
+                       }
 
-               event.type = type;
-               event.isTrigger = true;
-               event.exclusive = exclusive;
-               event.namespace = namespaces.join( "." );
-               event.namespace_re = event.namespace? new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)") : null;
-               ontype = type.indexOf( ":" ) < 0 ? "on" + type : "";
+                       // 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 );
+               },
 
-               // Handle a global trigger
-               if ( !elem ) {
+               add: function( selector, context ) {
+                       var set = typeof selector === "string" ?
+                                       jQuery( selector, context ) :
+                                       jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),
+                               all = jQuery.merge( this.get(), set );
 
-                       // TODO: Stop taunting the data cache; remove global events and always attach to document
-                       cache = jQuery.cache;
-                       for ( i in cache ) {
-                               if ( cache[ i ].events && cache[ i ].events[ type ] ) {
-                                       jQuery.event.trigger( event, data, cache[ i ].handle.elem, true );
-                               }
-                       }
-                       return;
-               }
+                       return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ?
+                               all :
+                               jQuery.unique( all ) );
+               },
 
-               // Clean up the event in case it is being reused
-               event.result = undefined;
-               if ( !event.target ) {
-                       event.target = elem;
+               andSelf: function() {
+                       return this.add( this.prevObject );
                }
+       });
 
-               // Clone any incoming data and prepend the event, creating the handler arg list
-               data = data != null ? jQuery.makeArray( data ) : [];
-               data.unshift( event );
+// 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;
+       }
 
-               // Allow special events to draw outside the lines
-               special = jQuery.event.special[ type ] || {};
-               if ( special.trigger && special.trigger.apply( elem, data ) === false ) {
-                       return;
+       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 );
 
-               // Determine event propagation path in advance, per W3C events spec (#9951)
-               // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
-               eventPath = [[ elem, special.bindType || type ]];
-               if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
-
-                       bubbleType = special.delegateType || type;
-                       cur = rfocusMorph.test( bubbleType + type ) ? elem : elem.parentNode;
-                       for ( old = elem; cur; cur = cur.parentNode ) {
-                               eventPath.push([ cur, bubbleType ]);
-                               old = cur;
+                       if ( !runtil.test( name ) ) {
+                               selector = until;
                        }
 
-                       // Only add window if we got to document (e.g., not plain obj or detached DOM)
-                       if ( old === (elem.ownerDocument || document) ) {
-                               eventPath.push([ old.defaultView || old.parentWindow || window, bubbleType ]);
+                       if ( selector && typeof selector === "string" ) {
+                               ret = jQuery.filter( selector, ret );
                        }
-               }
-
-               // Fire handlers on the event path
-               for ( i = 0; i < eventPath.length && !event.isPropagationStopped(); i++ ) {
 
-                       cur = eventPath[i][0];
-                       event.type = eventPath[i][1];
+                       ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret;
 
-                       handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" );
-                       if ( handle ) {
-                               handle.apply( cur, data );
-                       }
-                       // Note that this is a bare JS function and not a jQuery handler
-                       handle = ontype && cur[ ontype ];
-                       if ( handle && jQuery.acceptData( cur ) && handle.apply( cur, data ) === false ) {
-                               event.preventDefault();
+                       if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) {
+                               ret = ret.reverse();
                        }
-               }
-               event.type = type;
-
-               // If nobody prevented the default action, do it now
-               if ( !onlyHandlers && !event.isDefaultPrevented() ) {
 
-                       if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) &&
-                               !(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) {
-
-                               // Call a native DOM method on the target with the same name name as the event.
-                               // Can't use an .isFunction() check here because IE6/7 fails that test.
-                               // Don't do default actions on window, that's where global variables be (#6170)
-                               // IE<9 dies on focus/blur to hidden element (#1486)
-                               if ( ontype && elem[ type ] && ((type !== "focus" && type !== "blur") || event.target.offsetWidth !== 0) && !jQuery.isWindow( elem ) ) {
+                       return this.pushStack( ret, name, slice.call( arguments ).join(",") );
+               };
+       });
 
-                                       // Don't re-trigger an onFOO event when we call its FOO() method
-                                       old = elem[ ontype ];
+       jQuery.extend({
+               filter: function( expr, elems, not ) {
+                       if ( not ) {
+                               expr = ":not(" + expr + ")";
+                       }
 
-                                       if ( old ) {
-                                               elem[ ontype ] = null;
-                                       }
+                       return elems.length === 1 ?
+                               jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] :
+                               jQuery.find.matches(expr, elems);
+               },
 
-                                       // Prevent re-triggering of the same event, since we already bubbled it above
-                                       jQuery.event.triggered = type;
-                                       elem[ type ]();
-                                       jQuery.event.triggered = undefined;
+               dir: function( elem, dir, until ) {
+                       var matched = [],
+                               cur = elem[ dir ];
 
-                                       if ( old ) {
-                                               elem[ ontype ] = old;
-                                       }
+                       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;
+               },
 
-               return event.result;
-       },
+               nth: function( cur, result, dir, elem ) {
+                       result = result || 1;
+                       var num = 0;
 
-       dispatch: function( event ) {
+                       for ( ; cur; cur = cur[dir] ) {
+                               if ( cur.nodeType === 1 && ++num === result ) {
+                                       break;
+                               }
+                       }
 
-               // Make a writable jQuery.Event from the native event object
-               event = jQuery.event.fix( event || window.event );
+                       return cur;
+               },
 
-               var i, j, cur, jqcur, ret, selMatch, matched, matches, handleObj, sel, related,
-                       handlers = ( (jQuery._data( this, "events" ) || {} )[ event.type ] || []),
-                       delegateCount = handlers.delegateCount,
-                       args = [].slice.call( arguments ),
-                       run_all = !event.exclusive && !event.namespace,
-                       special = jQuery.event.special[ event.type ] || {},
-                       handlerQueue = [];
+               sibling: function( n, elem ) {
+                       var r = [];
 
-               // Use the fix-ed jQuery.Event rather than the (read-only) native event
-               args[0] = event;
-               event.delegateTarget = this;
+                       for ( ; n; n = n.nextSibling ) {
+                               if ( n.nodeType === 1 && n !== elem ) {
+                                       r.push( n );
+                               }
+                       }
 
-               // Call the preDispatch hook for the mapped type, and let it bail if desired
-               if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
-                       return;
+                       return r;
                }
+       });
 
-               // Determine handlers that should run if there are delegated events
-               // Avoid non-left-click bubbling in Firefox (#3861)
-               if ( delegateCount && !(event.button && event.type === "click") ) {
+// Implement the identical functionality for filter and not
+       function winnow( elements, qualifier, keep ) {
 
-                       // Pregenerate a single jQuery object for reuse with .is()
-                       jqcur = jQuery(this);
-                       jqcur.context = this;
+               // Can't pass null or undefined to indexOf in Firefox 4
+               // Set to 0 to skip string check
+               qualifier = qualifier || 0;
 
-                       for ( cur = event.target; cur != this; cur = cur.parentNode || this ) {
+               if ( jQuery.isFunction( qualifier ) ) {
+                       return jQuery.grep(elements, function( elem, i ) {
+                               var retVal = !!qualifier.call( elem, i, elem );
+                               return retVal === keep;
+                       });
 
-                               // Don't process clicks (ONLY) on disabled elements (#6911, #8165, #xxxx)
-                               if ( cur.disabled !== true || event.type !== "click" ) {
-                                       selMatch = {};
-                                       matches = [];
-                                       jqcur[0] = cur;
-                                       for ( i = 0; i < delegateCount; i++ ) {
-                                               handleObj = handlers[ i ];
-                                               sel = handleObj.selector;
+               } else if ( qualifier.nodeType ) {
+                       return jQuery.grep(elements, function( elem, i ) {
+                               return ( elem === qualifier ) === keep;
+                       });
 
-                                               if ( selMatch[ sel ] === undefined ) {
-                                                       selMatch[ sel ] = jqcur.is( sel );
-                                               }
-                                               if ( selMatch[ sel ] ) {
-                                                       matches.push( handleObj );
-                                               }
-                                       }
-                                       if ( matches.length ) {
-                                               handlerQueue.push({ elem: cur, matches: matches });
-                                       }
-                               }
-                       }
-               }
+               } else if ( typeof qualifier === "string" ) {
+                       var filtered = jQuery.grep(elements, function( elem ) {
+                               return elem.nodeType === 1;
+                       });
 
-               // Add the remaining (directly-bound) handlers
-               if ( handlers.length > delegateCount ) {
-                       handlerQueue.push({ elem: this, matches: handlers.slice( delegateCount ) });
+                       if ( isSimple.test( qualifier ) ) {
+                               return jQuery.filter(qualifier, filtered, !keep);
+                       } else {
+                               qualifier = jQuery.filter( qualifier, filtered );
+                       }
                }
 
-               // Run delegates first; they may want to stop propagation beneath us
-               for ( i = 0; i < handlerQueue.length && !event.isPropagationStopped(); i++ ) {
-                       matched = handlerQueue[ i ];
-                       event.currentTarget = matched.elem;
+               return jQuery.grep(elements, function( elem, i ) {
+                       return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep;
+               });
+       }
 
-                       for ( j = 0; j < matched.matches.length && !event.isImmediatePropagationStopped(); j++ ) {
-                               handleObj = matched.matches[ j ];
 
-                               // Triggered event must either 1) be non-exclusive and have no namespace, or
-                               // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).
-                               if ( run_all || (!event.namespace && !handleObj.namespace) || event.namespace_re && event.namespace_re.test( handleObj.namespace ) ) {
 
-                                       event.data = handleObj.data;
-                                       event.handleObj = handleObj;
 
-                                       ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )
-                                                       .apply( matched.elem, args );
+       function createSafeFragment( document ) {
+               var list = nodeNames.split( "|" ),
+                       safeFrag = document.createDocumentFragment();
 
-                                       if ( ret !== undefined ) {
-                                               event.result = ret;
-                                               if ( ret === false ) {
-                                                       event.preventDefault();
-                                                       event.stopPropagation();
-                                               }
-                                       }
-                               }
+               if ( safeFrag.createElement ) {
+                       while ( list.length ) {
+                               safeFrag.createElement(
+                                       list.pop()
+                               );
                        }
                }
+               return safeFrag;
+       }
 
-               // Call the postDispatch hook for the mapped type
-               if ( special.postDispatch ) {
-                       special.postDispatch.call( this, event );
-               }
-
-               return event.result;
-       },
+       var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" +
+                       "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",
+               rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g,
+               rleadingWhitespace = /^\s+/,
+               rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,
+               rtagName = /<([\w:]+)/,
+               rtbody = /<tbody/i,
+               rhtml = /<|&#?\w+;/,
+               rnoInnerhtml = /<(?:script|style)/i,
+               rnocache = /<(?:script|object|embed|option|style)/i,
+               rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"),
+       // checked="checked" or checked
+               rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
+               rscriptType = /\/(java|ecma)script/i,
+               rcleanScript = /^\s*<!(?:\[CDATA\[|\-\-)/,
+               wrapMap = {
+                       option: [ 1, "<select multiple='multiple'>", "</select>" ],
+                       legend: [ 1, "<fieldset>", "</fieldset>" ],
+                       thead: [ 1, "<table>", "</table>" ],
+                       tr: [ 2, "<table><tbody>", "</tbody></table>" ],
+                       td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
+                       col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
+                       area: [ 1, "<map>", "</map>" ],
+                       _default: [ 0, "", "" ]
+               },
+               safeFragment = createSafeFragment( document );
 
-       // Includes some event props shared by KeyEvent and MouseEvent
-       // *** attrChange attrName relatedNode srcElement  are not normalized, non-W3C, deprecated, will be removed in 1.8 ***
-       props: "attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
+       wrapMap.optgroup = wrapMap.option;
+       wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
+       wrapMap.th = wrapMap.td;
 
-       fixHooks: {},
+// IE can't serialize <link> and <script> tags normally
+       if ( !jQuery.support.htmlSerialize ) {
+               wrapMap._default = [ 1, "div<div>", "</div>" ];
+       }
 
-       keyHooks: {
-               props: "char charCode key keyCode".split(" "),
-               filter: function( event, original ) {
+       jQuery.fn.extend({
+               text: function( value ) {
+                       return jQuery.access( this, function( value ) {
+                               return value === undefined ?
+                                       jQuery.text( this ) :
+                                       this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) );
+                       }, null, value, arguments.length );
+               },
 
-                       // Add which for key events
-                       if ( event.which == null ) {
-                               event.which = original.charCode != null ? original.charCode : original.keyCode;
+               wrapAll: function( html ) {
+                       if ( jQuery.isFunction( html ) ) {
+                               return this.each(function(i) {
+                                       jQuery(this).wrapAll( html.call(this, i) );
+                               });
                        }
 
-                       return event;
-               }
-       },
-
-       mouseHooks: {
-               props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
-               filter: function( event, original ) {
-                       var eventDoc, doc, body,
-                               button = original.button,
-                               fromElement = original.fromElement;
+                       if ( this[0] ) {
+                               // The elements to wrap the target around
+                               var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
 
-                       // Calculate pageX/Y if missing and clientX/Y available
-                       if ( event.pageX == null && original.clientX != null ) {
-                               eventDoc = event.target.ownerDocument || document;
-                               doc = eventDoc.documentElement;
-                               body = eventDoc.body;
+                               if ( this[0].parentNode ) {
+                                       wrap.insertBefore( this[0] );
+                               }
 
-                               event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );
-                               event.pageY = original.clientY + ( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) - ( doc && doc.clientTop  || body && body.clientTop  || 0 );
-                       }
+                               wrap.map(function() {
+                                       var elem = this;
 
-                       // Add relatedTarget, if necessary
-                       if ( !event.relatedTarget && fromElement ) {
-                               event.relatedTarget = fromElement === event.target ? original.toElement : fromElement;
-                       }
+                                       while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
+                                               elem = elem.firstChild;
+                                       }
 
-                       // Add which for click: 1 === left; 2 === middle; 3 === right
-                       // Note: button is not normalized, so don't use it
-                       if ( !event.which && button !== undefined ) {
-                               event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
+                                       return elem;
+                               }).append( this );
                        }
 
-                       return event;
-               }
-       },
-
-       fix: function( event ) {
-               if ( event[ jQuery.expando ] ) {
-                       return event;
-               }
+                       return this;
+               },
 
-               // Create a writable copy of the event object and normalize some properties
-               var i, prop,
-                       originalEvent = event,
-                       fixHook = jQuery.event.fixHooks[ event.type ] || {},
-                       copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
+               wrapInner: function( html ) {
+                       if ( jQuery.isFunction( html ) ) {
+                               return this.each(function(i) {
+                                       jQuery(this).wrapInner( html.call(this, i) );
+                               });
+                       }
 
-               event = jQuery.Event( originalEvent );
+                       return this.each(function() {
+                               var self = jQuery( this ),
+                                       contents = self.contents();
 
-               for ( i = copy.length; i; ) {
-                       prop = copy[ --i ];
-                       event[ prop ] = originalEvent[ prop ];
-               }
+                               if ( contents.length ) {
+                                       contents.wrapAll( html );
 
-               // Fix target property, if necessary (#1925, IE 6/7/8 & Safari2)
-               if ( !event.target ) {
-                       event.target = originalEvent.srcElement || document;
-               }
+                               } else {
+                                       self.append( html );
+                               }
+                       });
+               },
 
-               // Target should not be a text node (#504, Safari)
-               if ( event.target.nodeType === 3 ) {
-                       event.target = event.target.parentNode;
-               }
+               wrap: function( html ) {
+                       var isFunction = jQuery.isFunction( html );
 
-               // For mouse/key events, metaKey==false if it's undefined (#3368, #11328; IE6/7/8)
-               event.metaKey = !!event.metaKey;
+                       return this.each(function(i) {
+                               jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );
+                       });
+               },
 
-               return fixHook.filter? fixHook.filter( event, originalEvent ) : event;
-       },
+               unwrap: function() {
+                       return this.parent().each(function() {
+                               if ( !jQuery.nodeName( this, "body" ) ) {
+                                       jQuery( this ).replaceWith( this.childNodes );
+                               }
+                       }).end();
+               },
 
-       special: {
-               ready: {
-                       // Make sure the ready event is setup
-                       setup: jQuery.bindReady
+               append: function() {
+                       return this.domManip(arguments, true, function( elem ) {
+                               if ( this.nodeType === 1 ) {
+                                       this.appendChild( elem );
+                               }
+                       });
                },
 
-               load: {
-                       // Prevent triggered image.load events from bubbling to window.load
-                       noBubble: true
+               prepend: function() {
+                       return this.domManip(arguments, true, function( elem ) {
+                               if ( this.nodeType === 1 ) {
+                                       this.insertBefore( elem, this.firstChild );
+                               }
+                       });
                },
 
-               focus: {
-                       delegateType: "focusin"
+               before: function() {
+                       if ( this[0] && this[0].parentNode ) {
+                               return this.domManip(arguments, false, function( elem ) {
+                                       this.parentNode.insertBefore( elem, this );
+                               });
+                       } else if ( arguments.length ) {
+                               var set = jQuery.clean( arguments );
+                               set.push.apply( set, this.toArray() );
+                               return this.pushStack( set, "before", arguments );
+                       }
                },
-               blur: {
-                       delegateType: "focusout"
+
+               after: function() {
+                       if ( this[0] && this[0].parentNode ) {
+                               return this.domManip(arguments, false, function( elem ) {
+                                       this.parentNode.insertBefore( elem, this.nextSibling );
+                               });
+                       } else if ( arguments.length ) {
+                               var set = this.pushStack( this, "after", arguments );
+                               set.push.apply( set, jQuery.clean(arguments) );
+                               return set;
+                       }
                },
 
-               beforeunload: {
-                       setup: function( data, namespaces, eventHandle ) {
-                               // We only want to do this special case on windows
-                               if ( jQuery.isWindow( this ) ) {
-                                       this.onbeforeunload = eventHandle;
-                               }
-                       },
+               // keepData is for internal use only--do not document
+               remove: function( selector, keepData ) {
+                       for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
+                               if ( !selector || jQuery.filter( selector, [ elem ] ).length ) {
+                                       if ( !keepData && elem.nodeType === 1 ) {
+                                               jQuery.cleanData( elem.getElementsByTagName("*") );
+                                               jQuery.cleanData( [ elem ] );
+                                       }
 
-                       teardown: function( namespaces, eventHandle ) {
-                               if ( this.onbeforeunload === eventHandle ) {
-                                       this.onbeforeunload = null;
+                                       if ( elem.parentNode ) {
+                                               elem.parentNode.removeChild( elem );
+                                       }
                                }
                        }
-               }
-       },
-
-       simulate: function( type, elem, event, bubble ) {
-               // Piggyback on a donor event to simulate a different one.
-               // Fake originalEvent to avoid donor's stopPropagation, but if the
-               // simulated event prevents default then we do the same on the donor.
-               var e = jQuery.extend(
-                       new jQuery.Event(),
-                       event,
-                       { type: type,
-                               isSimulated: true,
-                               originalEvent: {}
-                       }
-               );
-               if ( bubble ) {
-                       jQuery.event.trigger( e, null, elem );
-               } else {
-                       jQuery.event.dispatch.call( elem, e );
-               }
-               if ( e.isDefaultPrevented() ) {
-                       event.preventDefault();
-               }
-       }
-};
-
-// Some plugins are using, but it's undocumented/deprecated and will be removed.
-// The 1.7 special event interface should provide all the hooks needed now.
-jQuery.event.handle = jQuery.event.dispatch;
 
-jQuery.removeEvent = document.removeEventListener ?
-       function( elem, type, handle ) {
-               if ( elem.removeEventListener ) {
-                       elem.removeEventListener( type, handle, false );
-               }
-       } :
-       function( elem, type, handle ) {
-               var name = "on" + type;
+                       return this;
+               },
 
-               if ( elem.detachEvent ) {
+               empty: function() {
+                       for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
+                               // Remove element nodes and prevent memory leaks
+                               if ( elem.nodeType === 1 ) {
+                                       jQuery.cleanData( elem.getElementsByTagName("*") );
+                               }
 
-                       // #8545, #7054, preventing memory leaks for custom events in IE6-8 –
-                       // detachEvent needed property on element, by name of that event, to properly expose it to GC
-                       if ( typeof elem[ name ] === "undefined" ) {
-                               elem[ name ] = null;
+                               // Remove any remaining nodes
+                               while ( elem.firstChild ) {
+                                       elem.removeChild( elem.firstChild );
+                               }
                        }
 
-                       elem.detachEvent( name, handle );
-               }
-       };
+                       return this;
+               },
 
-jQuery.Event = function( src, props ) {
-       // Allow instantiation without the 'new' keyword
-       if ( !(this instanceof jQuery.Event) ) {
-               return new jQuery.Event( src, props );
-       }
+               clone: function( dataAndEvents, deepDataAndEvents ) {
+                       dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
+                       deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
 
-       // Event object
-       if ( src && src.type ) {
-               this.originalEvent = src;
-               this.type = src.type;
+                       return this.map( function () {
+                               return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
+                       });
+               },
 
-               // Events bubbling up the document may have been marked as prevented
-               // by a handler lower down the tree; reflect the correct value.
-               this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false ||
-                       src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse;
+               html: function( value ) {
+                       return jQuery.access( this, function( value ) {
+                               var elem = this[0] || {},
+                                       i = 0,
+                                       l = this.length;
 
-       // Event type
-       } else {
-               this.type = src;
-       }
+                               if ( value === undefined ) {
+                                       return elem.nodeType === 1 ?
+                                               elem.innerHTML.replace( rinlinejQuery, "" ) :
+                                               null;
+                               }
 
-       // Put explicitly provided properties onto the event object
-       if ( props ) {
-               jQuery.extend( this, props );
-       }
 
-       // Create a timestamp if incoming event doesn't have one
-       this.timeStamp = src && src.timeStamp || jQuery.now();
+                               if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
+                                       ( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&
+                                       !wrapMap[ ( rtagName.exec( value ) || ["", ""] )[1].toLowerCase() ] ) {
 
-       // Mark it as fixed
-       this[ jQuery.expando ] = true;
-};
+                                       value = value.replace( rxhtmlTag, "<$1></$2>" );
 
-function returnFalse() {
-       return false;
-}
-function returnTrue() {
-       return true;
-}
+                                       try {
+                                               for (; i < l; i++ ) {
+                                                       // Remove element nodes and prevent memory leaks
+                                                       elem = this[i] || {};
+                                                       if ( elem.nodeType === 1 ) {
+                                                               jQuery.cleanData( elem.getElementsByTagName( "*" ) );
+                                                               elem.innerHTML = value;
+                                                       }
+                                               }
 
-// 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;
+                                               elem = 0;
 
-               var e = this.originalEvent;
-               if ( !e ) {
-                       return;
-               }
+                                               // If using innerHTML throws an exception, use the fallback method
+                                       } catch(e) {}
+                               }
 
-               // if preventDefault exists run it on the original event
-               if ( e.preventDefault ) {
-                       e.preventDefault();
+                               if ( elem ) {
+                                       this.empty().append( value );
+                               }
+                       }, null, value, arguments.length );
+               },
 
-               // otherwise set the returnValue property of the original event to false (IE)
-               } else {
-                       e.returnValue = false;
-               }
-       },
-       stopPropagation: function() {
-               this.isPropagationStopped = returnTrue;
+               replaceWith: function( value ) {
+                       if ( this[0] && this[0].parentNode ) {
+                               // Make sure that the elements are removed from the DOM before they are inserted
+                               // this can help fix replacing a parent with child elements
+                               if ( jQuery.isFunction( value ) ) {
+                                       return this.each(function(i) {
+                                               var self = jQuery(this), old = self.html();
+                                               self.replaceWith( value.call( this, i, old ) );
+                                       });
+                               }
 
-               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
-};
+                               if ( typeof value !== "string" ) {
+                                       value = jQuery( value ).detach();
+                               }
 
-// Create mouseenter/leave events using mouseover/out and event-time checks
-jQuery.each({
-       mouseenter: "mouseover",
-       mouseleave: "mouseout"
-}, function( orig, fix ) {
-       jQuery.event.special[ orig ] = {
-               delegateType: fix,
-               bindType: fix,
-
-               handle: function( event ) {
-                       var ret,
-                               target = this,
-                               related = event.relatedTarget,
-                               handleObj = event.handleObj,
-                               selector = handleObj.selector;
-
-                       // For mousenter/leave call the handler if related is outside the target.
-                       // NB: No relatedTarget if the mouse left/entered the browser window
-                       if ( !related || (related !== target && !jQuery.contains( target, related )) ) {
-                               event.type = handleObj.origType;
-                               ret = handleObj.handler.apply( this, arguments );
-                               event.type = fix;
-                       }
-                       return ret;
-               }
-       };
-});
+                               return this.each(function() {
+                                       var next = this.nextSibling,
+                                               parent = this.parentNode;
 
-// IE submit delegation
-if ( !jQuery.support.submitBubbles ) {
+                                       jQuery( this ).remove();
 
-       jQuery.event.special.submit = {
-               setup: function() {
-                       // Only need this for delegated form submit events
-                       if ( jQuery.nodeName( this, "form" ) ) {
-                               return false;
+                                       if ( next ) {
+                                               jQuery(next).before( value );
+                                       } else {
+                                               jQuery(parent).append( value );
+                                       }
+                               });
+                       } else {
+                               return this.length ?
+                                       this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value ) :
+                                       this;
                        }
+               },
 
-                       // Lazy-add a submit handler when a descendant form may potentially be submitted
-                       jQuery.event.add( this, "click._submit keypress._submit", function( e ) {
-                               // Node name check avoids a VML-related crash in IE (#9807)
-                               var elem = e.target,
-                                       form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined;
-                               if ( form && !jQuery._data( form, "_submit_attached" ) ) {
-                                       jQuery.event.add( form, "submit._submit", function( event ) {
-                                               event._submit_bubble = true;
-                                       });
-                                       jQuery._data( form, "_submit_attached", true );
-                               }
-                       });
-                       // return undefined since we don't need an event listener
+               detach: function( selector ) {
+                       return this.remove( selector, true );
                },
 
-               postDispatch: function( event ) {
-                       // If form was submitted by the user, bubble the event up the tree
-                       if ( event._submit_bubble ) {
-                               delete event._submit_bubble;
-                               if ( this.parentNode && !event.isTrigger ) {
-                                       jQuery.event.simulate( "submit", this.parentNode, event, true );
-                               }
+               domManip: function( args, table, callback ) {
+                       var results, first, fragment, parent,
+                               value = args[0],
+                               scripts = [];
+
+                       // We can't cloneNode fragments that contain checked, in WebKit
+                       if ( !jQuery.support.checkClone && arguments.length === 3 && typeof value === "string" && rchecked.test( value ) ) {
+                               return this.each(function() {
+                                       jQuery(this).domManip( args, table, callback, true );
+                               });
                        }
-               },
 
-               teardown: function() {
-                       // Only need this for delegated form submit events
-                       if ( jQuery.nodeName( this, "form" ) ) {
-                               return false;
+                       if ( jQuery.isFunction(value) ) {
+                               return this.each(function(i) {
+                                       var self = jQuery(this);
+                                       args[0] = value.call(this, i, table ? self.html() : undefined);
+                                       self.domManip( args, table, callback );
+                               });
                        }
 
-                       // Remove delegated handlers; cleanData eventually reaps submit handlers attached above
-                       jQuery.event.remove( this, "._submit" );
-               }
-       };
-}
+                       if ( this[0] ) {
+                               parent = value && value.parentNode;
 
-// IE change delegation and checkbox/radio fix
-if ( !jQuery.support.changeBubbles ) {
+                               // If we're in a fragment, just use that instead of building a new one
+                               if ( jQuery.support.parentNode && parent && parent.nodeType === 11 && parent.childNodes.length === this.length ) {
+                                       results = { fragment: parent };
 
-       jQuery.event.special.change = {
+                               } else {
+                                       results = jQuery.buildFragment( args, this, scripts );
+                               }
 
-               setup: function() {
+                               fragment = results.fragment;
 
-                       if ( rformElems.test( this.nodeName ) ) {
-                               // IE doesn't fire change on a check/radio until blur; trigger it on click
-                               // after a propertychange. Eat the blur-change in special.change.handle.
-                               // This still fires onchange a second time for check/radio after blur.
-                               if ( this.type === "checkbox" || this.type === "radio" ) {
-                                       jQuery.event.add( this, "propertychange._change", function( event ) {
-                                               if ( event.originalEvent.propertyName === "checked" ) {
-                                                       this._just_changed = true;
-                                               }
-                                       });
-                                       jQuery.event.add( this, "click._change", function( event ) {
-                                               if ( this._just_changed && !event.isTrigger ) {
-                                                       this._just_changed = false;
-                                               }
-                                               // Allow triggered, simulated change events (#11500)
-                                               jQuery.event.simulate( "change", this, event, true );
-                                       });
+                               if ( fragment.childNodes.length === 1 ) {
+                                       first = fragment = fragment.firstChild;
+                               } else {
+                                       first = fragment.firstChild;
                                }
-                               return false;
-                       }
-                       // Delegated event; lazy-add a change handler on descendant inputs
-                       jQuery.event.add( this, "beforeactivate._change", function( e ) {
-                               var elem = e.target;
 
-                               if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "_change_attached" ) ) {
-                                       jQuery.event.add( elem, "change._change", function( event ) {
-                                               if ( this.parentNode && !event.isSimulated && !event.isTrigger ) {
-                                                       jQuery.event.simulate( "change", this.parentNode, event, true );
+                               if ( first ) {
+                                       table = table && jQuery.nodeName( first, "tr" );
+
+                                       for ( var i = 0, l = this.length, lastIndex = l - 1; i < l; i++ ) {
+                                               callback.call(
+                                                       table ?
+                                                               root(this[i], first) :
+                                                               this[i],
+                                                       // Make sure that we do not leak memory by inadvertently discarding
+                                                       // the original fragment (which might have attached data) instead of
+                                                       // using it; in addition, use the original fragment object for the last
+                                                       // item instead of first because it can end up being emptied incorrectly
+                                                       // in certain situations (Bug #8070).
+                                                       // Fragments from the fragment cache must always be cloned and never used
+                                                       // in place.
+                                                       results.cacheable || ( l > 1 && i < lastIndex ) ?
+                                                               jQuery.clone( fragment, true, true ) :
+                                                               fragment
+                                               );
+                                       }
+                               }
+
+                               if ( scripts.length ) {
+                                       jQuery.each( scripts, function( i, elem ) {
+                                               if ( elem.src ) {
+                                                       jQuery.ajax({
+                                                               type: "GET",
+                                                               global: false,
+                                                               url: elem.src,
+                                                               async: false,
+                                                               dataType: "script"
+                                                       });
+                                               } else {
+                                                       jQuery.globalEval( ( elem.text || elem.textContent || elem.innerHTML || "" ).replace( rcleanScript, "/*$0*/" ) );
+                                               }
+
+                                               if ( elem.parentNode ) {
+                                                       elem.parentNode.removeChild( elem );
                                                }
                                        });
-                                       jQuery._data( elem, "_change_attached", true );
                                }
-                       });
-               },
+                       }
 
-               handle: function( event ) {
-                       var elem = event.target;
+                       return this;
+               }
+       });
 
-                       // Swallow native change events from checkbox/radio, we already triggered them above
-                       if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) {
-                               return event.handleObj.handler.apply( this, arguments );
-                       }
-               },
+       function root( elem, cur ) {
+               return jQuery.nodeName(elem, "table") ?
+                       (elem.getElementsByTagName("tbody")[0] ||
+                               elem.appendChild(elem.ownerDocument.createElement("tbody"))) :
+                       elem;
+       }
 
-               teardown: function() {
-                       jQuery.event.remove( this, "._change" );
+       function cloneCopyEvent( src, dest ) {
 
-                       return rformElems.test( this.nodeName );
+               if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
+                       return;
                }
-       };
-}
 
-// Create "bubbling" focus and blur events
-if ( !jQuery.support.focusinBubbles ) {
-       jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
+               var type, i, l,
+                       oldData = jQuery._data( src ),
+                       curData = jQuery._data( dest, oldData ),
+                       events = oldData.events;
 
-               // Attach a single capturing handler while someone wants focusin/focusout
-               var attaches = 0,
-                       handler = function( event ) {
-                               jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );
-                       };
+               if ( events ) {
+                       delete curData.handle;
+                       curData.events = {};
 
-               jQuery.event.special[ fix ] = {
-                       setup: function() {
-                               if ( attaches++ === 0 ) {
-                                       document.addEventListener( orig, handler, true );
-                               }
-                       },
-                       teardown: function() {
-                               if ( --attaches === 0 ) {
-                                       document.removeEventListener( orig, handler, true );
+                       for ( type in events ) {
+                               for ( i = 0, l = events[ type ].length; i < l; i++ ) {
+                                       jQuery.event.add( dest, type, events[ type ][ i ] );
                                }
                        }
-               };
-       });
-}
+               }
 
-jQuery.fn.extend({
+               // make the cloned public data object a copy from the original
+               if ( curData.data ) {
+                       curData.data = jQuery.extend( {}, curData.data );
+               }
+       }
 
-       on: function( types, selector, data, fn, /*INTERNAL*/ one ) {
-               var origFn, type;
+       function cloneFixAttributes( src, dest ) {
+               var nodeName;
 
-               // Types can be a map of types/handlers
-               if ( typeof types === "object" ) {
-                       // ( types-Object, selector, data )
-                       if ( typeof selector !== "string" ) { // && selector != null
-                               // ( types-Object, data )
-                               data = data || selector;
-                               selector = undefined;
-                       }
-                       for ( type in types ) {
-                               this.on( type, selector, data, types[ type ], one );
-                       }
-                       return this;
+               // We do not need to do anything for non-Elements
+               if ( dest.nodeType !== 1 ) {
+                       return;
                }
 
-               if ( data == null && fn == null ) {
-                       // ( types, fn )
-                       fn = selector;
-                       data = selector = undefined;
-               } else if ( fn == null ) {
-                       if ( typeof selector === "string" ) {
-                               // ( types, selector, fn )
-                               fn = data;
-                               data = undefined;
-                       } else {
-                               // ( types, data, fn )
-                               fn = data;
-                               data = selector;
-                               selector = undefined;
-                       }
-               }
-               if ( fn === false ) {
-                       fn = returnFalse;
-               } else if ( !fn ) {
-                       return this;
+               // clearAttributes removes the attributes, which we don't want,
+               // but also removes the attachEvent events, which we *do* want
+               if ( dest.clearAttributes ) {
+                       dest.clearAttributes();
                }
 
-               if ( one === 1 ) {
-                       origFn = fn;
-                       fn = function( event ) {
-                               // Can use an empty set, since event contains the info
-                               jQuery().off( event );
-                               return origFn.apply( this, arguments );
-                       };
-                       // Use same guid so caller can remove using origFn
-                       fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
-               }
-               return this.each( function() {
-                       jQuery.event.add( this, types, fn, data, selector );
-               });
-       },
-       one: function( types, selector, data, fn ) {
-               return this.on( types, selector, data, fn, 1 );
-       },
-       off: function( types, selector, fn ) {
-               var handleObj, type;
-               if ( types && types.preventDefault && types.handleObj ) {
-                       // ( event )  dispatched jQuery.Event
-                       handleObj = types.handleObj;
-                       jQuery( types.delegateTarget ).off(
-                               handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType,
-                               handleObj.selector,
-                               handleObj.handler
-                       );
-                       return this;
-               }
-               if ( typeof types === "object" ) {
-                       // ( types-object [, selector] )
-                       for ( type in types ) {
-                               this.off( type, selector, types[ type ] );
-                       }
-                       return this;
-               }
-               if ( selector === false || typeof selector === "function" ) {
-                       // ( types [, fn] )
-                       fn = selector;
-                       selector = undefined;
-               }
-               if ( fn === false ) {
-                       fn = returnFalse;
+               // mergeAttributes, in contrast, only merges back on the
+               // original attributes, not the events
+               if ( dest.mergeAttributes ) {
+                       dest.mergeAttributes( src );
                }
-               return this.each(function() {
-                       jQuery.event.remove( this, types, fn, selector );
-               });
-       },
-
-       bind: function( types, data, fn ) {
-               return this.on( types, null, data, fn );
-       },
-       unbind: function( types, fn ) {
-               return this.off( types, null, fn );
-       },
-
-       live: function( types, data, fn ) {
-               jQuery( this.context ).on( types, this.selector, data, fn );
-               return this;
-       },
-       die: function( types, fn ) {
-               jQuery( this.context ).off( types, this.selector || "**", fn );
-               return this;
-       },
-
-       delegate: function( selector, types, data, fn ) {
-               return this.on( types, selector, data, fn );
-       },
-       undelegate: function( selector, types, fn ) {
-               // ( namespace ) or ( selector, types [, fn] )
-               return arguments.length == 1? this.off( selector, "**" ) : this.off( types, selector || "**", fn );
-       },
-
-       trigger: function( type, data ) {
-               return this.each(function() {
-                       jQuery.event.trigger( type, data, this );
-               });
-       },
-       triggerHandler: function( type, data ) {
-               if ( this[0] ) {
-                       return jQuery.event.trigger( type, data, this[0], true );
-               }
-       },
-
-       toggle: function( fn ) {
-               // Save reference to arguments for access in closure
-               var args = arguments,
-                       guid = fn.guid || jQuery.guid++,
-                       i = 0,
-                       toggler = 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();
+               nodeName = dest.nodeName.toLowerCase();
 
-                               // and execute the function
-                               return args[ lastToggle ].apply( this, arguments ) || false;
-                       };
+               // IE6-8 fail to clone children inside object elements that use
+               // the proprietary classid attribute value (rather than the type
+               // attribute) to identify the type of content to display
+               if ( nodeName === "object" ) {
+                       dest.outerHTML = src.outerHTML;
 
-               // link all the functions, so any of them can unbind this click handler
-               toggler.guid = guid;
-               while ( i < args.length ) {
-                       args[ i++ ].guid = guid;
-               }
+               } else if ( nodeName === "input" && (src.type === "checkbox" || src.type === "radio") ) {
+                       // IE6-8 fails to persist the checked state of a cloned checkbox
+                       // or radio button. Worse, IE6-7 fail to give the cloned element
+                       // a checked appearance if the defaultChecked value isn't also set
+                       if ( src.checked ) {
+                               dest.defaultChecked = dest.checked = src.checked;
+                       }
 
-               return this.click( toggler );
-       },
+                       // IE6-7 get confused and end up setting the value of a cloned
+                       // checkbox/radio button to an empty string instead of "on"
+                       if ( dest.value !== src.value ) {
+                               dest.value = src.value;
+                       }
 
-       hover: function( fnOver, fnOut ) {
-               return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
-       }
-});
+                       // IE6-8 fails to return the selected option to the default selected
+                       // state when cloning options
+               } else if ( nodeName === "option" ) {
+                       dest.selected = src.defaultSelected;
 
-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 contextmenu").split(" "), function( i, name ) {
+                       // IE6-8 fails to set the defaultValue to the correct value when
+                       // cloning other types of input fields
+               } else if ( nodeName === "input" || nodeName === "textarea" ) {
+                       dest.defaultValue = src.defaultValue;
 
-       // Handle event binding
-       jQuery.fn[ name ] = function( data, fn ) {
-               if ( fn == null ) {
-                       fn = data;
-                       data = null;
+                       // IE blanks contents when cloning scripts
+               } else if ( nodeName === "script" && dest.text !== src.text ) {
+                       dest.text = src.text;
                }
 
-               return arguments.length > 0 ?
-                       this.on( name, null, data, fn ) :
-                       this.trigger( name );
-       };
+               // Event data gets referenced instead of copied if the expando
+               // gets copied too
+               dest.removeAttribute( jQuery.expando );
 
-       if ( rkeyEvent.test( name ) ) {
-               jQuery.event.fixHooks[ name ] = jQuery.event.keyHooks;
+               // Clear flags for bubbling special change/submit events, they must
+               // be reattached when the newly cloned events are first activated
+               dest.removeAttribute( "_submit_attached" );
+               dest.removeAttribute( "_change_attached" );
        }
 
-       if ( rmouseEvent.test( name ) ) {
-               jQuery.event.fixHooks[ name ] = jQuery.event.mouseHooks;
-       }
-});
-/*!\r
- * Sizzle CSS Selector Engine\r
- *  Copyright 2012 jQuery Foundation and other contributors\r
- *  Released under the MIT license\r
- *  http://sizzlejs.com/\r
- */\r
-(function( window, undefined ) {\r
-\r
-var cachedruns,\r
-       dirruns,\r
-       sortOrder,\r
-       siblingCheck,\r
-       assertGetIdNotName,\r
-\r
-       document = window.document,\r
-       docElem = document.documentElement,\r
-\r
-       strundefined = "undefined",\r
-       hasDuplicate = false,\r
-       baseHasDuplicate = true,\r
-       done = 0,\r
-       slice = [].slice,\r
-       push = [].push,\r
-\r
-       expando = ( "sizcache" + Math.random() ).replace( ".", "" ),\r
-\r
-       // Regex\r
-\r
-       // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace\r
-       whitespace = "[\\x20\\t\\r\\n\\f]",\r
-       // http://www.w3.org/TR/css3-syntax/#characters\r
-       characterEncoding = "(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+",\r
-\r
-       // Loosely modeled on CSS identifier characters\r
-       // An unquoted value should be a CSS identifier (http://www.w3.org/TR/css3-selectors/#attribute-selectors)\r
-       // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\r
-       identifier = characterEncoding.replace( "w", "w#" ),\r
-\r
-       // Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors\r
-       operators = "([*^$|!~]?=)",\r
-       attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace +\r
-               "*(?:" + operators + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]",\r
-       pseudos = ":(" + characterEncoding + ")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|((?:[^,]|\\\\,|(?:,(?=[^\\[]*\\]))|(?:,(?=[^\\(]*\\))))*))\\)|)",\r
-       pos = ":(nth|eq|gt|lt|first|last|even|odd)(?:\\((\\d*)\\)|)(?=[^-]|$)",\r
-       combinators = whitespace + "*([\\x20\\t\\r\\n\\f>+~])" + whitespace + "*",\r
-       groups = "(?=[^\\x20\\t\\r\\n\\f])(?:\\\\.|" + attributes + "|" + pseudos.replace( 2, 7 ) + "|[^\\\\(),])+",\r
-\r
-       // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\r
-       rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),\r
-\r
-       rcombinators = new RegExp( "^" + combinators ),\r
-\r
-       // All simple (non-comma) selectors, excluding insignifant trailing whitespace\r
-       rgroups = new RegExp( groups + "?(?=" + whitespace + "*,|$)", "g" ),\r
-\r
-       // A selector, or everything after leading whitespace\r
-       // Optionally followed in either case by a ")" for terminating sub-selectors\r
-       rselector = new RegExp( "^(?:(?!,)(?:(?:^|,)" + whitespace + "*" + groups + ")*?|" + whitespace + "*(.*?))(\\)|$)" ),\r
-\r
-       // All combinators and selector components (attribute test, tag, pseudo, etc.), the latter appearing together when consecutive\r
-       rtokens = new RegExp( groups.slice( 19, -6 ) + "\\x20\\t\\r\\n\\f>+~])+|" + combinators, "g" ),\r
-\r
-       // Easily-parseable/retrievable ID or TAG or CLASS selectors\r
-       rquickExpr = /^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,\r
-\r
-       rsibling = /[\x20\t\r\n\f]*[+~]/,\r
-       rendsWithNot = /:not\($/,\r
-\r
-       rheader = /h\d/i,\r
-       rinputs = /input|select|textarea|button/i,\r
-\r
-       rbackslash = /\\(?!\\)/g,\r
-\r
-       matchExpr = {\r
-               "ID": new RegExp( "^#(" + characterEncoding + ")" ),\r
-               "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ),\r
-               "NAME": new RegExp( "^\\[name=['\"]?(" + characterEncoding + ")['\"]?\\]" ),\r
-               "TAG": new RegExp( "^(" + characterEncoding.replace( "[-", "[-\\*" ) + ")" ),\r
-               "ATTR": new RegExp( "^" + attributes ),\r
-               "PSEUDO": new RegExp( "^" + pseudos ),\r
-               "CHILD": new RegExp( "^:(only|nth|last|first)-child(?:\\(" + whitespace +\r
-                       "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +\r
-                       "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),\r
-               "POS": new RegExp( pos, "ig" ),\r
-               // For use in libraries implementing .is()\r
-               "needsContext": new RegExp( "^" + whitespace + "*[>+~]|" + pos, "i" )\r
-       },\r
-\r
-       classCache = {},\r
-       cachedClasses = [],\r
-       compilerCache = {},\r
-       cachedSelectors = [],\r
-\r
-       // Mark a function for use in filtering\r
-       markFunction = function( fn ) {\r
-               fn.sizzleFilter = true;\r
-               return fn;\r
-       },\r
-\r
-       // Returns a function to use in pseudos for input types\r
-       createInputFunction = function( type ) {\r
-               return function( elem ) {\r
-                       // Check the input's nodeName and type\r
-                       return elem.nodeName.toLowerCase() === "input" && elem.type === type;\r
-               };\r
-       },\r
-\r
-       // Returns a function to use in pseudos for buttons\r
-       createButtonFunction = function( type ) {\r
-               return function( elem ) {\r
-                       var name = elem.nodeName.toLowerCase();\r
-                       return (name === "input" || name === "button") && elem.type === type;\r
-               };\r
-       },\r
-\r
-       // Used for testing something on an element\r
-       assert = function( fn ) {\r
-               var pass = false,\r
-                       div = document.createElement("div");\r
-               try {\r
-                       pass = fn( div );\r
-               } catch (e) {}\r
-               // release memory in IE\r
-               div = null;\r
-               return pass;\r
-       },\r
-\r
-       // Check if attributes should be retrieved by attribute nodes\r
-       assertAttributes = assert(function( div ) {\r
-               div.innerHTML = "<select></select>";\r
-               var type = typeof div.lastChild.getAttribute("multiple");\r
-               // IE8 returns a string for some attributes even when not present\r
-               return type !== "boolean" && type !== "string";\r
-       }),\r
-\r
-       // Check if getElementById returns elements by name\r
-       // Check if getElementsByName privileges form controls or returns elements by ID\r
-       assertUsableName = assert(function( div ) {\r
-               // Inject content\r
-               div.id = expando + 0;\r
-               div.innerHTML = "<a name='" + expando + "'></a><div name='" + expando + "'></div>";\r
-               docElem.insertBefore( div, docElem.firstChild );\r
-\r
-               // Test\r
-               var pass = document.getElementsByName &&\r
-                       // buggy browsers will return fewer than the correct 2\r
-                       document.getElementsByName( expando ).length ===\r
-                       // buggy browsers will return more than the correct 0\r
-                       2 + document.getElementsByName( expando + 0 ).length;\r
-               assertGetIdNotName = !document.getElementById( expando );\r
-\r
-               // Cleanup\r
-               docElem.removeChild( div );\r
-\r
-               return pass;\r
-       }),\r
-\r
-       // Check if the browser returns only elements\r
-       // when doing getElementsByTagName("*")\r
-       assertTagNameNoComments = assert(function( div ) {\r
-               div.appendChild( document.createComment("") );\r
-               return div.getElementsByTagName("*").length === 0;\r
-       }),\r
-\r
-       // Check if getAttribute returns normalized href attributes\r
-       assertHrefNotNormalized = assert(function( div ) {\r
-               div.innerHTML = "<a href='#'></a>";\r
-               return div.firstChild && typeof div.firstChild.getAttribute !== strundefined &&\r
-                       div.firstChild.getAttribute("href") === "#";\r
-       }),\r
-\r
-       // Check if getElementsByClassName can be trusted\r
-       assertUsableClassName = assert(function( div ) {\r
-               // Opera can't find a second classname (in 9.6)\r
-               div.innerHTML = "<div class='hidden e'></div><div class='hidden'></div>";\r
-               if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) {\r
-                       return false;\r
-               }\r
-\r
-               // Safari caches class attributes, doesn't catch changes (in 3.2)\r
-               div.lastChild.className = "e";\r
-               return div.getElementsByClassName("e").length !== 1;\r
-       });\r
-\r
-var Sizzle = function( selector, context, results, seed ) {\r
-       results = results || [];\r
-       context = context || document;\r
-       var match, elem, xml, m,\r
-               nodeType = context.nodeType;\r
-\r
-       if ( nodeType !== 1 && nodeType !== 9 ) {\r
-               return [];\r
-       }\r
-\r
-       if ( !selector || typeof selector !== "string" ) {\r
-               return results;\r
-       }\r
-\r
-       xml = isXML( context );\r
-\r
-       if ( !xml && !seed ) {\r
-               if ( (match = rquickExpr.exec( selector )) ) {\r
-                       // Speed-up: Sizzle("#ID")\r
-                       if ( (m = match[1]) ) {\r
-                               if ( nodeType === 9 ) {\r
-                                       elem = context.getElementById( m );\r
-                                       // Check parentNode to catch when Blackberry 4.6 returns\r
-                                       // nodes that are no longer in the document #6963\r
-                                       if ( elem && elem.parentNode ) {\r
-                                               // Handle the case where IE, Opera, and Webkit return items\r
-                                               // by name instead of ID\r
-                                               if ( elem.id === m ) {\r
-                                                       results.push( elem );\r
-                                                       return results;\r
-                                               }\r
-                                       } else {\r
-                                               return results;\r
-                                       }\r
-                               } else {\r
-                                       // Context is not a document\r
-                                       if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&\r
-                                               contains( context, elem ) && elem.id === m ) {\r
-                                               results.push( elem );\r
-                                               return results;\r
-                                       }\r
-                               }\r
-\r
-                       // Speed-up: Sizzle("TAG")\r
-                       } else if ( match[2] ) {\r
-                               push.apply( results, slice.call(context.getElementsByTagName( selector ), 0) );\r
-                               return results;\r
-\r
-                       // Speed-up: Sizzle(".CLASS")\r
-                       } else if ( (m = match[3]) && assertUsableClassName && context.getElementsByClassName ) {\r
-                               push.apply( results, slice.call(context.getElementsByClassName( m ), 0) );\r
-                               return results;\r
-                       }\r
-               }\r
-       }\r
-\r
-       // All others\r
-       return select( selector, context, results, seed, xml );\r
-};\r
-\r
-var Expr = Sizzle.selectors = {\r
-\r
-       // Can be adjusted by the user\r
-       cacheLength: 50,\r
-\r
-       match: matchExpr,\r
-\r
-       order: [ "ID", "TAG" ],\r
-\r
-       attrHandle: {},\r
-\r
-       createPseudo: markFunction,\r
-\r
-       find: {\r
-               "ID": assertGetIdNotName ?\r
-                       function( id, context, xml ) {\r
-                               if ( typeof context.getElementById !== strundefined && !xml ) {\r
-                                       var m = context.getElementById( id );\r
-                                       // Check parentNode to catch when Blackberry 4.6 returns\r
-                                       // nodes that are no longer in the document #6963\r
-                                       return m && m.parentNode ? [m] : [];\r
-                               }\r
-                       } :\r
-                       function( id, context, xml ) {\r
-                               if ( typeof context.getElementById !== strundefined && !xml ) {\r
-                                       var m = context.getElementById( id );\r
-\r
-                                       return m ?\r
-                                               m.id === id || typeof m.getAttributeNode !== strundefined && m.getAttributeNode("id").value === id ?\r
-                                                       [m] :\r
-                                                       undefined :\r
-                                               [];\r
-                               }\r
-                       },\r
-\r
-               "TAG": assertTagNameNoComments ?\r
-                       function( tag, context ) {\r
-                               if ( typeof context.getElementsByTagName !== strundefined ) {\r
-                                       return context.getElementsByTagName( tag );\r
-                               }\r
-                       } :\r
-                       function( tag, context ) {\r
-                               var results = context.getElementsByTagName( tag );\r
-\r
-                               // Filter out possible comments\r
-                               if ( tag === "*" ) {\r
-                                       var elem,\r
-                                               tmp = [],\r
-                                               i = 0;\r
-\r
-                                       for ( ; (elem = results[i]); i++ ) {\r
-                                               if ( elem.nodeType === 1 ) {\r
-                                                       tmp.push( elem );\r
-                                               }\r
-                                       }\r
-\r
-                                       return tmp;\r
-                               }\r
-                               return results;\r
-                       }\r
-       },\r
-\r
-       relative: {\r
-               ">": { dir: "parentNode", first: true },\r
-               " ": { dir: "parentNode" },\r
-               "+": { dir: "previousSibling", first: true },\r
-               "~": { dir: "previousSibling" }\r
-       },\r
-\r
-       preFilter: {\r
-               "ATTR": function( match ) {\r
-                       match[1] = match[1].replace( rbackslash, "" );\r
-\r
-                       // Move the given value to match[3] whether quoted or unquoted\r
-                       match[3] = ( match[4] || match[5] || "" ).replace( rbackslash, "" );\r
-\r
-                       if ( match[2] === "~=" ) {\r
-                               match[3] = " " + match[3] + " ";\r
-                       }\r
-\r
-                       return match.slice( 0, 4 );\r
-               },\r
-\r
-               "CHILD": function( match ) {\r
-                       /* matches from matchExpr.CHILD\r
-                               1 type (only|nth|...)\r
-                               2 argument (even|odd|\d*|\d*n([+-]\d+)?|...)\r
-                               3 xn-component of xn+y argument ([+-]?\d*n|)\r
-                               4 sign of xn-component\r
-                               5 x of xn-component\r
-                               6 sign of y-component\r
-                               7 y of y-component\r
-                       */\r
-                       match[1] = match[1].toLowerCase();\r
-\r
-                       if ( match[1] === "nth" ) {\r
-                               // nth-child requires argument\r
-                               if ( !match[2] ) {\r
-                                       Sizzle.error( match[0] );\r
-                               }\r
-\r
-                               // numeric x and y parameters for Expr.filter.CHILD\r
-                               // remember that false/true cast respectively to 0/1\r
-                               match[3] = +( match[3] ? match[4] + (match[5] || 1) : 2 * ( match[2] === "even" || match[2] === "odd" ) );\r
-                               match[4] = +( ( match[6] + match[7] ) || match[2] === "odd" );\r
-\r
-                       // other types prohibit arguments\r
-                       } else if ( match[2] ) {\r
-                               Sizzle.error( match[0] );\r
-                       }\r
-\r
-                       return match;\r
-               },\r
-\r
-               "PSEUDO": function( match ) {\r
-                       var argument,\r
-                               unquoted = match[4];\r
-\r
-                       if ( matchExpr["CHILD"].test( match[0] ) ) {\r
-                               return null;\r
-                       }\r
-\r
-                       // Relinquish our claim on characters in `unquoted` from a closing parenthesis on\r
-                       if ( unquoted && (argument = rselector.exec( unquoted )) && argument.pop() ) {\r
-\r
-                               match[0] = match[0].slice( 0, argument[0].length - unquoted.length - 1 );\r
-                               unquoted = argument[0].slice( 0, -1 );\r
-                       }\r
-\r
-                       // Quoted or unquoted, we have the full argument\r
-                       // Return only captures needed by the pseudo filter method (type and argument)\r
-                       match.splice( 2, 3, unquoted || match[3] );\r
-                       return match;\r
-               }\r
-       },\r
-\r
-       filter: {\r
-               "ID": assertGetIdNotName ?\r
-                       function( id ) {\r
-                               id = id.replace( rbackslash, "" );\r
-                               return function( elem ) {\r
-                                       return elem.getAttribute("id") === id;\r
-                               };\r
-                       } :\r
-                       function( id ) {\r
-                               id = id.replace( rbackslash, "" );\r
-                               return function( elem ) {\r
-                                       var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id");\r
-                                       return node && node.value === id;\r
-                               };\r
-                       },\r
-\r
-               "TAG": function( nodeName ) {\r
-                       if ( nodeName === "*" ) {\r
-                               return function() { return true; };\r
-                       }\r
-                       nodeName = nodeName.replace( rbackslash, "" ).toLowerCase();\r
-\r
-                       return function( elem ) {\r
-                               return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\r
-                       };\r
-               },\r
-\r
-               "CLASS": function( className ) {\r
-                       var pattern = classCache[ className ];\r
-                       if ( !pattern ) {\r
-                               pattern = classCache[ className ] = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" );\r
-                               cachedClasses.push( className );\r
-                               // Avoid too large of a cache\r
-                               if ( cachedClasses.length > Expr.cacheLength ) {\r
-                                       delete classCache[ cachedClasses.shift() ];\r
-                               }\r
-                       }\r
-                       return function( elem ) {\r
-                               return pattern.test( elem.className || (typeof elem.getAttribute !== strundefined && elem.getAttribute("class")) || "" );\r
-                       };\r
-               },\r
-\r
-               "ATTR": function( name, operator, check ) {\r
-                       if ( !operator ) {\r
-                               return function( elem ) {\r
-                                       return Sizzle.attr( elem, name ) != null;\r
-                               };\r
-                       }\r
-\r
-                       return function( elem ) {\r
-                               var result = Sizzle.attr( elem, name ),\r
-                                       value = result + "";\r
-\r
-                               if ( result == null ) {\r
-                                       return operator === "!=";\r
-                               }\r
-\r
-                               switch ( operator ) {\r
-                                       case "=":\r
-                                               return value === check;\r
-                                       case "!=":\r
-                                               return value !== check;\r
-                                       case "^=":\r
-                                               return check && value.indexOf( check ) === 0;\r
-                                       case "*=":\r
-                                               return check && value.indexOf( check ) > -1;\r
-                                       case "$=":\r
-                                               return check && value.substr( value.length - check.length ) === check;\r
-                                       case "~=":\r
-                                               return ( " " + value + " " ).indexOf( check ) > -1;\r
-                                       case "|=":\r
-                                               return value === check || value.substr( 0, check.length + 1 ) === check + "-";\r
-                               }\r
-                       };\r
-               },\r
-\r
-               "CHILD": function( type, argument, first, last ) {\r
-\r
-                       if ( type === "nth" ) {\r
-                               var doneName = done++;\r
-\r
-                               return function( elem ) {\r
-                                       var parent, diff,\r
-                                               count = 0,\r
-                                               node = elem;\r
-\r
-                                       if ( first === 1 && last === 0 ) {\r
-                                               return true;\r
-                                       }\r
-\r
-                                       parent = elem.parentNode;\r
-\r
-                                       if ( parent && (parent[ expando ] !== doneName || !elem.sizset) ) {\r
-                                               for ( node = parent.firstChild; node; node = node.nextSibling ) {\r
-                                                       if ( node.nodeType === 1 ) {\r
-                                                               node.sizset = ++count;\r
-                                                               if ( node === elem ) {\r
-                                                                       break;\r
-                                                               }\r
-                                                       }\r
-                                               }\r
-\r
-                                               parent[ expando ] = doneName;\r
-                                       }\r
-\r
-                                       diff = elem.sizset - last;\r
-\r
-                                       if ( first === 0 ) {\r
-                                               return diff === 0;\r
-\r
-                                       } else {\r
-                                               return ( diff % first === 0 && diff / first >= 0 );\r
-                                       }\r
-                               };\r
-                       }\r
-\r
-                       return function( elem ) {\r
-                               var node = elem;\r
-\r
-                               switch ( type ) {\r
-                                       case "only":\r
-                                       case "first":\r
-                                               while ( (node = node.previousSibling) ) {\r
-                                                       if ( node.nodeType === 1 ) {\r
-                                                               return false;\r
-                                                       }\r
-                                               }\r
-\r
-                                               if ( type === "first" ) {\r
-                                                       return true;\r
-                                               }\r
-\r
-                                               node = elem;\r
-\r
-                                               /* falls through */\r
-                                       case "last":\r
-                                               while ( (node = node.nextSibling) ) {\r
-                                                       if ( node.nodeType === 1 ) {\r
-                                                               return false;\r
-                                                       }\r
-                                               }\r
-\r
-                                               return true;\r
-                               }\r
-                       };\r
-               },\r
-\r
-               "PSEUDO": function( pseudo, argument, context, xml ) {\r
-                       // pseudo-class names are case-insensitive\r
-                       // http://www.w3.org/TR/selectors/#pseudo-classes\r
-                       // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\r
-                       var fn = Expr.pseudos[ pseudo ] || Expr.pseudos[ pseudo.toLowerCase() ];\r
-\r
-                       if ( !fn ) {\r
-                               Sizzle.error( "unsupported pseudo: " + pseudo );\r
-                       }\r
-\r
-                       // The user may set fn.sizzleFilter to indicate\r
-                       // that arguments are needed to create the filter function\r
-                       // just as Sizzle does\r
-                       if ( !fn.sizzleFilter ) {\r
-                               return fn;\r
-                       }\r
-\r
-                       return fn( argument, context, xml );\r
-               }\r
-       },\r
-\r
-       pseudos: {\r
-               "not": markFunction(function( selector, context, xml ) {\r
-                       // Trim the selector passed to compile\r
-                       // to avoid treating leading and trailing\r
-                       // spaces as combinators\r
-                       var matcher = compile( selector.replace( rtrim, "$1" ), context, xml );\r
-                       return function( elem ) {\r
-                               return !matcher( elem );\r
-                       };\r
-               }),\r
-\r
-               "enabled": function( elem ) {\r
-                       return elem.disabled === false;\r
-               },\r
-\r
-               "disabled": function( elem ) {\r
-                       return elem.disabled === true;\r
-               },\r
-\r
-               "checked": function( elem ) {\r
-                       // In CSS3, :checked should return both checked and selected elements\r
-                       // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\r
-                       var nodeName = elem.nodeName.toLowerCase();\r
-                       return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);\r
-               },\r
-\r
-               "selected": function( elem ) {\r
-                       // Accessing this property makes selected-by-default\r
-                       // options in Safari work properly\r
-                       if ( elem.parentNode ) {\r
-                               elem.parentNode.selectedIndex;\r
-                       }\r
-\r
-                       return elem.selected === true;\r
-               },\r
-\r
-               "parent": function( elem ) {\r
-                       return !Expr.pseudos["empty"]( elem );\r
-               },\r
-\r
-               "empty": function( elem ) {\r
-                       // http://www.w3.org/TR/selectors/#empty-pseudo\r
-                       // :empty is only affected by element nodes and content nodes(including text(3), cdata(4)),\r
-                       //   not comment, processing instructions, or others\r
-                       // Thanks to Diego Perini for the nodeName shortcut\r
-                       //   Greater than "@" means alpha characters (specifically not starting with "#" or "?")\r
-                       var nodeType;\r
-                       elem = elem.firstChild;\r
-                       while ( elem ) {\r
-                               if ( elem.nodeName > "@" || (nodeType = elem.nodeType) === 3 || nodeType === 4 ) {\r
-                                       return false;\r
-                               }\r
-                               elem = elem.nextSibling;\r
-                       }\r
-                       return true;\r
-               },\r
-\r
-               "contains": markFunction(function( text ) {\r
-                       return function( elem ) {\r
-                               return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\r
-                       };\r
-               }),\r
-\r
-               "has": markFunction(function( selector ) {\r
-                       return function( elem ) {\r
-                               return Sizzle( selector, elem ).length > 0;\r
-                       };\r
-               }),\r
-\r
-               "header": function( elem ) {\r
-                       return rheader.test( elem.nodeName );\r
-               },\r
-\r
-               "text": function( elem ) {\r
-                       var type, attr;\r
-                       // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)\r
-                       // use getAttribute instead to test this case\r
-                       return elem.nodeName.toLowerCase() === "input" &&\r
-                               (type = elem.type) === "text" &&\r
-                               ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === type );\r
-               },\r
-\r
-               // Input types\r
-               "radio": createInputFunction("radio"),\r
-               "checkbox": createInputFunction("checkbox"),\r
-               "file": createInputFunction("file"),\r
-               "password": createInputFunction("password"),\r
-               "image": createInputFunction("image"),\r
-\r
-               "submit": createButtonFunction("submit"),\r
-               "reset": createButtonFunction("reset"),\r
-\r
-               "button": function( elem ) {\r
-                       var name = elem.nodeName.toLowerCase();\r
-                       return name === "input" && elem.type === "button" || name === "button";\r
-               },\r
-\r
-               "input": function( elem ) {\r
-                       return rinputs.test( elem.nodeName );\r
-               },\r
-\r
-               "focus": function( elem ) {\r
-                       var doc = elem.ownerDocument;\r
-                       return elem === doc.activeElement && (!doc.hasFocus || doc.hasFocus()) && !!(elem.type || elem.href);\r
-               },\r
-\r
-               "active": function( elem ) {\r
-                       return elem === elem.ownerDocument.activeElement;\r
-               }\r
-       },\r
-\r
-       setFilters: {\r
-               "first": function( elements, argument, not ) {\r
-                       return not ? elements.slice( 1 ) : [ elements[0] ];\r
-               },\r
-\r
-               "last": function( elements, argument, not ) {\r
-                       var elem = elements.pop();\r
-                       return not ? elements : [ elem ];\r
-               },\r
-\r
-               "even": function( elements, argument, not ) {\r
-                       var results = [],\r
-                               i = not ? 1 : 0,\r
-                               len = elements.length;\r
-                       for ( ; i < len; i = i + 2 ) {\r
-                               results.push( elements[i] );\r
-                       }\r
-                       return results;\r
-               },\r
-\r
-               "odd": function( elements, argument, not ) {\r
-                       var results = [],\r
-                               i = not ? 0 : 1,\r
-                               len = elements.length;\r
-                       for ( ; i < len; i = i + 2 ) {\r
-                               results.push( elements[i] );\r
-                       }\r
-                       return results;\r
-               },\r
-\r
-               "lt": function( elements, argument, not ) {\r
-                       return not ? elements.slice( +argument ) : elements.slice( 0, +argument );\r
-               },\r
-\r
-               "gt": function( elements, argument, not ) {\r
-                       return not ? elements.slice( 0, +argument + 1 ) : elements.slice( +argument + 1 );\r
-               },\r
-\r
-               "eq": function( elements, argument, not ) {\r
-                       var elem = elements.splice( +argument, 1 );\r
-                       return not ? elements : elem;\r
-               }\r
-       }\r
-};\r
-\r
-// Deprecated\r
-Expr.setFilters["nth"] = Expr.setFilters["eq"];\r
-\r
-// Back-compat\r
-Expr.filters = Expr.pseudos;\r
-\r
-// IE6/7 return a modified href\r
-if ( !assertHrefNotNormalized ) {\r
-       Expr.attrHandle = {\r
-               "href": function( elem ) {\r
-                       return elem.getAttribute( "href", 2 );\r
-               },\r
-               "type": function( elem ) {\r
-                       return elem.getAttribute("type");\r
-               }\r
-       };\r
-}\r
-\r
-// Add getElementsByName if usable\r
-if ( assertUsableName ) {\r
-       Expr.order.push("NAME");\r
-       Expr.find["NAME"] = function( name, context ) {\r
-               if ( typeof context.getElementsByName !== strundefined ) {\r
-                       return context.getElementsByName( name );\r
-               }\r
-       };\r
-}\r
-\r
-// Add getElementsByClassName if usable\r
-if ( assertUsableClassName ) {\r
-       Expr.order.splice( 1, 0, "CLASS" );\r
-       Expr.find["CLASS"] = function( className, context, xml ) {\r
-               if ( typeof context.getElementsByClassName !== strundefined && !xml ) {\r
-                       return context.getElementsByClassName( className );\r
-               }\r
-       };\r
-}\r
-\r
-// If slice is not available, provide a backup\r
-try {\r
-       slice.call( docElem.childNodes, 0 )[0].nodeType;\r
-} catch ( e ) {\r
-       slice = function( i ) {\r
-               var elem, results = [];\r
-               for ( ; (elem = this[i]); i++ ) {\r
-                       results.push( elem );\r
-               }\r
-               return results;\r
-       };\r
-}\r
-\r
-var isXML = Sizzle.isXML = function( elem ) {\r
-       // documentElement is verified for cases where it doesn't yet exist\r
-       // (such as loading iframes in IE - #4833)\r
-       var documentElement = elem && (elem.ownerDocument || elem).documentElement;\r
-       return documentElement ? documentElement.nodeName !== "HTML" : false;\r
-};\r
-\r
-// Element contains another\r
-var contains = Sizzle.contains = docElem.compareDocumentPosition ?\r
-       function( a, b ) {\r
-               return !!( a.compareDocumentPosition( b ) & 16 );\r
-       } :\r
-       docElem.contains ?\r
-       function( a, b ) {\r
-               var adown = a.nodeType === 9 ? a.documentElement : a,\r
-                       bup = b.parentNode;\r
-               return a === bup || !!( bup && bup.nodeType === 1 && adown.contains && adown.contains(bup) );\r
-       } :\r
-       function( a, b ) {\r
-               while ( (b = b.parentNode) ) {\r
-                       if ( b === a ) {\r
-                               return true;\r
-                       }\r
-               }\r
-               return false;\r
-       };\r
-\r
-/**\r
- * Utility function for retrieving the text value of an array of DOM nodes\r
- * @param {Array|Element} elem\r
- */\r
-var getText = Sizzle.getText = function( elem ) {\r
-       var node,\r
-               ret = "",\r
-               i = 0,\r
-               nodeType = elem.nodeType;\r
-\r
-       if ( nodeType ) {\r
-               if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\r
-                       // Use textContent for elements\r
-                       // innerText usage removed for consistency of new lines (see #11153)\r
-                       if ( typeof elem.textContent === "string" ) {\r
-                               return elem.textContent;\r
-                       } else {\r
-                               // Traverse its children\r
-                               for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\r
-                                       ret += getText( elem );\r
-                               }\r
-                       }\r
-               } else if ( nodeType === 3 || nodeType === 4 ) {\r
-                       return elem.nodeValue;\r
-               }\r
-               // Do not include comment or processing instruction nodes\r
-       } else {\r
-\r
-               // If no nodeType, this is expected to be an array\r
-               for ( ; (node = elem[i]); i++ ) {\r
-                       // Do not traverse comment nodes\r
-                       ret += getText( node );\r
-               }\r
-       }\r
-       return ret;\r
-};\r
-\r
-Sizzle.attr = function( elem, name ) {\r
-       var attr,\r
-               xml = isXML( elem );\r
-\r
-       if ( !xml ) {\r
-               name = name.toLowerCase();\r
-       }\r
-       if ( Expr.attrHandle[ name ] ) {\r
-               return Expr.attrHandle[ name ]( elem );\r
-       }\r
-       if ( assertAttributes || xml ) {\r
-               return elem.getAttribute( name );\r
-       }\r
-       attr = elem.getAttributeNode( name );\r
-       return attr ?\r
-               typeof elem[ name ] === "boolean" ?\r
-                       elem[ name ] ? name : null :\r
-                       attr.specified ? attr.value : null :\r
-               null;\r
-};\r
-\r
-Sizzle.error = function( msg ) {\r
-       throw new Error( "Syntax error, unrecognized expression: " + msg );\r
-};\r
-\r
-// Check if the JavaScript engine is using some sort of\r
-// optimization where it does not always call our comparision\r
-// function. If that is the case, discard the hasDuplicate value.\r
-//   Thus far that includes Google Chrome.\r
-[0, 0].sort(function() {\r
-       return (baseHasDuplicate = 0);\r
-});\r
-\r
-\r
-if ( docElem.compareDocumentPosition ) {\r
-       sortOrder = function( a, b ) {\r
-               if ( a === b ) {\r
-                       hasDuplicate = true;\r
-                       return 0;\r
-               }\r
-\r
-               return ( !a.compareDocumentPosition || !b.compareDocumentPosition ?\r
-                       a.compareDocumentPosition :\r
-                       a.compareDocumentPosition(b) & 4\r
-               ) ? -1 : 1;\r
-       };\r
-\r
-} else {\r
-       sortOrder = function( a, b ) {\r
-               // The nodes are identical, we can exit early\r
-               if ( a === b ) {\r
-                       hasDuplicate = true;\r
-                       return 0;\r
-\r
-               // Fallback to using sourceIndex (in IE) if it's available on both nodes\r
-               } else if ( a.sourceIndex && b.sourceIndex ) {\r
-                       return a.sourceIndex - b.sourceIndex;\r
-               }\r
-\r
-               var al, bl,\r
-                       ap = [],\r
-                       bp = [],\r
-                       aup = a.parentNode,\r
-                       bup = b.parentNode,\r
-                       cur = aup;\r
-\r
-               // If the nodes are siblings (or identical) we can do a quick check\r
-               if ( aup === bup ) {\r
-                       return siblingCheck( a, b );\r
-\r
-               // If no parents were found then the nodes are disconnected\r
-               } else if ( !aup ) {\r
-                       return -1;\r
-\r
-               } else if ( !bup ) {\r
-                       return 1;\r
-               }\r
-\r
-               // Otherwise they're somewhere else in the tree so we need\r
-               // to build up a full list of the parentNodes for comparison\r
-               while ( cur ) {\r
-                       ap.unshift( cur );\r
-                       cur = cur.parentNode;\r
-               }\r
-\r
-               cur = bup;\r
-\r
-               while ( cur ) {\r
-                       bp.unshift( cur );\r
-                       cur = cur.parentNode;\r
-               }\r
-\r
-               al = ap.length;\r
-               bl = bp.length;\r
-\r
-               // Start walking down the tree looking for a discrepancy\r
-               for ( var i = 0; i < al && i < bl; i++ ) {\r
-                       if ( ap[i] !== bp[i] ) {\r
-                               return siblingCheck( ap[i], bp[i] );\r
-                       }\r
-               }\r
-\r
-               // We ended someplace up the tree so do a sibling check\r
-               return i === al ?\r
-                       siblingCheck( a, bp[i], -1 ) :\r
-                       siblingCheck( ap[i], b, 1 );\r
-       };\r
-\r
-       siblingCheck = function( a, b, ret ) {\r
-               if ( a === b ) {\r
-                       return ret;\r
-               }\r
-\r
-               var cur = a.nextSibling;\r
-\r
-               while ( cur ) {\r
-                       if ( cur === b ) {\r
-                               return -1;\r
-                       }\r
-\r
-                       cur = cur.nextSibling;\r
-               }\r
-\r
-               return 1;\r
-       };\r
-}\r
-\r
-// Document sorting and removing duplicates\r
-Sizzle.uniqueSort = function( results ) {\r
-       var elem,\r
-               i = 1;\r
-\r
-       if ( sortOrder ) {\r
-               hasDuplicate = baseHasDuplicate;\r
-               results.sort( sortOrder );\r
-\r
-               if ( hasDuplicate ) {\r
-                       for ( ; (elem = results[i]); i++ ) {\r
-                               if ( elem === results[ i - 1 ] ) {\r
-                                       results.splice( i--, 1 );\r
-                               }\r
-                       }\r
-               }\r
-       }\r
-\r
-       return results;\r
-};\r
-\r
-function multipleContexts( selector, contexts, results, seed ) {\r
-       var i = 0,\r
-               len = contexts.length;\r
-       for ( ; i < len; i++ ) {\r
-               Sizzle( selector, contexts[i], results, seed );\r
-       }\r
-}\r
-\r
-function handlePOSGroup( selector, posfilter, argument, contexts, seed, not ) {\r
-       var results,\r
-               fn = Expr.setFilters[ posfilter.toLowerCase() ];\r
-\r
-       if ( !fn ) {\r
-               Sizzle.error( posfilter );\r
-       }\r
-\r
-       if ( selector || !(results = seed) ) {\r
-               multipleContexts( selector || "*", contexts, (results = []), seed );\r
-       }\r
-\r
-       return results.length > 0 ? fn( results, argument, not ) : [];\r
-}\r
-\r
-function handlePOS( selector, context, results, seed, groups ) {\r
-       var match, not, anchor, ret, elements, currentContexts, part, lastIndex,\r
-               i = 0,\r
-               len = groups.length,\r
-               rpos = matchExpr["POS"],\r
-               // This is generated here in case matchExpr["POS"] is extended\r
-               rposgroups = new RegExp( "^" + rpos.source + "(?!" + whitespace + ")", "i" ),\r
-               // This is for making sure non-participating\r
-               // matching groups are represented cross-browser (IE6-8)\r
-               setUndefined = function() {\r
-                       var i = 1,\r
-                               len = arguments.length - 2;\r
-                       for ( ; i < len; i++ ) {\r
-                               if ( arguments[i] === undefined ) {\r
-                                       match[i] = undefined;\r
-                               }\r
-                       }\r
-               };\r
-\r
-       for ( ; i < len; i++ ) {\r
-               // Reset regex index to 0\r
-               rpos.exec("");\r
-               selector = groups[i];\r
-               ret = [];\r
-               anchor = 0;\r
-               elements = seed;\r
-               while ( (match = rpos.exec( selector )) ) {\r
-                       lastIndex = rpos.lastIndex = match.index + match[0].length;\r
-                       if ( lastIndex > anchor ) {\r
-                               part = selector.slice( anchor, match.index );\r
-                               anchor = lastIndex;\r
-                               currentContexts = [ context ];\r
-\r
-                               if ( rcombinators.test(part) ) {\r
-                                       if ( elements ) {\r
-                                               currentContexts = elements;\r
-                                       }\r
-                                       elements = seed;\r
-                               }\r
-\r
-                               if ( (not = rendsWithNot.test( part )) ) {\r
-                                       part = part.slice( 0, -5 ).replace( rcombinators, "$&*" );\r
-                               }\r
-\r
-                               if ( match.length > 1 ) {\r
-                                       match[0].replace( rposgroups, setUndefined );\r
-                               }\r
-                               elements = handlePOSGroup( part, match[1], match[2], currentContexts, elements, not );\r
-                       }\r
-               }\r
-\r
-               if ( elements ) {\r
-                       ret = ret.concat( elements );\r
-\r
-                       if ( (part = selector.slice( anchor )) && part !== ")" ) {\r
-                               if ( rcombinators.test(part) ) {\r
-                                       multipleContexts( part, ret, results, seed );\r
-                               } else {\r
-                                       Sizzle( part, context, results, seed ? seed.concat(elements) : elements );\r
-                               }\r
-                       } else {\r
-                               push.apply( results, ret );\r
-                       }\r
-               } else {\r
-                       Sizzle( selector, context, results, seed );\r
-               }\r
-       }\r
-\r
-       // Do not sort if this is a single filter\r
-       return len === 1 ? results : Sizzle.uniqueSort( results );\r
-}\r
-\r
-function tokenize( selector, context, xml ) {\r
-       var tokens, soFar, type,\r
-               groups = [],\r
-               i = 0,\r
-\r
-               // Catch obvious selector issues: terminal ")"; nonempty fallback match\r
-               // rselector never fails to match *something*\r
-               match = rselector.exec( selector ),\r
-               matched = !match.pop() && !match.pop(),\r
-               selectorGroups = matched && selector.match( rgroups ) || [""],\r
-\r
-               preFilters = Expr.preFilter,\r
-               filters = Expr.filter,\r
-               checkContext = !xml && context !== document;\r
-\r
-       for ( ; (soFar = selectorGroups[i]) != null && matched; i++ ) {\r
-               groups.push( tokens = [] );\r
-\r
-               // Need to make sure we're within a narrower context if necessary\r
-               // Adding a descendant combinator will generate what is needed\r
-               if ( checkContext ) {\r
-                       soFar = " " + soFar;\r
-               }\r
-\r
-               while ( soFar ) {\r
-                       matched = false;\r
-\r
-                       // Combinators\r
-                       if ( (match = rcombinators.exec( soFar )) ) {\r
-                               soFar = soFar.slice( match[0].length );\r
-\r
-                               // Cast descendant combinators to space\r
-                               matched = tokens.push({ part: match.pop().replace( rtrim, " " ), captures: match });\r
-                       }\r
-\r
-                       // Filters\r
-                       for ( type in filters ) {\r
-                               if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\r
-                                       (match = preFilters[ type ]( match, context, xml )) ) ) {\r
-\r
-                                       soFar = soFar.slice( match.shift().length );\r
-                                       matched = tokens.push({ part: type, captures: match });\r
-                               }\r
-                       }\r
-\r
-                       if ( !matched ) {\r
-                               break;\r
-                       }\r
-               }\r
-       }\r
-\r
-       if ( !matched ) {\r
-               Sizzle.error( selector );\r
-       }\r
-\r
-       return groups;\r
-}\r
-\r
-function addCombinator( matcher, combinator, context ) {\r
-       var dir = combinator.dir,\r
-               doneName = done++;\r
-\r
-       if ( !matcher ) {\r
-               // If there is no matcher to check, check against the context\r
-               matcher = function( elem ) {\r
-                       return elem === context;\r
-               };\r
-       }\r
-       return combinator.first ?\r
-               function( elem, context ) {\r
-                       while ( (elem = elem[ dir ]) ) {\r
-                               if ( elem.nodeType === 1 ) {\r
-                                       return matcher( elem, context ) && elem;\r
-                               }\r
-                       }\r
-               } :\r
-               function( elem, context ) {\r
-                       var cache,\r
-                               dirkey = doneName + "." + dirruns,\r
-                               cachedkey = dirkey + "." + cachedruns;\r
-                       while ( (elem = elem[ dir ]) ) {\r
-                               if ( elem.nodeType === 1 ) {\r
-                                       if ( (cache = elem[ expando ]) === cachedkey ) {\r
-                                               return elem.sizset;\r
-                                       } else if ( typeof cache === "string" && cache.indexOf(dirkey) === 0 ) {\r
-                                               if ( elem.sizset ) {\r
-                                                       return elem;\r
-                                               }\r
-                                       } else {\r
-                                               elem[ expando ] = cachedkey;\r
-                                               if ( matcher( elem, context ) ) {\r
-                                                       elem.sizset = true;\r
-                                                       return elem;\r
-                                               }\r
-                                               elem.sizset = false;\r
-                                       }\r
-                               }\r
-                       }\r
-               };\r
-}\r
-\r
-function addMatcher( higher, deeper ) {\r
-       return higher ?\r
-               function( elem, context ) {\r
-                       var result = deeper( elem, context );\r
-                       return result && higher( result === true ? elem : result, context );\r
-               } :\r
-               deeper;\r
-}\r
-\r
-// ["TAG", ">", "ID", " ", "CLASS"]\r
-function matcherFromTokens( tokens, context, xml ) {\r
-       var token, matcher,\r
-               i = 0;\r
-\r
-       for ( ; (token = tokens[i]); i++ ) {\r
-               if ( Expr.relative[ token.part ] ) {\r
-                       matcher = addCombinator( matcher, Expr.relative[ token.part ], context );\r
-               } else {\r
-                       token.captures.push( context, xml );\r
-                       matcher = addMatcher( matcher, Expr.filter[ token.part ].apply( null, token.captures ) );\r
-               }\r
-       }\r
-\r
-       return matcher;\r
-}\r
-\r
-function matcherFromGroupMatchers( matchers ) {\r
-       return function( elem, context ) {\r
-               var matcher,\r
-                       j = 0;\r
-               for ( ; (matcher = matchers[j]); j++ ) {\r
-                       if ( matcher(elem, context) ) {\r
-                               return true;\r
-                       }\r
-               }\r
-               return false;\r
-       };\r
-}\r
-\r
-var compile = Sizzle.compile = function( selector, context, xml ) {\r
-       var tokens, group, i,\r
-               cached = compilerCache[ selector ];\r
-\r
-       // Return a cached group function if already generated (context dependent)\r
-       if ( cached && cached.context === context ) {\r
-               return cached;\r
-       }\r
-\r
-       // Generate a function of recursive functions that can be used to check each element\r
-       group = tokenize( selector, context, xml );\r
-       for ( i = 0; (tokens = group[i]); i++ ) {\r
-               group[i] = matcherFromTokens( tokens, context, xml );\r
-       }\r
-\r
-       // Cache the compiled function\r
-       cached = compilerCache[ selector ] = matcherFromGroupMatchers( group );\r
-       cached.context = context;\r
-       cached.runs = cached.dirruns = 0;\r
-       cachedSelectors.push( selector );\r
-       // Ensure only the most recent are cached\r
-       if ( cachedSelectors.length > Expr.cacheLength ) {\r
-               delete compilerCache[ cachedSelectors.shift() ];\r
-       }\r
-       return cached;\r
-};\r
-\r
-Sizzle.matches = function( expr, elements ) {\r
-       return Sizzle( expr, null, null, elements );\r
-};\r
-\r
-Sizzle.matchesSelector = function( elem, expr ) {\r
-       return Sizzle( expr, null, null, [ elem ] ).length > 0;\r
-};\r
-\r
-var select = function( selector, context, results, seed, xml ) {\r
-       // Remove excessive whitespace\r
-       selector = selector.replace( rtrim, "$1" );\r
-       var elements, matcher, i, len, elem, token,\r
-               type, findContext, notTokens,\r
-               match = selector.match( rgroups ),\r
-               tokens = selector.match( rtokens ),\r
-               contextNodeType = context.nodeType;\r
-\r
-       // POS handling\r
-       if ( matchExpr["POS"].test(selector) ) {\r
-               return handlePOS( selector, context, results, seed, match );\r
-       }\r
-\r
-       if ( seed ) {\r
-               elements = slice.call( seed, 0 );\r
-\r
-       // To maintain document order, only narrow the\r
-       // set if there is one group\r
-       } else if ( match && match.length === 1 ) {\r
-\r
-               // Take a shortcut and set the context if the root selector is an ID\r
-               if ( tokens.length > 1 && contextNodeType === 9 && !xml &&\r
-                               (match = matchExpr["ID"].exec( tokens[0] )) ) {\r
-\r
-                       context = Expr.find["ID"]( match[1], context, xml )[0];\r
-                       if ( !context ) {\r
-                               return results;\r
-                       }\r
-\r
-                       selector = selector.slice( tokens.shift().length );\r
-               }\r
-\r
-               findContext = ( (match = rsibling.exec( tokens[0] )) && !match.index && context.parentNode ) || context;\r
-\r
-               // Get the last token, excluding :not\r
-               notTokens = tokens.pop();\r
-               token = notTokens.split(":not")[0];\r
-\r
-               for ( i = 0, len = Expr.order.length; i < len; i++ ) {\r
-                       type = Expr.order[i];\r
-\r
-                       if ( (match = matchExpr[ type ].exec( token )) ) {\r
-                               elements = Expr.find[ type ]( (match[1] || "").replace( rbackslash, "" ), findContext, xml );\r
-\r
-                               if ( elements == null ) {\r
-                                       continue;\r
-                               }\r
-\r
-                               if ( token === notTokens ) {\r
-                                       selector = selector.slice( 0, selector.length - notTokens.length ) +\r
-                                               token.replace( matchExpr[ type ], "" );\r
-\r
-                                       if ( !selector ) {\r
-                                               push.apply( results, slice.call(elements, 0) );\r
-                                       }\r
-                               }\r
-                               break;\r
-                       }\r
-               }\r
-       }\r
-\r
-       // Only loop over the given elements once\r
-       // If selector is empty, we're already done\r
-       if ( selector ) {\r
-               matcher = compile( selector, context, xml );\r
-               dirruns = matcher.dirruns++;\r
-\r
-               if ( elements == null ) {\r
-                       elements = Expr.find["TAG"]( "*", (rsibling.test( selector ) && context.parentNode) || context );\r
-               }\r
-               for ( i = 0; (elem = elements[i]); i++ ) {\r
-                       cachedruns = matcher.runs++;\r
-                       if ( matcher(elem, context) ) {\r
-                               results.push( elem );\r
-                       }\r
-               }\r
-       }\r
-\r
-       return results;\r
-};\r
-\r
-if ( document.querySelectorAll ) {\r
-       (function() {\r
-               var disconnectedMatch,\r
-                       oldSelect = select,\r
-                       rescape = /'|\\/g,\r
-                       rattributeQuotes = /\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,\r
-                       rbuggyQSA = [],\r
-                       // matchesSelector(:active) reports false when true (IE9/Opera 11.5)\r
-                       // A support test would require too much code (would include document ready)\r
-                       // just skip matchesSelector for :active\r
-                       rbuggyMatches = [":active"],\r
-                       matches = docElem.matchesSelector ||\r
-                               docElem.mozMatchesSelector ||\r
-                               docElem.webkitMatchesSelector ||\r
-                               docElem.oMatchesSelector ||\r
-                               docElem.msMatchesSelector;\r
-\r
-               // Build QSA regex\r
-               // Regex strategy adopted from Diego Perini\r
-               assert(function( div ) {\r
-                       div.innerHTML = "<select><option selected></option></select>";\r
-\r
-                       // IE8 - Some boolean attributes are not treated correctly\r
-                       if ( !div.querySelectorAll("[selected]").length ) {\r
-                               rbuggyQSA.push( "\\[" + whitespace + "*(?:checked|disabled|ismap|multiple|readonly|selected|value)" );\r
-                       }\r
-\r
-                       // Webkit/Opera - :checked should return selected option elements\r
-                       // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\r
-                       // IE8 throws error here (do not put tests after this one)\r
-                       if ( !div.querySelectorAll(":checked").length ) {\r
-                               rbuggyQSA.push(":checked");\r
-                       }\r
-               });\r
-\r
-               assert(function( div ) {\r
-\r
-                       // Opera 10-12/IE9 - ^= $= *= and empty values\r
-                       // Should not select anything\r
-                       div.innerHTML = "<p test=''></p>";\r
-                       if ( div.querySelectorAll("[test^='']").length ) {\r
-                               rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:\"\"|'')" );\r
-                       }\r
-\r
-                       // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\r
-                       // IE8 throws error here (do not put tests after this one)\r
-                       div.innerHTML = "<input type='hidden'>";\r
-                       if ( !div.querySelectorAll(":enabled").length ) {\r
-                               rbuggyQSA.push(":enabled", ":disabled");\r
-                       }\r
-               });\r
-\r
-               rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );\r
-\r
-               select = function( selector, context, results, seed, xml ) {\r
-                       // Only use querySelectorAll when not filtering,\r
-                       // when this is not xml,\r
-                       // and when no QSA bugs apply\r
-                       if ( !seed && !xml && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\r
-                               if ( context.nodeType === 9 ) {\r
-                                       try {\r
-                                               push.apply( results, slice.call(context.querySelectorAll( selector ), 0) );\r
-                                               return results;\r
-                                       } catch(qsaError) {}\r
-                               // qSA works strangely on Element-rooted queries\r
-                               // We can work around this by specifying an extra ID on the root\r
-                               // and working up from there (Thanks to Andrew Dupont for the technique)\r
-                               // IE 8 doesn't work on object elements\r
-                               } else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {\r
-                                       var old = context.getAttribute("id"),\r
-                                               nid = old || expando,\r
-                                               newContext = rsibling.test( selector ) && context.parentNode || context;\r
-\r
-                                       if ( old ) {\r
-                                               nid = nid.replace( rescape, "\\$&" );\r
-                                       } else {\r
-                                               context.setAttribute( "id", nid );\r
-                                       }\r
-\r
-                                       try {\r
-                                               push.apply( results, slice.call( newContext.querySelectorAll(\r
-                                                       selector.replace( rgroups, "[id='" + nid + "'] $&" )\r
-                                               ), 0 ) );\r
-                                               return results;\r
-                                       } catch(qsaError) {\r
-                                       } finally {\r
-                                               if ( !old ) {\r
-                                                       context.removeAttribute("id");\r
-                                               }\r
-                                       }\r
-                               }\r
-                       }\r
-\r
-                       return oldSelect( selector, context, results, seed, xml );\r
-               };\r
-\r
-               if ( matches ) {\r
-                       assert(function( div ) {\r
-                               // Check to see if it's possible to do matchesSelector\r
-                               // on a disconnected node (IE 9)\r
-                               disconnectedMatch = matches.call( div, "div" );\r
-\r
-                               // This should fail with an exception\r
-                               // Gecko does not error, returns false instead\r
-                               try {\r
-                                       matches.call( div, "[test!='']:sizzle" );\r
-                                       rbuggyMatches.push( Expr.match.PSEUDO );\r
-                               } catch ( e ) {}\r
-                       });\r
-\r
-                       // rbuggyMatches always contains :active, so no need for a length check\r
-                       rbuggyMatches = /* rbuggyMatches.length && */ new RegExp( rbuggyMatches.join("|") );\r
-\r
-                       Sizzle.matchesSelector = function( elem, expr ) {\r
-                               // Make sure that attribute selectors are quoted\r
-                               expr = expr.replace( rattributeQuotes, "='$1']" );\r
-\r
-                               // rbuggyMatches always contains :active, so no need for an existence check\r
-                               if ( !isXML( elem ) && !rbuggyMatches.test( expr ) && (!rbuggyQSA || !rbuggyQSA.test( expr )) ) {\r
-                                       try {\r
-                                               var ret = matches.call( elem, expr );\r
-\r
-                                               // IE 9's matchesSelector returns false on disconnected nodes\r
-                                               if ( ret || disconnectedMatch ||\r
-                                                               // As well, disconnected nodes are said to be in a document\r
-                                                               // fragment in IE 9\r
-                                                               elem.document && elem.document.nodeType !== 11 ) {\r
-                                                       return ret;\r
-                                               }\r
-                                       } catch(e) {}\r
-                               }\r
-\r
-                               return Sizzle( expr, null, null, [ elem ] ).length > 0;\r
-                       };\r
-               }\r
-       })();\r
-}\r
-\r
-// Override sizzle attribute retrieval
-Sizzle.attr = jQuery.attr;
-jQuery.find = Sizzle;
-jQuery.expr = Sizzle.selectors;
-jQuery.expr[":"] = jQuery.expr.pseudos;
-jQuery.unique = Sizzle.uniqueSort;
-jQuery.text = Sizzle.getText;
-jQuery.isXMLDoc = Sizzle.isXML;
-jQuery.contains = Sizzle.contains;
-\r
-\r
-})( window );\r
-var runtil = /Until$/,
-       rparentsprev = /^(?:parents|prev(?:Until|All))/,
-       isSimple = /^.[^:#\[\.,]*$/,
-       rneedsContext = jQuery.expr.match.needsContext,
-       // methods guaranteed to produce a unique set when starting from a unique set
-       guaranteedUnique = {
-               children: true,
-               contents: true,
-               next: true,
-               prev: true
-       };
+       jQuery.buildFragment = function( args, nodes, scripts ) {
+               var fragment, cacheable, cacheresults, doc,
+                       first = args[ 0 ];
 
-jQuery.fn.extend({
-       find: function( selector ) {
-               var i, l, length, n, r, ret,
-                       self = this;
+               // nodes may contain either an explicit document object,
+               // a jQuery collection or context object.
+               // If nodes[0] contains a valid object to assign to doc
+               if ( nodes && nodes[0] ) {
+                       doc = nodes[0].ownerDocument || nodes[0];
+               }
 
-               if ( typeof selector !== "string" ) {
-                       return jQuery( selector ).filter(function() {
-                               for ( i = 0, l = self.length; i < l; i++ ) {
-                                       if ( jQuery.contains( self[ i ], this ) ) {
-                                               return true;
-                                       }
-                               }
-                       });
+               // Ensure that an attr object doesn't incorrectly stand in as a document object
+               // Chrome and Firefox seem to allow this to occur and will throw exception
+               // Fixes #8950
+               if ( !doc.createDocumentFragment ) {
+                       doc = document;
                }
 
-               ret = this.pushStack( "", "find", selector );
+               // Only cache "small" (1/2 KB) HTML strings that are associated with the main document
+               // Cloning options loses the selected state, so don't cache them
+               // IE 6 doesn't like it when you put <object> or <embed> elements in a fragment
+               // Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache
+               // Lastly, IE6,7,8 will not correctly reuse cached fragments that were created from unknown elems #10501
+               if ( args.length === 1 && typeof first === "string" && first.length < 512 && doc === document &&
+                       first.charAt(0) === "<" && !rnocache.test( first ) &&
+                       (jQuery.support.checkClone || !rchecked.test( first )) &&
+                       (jQuery.support.html5Clone || !rnoshimcache.test( first )) ) {
 
-               for ( i = 0, l = this.length; i < l; i++ ) {
-                       length = ret.length;
-                       jQuery.find( selector, this[i], ret );
+                       cacheable = true;
 
-                       if ( i > 0 ) {
-                               // Make sure that the results are unique
-                               for ( n = length; n < ret.length; n++ ) {
-                                       for ( r = 0; r < length; r++ ) {
-                                               if ( ret[r] === ret[n] ) {
-                                                       ret.splice(n--, 1);
-                                                       break;
-                                               }
-                                       }
-                               }
+                       cacheresults = jQuery.fragments[ first ];
+                       if ( cacheresults && cacheresults !== 1 ) {
+                               fragment = cacheresults;
                        }
                }
 
-               return ret;
-       },
+               if ( !fragment ) {
+                       fragment = doc.createDocumentFragment();
+                       jQuery.clean( args, doc, fragment, scripts );
+               }
 
-       has: function( target ) {
-               var i,
-                       targets = jQuery( target, this ),
-                       len = targets.length;
+               if ( cacheable ) {
+                       jQuery.fragments[ first ] = cacheresults ? fragment : 1;
+               }
 
-               return this.filter(function() {
-                       for ( i = 0; i < len; 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 && (
-                       typeof selector === "string" ?
-                               // If this is a positional/relative selector, check membership in the returned set
-                               // so $("p:first").is("p:last") won't return true for a doc with two "p".
-                               rneedsContext.test( selector ) ?
-                                       jQuery( selector, this.context ).index( this[0] ) >= 0 :
-                                       jQuery.filter( selector, this ).length > 0 :
-                               this.filter( selector ).length > 0 );
-       },
-
-       closest: function( selectors, context ) {
-               var cur,
-                       i = 0,
-                       l = this.length,
-                       ret = [],
-                       pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ?
-                               jQuery( selectors, context || this.context ) :
-                               0;
+               return { fragment: fragment, cacheable: cacheable };
+       };
 
-               for ( ; i < l; i++ ) {
-                       cur = this[i];
+       jQuery.fragments = {};
+
+       jQuery.each({
+               appendTo: "append",
+               prependTo: "prepend",
+               insertBefore: "before",
+               insertAfter: "after",
+               replaceAll: "replaceWith"
+       }, function( name, original ) {
+               jQuery.fn[ name ] = function( selector ) {
+                       var ret = [],
+                               insert = jQuery( selector ),
+                               parent = this.length === 1 && this[0].parentNode;
+
+                       if ( parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1 ) {
+                               insert[ original ]( this[0] );
+                               return this;
 
-                       while ( cur && cur.ownerDocument && cur !== context && cur.nodeType !== 11 ) {
-                               if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {
-                                       ret.push( cur );
-                                       break;
+                       } else {
+                               for ( var i = 0, l = insert.length; i < l; i++ ) {
+                                       var elems = ( i > 0 ? this.clone(true) : this ).get();
+                                       jQuery( insert[i] )[ original ]( elems );
+                                       ret = ret.concat( elems );
                                }
-                               cur = cur.parentNode;
-                       }
-               }
 
-               ret = ret.length > 1 ? jQuery.unique( ret ) : ret;
-
-               return this.pushStack( ret, "closest", selectors );
-       },
+                               return this.pushStack( ret, name, insert.selector );
+                       }
+               };
+       });
 
-       // Determine the position of an element within
-       // the matched set of elements
-       index: function( elem ) {
+       function getAll( elem ) {
+               if ( typeof elem.getElementsByTagName !== "undefined" ) {
+                       return elem.getElementsByTagName( "*" );
 
-               // No argument, return index in parent
-               if ( !elem ) {
-                       return ( this[0] && this[0].parentNode ) ? this.prevAll().length : -1;
-               }
+               } else if ( typeof elem.querySelectorAll !== "undefined" ) {
+                       return elem.querySelectorAll( "*" );
 
-               // index in selector
-               if ( typeof elem === "string" ) {
-                       return jQuery.inArray( this[0], jQuery( elem ) );
+               } else {
+                       return [];
                }
-
-               // 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 ) :
-                               jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),
-                       all = jQuery.merge( this.get(), set );
-
-               return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ?
-                       all :
-                       jQuery.unique( all ) );
-       },
-
-       addBack: function( selector ) {
-               return this.add( selector == null ?
-                       this.prevObject : this.prevObject.filter(selector)
-               );
-       }
-});
-
-jQuery.fn.andSelf = jQuery.fn.addBack;
-
-// 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;
-}
-
-function sibling( cur, dir ) {
-       do {
-               cur = cur[ dir ];
-       } while ( cur && cur.nodeType !== 1 );
-
-       return cur;
-}
-
-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 sibling( elem, "nextSibling" );
-       },
-       prev: function( elem ) {
-               return sibling( elem, "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.merge( [], 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 );
+// Used in clean, fixes the defaultChecked property
+       function fixDefaultChecked( elem ) {
+               if ( elem.type === "checkbox" || elem.type === "radio" ) {
+                       elem.defaultChecked = elem.checked;
                }
-
-               ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret;
-
-               if ( this.length > 1 && rparentsprev.test( name ) ) {
-                       ret = ret.reverse();
+       }
+// Finds all inputs and passes them to fixDefaultChecked
+       function findInputs( elem ) {
+               var nodeName = ( elem.nodeName || "" ).toLowerCase();
+               if ( nodeName === "input" ) {
+                       fixDefaultChecked( elem );
+                       // Skip scripts, get other children
+               } else if ( nodeName !== "script" && typeof elem.getElementsByTagName !== "undefined" ) {
+                       jQuery.grep( elem.getElementsByTagName("input"), fixDefaultChecked );
                }
+       }
 
-               return this.pushStack( ret, name, core_slice.call( arguments ).join(",") );
-       };
-});
+// Derived From: http://www.iecss.com/shimprove/javascript/shimprove.1-0-1.js
+       function shimCloneNode( elem ) {
+               var div = document.createElement( "div" );
+               safeFragment.appendChild( div );
 
-jQuery.extend({
-       filter: function( expr, elems, not ) {
-               if ( not ) {
-                       expr = ":not(" + expr + ")";
-               }
+               div.innerHTML = elem.outerHTML;
+               return div.firstChild;
+       }
 
-               return elems.length === 1 ?
-                       jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] :
-                       jQuery.find.matches(expr, elems);
-       },
+       jQuery.extend({
+               clone: function( elem, dataAndEvents, deepDataAndEvents ) {
+                       var srcElements,
+                               destElements,
+                               i,
+                       // IE<=8 does not properly clone detached, unknown element nodes
+                               clone = jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ?
+                                       elem.cloneNode( true ) :
+                                       shimCloneNode( elem );
+
+                       if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&
+                               (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
+                               // IE copies events bound via attachEvent when using cloneNode.
+                               // Calling detachEvent on the clone will also remove the events
+                               // from the original. In order to get around this, we use some
+                               // proprietary methods to clear the events. Thanks to MooTools
+                               // guys for this hotness.
+
+                               cloneFixAttributes( elem, clone );
 
-       dir: function( elem, dir, until ) {
-               var matched = [],
-                       cur = elem[ dir ];
+                               // Using Sizzle here is crazy slow, so we use getElementsByTagName instead
+                               srcElements = getAll( elem );
+                               destElements = getAll( clone );
 
-               while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
-                       if ( cur.nodeType === 1 ) {
-                               matched.push( cur );
+                               // Weird iteration because IE will replace the length property
+                               // with an element if you are cloning the body and one of the
+                               // elements on the page has a name or id of "length"
+                               for ( i = 0; srcElements[i]; ++i ) {
+                                       // Ensure that the destination node is not null; Fixes #9587
+                                       if ( destElements[i] ) {
+                                               cloneFixAttributes( srcElements[i], destElements[i] );
+                                       }
+                               }
                        }
-                       cur = cur[dir];
-               }
-               return matched;
-       },
 
-       sibling: function( n, elem ) {
-               var r = [];
+                       // Copy the events from the original to the clone
+                       if ( dataAndEvents ) {
+                               cloneCopyEvent( elem, clone );
 
-               for ( ; n; n = n.nextSibling ) {
-                       if ( n.nodeType === 1 && n !== elem ) {
-                               r.push( n );
+                               if ( deepDataAndEvents ) {
+                                       srcElements = getAll( elem );
+                                       destElements = getAll( clone );
+
+                                       for ( i = 0; srcElements[i]; ++i ) {
+                                               cloneCopyEvent( srcElements[i], destElements[i] );
+                                       }
+                               }
                        }
-               }
 
-               return r;
-       }
-});
+                       srcElements = destElements = null;
 
-// Implement the identical functionality for filter and not
-function winnow( elements, qualifier, keep ) {
+                       // Return the cloned set
+                       return clone;
+               },
 
-       // Can't pass null or undefined to indexOf in Firefox 4
-       // Set to 0 to skip string check
-       qualifier = qualifier || 0;
+               clean: function( elems, context, fragment, scripts ) {
+                       var checkScriptType, script, j,
+                               ret = [];
 
-       if ( jQuery.isFunction( qualifier ) ) {
-               return jQuery.grep(elements, function( elem, i ) {
-                       var retVal = !!qualifier.call( elem, i, elem );
-                       return retVal === keep;
-               });
+                       context = context || document;
 
-       } else if ( qualifier.nodeType ) {
-               return jQuery.grep(elements, function( elem, i ) {
-                       return ( elem === qualifier ) === keep;
-               });
+                       // !context.createElement fails in IE with an error but returns typeof 'object'
+                       if ( typeof context.createElement === "undefined" ) {
+                               context = context.ownerDocument || context[0] && context[0].ownerDocument || document;
+                       }
 
-       } else if ( typeof qualifier === "string" ) {
-               var filtered = jQuery.grep(elements, function( elem ) {
-                       return elem.nodeType === 1;
-               });
+                       for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
+                               if ( typeof elem === "number" ) {
+                                       elem += "";
+                               }
 
-               if ( isSimple.test( qualifier ) ) {
-                       return jQuery.filter(qualifier, filtered, !keep);
-               } else {
-                       qualifier = jQuery.filter( qualifier, filtered );
-               }
-       }
+                               if ( !elem ) {
+                                       continue;
+                               }
 
-       return jQuery.grep(elements, function( elem, i ) {
-               return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep;
-       });
-}
-function createSafeFragment( document ) {
-       var list = nodeNames.split( "|" ),
-       safeFrag = document.createDocumentFragment();
-
-       if ( safeFrag.createElement ) {
-               while ( list.length ) {
-                       safeFrag.createElement(
-                               list.pop()
-                       );
-               }
-       }
-       return safeFrag;
-}
-
-var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" +
-               "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",
-       rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g,
-       rleadingWhitespace = /^\s+/,
-       rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,
-       rtagName = /<([\w:]+)/,
-       rtbody = /<tbody/i,
-       rhtml = /<|&#?\w+;/,
-       rnoInnerhtml = /<(?:script|style|link)/i,
-       rnocache = /<(?:script|object|embed|option|style)/i,
-       rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"),
-       rcheckableType = /^(?:checkbox|radio)$/,
-       // checked="checked" or checked
-       rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
-       rscriptType = /\/(java|ecma)script/i,
-       rcleanScript = /^\s*<!(?:\[CDATA\[|\-\-)|[\]\-]{2}>\s*$/g,
-       wrapMap = {
-               option: [ 1, "<select multiple='multiple'>", "</select>" ],
-               legend: [ 1, "<fieldset>", "</fieldset>" ],
-               thead: [ 1, "<table>", "</table>" ],
-               tr: [ 2, "<table><tbody>", "</tbody></table>" ],
-               td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
-               col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
-               area: [ 1, "<map>", "</map>" ],
-               _default: [ 0, "", "" ]
-       },
-       safeFragment = createSafeFragment( document ),
-       fragmentDiv = safeFragment.appendChild( document.createElement("div") );
-
-wrapMap.optgroup = wrapMap.option;
-wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
-wrapMap.th = wrapMap.td;
-
-// IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags,
-// unless wrapped in a div with non-breaking characters in front of it.
-if ( !jQuery.support.htmlSerialize ) {
-       wrapMap._default = [ 1, "X<div>", "</div>" ];
-}
-
-jQuery.fn.extend({
-       text: function( value ) {
-               return jQuery.access( this, function( value ) {
-                       return value === undefined ?
-                               jQuery.text( this ) :
-                               this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) );
-               }, null, value, arguments.length );
-       },
-
-       wrapAll: function( html ) {
-               if ( jQuery.isFunction( html ) ) {
-                       return this.each(function(i) {
-                               jQuery(this).wrapAll( html.call(this, i) );
-                       });
-               }
+                               // Convert html string into DOM nodes
+                               if ( typeof elem === "string" ) {
+                                       if ( !rhtml.test( elem ) ) {
+                                               elem = context.createTextNode( elem );
+                                       } else {
+                                               // Fix "XHTML"-style tags in all browsers
+                                               elem = elem.replace(rxhtmlTag, "<$1></$2>");
+
+                                               // Trim whitespace, otherwise indexOf won't work as expected
+                                               var tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase(),
+                                                       wrap = wrapMap[ tag ] || wrapMap._default,
+                                                       depth = wrap[0],
+                                                       div = context.createElement("div"),
+                                                       safeChildNodes = safeFragment.childNodes,
+                                                       remove;
+
+                                               // Append wrapper element to unknown element safe doc fragment
+                                               if ( context === document ) {
+                                                       // Use the fragment we've already created for this document
+                                                       safeFragment.appendChild( div );
+                                               } else {
+                                                       // Use a fragment created with the owner document
+                                                       createSafeFragment( context ).appendChild( div );
+                                               }
 
-               if ( this[0] ) {
-                       // The elements to wrap the target around
-                       var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
+                                               // Go to html and back, then peel off extra wrappers
+                                               div.innerHTML = wrap[1] + elem + wrap[2];
 
-                       if ( this[0].parentNode ) {
-                               wrap.insertBefore( this[0] );
-                       }
+                                               // Move to the right depth
+                                               while ( depth-- ) {
+                                                       div = div.lastChild;
+                                               }
 
-                       wrap.map(function() {
-                               var elem = this;
+                                               // Remove IE's autoinserted <tbody> from table fragments
+                                               if ( !jQuery.support.tbody ) {
 
-                               while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
-                                       elem = elem.firstChild;
-                               }
+                                                       // String was a <table>, *may* have spurious <tbody>
+                                                       var hasBody = rtbody.test(elem),
+                                                               tbody = tag === "table" && !hasBody ?
+                                                                       div.firstChild && div.firstChild.childNodes :
 
-                               return elem;
-                       }).append( this );
-               }
+                                                                       // String was a bare <thead> or <tfoot>
+                                                                       wrap[1] === "<table>" && !hasBody ?
+                                                                               div.childNodes :
+                                                                               [];
 
-               return this;
-       },
+                                                       for ( j = tbody.length - 1; j >= 0 ; --j ) {
+                                                               if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) {
+                                                                       tbody[ j ].parentNode.removeChild( tbody[ j ] );
+                                                               }
+                                                       }
+                                               }
 
-       wrapInner: function( html ) {
-               if ( jQuery.isFunction( html ) ) {
-                       return this.each(function(i) {
-                               jQuery(this).wrapInner( html.call(this, i) );
-                       });
-               }
+                                               // IE completely kills leading whitespace when innerHTML is used
+                                               if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
+                                                       div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild );
+                                               }
 
-               return this.each(function() {
-                       var self = jQuery( this ),
-                               contents = self.contents();
+                                               elem = div.childNodes;
 
-                       if ( contents.length ) {
-                               contents.wrapAll( html );
+                                               // Clear elements from DocumentFragment (safeFragment or otherwise)
+                                               // to avoid hoarding elements. Fixes #11356
+                                               if ( div ) {
+                                                       div.parentNode.removeChild( div );
 
-                       } else {
-                               self.append( html );
-                       }
-               });
-       },
+                                                       // Guard against -1 index exceptions in FF3.6
+                                                       if ( safeChildNodes.length > 0 ) {
+                                                               remove = safeChildNodes[ safeChildNodes.length - 1 ];
 
-       wrap: function( html ) {
-               var isFunction = jQuery.isFunction( html );
+                                                               if ( remove && remove.parentNode ) {
+                                                                       remove.parentNode.removeChild( remove );
+                                                               }
+                                                       }
+                                               }
+                                       }
+                               }
 
-               return this.each(function(i) {
-                       jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );
-               });
-       },
+                               // Resets defaultChecked for any radios and checkboxes
+                               // about to be appended to the DOM in IE 6/7 (#8060)
+                               var len;
+                               if ( !jQuery.support.appendChecked ) {
+                                       if ( elem[0] && typeof (len = elem.length) === "number" ) {
+                                               for ( j = 0; j < len; j++ ) {
+                                                       findInputs( elem[j] );
+                                               }
+                                       } else {
+                                               findInputs( elem );
+                                       }
+                               }
 
-       unwrap: function() {
-               return this.parent().each(function() {
-                       if ( !jQuery.nodeName( this, "body" ) ) {
-                               jQuery( this ).replaceWith( this.childNodes );
+                               if ( elem.nodeType ) {
+                                       ret.push( elem );
+                               } else {
+                                       ret = jQuery.merge( ret, elem );
+                               }
                        }
-               }).end();
-       },
 
-       append: function() {
-               return this.domManip(arguments, true, function( elem ) {
-                       if ( this.nodeType === 1 || this.nodeType === 11 ) {
-                               this.appendChild( elem );
-                       }
-               });
-       },
+                       if ( fragment ) {
+                               checkScriptType = function( elem ) {
+                                       return !elem.type || rscriptType.test( elem.type );
+                               };
+                               for ( i = 0; ret[i]; i++ ) {
+                                       script = ret[i];
+                                       if ( scripts && jQuery.nodeName( script, "script" ) && (!script.type || rscriptType.test( script.type )) ) {
+                                               scripts.push( script.parentNode ? script.parentNode.removeChild( script ) : script );
+
+                                       } else {
+                                               if ( script.nodeType === 1 ) {
+                                                       var jsTags = jQuery.grep( script.getElementsByTagName( "script" ), checkScriptType );
 
-       prepend: function() {
-               return this.domManip(arguments, true, function( elem ) {
-                       if ( this.nodeType === 1 || this.nodeType === 11 ) {
-                               this.insertBefore( elem, this.firstChild );
+                                                       ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) );
+                                               }
+                                               fragment.appendChild( script );
+                                       }
+                               }
                        }
-               });
-       },
 
-       before: function() {
-               if ( !isDisconnected( this[0] ) ) {
-                       return this.domManip(arguments, false, function( elem ) {
-                               this.parentNode.insertBefore( elem, this );
-                       });
-               }
+                       return ret;
+               },
 
-               if ( arguments.length ) {
-                       var set = jQuery.clean( arguments );
-                       return this.pushStack( jQuery.merge( set, this ), "before", this.selector );
-               }
-       },
+               cleanData: function( elems ) {
+                       var data, id,
+                               cache = jQuery.cache,
+                               special = jQuery.event.special,
+                               deleteExpando = jQuery.support.deleteExpando;
 
-       after: function() {
-               if ( !isDisconnected( this[0] ) ) {
-                       return this.domManip(arguments, false, function( elem ) {
-                               this.parentNode.insertBefore( elem, this.nextSibling );
-                       });
-               }
+                       for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
+                               if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {
+                                       continue;
+                               }
 
-               if ( arguments.length ) {
-                       var set = jQuery.clean( arguments );
-                       return this.pushStack( jQuery.merge( this, set ), "after", this.selector );
-               }
-       },
+                               id = elem[ jQuery.expando ];
 
-       // keepData is for internal use only--do not document
-       remove: function( selector, keepData ) {
-               var elem,
-                       i = 0;
+                               if ( id ) {
+                                       data = cache[ id ];
 
-               for ( ; (elem = this[i]) != null; i++ ) {
-                       if ( !selector || jQuery.filter( selector, [ elem ] ).length ) {
-                               if ( !keepData && elem.nodeType === 1 ) {
-                                       jQuery.cleanData( elem.getElementsByTagName("*") );
-                                       jQuery.cleanData( [ elem ] );
-                               }
+                                       if ( data && data.events ) {
+                                               for ( var type in data.events ) {
+                                                       if ( special[ type ] ) {
+                                                               jQuery.event.remove( elem, type );
 
-                               if ( elem.parentNode ) {
-                                       elem.parentNode.removeChild( elem );
-                               }
-                       }
-               }
+                                                               // This is a shortcut to avoid jQuery.event.remove's overhead
+                                                       } else {
+                                                               jQuery.removeEvent( elem, type, data.handle );
+                                                       }
+                                               }
 
-               return this;
-       },
+                                               // Null the DOM reference to avoid IE6/7/8 leak (#7054)
+                                               if ( data.handle ) {
+                                                       data.handle.elem = null;
+                                               }
+                                       }
 
-       empty: function() {
-               var elem,
-                       i = 0;
+                                       if ( deleteExpando ) {
+                                               delete elem[ jQuery.expando ];
 
-               for ( ; (elem = this[i]) != null; i++ ) {
-                       // Remove element nodes and prevent memory leaks
-                       if ( elem.nodeType === 1 ) {
-                               jQuery.cleanData( elem.getElementsByTagName("*") );
-                       }
+                                       } else if ( elem.removeAttribute ) {
+                                               elem.removeAttribute( jQuery.expando );
+                                       }
 
-                       // Remove any remaining nodes
-                       while ( elem.firstChild ) {
-                               elem.removeChild( elem.firstChild );
+                                       delete cache[ id ];
+                               }
                        }
                }
+       });
 
-               return this;
-       },
 
-       clone: function( dataAndEvents, deepDataAndEvents ) {
-               dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
-               deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
 
-               return this.map( function () {
-                       return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
-               });
-       },
 
-       html: function( value ) {
-               return jQuery.access( this, function( value ) {
-                       var elem = this[0] || {},
-                               i = 0,
-                               l = this.length;
+       var ralpha = /alpha\([^)]*\)/i,
+               ropacity = /opacity=([^)]*)/,
+       // fixed for IE9, see #8346
+               rupper = /([A-Z]|^ms)/g,
+               rnum = /^[\-+]?(?:\d*\.)?\d+$/i,
+               rnumnonpx = /^-?(?:\d*\.)?\d+(?!px)[^\d\s]+$/i,
+               rrelNum = /^([\-+])=([\-+.\de]+)/,
+               rmargin = /^margin/,
 
-                       if ( value === undefined ) {
-                               return elem.nodeType === 1 ?
-                                       elem.innerHTML.replace( rinlinejQuery, "" ) :
-                                       undefined;
-                       }
+               cssShow = { position: "absolute", visibility: "hidden", display: "block" },
 
-                       // See if we can take a shortcut and just use innerHTML
-                       if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
-                               ( jQuery.support.htmlSerialize || !rnoshimcache.test( value )  ) &&
-                               ( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&
-                               !wrapMap[ ( rtagName.exec( value ) || ["", ""] )[1].toLowerCase() ] ) {
+       // order is important!
+               cssExpand = [ "Top", "Right", "Bottom", "Left" ],
 
-                               value = value.replace( rxhtmlTag, "<$1></$2>" );
+               curCSS,
 
-                               try {
-                                       for (; i < l; i++ ) {
-                                               // Remove element nodes and prevent memory leaks
-                                               elem = this[i] || {};
-                                               if ( elem.nodeType === 1 ) {
-                                                       jQuery.cleanData( elem.getElementsByTagName( "*" ) );
-                                                       elem.innerHTML = value;
-                                               }
-                                       }
+               getComputedStyle,
+               currentStyle;
 
-                                       elem = 0;
+       jQuery.fn.css = function( name, value ) {
+               return jQuery.access( this, function( elem, name, value ) {
+                       return value !== undefined ?
+                               jQuery.style( elem, name, value ) :
+                               jQuery.css( elem, name );
+               }, name, value, arguments.length > 1 );
+       };
 
-                               // If using innerHTML throws an exception, use the fallback method
-                               } catch(e) {}
-                       }
+       jQuery.extend({
+               // Add in style property hooks for overriding the default
+               // behavior of getting and setting a style property
+               cssHooks: {
+                       opacity: {
+                               get: function( elem, computed ) {
+                                       if ( computed ) {
+                                               // We should always get a number back from opacity
+                                               var ret = curCSS( elem, "opacity" );
+                                               return ret === "" ? "1" : ret;
 
-                       if ( elem ) {
-                               this.empty().append( value );
+                                       } else {
+                                               return elem.style.opacity;
+                                       }
+                               }
                        }
-               }, null, value, arguments.length );
-       },
+               },
 
-       replaceWith: function( value ) {
-               if ( !isDisconnected( this[0] ) ) {
-                       // Make sure that the elements are removed from the DOM before they are inserted
-                       // this can help fix replacing a parent with child elements
-                       if ( jQuery.isFunction( value ) ) {
-                               return this.each(function(i) {
-                                       var self = jQuery(this), old = self.html();
-                                       self.replaceWith( value.call( this, i, old ) );
-                               });
-                       }
+               // Exclude the following css properties to add px
+               cssNumber: {
+                       "fillOpacity": true,
+                       "fontWeight": true,
+                       "lineHeight": true,
+                       "opacity": true,
+                       "orphans": true,
+                       "widows": true,
+                       "zIndex": true,
+                       "zoom": true
+               },
+
+               // Add in properties whose names you wish to fix before
+               // setting or getting the value
+               cssProps: {
+                       // normalize float css property
+                       "float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat"
+               },
 
-                       if ( typeof value !== "string" ) {
-                               value = jQuery( value ).detach();
+               // Get and set the style property on a DOM Node
+               style: function( elem, name, value, extra ) {
+                       // Don't set styles on text and comment nodes
+                       if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
+                               return;
                        }
 
-                       return this.each(function() {
-                               var next = this.nextSibling,
-                                       parent = this.parentNode;
+                       // Make sure that we're working with the right name
+                       var ret, type, origName = jQuery.camelCase( name ),
+                               style = elem.style, hooks = jQuery.cssHooks[ origName ];
 
-                               jQuery( this ).remove();
+                       name = jQuery.cssProps[ origName ] || origName;
 
-                               if ( next ) {
-                                       jQuery(next).before( value );
-                               } else {
-                                       jQuery(parent).append( value );
+                       // Check if we're setting a value
+                       if ( value !== undefined ) {
+                               type = typeof value;
+
+                               // convert relative number strings (+= or -=) to relative numbers. #7345
+                               if ( type === "string" && (ret = rrelNum.exec( value )) ) {
+                                       value = ( +( ret[1] + 1) * +ret[2] ) + parseFloat( jQuery.css( elem, name ) );
+                                       // Fixes bug #9237
+                                       type = "number";
                                }
-                       });
-               }
 
-               return this.length ?
-                       this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value ) :
-                       this;
-       },
+                               // Make sure that NaN and null values aren't set. See: #7116
+                               if ( value == null || type === "number" && isNaN( value ) ) {
+                                       return;
+                               }
 
-       detach: function( selector ) {
-               return this.remove( selector, true );
-       },
+                               // If a number was passed in, add 'px' to the (except for certain CSS properties)
+                               if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
+                                       value += "px";
+                               }
 
-       domManip: function( args, table, callback ) {
+                               // If a hook was provided, use that value, otherwise just set the specified value
+                               if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value )) !== undefined ) {
+                                       // Wrapped to prevent IE from throwing errors when 'invalid' values are provided
+                                       // Fixes bug #5509
+                                       try {
+                                               style[ name ] = value;
+                                       } catch(e) {}
+                               }
 
-               // Flatten any nested arrays
-               args = [].concat.apply( [], args );
+                       } else {
+                               // If a hook was provided get the non-computed value from there
+                               if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
+                                       return ret;
+                               }
 
-               var results, first, fragment, iNoClone,
-                       i = 0,
-                       value = args[0],
-                       scripts = [],
-                       l = this.length;
+                               // Otherwise just get the value from the style object
+                               return style[ name ];
+                       }
+               },
 
-               // We can't cloneNode fragments that contain checked, in WebKit
-               if ( !jQuery.support.checkClone && l > 1 && typeof value === "string" && rchecked.test( value ) ) {
-                       return this.each(function() {
-                               jQuery(this).domManip( args, table, callback );
-                       });
-               }
+               css: function( elem, name, extra ) {
+                       var ret, hooks;
 
-               if ( jQuery.isFunction(value) ) {
-                       return this.each(function(i) {
-                               var self = jQuery(this);
-                               args[0] = value.call( this, i, table ? self.html() : undefined );
-                               self.domManip( args, table, callback );
-                       });
-               }
+                       // Make sure that we're working with the right name
+                       name = jQuery.camelCase( name );
+                       hooks = jQuery.cssHooks[ name ];
+                       name = jQuery.cssProps[ name ] || name;
 
-               if ( this[0] ) {
-                       results = jQuery.buildFragment( args, this, scripts );
-                       fragment = results.fragment;
-                       first = fragment.firstChild;
-
-                       if ( fragment.childNodes.length === 1 ) {
-                               fragment = first;
-                       }
-
-                       if ( first ) {
-                               table = table && jQuery.nodeName( first, "tr" );
-
-                               // Use the original fragment for the last item instead of the first because it can end up
-                               // being emptied incorrectly in certain situations (#8070).
-                               // Fragments from the fragment cache must always be cloned and never used in place.
-                               for ( iNoClone = results.cacheable || l - 1; i < l; i++ ) {
-                                       callback.call(
-                                               table && jQuery.nodeName( this[i], "table" ) ?
-                                                       findOrAppend( this[i], "tbody" ) :
-                                                       this[i],
-                                               i === iNoClone ?
-                                                       fragment :
-                                                       jQuery.clone( fragment, true, true )
-                                       );
-                               }
+                       // cssFloat needs a special treatment
+                       if ( name === "cssFloat" ) {
+                               name = "float";
                        }
 
-                       // Fix #11809: Avoid leaking memory
-                       fragment = first = null;
-
-                       if ( scripts.length ) {
-                               jQuery.each( scripts, function( i, elem ) {
-                                       if ( elem.src ) {
-                                               if ( jQuery.ajax ) {
-                                                       jQuery.ajax({
-                                                               url: elem.src,
-                                                               type: "GET",
-                                                               dataType: "script",
-                                                               async: false,
-                                                               global: false,
-                                                               "throws": true
-                                                       });
-                                               } else {
-                                                       jQuery.error("no ajax");
-                                               }
-                                       } else {
-                                               jQuery.globalEval( ( elem.text || elem.textContent || elem.innerHTML || "" ).replace( rcleanScript, "" ) );
-                                       }
+                       // If a hook was provided get the computed value from there
+                       if ( hooks && "get" in hooks && (ret = hooks.get( elem, true, extra )) !== undefined ) {
+                               return ret;
 
-                                       if ( elem.parentNode ) {
-                                               elem.parentNode.removeChild( elem );
-                                       }
-                               });
+                               // Otherwise, if a way to get the computed value exists, use that
+                       } else if ( curCSS ) {
+                               return curCSS( elem, name );
                        }
-               }
+               },
 
-               return this;
-       }
-});
+               // A method for quickly swapping in/out CSS properties to get correct calculations
+               swap: function( elem, options, callback ) {
+                       var old = {},
+                               ret, name;
 
-function findOrAppend( elem, tag ) {
-       return elem.getElementsByTagName( tag )[0] || elem.appendChild( elem.ownerDocument.createElement( tag ) );
-}
+                       // Remember the old values, and insert the new ones
+                       for ( name in options ) {
+                               old[ name ] = elem.style[ name ];
+                               elem.style[ name ] = options[ name ];
+                       }
 
-function cloneCopyEvent( src, dest ) {
+                       ret = callback.call( elem );
 
-       if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
-               return;
-       }
+                       // Revert the old values
+                       for ( name in options ) {
+                               elem.style[ name ] = old[ name ];
+                       }
 
-       var type, i, l,
-               oldData = jQuery._data( src ),
-               curData = jQuery._data( dest, oldData ),
-               events = oldData.events;
+                       return ret;
+               }
+       });
 
-       if ( events ) {
-               delete curData.handle;
-               curData.events = {};
+// DEPRECATED in 1.3, Use jQuery.css() instead
+       jQuery.curCSS = jQuery.css;
 
-               for ( type in events ) {
-                       for ( i = 0, l = events[ type ].length; i < l; i++ ) {
-                               jQuery.event.add( dest, type, events[ type ][ i ] );
-                       }
-               }
-       }
+       if ( document.defaultView && document.defaultView.getComputedStyle ) {
+               getComputedStyle = function( elem, name ) {
+                       var ret, defaultView, computedStyle, width,
+                               style = elem.style;
 
-       // make the cloned public data object a copy from the original
-       if ( curData.data ) {
-               curData.data = jQuery.extend( {}, curData.data );
-       }
-}
+                       name = name.replace( rupper, "-$1" ).toLowerCase();
 
-function cloneFixAttributes( src, dest ) {
-       var nodeName;
+                       if ( (defaultView = elem.ownerDocument.defaultView) &&
+                               (computedStyle = defaultView.getComputedStyle( elem, null )) ) {
 
-       // We do not need to do anything for non-Elements
-       if ( dest.nodeType !== 1 ) {
-               return;
-       }
+                               ret = computedStyle.getPropertyValue( name );
+                               if ( ret === "" && !jQuery.contains( elem.ownerDocument.documentElement, elem ) ) {
+                                       ret = jQuery.style( elem, name );
+                               }
+                       }
 
-       // clearAttributes removes the attributes, which we don't want,
-       // but also removes the attachEvent events, which we *do* want
-       if ( dest.clearAttributes ) {
-               dest.clearAttributes();
-       }
+                       // A tribute to the "awesome hack by Dean Edwards"
+                       // WebKit uses "computed value (percentage if specified)" instead of "used value" for margins
+                       // which is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values
+                       if ( !jQuery.support.pixelMargin && computedStyle && rmargin.test( name ) && rnumnonpx.test( ret ) ) {
+                               width = style.width;
+                               style.width = ret;
+                               ret = computedStyle.width;
+                               style.width = width;
+                       }
 
-       // mergeAttributes, in contrast, only merges back on the
-       // original attributes, not the events
-       if ( dest.mergeAttributes ) {
-               dest.mergeAttributes( src );
+                       return ret;
+               };
        }
 
-       nodeName = dest.nodeName.toLowerCase();
-
-       if ( nodeName === "object" ) {
-               // IE6-10 improperly clones children of object elements using classid.
-               // IE10 throws NoModificationAllowedError if parent is null, #12132.
-               if ( dest.parentNode ) {
-                       dest.outerHTML = src.outerHTML;
-               }
+       if ( document.documentElement.currentStyle ) {
+               currentStyle = function( elem, name ) {
+                       var left, rsLeft, uncomputed,
+                               ret = elem.currentStyle && elem.currentStyle[ name ],
+                               style = elem.style;
 
-               // This path appears unavoidable for IE9. When cloning an object
-               // element in IE9, the outerHTML strategy above is not sufficient.
-               // If the src has innerHTML and the destination does not,
-               // copy the src.innerHTML into the dest.innerHTML. #10324
-               if ( jQuery.support.html5Clone && (src.innerHTML && !jQuery.trim(dest.innerHTML)) ) {
-                       dest.innerHTML = src.innerHTML;
-               }
+                       // Avoid setting ret to empty string here
+                       // so we don't default to auto
+                       if ( ret == null && style && (uncomputed = style[ name ]) ) {
+                               ret = uncomputed;
+                       }
 
-       } else if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
-               // IE6-8 fails to persist the checked state of a cloned checkbox
-               // or radio button. Worse, IE6-7 fail to give the cloned element
-               // a checked appearance if the defaultChecked value isn't also set
+                       // From the awesome hack by Dean Edwards
+                       // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
 
-               dest.defaultChecked = dest.checked = src.checked;
+                       // If we're not dealing with a regular pixel number
+                       // but a number that has a weird ending, we need to convert it to pixels
+                       if ( rnumnonpx.test( ret ) ) {
 
-               // IE6-7 get confused and end up setting the value of a cloned
-               // checkbox/radio button to an empty string instead of "on"
-               if ( dest.value !== src.value ) {
-                       dest.value = src.value;
-               }
+                               // Remember the original values
+                               left = style.left;
+                               rsLeft = elem.runtimeStyle && elem.runtimeStyle.left;
 
-       // IE6-8 fails to return the selected option to the default selected
-       // state when cloning options
-       } else if ( nodeName === "option" ) {
-               dest.selected = src.defaultSelected;
+                               // Put in the new values to get a computed value out
+                               if ( rsLeft ) {
+                                       elem.runtimeStyle.left = elem.currentStyle.left;
+                               }
+                               style.left = name === "fontSize" ? "1em" : ret;
+                               ret = style.pixelLeft + "px";
 
-       // IE6-8 fails to set the defaultValue to the correct value when
-       // cloning other types of input fields
-       } else if ( nodeName === "input" || nodeName === "textarea" ) {
-               dest.defaultValue = src.defaultValue;
+                               // Revert the changed values
+                               style.left = left;
+                               if ( rsLeft ) {
+                                       elem.runtimeStyle.left = rsLeft;
+                               }
+                       }
 
-       // IE blanks contents when cloning scripts
-       } else if ( nodeName === "script" && dest.text !== src.text ) {
-               dest.text = src.text;
+                       return ret === "" ? "auto" : ret;
+               };
        }
 
-       // Event data gets referenced instead of copied if the expando
-       // gets copied too
-       dest.removeAttribute( jQuery.expando );
-}
+       curCSS = getComputedStyle || currentStyle;
 
-jQuery.buildFragment = function( args, context, scripts ) {
-       var fragment, cacheable, cachehit,
-               first = args[ 0 ];
+       function getWidthOrHeight( elem, name, extra ) {
 
-       // Set context from what may come in as undefined or a jQuery collection or a node
-       context = context || document;
-       context = (context[0] || context).ownerDocument || context[0] || context;
+               // Start with offset property
+               var val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
+                       i = name === "width" ? 1 : 0,
+                       len = 4;
 
-       // Ensure that an attr object doesn't incorrectly stand in as a document object
-       // Chrome and Firefox seem to allow this to occur and will throw exception
-       // Fixes #8950
-       if ( typeof context.createDocumentFragment === "undefined" ) {
-               context = document;
-       }
+               if ( val > 0 ) {
+                       if ( extra !== "border" ) {
+                               for ( ; i < len; i += 2 ) {
+                                       if ( !extra ) {
+                                               val -= parseFloat( jQuery.css( elem, "padding" + cssExpand[ i ] ) ) || 0;
+                                       }
+                                       if ( extra === "margin" ) {
+                                               val += parseFloat( jQuery.css( elem, extra + cssExpand[ i ] ) ) || 0;
+                                       } else {
+                                               val -= parseFloat( jQuery.css( elem, "border" + cssExpand[ i ] + "Width" ) ) || 0;
+                                       }
+                               }
+                       }
 
-       // Only cache "small" (1/2 KB) HTML strings that are associated with the main document
-       // Cloning options loses the selected state, so don't cache them
-       // IE 6 doesn't like it when you put <object> or <embed> elements in a fragment
-       // Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache
-       // Lastly, IE6,7,8 will not correctly reuse cached fragments that were created from unknown elems #10501
-       if ( args.length === 1 && typeof first === "string" && first.length < 512 && context === document &&
-               first.charAt(0) === "<" && !rnocache.test( first ) &&
-               (jQuery.support.checkClone || !rchecked.test( first )) &&
-               (jQuery.support.html5Clone || !rnoshimcache.test( first )) ) {
-
-               // Mark cacheable and look for a hit
-               cacheable = true;
-               fragment = jQuery.fragments[ first ];
-               cachehit = fragment !== undefined;
-       }
+                       return val + "px";
+               }
 
-       if ( !fragment ) {
-               fragment = context.createDocumentFragment();
-               jQuery.clean( args, context, fragment, scripts );
+               // Fall back to computed then uncomputed css if necessary
+               val = curCSS( elem, name );
+               if ( val < 0 || val == null ) {
+                       val = elem.style[ name ];
+               }
 
-               // Update the cache, but only store false
-               // unless this is a second parsing of the same content
-               if ( cacheable ) {
-                       jQuery.fragments[ first ] = cachehit && fragment;
+               // Computed unit is not pixels. Stop here and return.
+               if ( rnumnonpx.test(val) ) {
+                       return val;
                }
-       }
 
-       return { fragment: fragment, cacheable: cacheable };
-};
+               // Normalize "", auto, and prepare for extra
+               val = parseFloat( val ) || 0;
 
-jQuery.fragments = {};
+               // Add padding, border, margin
+               if ( extra ) {
+                       for ( ; i < len; i += 2 ) {
+                               val += parseFloat( jQuery.css( elem, "padding" + cssExpand[ i ] ) ) || 0;
+                               if ( extra !== "padding" ) {
+                                       val += parseFloat( jQuery.css( elem, "border" + cssExpand[ i ] + "Width" ) ) || 0;
+                               }
+                               if ( extra === "margin" ) {
+                                       val += parseFloat( jQuery.css( elem, extra + cssExpand[ i ]) ) || 0;
+                               }
+                       }
+               }
 
-jQuery.each({
-       appendTo: "append",
-       prependTo: "prepend",
-       insertBefore: "before",
-       insertAfter: "after",
-       replaceAll: "replaceWith"
-}, function( name, original ) {
-       jQuery.fn[ name ] = function( selector ) {
-               var elems,
-                       i = 0,
-                       ret = [],
-                       insert = jQuery( selector ),
-                       l = insert.length,
-                       parent = this.length === 1 && this[0].parentNode;
+               return val + "px";
+       }
 
-               if ( (parent == null || parent && parent.nodeType === 11 && parent.childNodes.length === 1) && l === 1 ) {
-                       insert[ original ]( this[0] );
-                       return this;
-               } else {
-                       for ( ; i < l; i++ ) {
-                               elems = ( i > 0 ? this.clone(true) : this ).get();
-                               jQuery( insert[i] )[ original ]( elems );
-                               ret = ret.concat( elems );
+       jQuery.each([ "height", "width" ], function( i, name ) {
+               jQuery.cssHooks[ name ] = {
+                       get: function( elem, computed, extra ) {
+                               if ( computed ) {
+                                       if ( elem.offsetWidth !== 0 ) {
+                                               return getWidthOrHeight( elem, name, extra );
+                                       } else {
+                                               return jQuery.swap( elem, cssShow, function() {
+                                                       return getWidthOrHeight( elem, name, extra );
+                                               });
+                                       }
+                               }
+                       },
+
+                       set: function( elem, value ) {
+                               return rnum.test( value ) ?
+                                       value + "px" :
+                                       value;
                        }
+               };
+       });
 
-                       return this.pushStack( ret, name, insert.selector );
-               }
-       };
-});
+       if ( !jQuery.support.opacity ) {
+               jQuery.cssHooks.opacity = {
+                       get: function( elem, computed ) {
+                               // IE uses filters for opacity
+                               return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?
+                                       ( parseFloat( RegExp.$1 ) / 100 ) + "" :
+                                       computed ? "1" : "";
+                       },
 
-function getAll( elem ) {
-       if ( typeof elem.getElementsByTagName !== "undefined" ) {
-               return elem.getElementsByTagName( "*" );
+                       set: function( elem, value ) {
+                               var style = elem.style,
+                                       currentStyle = elem.currentStyle,
+                                       opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "",
+                                       filter = currentStyle && currentStyle.filter || style.filter || "";
 
-       } else if ( typeof elem.querySelectorAll !== "undefined" ) {
-               return elem.querySelectorAll( "*" );
+                               // IE has trouble with opacity if it does not have layout
+                               // Force it by setting the zoom level
+                               style.zoom = 1;
 
-       } else {
-               return [];
-       }
-}
+                               // if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652
+                               if ( value >= 1 && jQuery.trim( filter.replace( ralpha, "" ) ) === "" ) {
 
-// Used in clean, fixes the defaultChecked property
-function fixDefaultChecked( elem ) {
-       if ( rcheckableType.test( elem.type ) ) {
-               elem.defaultChecked = elem.checked;
-       }
-}
+                                       // Setting style.filter to null, "" & " " still leave "filter:" in the cssText
+                                       // if "filter:" is present at all, clearType is disabled, we want to avoid this
+                                       // style.removeAttribute is IE Only, but so apparently is this code path...
+                                       style.removeAttribute( "filter" );
 
-jQuery.extend({
-       clone: function( elem, dataAndEvents, deepDataAndEvents ) {
-               var srcElements,
-                       destElements,
-                       i,
-                       clone;
+                                       // if there there is no filter style applied in a css rule, we are done
+                                       if ( currentStyle && !currentStyle.filter ) {
+                                               return;
+                                       }
+                               }
 
-               if ( jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) {
-                       clone = elem.cloneNode( true );
+                               // otherwise, set new filter values
+                               style.filter = ralpha.test( filter ) ?
+                                       filter.replace( ralpha, opacity ) :
+                                       filter + " " + opacity;
+                       }
+               };
+       }
 
-               // IE<=8 does not properly clone detached, unknown element nodes
-               } else {
-                       fragmentDiv.innerHTML = elem.outerHTML;
-                       fragmentDiv.removeChild( clone = fragmentDiv.firstChild );
+       jQuery(function() {
+               // This hook cannot be added until DOM ready because the support test
+               // for it is not run until after DOM ready
+               if ( !jQuery.support.reliableMarginRight ) {
+                       jQuery.cssHooks.marginRight = {
+                               get: function( elem, computed ) {
+                                       // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+                                       // Work around by temporarily setting element display to inline-block
+                                       return jQuery.swap( elem, { "display": "inline-block" }, function() {
+                                               if ( computed ) {
+                                                       return curCSS( elem, "margin-right" );
+                                               } else {
+                                                       return elem.style.marginRight;
+                                               }
+                                       });
+                               }
+                       };
                }
+       });
 
-               if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&
-                               (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
-                       // IE copies events bound via attachEvent when using cloneNode.
-                       // Calling detachEvent on the clone will also remove the events
-                       // from the original. In order to get around this, we use some
-                       // proprietary methods to clear the events. Thanks to MooTools
-                       // guys for this hotness.
+       if ( jQuery.expr && jQuery.expr.filters ) {
+               jQuery.expr.filters.hidden = function( elem ) {
+                       var width = elem.offsetWidth,
+                               height = elem.offsetHeight;
 
-                       cloneFixAttributes( elem, clone );
+                       return ( width === 0 && height === 0 ) || (!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || jQuery.css( elem, "display" )) === "none");
+               };
 
-                       // Using Sizzle here is crazy slow, so we use getElementsByTagName instead
-                       srcElements = getAll( elem );
-                       destElements = getAll( clone );
+               jQuery.expr.filters.visible = function( elem ) {
+                       return !jQuery.expr.filters.hidden( elem );
+               };
+       }
 
-                       // Weird iteration because IE will replace the length property
-                       // with an element if you are cloning the body and one of the
-                       // elements on the page has a name or id of "length"
-                       for ( i = 0; srcElements[i]; ++i ) {
-                               // Ensure that the destination node is not null; Fixes #9587
-                               if ( destElements[i] ) {
-                                       cloneFixAttributes( srcElements[i], destElements[i] );
-                               }
-                       }
-               }
+// These hooks are used by animate to expand properties
+       jQuery.each({
+               margin: "",
+               padding: "",
+               border: "Width"
+       }, function( prefix, suffix ) {
 
-               // Copy the events from the original to the clone
-               if ( dataAndEvents ) {
-                       cloneCopyEvent( elem, clone );
+               jQuery.cssHooks[ prefix + suffix ] = {
+                       expand: function( value ) {
+                               var i,
 
-                       if ( deepDataAndEvents ) {
-                               srcElements = getAll( elem );
-                               destElements = getAll( clone );
+                               // assumes a single number if not a string
+                                       parts = typeof value === "string" ? value.split(" ") : [ value ],
+                                       expanded = {};
 
-                               for ( i = 0; srcElements[i]; ++i ) {
-                                       cloneCopyEvent( srcElements[i], destElements[i] );
+                               for ( i = 0; i < 4; i++ ) {
+                                       expanded[ prefix + cssExpand[ i ] + suffix ] =
+                                               parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
                                }
-                       }
-               }
 
-               srcElements = destElements = null;
+                               return expanded;
+                       }
+               };
+       });
 
-               // Return the cloned set
-               return clone;
-       },
 
-       clean: function( elems, context, fragment, scripts ) {
-               var j, safe, elem, tag, wrap, depth, div, hasBody, tbody, len, handleScript, jsTags,
-                       i = 0,
-                       ret = [];
 
-               // Ensure that context is a document
-               if ( !context || typeof context.createDocumentFragment === "undefined" ) {
-                       context = document;
-               }
 
-               // Use the already-created safe fragment if context permits
-               for ( safe = context === document && safeFragment; (elem = elems[i]) != null; i++ ) {
-                       if ( typeof elem === "number" ) {
-                               elem += "";
-                       }
+       var r20 = /%20/g,
+               rbracket = /\[\]$/,
+               rCRLF = /\r?\n/g,
+               rhash = /#.*$/,
+               rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
+               rinput = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
+       // #7653, #8125, #8152: local protocol detection
+               rlocalProtocol = /^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,
+               rnoContent = /^(?:GET|HEAD)$/,
+               rprotocol = /^\/\//,
+               rquery = /\?/,
+               rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
+               rselectTextarea = /^(?:select|textarea)/i,
+               rspacesAjax = /\s+/,
+               rts = /([?&])_=[^&]*/,
+               rurl = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,
 
-                       if ( !elem ) {
-                               continue;
-                       }
+       // Keep a copy of the old load method
+               _load = jQuery.fn.load,
 
-                       // Convert html string into DOM nodes
-                       if ( typeof elem === "string" ) {
-                               if ( !rhtml.test( elem ) ) {
-                                       elem = context.createTextNode( elem );
-                               } else {
-                                       // Ensure a safe container in which to render the html
-                                       safe = safe || createSafeFragment( context );
-                                       div = div || safe.appendChild( context.createElement("div") );
+       /* Prefilters
+        * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
+        * 2) These are called:
+        *    - BEFORE asking for a transport
+        *    - AFTER param serialization (s.data is a string if s.processData is true)
+        * 3) key is the dataType
+        * 4) the catchall symbol "*" can be used
+        * 5) execution will start with transport dataType and THEN continue down to "*" if needed
+        */
+               prefilters = {},
 
-                                       // Fix "XHTML"-style tags in all browsers
-                                       elem = elem.replace(rxhtmlTag, "<$1></$2>");
+       /* Transports bindings
+        * 1) key is the dataType
+        * 2) the catchall symbol "*" can be used
+        * 3) selection will start with transport dataType and THEN go to "*" if needed
+        */
+               transports = {},
 
-                                       // Go to html and back, then peel off extra wrappers
-                                       tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase();
-                                       wrap = wrapMap[ tag ] || wrapMap._default;
-                                       depth = wrap[0];
-                                       div.innerHTML = wrap[1] + elem + wrap[2];
+       // Document location
+               ajaxLocation,
 
-                                       // Move to the right depth
-                                       while ( depth-- ) {
-                                               div = div.lastChild;
-                                       }
+       // Document location segments
+               ajaxLocParts,
 
-                                       // Remove IE's autoinserted <tbody> from table fragments
-                                       if ( !jQuery.support.tbody ) {
+       // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
+               allTypes = ["*/"] + ["*"];
 
-                                               // String was a <table>, *may* have spurious <tbody>
-                                               hasBody = rtbody.test(elem);
-                                                       tbody = tag === "table" && !hasBody ?
-                                                               div.firstChild && div.firstChild.childNodes :
+// #8138, IE may throw an exception when accessing
+// a field from window.location if document.domain has been set
+       try {
+               ajaxLocation = location.href;
+       } catch( e ) {
+               // Use the href attribute of an A element
+               // since IE will modify it given document.location
+               ajaxLocation = document.createElement( "a" );
+               ajaxLocation.href = "";
+               ajaxLocation = ajaxLocation.href;
+       }
 
-                                                               // String was a bare <thead> or <tfoot>
-                                                               wrap[1] === "<table>" && !hasBody ?
-                                                                       div.childNodes :
-                                                                       [];
+// Segment location into parts
+       ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
 
-                                               for ( j = tbody.length - 1; j >= 0 ; --j ) {
-                                                       if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) {
-                                                               tbody[ j ].parentNode.removeChild( tbody[ j ] );
-                                                       }
-                                               }
-                                       }
+// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
+       function addToPrefiltersOrTransports( structure ) {
 
-                                       // IE completely kills leading whitespace when innerHTML is used
-                                       if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
-                                               div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild );
-                                       }
+               // dataTypeExpression is optional and defaults to "*"
+               return function( dataTypeExpression, func ) {
 
-                                       elem = div.childNodes;
+                       if ( typeof dataTypeExpression !== "string" ) {
+                               func = dataTypeExpression;
+                               dataTypeExpression = "*";
+                       }
 
-                                       // Remember the top-level container for proper cleanup
-                                       div = safe.lastChild;
+                       if ( jQuery.isFunction( func ) ) {
+                               var dataTypes = dataTypeExpression.toLowerCase().split( rspacesAjax ),
+                                       i = 0,
+                                       length = dataTypes.length,
+                                       dataType,
+                                       list,
+                                       placeBefore;
+
+                               // For each dataType in the dataTypeExpression
+                               for ( ; i < length; i++ ) {
+                                       dataType = dataTypes[ i ];
+                                       // We control if we're asked to add before
+                                       // any existing element
+                                       placeBefore = /^\+/.test( dataType );
+                                       if ( placeBefore ) {
+                                               dataType = dataType.substr( 1 ) || "*";
+                                       }
+                                       list = structure[ dataType ] = structure[ dataType ] || [];
+                                       // then we add to the structure accordingly
+                                       list[ placeBefore ? "unshift" : "push" ]( func );
                                }
                        }
+               };
+       }
 
-                       if ( elem.nodeType ) {
-                               ret.push( elem );
-                       } else {
-                               ret = jQuery.merge( ret, elem );
-                       }
-               }
+// Base inspection function for prefilters and transports
+       function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR,
+                                               dataType /* internal */, inspected /* internal */ ) {
 
-               // Fix #11356: Clear elements from safeFragment
-               if ( div ) {
-                       safe.removeChild( div );
-                       elem = div = safe = null;
-               }
+               dataType = dataType || options.dataTypes[ 0 ];
+               inspected = inspected || {};
 
-               // Reset defaultChecked for any radios and checkboxes
-               // about to be appended to the DOM in IE 6/7 (#8060)
-               if ( !jQuery.support.appendChecked ) {
-                       for ( i = 0; (elem = ret[i]) != null; i++ ) {
-                               if ( jQuery.nodeName( elem, "input" ) ) {
-                                       fixDefaultChecked( elem );
-                               } else if ( typeof elem.getElementsByTagName !== "undefined" ) {
-                                       jQuery.grep( elem.getElementsByTagName("input"), fixDefaultChecked );
+               inspected[ dataType ] = true;
+
+               var list = structure[ dataType ],
+                       i = 0,
+                       length = list ? list.length : 0,
+                       executeOnly = ( structure === prefilters ),
+                       selection;
+
+               for ( ; i < length && ( executeOnly || !selection ); i++ ) {
+                       selection = list[ i ]( options, originalOptions, jqXHR );
+                       // If we got redirected to another dataType
+                       // we try there if executing only and not done already
+                       if ( typeof selection === "string" ) {
+                               if ( !executeOnly || inspected[ selection ] ) {
+                                       selection = undefined;
+                               } else {
+                                       options.dataTypes.unshift( selection );
+                                       selection = inspectPrefiltersOrTransports(
+                                               structure, options, originalOptions, jqXHR, selection, inspected );
                                }
                        }
                }
+               // If we're only executing or nothing was selected
+               // we try the catchall dataType if not done already
+               if ( ( executeOnly || !selection ) && !inspected[ "*" ] ) {
+                       selection = inspectPrefiltersOrTransports(
+                               structure, options, originalOptions, jqXHR, "*", inspected );
+               }
+               // unnecessary when only executing (prefilters)
+               // but it'll be ignored by the caller in that case
+               return selection;
+       }
 
-               // Append elements to a provided document fragment
-               if ( fragment ) {
-                       // Special handling of each script element
-                       handleScript = function( elem ) {
-                               // Check if we consider it executable
-                               if ( !elem.type || rscriptType.test( elem.type ) ) {
-                                       // Detach the script and store it in the scripts array (if provided) or the fragment
-                                       // Return truthy to indicate that it has been handled
-                                       return scripts ?
-                                               scripts.push( elem.parentNode ? elem.parentNode.removeChild( elem ) : elem ) :
-                                               fragment.appendChild( elem );
-                               }
-                       };
-
-                       for ( i = 0; (elem = ret[i]) != null; i++ ) {
-                               // Check if we're done after handling an executable script
-                               if ( !( jQuery.nodeName( elem, "script" ) && handleScript( elem ) ) ) {
-                                       // Append to fragment and handle embedded scripts
-                                       fragment.appendChild( elem );
-                                       if ( typeof elem.getElementsByTagName !== "undefined" ) {
-                                               // handleScript alters the DOM, so use jQuery.merge to ensure snapshot iteration
-                                               jsTags = jQuery.grep( jQuery.merge( [], elem.getElementsByTagName("script") ), handleScript );
-
-                                               // Splice the scripts into ret after their former ancestor and advance our index beyond them
-                                               ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) );
-                                               i += jsTags.length;
-                                       }
-                               }
+// A special extend for ajax options
+// that takes "flat" options (not to be deep extended)
+// Fixes #9887
+       function ajaxExtend( target, src ) {
+               var key, deep,
+                       flatOptions = jQuery.ajaxSettings.flatOptions || {};
+               for ( key in src ) {
+                       if ( src[ key ] !== undefined ) {
+                               ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
                        }
                }
+               if ( deep ) {
+                       jQuery.extend( true, target, deep );
+               }
+       }
 
-               return ret;
-       },
-
-       cleanData: function( elems, /* internal */ acceptData ) {
-               var data, id, elem, type,
-                       i = 0,
-                       internalKey = jQuery.expando,
-                       cache = jQuery.cache,
-                       deleteExpando = jQuery.support.deleteExpando,
-                       special = jQuery.event.special;
-
-               for ( ; (elem = elems[i]) != null; i++ ) {
-
-                       if ( acceptData || jQuery.acceptData( elem ) ) {
-
-                               id = elem[ internalKey ];
-                               data = id && cache[ id ];
+       jQuery.fn.extend({
+               load: function( url, params, callback ) {
+                       if ( typeof url !== "string" && _load ) {
+                               return _load.apply( this, arguments );
 
-                               if ( data ) {
-                                       if ( data.events ) {
-                                               for ( type in data.events ) {
-                                                       if ( special[ type ] ) {
-                                                               jQuery.event.remove( elem, type );
+                               // Don't do a request if no elements are being requested
+                       } else if ( !this.length ) {
+                               return this;
+                       }
 
-                                                       // This is a shortcut to avoid jQuery.event.remove's overhead
-                                                       } else {
-                                                               jQuery.removeEvent( elem, type, data.handle );
-                                                       }
-                                               }
-                                       }
+                       var off = url.indexOf( " " );
+                       if ( off >= 0 ) {
+                               var selector = url.slice( off, url.length );
+                               url = url.slice( 0, off );
+                       }
 
-                                       // Remove cache only if it was not already removed by jQuery.event.remove
-                                       if ( cache[ id ] ) {
+                       // Default to a GET request
+                       var type = "GET";
 
-                                               delete cache[ id ];
+                       // If the second parameter was provided
+                       if ( params ) {
+                               // If it's a function
+                               if ( jQuery.isFunction( params ) ) {
+                                       // We assume that it's the callback
+                                       callback = params;
+                                       params = undefined;
 
-                                               // IE does not allow us to delete expando properties from nodes,
-                                               // nor does it have a removeAttribute function on Document nodes;
-                                               // we must handle all of these cases
-                                               if ( deleteExpando ) {
-                                                       delete elem[ internalKey ];
+                                       // Otherwise, build a param string
+                               } else if ( typeof params === "object" ) {
+                                       params = jQuery.param( params, jQuery.ajaxSettings.traditional );
+                                       type = "POST";
+                               }
+                       }
 
-                                               } else if ( elem.removeAttribute ) {
-                                                       elem.removeAttribute( internalKey );
+                       var self = this;
 
-                                               } else {
-                                                       elem[ internalKey ] = null;
-                                               }
+                       // Request the remote document
+                       jQuery.ajax({
+                               url: url,
+                               type: type,
+                               dataType: "html",
+                               data: params,
+                               // Complete callback (responseText is used internally)
+                               complete: function( jqXHR, status, responseText ) {
+                                       // Store the response as specified by the jqXHR object
+                                       responseText = jqXHR.responseText;
+                                       // If successful, inject the HTML into all the matched elements
+                                       if ( jqXHR.isResolved() ) {
+                                               // #4825: Get the actual response in case
+                                               // a dataFilter is present in ajaxSettings
+                                               jqXHR.done(function( r ) {
+                                                       responseText = r;
+                                               });
+                                               // See if a selector was specified
+                                               self.html( selector ?
+                                                       // Create a dummy div to hold the results
+                                                       jQuery("<div>")
+                                                               // inject the contents of the document in, removing the scripts
+                                                               // to avoid any 'Permission Denied' errors in IE
+                                                               .append(responseText.replace(rscript, ""))
+
+                                                               // Locate the specified elements
+                                                               .find(selector) :
+
+                                                       // If not, just inject the full result
+                                                       responseText );
+                                       }
 
-                                               jQuery.deletedIds.push( id );
+                                       if ( callback ) {
+                                               self.each( callback, [ responseText, status, jqXHR ] );
                                        }
                                }
-                       }
-               }
-       }
-});
-// Limit scope pollution from any deprecated API
-(function() {
-
-var matched, browser;
-
-// Use of jQuery.browser is frowned upon.
-// More details: http://api.jquery.com/jQuery.browser
-// jQuery.uaMatch maintained for back-compat
-jQuery.uaMatch = function( ua ) {
-       ua = ua.toLowerCase();
-
-       var match = /(chrome)[ \/]([\w.]+)/.exec( ua ) ||
-               /(webkit)[ \/]([\w.]+)/.exec( ua ) ||
-               /(opera)(?:.*version|)[ \/]([\w.]+)/.exec( ua ) ||
-               /(msie) ([\w.]+)/.exec( ua ) ||
-               ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec( ua ) ||
-               [];
-
-       return {
-               browser: match[ 1 ] || "",
-               version: match[ 2 ] || "0"
-       };
-};
-
-matched = jQuery.uaMatch( navigator.userAgent );
-browser = {};
-
-if ( matched.browser ) {
-       browser[ matched.browser ] = true;
-       browser.version = matched.version;
-}
+                       });
 
-// Deprecated, use jQuery.browser.webkit instead
-// Maintained for back-compat only
-if ( browser.webkit ) {
-       browser.safari = true;
-}
+                       return this;
+               },
 
-jQuery.browser = browser;
+               serialize: function() {
+                       return jQuery.param( this.serializeArray() );
+               },
 
-jQuery.sub = function() {
-       function jQuerySub( selector, context ) {
-               return new jQuerySub.fn.init( selector, context );
-       }
-       jQuery.extend( true, jQuerySub, this );
-       jQuerySub.superclass = this;
-       jQuerySub.fn = jQuerySub.prototype = this();
-       jQuerySub.fn.constructor = jQuerySub;
-       jQuerySub.sub = this.sub;
-       jQuerySub.fn.init = function init( selector, context ) {
-               if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) {
-                       context = jQuerySub( context );
+               serializeArray: function() {
+                       return this.map(function(){
+                               return this.elements ? jQuery.makeArray( this.elements ) : this;
+                       })
+                               .filter(function(){
+                                       return this.name && !this.disabled &&
+                                               ( this.checked || rselectTextarea.test( this.nodeName ) ||
+                                                       rinput.test( this.type ) );
+                               })
+                               .map(function( i, elem ){
+                                       var val = jQuery( this ).val();
+
+                                       return val == null ?
+                                               null :
+                                               jQuery.isArray( val ) ?
+                                                       jQuery.map( val, function( val, i ){
+                                                               return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+                                                       }) :
+                                               { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+                               }).get();
                }
+       });
 
-               return jQuery.fn.init.call( this, selector, context, rootjQuerySub );
-       };
-       jQuerySub.fn.init.prototype = jQuerySub.fn;
-       var rootjQuerySub = jQuerySub(document);
-       return jQuerySub;
-};
-       
-})();
-var curCSS, iframe, iframeDoc,
-       ralpha = /alpha\([^)]*\)/i,
-       ropacity = /opacity=([^)]*)/,
-       rposition = /^(top|right|bottom|left)$/,
-       rmargin = /^margin/,
-       rnumsplit = new RegExp( "^(" + core_pnum + ")(.*)$", "i" ),
-       rnumnonpx = new RegExp( "^(" + core_pnum + ")(?!px)[a-z%]+$", "i" ),
-       rrelNum = new RegExp( "^([-+])=(" + core_pnum + ")", "i" ),
-       elemdisplay = {},
-
-       cssShow = { position: "absolute", visibility: "hidden", display: "block" },
-       cssNormalTransform = {
-               letterSpacing: 0,
-               fontWeight: 400,
-               lineHeight: 1
-       },
-
-       cssExpand = [ "Top", "Right", "Bottom", "Left" ],
-       cssPrefixes = [ "Webkit", "O", "Moz", "ms" ],
-
-       eventsToggle = jQuery.fn.toggle;
-
-// return a css property mapped to a potentially vendor prefixed property
-function vendorPropName( style, name ) {
-
-       // shortcut for names that are not vendor prefixed
-       if ( name in style ) {
-               return name;
-       }
-
-       // check for vendor prefixed names
-       var capName = name.charAt(0).toUpperCase() + name.slice(1),
-               origName = name,
-               i = cssPrefixes.length;
-
-       while ( i-- ) {
-               name = cssPrefixes[ i ] + capName;
-               if ( name in style ) {
-                       return name;
-               }
-       }
+// Attach a bunch of functions for handling common AJAX events
+       jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split( " " ), function( i, o ){
+               jQuery.fn[ o ] = function( f ){
+                       return this.on( o, f );
+               };
+       });
 
-       return origName;
-}
+       jQuery.each( [ "get", "post" ], function( i, method ) {
+               jQuery[ method ] = function( url, data, callback, type ) {
+                       // shift arguments if data argument was omitted
+                       if ( jQuery.isFunction( data ) ) {
+                               type = type || callback;
+                               callback = data;
+                               data = undefined;
+                       }
 
-function isHidden( elem, el ) {
-       elem = el || elem;
-       return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem );
-}
+                       return jQuery.ajax({
+                               type: method,
+                               url: url,
+                               data: data,
+                               success: callback,
+                               dataType: type
+                       });
+               };
+       });
 
-function showHide( elements, show ) {
-       var elem, display,
-               values = [],
-               index = 0,
-               length = elements.length;
+       jQuery.extend({
 
-       for ( ; index < length; index++ ) {
-               elem = elements[ index ];
-               if ( !elem.style ) {
-                       continue;
-               }
-               values[ index ] = jQuery._data( elem, "olddisplay" );
-               if ( show ) {
-                       // Reset the inline display of this element to learn if it is
-                       // being hidden by cascaded rules or not
-                       if ( !values[ index ] && elem.style.display === "none" ) {
-                               elem.style.display = "";
-                       }
+               getScript: function( url, callback ) {
+                       return jQuery.get( url, undefined, callback, "script" );
+               },
 
-                       // Set elements which have been overridden with display: none
-                       // in a stylesheet to whatever the default browser style is
-                       // for such an element
-                       if ( elem.style.display === "" && isHidden( elem ) ) {
-                               values[ index ] = jQuery._data( elem, "olddisplay", css_defaultDisplay(elem.nodeName) );
-                       }
-               } else {
-                       display = curCSS( elem, "display" );
+               getJSON: function( url, data, callback ) {
+                       return jQuery.get( url, data, callback, "json" );
+               },
 
-                       if ( !values[ index ] && display !== "none" ) {
-                               jQuery._data( elem, "olddisplay", display );
+               // Creates a full fledged settings object into target
+               // with both ajaxSettings and settings fields.
+               // If target is omitted, writes into ajaxSettings.
+               ajaxSetup: function( target, settings ) {
+                       if ( settings ) {
+                               // Building a settings object
+                               ajaxExtend( target, jQuery.ajaxSettings );
+                       } else {
+                               // Extending ajaxSettings
+                               settings = target;
+                               target = jQuery.ajaxSettings;
                        }
-               }
-       }
+                       ajaxExtend( target, settings );
+                       return target;
+               },
 
-       // Set the display of most of the elements in a second loop
-       // to avoid the constant reflow
-       for ( index = 0; index < length; index++ ) {
-               elem = elements[ index ];
-               if ( !elem.style ) {
-                       continue;
-               }
-               if ( !show || elem.style.display === "none" || elem.style.display === "" ) {
-                       elem.style.display = show ? values[ index ] || "" : "none";
-               }
-       }
+               ajaxSettings: {
+                       url: ajaxLocation,
+                       isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
+                       global: true,
+                       type: "GET",
+                       contentType: "application/x-www-form-urlencoded; charset=UTF-8",
+                       processData: true,
+                       async: true,
+                       /*
+                        timeout: 0,
+                        data: null,
+                        dataType: null,
+                        username: null,
+                        password: null,
+                        cache: null,
+                        traditional: false,
+                        headers: {},
+                        */
+
+                       accepts: {
+                               xml: "application/xml, text/xml",
+                               html: "text/html",
+                               text: "text/plain",
+                               json: "application/json, text/javascript",
+                               "*": allTypes
+                       },
 
-       return elements;
-}
+                       contents: {
+                               xml: /xml/,
+                               html: /html/,
+                               json: /json/
+                       },
 
-jQuery.fn.extend({
-       css: function( name, value ) {
-               return jQuery.access( this, function( elem, name, value ) {
-                       return value !== undefined ?
-                               jQuery.style( elem, name, value ) :
-                               jQuery.css( elem, name );
-               }, name, value, arguments.length > 1 );
-       },
-       show: function() {
-               return showHide( this, true );
-       },
-       hide: function() {
-               return showHide( this );
-       },
-       toggle: function( state, fn2 ) {
-               var bool = typeof state === "boolean";
-
-               if ( jQuery.isFunction( state ) && jQuery.isFunction( fn2 ) ) {
-                       return eventsToggle.apply( this, arguments );
-               }
+                       responseFields: {
+                               xml: "responseXML",
+                               text: "responseText"
+                       },
 
-               return this.each(function() {
-                       if ( bool ? state : isHidden( this ) ) {
-                               jQuery( this ).show();
-                       } else {
-                               jQuery( this ).hide();
-                       }
-               });
-       }
-});
+                       // List of data converters
+                       // 1) key format is "source_type destination_type" (a single space in-between)
+                       // 2) the catchall symbol "*" can be used for source_type
+                       converters: {
 
-jQuery.extend({
-       // Add in style property hooks for overriding the default
-       // behavior of getting and setting a style property
-       cssHooks: {
-               opacity: {
-                       get: function( elem, computed ) {
-                               if ( computed ) {
-                                       // We should always get a number back from opacity
-                                       var ret = curCSS( elem, "opacity" );
-                                       return ret === "" ? "1" : ret;
+                               // Convert anything to text
+                               "* text": window.String,
 
-                               }
-                       }
-               }
-       },
-
-       // Exclude the following css properties to add px
-       cssNumber: {
-               "fillOpacity": true,
-               "fontWeight": true,
-               "lineHeight": true,
-               "opacity": true,
-               "orphans": true,
-               "widows": true,
-               "zIndex": true,
-               "zoom": true
-       },
-
-       // Add in properties whose names you wish to fix before
-       // setting or getting the value
-       cssProps: {
-               // normalize float css property
-               "float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat"
-       },
-
-       // Get and set the style property on a DOM Node
-       style: function( elem, name, value, extra ) {
-               // Don't set styles on text and comment nodes
-               if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
-                       return;
-               }
+                               // Text to html (true = no transformation)
+                               "text html": true,
 
-               // Make sure that we're working with the right name
-               var ret, type, hooks,
-                       origName = jQuery.camelCase( name ),
-                       style = elem.style;
+                               // Evaluate text as a json expression
+                               "text json": jQuery.parseJSON,
 
-               name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );
+                               // Parse text as xml
+                               "text xml": jQuery.parseXML
+                       },
 
-               // gets hook for the prefixed version
-               // followed by the unprefixed version
-               hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+                       // For options that shouldn't be deep extended:
+                       // you can add your own custom options here if
+                       // and when you create one that shouldn't be
+                       // deep extended (see ajaxExtend)
+                       flatOptions: {
+                               context: true,
+                               url: true
+                       }
+               },
 
-               // Check if we're setting a value
-               if ( value !== undefined ) {
-                       type = typeof value;
+               ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
+               ajaxTransport: addToPrefiltersOrTransports( transports ),
 
-                       // convert relative number strings (+= or -=) to relative numbers. #7345
-                       if ( type === "string" && (ret = rrelNum.exec( value )) ) {
-                               value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );
-                               // Fixes bug #9237
-                               type = "number";
-                       }
+               // Main method
+               ajax: function( url, options ) {
 
-                       // Make sure that NaN and null values aren't set. See: #7116
-                       if ( value == null || type === "number" && isNaN( value ) ) {
-                               return;
+                       // If url is an object, simulate pre-1.5 signature
+                       if ( typeof url === "object" ) {
+                               options = url;
+                               url = undefined;
                        }
 
-                       // If a number was passed in, add 'px' to the (except for certain CSS properties)
-                       if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
-                               value += "px";
-                       }
+                       // Force options to be an object
+                       options = options || {};
 
-                       // If a hook was provided, use that value, otherwise just set the specified value
-                       if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {
-                               // Wrapped to prevent IE from throwing errors when 'invalid' values are provided
-                               // Fixes bug #5509
-                               try {
-                                       style[ name ] = value;
-                               } catch(e) {}
-                       }
+                       var // Create the final options object
+                               s = jQuery.ajaxSetup( {}, options ),
+                       // Callbacks context
+                               callbackContext = s.context || s,
+                       // Context for global events
+                       // It's the callbackContext if one was provided in the options
+                       // and if it's a DOM node or a jQuery collection
+                               globalEventContext = callbackContext !== s &&
+                                       ( callbackContext.nodeType || callbackContext instanceof jQuery ) ?
+                                       jQuery( callbackContext ) : jQuery.event,
+                       // Deferreds
+                               deferred = jQuery.Deferred(),
+                               completeDeferred = jQuery.Callbacks( "once memory" ),
+                       // Status-dependent callbacks
+                               statusCode = s.statusCode || {},
+                       // ifModified key
+                               ifModifiedKey,
+                       // Headers (they are sent all at once)
+                               requestHeaders = {},
+                               requestHeadersNames = {},
+                       // Response headers
+                               responseHeadersString,
+                               responseHeaders,
+                       // transport
+                               transport,
+                       // timeout handle
+                               timeoutTimer,
+                       // Cross-domain detection vars
+                               parts,
+                       // The jqXHR state
+                               state = 0,
+                       // To know if global events are to be dispatched
+                               fireGlobals,
+                       // Loop variable
+                               i,
+                       // Fake xhr
+                               jqXHR = {
 
-               } else {
-                       // If a hook was provided get the non-computed value from there
-                       if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
-                               return ret;
-                       }
+                                       readyState: 0,
 
-                       // Otherwise just get the value from the style object
-                       return style[ name ];
-               }
-       },
+                                       // Caches the header
+                                       setRequestHeader: function( name, value ) {
+                                               if ( !state ) {
+                                                       var lname = name.toLowerCase();
+                                                       name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
+                                                       requestHeaders[ name ] = value;
+                                               }
+                                               return this;
+                                       },
+
+                                       // Raw string
+                                       getAllResponseHeaders: function() {
+                                               return state === 2 ? responseHeadersString : null;
+                                       },
+
+                                       // Builds headers hashtable if needed
+                                       getResponseHeader: function( key ) {
+                                               var match;
+                                               if ( state === 2 ) {
+                                                       if ( !responseHeaders ) {
+                                                               responseHeaders = {};
+                                                               while( ( match = rheaders.exec( responseHeadersString ) ) ) {
+                                                                       responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
+                                                               }
+                                                       }
+                                                       match = responseHeaders[ key.toLowerCase() ];
+                                               }
+                                               return match === undefined ? null : match;
+                                       },
 
-       css: function( elem, name, numeric, extra ) {
-               var val, num, hooks,
-                       origName = jQuery.camelCase( name );
+                                       // Overrides response content-type header
+                                       overrideMimeType: function( type ) {
+                                               if ( !state ) {
+                                                       s.mimeType = type;
+                                               }
+                                               return this;
+                                       },
+
+                                       // Cancel the request
+                                       abort: function( statusText ) {
+                                               statusText = statusText || "abort";
+                                               if ( transport ) {
+                                                       transport.abort( statusText );
+                                               }
+                                               done( 0, statusText );
+                                               return this;
+                                       }
+                               };
 
-               // Make sure that we're working with the right name
-               name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );
+                       // Callback for when everything is done
+                       // It is defined here because jslint complains if it is declared
+                       // at the end of the function (which would be more logical and readable)
+                       function done( status, nativeStatusText, responses, headers ) {
 
-               // gets hook for the prefixed version
-               // followed by the unprefixed version
-               hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+                               // Called once
+                               if ( state === 2 ) {
+                                       return;
+                               }
 
-               // If a hook was provided get the computed value from there
-               if ( hooks && "get" in hooks ) {
-                       val = hooks.get( elem, true, extra );
-               }
+                               // State is "done" now
+                               state = 2;
 
-               // Otherwise, if a way to get the computed value exists, use that
-               if ( val === undefined ) {
-                       val = curCSS( elem, name );
-               }
+                               // Clear timeout if it exists
+                               if ( timeoutTimer ) {
+                                       clearTimeout( timeoutTimer );
+                               }
 
-               //convert "normal" to computed value
-               if ( val === "normal" && name in cssNormalTransform ) {
-                       val = cssNormalTransform[ name ];
-               }
+                               // Dereference transport for early garbage collection
+                               // (no matter how long the jqXHR object will be used)
+                               transport = undefined;
 
-               // Return, converting to number if forced or a qualifier was provided and val looks numeric
-               if ( numeric || extra !== undefined ) {
-                       num = parseFloat( val );
-                       return numeric || jQuery.isNumeric( num ) ? num || 0 : val;
-               }
-               return val;
-       },
-
-       // A method for quickly swapping in/out CSS properties to get correct calculations
-       swap: function( elem, options, callback ) {
-               var ret, name,
-                       old = {};
-
-               // Remember the old values, and insert the new ones
-               for ( name in options ) {
-                       old[ name ] = elem.style[ name ];
-                       elem.style[ name ] = options[ name ];
-               }
+                               // Cache response headers
+                               responseHeadersString = headers || "";
 
-               ret = callback.call( elem );
+                               // Set readyState
+                               jqXHR.readyState = status > 0 ? 4 : 0;
 
-               // Revert the old values
-               for ( name in options ) {
-                       elem.style[ name ] = old[ name ];
-               }
+                               var isSuccess,
+                                       success,
+                                       error,
+                                       statusText = nativeStatusText,
+                                       response = responses ? ajaxHandleResponses( s, jqXHR, responses ) : undefined,
+                                       lastModified,
+                                       etag;
 
-               return ret;
-       }
-});
+                               // If successful, handle type chaining
+                               if ( status >= 200 && status < 300 || status === 304 ) {
 
-// NOTE: To any future maintainer, we've used both window.getComputedStyle
-// and getComputedStyle here to produce a better gzip size
-if ( window.getComputedStyle ) {
-       curCSS = function( elem, name ) {
-               var ret, width, minWidth, maxWidth,
-                       computed = getComputedStyle( elem, null ),
-                       style = elem.style;
+                                       // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+                                       if ( s.ifModified ) {
 
-               if ( computed ) {
+                                               if ( ( lastModified = jqXHR.getResponseHeader( "Last-Modified" ) ) ) {
+                                                       jQuery.lastModified[ ifModifiedKey ] = lastModified;
+                                               }
+                                               if ( ( etag = jqXHR.getResponseHeader( "Etag" ) ) ) {
+                                                       jQuery.etag[ ifModifiedKey ] = etag;
+                                               }
+                                       }
 
-                       ret = computed[ name ];
-                       if ( ret === "" && !jQuery.contains( elem.ownerDocument.documentElement, elem ) ) {
-                               ret = jQuery.style( elem, name );
-                       }
+                                       // If not modified
+                                       if ( status === 304 ) {
 
-                       // A tribute to the "awesome hack by Dean Edwards"
-                       // Chrome < 17 and Safari 5.0 uses "computed value" instead of "used value" for margin-right
-                       // Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels
-                       // this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values
-                       if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {
-                               width = style.width;
-                               minWidth = style.minWidth;
-                               maxWidth = style.maxWidth;
+                                               statusText = "notmodified";
+                                               isSuccess = true;
 
-                               style.minWidth = style.maxWidth = style.width = ret;
-                               ret = computed.width;
+                                               // If we have data
+                                       } else {
 
-                               style.width = width;
-                               style.minWidth = minWidth;
-                               style.maxWidth = maxWidth;
-                       }
-               }
+                                               try {
+                                                       success = ajaxConvert( s, response );
+                                                       statusText = "success";
+                                                       isSuccess = true;
+                                               } catch(e) {
+                                                       // We have a parsererror
+                                                       statusText = "parsererror";
+                                                       error = e;
+                                               }
+                                       }
+                               } else {
+                                       // We extract error from statusText
+                                       // then normalize statusText and status for non-aborts
+                                       error = statusText;
+                                       if ( !statusText || status ) {
+                                               statusText = "error";
+                                               if ( status < 0 ) {
+                                                       status = 0;
+                                               }
+                                       }
+                               }
 
-               return ret;
-       };
-} else if ( document.documentElement.currentStyle ) {
-       curCSS = function( elem, name ) {
-               var left, rsLeft,
-                       ret = elem.currentStyle && elem.currentStyle[ name ],
-                       style = elem.style;
-
-               // Avoid setting ret to empty string here
-               // so we don't default to auto
-               if ( ret == null && style && style[ name ] ) {
-                       ret = style[ name ];
-               }
+                               // Set data for the fake xhr object
+                               jqXHR.status = status;
+                               jqXHR.statusText = "" + ( nativeStatusText || statusText );
 
-               // From the awesome hack by Dean Edwards
-               // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
+                               // Success/Error
+                               if ( isSuccess ) {
+                                       deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
+                               } else {
+                                       deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
+                               }
 
-               // If we're not dealing with a regular pixel number
-               // but a number that has a weird ending, we need to convert it to pixels
-               // but not position css attributes, as those are proportional to the parent element instead
-               // and we can't measure the parent instead because it might trigger a "stacking dolls" problem
-               if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) {
+                               // Status-dependent callbacks
+                               jqXHR.statusCode( statusCode );
+                               statusCode = undefined;
 
-                       // Remember the original values
-                       left = style.left;
-                       rsLeft = elem.runtimeStyle && elem.runtimeStyle.left;
+                               if ( fireGlobals ) {
+                                       globalEventContext.trigger( "ajax" + ( isSuccess ? "Success" : "Error" ),
+                                               [ jqXHR, s, isSuccess ? success : error ] );
+                               }
 
-                       // Put in the new values to get a computed value out
-                       if ( rsLeft ) {
-                               elem.runtimeStyle.left = elem.currentStyle.left;
-                       }
-                       style.left = name === "fontSize" ? "1em" : ret;
-                       ret = style.pixelLeft + "px";
+                               // Complete
+                               completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
 
-                       // Revert the changed values
-                       style.left = left;
-                       if ( rsLeft ) {
-                               elem.runtimeStyle.left = rsLeft;
+                               if ( fireGlobals ) {
+                                       globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
+                                       // Handle the global AJAX counter
+                                       if ( !( --jQuery.active ) ) {
+                                               jQuery.event.trigger( "ajaxStop" );
+                                       }
+                               }
                        }
-               }
 
-               return ret === "" ? "auto" : ret;
-       };
-}
-
-function setPositiveNumber( elem, value, subtract ) {
-       var matches = rnumsplit.exec( value );
-       return matches ?
-                       Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) :
-                       value;
-}
-
-function augmentWidthOrHeight( elem, name, extra, isBorderBox ) {
-       var i = extra === ( isBorderBox ? "border" : "content" ) ?
-               // If we already have the right measurement, avoid augmentation
-               4 :
-               // Otherwise initialize for horizontal or vertical properties
-               name === "width" ? 1 : 0,
-
-               val = 0;
-
-       for ( ; i < 4; i += 2 ) {
-               // both box models exclude margin, so add it if we want it
-               if ( extra === "margin" ) {
-                       // we use jQuery.css instead of curCSS here
-                       // because of the reliableMarginRight CSS hook!
-                       val += jQuery.css( elem, extra + cssExpand[ i ], true );
-               }
+                       // Attach deferreds
+                       deferred.promise( jqXHR );
+                       jqXHR.success = jqXHR.done;
+                       jqXHR.error = jqXHR.fail;
+                       jqXHR.complete = completeDeferred.add;
 
-               // From this point on we use curCSS for maximum performance (relevant in animations)
-               if ( isBorderBox ) {
-                       // border-box includes padding, so remove it if we want content
-                       if ( extra === "content" ) {
-                               val -= parseFloat( curCSS( elem, "padding" + cssExpand[ i ] ) ) || 0;
-                       }
+                       // Status-dependent callbacks
+                       jqXHR.statusCode = function( map ) {
+                               if ( map ) {
+                                       var tmp;
+                                       if ( state < 2 ) {
+                                               for ( tmp in map ) {
+                                                       statusCode[ tmp ] = [ statusCode[tmp], map[tmp] ];
+                                               }
+                                       } else {
+                                               tmp = map[ jqXHR.status ];
+                                               jqXHR.then( tmp, tmp );
+                                       }
+                               }
+                               return this;
+                       };
 
-                       // at this point, extra isn't border nor margin, so remove border
-                       if ( extra !== "margin" ) {
-                               val -= parseFloat( curCSS( elem, "border" + cssExpand[ i ] + "Width" ) ) || 0;
+                       // Remove hash character (#7531: and string promotion)
+                       // Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
+                       // We also use the url parameter if available
+                       s.url = ( ( url || s.url ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
+
+                       // Extract dataTypes list
+                       s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().split( rspacesAjax );
+
+                       // Determine if a cross-domain request is in order
+                       if ( s.crossDomain == null ) {
+                               parts = rurl.exec( s.url.toLowerCase() );
+                               s.crossDomain = !!( parts &&
+                                       ( parts[ 1 ] != ajaxLocParts[ 1 ] || parts[ 2 ] != ajaxLocParts[ 2 ] ||
+                                               ( parts[ 3 ] || ( parts[ 1 ] === "http:" ? 80 : 443 ) ) !=
+                                                       ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ) )
+                                       );
                        }
-               } else {
-                       // at this point, extra isn't content, so add padding
-                       val += parseFloat( curCSS( elem, "padding" + cssExpand[ i ] ) ) || 0;
 
-                       // at this point, extra isn't content nor padding, so add border
-                       if ( extra !== "padding" ) {
-                               val += parseFloat( curCSS( elem, "border" + cssExpand[ i ] + "Width" ) ) || 0;
+                       // Convert data if not already a string
+                       if ( s.data && s.processData && typeof s.data !== "string" ) {
+                               s.data = jQuery.param( s.data, s.traditional );
                        }
-               }
-       }
 
-       return val;
-}
+                       // Apply prefilters
+                       inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
 
-function getWidthOrHeight( elem, name, extra ) {
+                       // If request was aborted inside a prefilter, stop there
+                       if ( state === 2 ) {
+                               return false;
+                       }
 
-       // Start with offset property, which is equivalent to the border-box value
-       var val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
-               valueIsBorderBox = true,
-               isBorderBox = jQuery.support.boxSizing && jQuery.css( elem, "boxSizing" ) === "border-box";
+                       // We can fire global events as of now if asked to
+                       fireGlobals = s.global;
 
-       if ( val <= 0 ) {
-               // Fall back to computed then uncomputed css if necessary
-               val = curCSS( elem, name );
-               if ( val < 0 || val == null ) {
-                       val = elem.style[ name ];
-               }
+                       // Uppercase the type
+                       s.type = s.type.toUpperCase();
 
-               // Computed unit is not pixels. Stop here and return.
-               if ( rnumnonpx.test(val) ) {
-                       return val;
-               }
+                       // Determine if request has content
+                       s.hasContent = !rnoContent.test( s.type );
 
-               // we need the check for style in case a browser which returns unreliable values
-               // for getComputedStyle silently falls back to the reliable elem.style
-               valueIsBorderBox = isBorderBox && ( jQuery.support.boxSizingReliable || val === elem.style[ name ] );
+                       // Watch for a new set of requests
+                       if ( fireGlobals && jQuery.active++ === 0 ) {
+                               jQuery.event.trigger( "ajaxStart" );
+                       }
 
-               // Normalize "", auto, and prepare for extra
-               val = parseFloat( val ) || 0;
-       }
+                       // More options handling for requests with no content
+                       if ( !s.hasContent ) {
 
-       // use the active box-sizing model to add/subtract irrelevant styles
-       return ( val +
-               augmentWidthOrHeight(
-                       elem,
-                       name,
-                       extra || ( isBorderBox ? "border" : "content" ),
-                       valueIsBorderBox
-               )
-       ) + "px";
-}
-
-
-// Try to determine the default display value of an element
-function css_defaultDisplay( nodeName ) {
-       if ( elemdisplay[ nodeName ] ) {
-               return elemdisplay[ nodeName ];
-       }
+                               // If data is available, append data to url
+                               if ( s.data ) {
+                                       s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.data;
+                                       // #9682: remove data so that it's not used in an eventual retry
+                                       delete s.data;
+                               }
 
-       var elem = jQuery( "<" + nodeName + ">" ).appendTo( document.body ),
-               display = elem.css("display");
-       elem.remove();
-
-       // If the simple way fails,
-       // get element's real default display by attaching it to a temp iframe
-       if ( display === "none" || display === "" ) {
-               // Use the already-created iframe if possible
-               iframe = document.body.appendChild(
-                       iframe || jQuery.extend( document.createElement("iframe"), {
-                               frameBorder: 0,
-                               width: 0,
-                               height: 0
-                       })
-               );
-
-               // Create a cacheable copy of the iframe document on first call.
-               // IE and Opera will allow us to reuse the iframeDoc without re-writing the fake HTML
-               // document to it; WebKit & Firefox won't allow reusing the iframe document.
-               if ( !iframeDoc || !iframe.createElement ) {
-                       iframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document;
-                       iframeDoc.write("<!doctype html><html><body>");
-                       iframeDoc.close();
-               }
+                               // Get ifModifiedKey before adding the anti-cache parameter
+                               ifModifiedKey = s.url;
 
-               elem = iframeDoc.body.appendChild( iframeDoc.createElement(nodeName) );
+                               // Add anti-cache in url if needed
+                               if ( s.cache === false ) {
 
-               display = curCSS( elem, "display" );
-               document.body.removeChild( iframe );
-       }
+                                       var ts = jQuery.now(),
+                                       // try replacing _= if it is there
+                                               ret = s.url.replace( rts, "$1_=" + ts );
 
-       // Store the correct default display
-       elemdisplay[ nodeName ] = display;
+                                       // if nothing was replaced, add timestamp to the end
+                                       s.url = ret + ( ( ret === s.url ) ? ( rquery.test( s.url ) ? "&" : "?" ) + "_=" + ts : "" );
+                               }
+                       }
 
-       return display;
-}
+                       // Set the correct header, if data is being sent
+                       if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
+                               jqXHR.setRequestHeader( "Content-Type", s.contentType );
+                       }
 
-jQuery.each([ "height", "width" ], function( i, name ) {
-       jQuery.cssHooks[ name ] = {
-               get: function( elem, computed, extra ) {
-                       if ( computed ) {
-                               if ( elem.offsetWidth !== 0 || curCSS( elem, "display" ) !== "none" ) {
-                                       return getWidthOrHeight( elem, name, extra );
-                               } else {
-                                       return jQuery.swap( elem, cssShow, function() {
-                                               return getWidthOrHeight( elem, name, extra );
-                                       });
+                       // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+                       if ( s.ifModified ) {
+                               ifModifiedKey = ifModifiedKey || s.url;
+                               if ( jQuery.lastModified[ ifModifiedKey ] ) {
+                                       jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ ifModifiedKey ] );
+                               }
+                               if ( jQuery.etag[ ifModifiedKey ] ) {
+                                       jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ ifModifiedKey ] );
                                }
                        }
-               },
 
-               set: function( elem, value, extra ) {
-                       return setPositiveNumber( elem, value, extra ?
-                               augmentWidthOrHeight(
-                                       elem,
-                                       name,
-                                       extra,
-                                       jQuery.support.boxSizing && jQuery.css( elem, "boxSizing" ) === "border-box"
-                               ) : 0
+                       // Set the Accepts header for the server, depending on the dataType
+                       jqXHR.setRequestHeader(
+                               "Accept",
+                               s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
+                                       s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
+                                       s.accepts[ "*" ]
                        );
-               }
-       };
-});
-
-if ( !jQuery.support.opacity ) {
-       jQuery.cssHooks.opacity = {
-               get: function( elem, computed ) {
-                       // IE uses filters for opacity
-                       return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?
-                               ( 0.01 * parseFloat( RegExp.$1 ) ) + "" :
-                               computed ? "1" : "";
-               },
-
-               set: function( elem, value ) {
-                       var style = elem.style,
-                               currentStyle = elem.currentStyle,
-                               opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "",
-                               filter = currentStyle && currentStyle.filter || style.filter || "";
 
-                       // IE has trouble with opacity if it does not have layout
-                       // Force it by setting the zoom level
-                       style.zoom = 1;
+                       // Check for headers option
+                       for ( i in s.headers ) {
+                               jqXHR.setRequestHeader( i, s.headers[ i ] );
+                       }
 
-                       // if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652
-                       if ( value >= 1 && jQuery.trim( filter.replace( ralpha, "" ) ) === "" &&
-                               style.removeAttribute ) {
+                       // Allow custom headers/mimetypes and early abort
+                       if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
+                               // Abort if not done already
+                               jqXHR.abort();
+                               return false;
 
-                               // Setting style.filter to null, "" & " " still leave "filter:" in the cssText
-                               // if "filter:" is present at all, clearType is disabled, we want to avoid this
-                               // style.removeAttribute is IE Only, but so apparently is this code path...
-                               style.removeAttribute( "filter" );
+                       }
 
-                               // if there there is no filter style applied in a css rule, we are done
-                               if ( currentStyle && !currentStyle.filter ) {
-                                       return;
-                               }
+                       // Install callbacks on deferreds
+                       for ( i in { success: 1, error: 1, complete: 1 } ) {
+                               jqXHR[ i ]( s[ i ] );
                        }
 
-                       // otherwise, set new filter values
-                       style.filter = ralpha.test( filter ) ?
-                               filter.replace( ralpha, opacity ) :
-                               filter + " " + opacity;
-               }
-       };
-}
+                       // Get transport
+                       transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
 
-// These hooks cannot be added until DOM ready because the support test
-// for it is not run until after DOM ready
-jQuery(function() {
-       if ( !jQuery.support.reliableMarginRight ) {
-               jQuery.cssHooks.marginRight = {
-                       get: function( elem, computed ) {
-                               // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
-                               // Work around by temporarily setting element display to inline-block
-                               return jQuery.swap( elem, { "display": "inline-block" }, function() {
-                                       if ( computed ) {
-                                               return curCSS( elem, "marginRight" );
-                                       }
-                               });
-                       }
-               };
-       }
+                       // If no transport, we auto-abort
+                       if ( !transport ) {
+                               done( -1, "No Transport" );
+                       } else {
+                               jqXHR.readyState = 1;
+                               // Send global event
+                               if ( fireGlobals ) {
+                                       globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
+                               }
+                               // Timeout
+                               if ( s.async && s.timeout > 0 ) {
+                                       timeoutTimer = setTimeout( function(){
+                                               jqXHR.abort( "timeout" );
+                                       }, s.timeout );
+                               }
 
-       // Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
-       // getComputedStyle returns percent when specified for top/left/bottom/right
-       // rather than make the css module depend on the offset module, we just check for it here
-       if ( !jQuery.support.pixelPosition && jQuery.fn.position ) {
-               jQuery.each( [ "top", "left" ], function( i, prop ) {
-                       jQuery.cssHooks[ prop ] = {
-                               get: function( elem, computed ) {
-                                       if ( computed ) {
-                                               var ret = curCSS( elem, prop );
-                                               // if curCSS returns percentage, fallback to offset
-                                               return rnumnonpx.test( ret ) ? jQuery( elem ).position()[ prop ] + "px" : ret;
+                               try {
+                                       state = 1;
+                                       transport.send( requestHeaders, done );
+                               } catch (e) {
+                                       // Propagate exception as error if not done
+                                       if ( state < 2 ) {
+                                               done( -1, e );
+                                               // Simply rethrow otherwise
+                                       } else {
+                                               throw e;
                                        }
                                }
-                       };
-               });
-       }
-
-});
-
-if ( jQuery.expr && jQuery.expr.filters ) {
-       jQuery.expr.filters.hidden = function( elem ) {
-               return ( elem.offsetWidth === 0 && elem.offsetHeight === 0 ) || (!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || curCSS( elem, "display" )) === "none");
-       };
-
-       jQuery.expr.filters.visible = function( elem ) {
-               return !jQuery.expr.filters.hidden( elem );
-       };
-}
+                       }
 
-// These hooks are used by animate to expand properties
-jQuery.each({
-       margin: "",
-       padding: "",
-       border: "Width"
-}, function( prefix, suffix ) {
-       jQuery.cssHooks[ prefix + suffix ] = {
-               expand: function( value ) {
-                       var i,
+                       return jqXHR;
+               },
 
-                               // assumes a single number if not a string
-                               parts = typeof value === "string" ? value.split(" ") : [ value ],
-                               expanded = {};
+               // Serialize an array of form elements or a set of
+               // key/values into a query string
+               param: function( a, traditional ) {
+                       var s = [],
+                               add = function( key, value ) {
+                                       // If value is a function, invoke it and return its value
+                                       value = jQuery.isFunction( value ) ? value() : value;
+                                       s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
+                               };
 
-                       for ( i = 0; i < 4; i++ ) {
-                               expanded[ prefix + cssExpand[ i ] + suffix ] =
-                                       parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
+                       // Set traditional to true for jQuery <= 1.3.2 behavior.
+                       if ( traditional === undefined ) {
+                               traditional = jQuery.ajaxSettings.traditional;
                        }
 
-                       return expanded;
-               }
-       };
-
-       if ( !rmargin.test( prefix ) ) {
-               jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
-       }
-});
-var r20 = /%20/g,
-       rbracket = /\[\]$/,
-       rCRLF = /\r?\n/g,
-       rinput = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
-       rselectTextarea = /^(?:select|textarea)/i;
-
-jQuery.fn.extend({
-       serialize: function() {
-               return jQuery.param( this.serializeArray() );
-       },
-       serializeArray: function() {
-               return this.map(function(){
-                       return this.elements ? jQuery.makeArray( this.elements ) : this;
-               })
-               .filter(function(){
-                       return this.name && !this.disabled &&
-                               ( this.checked || rselectTextarea.test( this.nodeName ) ||
-                                       rinput.test( this.type ) );
-               })
-               .map(function( i, elem ){
-                       var val = jQuery( this ).val();
-
-                       return val == null ?
-                               null :
-                               jQuery.isArray( val ) ?
-                                       jQuery.map( val, function( val, i ){
-                                               return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
-                                       }) :
-                                       { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
-               }).get();
-       }
-});
-
-//Serialize an array of form elements or a set of
-//key/values into a query string
-jQuery.param = function( a, traditional ) {
-       var prefix,
-               s = [],
-               add = function( key, value ) {
-                       // If value is a function, invoke it and return its value
-                       value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value );
-                       s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
-               };
-
-       // Set traditional to true for jQuery <= 1.3.2 behavior.
-       if ( traditional === undefined ) {
-               traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;
-       }
+                       // If an array was passed in, assume that it is an array of form elements.
+                       if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
+                               // Serialize the form elements
+                               jQuery.each( a, function() {
+                                       add( this.name, this.value );
+                               });
 
-       // If an array was passed in, assume that it is an array of form elements.
-       if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
-               // Serialize the form elements
-               jQuery.each( a, function() {
-                       add( this.name, this.value );
-               });
+                       } else {
+                               // If traditional, encode the "old" way (the way 1.3.2 or older
+                               // did it), otherwise encode params recursively.
+                               for ( var prefix in a ) {
+                                       buildParams( prefix, a[ prefix ], traditional, add );
+                               }
+                       }
 
-       } else {
-               // If traditional, encode the "old" way (the way 1.3.2 or older
-               // did it), otherwise encode params recursively.
-               for ( prefix in a ) {
-                       buildParams( prefix, a[ prefix ], traditional, add );
+                       // Return the resulting serialization
+                       return s.join( "&" ).replace( r20, "+" );
                }
-       }
-
-       // Return the resulting serialization
-       return s.join( "&" ).replace( r20, "+" );
-};
+       });
 
-function buildParams( prefix, obj, traditional, add ) {
-       var name;
+       function buildParams( prefix, obj, traditional, add ) {
+               if ( jQuery.isArray( obj ) ) {
+                       // Serialize array item.
+                       jQuery.each( obj, function( i, v ) {
+                               if ( traditional || rbracket.test( prefix ) ) {
+                                       // Treat each array item as a scalar.
+                                       add( prefix, v );
 
-       if ( jQuery.isArray( obj ) ) {
-               // Serialize array item.
-               jQuery.each( obj, function( i, v ) {
-                       if ( traditional || rbracket.test( prefix ) ) {
-                               // Treat each array item as a scalar.
-                               add( prefix, v );
+                               } else {
+                                       // If array item is non-scalar (array or object), encode its
+                                       // numeric index to resolve deserialization ambiguity issues.
+                                       // Note that rack (as of 1.0.0) can't currently deserialize
+                                       // nested arrays properly, and attempting to do so may cause
+                                       // a server error. Possible fixes are to modify rack's
+                                       // deserialization algorithm or to provide an option or flag
+                                       // to force array serialization to be shallow.
+                                       buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add );
+                               }
+                       });
 
-                       } else {
-                               // If array item is non-scalar (array or object), encode its
-                               // numeric index to resolve deserialization ambiguity issues.
-                               // Note that rack (as of 1.0.0) can't currently deserialize
-                               // nested arrays properly, and attempting to do so may cause
-                               // a server error. Possible fixes are to modify rack's
-                               // deserialization algorithm or to provide an option or flag
-                               // to force array serialization to be shallow.
-                               buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add );
+               } else if ( !traditional && jQuery.type( obj ) === "object" ) {
+                       // Serialize object item.
+                       for ( var name in obj ) {
+                               buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
                        }
-               });
 
-       } else if ( !traditional && jQuery.type( obj ) === "object" ) {
-               // Serialize object item.
-               for ( name in obj ) {
-                       buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
+               } else {
+                       // Serialize scalar item.
+                       add( prefix, obj );
                }
-
-       } else {
-               // Serialize scalar item.
-               add( prefix, obj );
        }
-}
-var // Document location
-       ajaxLocation,
-       // Document location segments
-       ajaxLocParts,
-
-       rhash = /#.*$/,
-       rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
-       // #7653, #8125, #8152: local protocol detection
-       rlocalProtocol = /^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,
-       rnoContent = /^(?:GET|HEAD)$/,
-       rprotocol = /^\/\//,
-       rquery = /\?/,
-       rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
-       rts = /([?&])_=[^&]*/,
-       rurl = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,
-
-       // Keep a copy of the old load method
-       _load = jQuery.fn.load,
-
-       /* Prefilters
-        * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
-        * 2) These are called:
-        *    - BEFORE asking for a transport
-        *    - AFTER param serialization (s.data is a string if s.processData is true)
-        * 3) key is the dataType
-        * 4) the catchall symbol "*" can be used
-        * 5) execution will start with transport dataType and THEN continue down to "*" if needed
-        */
-       prefilters = {},
 
-       /* Transports bindings
-        * 1) key is the dataType
-        * 2) the catchall symbol "*" can be used
-        * 3) selection will start with transport dataType and THEN go to "*" if needed
-        */
-       transports = {},
+// This is still on the jQuery object... for now
+// Want to move this to jQuery.ajax some day
+       jQuery.extend({
 
-       // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
-       allTypes = ["*/"] + ["*"];
+               // Counter for holding the number of active queries
+               active: 0,
 
-// #8138, IE may throw an exception when accessing
-// a field from window.location if document.domain has been set
-try {
-       ajaxLocation = location.href;
-} catch( e ) {
-       // Use the href attribute of an A element
-       // since IE will modify it given document.location
-       ajaxLocation = document.createElement( "a" );
-       ajaxLocation.href = "";
-       ajaxLocation = ajaxLocation.href;
-}
+               // Last-Modified header cache for next request
+               lastModified: {},
+               etag: {}
 
-// Segment location into parts
-ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
+       });
 
-// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
-function addToPrefiltersOrTransports( structure ) {
+       /* Handles responses to an ajax request:
+        * - sets all responseXXX fields accordingly
+        * - finds the right dataType (mediates between content-type and expected dataType)
+        * - returns the corresponding response
+        */
+       function ajaxHandleResponses( s, jqXHR, responses ) {
 
-       // dataTypeExpression is optional and defaults to "*"
-       return function( dataTypeExpression, func ) {
+               var contents = s.contents,
+                       dataTypes = s.dataTypes,
+                       responseFields = s.responseFields,
+                       ct,
+                       type,
+                       finalDataType,
+                       firstDataType;
 
-               if ( typeof dataTypeExpression !== "string" ) {
-                       func = dataTypeExpression;
-                       dataTypeExpression = "*";
+               // Fill responseXXX fields
+               for ( type in responseFields ) {
+                       if ( type in responses ) {
+                               jqXHR[ responseFields[type] ] = responses[ type ];
+                       }
                }
 
-               var dataType, list, placeBefore,
-                       dataTypes = dataTypeExpression.toLowerCase().split( core_rspace ),
-                       i = 0,
-                       length = dataTypes.length;
+               // Remove auto dataType and get content-type in the process
+               while( dataTypes[ 0 ] === "*" ) {
+                       dataTypes.shift();
+                       if ( ct === undefined ) {
+                               ct = s.mimeType || jqXHR.getResponseHeader( "content-type" );
+                       }
+               }
 
-               if ( jQuery.isFunction( func ) ) {
-                       // For each dataType in the dataTypeExpression
-                       for ( ; i < length; i++ ) {
-                               dataType = dataTypes[ i ];
-                               // We control if we're asked to add before
-                               // any existing element
-                               placeBefore = /^\+/.test( dataType );
-                               if ( placeBefore ) {
-                                       dataType = dataType.substr( 1 ) || "*";
+               // Check if we're dealing with a known content-type
+               if ( ct ) {
+                       for ( type in contents ) {
+                               if ( contents[ type ] && contents[ type ].test( ct ) ) {
+                                       dataTypes.unshift( type );
+                                       break;
                                }
-                               list = structure[ dataType ] = structure[ dataType ] || [];
-                               // then we add to the structure accordingly
-                               list[ placeBefore ? "unshift" : "push" ]( func );
                        }
                }
-       };
-}
 
-// Base inspection function for prefilters and transports
-function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR,
-               dataType /* internal */, inspected /* internal */ ) {
-
-       dataType = dataType || options.dataTypes[ 0 ];
-       inspected = inspected || {};
-
-       inspected[ dataType ] = true;
-
-       var selection,
-               list = structure[ dataType ],
-               i = 0,
-               length = list ? list.length : 0,
-               executeOnly = ( structure === prefilters );
-
-       for ( ; i < length && ( executeOnly || !selection ); i++ ) {
-               selection = list[ i ]( options, originalOptions, jqXHR );
-               // If we got redirected to another dataType
-               // we try there if executing only and not done already
-               if ( typeof selection === "string" ) {
-                       if ( !executeOnly || inspected[ selection ] ) {
-                               selection = undefined;
-                       } else {
-                               options.dataTypes.unshift( selection );
-                               selection = inspectPrefiltersOrTransports(
-                                               structure, options, originalOptions, jqXHR, selection, inspected );
+               // Check to see if we have a response for the expected dataType
+               if ( dataTypes[ 0 ] in responses ) {
+                       finalDataType = dataTypes[ 0 ];
+               } else {
+                       // Try convertible dataTypes
+                       for ( type in responses ) {
+                               if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
+                                       finalDataType = type;
+                                       break;
+                               }
+                               if ( !firstDataType ) {
+                                       firstDataType = type;
+                               }
                        }
+                       // Or just use first one
+                       finalDataType = finalDataType || firstDataType;
                }
-       }
-       // If we're only executing or nothing was selected
-       // we try the catchall dataType if not done already
-       if ( ( executeOnly || !selection ) && !inspected[ "*" ] ) {
-               selection = inspectPrefiltersOrTransports(
-                               structure, options, originalOptions, jqXHR, "*", inspected );
-       }
-       // unnecessary when only executing (prefilters)
-       // but it'll be ignored by the caller in that case
-       return selection;
-}
 
-// A special extend for ajax options
-// that takes "flat" options (not to be deep extended)
-// Fixes #9887
-function ajaxExtend( target, src ) {
-       var key, deep,
-               flatOptions = jQuery.ajaxSettings.flatOptions || {};
-       for ( key in src ) {
-               if ( src[ key ] !== undefined ) {
-                       ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
+               // If we found a dataType
+               // We add the dataType to the list if needed
+               // and return the corresponding response
+               if ( finalDataType ) {
+                       if ( finalDataType !== dataTypes[ 0 ] ) {
+                               dataTypes.unshift( finalDataType );
+                       }
+                       return responses[ finalDataType ];
                }
        }
-       if ( deep ) {
-               jQuery.extend( true, target, deep );
-       }
-}
-
-jQuery.fn.load = function( url, params, callback ) {
-       if ( typeof url !== "string" && _load ) {
-               return _load.apply( this, arguments );
-       }
-
-       // Don't do a request if no elements are being requested
-       if ( !this.length ) {
-               return this;
-       }
 
-       var selector, type, response,
-               self = this,
-               off = url.indexOf(" ");
+// Chain conversions given the request and the original response
+       function ajaxConvert( s, response ) {
 
-       if ( off >= 0 ) {
-               selector = url.slice( off, url.length );
-               url = url.slice( 0, off );
-       }
+               // Apply the dataFilter if provided
+               if ( s.dataFilter ) {
+                       response = s.dataFilter( response, s.dataType );
+               }
 
-       // If it's a function
-       if ( jQuery.isFunction( params ) ) {
+               var dataTypes = s.dataTypes,
+                       converters = {},
+                       i,
+                       key,
+                       length = dataTypes.length,
+                       tmp,
+               // Current and previous dataTypes
+                       current = dataTypes[ 0 ],
+                       prev,
+               // Conversion expression
+                       conversion,
+               // Conversion function
+                       conv,
+               // Conversion functions (transitive conversion)
+                       conv1,
+                       conv2;
+
+               // For each dataType in the chain
+               for ( i = 1; i < length; i++ ) {
+
+                       // Create converters map
+                       // with lowercased keys
+                       if ( i === 1 ) {
+                               for ( key in s.converters ) {
+                                       if ( typeof key === "string" ) {
+                                               converters[ key.toLowerCase() ] = s.converters[ key ];
+                                       }
+                               }
+                       }
 
-               // We assume that it's the callback
-               callback = params;
-               params = undefined;
+                       // Get the dataTypes
+                       prev = current;
+                       current = dataTypes[ i ];
 
-       // Otherwise, build a param string
-       } else if ( typeof params === "object" ) {
-               type = "POST";
-       }
+                       // If current is auto dataType, update it to prev
+                       if ( current === "*" ) {
+                               current = prev;
+                               // If no auto and dataTypes are actually different
+                       } else if ( prev !== "*" && prev !== current ) {
 
-       // Request the remote document
-       jQuery.ajax({
-               url: url,
+                               // Get the converter
+                               conversion = prev + " " + current;
+                               conv = converters[ conversion ] || converters[ "* " + current ];
 
-               // if "type" variable is undefined, then "GET" method will be used
-               type: type,
-               dataType: "html",
-               data: params,
-               complete: function( jqXHR, status ) {
-                       if ( callback ) {
-                               self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );
+                               // If there is no direct converter, search transitively
+                               if ( !conv ) {
+                                       conv2 = undefined;
+                                       for ( conv1 in converters ) {
+                                               tmp = conv1.split( " " );
+                                               if ( tmp[ 0 ] === prev || tmp[ 0 ] === "*" ) {
+                                                       conv2 = converters[ tmp[1] + " " + current ];
+                                                       if ( conv2 ) {
+                                                               conv1 = converters[ conv1 ];
+                                                               if ( conv1 === true ) {
+                                                                       conv = conv2;
+                                                               } else if ( conv2 === true ) {
+                                                                       conv = conv1;
+                                                               }
+                                                               break;
+                                                       }
+                                               }
+                                       }
+                               }
+                               // If we found no converter, dispatch an error
+                               if ( !( conv || conv2 ) ) {
+                                       jQuery.error( "No conversion from " + conversion.replace(" "," to ") );
+                               }
+                               // If found converter is not an equivalence
+                               if ( conv !== true ) {
+                                       // Convert with 1 or 2 converters accordingly
+                                       response = conv ? conv( response ) : conv2( conv1(response) );
+                               }
                        }
                }
-       }).done(function( responseText ) {
-
-               // Save response for use in complete callback
-               response = arguments;
-
-               // See if a selector was specified
-               self.html( selector ?
+               return response;
+       }
 
-                       // Create a dummy div to hold the results
-                       jQuery("<div>")
 
-                               // inject the contents of the document in, removing the scripts
-                               // to avoid any 'Permission Denied' errors in IE
-                               .append( responseText.replace( rscript, "" ) )
 
-                               // Locate the specified elements
-                               .find( selector ) :
 
-                       // If not, just inject the full result
-                       responseText );
+       var jsc = jQuery.now(),
+               jsre = /(\=)\?(&|$)|\?\?/i;
 
+// Default jsonp settings
+       jQuery.ajaxSetup({
+               jsonp: "callback",
+               jsonpCallback: function() {
+                       return jQuery.expando + "_" + ( jsc++ );
+               }
        });
 
-       return this;
-};
+// Detect, normalize options and install callbacks for jsonp requests
+       jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
+
+               var inspectData = ( typeof s.data === "string" ) && /^application\/x\-www\-form\-urlencoded/.test( s.contentType );
+
+               if ( s.dataTypes[ 0 ] === "jsonp" ||
+                       s.jsonp !== false && ( jsre.test( s.url ) ||
+                               inspectData && jsre.test( s.data ) ) ) {
+
+                       var responseContainer,
+                               jsonpCallback = s.jsonpCallback =
+                                       jQuery.isFunction( s.jsonpCallback ) ? s.jsonpCallback() : s.jsonpCallback,
+                               previous = window[ jsonpCallback ],
+                               url = s.url,
+                               data = s.data,
+                               replace = "$1" + jsonpCallback + "$2";
+
+                       if ( s.jsonp !== false ) {
+                               url = url.replace( jsre, replace );
+                               if ( s.url === url ) {
+                                       if ( inspectData ) {
+                                               data = data.replace( jsre, replace );
+                                       }
+                                       if ( s.data === data ) {
+                                               // Add callback manually
+                                               url += (/\?/.test( url ) ? "&" : "?") + s.jsonp + "=" + jsonpCallback;
+                                       }
+                               }
+                       }
 
-// Attach a bunch of functions for handling common AJAX events
-jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split( " " ), function( i, o ){
-       jQuery.fn[ o ] = function( f ){
-               return this.on( o, f );
-       };
-});
-
-jQuery.each( [ "get", "post" ], function( i, method ) {
-       jQuery[ method ] = function( url, data, callback, type ) {
-               // shift arguments if data argument was omitted
-               if ( jQuery.isFunction( data ) ) {
-                       type = type || callback;
-                       callback = data;
-                       data = undefined;
-               }
+                       s.url = url;
+                       s.data = data;
 
-               return jQuery.ajax({
-                       type: method,
-                       url: url,
-                       data: data,
-                       success: callback,
-                       dataType: type
-               });
-       };
-});
+                       // Install callback
+                       window[ jsonpCallback ] = function( response ) {
+                               responseContainer = [ response ];
+                       };
 
-jQuery.extend({
+                       // Clean-up function
+                       jqXHR.always(function() {
+                               // Set callback back to previous value
+                               window[ jsonpCallback ] = previous;
+                               // Call if it was a function and we have a response
+                               if ( responseContainer && jQuery.isFunction( previous ) ) {
+                                       window[ jsonpCallback ]( responseContainer[ 0 ] );
+                               }
+                       });
 
-       getScript: function( url, callback ) {
-               return jQuery.get( url, undefined, callback, "script" );
-       },
+                       // Use data converter to retrieve json after script execution
+                       s.converters["script json"] = function() {
+                               if ( !responseContainer ) {
+                                       jQuery.error( jsonpCallback + " was not called" );
+                               }
+                               return responseContainer[ 0 ];
+                       };
 
-       getJSON: function( url, data, callback ) {
-               return jQuery.get( url, data, callback, "json" );
-       },
+                       // force json dataType
+                       s.dataTypes[ 0 ] = "json";
 
-       // Creates a full fledged settings object into target
-       // with both ajaxSettings and settings fields.
-       // If target is omitted, writes into ajaxSettings.
-       ajaxSetup: function( target, settings ) {
-               if ( settings ) {
-                       // Building a settings object
-                       ajaxExtend( target, jQuery.ajaxSettings );
-               } else {
-                       // Extending ajaxSettings
-                       settings = target;
-                       target = jQuery.ajaxSettings;
+                       // Delegate to script
+                       return "script";
                }
-               ajaxExtend( target, settings );
-               return target;
-       },
-
-       ajaxSettings: {
-               url: ajaxLocation,
-               isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
-               global: true,
-               type: "GET",
-               contentType: "application/x-www-form-urlencoded; charset=UTF-8",
-               processData: true,
-               async: true,
-               /*
-               timeout: 0,
-               data: null,
-               dataType: null,
-               username: null,
-               password: null,
-               cache: null,
-               throws: false,
-               traditional: false,
-               headers: {},
-               */
+       });
 
+
+
+
+// Install script dataType
+       jQuery.ajaxSetup({
                accepts: {
-                       xml: "application/xml, text/xml",
-                       html: "text/html",
-                       text: "text/plain",
-                       json: "application/json, text/javascript",
-                       "*": allTypes
+                       script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
                },
-
                contents: {
-                       xml: /xml/,
-                       html: /html/,
-                       json: /json/
-               },
-
-               responseFields: {
-                       xml: "responseXML",
-                       text: "responseText"
+                       script: /javascript|ecmascript/
                },
-
-               // List of data converters
-               // 1) key format is "source_type destination_type" (a single space in-between)
-               // 2) the catchall symbol "*" can be used for source_type
                converters: {
-
-                       // Convert anything to text
-                       "* text": window.String,
-
-                       // Text to html (true = no transformation)
-                       "text html": true,
-
-                       // Evaluate text as a json expression
-                       "text json": jQuery.parseJSON,
-
-                       // Parse text as xml
-                       "text xml": jQuery.parseXML
-               },
-
-               // For options that shouldn't be deep extended:
-               // you can add your own custom options here if
-               // and when you create one that shouldn't be
-               // deep extended (see ajaxExtend)
-               flatOptions: {
-                       context: true,
-                       url: true
+                       "text script": function( text ) {
+                               jQuery.globalEval( text );
+                               return text;
+                       }
                }
-       },
-
-       ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
-       ajaxTransport: addToPrefiltersOrTransports( transports ),
-
-       // Main method
-       ajax: function( url, options ) {
+       });
 
-               // If url is an object, simulate pre-1.5 signature
-               if ( typeof url === "object" ) {
-                       options = url;
-                       url = undefined;
+// Handle cache's special case and global
+       jQuery.ajaxPrefilter( "script", function( s ) {
+               if ( s.cache === undefined ) {
+                       s.cache = false;
                }
+               if ( s.crossDomain ) {
+                       s.type = "GET";
+                       s.global = false;
+               }
+       });
 
-               // Force options to be an object
-               options = options || {};
-
-               var // ifModified key
-                       ifModifiedKey,
-                       // Response headers
-                       responseHeadersString,
-                       responseHeaders,
-                       // transport
-                       transport,
-                       // timeout handle
-                       timeoutTimer,
-                       // Cross-domain detection vars
-                       parts,
-                       // To know if global events are to be dispatched
-                       fireGlobals,
-                       // Loop variable
-                       i,
-                       // Create the final options object
-                       s = jQuery.ajaxSetup( {}, options ),
-                       // Callbacks context
-                       callbackContext = s.context || s,
-                       // Context for global events
-                       // It's the callbackContext if one was provided in the options
-                       // and if it's a DOM node or a jQuery collection
-                       globalEventContext = callbackContext !== s &&
-                               ( callbackContext.nodeType || callbackContext instanceof jQuery ) ?
-                                               jQuery( callbackContext ) : jQuery.event,
-                       // Deferreds
-                       deferred = jQuery.Deferred(),
-                       completeDeferred = jQuery.Callbacks( "once memory" ),
-                       // Status-dependent callbacks
-                       statusCode = s.statusCode || {},
-                       // Headers (they are sent all at once)
-                       requestHeaders = {},
-                       requestHeadersNames = {},
-                       // The jqXHR state
-                       state = 0,
-                       // Default abort message
-                       strAbort = "canceled",
-                       // Fake xhr
-                       jqXHR = {
-
-                               readyState: 0,
-
-                               // Caches the header
-                               setRequestHeader: function( name, value ) {
-                                       if ( !state ) {
-                                               var lname = name.toLowerCase();
-                                               name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
-                                               requestHeaders[ name ] = value;
-                                       }
-                                       return this;
-                               },
-
-                               // Raw string
-                               getAllResponseHeaders: function() {
-                                       return state === 2 ? responseHeadersString : null;
-                               },
+// Bind script tag hack transport
+       jQuery.ajaxTransport( "script", function(s) {
 
-                               // Builds headers hashtable if needed
-                               getResponseHeader: function( key ) {
-                                       var match;
-                                       if ( state === 2 ) {
-                                               if ( !responseHeaders ) {
-                                                       responseHeaders = {};
-                                                       while( ( match = rheaders.exec( responseHeadersString ) ) ) {
-                                                               responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
-                                                       }
-                                               }
-                                               match = responseHeaders[ key.toLowerCase() ];
-                                       }
-                                       return match === undefined ? null : match;
-                               },
+               // This transport only deals with cross domain requests
+               if ( s.crossDomain ) {
 
-                               // Overrides response content-type header
-                               overrideMimeType: function( type ) {
-                                       if ( !state ) {
-                                               s.mimeType = type;
-                                       }
-                                       return this;
-                               },
+                       var script,
+                               head = document.head || document.getElementsByTagName( "head" )[0] || document.documentElement;
 
-                               // Cancel the request
-                               abort: function( statusText ) {
-                                       statusText = statusText || strAbort;
-                                       if ( transport ) {
-                                               transport.abort( statusText );
-                                       }
-                                       done( 0, statusText );
-                                       return this;
-                               }
-                       };
+                       return {
 
-               // Callback for when everything is done
-               // It is defined here because jslint complains if it is declared
-               // at the end of the function (which would be more logical and readable)
-               function done( status, nativeStatusText, responses, headers ) {
-                       var isSuccess, success, error, response, modified,
-                               statusText = nativeStatusText;
+                               send: function( _, callback ) {
 
-                       // Called once
-                       if ( state === 2 ) {
-                               return;
-                       }
+                                       script = document.createElement( "script" );
 
-                       // State is "done" now
-                       state = 2;
+                                       script.async = "async";
 
-                       // Clear timeout if it exists
-                       if ( timeoutTimer ) {
-                               clearTimeout( timeoutTimer );
-                       }
+                                       if ( s.scriptCharset ) {
+                                               script.charset = s.scriptCharset;
+                                       }
 
-                       // Dereference transport for early garbage collection
-                       // (no matter how long the jqXHR object will be used)
-                       transport = undefined;
+                                       script.src = s.url;
 
-                       // Cache response headers
-                       responseHeadersString = headers || "";
+                                       // Attach handlers for all browsers
+                                       script.onload = script.onreadystatechange = function( _, isAbort ) {
 
-                       // Set readyState
-                       jqXHR.readyState = status > 0 ? 4 : 0;
+                                               if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
 
-                       // Get response data
-                       if ( responses ) {
-                               response = ajaxHandleResponses( s, jqXHR, responses );
-                       }
+                                                       // Handle memory leak in IE
+                                                       script.onload = script.onreadystatechange = null;
 
-                       // If successful, handle type chaining
-                       if ( status >= 200 && status < 300 || status === 304 ) {
+                                                       // Remove the script
+                                                       if ( head && script.parentNode ) {
+                                                               head.removeChild( script );
+                                                       }
 
-                               // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
-                               if ( s.ifModified ) {
+                                                       // Dereference the script
+                                                       script = undefined;
 
-                                       modified = jqXHR.getResponseHeader("Last-Modified");
-                                       if ( modified ) {
-                                               jQuery.lastModified[ ifModifiedKey ] = modified;
-                                       }
-                                       modified = jqXHR.getResponseHeader("Etag");
-                                       if ( modified ) {
-                                               jQuery.etag[ ifModifiedKey ] = modified;
+                                                       // Callback if not abort
+                                                       if ( !isAbort ) {
+                                                               callback( 200, "success" );
+                                                       }
+                                               }
+                                       };
+                                       // Use insertBefore instead of appendChild  to circumvent an IE6 bug.
+                                       // This arises when a base node is used (#2709 and #4378).
+                                       head.insertBefore( script, head.firstChild );
+                               },
+
+                               abort: function() {
+                                       if ( script ) {
+                                               script.onload( 0, 1 );
                                        }
                                }
+                       };
+               }
+       });
 
-                               // If not modified
-                               if ( status === 304 ) {
 
-                                       statusText = "notmodified";
-                                       isSuccess = true;
 
-                               // If we have data
-                               } else {
 
-                                       isSuccess = ajaxConvert( s, response );
-                                       statusText = isSuccess.state;
-                                       success = isSuccess.data;
-                                       error = isSuccess.error;
-                                       isSuccess = !error;
-                               }
-                       } else {
-                               // We extract error from statusText
-                               // then normalize statusText and status for non-aborts
-                               error = statusText;
-                               if ( !statusText || status ) {
-                                       statusText = "error";
-                                       if ( status < 0 ) {
-                                               status = 0;
-                                       }
-                               }
+       var // #5280: Internet Explorer will keep connections alive if we don't abort on unload
+               xhrOnUnloadAbort = window.ActiveXObject ? function() {
+                       // Abort all pending requests
+                       for ( var key in xhrCallbacks ) {
+                               xhrCallbacks[ key ]( 0, 1 );
                        }
+               } : false,
+               xhrId = 0,
+               xhrCallbacks;
 
-                       // Set data for the fake xhr object
-                       jqXHR.status = status;
-                       jqXHR.statusText = "" + ( nativeStatusText || statusText );
+// Functions to create xhrs
+       function createStandardXHR() {
+               try {
+                       return new window.XMLHttpRequest();
+               } catch( e ) {}
+       }
 
-                       // Success/Error
-                       if ( isSuccess ) {
-                               deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
-                       } else {
-                               deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
-                       }
+       function createActiveXHR() {
+               try {
+                       return new window.ActiveXObject( "Microsoft.XMLHTTP" );
+               } catch( e ) {}
+       }
 
-                       // Status-dependent callbacks
-                       jqXHR.statusCode( statusCode );
-                       statusCode = undefined;
+// Create the request object
+// (This is still attached to ajaxSettings for backward compatibility)
+       jQuery.ajaxSettings.xhr = window.ActiveXObject ?
+               /* Microsoft failed to properly
+                * implement the XMLHttpRequest in IE7 (can't request local files),
+                * so we use the ActiveXObject when it is available
+                * Additionally XMLHttpRequest can be disabled in IE7/IE8 so
+                * we need a fallback.
+                */
+               function() {
+                       return !this.isLocal && createStandardXHR() || createActiveXHR();
+               } :
+               // For all other browsers, use the standard XMLHttpRequest object
+               createStandardXHR;
 
-                       if ( fireGlobals ) {
-                               globalEventContext.trigger( "ajax" + ( isSuccess ? "Success" : "Error" ),
-                                               [ jqXHR, s, isSuccess ? success : error ] );
-                       }
+// Determine support properties
+       (function( xhr ) {
+               jQuery.extend( jQuery.support, {
+                       ajax: !!xhr,
+                       cors: !!xhr && ( "withCredentials" in xhr )
+               });
+       })( jQuery.ajaxSettings.xhr() );
 
-                       // Complete
-                       completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
+// Create transport if the browser can provide an xhr
+       if ( jQuery.support.ajax ) {
 
-                       if ( fireGlobals ) {
-                               globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
-                               // Handle the global AJAX counter
-                               if ( !( --jQuery.active ) ) {
-                                       jQuery.event.trigger( "ajaxStop" );
-                               }
-                       }
-               }
+               jQuery.ajaxTransport(function( s ) {
+                       // Cross domain only allowed if supported through XMLHttpRequest
+                       if ( !s.crossDomain || jQuery.support.cors ) {
 
-               // Attach deferreds
-               deferred.promise( jqXHR );
-               jqXHR.success = jqXHR.done;
-               jqXHR.error = jqXHR.fail;
-               jqXHR.complete = completeDeferred.add;
+                               var callback;
 
-               // Status-dependent callbacks
-               jqXHR.statusCode = function( map ) {
-                       if ( map ) {
-                               var tmp;
-                               if ( state < 2 ) {
-                                       for ( tmp in map ) {
-                                               statusCode[ tmp ] = [ statusCode[tmp], map[tmp] ];
-                                       }
-                               } else {
-                                       tmp = map[ jqXHR.status ];
-                                       jqXHR.always( tmp );
-                               }
-                       }
-                       return this;
-               };
+                               return {
+                                       send: function( headers, complete ) {
 
-               // Remove hash character (#7531: and string promotion)
-               // Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
-               // We also use the url parameter if available
-               s.url = ( ( url || s.url ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
-
-               // Extract dataTypes list
-               s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().split( core_rspace );
-
-               // Determine if a cross-domain request is in order
-               if ( s.crossDomain == null ) {
-                       parts = rurl.exec( s.url.toLowerCase() );
-                       s.crossDomain = !!( parts &&
-                               ( parts[ 1 ] != ajaxLocParts[ 1 ] || parts[ 2 ] != ajaxLocParts[ 2 ] ||
-                                       ( parts[ 3 ] || ( parts[ 1 ] === "http:" ? 80 : 443 ) ) !=
-                                               ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ) )
-                       );
-               }
+                                               // Get a new xhr
+                                               var xhr = s.xhr(),
+                                                       handle,
+                                                       i;
 
-               // Convert data if not already a string
-               if ( s.data && s.processData && typeof s.data !== "string" ) {
-                       s.data = jQuery.param( s.data, s.traditional );
-               }
+                                               // Open the socket
+                                               // Passing null username, generates a login popup on Opera (#2865)
+                                               if ( s.username ) {
+                                                       xhr.open( s.type, s.url, s.async, s.username, s.password );
+                                               } else {
+                                                       xhr.open( s.type, s.url, s.async );
+                                               }
 
-               // Apply prefilters
-               inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
+                                               // Apply custom fields if provided
+                                               if ( s.xhrFields ) {
+                                                       for ( i in s.xhrFields ) {
+                                                               xhr[ i ] = s.xhrFields[ i ];
+                                                       }
+                                               }
 
-               // If request was aborted inside a prefilter, stop there
-               if ( state === 2 ) {
-                       return jqXHR;
-               }
+                                               // Override mime type if needed
+                                               if ( s.mimeType && xhr.overrideMimeType ) {
+                                                       xhr.overrideMimeType( s.mimeType );
+                                               }
 
-               // We can fire global events as of now if asked to
-               fireGlobals = s.global;
+                                               // X-Requested-With header
+                                               // For cross-domain requests, seeing as conditions for a preflight are
+                                               // akin to a jigsaw puzzle, we simply never set it to be sure.
+                                               // (it can always be set on a per-request basis or even using ajaxSetup)
+                                               // For same-domain requests, won't change header if already provided.
+                                               if ( !s.crossDomain && !headers["X-Requested-With"] ) {
+                                                       headers[ "X-Requested-With" ] = "XMLHttpRequest";
+                                               }
 
-               // Uppercase the type
-               s.type = s.type.toUpperCase();
+                                               // Need an extra try/catch for cross domain requests in Firefox 3
+                                               try {
+                                                       for ( i in headers ) {
+                                                               xhr.setRequestHeader( i, headers[ i ] );
+                                                       }
+                                               } catch( _ ) {}
+
+                                               // Do send the request
+                                               // This may raise an exception which is actually
+                                               // handled in jQuery.ajax (so no try/catch here)
+                                               xhr.send( ( s.hasContent && s.data ) || null );
+
+                                               // Listener
+                                               callback = function( _, isAbort ) {
+
+                                                       var status,
+                                                               statusText,
+                                                               responseHeaders,
+                                                               responses,
+                                                               xml;
+
+                                                       // Firefox throws exceptions when accessing properties
+                                                       // of an xhr when a network error occured
+                                                       // http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)
+                                                       try {
+
+                                                               // Was never called and is aborted or complete
+                                                               if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
+
+                                                                       // Only called once
+                                                                       callback = undefined;
+
+                                                                       // Do not keep as active anymore
+                                                                       if ( handle ) {
+                                                                               xhr.onreadystatechange = jQuery.noop;
+                                                                               if ( xhrOnUnloadAbort ) {
+                                                                                       delete xhrCallbacks[ handle ];
+                                                                               }
+                                                                       }
 
-               // Determine if request has content
-               s.hasContent = !rnoContent.test( s.type );
+                                                                       // If it's an abort
+                                                                       if ( isAbort ) {
+                                                                               // Abort it manually if needed
+                                                                               if ( xhr.readyState !== 4 ) {
+                                                                                       xhr.abort();
+                                                                               }
+                                                                       } else {
+                                                                               status = xhr.status;
+                                                                               responseHeaders = xhr.getAllResponseHeaders();
+                                                                               responses = {};
+                                                                               xml = xhr.responseXML;
+
+                                                                               // Construct response list
+                                                                               if ( xml && xml.documentElement /* #4958 */ ) {
+                                                                                       responses.xml = xml;
+                                                                               }
+
+                                                                               // When requesting binary data, IE6-9 will throw an exception
+                                                                               // on any attempt to access responseText (#11426)
+                                                                               try {
+                                                                                       responses.text = xhr.responseText;
+                                                                               } catch( _ ) {
+                                                                               }
+
+                                                                               // Firefox throws an exception when accessing
+                                                                               // statusText for faulty cross-domain requests
+                                                                               try {
+                                                                                       statusText = xhr.statusText;
+                                                                               } catch( e ) {
+                                                                                       // We normalize with Webkit giving an empty statusText
+                                                                                       statusText = "";
+                                                                               }
+
+                                                                               // Filter status for non standard behaviors
+
+                                                                               // If the request is local and we have data: assume a success
+                                                                               // (success with no data won't get notified, that's the best we
+                                                                               // can do given current implementations)
+                                                                               if ( !status && s.isLocal && !s.crossDomain ) {
+                                                                                       status = responses.text ? 200 : 404;
+                                                                                       // IE - #1450: sometimes returns 1223 when it should be 204
+                                                                               } else if ( status === 1223 ) {
+                                                                                       status = 204;
+                                                                               }
+                                                                       }
+                                                               }
+                                                       } catch( firefoxAccessException ) {
+                                                               if ( !isAbort ) {
+                                                                       complete( -1, firefoxAccessException );
+                                                               }
+                                                       }
 
-               // Watch for a new set of requests
-               if ( fireGlobals && jQuery.active++ === 0 ) {
-                       jQuery.event.trigger( "ajaxStart" );
-               }
+                                                       // Call complete if needed
+                                                       if ( responses ) {
+                                                               complete( status, statusText, responses, responseHeaders );
+                                                       }
+                                               };
 
-               // More options handling for requests with no content
-               if ( !s.hasContent ) {
+                                               // if we're in sync mode or it's in cache
+                                               // and has been retrieved directly (IE6 & IE7)
+                                               // we need to manually fire the callback
+                                               if ( !s.async || xhr.readyState === 4 ) {
+                                                       callback();
+                                               } else {
+                                                       handle = ++xhrId;
+                                                       if ( xhrOnUnloadAbort ) {
+                                                               // Create the active xhrs callbacks list if needed
+                                                               // and attach the unload handler
+                                                               if ( !xhrCallbacks ) {
+                                                                       xhrCallbacks = {};
+                                                                       jQuery( window ).unload( xhrOnUnloadAbort );
+                                                               }
+                                                               // Add to list of active xhrs callbacks
+                                                               xhrCallbacks[ handle ] = callback;
+                                                       }
+                                                       xhr.onreadystatechange = callback;
+                                               }
+                                       },
 
-                       // If data is available, append data to url
-                       if ( s.data ) {
-                               s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.data;
-                               // #9682: remove data so that it's not used in an eventual retry
-                               delete s.data;
+                                       abort: function() {
+                                               if ( callback ) {
+                                                       callback(0,1);
+                                               }
+                                       }
+                               };
                        }
+               });
+       }
 
-                       // Get ifModifiedKey before adding the anti-cache parameter
-                       ifModifiedKey = s.url;
-
-                       // Add anti-cache in url if needed
-                       if ( s.cache === false ) {
 
-                               var ts = jQuery.now(),
-                                       // try replacing _= if it is there
-                                       ret = s.url.replace( rts, "$1_=" + ts );
 
-                               // if nothing was replaced, add timestamp to the end
-                               s.url = ret + ( ( ret === s.url ) ? ( rquery.test( s.url ) ? "&" : "?" ) + "_=" + ts : "" );
-                       }
-               }
 
-               // Set the correct header, if data is being sent
-               if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
-                       jqXHR.setRequestHeader( "Content-Type", s.contentType );
-               }
+       var elemdisplay = {},
+               iframe, iframeDoc,
+               rfxtypes = /^(?:toggle|show|hide)$/,
+               rfxnum = /^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,
+               timerId,
+               fxAttrs = [
+                       // height animations
+                       [ "height", "marginTop", "marginBottom", "paddingTop", "paddingBottom" ],
+                       // width animations
+                       [ "width", "marginLeft", "marginRight", "paddingLeft", "paddingRight" ],
+                       // opacity animations
+                       [ "opacity" ]
+               ],
+               fxNow;
 
-               // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
-               if ( s.ifModified ) {
-                       ifModifiedKey = ifModifiedKey || s.url;
-                       if ( jQuery.lastModified[ ifModifiedKey ] ) {
-                               jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ ifModifiedKey ] );
-                       }
-                       if ( jQuery.etag[ ifModifiedKey ] ) {
-                               jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ ifModifiedKey ] );
-                       }
-               }
+       jQuery.fn.extend({
+               show: function( speed, easing, callback ) {
+                       var elem, display;
 
-               // Set the Accepts header for the server, depending on the dataType
-               jqXHR.setRequestHeader(
-                       "Accept",
-                       s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
-                               s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
-                               s.accepts[ "*" ]
-               );
-
-               // Check for headers option
-               for ( i in s.headers ) {
-                       jqXHR.setRequestHeader( i, s.headers[ i ] );
-               }
+                       if ( speed || speed === 0 ) {
+                               return this.animate( genFx("show", 3), speed, easing, callback );
 
-               // Allow custom headers/mimetypes and early abort
-               if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
-                               // Abort if not done already and return
-                               return jqXHR.abort();
+                       } else {
+                               for ( var i = 0, j = this.length; i < j; i++ ) {
+                                       elem = this[ i ];
 
-               }
+                                       if ( elem.style ) {
+                                               display = elem.style.display;
 
-               // aborting is no longer a cancellation
-               strAbort = "abort";
+                                               // Reset the inline display of this element to learn if it is
+                                               // being hidden by cascaded rules or not
+                                               if ( !jQuery._data(elem, "olddisplay") && display === "none" ) {
+                                                       display = elem.style.display = "";
+                                               }
 
-               // Install callbacks on deferreds
-               for ( i in { success: 1, error: 1, complete: 1 } ) {
-                       jqXHR[ i ]( s[ i ] );
-               }
+                                               // Set elements which have been overridden with display: none
+                                               // in a stylesheet to whatever the default browser style is
+                                               // for such an element
+                                               if ( (display === "" && jQuery.css(elem, "display") === "none") ||
+                                                       !jQuery.contains( elem.ownerDocument.documentElement, elem ) ) {
+                                                       jQuery._data( elem, "olddisplay", defaultDisplay(elem.nodeName) );
+                                               }
+                                       }
+                               }
 
-               // Get transport
-               transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
+                               // Set the display of most of the elements in a second loop
+                               // to avoid the constant reflow
+                               for ( i = 0; i < j; i++ ) {
+                                       elem = this[ i ];
 
-               // If no transport, we auto-abort
-               if ( !transport ) {
-                       done( -1, "No Transport" );
-               } else {
-                       jqXHR.readyState = 1;
-                       // Send global event
-                       if ( fireGlobals ) {
-                               globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
-                       }
-                       // Timeout
-                       if ( s.async && s.timeout > 0 ) {
-                               timeoutTimer = setTimeout( function(){
-                                       jqXHR.abort( "timeout" );
-                               }, s.timeout );
-                       }
+                                       if ( elem.style ) {
+                                               display = elem.style.display;
 
-                       try {
-                               state = 1;
-                               transport.send( requestHeaders, done );
-                       } catch (e) {
-                               // Propagate exception as error if not done
-                               if ( state < 2 ) {
-                                       done( -1, e );
-                               // Simply rethrow otherwise
-                               } else {
-                                       throw e;
+                                               if ( display === "" || display === "none" ) {
+                                                       elem.style.display = jQuery._data( elem, "olddisplay" ) || "";
+                                               }
+                                       }
                                }
+
+                               return this;
                        }
-               }
+               },
+
+               hide: function( speed, easing, callback ) {
+                       if ( speed || speed === 0 ) {
+                               return this.animate( genFx("hide", 3), speed, easing, callback);
 
-               return jqXHR;
-       },
+                       } else {
+                               var elem, display,
+                                       i = 0,
+                                       j = this.length;
 
-       // Counter for holding the number of active queries
-       active: 0,
+                               for ( ; i < j; i++ ) {
+                                       elem = this[i];
+                                       if ( elem.style ) {
+                                               display = jQuery.css( elem, "display" );
 
-       // Last-Modified header cache for next request
-       lastModified: {},
-       etag: {}
+                                               if ( display !== "none" && !jQuery._data( elem, "olddisplay" ) ) {
+                                                       jQuery._data( elem, "olddisplay", display );
+                                               }
+                                       }
+                               }
 
-});
+                               // Set the display of the elements in a second loop
+                               // to avoid the constant reflow
+                               for ( i = 0; i < j; i++ ) {
+                                       if ( this[i].style ) {
+                                               this[i].style.display = "none";
+                                       }
+                               }
 
-/* Handles responses to an ajax request:
- * - sets all responseXXX fields accordingly
- * - finds the right dataType (mediates between content-type and expected dataType)
- * - returns the corresponding response
- */
-function ajaxHandleResponses( s, jqXHR, responses ) {
+                               return this;
+                       }
+               },
 
-       var ct, type, finalDataType, firstDataType,
-               contents = s.contents,
-               dataTypes = s.dataTypes,
-               responseFields = s.responseFields;
+               // Save the old toggle function
+               _toggle: jQuery.fn.toggle,
 
-       // Fill responseXXX fields
-       for ( type in responseFields ) {
-               if ( type in responses ) {
-                       jqXHR[ responseFields[type] ] = responses[ type ];
-               }
-       }
+               toggle: function( fn, fn2, callback ) {
+                       var bool = typeof fn === "boolean";
 
-       // Remove auto dataType and get content-type in the process
-       while( dataTypes[ 0 ] === "*" ) {
-               dataTypes.shift();
-               if ( ct === undefined ) {
-                       ct = s.mimeType || jqXHR.getResponseHeader( "content-type" );
-               }
-       }
+                       if ( jQuery.isFunction(fn) && jQuery.isFunction(fn2) ) {
+                               this._toggle.apply( this, arguments );
 
-       // Check if we're dealing with a known content-type
-       if ( ct ) {
-               for ( type in contents ) {
-                       if ( contents[ type ] && contents[ type ].test( ct ) ) {
-                               dataTypes.unshift( type );
-                               break;
-                       }
-               }
-       }
+                       } else if ( fn == null || bool ) {
+                               this.each(function() {
+                                       var state = bool ? fn : jQuery(this).is(":hidden");
+                                       jQuery(this)[ state ? "show" : "hide" ]();
+                               });
 
-       // Check to see if we have a response for the expected dataType
-       if ( dataTypes[ 0 ] in responses ) {
-               finalDataType = dataTypes[ 0 ];
-       } else {
-               // Try convertible dataTypes
-               for ( type in responses ) {
-                       if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
-                               finalDataType = type;
-                               break;
-                       }
-                       if ( !firstDataType ) {
-                               firstDataType = type;
+                       } else {
+                               this.animate(genFx("toggle", 3), fn, fn2, callback);
                        }
-               }
-               // Or just use first one
-               finalDataType = finalDataType || firstDataType;
-       }
 
-       // If we found a dataType
-       // We add the dataType to the list if needed
-       // and return the corresponding response
-       if ( finalDataType ) {
-               if ( finalDataType !== dataTypes[ 0 ] ) {
-                       dataTypes.unshift( finalDataType );
-               }
-               return responses[ finalDataType ];
-       }
-}
+                       return this;
+               },
 
-// Chain conversions given the request and the original response
-function ajaxConvert( s, response ) {
-
-       var conv, conv2, current, tmp,
-               // Work with a copy of dataTypes in case we need to modify it for conversion
-               dataTypes = s.dataTypes.slice(),
-               prev = dataTypes[ 0 ],
-               converters = {},
-               i = 0;
-
-       // Apply the dataFilter if provided
-       if ( s.dataFilter ) {
-               response = s.dataFilter( response, s.dataType );
-       }
+               fadeTo: function( speed, to, easing, callback ) {
+                       return this.filter(":hidden").css("opacity", 0).show().end()
+                               .animate({opacity: to}, speed, easing, callback);
+               },
 
-       // Create converters map with lowercased keys
-       if ( dataTypes[ 1 ] ) {
-               for ( conv in s.converters ) {
-                       converters[ conv.toLowerCase() ] = s.converters[ conv ];
-               }
-       }
+               animate: function( prop, speed, easing, callback ) {
+                       var optall = jQuery.speed( speed, easing, callback );
 
-       // Convert to each sequential dataType, tolerating list modification
-       for ( ; (current = dataTypes[++i]); ) {
+                       if ( jQuery.isEmptyObject( prop ) ) {
+                               return this.each( optall.complete, [ false ] );
+                       }
 
-               // There's only work to do if current dataType is non-auto
-               if ( current !== "*" ) {
+                       // Do not change referenced properties as per-property easing will be lost
+                       prop = jQuery.extend( {}, prop );
 
-                       // Convert response if prev dataType is non-auto and differs from current
-                       if ( prev !== "*" && prev !== current ) {
+                       function doAnimation() {
+                               // XXX 'this' does not always have a nodeName when running the
+                               // test suite
 
-                               // Seek a direct converter
-                               conv = converters[ prev + " " + current ] || converters[ "* " + current ];
+                               if ( optall.queue === false ) {
+                                       jQuery._mark( this );
+                               }
 
-                               // If none found, seek a pair
-                               if ( !conv ) {
-                                       for ( conv2 in converters ) {
-
-                                               // If conv2 outputs current
-                                               tmp = conv2.split(" ");
-                                               if ( tmp[ 1 ] === current ) {
-
-                                                       // If prev can be converted to accepted input
-                                                       conv = converters[ prev + " " + tmp[ 0 ] ] ||
-                                                               converters[ "* " + tmp[ 0 ] ];
-                                                       if ( conv ) {
-                                                               // Condense equivalence converters
-                                                               if ( conv === true ) {
-                                                                       conv = converters[ conv2 ];
-
-                                                               // Otherwise, insert the intermediate dataType
-                                                               } else if ( converters[ conv2 ] !== true ) {
-                                                                       current = tmp[ 0 ];
-                                                                       dataTypes.splice( i--, 0, current );
-                                                               }
+                               var opt = jQuery.extend( {}, optall ),
+                                       isElement = this.nodeType === 1,
+                                       hidden = isElement && jQuery(this).is(":hidden"),
+                                       name, val, p, e, hooks, replace,
+                                       parts, start, end, unit,
+                                       method;
+
+                               // will store per property easing and be used to determine when an animation is complete
+                               opt.animatedProperties = {};
+
+                               // first pass over propertys to expand / normalize
+                               for ( p in prop ) {
+                                       name = jQuery.camelCase( p );
+                                       if ( p !== name ) {
+                                               prop[ name ] = prop[ p ];
+                                               delete prop[ p ];
+                                       }
 
-                                                               break;
+                                       if ( ( hooks = jQuery.cssHooks[ name ] ) && "expand" in hooks ) {
+                                               replace = hooks.expand( prop[ name ] );
+                                               delete prop[ name ];
+
+                                               // not quite $.extend, this wont overwrite keys already present.
+                                               // also - reusing 'p' from above because we have the correct "name"
+                                               for ( p in replace ) {
+                                                       if ( ! ( p in prop ) ) {
+                                                               prop[ p ] = replace[ p ];
                                                        }
                                                }
                                        }
                                }
 
-                               // Apply converter (if not an equivalence)
-                               if ( conv !== true ) {
-
-                                       // Unless errors are allowed to bubble, catch and return them
-                                       if ( conv && s["throws"] ) {
-                                               response = conv( response );
+                               for ( name in prop ) {
+                                       val = prop[ name ];
+                                       // easing resolution: per property > opt.specialEasing > opt.easing > 'swing' (default)
+                                       if ( jQuery.isArray( val ) ) {
+                                               opt.animatedProperties[ name ] = val[ 1 ];
+                                               val = prop[ name ] = val[ 0 ];
                                        } else {
-                                               try {
-                                                       response = conv( response );
-                                               } catch ( e ) {
-                                                       return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current };
-                                               }
+                                               opt.animatedProperties[ name ] = opt.specialEasing && opt.specialEasing[ name ] || opt.easing || 'swing';
                                        }
-                               }
-                       }
 
-                       // Update prev for next iteration
-                       prev = current;
-               }
-       }
+                                       if ( val === "hide" && hidden || val === "show" && !hidden ) {
+                                               return opt.complete.call( this );
+                                       }
 
-       return { state: "success", data: response };
-}
-var oldCallbacks = [],
-       rquestion = /\?/,
-       rjsonp = /(=)\?(?=&|$)|\?\?/,
-       nonce = jQuery.now();
+                                       if ( isElement && ( name === "height" || name === "width" ) ) {
+                                               // Make sure that nothing sneaks out
+                                               // Record all 3 overflow attributes because IE does not
+                                               // change the overflow attribute when overflowX and
+                                               // overflowY are set to the same value
+                                               opt.overflow = [ this.style.overflow, this.style.overflowX, this.style.overflowY ];
 
-// Default jsonp settings
-jQuery.ajaxSetup({
-       jsonp: "callback",
-       jsonpCallback: function() {
-               var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
-               this[ callback ] = true;
-               return callback;
-       }
-});
+                                               // Set display property to inline-block for height/width
+                                               // animations on inline elements that are having width/height animated
+                                               if ( jQuery.css( this, "display" ) === "inline" &&
+                                                       jQuery.css( this, "float" ) === "none" ) {
 
-// Detect, normalize options and install callbacks for jsonp requests
-jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
-
-       var callbackName, overwritten, responseContainer,
-               data = s.data,
-               url = s.url,
-               hasCallback = s.jsonp !== false,
-               replaceInUrl = hasCallback && rjsonp.test( url ),
-               replaceInData = hasCallback && !replaceInUrl && typeof data === "string" &&
-                       !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") &&
-                       rjsonp.test( data );
-
-       // Handle iff the expected data type is "jsonp" or we have a parameter to set
-       if ( s.dataTypes[ 0 ] === "jsonp" || replaceInUrl || replaceInData ) {
-
-               // Get callback name, remembering preexisting value associated with it
-               callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
-                       s.jsonpCallback() :
-                       s.jsonpCallback;
-               overwritten = window[ callbackName ];
-
-               // Insert callback into url or form data
-               if ( replaceInUrl ) {
-                       s.url = url.replace( rjsonp, "$1" + callbackName );
-               } else if ( replaceInData ) {
-                       s.data = data.replace( rjsonp, "$1" + callbackName );
-               } else if ( hasCallback ) {
-                       s.url += ( rquestion.test( url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
-               }
+                                                       // inline-level elements accept inline-block;
+                                                       // block-level elements need to be inline with layout
+                                                       if ( !jQuery.support.inlineBlockNeedsLayout || defaultDisplay( this.nodeName ) === "inline" ) {
+                                                               this.style.display = "inline-block";
 
-               // Use data converter to retrieve json after script execution
-               s.converters["script json"] = function() {
-                       if ( !responseContainer ) {
-                               jQuery.error( callbackName + " was not called" );
-                       }
-                       return responseContainer[ 0 ];
-               };
+                                                       } else {
+                                                               this.style.zoom = 1;
+                                                       }
+                                               }
+                                       }
+                               }
 
-               // force json dataType
-               s.dataTypes[ 0 ] = "json";
+                               if ( opt.overflow != null ) {
+                                       this.style.overflow = "hidden";
+                               }
 
-               // Install callback
-               window[ callbackName ] = function() {
-                       responseContainer = arguments;
-               };
+                               for ( p in prop ) {
+                                       e = new jQuery.fx( this, opt, p );
+                                       val = prop[ p ];
 
-               // Clean-up function (fires after converters)
-               jqXHR.always(function() {
-                       // Restore preexisting value
-                       window[ callbackName ] = overwritten;
+                                       if ( rfxtypes.test( val ) ) {
 
-                       // Save back as free
-                       if ( s[ callbackName ] ) {
-                               // make sure that re-using the options doesn't screw things around
-                               s.jsonpCallback = originalSettings.jsonpCallback;
+                                               // Tracks whether to show or hide based on private
+                                               // data attached to the element
+                                               method = jQuery._data( this, "toggle" + p ) || ( val === "toggle" ? hidden ? "show" : "hide" : 0 );
+                                               if ( method ) {
+                                                       jQuery._data( this, "toggle" + p, method === "show" ? "hide" : "show" );
+                                                       e[ method ]();
+                                               } else {
+                                                       e[ val ]();
+                                               }
 
-                               // save the callback name for future use
-                               oldCallbacks.push( callbackName );
-                       }
+                                       } else {
+                                               parts = rfxnum.exec( val );
+                                               start = e.cur();
+
+                                               if ( parts ) {
+                                                       end = parseFloat( parts[2] );
+                                                       unit = parts[3] || ( jQuery.cssNumber[ p ] ? "" : "px" );
+
+                                                       // We need to compute starting value
+                                                       if ( unit !== "px" ) {
+                                                               jQuery.style( this, p, (end || 1) + unit);
+                                                               start = ( (end || 1) / e.cur() ) * start;
+                                                               jQuery.style( this, p, start + unit);
+                                                       }
 
-                       // Call if it was a function and we have a response
-                       if ( responseContainer && jQuery.isFunction( overwritten ) ) {
-                               overwritten( responseContainer[ 0 ] );
-                       }
+                                                       // If a +=/-= token was provided, we're doing a relative animation
+                                                       if ( parts[1] ) {
+                                                               end = ( (parts[ 1 ] === "-=" ? -1 : 1) * end ) + start;
+                                                       }
 
-                       responseContainer = overwritten = undefined;
-               });
+                                                       e.custom( start, end, unit );
 
-               // Delegate to script
-               return "script";
-       }
-});
-// Install script dataType
-jQuery.ajaxSetup({
-       accepts: {
-               script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
-       },
-       contents: {
-               script: /javascript|ecmascript/
-       },
-       converters: {
-               "text script": function( text ) {
-                       jQuery.globalEval( text );
-                       return text;
-               }
-       }
-});
+                                               } else {
+                                                       e.custom( start, val, "" );
+                                               }
+                                       }
+                               }
 
-// Handle cache's special case and global
-jQuery.ajaxPrefilter( "script", function( s ) {
-       if ( s.cache === undefined ) {
-               s.cache = false;
-       }
-       if ( s.crossDomain ) {
-               s.type = "GET";
-               s.global = false;
-       }
-});
+                               // For JS strict compliance
+                               return true;
+                       }
 
-// Bind script tag hack transport
-jQuery.ajaxTransport( "script", function(s) {
+                       return optall.queue === false ?
+                               this.each( doAnimation ) :
+                               this.queue( optall.queue, doAnimation );
+               },
 
-       // This transport only deals with cross domain requests
-       if ( s.crossDomain ) {
+               stop: function( type, clearQueue, gotoEnd ) {
+                       if ( typeof type !== "string" ) {
+                               gotoEnd = clearQueue;
+                               clearQueue = type;
+                               type = undefined;
+                       }
+                       if ( clearQueue && type !== false ) {
+                               this.queue( type || "fx", [] );
+                       }
 
-               var script,
-                       head = document.head || document.getElementsByTagName( "head" )[0] || document.documentElement;
+                       return this.each(function() {
+                               var index,
+                                       hadTimers = false,
+                                       timers = jQuery.timers,
+                                       data = jQuery._data( this );
+
+                               // clear marker counters if we know they won't be
+                               if ( !gotoEnd ) {
+                                       jQuery._unmark( true, this );
+                               }
 
-               return {
+                               function stopQueue( elem, data, index ) {
+                                       var hooks = data[ index ];
+                                       jQuery.removeData( elem, index, true );
+                                       hooks.stop( gotoEnd );
+                               }
 
-                       send: function( _, callback ) {
+                               if ( type == null ) {
+                                       for ( index in data ) {
+                                               if ( data[ index ] && data[ index ].stop && index.indexOf(".run") === index.length - 4 ) {
+                                                       stopQueue( this, data, index );
+                                               }
+                                       }
+                               } else if ( data[ index = type + ".run" ] && data[ index ].stop ){
+                                       stopQueue( this, data, index );
+                               }
 
-                               script = document.createElement( "script" );
+                               for ( index = timers.length; index--; ) {
+                                       if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {
+                                               if ( gotoEnd ) {
 
-                               script.async = "async";
+                                                       // force the next step to be the last
+                                                       timers[ index ]( true );
+                                               } else {
+                                                       timers[ index ].saveState();
+                                               }
+                                               hadTimers = true;
+                                               timers.splice( index, 1 );
+                                       }
+                               }
 
-                               if ( s.scriptCharset ) {
-                                       script.charset = s.scriptCharset;
+                               // start the next in the queue if the last step wasn't forced
+                               // timers currently will call their complete callbacks, which will dequeue
+                               // but only if they were gotoEnd
+                               if ( !( gotoEnd && hadTimers ) ) {
+                                       jQuery.dequeue( this, type );
                                }
+                       });
+               }
+
+       });
+
+// Animations created synchronously will run synchronously
+       function createFxNow() {
+               setTimeout( clearFxNow, 0 );
+               return ( fxNow = jQuery.now() );
+       }
 
-                               script.src = s.url;
+       function clearFxNow() {
+               fxNow = undefined;
+       }
 
-                               // Attach handlers for all browsers
-                               script.onload = script.onreadystatechange = function( _, isAbort ) {
+// Generate parameters to create a standard animation
+       function genFx( type, num ) {
+               var obj = {};
 
-                                       if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
+               jQuery.each( fxAttrs.concat.apply([], fxAttrs.slice( 0, num )), function() {
+                       obj[ this ] = type;
+               });
 
-                                               // Handle memory leak in IE
-                                               script.onload = script.onreadystatechange = null;
+               return obj;
+       }
 
-                                               // Remove the script
-                                               if ( head && script.parentNode ) {
-                                                       head.removeChild( script );
-                                               }
+// Generate shortcuts for custom animations
+       jQuery.each({
+               slideDown: genFx( "show", 1 ),
+               slideUp: genFx( "hide", 1 ),
+               slideToggle: genFx( "toggle", 1 ),
+               fadeIn: { opacity: "show" },
+               fadeOut: { opacity: "hide" },
+               fadeToggle: { opacity: "toggle" }
+       }, function( name, props ) {
+               jQuery.fn[ name ] = function( speed, easing, callback ) {
+                       return this.animate( props, speed, easing, callback );
+               };
+       });
 
-                                               // Dereference the script
-                                               script = undefined;
+       jQuery.extend({
+               speed: function( speed, easing, fn ) {
+                       var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
+                               complete: fn || !fn && easing ||
+                                       jQuery.isFunction( speed ) && speed,
+                               duration: speed,
+                               easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
+                       };
 
-                                               // Callback if not abort
-                                               if ( !isAbort ) {
-                                                       callback( 200, "success" );
-                                               }
-                                       }
-                               };
-                               // Use insertBefore instead of appendChild  to circumvent an IE6 bug.
-                               // This arises when a base node is used (#2709 and #4378).
-                               head.insertBefore( script, head.firstChild );
-                       },
+                       opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
+                               opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
 
-                       abort: function() {
-                               if ( script ) {
-                                       script.onload( 0, 1 );
-                               }
+                       // normalize opt.queue - true/undefined/null -> "fx"
+                       if ( opt.queue == null || opt.queue === true ) {
+                               opt.queue = "fx";
                        }
-               };
-       }
-});
-var xhrCallbacks,
-       // #5280: Internet Explorer will keep connections alive if we don't abort on unload
-       xhrOnUnloadAbort = window.ActiveXObject ? function() {
-               // Abort all pending requests
-               for ( var key in xhrCallbacks ) {
-                       xhrCallbacks[ key ]( 0, 1 );
-               }
-       } : false,
-       xhrId = 0;
 
-// Functions to create xhrs
-function createStandardXHR() {
-       try {
-               return new window.XMLHttpRequest();
-       } catch( e ) {}
-}
+                       // Queueing
+                       opt.old = opt.complete;
 
-function createActiveXHR() {
-       try {
-               return new window.ActiveXObject( "Microsoft.XMLHTTP" );
-       } catch( e ) {}
-}
+                       opt.complete = function( noUnmark ) {
+                               if ( jQuery.isFunction( opt.old ) ) {
+                                       opt.old.call( this );
+                               }
 
-// Create the request object
-// (This is still attached to ajaxSettings for backward compatibility)
-jQuery.ajaxSettings.xhr = window.ActiveXObject ?
-       /* Microsoft failed to properly
-        * implement the XMLHttpRequest in IE7 (can't request local files),
-        * so we use the ActiveXObject when it is available
-        * Additionally XMLHttpRequest can be disabled in IE7/IE8 so
-        * we need a fallback.
-        */
-       function() {
-               return !this.isLocal && createStandardXHR() || createActiveXHR();
-       } :
-       // For all other browsers, use the standard XMLHttpRequest object
-       createStandardXHR;
+                               if ( opt.queue ) {
+                                       jQuery.dequeue( this, opt.queue );
+                               } else if ( noUnmark !== false ) {
+                                       jQuery._unmark( this );
+                               }
+                       };
+
+                       return opt;
+               },
 
-// Determine support properties
-(function( xhr ) {
-       jQuery.extend( jQuery.support, {
-               ajax: !!xhr,
-               cors: !!xhr && ( "withCredentials" in xhr )
-       });
-})( jQuery.ajaxSettings.xhr() );
+               easing: {
+                       linear: function( p ) {
+                               return p;
+                       },
+                       swing: function( p ) {
+                               return ( -Math.cos( p*Math.PI ) / 2 ) + 0.5;
+                       }
+               },
 
-// Create transport if the browser can provide an xhr
-if ( jQuery.support.ajax ) {
+               timers: [],
 
-       jQuery.ajaxTransport(function( s ) {
-               // Cross domain only allowed if supported through XMLHttpRequest
-               if ( !s.crossDomain || jQuery.support.cors ) {
+               fx: function( elem, options, prop ) {
+                       this.options = options;
+                       this.elem = elem;
+                       this.prop = prop;
 
-                       var callback;
+                       options.orig = options.orig || {};
+               }
 
-                       return {
-                               send: function( headers, complete ) {
+       });
 
-                                       // Get a new xhr
-                                       var handle, i,
-                                               xhr = s.xhr();
+       jQuery.fx.prototype = {
+               // Simple function for setting a style value
+               update: function() {
+                       if ( this.options.step ) {
+                               this.options.step.call( this.elem, this.now, this );
+                       }
 
-                                       // Open the socket
-                                       // Passing null username, generates a login popup on Opera (#2865)
-                                       if ( s.username ) {
-                                               xhr.open( s.type, s.url, s.async, s.username, s.password );
-                                       } else {
-                                               xhr.open( s.type, s.url, s.async );
-                                       }
+                       ( jQuery.fx.step[ this.prop ] || jQuery.fx.step._default )( this );
+               },
 
-                                       // Apply custom fields if provided
-                                       if ( s.xhrFields ) {
-                                               for ( i in s.xhrFields ) {
-                                                       xhr[ i ] = s.xhrFields[ i ];
-                                               }
-                                       }
+               // Get the current size
+               cur: function() {
+                       if ( this.elem[ this.prop ] != null && (!this.elem.style || this.elem.style[ this.prop ] == null) ) {
+                               return this.elem[ this.prop ];
+                       }
 
-                                       // Override mime type if needed
-                                       if ( s.mimeType && xhr.overrideMimeType ) {
-                                               xhr.overrideMimeType( s.mimeType );
-                                       }
+                       var parsed,
+                               r = jQuery.css( this.elem, this.prop );
+                       // Empty strings, null, undefined and "auto" are converted to 0,
+                       // complex values such as "rotate(1rad)" are returned as is,
+                       // simple values such as "10px" are parsed to Float.
+                       return isNaN( parsed = parseFloat( r ) ) ? !r || r === "auto" ? 0 : r : parsed;
+               },
 
-                                       // X-Requested-With header
-                                       // For cross-domain requests, seeing as conditions for a preflight are
-                                       // akin to a jigsaw puzzle, we simply never set it to be sure.
-                                       // (it can always be set on a per-request basis or even using ajaxSetup)
-                                       // For same-domain requests, won't change header if already provided.
-                                       if ( !s.crossDomain && !headers["X-Requested-With"] ) {
-                                               headers[ "X-Requested-With" ] = "XMLHttpRequest";
+               // Start an animation from one number to another
+               custom: function( from, to, unit ) {
+                       var self = this,
+                               fx = jQuery.fx;
+
+                       this.startTime = fxNow || createFxNow();
+                       this.end = to;
+                       this.now = this.start = from;
+                       this.pos = this.state = 0;
+                       this.unit = unit || this.unit || ( jQuery.cssNumber[ this.prop ] ? "" : "px" );
+
+                       function t( gotoEnd ) {
+                               return self.step( gotoEnd );
+                       }
+
+                       t.queue = this.options.queue;
+                       t.elem = this.elem;
+                       t.saveState = function() {
+                               if ( jQuery._data( self.elem, "fxshow" + self.prop ) === undefined ) {
+                                       if ( self.options.hide ) {
+                                               jQuery._data( self.elem, "fxshow" + self.prop, self.start );
+                                       } else if ( self.options.show ) {
+                                               jQuery._data( self.elem, "fxshow" + self.prop, self.end );
                                        }
+                               }
+                       };
 
-                                       // Need an extra try/catch for cross domain requests in Firefox 3
-                                       try {
-                                               for ( i in headers ) {
-                                                       xhr.setRequestHeader( i, headers[ i ] );
-                                               }
-                                       } catch( _ ) {}
+                       if ( t() && jQuery.timers.push(t) && !timerId ) {
+                               timerId = setInterval( fx.tick, fx.interval );
+                       }
+               },
 
-                                       // Do send the request
-                                       // This may raise an exception which is actually
-                                       // handled in jQuery.ajax (so no try/catch here)
-                                       xhr.send( ( s.hasContent && s.data ) || null );
+               // Simple 'show' function
+               show: function() {
+                       var dataShow = jQuery._data( this.elem, "fxshow" + this.prop );
 
-                                       // Listener
-                                       callback = function( _, isAbort ) {
+                       // Remember where we started, so that we can go back to it later
+                       this.options.orig[ this.prop ] = dataShow || jQuery.style( this.elem, this.prop );
+                       this.options.show = true;
 
-                                               var status,
-                                                       statusText,
-                                                       responseHeaders,
-                                                       responses,
-                                                       xml;
+                       // Begin the animation
+                       // Make sure that we start at a small width/height to avoid any flash of content
+                       if ( dataShow !== undefined ) {
+                               // This show is picking up where a previous hide or show left off
+                               this.custom( this.cur(), dataShow );
+                       } else {
+                               this.custom( this.prop === "width" || this.prop === "height" ? 1 : 0, this.cur() );
+                       }
 
-                                               // Firefox throws exceptions when accessing properties
-                                               // of an xhr when a network error occurred
-                                               // http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)
-                                               try {
+                       // Start by showing the element
+                       jQuery( this.elem ).show();
+               },
 
-                                                       // Was never called and is aborted or complete
-                                                       if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
+               // Simple 'hide' function
+               hide: function() {
+                       // Remember where we started, so that we can go back to it later
+                       this.options.orig[ this.prop ] = jQuery._data( this.elem, "fxshow" + this.prop ) || jQuery.style( this.elem, this.prop );
+                       this.options.hide = true;
 
-                                                               // Only called once
-                                                               callback = undefined;
+                       // Begin the animation
+                       this.custom( this.cur(), 0 );
+               },
 
-                                                               // Do not keep as active anymore
-                                                               if ( handle ) {
-                                                                       xhr.onreadystatechange = jQuery.noop;
-                                                                       if ( xhrOnUnloadAbort ) {
-                                                                               delete xhrCallbacks[ handle ];
-                                                                       }
-                                                               }
+               // Each step of an animation
+               step: function( gotoEnd ) {
+                       var p, n, complete,
+                               t = fxNow || createFxNow(),
+                               done = true,
+                               elem = this.elem,
+                               options = this.options;
 
-                                                               // If it's an abort
-                                                               if ( isAbort ) {
-                                                                       // Abort it manually if needed
-                                                                       if ( xhr.readyState !== 4 ) {
-                                                                               xhr.abort();
-                                                                       }
-                                                               } else {
-                                                                       status = xhr.status;
-                                                                       responseHeaders = xhr.getAllResponseHeaders();
-                                                                       responses = {};
-                                                                       xml = xhr.responseXML;
-
-                                                                       // Construct response list
-                                                                       if ( xml && xml.documentElement /* #4958 */ ) {
-                                                                               responses.xml = xml;
-                                                                       }
+                       if ( gotoEnd || t >= options.duration + this.startTime ) {
+                               this.now = this.end;
+                               this.pos = this.state = 1;
+                               this.update();
 
-                                                                       // When requesting binary data, IE6-9 will throw an exception
-                                                                       // on any attempt to access responseText (#11426)
-                                                                       try {
-                                                                               responses.text = xhr.responseText;
-                                                                       } catch( _ ) {
-                                                                       }
+                               options.animatedProperties[ this.prop ] = true;
 
-                                                                       // Firefox throws an exception when accessing
-                                                                       // statusText for faulty cross-domain requests
-                                                                       try {
-                                                                               statusText = xhr.statusText;
-                                                                       } catch( e ) {
-                                                                               // We normalize with Webkit giving an empty statusText
-                                                                               statusText = "";
-                                                                       }
+                               for ( p in options.animatedProperties ) {
+                                       if ( options.animatedProperties[ p ] !== true ) {
+                                               done = false;
+                                       }
+                               }
 
-                                                                       // Filter status for non standard behaviors
+                               if ( done ) {
+                                       // Reset the overflow
+                                       if ( options.overflow != null && !jQuery.support.shrinkWrapBlocks ) {
 
-                                                                       // If the request is local and we have data: assume a success
-                                                                       // (success with no data won't get notified, that's the best we
-                                                                       // can do given current implementations)
-                                                                       if ( !status && s.isLocal && !s.crossDomain ) {
-                                                                               status = responses.text ? 200 : 404;
-                                                                       // IE - #1450: sometimes returns 1223 when it should be 204
-                                                                       } else if ( status === 1223 ) {
-                                                                               status = 204;
-                                                                       }
-                                                               }
-                                                       }
-                                               } catch( firefoxAccessException ) {
-                                                       if ( !isAbort ) {
-                                                               complete( -1, firefoxAccessException );
-                                                       }
-                                               }
+                                               jQuery.each( [ "", "X", "Y" ], function( index, value ) {
+                                                       elem.style[ "overflow" + value ] = options.overflow[ index ];
+                                               });
+                                       }
 
-                                               // Call complete if needed
-                                               if ( responses ) {
-                                                       complete( status, statusText, responses, responseHeaders );
-                                               }
-                                       };
+                                       // Hide the element if the "hide" operation was done
+                                       if ( options.hide ) {
+                                               jQuery( elem ).hide();
+                                       }
 
-                                       if ( !s.async ) {
-                                               // if we're in sync mode we fire the callback
-                                               callback();
-                                       } else if ( xhr.readyState === 4 ) {
-                                               // (IE6 & IE7) if it's in cache and has been
-                                               // retrieved directly we need to fire the callback
-                                               setTimeout( callback, 0 );
-                                       } else {
-                                               handle = ++xhrId;
-                                               if ( xhrOnUnloadAbort ) {
-                                                       // Create the active xhrs callbacks list if needed
-                                                       // and attach the unload handler
-                                                       if ( !xhrCallbacks ) {
-                                                               xhrCallbacks = {};
-                                                               jQuery( window ).unload( xhrOnUnloadAbort );
-                                                       }
-                                                       // Add to list of active xhrs callbacks
-                                                       xhrCallbacks[ handle ] = callback;
+                                       // Reset the properties, if the item has been hidden or shown
+                                       if ( options.hide || options.show ) {
+                                               for ( p in options.animatedProperties ) {
+                                                       jQuery.style( elem, p, options.orig[ p ] );
+                                                       jQuery.removeData( elem, "fxshow" + p, true );
+                                                       // Toggle data is no longer needed
+                                                       jQuery.removeData( elem, "toggle" + p, true );
                                                }
-                                               xhr.onreadystatechange = callback;
                                        }
-                               },
 
-                               abort: function() {
-                                       if ( callback ) {
-                                               callback(0,1);
+                                       // Execute the complete function
+                                       // in the event that the complete function throws an exception
+                                       // we must ensure it won't be called twice. #5684
+
+                                       complete = options.complete;
+                                       if ( complete ) {
+
+                                               options.complete = false;
+                                               complete.call( elem );
                                        }
                                }
-                       };
-               }
-       });
-}
-var fxNow, timerId,
-       rfxtypes = /^(?:toggle|show|hide)$/,
-       rfxnum = new RegExp( "^(?:([-+])=|)(" + core_pnum + ")([a-z%]*)$", "i" ),
-       rrun = /queueHooks$/,
-       animationPrefilters = [ defaultPrefilter ],
-       tweeners = {
-               "*": [function( prop, value ) {
-                       var end, unit, prevScale,
-                               tween = this.createTween( prop, value ),
-                               parts = rfxnum.exec( value ),
-                               target = tween.cur(),
-                               start = +target || 0,
-                               scale = 1;
-
-                       if ( parts ) {
-                               end = +parts[2];
-                               unit = parts[3] || ( jQuery.cssNumber[ prop ] ? "" : "px" );
-
-                               // We need to compute starting value
-                               if ( unit !== "px" && start ) {
-                                       // Iteratively approximate from a nonzero starting point
-                                       // Prefer the current property, because this process will be trivial if it uses the same units
-                                       // Fallback to end or a simple constant
-                                       start = jQuery.css( tween.elem, prop, true ) || end || 1;
-
-                                       do {
-                                               // If previous iteration zeroed out, double until we get *something*
-                                               // Use a string for doubling factor so we don't accidentally see scale as unchanged below
-                                               prevScale = scale = scale || ".5";
-
-                                               // Adjust and apply
-                                               start = start / scale;
-                                               jQuery.style( tween.elem, prop, start + unit );
-
-                                               // Update scale, tolerating zeroes from tween.cur()
-                                               scale = tween.cur() / target;
-
-                                       // Stop looping if we've hit the mark or scale is unchanged
-                                       } while ( scale !== 1 && scale !== prevScale );
-                               }
-
-                               tween.unit = unit;
-                               tween.start = start;
-                               // If a +=/-= token was provided, we're doing a relative animation
-                               tween.end = parts[1] ? start + ( parts[1] + 1 ) * end : end;
-                       }
-                       return tween;
-               }]
-       };
 
-// Animations created synchronously will run synchronously
-function createFxNow() {
-       setTimeout(function() {
-               fxNow = undefined;
-       }, 0 );
-       return ( fxNow = jQuery.now() );
-}
-
-function createTweens( animation, props ) {
-       jQuery.each( props, function( prop, value ) {
-               var collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ),
-                       index = 0,
-                       length = collection.length;
-               for ( ; index < length; index++ ) {
-                       if ( collection[ index ].call( animation, prop, value ) ) {
-
-                               // we're done with this property
-                               return;
-                       }
-               }
-       });
-}
-
-function Animation( elem, properties, options ) {
-       var result,
-               index = 0,
-               tweenerIndex = 0,
-               length = animationPrefilters.length,
-               deferred = jQuery.Deferred().always( function() {
-                       // don't match elem in the :animated selector
-                       delete tick.elem;
-               }),
-               tick = function() {
-                       var currentTime = fxNow || createFxNow(),
-                               remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
-                               percent = 1 - ( remaining / animation.duration || 0 ),
-                               index = 0,
-                               length = animation.tweens.length;
-
-                       for ( ; index < length ; index++ ) {
-                               animation.tweens[ index ].run( percent );
-                       }
-
-                       deferred.notifyWith( elem, [ animation, percent, remaining ]);
-
-                       if ( percent < 1 && length ) {
-                               return remaining;
-                       } else {
-                               deferred.resolveWith( elem, [ animation ] );
                                return false;
-                       }
-               },
-               animation = deferred.promise({
-                       elem: elem,
-                       props: jQuery.extend( {}, properties ),
-                       opts: jQuery.extend( true, { specialEasing: {} }, options ),
-                       originalProperties: properties,
-                       originalOptions: options,
-                       startTime: fxNow || createFxNow(),
-                       duration: options.duration,
-                       tweens: [],
-                       createTween: function( prop, end, easing ) {
-                               var tween = jQuery.Tween( elem, animation.opts, prop, end,
-                                               animation.opts.specialEasing[ prop ] || animation.opts.easing );
-                               animation.tweens.push( tween );
-                               return tween;
-                       },
-                       stop: function( gotoEnd ) {
-                               var index = 0,
-                                       // if we are going to the end, we want to run all the tweens
-                                       // otherwise we skip this part
-                                       length = gotoEnd ? animation.tweens.length : 0;
-
-                               for ( ; index < length ; index++ ) {
-                                       animation.tweens[ index ].run( 1 );
-                               }
 
-                               // resolve when we played the last frame
-                               // otherwise, reject
-                               if ( gotoEnd ) {
-                                       deferred.resolveWith( elem, [ animation, gotoEnd ] );
+                       } else {
+                               // classical easing cannot be used with an Infinity duration
+                               if ( options.duration == Infinity ) {
+                                       this.now = t;
                                } else {
-                                       deferred.rejectWith( elem, [ animation, gotoEnd ] );
+                                       n = t - this.startTime;
+                                       this.state = n / options.duration;
+
+                                       // Perform the easing function, defaults to swing
+                                       this.pos = jQuery.easing[ options.animatedProperties[this.prop] ]( this.state, n, 0, 1, options.duration );
+                                       this.now = this.start + ( (this.end - this.start) * this.pos );
                                }
-                               return this;
+                               // Perform the next step of the animation
+                               this.update();
                        }
-               }),
-               props = animation.props;
-
-       propFilter( props, animation.opts.specialEasing );
-
-       for ( ; index < length ; index++ ) {
-               result = animationPrefilters[ index ].call( animation, elem, props, animation.opts );
-               if ( result ) {
-                       return result;
-               }
-       }
-
-       createTweens( animation, props );
 
-       if ( jQuery.isFunction( animation.opts.start ) ) {
-               animation.opts.start.call( elem, animation );
-       }
-
-       jQuery.fx.timer(
-               jQuery.extend( tick, {
-                       anim: animation,
-                       queue: animation.opts.queue,
-                       elem: elem
-               })
-       );
-
-       // attach callbacks from options
-       return animation.progress( animation.opts.progress )
-               .done( animation.opts.done, animation.opts.complete )
-               .fail( animation.opts.fail )
-               .always( animation.opts.always );
-}
-
-function propFilter( props, specialEasing ) {
-       var index, name, easing, value, hooks;
-
-       // camelCase, specialEasing and expand cssHook pass
-       for ( index in props ) {
-               name = jQuery.camelCase( index );
-               easing = specialEasing[ name ];
-               value = props[ index ];
-               if ( jQuery.isArray( value ) ) {
-                       easing = value[ 1 ];
-                       value = props[ index ] = value[ 0 ];
-               }
-
-               if ( index !== name ) {
-                       props[ name ] = value;
-                       delete props[ index ];
+                       return true;
                }
+       };
 
-               hooks = jQuery.cssHooks[ name ];
-               if ( hooks && "expand" in hooks ) {
-                       value = hooks.expand( value );
-                       delete props[ name ];
+       jQuery.extend( jQuery.fx, {
+               tick: function() {
+                       var timer,
+                               timers = jQuery.timers,
+                               i = 0;
 
-                       // not quite $.extend, this wont overwrite keys already present.
-                       // also - reusing 'index' from above because we have the correct "name"
-                       for ( index in value ) {
-                               if ( !( index in props ) ) {
-                                       props[ index ] = value[ index ];
-                                       specialEasing[ index ] = easing;
+                       for ( ; i < timers.length; i++ ) {
+                               timer = timers[ i ];
+                               // Checks the timer has not already been removed
+                               if ( !timer() && timers[ i ] === timer ) {
+                                       timers.splice( i--, 1 );
                                }
                        }
-               } else {
-                       specialEasing[ name ] = easing;
-               }
-       }
-}
 
-jQuery.Animation = jQuery.extend( Animation, {
+                       if ( !timers.length ) {
+                               jQuery.fx.stop();
+                       }
+               },
 
-       tweener: function( props, callback ) {
-               if ( jQuery.isFunction( props ) ) {
-                       callback = props;
-                       props = [ "*" ];
-               } else {
-                       props = props.split(" ");
-               }
+               interval: 13,
 
-               var prop,
-                       index = 0,
-                       length = props.length;
+               stop: function() {
+                       clearInterval( timerId );
+                       timerId = null;
+               },
 
-               for ( ; index < length ; index++ ) {
-                       prop = props[ index ];
-                       tweeners[ prop ] = tweeners[ prop ] || [];
-                       tweeners[ prop ].unshift( callback );
-               }
-       },
+               speeds: {
+                       slow: 600,
+                       fast: 200,
+                       // Default speed
+                       _default: 400
+               },
 
-       prefilter: function( callback, prepend ) {
-               if ( prepend ) {
-                       animationPrefilters.unshift( callback );
-               } else {
-                       animationPrefilters.push( callback );
-               }
-       }
-});
-
-function defaultPrefilter( elem, props, opts ) {
-       var index, prop, value, length, dataShow, tween, hooks, oldfire,
-               anim = this,
-               style = elem.style,
-               orig = {},
-               handled = [],
-               hidden = elem.nodeType && isHidden( elem );
-
-       // handle queue: false promises
-       if ( !opts.queue ) {
-               hooks = jQuery._queueHooks( elem, "fx" );
-               if ( hooks.unqueued == null ) {
-                       hooks.unqueued = 0;
-                       oldfire = hooks.empty.fire;
-                       hooks.empty.fire = function() {
-                               if ( !hooks.unqueued ) {
-                                       oldfire();
-                               }
-                       };
-               }
-               hooks.unqueued++;
+               step: {
+                       opacity: function( fx ) {
+                               jQuery.style( fx.elem, "opacity", fx.now );
+                       },
 
-               anim.always(function() {
-                       // doing this makes sure that the complete handler will be called
-                       // before this completes
-                       anim.always(function() {
-                               hooks.unqueued--;
-                               if ( !jQuery.queue( elem, "fx" ).length ) {
-                                       hooks.empty.fire();
+                       _default: function( fx ) {
+                               if ( fx.elem.style && fx.elem.style[ fx.prop ] != null ) {
+                                       fx.elem.style[ fx.prop ] = fx.now + fx.unit;
+                               } else {
+                                       fx.elem[ fx.prop ] = fx.now;
                                }
-                       });
-               });
-       }
-
-       // height/width overflow pass
-       if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) {
-               // Make sure that nothing sneaks out
-               // Record all 3 overflow attributes because IE does not
-               // change the overflow attribute when overflowX and
-               // overflowY are set to the same value
-               opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
-
-               // Set display property to inline-block for height/width
-               // animations on inline elements that are having width/height animated
-               if ( jQuery.css( elem, "display" ) === "inline" &&
-                               jQuery.css( elem, "float" ) === "none" ) {
-
-                       // inline-level elements accept inline-block;
-                       // block-level elements need to be inline with layout
-                       if ( !jQuery.support.inlineBlockNeedsLayout || css_defaultDisplay( elem.nodeName ) === "inline" ) {
-                               style.display = "inline-block";
-
-                       } else {
-                               style.zoom = 1;
                        }
                }
-       }
+       });
 
-       if ( opts.overflow ) {
-               style.overflow = "hidden";
-               if ( !jQuery.support.shrinkWrapBlocks ) {
-                       anim.done(function() {
-                               style.overflow = opts.overflow[ 0 ];
-                               style.overflowX = opts.overflow[ 1 ];
-                               style.overflowY = opts.overflow[ 2 ];
-                       });
+// Ensure props that can't be negative don't go there on undershoot easing
+       jQuery.each( fxAttrs.concat.apply( [], fxAttrs ), function( i, prop ) {
+               // exclude marginTop, marginLeft, marginBottom and marginRight from this list
+               if ( prop.indexOf( "margin" ) ) {
+                       jQuery.fx.step[ prop ] = function( fx ) {
+                               jQuery.style( fx.elem, prop, Math.max(0, fx.now) + fx.unit );
+                       };
                }
+       });
+
+       if ( jQuery.expr && jQuery.expr.filters ) {
+               jQuery.expr.filters.animated = function( elem ) {
+                       return jQuery.grep(jQuery.timers, function( fn ) {
+                               return elem === fn.elem;
+                       }).length;
+               };
        }
 
+// Try to restore the default display value of an element
+       function defaultDisplay( nodeName ) {
 
-       // show/hide pass
-       for ( index in props ) {
-               value = props[ index ];
-               if ( rfxtypes.exec( value ) ) {
-                       delete props[ index ];
-                       if ( value === ( hidden ? "hide" : "show" ) ) {
-                               continue;
-                       }
-                       handled.push( index );
-               }
-       }
+               if ( !elemdisplay[ nodeName ] ) {
 
-       length = handled.length;
-       if ( length ) {
-               dataShow = jQuery._data( elem, "fxshow" ) || jQuery._data( elem, "fxshow", {} );
-               if ( hidden ) {
-                       jQuery( elem ).show();
-               } else {
-                       anim.done(function() {
-                               jQuery( elem ).hide();
-                       });
-               }
-               anim.done(function() {
-                       var prop;
-                       jQuery.removeData( elem, "fxshow", true );
-                       for ( prop in orig ) {
-                               jQuery.style( elem, prop, orig[ prop ] );
-                       }
-               });
-               for ( index = 0 ; index < length ; index++ ) {
-                       prop = handled[ index ];
-                       tween = anim.createTween( prop, hidden ? dataShow[ prop ] : 0 );
-                       orig[ prop ] = dataShow[ prop ] || jQuery.style( elem, prop );
+                       var body = document.body,
+                               elem = jQuery( "<" + nodeName + ">" ).appendTo( body ),
+                               display = elem.css( "display" );
+                       elem.remove();
 
-                       if ( !( prop in dataShow ) ) {
-                               dataShow[ prop ] = tween.start;
-                               if ( hidden ) {
-                                       tween.end = tween.start;
-                                       tween.start = prop === "width" || prop === "height" ? 1 : 0;
+                       // If the simple way fails,
+                       // get element's real default display by attaching it to a temp iframe
+                       if ( display === "none" || display === "" ) {
+                               // No iframe to use yet, so create it
+                               if ( !iframe ) {
+                                       iframe = document.createElement( "iframe" );
+                                       iframe.frameBorder = iframe.width = iframe.height = 0;
                                }
-                       }
-               }
-       }
-}
-
-function Tween( elem, options, prop, end, easing ) {
-       return new Tween.prototype.init( elem, options, prop, end, easing );
-}
-jQuery.Tween = Tween;
-
-Tween.prototype = {
-       constructor: Tween,
-       init: function( elem, options, prop, end, easing, unit ) {
-               this.elem = elem;
-               this.prop = prop;
-               this.easing = easing || "swing";
-               this.options = options;
-               this.start = this.now = this.cur();
-               this.end = end;
-               this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
-       },
-       cur: function() {
-               var hooks = Tween.propHooks[ this.prop ];
-
-               return hooks && hooks.get ?
-                       hooks.get( this ) :
-                       Tween.propHooks._default.get( this );
-       },
-       run: function( percent ) {
-               var eased,
-                       hooks = Tween.propHooks[ this.prop ];
-
-               this.pos = eased = jQuery.easing[ this.easing ]( percent, this.options.duration * percent, 0, 1, this.options.duration );
-               this.now = ( this.end - this.start ) * eased + this.start;
-
-               if ( this.options.step ) {
-                       this.options.step.call( this.elem, this.now, this );
-               }
 
-               if ( hooks && hooks.set ) {
-                       hooks.set( this );
-               } else {
-                       Tween.propHooks._default.set( this );
-               }
-               return this;
-       }
-};
+                               body.appendChild( iframe );
 
-Tween.prototype.init.prototype = Tween.prototype;
+                               // Create a cacheable copy of the iframe document on first call.
+                               // IE and Opera will allow us to reuse the iframeDoc without re-writing the fake HTML
+                               // document to it; WebKit & Firefox won't allow reusing the iframe document.
+                               if ( !iframeDoc || !iframe.createElement ) {
+                                       iframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document;
+                                       iframeDoc.write( ( jQuery.support.boxModel ? "<!doctype html>" : "" ) + "<html><body>" );
+                                       iframeDoc.close();
+                               }
 
-Tween.propHooks = {
-       _default: {
-               get: function( tween ) {
-                       var result;
+                               elem = iframeDoc.createElement( nodeName );
 
-                       if ( tween.elem[ tween.prop ] != null &&
-                               (!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {
-                               return tween.elem[ tween.prop ];
-                       }
+                               iframeDoc.body.appendChild( elem );
 
-                       // passing any value as a 4th parameter to .css will automatically
-                       // attempt a parseFloat and fallback to a string if the parse fails
-                       // so, simple values such as "10px" are parsed to Float.
-                       // complex values such as "rotate(1rad)" are returned as is.
-                       result = jQuery.css( tween.elem, tween.prop, false, "" );
-                       // Empty strings, null, undefined and "auto" are converted to 0.
-                       return !result || result === "auto" ? 0 : result;
-               },
-               set: function( tween ) {
-                       // use step hook for back compat - use cssHook if its there - use .style if its
-                       // available and use plain properties where available
-                       if ( jQuery.fx.step[ tween.prop ] ) {
-                               jQuery.fx.step[ tween.prop ]( tween );
-                       } else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {
-                               jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
-                       } else {
-                               tween.elem[ tween.prop ] = tween.now;
+                               display = jQuery.css( elem, "display" );
+                               body.removeChild( iframe );
                        }
+
+                       // Store the correct default display
+                       elemdisplay[ nodeName ] = display;
                }
+
+               return elemdisplay[ nodeName ];
        }
-};
 
-// Remove in 2.0 - this supports IE8's panic based approach
-// to setting things on disconnected nodes
 
-Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
-       set: function( tween ) {
-               if ( tween.elem.nodeType && tween.elem.parentNode ) {
-                       tween.elem[ tween.prop ] = tween.now;
-               }
-       }
-};
-
-jQuery.each([ "toggle", "show", "hide" ], function( i, name ) {
-       var cssFn = jQuery.fn[ name ];
-       jQuery.fn[ name ] = function( speed, easing, callback ) {
-               return speed == null || typeof speed === "boolean" ||
-                       // special check for .toggle( handler, handler, ... )
-                       ( !i && jQuery.isFunction( speed ) && jQuery.isFunction( easing ) ) ?
-                       cssFn.apply( this, arguments ) :
-                       this.animate( genFx( name, true ), speed, easing, callback );
-       };
-});
 
-jQuery.fn.extend({
-       fadeTo: function( speed, to, easing, callback ) {
 
-               // show any hidden elements after setting opacity to 0
-               return this.filter( isHidden ).css( "opacity", 0 ).show()
+       var getOffset,
+               rtable = /^t(?:able|d|h)$/i,
+               rroot = /^(?:body|html)$/i;
+
+       if ( "getBoundingClientRect" in document.documentElement ) {
+               getOffset = function( elem, doc, docElem, box ) {
+                       try {
+                               box = elem.getBoundingClientRect();
+                       } catch(e) {}
 
-                       // animate to the value specified
-                       .end().animate({ opacity: to }, speed, easing, callback );
-       },
-       animate: function( prop, speed, easing, callback ) {
-               var empty = jQuery.isEmptyObject( prop ),
-                       optall = jQuery.speed( speed, easing, callback ),
-                       doAnimation = function() {
-                               // Operate on a copy of prop so per-property easing won't be lost
-                               var anim = Animation( this, jQuery.extend( {}, prop ), optall );
+                       // Make sure we're not dealing with a disconnected DOM node
+                       if ( !box || !jQuery.contains( docElem, elem ) ) {
+                               return box ? { top: box.top, left: box.left } : { top: 0, left: 0 };
+                       }
 
-                               // Empty animations resolve immediately
-                               if ( empty ) {
-                                       anim.stop( true );
-                               }
-                       };
+                       var body = doc.body,
+                               win = getWindow( doc ),
+                               clientTop  = docElem.clientTop  || body.clientTop  || 0,
+                               clientLeft = docElem.clientLeft || body.clientLeft || 0,
+                               scrollTop  = win.pageYOffset || jQuery.support.boxModel && docElem.scrollTop  || body.scrollTop,
+                               scrollLeft = win.pageXOffset || jQuery.support.boxModel && docElem.scrollLeft || body.scrollLeft,
+                               top  = box.top  + scrollTop  - clientTop,
+                               left = box.left + scrollLeft - clientLeft;
 
-               return empty || optall.queue === false ?
-                       this.each( doAnimation ) :
-                       this.queue( optall.queue, doAnimation );
-       },
-       stop: function( type, clearQueue, gotoEnd ) {
-               var stopQueue = function( hooks ) {
-                       var stop = hooks.stop;
-                       delete hooks.stop;
-                       stop( gotoEnd );
+                       return { top: top, left: left };
                };
 
-               if ( typeof type !== "string" ) {
-                       gotoEnd = clearQueue;
-                       clearQueue = type;
-                       type = undefined;
-               }
-               if ( clearQueue && type !== false ) {
-                       this.queue( type || "fx", [] );
-               }
+       } else {
+               getOffset = function( elem, doc, docElem ) {
+                       var computedStyle,
+                               offsetParent = elem.offsetParent,
+                               prevOffsetParent = elem,
+                               body = doc.body,
+                               defaultView = doc.defaultView,
+                               prevComputedStyle = defaultView ? defaultView.getComputedStyle( elem, null ) : elem.currentStyle,
+                               top = elem.offsetTop,
+                               left = elem.offsetLeft;
+
+                       while ( (elem = elem.parentNode) && elem !== body && elem !== docElem ) {
+                               if ( jQuery.support.fixedPosition && prevComputedStyle.position === "fixed" ) {
+                                       break;
+                               }
 
-               return this.each(function() {
-                       var dequeue = true,
-                               index = type != null && type + "queueHooks",
-                               timers = jQuery.timers,
-                               data = jQuery._data( this );
+                               computedStyle = defaultView ? defaultView.getComputedStyle(elem, null) : elem.currentStyle;
+                               top  -= elem.scrollTop;
+                               left -= elem.scrollLeft;
 
-                       if ( index ) {
-                               if ( data[ index ] && data[ index ].stop ) {
-                                       stopQueue( data[ index ] );
-                               }
-                       } else {
-                               for ( index in data ) {
-                                       if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
-                                               stopQueue( data[ index ] );
+                               if ( elem === offsetParent ) {
+                                       top  += elem.offsetTop;
+                                       left += elem.offsetLeft;
+
+                                       if ( jQuery.support.doesNotAddBorder && !(jQuery.support.doesAddBorderForTableAndCells && rtable.test(elem.nodeName)) ) {
+                                               top  += parseFloat( computedStyle.borderTopWidth  ) || 0;
+                                               left += parseFloat( computedStyle.borderLeftWidth ) || 0;
                                        }
+
+                                       prevOffsetParent = offsetParent;
+                                       offsetParent = elem.offsetParent;
                                }
-                       }
 
-                       for ( index = timers.length; index--; ) {
-                               if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {
-                                       timers[ index ].anim.stop( gotoEnd );
-                                       dequeue = false;
-                                       timers.splice( index, 1 );
+                               if ( jQuery.support.subtractsBorderForOverflowNotVisible && computedStyle.overflow !== "visible" ) {
+                                       top  += parseFloat( computedStyle.borderTopWidth  ) || 0;
+                                       left += parseFloat( computedStyle.borderLeftWidth ) || 0;
                                }
-                       }
 
-                       // start the next in the queue if the last step wasn't forced
-                       // timers currently will call their complete callbacks, which will dequeue
-                       // but only if they were gotoEnd
-                       if ( dequeue || !gotoEnd ) {
-                               jQuery.dequeue( this, type );
+                               prevComputedStyle = computedStyle;
                        }
-               });
-       }
-});
-
-// Generate parameters to create a standard animation
-function genFx( type, includeWidth ) {
-       var which,
-               attrs = { height: type },
-               i = 0;
-
-       // if we include width, step value is 1 to do all cssExpand values,
-       // if we don't include width, step value is 2 to skip over Left and Right
-       for( ; i < 4 ; i += 2 - includeWidth ) {
-               which = cssExpand[ i ];
-               attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
-       }
-
-       if ( includeWidth ) {
-               attrs.opacity = attrs.width = type;
-       }
 
-       return attrs;
-}
-
-// Generate shortcuts for custom animations
-jQuery.each({
-       slideDown: genFx("show"),
-       slideUp: genFx("hide"),
-       slideToggle: genFx("toggle"),
-       fadeIn: { opacity: "show" },
-       fadeOut: { opacity: "hide" },
-       fadeToggle: { opacity: "toggle" }
-}, function( name, props ) {
-       jQuery.fn[ name ] = function( speed, easing, callback ) {
-               return this.animate( props, speed, easing, callback );
-       };
-});
-
-jQuery.speed = function( speed, easing, fn ) {
-       var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
-               complete: fn || !fn && easing ||
-                       jQuery.isFunction( speed ) && speed,
-               duration: speed,
-               easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
-       };
+                       if ( prevComputedStyle.position === "relative" || prevComputedStyle.position === "static" ) {
+                               top  += body.offsetTop;
+                               left += body.offsetLeft;
+                       }
 
-       opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
-               opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
+                       if ( jQuery.support.fixedPosition && prevComputedStyle.position === "fixed" ) {
+                               top  += Math.max( docElem.scrollTop, body.scrollTop );
+                               left += Math.max( docElem.scrollLeft, body.scrollLeft );
+                       }
 
-       // normalize opt.queue - true/undefined/null -> "fx"
-       if ( opt.queue == null || opt.queue === true ) {
-               opt.queue = "fx";
+                       return { top: top, left: left };
+               };
        }
 
-       // Queueing
-       opt.old = opt.complete;
-
-       opt.complete = function() {
-               if ( jQuery.isFunction( opt.old ) ) {
-                       opt.old.call( this );
-               }
-
-               if ( opt.queue ) {
-                       jQuery.dequeue( this, opt.queue );
+       jQuery.fn.offset = function( options ) {
+               if ( arguments.length ) {
+                       return options === undefined ?
+                               this :
+                               this.each(function( i ) {
+                                       jQuery.offset.setOffset( this, options, i );
+                               });
                }
-       };
 
-       return opt;
-};
+               var elem = this[0],
+                       doc = elem && elem.ownerDocument;
 
-jQuery.easing = {
-       linear: function( p ) {
-               return p;
-       },
-       swing: function( p ) {
-               return 0.5 - Math.cos( p*Math.PI ) / 2;
-       }
-};
-
-jQuery.timers = [];
-jQuery.fx = Tween.prototype.init;
-jQuery.fx.tick = function() {
-       var timer,
-               timers = jQuery.timers,
-               i = 0;
-
-       for ( ; i < timers.length; i++ ) {
-               timer = timers[ i ];
-               // Checks the timer has not already been removed
-               if ( !timer() && timers[ i ] === timer ) {
-                       timers.splice( i--, 1 );
+               if ( !doc ) {
+                       return null;
                }
-       }
 
-       if ( !timers.length ) {
-               jQuery.fx.stop();
-       }
-};
+               if ( elem === doc.body ) {
+                       return jQuery.offset.bodyOffset( elem );
+               }
 
-jQuery.fx.timer = function( timer ) {
-       if ( timer() && jQuery.timers.push( timer ) && !timerId ) {
-               timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );
-       }
-};
-
-jQuery.fx.interval = 13;
-
-jQuery.fx.stop = function() {
-       clearInterval( timerId );
-       timerId = null;
-};
-
-jQuery.fx.speeds = {
-       slow: 600,
-       fast: 200,
-       // Default speed
-       _default: 400
-};
-
-// Back Compat <1.8 extension point
-jQuery.fx.step = {};
-
-if ( jQuery.expr && jQuery.expr.filters ) {
-       jQuery.expr.filters.animated = function( elem ) {
-               return jQuery.grep(jQuery.timers, function( fn ) {
-                       return elem === fn.elem;
-               }).length;
+               return getOffset( elem, doc, doc.documentElement );
        };
-}
-var rroot = /^(?:body|html)$/i;
-
-jQuery.fn.offset = function( options ) {
-       if ( arguments.length ) {
-               return options === undefined ?
-                       this :
-                       this.each(function( i ) {
-                               jQuery.offset.setOffset( this, options, i );
-                       });
-       }
 
-       var box, docElem, body, win, clientTop, clientLeft, scrollTop, scrollLeft, top, left,
-               elem = this[ 0 ],
-               doc = elem && elem.ownerDocument;
+       jQuery.offset = {
 
-       if ( !doc ) {
-               return;
-       }
+               bodyOffset: function( body ) {
+                       var top = body.offsetTop,
+                               left = body.offsetLeft;
 
-       if ( (body = doc.body) === elem ) {
-               return jQuery.offset.bodyOffset( elem );
-       }
+                       if ( jQuery.support.doesNotIncludeMarginInBodyOffset ) {
+                               top  += parseFloat( jQuery.css(body, "marginTop") ) || 0;
+                               left += parseFloat( jQuery.css(body, "marginLeft") ) || 0;
+                       }
+
+                       return { top: top, left: left };
+               },
 
-       docElem = doc.documentElement;
+               setOffset: function( elem, options, i ) {
+                       var position = jQuery.css( elem, "position" );
 
-       // Make sure we're not dealing with a disconnected DOM node
-       if ( !jQuery.contains( docElem, elem ) ) {
-               return { top: 0, left: 0 };
-       }
+                       // set position first, in-case top/left are set even on static elem
+                       if ( position === "static" ) {
+                               elem.style.position = "relative";
+                       }
 
-       box = elem.getBoundingClientRect();
-       win = getWindow( doc );
-       clientTop  = docElem.clientTop  || body.clientTop  || 0;
-       clientLeft = docElem.clientLeft || body.clientLeft || 0;
-       scrollTop  = win.pageYOffset || docElem.scrollTop;
-       scrollLeft = win.pageXOffset || docElem.scrollLeft;
-       top  = box.top  + scrollTop  - clientTop;
-       left = box.left + scrollLeft - clientLeft;
+                       var curElem = jQuery( elem ),
+                               curOffset = curElem.offset(),
+                               curCSSTop = jQuery.css( elem, "top" ),
+                               curCSSLeft = jQuery.css( elem, "left" ),
+                               calculatePosition = ( position === "absolute" || position === "fixed" ) && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1,
+                               props = {}, curPosition = {}, curTop, curLeft;
 
-       return { top: top, left: left };
-};
+                       // need to be able to calculate position if either top or left is auto and position is either absolute or fixed
+                       if ( calculatePosition ) {
+                               curPosition = curElem.position();
+                               curTop = curPosition.top;
+                               curLeft = curPosition.left;
+                       } else {
+                               curTop = parseFloat( curCSSTop ) || 0;
+                               curLeft = parseFloat( curCSSLeft ) || 0;
+                       }
 
-jQuery.offset = {
+                       if ( jQuery.isFunction( options ) ) {
+                               options = options.call( elem, i, curOffset );
+                       }
 
-       bodyOffset: function( body ) {
-               var top = body.offsetTop,
-                       left = body.offsetLeft;
+                       if ( options.top != null ) {
+                               props.top = ( options.top - curOffset.top ) + curTop;
+                       }
+                       if ( options.left != null ) {
+                               props.left = ( options.left - curOffset.left ) + curLeft;
+                       }
 
-               if ( jQuery.support.doesNotIncludeMarginInBodyOffset ) {
-                       top  += parseFloat( jQuery.css(body, "marginTop") ) || 0;
-                       left += parseFloat( jQuery.css(body, "marginLeft") ) || 0;
+                       if ( "using" in options ) {
+                               options.using.call( elem, props );
+                       } else {
+                               curElem.css( props );
+                       }
                }
+       };
 
-               return { top: top, left: left };
-       },
 
-       setOffset: function( elem, options, i ) {
-               var position = jQuery.css( elem, "position" );
+       jQuery.fn.extend({
 
-               // set position first, in-case top/left are set even on static elem
-               if ( position === "static" ) {
-                       elem.style.position = "relative";
-               }
+               position: function() {
+                       if ( !this[0] ) {
+                               return null;
+                       }
 
-               var curElem = jQuery( elem ),
-                       curOffset = curElem.offset(),
-                       curCSSTop = jQuery.css( elem, "top" ),
-                       curCSSLeft = jQuery.css( elem, "left" ),
-                       calculatePosition = ( position === "absolute" || position === "fixed" ) && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1,
-                       props = {}, curPosition = {}, curTop, curLeft;
-
-               // need to be able to calculate position if either top or left is auto and position is either absolute or fixed
-               if ( calculatePosition ) {
-                       curPosition = curElem.position();
-                       curTop = curPosition.top;
-                       curLeft = curPosition.left;
-               } else {
-                       curTop = parseFloat( curCSSTop ) || 0;
-                       curLeft = parseFloat( curCSSLeft ) || 0;
-               }
+                       var elem = this[0],
 
-               if ( jQuery.isFunction( options ) ) {
-                       options = options.call( elem, i, curOffset );
-               }
+                       // Get *real* offsetParent
+                               offsetParent = this.offsetParent(),
 
-               if ( options.top != null ) {
-                       props.top = ( options.top - curOffset.top ) + curTop;
-               }
-               if ( options.left != null ) {
-                       props.left = ( options.left - curOffset.left ) + curLeft;
-               }
+                       // Get correct offsets
+                               offset       = this.offset(),
+                               parentOffset = rroot.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset();
 
-               if ( "using" in options ) {
-                       options.using.call( elem, props );
-               } else {
-                       curElem.css( props );
-               }
-       }
-};
+                       // Subtract element margins
+                       // note: when an element has margin: auto the offsetLeft and marginLeft
+                       // are the same in Safari causing offset.left to incorrectly be 0
+                       offset.top  -= parseFloat( jQuery.css(elem, "marginTop") ) || 0;
+                       offset.left -= parseFloat( jQuery.css(elem, "marginLeft") ) || 0;
 
+                       // Add offsetParent borders
+                       parentOffset.top  += parseFloat( jQuery.css(offsetParent[0], "borderTopWidth") ) || 0;
+                       parentOffset.left += parseFloat( jQuery.css(offsetParent[0], "borderLeftWidth") ) || 0;
 
-jQuery.fn.extend({
+                       // Subtract the two offsets
+                       return {
+                               top:  offset.top  - parentOffset.top,
+                               left: offset.left - parentOffset.left
+                       };
+               },
 
-       position: function() {
-               if ( !this[0] ) {
-                       return;
+               offsetParent: function() {
+                       return this.map(function() {
+                               var offsetParent = this.offsetParent || document.body;
+                               while ( offsetParent && (!rroot.test(offsetParent.nodeName) && jQuery.css(offsetParent, "position") === "static") ) {
+                                       offsetParent = offsetParent.offsetParent;
+                               }
+                               return offsetParent;
+                       });
                }
+       });
 
-               var elem = this[0],
-
-               // Get *real* offsetParent
-               offsetParent = this.offsetParent(),
-
-               // Get correct offsets
-               offset       = this.offset(),
-               parentOffset = rroot.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset();
 
-               // Subtract element margins
-               // note: when an element has margin: auto the offsetLeft and marginLeft
-               // are the same in Safari causing offset.left to incorrectly be 0
-               offset.top  -= parseFloat( jQuery.css(elem, "marginTop") ) || 0;
-               offset.left -= parseFloat( jQuery.css(elem, "marginLeft") ) || 0;
+// Create scrollLeft and scrollTop methods
+       jQuery.each( {scrollLeft: "pageXOffset", scrollTop: "pageYOffset"}, function( method, prop ) {
+               var top = /Y/.test( prop );
+
+               jQuery.fn[ method ] = function( val ) {
+                       return jQuery.access( this, function( elem, method, val ) {
+                               var win = getWindow( elem );
+
+                               if ( val === undefined ) {
+                                       return win ? (prop in win) ? win[ prop ] :
+                                               jQuery.support.boxModel && win.document.documentElement[ method ] ||
+                                                       win.document.body[ method ] :
+                                               elem[ method ];
+                               }
 
-               // Add offsetParent borders
-               parentOffset.top  += parseFloat( jQuery.css(offsetParent[0], "borderTopWidth") ) || 0;
-               parentOffset.left += parseFloat( jQuery.css(offsetParent[0], "borderLeftWidth") ) || 0;
+                               if ( win ) {
+                                       win.scrollTo(
+                                               !top ? val : jQuery( win ).scrollLeft(),
+                                               top ? val : jQuery( win ).scrollTop()
+                                       );
 
-               // Subtract the two offsets
-               return {
-                       top:  offset.top  - parentOffset.top,
-                       left: offset.left - parentOffset.left
+                               } else {
+                                       elem[ method ] = val;
+                               }
+                       }, method, val, arguments.length, null );
                };
-       },
+       });
 
-       offsetParent: function() {
-               return this.map(function() {
-                       var offsetParent = this.offsetParent || document.body;
-                       while ( offsetParent && (!rroot.test(offsetParent.nodeName) && jQuery.css(offsetParent, "position") === "static") ) {
-                               offsetParent = offsetParent.offsetParent;
-                       }
-                       return offsetParent || document.body;
-               });
+       function getWindow( elem ) {
+               return jQuery.isWindow( elem ) ?
+                       elem :
+                       elem.nodeType === 9 ?
+                               elem.defaultView || elem.parentWindow :
+                               false;
        }
-});
 
 
-// Create scrollLeft and scrollTop methods
-jQuery.each( {scrollLeft: "pageXOffset", scrollTop: "pageYOffset"}, function( method, prop ) {
-       var top = /Y/.test( prop );
 
-       jQuery.fn[ method ] = function( val ) {
-               return jQuery.access( this, function( elem, method, val ) {
-                       var win = getWindow( elem );
 
-                       if ( val === undefined ) {
-                               return win ? (prop in win) ? win[ prop ] :
-                                       win.document.documentElement[ method ] :
-                                       elem[ method ];
-                       }
+// Create width, height, innerHeight, innerWidth, outerHeight and outerWidth methods
+       jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
+               var clientProp = "client" + name,
+                       scrollProp = "scroll" + name,
+                       offsetProp = "offset" + name;
 
-                       if ( win ) {
-                               win.scrollTo(
-                                       !top ? val : jQuery( win ).scrollLeft(),
-                                        top ? val : jQuery( win ).scrollTop()
-                               );
+               // innerHeight and innerWidth
+               jQuery.fn[ "inner" + name ] = function() {
+                       var elem = this[0];
+                       return elem ?
+                               elem.style ?
+                                       parseFloat( jQuery.css( elem, type, "padding" ) ) :
+                                       this[ type ]() :
+                               null;
+               };
 
-                       } else {
-                               elem[ method ] = val;
-                       }
-               }, method, val, arguments.length, null );
-       };
-});
-
-function getWindow( elem ) {
-       return jQuery.isWindow( elem ) ?
-               elem :
-               elem.nodeType === 9 ?
-                       elem.defaultView || elem.parentWindow :
-                       false;
-}
-// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
-jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
-       jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) {
-               // margin is only for outerHeight, outerWidth
-               jQuery.fn[ funcName ] = function( margin, value ) {
-                       var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
-                               extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
+               // outerHeight and outerWidth
+               jQuery.fn[ "outer" + name ] = function( margin ) {
+                       var elem = this[0];
+                       return elem ?
+                               elem.style ?
+                                       parseFloat( jQuery.css( elem, type, margin ? "margin" : "border" ) ) :
+                                       this[ type ]() :
+                               null;
+               };
 
+               jQuery.fn[ type ] = function( value ) {
                        return jQuery.access( this, function( elem, type, value ) {
-                               var doc;
+                               var doc, docElemProp, orig, ret;
 
                                if ( jQuery.isWindow( elem ) ) {
-                                       // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there
-                                       // isn't a whole lot we can do. See pull request at this URL for discussion:
-                                       // https://github.com/jquery/jquery/pull/764
-                                       return elem.document.documentElement[ "client" + name ];
+                                       // 3rd condition allows Nokia support, as it supports the docElem prop but not CSS1Compat
+                                       doc = elem.document;
+                                       docElemProp = doc.documentElement[ clientProp ];
+                                       return jQuery.support.boxModel && docElemProp ||
+                                               doc.body && doc.body[ clientProp ] || docElemProp;
                                }
 
                                // Get document width or height
                                if ( elem.nodeType === 9 ) {
+                                       // Either scroll[Width/Height] or offset[Width/Height], whichever is greater
                                        doc = elem.documentElement;
 
-                                       // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest
-                                       // unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it.
+                                       // when a window > document, IE6 reports a offset[Width/Height] > client[Width/Height]
+                                       // so we can't use max, as it'll choose the incorrect offset[Width/Height]
+                                       // instead we use the correct client[Width/Height]
+                                       // support:IE6
+                                       if ( doc[ clientProp ] >= doc[ scrollProp ] ) {
+                                               return doc[ clientProp ];
+                                       }
+
                                        return Math.max(
-                                               elem.body[ "scroll" + name ], doc[ "scroll" + name ],
-                                               elem.body[ "offset" + name ], doc[ "offset" + name ],
-                                               doc[ "client" + name ]
+                                               elem.body[ scrollProp ], doc[ scrollProp ],
+                                               elem.body[ offsetProp ], doc[ offsetProp ]
                                        );
                                }
 
-                               return value === undefined ?
-                                       // Get width or height on the element, requesting but not forcing parseFloat
-                                       jQuery.css( elem, type, value, extra ) :
+                               // Get width or height on the element
+                               if ( value === undefined ) {
+                                       orig = jQuery.css( elem, type );
+                                       ret = parseFloat( orig );
+                                       return jQuery.isNumeric( ret ) ? ret : orig;
+                               }
 
-                                       // Set width or height on the element
-                                       jQuery.style( elem, type, value, extra );
-                       }, type, chainable ? margin : undefined, chainable );
+                               // Set the width or height on the element
+                               jQuery( elem ).css( type, value );
+                       }, type, value, arguments.length, null );
                };
        });
-});
+
+
+
+
 // Expose jQuery to the global object
-window.jQuery = window.$ = jQuery;
+       window.jQuery = window.$ = jQuery;
 
 // Expose jQuery as an AMD module, but only for AMD loaders that
 // understand the issues with loading multiple versions of jQuery
@@ -9220,8 +9395,10 @@ window.jQuery = window.$ = jQuery;
 // file names, and jQuery is normally delivered in a lowercase file name.
 // Do this after creating the global so that if an AMD module wants to call
 // noConflict to hide this version of jQuery, it will work.
-if ( typeof define === "function" && define.amd && define.amd.jQuery ) {
-       define( "jquery", [], function () { return jQuery; } );
-}
+       if ( typeof define === "function" && define.amd && define.amd.jQuery ) {
+               define( "jquery", [], function () { return jQuery; } );
+       }
+
+
 
 })( window );
diff --git a/resources/jquery/jquery.messageBox.css b/resources/jquery/jquery.messageBox.css
deleted file mode 100644 (file)
index 96332aa..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-.js-messagebox {
-       margin: 1em 5%;
-       padding: 0.5em 2.5%;
-       border: 1px solid #ccc;
-       background-color: #fcfcfc;
-       font-size: 0.8em;
-}
-.js-messagebox .js-messagebox-group {
-       margin: 1px;
-       padding: 0.5em 2.5%;
-       border-bottom: 1px solid #ddd;
-}
-.js-messagebox .js-messagebox-group:last-child {
-       border-bottom: thin none transparent;
-}
\ No newline at end of file
diff --git a/resources/jquery/jquery.messageBox.js b/resources/jquery/jquery.messageBox.js
deleted file mode 100644 (file)
index c088bc4..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-/**
- * jQuery messageBox
- *
- * Function to inform the user of something. Use sparingly (since there's mw.log for
- * messages aimed at developers / debuggers). Based on the function in MediaWiki's
- * legacy javascript (wikibits.js) by Aryeh Gregor called jsMsg() added in r23233.
- *
- * @author Krinkle <krinklemail@gmail.com>
- *
- * Dual license:
- * @license CC-BY 3.0 <http://creativecommons.org/licenses/by/3.0>
- * @license GPL2 <http://www.gnu.org/licenses/old-licenses/gpl-2.0.html>
- */
-( function ( $ ) {
-
-/** @return jQuery object of the message box */
-$.messageBoxNew = function ( options ) {
-       options = $.extend( {
-               // unique identifier for this message box
-               id: 'js-messagebox',
-
-               // jQuery/CSS selector
-               parent: 'body',
-
-               // 'prepend' or 'append'
-               insert: 'prepend'
-       }, options );
-       var $curBox = $( '#' + options.id );
-       // Only create a new box if it doesn't exist already
-       if ( $curBox.length > 0 ) {
-               if ( $curBox.hasClass( 'js-messagebox' ) ) {
-                       return $curBox;
-               } else {
-                       return $curBox.addClass( 'js-messagebox' );
-               }
-       } else {
-               var $newBox = $( '<div>', {
-                       'id': options.id,
-                       'class': 'js-messagebox',
-                       'css': {
-                               'display': 'none'
-                       }
-               });
-               if ( $( options.parent ).length < 1 ) {
-                       options.parent = 'body';
-               }
-               if ( options.insert === 'append' ) {
-                       $newBox.appendTo( options.parent );
-                       return $newBox;
-               } else {
-                       $newBox.prependTo( options.parent );
-                       return $newBox;
-               }
-       }
-};
-
-/**
- * Calling with no message or message set to empty string or null will hide the group,
- * setting 'replace' to true as well will reset and hide the group entirely.
- * If there are no visible groups the main message box is hidden automatically,
- * and shown again once there are messages
- * @return {jQuery}: jQuery object of message group.
- */
-$.messageBox = function ( options ) {
-       options = $.extend( {
-               message: '',
-               group: 'default',
-               // if replace=true, it replaces any previous message in this group
-               replace: false,
-               target: 'js-messagebox'
-       }, options );
-       var $target = $.messageBoxNew( { id: options.target } );
-       var groupID = options.target + '-' + options.group;
-       var $group = $( '#' + groupID );
-       // Create group container if not existant
-       if ( $group.length < 1 ) {
-               $group = $( '<div>', {
-                       'id': groupID,
-                       'class': 'js-messagebox-group'
-               });
-               $target.prepend( $group );
-       }
-       // Replace ?
-       if ( options.replace === true ) {
-               $group.empty();
-       }
-       // Hide it ?
-       if ( options.message === '' || options.message === null ) {
-               $group.hide();
-       } else {
-               // Actual message addition
-               $group.prepend( $( '<p>' ).append( options.message ) ).show();
-               $target.slideDown();
-       }
-       // If the last visible group was just hidden, slide the entire box up
-       // Othere wise slideDown (if already visible nothing will happen)
-       if ( $target.find( '> *:visible' ).length === 0 ) {
-               // to avoid a sudden dissapearance of the last group followed by
-               // a slide up of only the outline, show it for a second
-               $group.show();
-               $target.slideUp();
-               $group.hide();
-       } else {
-               $target.slideDown();
-       }
-       return $group;
-};
-
-}( jQuery ) );
index 3757393..bbffd7b 100644 (file)
@@ -55,6 +55,7 @@
                        return true;
                },
                compareObject: function ( objectA, objectB ) {
+                       var prop, type;
 
                        // Do a simple check if the types match
                        if ( typeof objectA === typeof objectB ) {
                                        if ( objectA === objectB ) {
                                                return true;
                                        } else {
-                                               var prop;
                                                // Iterate over each property
                                                for ( prop in objectA ) {
                                                        // Check if this property is also present in the other object
                                                        if ( prop in objectB ) {
                                                                // Compare the types of the properties
-                                                               var type = typeof objectA[prop];
+                                                               type = typeof objectA[prop];
                                                                if ( type === typeof objectB[prop] ) {
                                                                        // Recursively check objects inside this one
                                                                        switch ( type ) {
index 5ec05f2..aa356c4 100644 (file)
        $.fn.placeholder = function () {
 
                return this.each( function () {
+                       var placeholder, $input;
 
                        // If the HTML5 placeholder attribute is supported, use it
                        if ( this.placeholder && 'placeholder' in document.createElement( this.tagName ) ) {
                                return;
                        }
 
-                       var placeholder = this.getAttribute( 'placeholder' );
-                       var $input = $(this);
+                       placeholder = this.getAttribute( 'placeholder' );
+                       $input = $(this);
 
                        // Show initially, if empty
                        if ( this.value === '' || this.value === placeholder ) {
index d54e66c..1475af2 100644 (file)
@@ -96,7 +96,7 @@
         *  other constructor. Otherwise "missingTests" will include all methods that
         *  were not called from that instance.
         */
-       var CompletenessTest = function ( masterVariable, ignoreFn ) {
+       function CompletenessTest( masterVariable, ignoreFn ) {
 
                // Keep track in these objects. Keyed by strings with the
                // method names (ie. 'my.foo', 'my.bar', etc.) values are boolean true.
                });
 
                return this;
-       };
+       }
 
        /* Static members */
        CompletenessTest.ACTION_INJECT = 500;
index 257b224..55970e0 100644 (file)
@@ -1,11 +1,11 @@
 /**
- * QUnit v1.9.0 - A JavaScript Unit Testing Framework
+ * QUnit v1.10.0 - A JavaScript Unit Testing Framework
  *
- * http://docs.jquery.com/QUnit
+ * http://qunitjs.com
  *
- * Copyright (c) 2012 John Resig, Jörn Zaefferer
- * Dual licensed under the MIT (MIT-LICENSE.txt)
- * or GPL (GPL-LICENSE.txt) licenses.
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
  */
 
 /** Font Family and Sizes */
@@ -20,7 +20,7 @@
 
 /** Resets */
 
-#qunit-tests, #qunit-tests ol, #qunit-header, #qunit-banner, #qunit-userAgent, #qunit-testresult {
+#qunit-tests, #qunit-tests ol, #qunit-header, #qunit-banner, #qunit-userAgent, #qunit-testresult, #qunit-modulefilter {
        margin: 0;
        padding: 0;
 }
@@ -67,6 +67,7 @@
        padding: 0.5em 0 0.5em 2em;
        color: #5E740B;
        background-color: #eee;
+       overflow: hidden;
 }
 
 #qunit-userAgent {
@@ -76,6 +77,9 @@
        text-shadow: rgba(0, 0, 0, 0.5) 2px 2px 1px;
 }
 
+#qunit-modulefilter-container {
+       float: right;
+}
 
 /** Tests: Pass/Fail */
 
index 9efedcb..d4f17b5 100644 (file)
@@ -1,11 +1,11 @@
 /**
- * QUnit v1.9.0 - A JavaScript Unit Testing Framework
+ * QUnit v1.10.0 - A JavaScript Unit Testing Framework
  *
- * http://docs.jquery.com/QUnit
+ * http://qunitjs.com
  *
- * Copyright (c) 2012 John Resig, Jörn Zaefferer
- * Dual licensed under the MIT (MIT-LICENSE.txt)
- * or GPL (GPL-LICENSE.txt) licenses.
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
  */
 
 (function( window ) {
@@ -17,6 +17,8 @@ var QUnit,
        fileName = (sourceFromStacktrace( 0 ) || "" ).replace(/(:\d+)+\)?/, "").replace(/.+\//, ""),
        toString = Object.prototype.toString,
        hasOwn = Object.prototype.hasOwnProperty,
+       // Keep a local reference to Date (GH-283)
+       Date = window.Date,
        defined = {
        setTimeout: typeof window.setTimeout !== "undefined",
        sessionStorage: (function() {
@@ -304,7 +306,8 @@ QUnit = {
        // call on start of module test to prepend name to all tests
        module: function( name, testEnvironment ) {
                config.currentModule = name;
-               config.currentModuleTestEnviroment = testEnvironment;
+               config.currentModuleTestEnvironment = testEnvironment;
+               config.modules[name] = true;
        },
 
        asyncTest: function( testName, expected, callback ) {
@@ -336,7 +339,7 @@ QUnit = {
                        async: async,
                        callback: callback,
                        module: config.currentModule,
-                       moduleTestEnvironment: config.currentModuleTestEnviroment,
+                       moduleTestEnvironment: config.currentModuleTestEnvironment,
                        stack: sourceFromStacktrace( 2 )
                });
 
@@ -349,7 +352,11 @@ QUnit = {
 
        // Specify the number of expected assertions to gurantee that failed test (no assertions are run at all) don't slip through.
        expect: function( asserts ) {
-               config.current.expected = asserts;
+               if (arguments.length === 1) {
+                       config.current.expected = asserts;
+               } else {
+                       return config.current.expected;
+               }
        },
 
        start: function( count ) {
@@ -415,6 +422,8 @@ QUnit.assert = {
 
                var source,
                        details = {
+                               module: config.current.module,
+                               name: config.current.testName,
                                result: result,
                                message: msg
                        };
@@ -600,6 +609,9 @@ config = {
                }
        ],
 
+       // Set of all modules.
+       modules: {},
+
        // logging callback queues
        begin: [],
        done: [],
@@ -710,17 +722,10 @@ extend( QUnit, {
        },
 
        // Resets the test setup. Useful for tests that modify the DOM.
-       // If jQuery is available, uses jQuery's html(), otherwise just innerHTML.
        reset: function() {
-               var fixture;
-
-               if ( window.jQuery ) {
-                       jQuery( "#qunit-fixture" ).html( config.fixture );
-               } else {
-                       fixture = id( "qunit-fixture" );
-                       if ( fixture ) {
-                               fixture.innerHTML = config.fixture;
-                       }
+               var fixture = id( "qunit-fixture" );
+               if ( fixture ) {
+                       fixture.innerHTML = config.fixture;
                }
        },
 
@@ -781,6 +786,8 @@ extend( QUnit, {
 
                var output, source,
                        details = {
+                               module: config.current.module,
+                               name: config.current.testName,
                                result: result,
                                message: message,
                                actual: actual,
@@ -826,6 +833,8 @@ extend( QUnit, {
 
                var output,
                        details = {
+                               module: config.current.module,
+                               name: config.current.testName,
                                result: false,
                                message: message
                        };
@@ -916,7 +925,9 @@ QUnit.load = function() {
        runLoggingCallbacks( "begin", QUnit, {} );
 
        // Initialize the config, saving the execution queue
-       var banner, filter, i, label, len, main, ol, toolbar, userAgent, val, urlConfigCheckboxes,
+       var banner, filter, i, label, len, main, ol, toolbar, userAgent, val, urlConfigCheckboxes, moduleFilter,
+           numModules = 0,
+           moduleFilterHtml = "",
                urlConfigHtml = "",
                oldconfig = extend( {}, config );
 
@@ -940,6 +951,15 @@ QUnit.load = function() {
                urlConfigHtml += "<input id='qunit-urlconfig-" + val.id + "' name='" + val.id + "' type='checkbox'" + ( config[ val.id ] ? " checked='checked'" : "" ) + " title='" + val.tooltip + "'><label for='qunit-urlconfig-" + val.id + "' title='" + val.tooltip + "'>" + val.label + "</label>";
        }
 
+       moduleFilterHtml += "<label for='qunit-modulefilter'>Module: </label><select id='qunit-modulefilter' name='modulefilter'><option value='' " + ( config.module === undefined  ? "selected" : "" ) + ">< All Modules ></option>";
+       for ( i in config.modules ) {
+               if ( config.modules.hasOwnProperty( i ) ) {
+                       numModules += 1;
+                       moduleFilterHtml += "<option value='" + encodeURIComponent(i) + "' " + ( config.module === i ? "selected" : "" ) + ">" + i + "</option>";
+               }
+       }
+       moduleFilterHtml += "</select>";
+
        // `userAgent` initialized at top of scope
        userAgent = id( "qunit-userAgent" );
        if ( userAgent ) {
@@ -1002,6 +1022,19 @@ QUnit.load = function() {
                        window.location = QUnit.url( params );
                });
                toolbar.appendChild( urlConfigCheckboxes );
+
+               if (numModules > 1) {
+                       moduleFilter = document.createElement( 'span' );
+                       moduleFilter.setAttribute( 'id', 'qunit-modulefilter-container' );
+                       moduleFilter.innerHTML = moduleFilterHtml;
+                       addEvent( moduleFilter, "change", function() {
+                               var selectBox = moduleFilter.getElementsByTagName("select")[0],
+                                   selectedModule = decodeURIComponent(selectBox.options[selectBox.selectedIndex].value);
+
+                               window.location = QUnit.url( { module: ( selectedModule === "" ) ? undefined : selectedModule } );
+                       });
+                       toolbar.appendChild(moduleFilter);
+               }
        }
 
        // `main` initialized at top of scope
@@ -1039,9 +1072,9 @@ window.onerror = function ( error, filePath, linerNr ) {
                        }
                        QUnit.pushFailure( error, filePath + ":" + linerNr );
                } else {
-                       QUnit.test( "global failure", function() {
+                       QUnit.test( "global failure", extend( function() {
                                QUnit.pushFailure( error, filePath + ":" + linerNr );
-                       });
+                       }, { validTest: validTest } ) );
                }
                return false;
        }
@@ -1108,6 +1141,11 @@ function done() {
                }
        }
 
+       // scroll back to top to show results
+       if ( window.scrollTo ) {
+               window.scrollTo(0, 0);
+       }
+
        runLoggingCallbacks( "done", QUnit, {
                failed: config.stats.bad,
                passed: passed,
@@ -1123,6 +1161,12 @@ function validTest( test ) {
                module = config.module && config.module.toLowerCase(),
                fullName = (test.module + ": " + test.testName).toLowerCase();
 
+       // Internally-generated tests are always valid
+       if ( test.callback && test.callback.validTest === validTest ) {
+               delete test.callback.validTest;
+               return true;
+       }
+
        if ( config.testNumber ) {
                return test.testNumber === config.testNumber;
        }
@@ -1404,7 +1448,8 @@ QUnit.equiv = (function() {
                                                a.global === b.global &&
                                                // (gmi) ...
                                                a.ignoreCase === b.ignoreCase &&
-                                               a.multiline === b.multiline;
+                                               a.multiline === b.multiline &&
+                                               a.sticky === b.sticky;
                                },
 
                                // - skip when the property is a method of an instance (OOP)
index 21dc3e1..3ef71d5 100644 (file)
                                new RegExp( /^\d{1,3}[\.]\d{1,3}[\.]\d{1,3}[\.]\d{1,3}$/)
                        ],
                        currency: [
-                               new RegExp( /^[£$€?.]/),
-                               new RegExp( /[£$€]/g)
+                               new RegExp( /(^[£$€¥]|[£$€¥]$)/),
+                               new RegExp( /[£$€¥]/g)
                        ],
                        url: [
                                new RegExp( /^(https?|ftp|file):\/\/$/),
index 583c1ed..abb0fa3 100644 (file)
                $.fn.extend({
                        focus: ( function ( jqFocus ) {
                                return function () {
+                                       var $w, state, result;
                                        if ( arguments.length === 0 ) {
-                                               var $w = $( window );
-                                               var state = {top: $w.scrollTop(), left: $w.scrollLeft()};
-                                               var result = jqFocus.apply( this, arguments );
+                                               $w = $( window );
+                                               state = {top: $w.scrollTop(), left: $w.scrollLeft()};
+                                               result = jqFocus.apply( this, arguments );
                                                window.scrollTo( state.top, state.left );
                                                return result;
                                        }
                         * in some browsers (IE/Opera)
                         */
                        getSelection: function () {
-                               var e = this.get( 0 );
-                               var retval = '';
-                               if ( $(e).is( ':hidden' ) ) {
+                               var retval, range,
+                                       el = this.get( 0 );
+
+                               if ( $(el).is( ':hidden' ) ) {
                                        // Do nothing
+                                       retval = '';
                                } else if ( document.selection && document.selection.createRange ) {
-                                       activateElementOnIE( e );
-                                       var range = document.selection.createRange();
+                                       activateElementOnIE( el );
+                                       range = document.selection.createRange();
                                        retval = range.text;
-                               } else if ( e.selectionStart || e.selectionStart === 0 ) {
-                                       retval = e.value.substring( e.selectionStart, e.selectionEnd );
+                               } else if ( el.selectionStart || el.selectionStart === 0 ) {
+                                       retval = el.value.substring( el.selectionStart, el.selectionEnd );
                                }
+
                                return retval;
                        },
                        /**
@@ -88,6 +92,7 @@
                        encapsulateSelection: function ( options ) {
                                return this.each( function () {
                                        var selText, scrollTop, insertText,
+                                               isSample, range, range2, range3, startPos, endPos,
                                                pre = options.pre,
                                                post = options.post;
 
                                         * Wrap each line of the selected text with pre and post
                                         */
                                        function doSplitLines( selText, pre, post ) {
-                                               var insertText = '';
-                                               var selTextArr = selText.split( '\n' );
-                                               for ( var i = 0; i < selTextArr.length; i++ ) {
+                                               var i,
+                                                       insertText = '',
+                                                       selTextArr = selText.split( '\n' );
+                                               for ( i = 0; i < selTextArr.length; i++ ) {
                                                        insertText += pre + selTextArr[i] + post;
                                                        if ( i !== selTextArr.length - 1 ) {
                                                                insertText += '\n';
                                                return insertText;
                                        }
 
-                                       var isSample = false;
+                                       isSample = false;
                                        if ( this.style.display === 'none' ) {
                                                // Do nothing
                                        } else if ( document.selection && document.selection.createRange ) {
 
                                                selText = $(this).textSelection( 'getSelection' );
                                                scrollTop = this.scrollTop;
-                                               var range = document.selection.createRange();
+                                               range = document.selection.createRange();
 
                                                checkSelectedText();
                                                insertText = pre + selText + post;
                                                        insertText = doSplitLines( selText, pre, post );
                                                }
                                                if ( options.ownline && range.moveStart ) {
-                                                       var range2 = document.selection.createRange();
+                                                       range2 = document.selection.createRange();
                                                        range2.collapse();
                                                        range2.moveStart( 'character', -1 );
                                                        // FIXME: Which check is correct?
                                                                insertText = "\n" + insertText;
                                                                pre += "\n";
                                                        }
-                                                       var range3 = document.selection.createRange();
+                                                       range3 = document.selection.createRange();
                                                        range3.collapse( false );
                                                        range3.moveEnd( 'character', 1 );
                                                        if ( range3.text !== "\r" && range3.text !== "\n" && range3.text !== "" ) {
                                                }
 
                                                selText = $(this).textSelection( 'getSelection' );
-                                               var startPos = this.selectionStart;
-                                               var endPos = this.selectionEnd;
+                                               startPos = this.selectionStart;
+                                               endPos = this.selectionEnd;
                                                scrollTop = this.scrollTop;
                                                checkSelectedText();
                                                if ( options.selectionStart !== undefined
                                                // whatever we do later (bug 31847).
                                                activateElementOnIE( e );
 
-                                               // IE Support
-                                               var preFinished = false;
-                                               var periFinished = false;
-                                               var postFinished = false;
-                                               var preText, rawPreText, periText;
-                                               var rawPeriText, postText, rawPostText;
-                                               // Create range containing text in the selection
-                                               var periRange = document.selection.createRange().duplicate();
-                                               // Create range containing text before the selection
-                                               var preRange = rangeForElementIE( e );
+                                               var
+                                                       preText, rawPreText, periText,
+                                                       rawPeriText, postText, rawPostText,
+
+                                                       // IE Support
+                                                       preFinished = false,
+                                                       periFinished = false,
+                                                       postFinished = false,
+                                                       // Range containing text in the selection
+                                                       periRange = document.selection.createRange().duplicate(),
+                                                       // Range containing text before the selection
+                                                       preRange,
+                                                       // Range containing text after the selection
+                                                       postRange;
+
+                                               preRange = rangeForElementIE( e ),
                                                // Move the end where we need it
                                                preRange.setEndPoint( 'EndToStart', periRange );
-                                               // Create range containing text after the selection
-                                               var postRange = rangeForElementIE( e );
+
+                                               postRange = rangeForElementIE( e );
                                                // Move the start where we need it
                                                postRange.setEndPoint( 'StartToEnd', periRange );
+
                                                // Load the text values we need to compare
                                                preText = rawPreText = preRange.text;
                                                periText = rawPeriText = periRange.text;
                                                postText = rawPostText = postRange.text;
+
                                                /*
                                                 * Check each range for trimmed newlines by shrinking the range by 1
                                                 * character and seeing if the text property has changed. If it has
                         */
                        setSelection: function ( options ) {
                                return this.each( function () {
+                                       var selection, length, newLines;
                                        if ( $(this).is( ':hidden' ) ) {
                                                // Do nothing
                                        } else if ( this.selectionStart || this.selectionStart === 0 ) {
                                                        this.selectionEnd = options.end;
                                                }
                                        } else if ( document.body.createTextRange ) {
-                                               var selection = rangeForElementIE( this );
-                                               var length = this.value.length;
+                                               selection = rangeForElementIE( this );
+                                               length = this.value.length;
                                                // IE doesn't count \n when computing the offset, so we won't either
-                                               var newLines = this.value.match( /\n/g );
+                                               newLines = this.value.match( /\n/g );
                                                if ( newLines ) {
                                                        length = length - newLines.length;
                                                }
                                                // Silence that error
                                                try {
                                                        selection.select();
-                                               } catch( e ) { }
+                                               } catch ( e ) { }
                                        }
                                });
                        },
                                        return ( $.client.profile().platform === 'mac' ? 13 : ( $.client.profile().platform === 'linux' ? 15 : 16 ) ) * row;
                                }
                                return this.each(function () {
+                                       var scroll, range, savedRange, pos, oldScrollTop;
                                        if ( $(this).is( ':hidden' ) ) {
                                                // Do nothing
                                        } else if ( this.selectionStart || this.selectionStart === 0 ) {
                                                // Mozilla
-                                               var scroll = getCaretScrollPosition( this );
+                                               scroll = getCaretScrollPosition( this );
                                                if ( options.force || scroll < $(this).scrollTop() ||
                                                                scroll > $(this).scrollTop() + $(this).height() ) {
                                                        $(this).scrollTop( scroll );
                                                 * cover that case, we'll force it to act by moving one
                                                 * character back and forth.
                                                 */
-                                               var range = document.body.createTextRange();
-                                               var savedRange = document.selection.createRange();
-                                               var pos = $(this).textSelection( 'getCaretPosition' );
-                                               var oldScrollTop = this.scrollTop;
+                                               range = document.body.createTextRange();
+                                               savedRange = document.selection.createRange();
+                                               pos = $(this).textSelection( 'getCaretPosition' );
+                                               oldScrollTop = this.scrollTop;
                                                range.moveToElementText( this );
                                                range.collapse();
                                                range.move( 'character', pos + 1);
index c8c18e6..cc6f704 100644 (file)
@@ -1,8 +1,7 @@
 /**
  * Additional mw.Api methods to assist with API calls related to categories.
  */
-
-( function( $, mw, undefined ) {
+( function ( mw, $ ) {
 
        $.extend( mw.Api.prototype, {
                /**
                 * @param err {Function} optional callback to run if api error
                 * @return ajax call object
                 */
-               isCategory: function( title, success, err ) {
-                       var params = {
-                                       prop: 'categoryinfo',
-                                       titles: title.toString()
-                               },
-                               ok = function( data ) {
-                                       var exists = false;
-                                       if ( data.query && data.query.pages ) {
-                                               $.each( data.query.pages, function( id, page ) {
-                                                       if ( page.categoryinfo ) {
-                                                               exists = true;
-                                                       }
-                                               } );
-                                       }
-                                       success( exists );
-                               };
+               isCategory: function ( title, success, err ) {
+                       var params, ok;
+                       params = {
+                               prop: 'categoryinfo',
+                               titles: title.toString()
+                       };
+                       ok = function ( data ) {
+                               var exists = false;
+                               if ( data.query && data.query.pages ) {
+                                       $.each( data.query.pages, function ( id, page ) {
+                                               if ( page.categoryinfo ) {
+                                                       exists = true;
+                                               }
+                                       } );
+                               }
+                               success( exists );
+                       };
 
                        return this.get( params, { ok: ok, err: err } );
                },
                 * @param err {Function} optional callback to run if api error
                 * @return {jqXHR}
                 */
-               getCategoriesByPrefix: function( prefix, success, err ) {
-
-                       // fetch with allpages to only get categories that have a corresponding description page.
-                       var params = {
+               getCategoriesByPrefix: function ( prefix, success, err ) {
+                       // Fetch with allpages to only get categories that have a corresponding description page.
+                       var params, ok;
+                       params = {
                                'list': 'allpages',
                                'apprefix': prefix,
                                'apnamespace': mw.config.get('wgNamespaceIds').category
                        };
-
-                       var ok = function( data ) {
+                       ok = function ( data ) {
                                var texts = [];
                                if ( data.query && data.query.allpages ) {
-                                       $.each( data.query.allpages, function( i, category ) {
+                                       $.each( data.query.allpages, function ( i, category ) {
                                                texts.push( new mw.Title( category.title ).getNameText() );
                                        } );
                                }
@@ -71,7 +70,7 @@
                 * @param async {Boolean} optional asynchronousness (default = true = async)
                 * @return {jqXHR}
                 */
-               getCategories: function( title, success, err, async ) {
+               getCategories: function ( title, success, err, async ) {
                        var params, ok;
                        params = {
                                prop: 'categories',
                        if ( async === undefined ) {
                                async = true;
                        }
-                       ok = function( data ) {
+                       ok = function ( data ) {
                                var ret = false;
                                if ( data.query && data.query.pages ) {
-                                       $.each( data.query.pages, function( id, page ) {
+                                       $.each( data.query.pages, function ( id, page ) {
                                                if ( page.categories ) {
                                                        if ( typeof ret !== 'object' ) {
                                                                ret = [];
                                                        }
-                                                       $.each( page.categories, function( i, cat ) {
+                                                       $.each( page.categories, function ( i, cat ) {
                                                                ret.push( new mw.Title( cat.title ) );
                                                        } );
                                                }
 
        } );
 
-} )( jQuery, mediaWiki );
+}( mediaWiki, jQuery ) );
index 5197396..49af937 100644 (file)
@@ -1,8 +1,7 @@
 /**
  * Additional mw.Api methods to assist with API calls related to editing wiki pages.
  */
-
-( function( $, mw, undefined ) {
+( function ( mw, $ ) {
 
        // Cache token so we don't have to keep fetching new ones for every single request.
        var cachedToken = null;
                 * @param err {Function} [optional] error callback
                 * @return {jqXHR}
                 */
-               postWithEditToken: function( params, ok, err ) {
-                       var api = this, useTokenToPost, getTokenIfBad;
+               postWithEditToken: function ( params, ok, err ) {
+                       var useTokenToPost, getTokenIfBad,
+                               api = this;
                        if ( cachedToken === null ) {
                                // We don't have a valid cached token, so get a fresh one and try posting.
                                // We do not trap any 'badtoken' or 'notoken' errors, because we don't want
                                // an infinite loop. If this fresh token is bad, something else is very wrong.
-                               useTokenToPost = function( token ) {
+                               useTokenToPost = function ( token ) {
                                        params.token = token;
                                        api.post( params, ok, err );
                                };
                                // We do have a token, but it might be expired. So if it is 'bad' then
                                // start over with a new token.
                                params.token = cachedToken;
-                               getTokenIfBad = function( code, result ) {
+                               getTokenIfBad = function ( code, result ) {
                                        if ( code === 'badtoken' ) {
-                                               cachedToken = null; // force a new token
+                                               // force a new token, clear any old one
+                                               cachedToken = null;
                                                api.postWithEditToken( params, ok, err );
                                        } else {
                                                err( code, result );
                 * @param err {Function} error callback
                 * @return {jqXHR}
                 */
-               getEditToken: function( tokenCallback, err ) {
+               getEditToken: function ( tokenCallback, err ) {
                        var parameters = {
                                        action: 'tokens',
                                        type: 'edit'
                                },
-                               ok = function( data ) {
+                               ok = function ( data ) {
                                        var token;
                                        // If token type is not available for this user,
                                        // key 'edittoken' is missing or can contain Boolean false
@@ -96,7 +97,7 @@
                 * @param err {Function} error handler
                 * @return {jqXHR}
                 */
-               newSection: function( title, header, message, ok, err ) {
+               newSection: function ( title, header, message, ok, err ) {
                        var params = {
                                action: 'edit',
                                section: 'new',
 
         } );
 
-} )( jQuery, mediaWiki );
+}( mediaWiki, jQuery ) );
index 080725a..a184e3c 100644 (file)
@@ -1,7 +1,7 @@
 /**
  * mw.Api objects represent the API of a particular MediaWiki server.
  */
-( function( $, mw, undefined ) {
+( function ( mw, $ ) {
 
        /**
         * @var defaultOptions {Object}
@@ -47,7 +47,7 @@
         * @param options {Object} See defaultOptions documentation above. Ajax options can also be
         * overridden for each individual request to jQuery.ajax() later on.
         */
-       mw.Api = function( options ) {
+       mw.Api = function ( options ) {
 
                if ( options === undefined ) {
                        options = {};
@@ -91,7 +91,7 @@
                 * @param {Object|Function} [optional] ajax options
                 * @return {jQuery.Promise}
                 */
-               get: function( parameters, ajaxOptions ) {
+               get: function ( parameters, ajaxOptions ) {
                        ajaxOptions = this.normalizeAjaxOptions( ajaxOptions );
                        ajaxOptions.type = 'GET';
                        return this.ajax( parameters, ajaxOptions );
                 * @param {Object|Function} [optional] ajax options
                 * @return {jQuery.Promise}
                 */
-               post: function( parameters, ajaxOptions ) {
+               post: function ( parameters, ajaxOptions ) {
                        ajaxOptions = this.normalizeAjaxOptions( ajaxOptions );
                        ajaxOptions.type = 'POST';
                        return this.ajax( parameters, ajaxOptions );
                 * - done: API response data as first argument
                 * - fail: errorcode as first arg, details (string or object) as second arg.
                 */
-               ajax: function( parameters, ajaxOptions ) {
+               ajax: function ( parameters, ajaxOptions ) {
                        var token,
                                apiDeferred = $.Deferred();
 
                'exists'
        ];
 
-})( jQuery, mediaWiki );
+}( mediaWiki, jQuery ) );
index e784ef7..e8d1b3e 100644 (file)
@@ -12,7 +12,7 @@
                 * @param err {Function} [optional] deprecated (error callback)
                 * @return {jQuery.Promise}
                 */
-               parse: function( wikiText, ok, err ) {
+               parse: function ( wikiText, ok, err ) {
                        var apiDeferred = $.Deferred();
 
                        // Backwards compatibility (< MW 1.20)
@@ -39,4 +39,4 @@
                }
        } );
 
-} )( mediaWiki, jQuery );
+}( mediaWiki, jQuery ) );
index 5435945..1f7e275 100644 (file)
@@ -2,7 +2,7 @@
  * Additional mw.Api methods to assist with API calls to the API module of the TitleBlacklist extension.
  */
 
-( function( $, mw, undefined ) {
+( function ( mw, $ ) {
 
        $.extend( mw.Api.prototype, {
                /**
                 * @param err {Function} optional callback to run if api error
                 * @return {jqXHR}
                 */
-               isBlacklisted: function( title, success, err ) {
+               isBlacklisted: function ( title, success, err ) {
                        var     params = {
                                        action: 'titleblacklist',
                                        tbaction: 'create',
                                        tbtitle: title.toString()
                                },
-                               ok = function( data ) {
+                               ok = function ( data ) {
                                        var result;
 
                                        // this fails open (if nothing valid is returned by the api, allows the title)
@@ -48,4 +48,5 @@
                }
 
        } );
-} )( jQuery, mediaWiki );
+
+}( mediaWiki, jQuery ) );
index 302a2d3..d323442 100644 (file)
@@ -2,7 +2,7 @@
  * Additional mw.Api methods to assist with (un)watching wiki pages.
  * @since 1.19
  */
-( function( $, mw ) {
+( function ( mw, $ ) {
 
        /**
         * @context {mw.Api}
@@ -53,4 +53,4 @@
 
        } );
 
-} )( jQuery, mediaWiki );
+}( mediaWiki, jQuery ) );
diff --git a/resources/mediawiki.language/languages/ar.js b/resources/mediawiki.language/languages/ar.js
deleted file mode 100644 (file)
index d21df7e..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-/**
- * Arabic (العربية) language functions
- */
-
-mediaWiki.language.convertPlural = function( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural( forms, 6 );
-       if ( count == 0 ) {
-               return forms[0];
-       }
-       if ( count == 1 ) {
-               return forms[1];
-       }
-       if ( count == 2 ) {
-               return forms[2];
-       }
-       if ( count % 100 >= 3 && count % 100 <= 10 ) {
-               return forms[3];
-       }
-       if ( count % 100 >= 11 && count % 100 <= 99 ) {
-               return forms[4];
-       }
-       return forms[5];
-};
-
index e737a7c..d35f77e 100644 (file)
@@ -2,17 +2,6 @@
  * Hebrew (עברית) language functions
  */
 
-mediaWiki.language.convertPlural = function( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural( forms, 3 );
-       if ( count == 1 ) {
-               return forms[0];
-       }
-       if ( count == 2 && forms[2] ) {
-               return forms[2];
-       }
-       return forms[1];
-};
-
 mediaWiki.language.convertGrammar = function( word, form ) {
        var grammarForms = mw.language.getData( 'he', 'grammarForms' );
        if ( grammarForms && grammarForms[form] ) {
diff --git a/resources/mediawiki.language/languages/hi.js b/resources/mediawiki.language/languages/hi.js
deleted file mode 100644 (file)
index a22a0e1..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-/**
- * Hindi (हिन्दी) language functions
- */
-
-mediaWiki.language.convertPlural = function( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural( forms, 2 );
-       return ( count <= 1 ) ? forms[0] : forms[1];
-};
diff --git a/resources/mediawiki.language/mediawiki.cldr.js b/resources/mediawiki.language/mediawiki.cldr.js
new file mode 100644 (file)
index 0000000..6660eca
--- /dev/null
@@ -0,0 +1,28 @@
+/**
+ *  CLDR related utility methods
+ */
+( function( mw ) {
+       "use strict";
+
+       var cldr = {
+               /**
+                * For the number, get the plural for index
+                * In case none of the rules passed, we return pluralRules.length
+                * That means it is the "other" form.
+                * @param number
+                * @param pluralRules
+                * @return plural form index
+                */
+               getPluralForm: function( number, pluralRules ) {
+                       var pluralFormIndex = 0;
+                       for ( pluralFormIndex = 0; pluralFormIndex < pluralRules.length; pluralFormIndex++ ) {
+                               if ( mw.libs.pluralRuleParser( pluralRules[pluralFormIndex], number ) ) {
+                                       break;
+                               }
+                       }
+                       return pluralFormIndex;
+               }
+       };
+
+       mw.cldr = cldr;
+} )( mediaWiki );
index 1234637..935d4ff 100644 (file)
@@ -43,11 +43,19 @@ var language = {
         * @param forms array List of plural forms
         * @return string Correct form for quantifier in this language
         */
-       convertPlural: function ( count, forms ){
+       convertPlural: function( count, forms ) {
+               var pluralFormIndex = 0;
                if ( !forms || forms.length === 0 ) {
                        return '';
                }
-               return ( parseInt( count, 10 ) === 1 ) ? forms[0] : forms[1];
+               var pluralRules = mw.language.getData( mw.config.get( 'wgUserLanguage' ), 'pluralRules' );
+               if ( !pluralRules ) {
+                       // default fallback.
+                       return ( count === 1 ) ? forms[0] : forms[1];
+               }
+               pluralFormIndex = mw.cldr.getPluralForm( count, pluralRules );
+               pluralFormIndex = Math.min( pluralFormIndex, forms.length - 1 );
+               return forms[pluralFormIndex];
        },
 
        /**
diff --git a/resources/mediawiki.libs/CLDRPluralRuleParser.js b/resources/mediawiki.libs/CLDRPluralRuleParser.js
new file mode 100644 (file)
index 0000000..bb1491d
--- /dev/null
@@ -0,0 +1,306 @@
+/* This is cldrpluralparser 1.0, ported to MediaWiki ResourceLoader */
+
+/**
+* cldrpluralparser.js
+* A parser engine for CLDR plural rules.
+*
+* Copyright 2012 GPLV3+, Santhosh Thottingal
+*
+* @version 0.1.0-alpha
+* @source https://github.com/santhoshtr/CLDRPluralRuleParser
+* @author Santhosh Thottingal <santhosh.thottingal@gmail.com>
+* @author Timo Tijhof
+* @author Amir Aharoni
+*/
+
+/**
+ * Evaluates a plural rule in CLDR syntax for a number
+ * @param rule
+ * @param number
+ * @return true|false|null
+ */
+( function( mw ) {
+
+function pluralRuleParser(rule, number) {
+       /*
+       Syntax: see http://unicode.org/reports/tr35/#Language_Plural_Rules
+       -----------------------------------------------------------------
+
+       condition     = and_condition ('or' and_condition)*
+       and_condition = relation ('and' relation)*
+       relation      = is_relation | in_relation | within_relation | 'n' <EOL>
+       is_relation   = expr 'is' ('not')? value
+       in_relation   = expr ('not')? 'in' range_list
+       within_relation = expr ('not')? 'within' range_list
+       expr          = 'n' ('mod' value)?
+       range_list    = (range | value) (',' range_list)*
+       value         = digit+
+       digit         = 0|1|2|3|4|5|6|7|8|9
+       range         = value'..'value
+
+       */
+       // Indicates current position in the rule as we parse through it.
+       // Shared among all parsing functions below.
+       var pos = 0;
+
+       var whitespace = makeRegexParser(/^\s+/);
+       var digits = makeRegexParser(/^\d+/);
+
+       var _n_ = makeStringParser('n');
+       var _is_ = makeStringParser('is');
+       var _mod_ = makeStringParser('mod');
+       var _not_ = makeStringParser('not');
+       var _in_ = makeStringParser('in');
+       var _within_ = makeStringParser('within');
+       var _range_ = makeStringParser('..');
+       var _comma_ = makeStringParser(',');
+       var _or_ = makeStringParser('or');
+       var _and_ = makeStringParser('and');
+
+       function debug() {
+               /* console.log.apply(console, arguments);*/
+       }
+
+       debug('pluralRuleParser', rule, number);
+
+       // Try parsers until one works, if none work return null
+       function choice(parserSyntax) {
+               return function () {
+                       for (var i = 0; i < parserSyntax.length; i++) {
+                               var result = parserSyntax[i]();
+                               if (result !== null) {
+                                       return result;
+                               }
+                       }
+                       return null;
+               };
+       }
+
+       // Try several parserSyntax-es in a row.
+       // All must succeed; otherwise, return null.
+       // This is the only eager one.
+       function sequence(parserSyntax) {
+               var originalPos = pos;
+               var result = [];
+               for (var i = 0; i < parserSyntax.length; i++) {
+                       var res = parserSyntax[i]();
+                       if (res === null) {
+                               pos = originalPos;
+                               return null;
+                       }
+                       result.push(res);
+               }
+               return result;
+       }
+
+       // Run the same parser over and over until it fails.
+       // Must succeed a minimum of n times; otherwise, return null.
+       function nOrMore(n, p) {
+               return function () {
+                       var originalPos = pos;
+                       var result = [];
+                       var parsed = p();
+                       while (parsed !== null) {
+                               result.push(parsed);
+                               parsed = p();
+                       }
+                       if (result.length < n) {
+                               pos = originalPos;
+                               return null;
+                       }
+                       return result;
+               };
+       }
+
+       // Helpers -- just make parserSyntax out of simpler JS builtin types
+
+       function makeStringParser(s) {
+               var len = s.length;
+               return function () {
+                       var result = null;
+                       if (rule.substr(pos, len) === s) {
+                               result = s;
+                               pos += len;
+                       }
+                       return result;
+               };
+       }
+
+       function makeRegexParser(regex) {
+               return function () {
+                       var matches = rule.substr(pos).match(regex);
+                       if (matches === null) {
+                               return null;
+                       }
+                       pos += matches[0].length;
+                       return matches[0];
+               };
+       }
+
+       function n() {
+               var result = _n_();
+               if (result === null) {
+                       debug(" -- failed n");
+                       return result;
+               }
+               result = parseInt(number, 10);
+               debug(" -- passed n ", result);
+               return result;
+       }
+
+       var expression = choice([mod, n]);
+
+       function mod() {
+               var result = sequence([n, whitespace, _mod_, whitespace, digits]);
+               if (result === null) {
+                       debug(" -- failed mod");
+                       return null;
+               }
+               debug(" -- passed mod");
+               return parseInt(result[0], 10) % parseInt(result[4], 10);
+       }
+
+       function not() {
+               var result = sequence([whitespace, _not_]);
+               if (result === null) {
+                       debug(" -- failed not");
+                       return null;
+               } else {
+                       return result[1];
+               }
+       }
+
+       function is() {
+               var result = sequence([expression, whitespace, _is_, nOrMore(0, not), whitespace, digits]);
+               if (result !== null) {
+                       debug(" -- passed is");
+                       if (result[3][0] === 'not') {
+                               return result[0] !== parseInt(result[5], 10);
+                       } else {
+                               return result[0] === parseInt(result[5], 10);
+                       }
+               }
+               debug(" -- failed is");
+               return null;
+       }
+
+       function rangeList() {
+               // range_list    = (range | value) (',' range_list)*
+               var result = sequence([choice([range, digits]), nOrMore(0, rangeTail)]);
+               var resultList = [];
+               if (result !== null) {
+                       resultList = resultList.concat(result[0], result[1][0]);
+                       return resultList;
+               }
+               debug(" -- failed rangeList");
+               return null;
+       }
+
+       function rangeTail() {
+               // ',' range_list
+               var result = sequence([_comma_, rangeList]);
+               if (result !== null) {
+                       return result[1];
+               }
+               debug(" -- failed rangeTail");
+               return null;
+       }
+
+       function range() {
+               var result = sequence([digits, _range_, digits]);
+               if (result !== null) {
+                       debug(" -- passed range");
+                       var array = [];
+                       var left = parseInt(result[0], 10);
+                       var right = parseInt(result[2], 10);
+                       for ( i = left; i <= right; i++) {
+                               array.push(i);
+                       }
+                       return array;
+               }
+               debug(" -- failed range");
+               return null;
+       }
+
+       function _in() {
+               // in_relation   = expr ('not')? 'in' range_list
+               var result = sequence([expression, nOrMore(0, not), whitespace, _in_, whitespace, rangeList]);
+               if (result !== null) {
+                       debug(" -- passed _in");
+                       var range_list = result[5];
+                       for (var i = 0; i < range_list.length; i++) {
+                               if (parseInt(range_list[i], 10) === result[0]) {
+                                       return (result[1][0] !== 'not');
+                               }
+                       }
+                       return (result[1][0] === 'not');
+               }
+               debug(" -- failed _in ");
+               return null;
+       }
+
+       function within() {
+               var result = sequence([expression, whitespace, _within_, whitespace, rangeList]);
+               if (result !== null) {
+                       debug(" -- passed within ");
+                       var range_list = result[4];
+                       return (parseInt( range_list[0],10 )<= result[0] && result[0] <= parseInt( range_list[1], 10));
+               }
+               debug(" -- failed within ");
+               return null;
+       }
+
+
+       var relation = choice([is, _in, within]);
+
+       function and() {
+               var result = sequence([relation, whitespace, _and_, whitespace, condition]);
+               if (result) {
+                       debug(" -- passed and");
+                       return result[0] && result[4];
+               }
+               debug(" -- failed and");
+               return null;
+       }
+
+       function or() {
+               var result = sequence([relation, whitespace, _or_, whitespace, condition]);
+               if (result) {
+                       debug(" -- passed or");
+                       return result[0] || result[4];
+               }
+               debug(" -- failed or");
+               return null;
+       }
+
+       var condition = choice([and, or, relation]);
+
+       function start() {
+               var result = condition();
+               return result;
+       }
+
+
+       var result = start();
+
+       /*
+        * For success, the pos must have gotten to the end of the rule
+        * and returned a non-null.
+        * n.b. This is part of language infrastructure, so we do not throw an internationalizable message.
+        */
+       if (result === null || pos !== rule.length) {
+               // throw new Error("Parse error at position " + pos.toString() + " in input: " + rule + " result is " + result);
+       }
+
+       return result;
+}
+
+/* For module loaders, e.g. NodeJS, NPM */
+if (typeof module !== 'undefined' && module.exports) {
+       module.exports = pluralRuleParser;
+}
+
+/* pluralRuleParser ends here */
+mw.libs.pluralRuleParser = pluralRuleParser;
+
+} )( mediaWiki );
index 14557d4..a7e059c 100644 (file)
                                        otherAction = action === 'watch' ? 'unwatch' : 'watch';
                                        $li = $link.closest( 'li' );
 
-                                       mw.util.jsMessage( watchResponse.message, 'ajaxwatch' );
+                                       mw.notify( $.parseHTML( watchResponse.message ), { tag: 'watch-self' } );
 
                                        // Set link to opposite
                                        updateWatchLink( $link, otherAction );
                                },
                                // Error
                                function () {
-                                       var cleanTitle, html, link;
+                                       var cleanTitle, msg, link;
 
                                        // Reset link to non-loading mode
                                        updateWatchLink( $link, action );
                                                        title: cleanTitle
                                                }, cleanTitle
                                        );
-                                       html = mw.msg( 'watcherrortext', link );
+                                       msg = mw.messsage( 'watcherrortext', link );
 
                                        // Report to user about the error
-                                       mw.util.jsMessage( html, 'ajaxwatch' );
+                                       mw.notify( msg, { tag: 'watch-self' } );
 
                                }
                        );
index 6b6e586..9e030fa 100644 (file)
        }
 
 var
+       /**
+        * Public methods (defined later)
+        */
+       fn,
+
        /**
         * Strip some illegal chars: control chars, colon, less than, greater than,
         * brackets, braces, pipe, whitespace and normal spaces. This still leaves some insanity
@@ -221,7 +226,7 @@ var
 
        /* Public methods */
 
-       var fn = {
+       fn = {
                constructor: Title,
 
                /**
index 36628eb..1ad1a62 100644 (file)
@@ -94,7 +94,7 @@
                 * Constructs the HTML for the debugging toolbar
                 */
                buildHtml: function () {
-                       var $container, $bits, panes, id;
+                       var $container, $bits, panes, id, gitInfo;
 
                        $container = $( '<div id="mw-debug-toolbar" class="mw-debug"></div>' );
 
                         * @return {jQuery}
                         */
                        function bitDiv( id ) {
-                               return $( '<div>' ).attr({
+                               return $( '<div>' ).prop({
                                        id: 'mw-debug-' + id,
-                                       'class': 'mw-debug-bit'
+                                       className: 'mw-debug-bit'
                                })
                                .appendTo( $bits );
                        }
                         */
                        function paneLabel( id, text ) {
                                return $( '<a>' )
-                                       .attr({
-                                               'class': 'mw-debug-panelabel',
+                                       .prop({
+                                               className: 'mw-debug-panelabel',
                                                href: '#mw-debug-pane-' + id
                                        })
                                        .text( text );
                         * @return {jQuery}
                         */
                        function paneTriggerBitDiv( id, text, count ) {
-                               if( count ) {
+                               if ( count ) {
                                        text = text + ' (' + count + ')';
                                }
-                               return $( '<div>' ).attr({
+                               return $( '<div>' ).prop({
                                        id: 'mw-debug-' + id,
-                                       'class': 'mw-debug-bit mw-debug-panelink'
+                                       className: 'mw-debug-bit mw-debug-panelink'
                                })
                                .append( paneLabel( id, text ) )
                                .appendTo( $bits );
 
                        paneTriggerBitDiv( 'includes', 'PHP includes', this.data.includes.length );
 
-                       var gitInfo = '';
+                       gitInfo = '';
                        if ( this.data.gitRevision !== false ) {
                                gitInfo = '(' + this.data.gitRevision.substring( 0, 7 ) + ')';
                                if ( this.data.gitViewUrl !== false ) {
-                                       gitInfo = $( '<a>' ).attr( 'href', this.data.gitViewUrl ).text( gitInfo );
+                                       gitInfo = $( '<a>' )
+                                               .attr( 'href', this.data.gitViewUrl )
+                                               .text( gitInfo );
                                }
                        }
 
                        bitDiv( 'mwversion' )
-                               .append( $( '<a href="//www.mediawiki.org/"></a>' ).text( 'MediaWiki' ) )
-                               .append( ': ' + this.data.mwVersion + ' ' )
+                               .append( $( '<a href="//www.mediawiki.org/">MediaWiki</a>' ) )
+                               .append( document.createTextNode( ': ' + this.data.mwVersion + ' ' ) )
                                .append( gitInfo );
 
                        if ( this.data.gitBranch !== false ) {
                                }
 
                                $( '<div>' )
-                                       .attr({
-                                               'class': 'mw-debug-pane',
+                                       .prop({
+                                               className: 'mw-debug-pane',
                                                id: 'mw-debug-pane-' + id
                                        })
                                        .append( panes[id] )
 
                        $table = $( '<table id="mw-debug-console">' );
 
-                       $('<colgroup>').css( 'width', /*padding=*/20 + ( 10 * /*fontSize*/11 ) ).appendTo( $table );
-                       $('<colgroup>').appendTo( $table );
-                       $('<colgroup>').css( 'width', 350 ).appendTo( $table );
+                       $( '<colgroup>' ).css( 'width', /* padding = */ 20 + ( 10 * /* fontSize = */ 11 ) ).appendTo( $table );
+                       $( '<colgroup>' ).appendTo( $table );
+                       $( '<colgroup>' ).css( 'width', 350 ).appendTo( $table );
 
 
                        entryTypeText = function( entryType ) {
                                $( '<tr>' )
                                        .append( $( '<td>' )
                                                .text( entry.typeText )
-                                               .attr( 'class', 'mw-debug-console-' + entry.type )
+                                               .addClass( 'mw-debug-console-' + entry.type )
                                        )
                                        .append( $( '<td>' ).html( entry.msg ) )
                                        .append( $( '<td>' ).text( entry.caller ) )
                        $table = $( '<table id="mw-debug-querylist"></table>' );
 
                        $( '<tr>' )
-                               .append( $('<th>#</th>').css( 'width', '4em' )    )
-                               .append( $('<th>SQL</th>') )
-                               .append( $('<th>Time</th>').css( 'width', '8em'  ) )
-                               .append( $('<th>Call</th>').css( 'width', '18em' ) )
+                               .append( $( '<th>#</th>' ).css( 'width', '4em' )    )
+                               .append( $( '<th>SQL</th>' ) )
+                               .append( $( '<th>Time</th>' ).css( 'width', '8em'  ) )
+                               .append( $( '<th>Call</th>' ).css( 'width', '18em' ) )
                        .appendTo( $table );
 
                        for ( i = 0, length = this.data.queries.length; i < length; i += 1 ) {
                        for ( i = 0, length = this.data.debugLog.length; i < length; i += 1 ) {
                                line = this.data.debugLog[i];
                                $( '<li>' )
-                                       .html( mw.html.escape( line ).replace( /\n/g, "<br />\n" ) )
+                                       .html( mw.html.escape( line ).replace( /\n/g, '<br />\n' ) )
                                        .appendTo( $list );
                        }
 
index e0c65e8..f0e464d 100644 (file)
@@ -307,7 +307,7 @@ var mw = ( function ( $, undefined ) {
                },
 
                /**
-                * Gets a message string, similar to wfMsg()
+                * Gets a message string, similar to wfMessage()
                 *
                 * @param key string Key of message to get
                 * @param parameters mixed First argument in a list of variadic arguments,
index 9ce8305..4ea1a88 100644 (file)
@@ -33,7 +33,8 @@
                // If there is no console, use our own log box
                mw.loader.using( 'jquery.footHovzer', function () {
 
-                       var     d = new Date(),
+                       var     hovzer,
+                               d = new Date(),
                                // Create HH:MM:SS.MIL timestamp
                                time = ( d.getHours() < 10 ? '0' + d.getHours() : d.getHours() ) +
                                 ':' + ( d.getMinutes() < 10 ? '0' + d.getMinutes() : d.getMinutes() ) +
@@ -48,7 +49,7 @@
                                                backgroundColor: 'white',
                                                borderTop: 'solid 2px #ADADAD'
                                        } );
-                               var hovzer = $.getFootHovzer();
+                               hovzer = $.getFootHovzer();
                                hovzer.$.append( $log );
                                hovzer.update();
                        }
diff --git a/resources/mediawiki/mediawiki.notification.css b/resources/mediawiki/mediawiki.notification.css
new file mode 100644 (file)
index 0000000..9a7b651
--- /dev/null
@@ -0,0 +1,26 @@
+/**
+ * Stylesheet for mediawiki.notification module
+ */
+
+#mw-notification-area {
+       position: absolute;
+       top: 1em;
+       right: 1em;
+       width: 20em;
+       line-height: 1.35;
+       z-index: 10000;
+}
+
+.mw-notification {
+       padding: 0.25em 1em;
+       margin-bottom: 0.5em;
+       border: solid 1px #ddd;
+       background-color: #fcfcfc;
+       /* Message hides on-click */
+       /* See also mediawiki.notification.js */
+       cursor: pointer;
+}
+
+.mw-notification-title {
+       font-weight: bold;
+}
diff --git a/resources/mediawiki/mediawiki.notification.js b/resources/mediawiki/mediawiki.notification.js
new file mode 100644 (file)
index 0000000..5bcbfcc
--- /dev/null
@@ -0,0 +1,477 @@
+/**
+ * Implements mediaWiki.notification library
+ */
+( function ( mw, $ ) {
+       'use strict';
+
+       var isPageReady = false,
+               isInitialized = false,
+               preReadyNotifQueue = [],
+               /**
+                * @var {jQuery}
+                * The #mw-notification-area div that all notifications are contained inside.
+                */
+               $area = null;
+
+       /**
+        * Creates a Notification object for 1 message.
+        * Does not insert anything into the document (see .start()).
+        *
+        * @constructor
+        * @see mw.notification.notify
+        */
+       function Notification( message, options ) {
+               var $notification, $notificationTitle, $notificationContent;
+
+               $notification = $( '<div class="mw-notification"></div>' )
+                       .data( 'mw.notification', this )
+                       .addClass( options.autoHide ? 'mw-notification-autohide' : 'mw-notification-noautohide' );
+
+               if ( options.tag ) {
+                       // Sanitize options.tag before it is used by any code. (Including Notification class methods)
+                       options.tag = options.tag.replace( /[ _\-]+/g, '-' ).replace( /[^\-a-z0-9]+/ig, '' );
+                       if ( options.tag ) {
+                               $notification.addClass( 'mw-notification-tag-' + options.tag );
+                       } else {
+                               delete options.tag;
+                       }
+               }
+
+               if ( options.title ) {
+                       $notificationTitle = $( '<div class="mw-notification-title"></div>' )
+                               .text( options.title )
+                               .appendTo( $notification );
+               }
+
+               $notificationContent = $( '<div class="mw-notification-content"></div>' );
+
+               if ( typeof message === 'object' ) {
+                       // Handle mw.Message objects separately from DOM nodes and jQuery objects
+                       if ( message instanceof mw.Message ) {
+                               $notificationContent.html( message.parse() );
+                       } else {
+                               $notificationContent.append( message );
+                       }
+               } else {
+                       $notificationContent.text( message );
+               }
+
+               $notificationContent.appendTo( $notification );
+
+               // Private state parameters, meant for internal use only
+               // isOpen: Set to true after .start() is called to avoid double calls.
+               //         Set back to false after .close() to avoid duplicating the close animation.
+               // isPaused: false after .resume(), true after .pause(). Avoids duplicating or breaking the hide timeouts.
+               //           Set to true initially so .start() can call .resume().
+               // message: The message passed to the notification. Unused now but may be used in the future
+               //          to stop replacement of a tagged notification with another notification using the same message.
+               // options: The options passed to the notification with a little sanitization. Used by various methods.
+               // $notification: jQuery object containing the notification DOM node.
+               this.isOpen = false;
+               this.isPaused = true;
+               this.message = message;
+               this.options = options;
+               this.$notification = $notification;
+       }
+
+       /**
+        * Start the notification.
+        * This inserts it into the page, closes any matching tagged notifications,
+        * handles the fadeIn animations and repacement transitions, and starts autoHide timers.
+        */
+       Notification.prototype.start = function () {
+               var
+                       // Local references
+                       $notification, options,
+                       // Original opacity so that we can animate back to it later
+                       opacity,
+                       // Other notification elements matching the same tag
+                       $tagMatches,
+                       outerHeight,
+                       placeholderHeight;
+
+               if ( this.isOpen ) {
+                       return;
+               }
+
+               this.isOpen = true;
+
+               options = this.options;
+               $notification = this.$notification;
+
+               opacity = this.$notification.css( 'opacity' );
+
+               // Set the opacity to 0 so we can fade in later.
+               $notification.css( 'opacity', 0 );
+
+               if ( options.tag ) {
+                       // Check to see if there are any tagged notifications with the same tag as the new one
+                       $tagMatches = $area.find( '.mw-notification-tag-' + options.tag );
+               }
+
+               // If we found a tagged notification use the replacement pattern instead of the new
+               // notification fade-in pattern.
+               if ( options.tag && $tagMatches.length ) {
+
+                       // Iterate over the tag matches to find the outerHeight we should use
+                       // for the placeholder.
+                       outerHeight = 0;
+                       $tagMatches.each( function () {
+                               var notif = $( this ).data( 'mw.notification' );
+                               if ( notif ) {
+                                       // Use the notification's height + padding + border + margins
+                                       // as the placeholder height.
+                                       outerHeight = notif.$notification.outerHeight( true );
+                                       if ( notif.$replacementPlaceholder ) {
+                                               // Grab the height of a placeholder that has not finished animating.
+                                               placeholderHeight = notif.$replacementPlaceholder.height();
+                                               // Remove any placeholders added by a previous tagged
+                                               // notification that was in the middle of replacing another.
+                                               // This also makes sure that we only grab the placeholderHeight
+                                               // for the most recent notification.
+                                               notif.$replacementPlaceholder.remove();
+                                               delete notif.$replacementPlaceholder;
+                                       }
+                                       // Close the previous tagged notification
+                                       // Since we're replacing it do this with a fast speed and don't output a placeholder
+                                       // since we're taking care of that transition ourselves.
+                                       notif.close( { speed: 'fast', placeholder: false } );
+                               }
+                       } );
+                       if ( placeholderHeight !== undefined ) {
+                               // If the other tagged notification was in the middle of replacing another
+                               // tagged notification, continue from the placeholder's height instead of
+                               // using the outerHeight of the notification.
+                               outerHeight = placeholderHeight;
+                       }
+
+                       $notification
+                               // Insert the new notification before the tagged notification(s)
+                               .insertBefore( $tagMatches.first() )
+                               .css( {
+                                       // Use an absolute position so that we can use a placeholder to gracefully push other notifications
+                                       // into the right spot.
+                                       position: 'absolute',
+                                       width: $notification.width()
+                               } )
+                               // Fade-in the notification
+                               .animate( { opacity: opacity },
+                                       {
+                                               duration: 'slow',
+                                               complete: function () {
+                                                       // After we've faded in clear the opacity and let css take over
+                                                       $( this ).css( { opacity: '' } );
+                                               }
+                                       } );
+
+                       // Create a clear placeholder we can use to make the notifications around the notification that is being
+                       // replaced expand or contract gracefully to fit the height of the new notification.
+                       var self = this;
+                       self.$replacementPlaceholder = $( '<div>' )
+                               // Set the height to the space the previous notification or placeholder took
+                               .css( 'height', outerHeight )
+                               // Make sure that this placeholder is at the very end of this tagged notification group
+                               .insertAfter( $tagMatches.eq( -1 ) )
+                               // Animate the placeholder height to the space that this new notification will take up
+                               .animate( { height: $notification.outerHeight( true ) },
+                                       {
+                                               // Do space animations fast
+                                               speed: 'fast',
+                                               complete: function () {
+                                                       // Reset the notification position after we've finished the space animation
+                                                       // However do not do it if the placeholder was removed because another tagged
+                                                       // notification went and closed this one.
+                                                       if ( self.$replacementPlaceholder ) {
+                                                               $notification.css( 'position', '' );
+                                                       }
+                                                       // Finally, remove the placeholder from the DOM
+                                                       $( this ).remove();
+                                               }
+                                       } );
+               } else {
+                       // Append to the notification area and fade in to the original opacity.
+                       $notification
+                               .appendTo( $area )
+                               .animate( { opacity: opacity },
+                                       {
+                                               duration: 'fast',
+                                               complete: function () {
+                                                       // After we've faded in clear the opacity and let css take over
+                                                       $( this ).css( 'opacity', '' );
+                                               }
+                                       }
+                               );
+               }
+
+               // By default a notification is paused.
+               // If this notification is within the first {autoHideLimit} notifications then
+               // start the auto-hide timer as soon as it's created.
+               var autohideCount = $area.find( '.mw-notification-autohide' ).length;
+               if ( autohideCount <= notification.autoHideLimit ) {
+                       this.resume();
+               }
+       };
+
+       /**
+        * Pause any running auto-hide timer for this notification
+        */
+       Notification.prototype.pause = function () {
+               if ( this.isPaused ) {
+                       return;
+               }
+               this.isPaused = true;
+
+               if ( this.timeout ) {
+                       clearTimeout( this.timeout );
+                       delete this.timeout;
+               }
+       };
+
+       /**
+        * Start autoHide timer if not already started.
+        * Does nothing if autoHide is disabled.
+        * Either to resume from pause or to make the first start.
+        */
+       Notification.prototype.resume = function () {
+               var notif = this;
+               if ( !notif.isPaused ) {
+                       return;
+               }
+               // Start any autoHide timeouts
+               if ( notif.options.autoHide ) {
+                       notif.isPaused = false;
+                       notif.timeout = setTimeout( function () {
+                               // Already finished, so don't try to re-clear it
+                               delete notif.timeout;
+                               notif.close();
+                       }, notification.autoHideSeconds * 1000 );
+               }
+       };
+
+       /**
+        * Close/hide the notification.
+        *
+        * @param {Object} options An object containing options for the closing of the notification.
+        *  These are typically only used internally.
+        *  - speed: Use a close speed different than the default 'slow'.
+        *  - placeholder: Set to false to disable the placeholder transition.
+        */
+       Notification.prototype.close = function ( options ) {
+               if ( !this.isOpen ) {
+                       return;
+               }
+               this.isOpen = false;
+               // Clear any remaining timeout on close
+               this.pause();
+
+               options = $.extend( {
+                       speed: 'slow',
+                       placeholder: true
+               }, options );
+
+               // Remove the mw-notification-autohide class from the notification to avoid
+               // having a half-closed notification counted as a notification to resume
+               // when handling {autoHideLimit}.
+               this.$notification.removeClass( 'mw-notification-autohide' );
+
+               // Now that a notification is being closed. Start auto-hide timers for any
+               // notification that has now become one of the first {autoHideLimit} notifications.
+               notification.resume();
+
+               this.$notification
+                       .css( {
+                               // Don't trigger any mouse events while fading out, just in case the cursor
+                               // happens to be right above us when we transition upwards.
+                               pointerEvents: 'none',
+                               // Set an absolute position so we can move upwards in the animation.
+                               // Notification replacement doesn't look right unless we use an animation like this.
+                               position: 'absolute',
+                               // We must fix the width to avoid it shrinking horizontally.
+                               width: this.$notification.width()
+                       } )
+                       // Fix the top/left position to the current computed position from which we
+                       // can animate upwards.
+                       .css( this.$notification.position() )
+                       // Animate opacity and top to create fade upwards animation for notification closing
+                       .animate( {
+                               opacity: 0,
+                               top: '-=35'
+                       }, {
+                               duration: options.speed,
+                               complete: function () {
+                                       // Remove the notification
+                                       $( this ).remove();
+                                       if ( options.placeholder ) {
+                                               // Use a fast slide up animation after closing to make it look like the notifications
+                                               // below slide up into place when the notification disappears
+                                               $placeholder.slideUp( 'fast', function () {
+                                                       // Remove the placeholder
+                                                       $( this ).remove();
+                                               } );
+                                       }
+                               }
+                       } );
+
+               if ( options.placeholder ) {
+                       // Insert a placeholder with a height equal to the height of the
+                       // notification plus it's vertical margins in place of the notification
+                       var $placeholder = $( '<div>' )
+                               .css( 'height', this.$notification.outerHeight( true ) )
+                               .insertBefore( this.$notification );
+               }
+       };
+
+       /**
+        * Helper function, take a list of notification divs and call
+        * a function on the Notification instance attached to them
+        *
+        * @param {jQuery} $notifications A jQuery object containing notification divs
+        * @param {string} fn The name of the function to call on the Notification instance
+        */
+       function callEachNotification( $notifications, fn ) {
+               $notifications.each( function () {
+                       var notif = $( this ).data( 'mw.notification' );
+                       if ( notif ) {
+                               notif[fn]();
+                       }
+               } );
+       }
+
+       /**
+        * Initialisation
+        * (don't call before document ready)
+        */
+       function init() {
+               if ( !isInitialized ) {
+                       isInitialized = true;
+                       $area = $( '<div id="mw-notification-area"></div>' )
+                               // Pause auto-hide timers when the mouse is in the notification area.
+                               .on( {
+                                       mouseenter: notification.pause,
+                                       mouseleave: notification.resume
+                               } )
+                               // When clicking on a notification close it.
+                               .on( 'click', '.mw-notification', function () {
+                                       var notif = $( this ).data( 'mw.notification' );
+                                       if ( notif ) {
+                                               notif.close();
+                                       }
+                               } )
+                               // Stop click events from <a> tags from propogating to prevent clicking.
+                               // on links from hiding a notification.
+                               .on( 'click', 'a', function ( e ) {
+                                       e.stopPropagation();
+                               } );
+
+                       // Prepend the notification area to the content area and save it's object.
+                       mw.util.$content.prepend( $area );
+               }
+       }
+
+       var notification = {
+               /**
+                * Pause auto-hide timers for all notifications.
+                * Notifications will not auto-hide until resume is called.
+                */
+               pause: function () {
+                       callEachNotification(
+                               $area.children( '.mw-notification' ),
+                               'pause'
+                       );
+               },
+
+               /**
+                * Resume any paused auto-hide timers from the beginning.
+                * Only the first {autoHideLimit} timers will be resumed.
+                */
+               resume: function () {
+                       callEachNotification(
+                               // Only call resume on the first {autoHideLimit} notifications.
+                               // Exclude noautohide notifications to avoid bugs where {autoHideLimit}
+                               // { autoHide: false } notifications are at the start preventing any
+                               // auto-hide notifications from being autohidden.
+                               $area.children( '.mw-notification-autohide' ).slice( 0, notification.autoHideLimit ),
+                               'resume'
+                       );
+               },
+
+               /**
+                * Display a notification message to the user.
+                *
+                * @param {mixed} message The DOM-element, jQuery object, mw.Message instance,
+                *  or plaintext string to be used as the message.
+                * @param {Object} options The options to use for the notification.
+                *  See mw.notification.defaults for details.
+                */
+               notify: function ( message, options ) {
+                       var notif;
+                       options = $.extend( {}, notification.defaults, options );
+
+                       notif = new Notification( message, options );
+
+                       if ( isPageReady ) {
+                               notif.start();
+                       } else {
+                               preReadyNotifQueue.push( notif );
+                       }
+               },
+
+               /**
+                * @var {Object}
+                * The defaults for mw.notification.notify's options parameter
+                *   autoHide:
+                *     A boolean indicating whether the notifification should automatically
+                *     be hidden after shown. Or if it should persist.
+                *
+                *   tag:
+                *     An optional string. When a notification is tagged only one message
+                *     with that tag will be displayed. Trying to display a new notification
+                *     with the same tag as one already being displayed will cause the other
+                *     notification to be closed and this new notification to open up inside
+                *     the same place as the previous notification.
+                *
+                *   title:
+                *     An optional title for the notification. Will be displayed above the
+                *     content. Usually in bold.
+                */
+               defaults: {
+                       autoHide: true,
+                       tag: false,
+                       title: undefined
+               },
+
+               /**
+                * @var {number}
+                * Number of seconds to wait before auto-hiding notifications.
+                */
+               autoHideSeconds: 5,
+
+               /**
+                * @var {number}
+                * Maximum number of notifications to count down auto-hide timers for.
+                * Only the first {autoHideLimit} notifications being displayed will
+                * auto-hide. Any notifications further down in the list will only start
+                * counting down to auto-hide after the first few messages have closed.
+                *
+                * This basically represents the number of notifications the user should
+                * be able to process in {autoHideSeconds} time.
+                */
+               autoHideLimit: 3
+       };
+
+       $( function () {
+               var notif;
+
+               init();
+
+               // Handle pre-ready queue.
+               isPageReady = true;
+               while ( preReadyNotifQueue.length ) {
+                       notif = preReadyNotifQueue.shift();
+                       notif.start();
+               }
+       } );
+
+       mw.notification = notification;
+
+}( mediaWiki, jQuery ) );
diff --git a/resources/mediawiki/mediawiki.notify.js b/resources/mediawiki/mediawiki.notify.js
new file mode 100644 (file)
index 0000000..3bf2a89
--- /dev/null
@@ -0,0 +1,20 @@
+/**
+ * Implements mediaWiki.notify function
+ */
+( function ( mw ) {
+       'use strict';
+
+       /**
+        * @see mw.notification.notify
+        */
+       mw.notify = function ( message, options ) {
+               // Don't bother loading the whole notification system if we never use it.
+               mw.loader.using( 'mediawiki.notification', function () {
+                       // Don't bother calling mw.loader.using a second time after we've already loaded mw.notification.
+                       mw.notify = mw.notification.notify;
+                       // Call notify with the notification the user requested of us.
+                       mw.notify( message, options );
+               } );
+       };
+
+}( mediaWiki ) );
\ No newline at end of file
index b5f124b..5c5c87e 100644 (file)
@@ -8,11 +8,12 @@
         * User object
         */
        function User( options, tokens ) {
+               var user, callbacks;
 
                /* Private Members */
 
-               var that = this;
-               var callbacks = {};
+               user = this;
+               callbacks = {};
 
                /**
                 * Gets the current user's groups or rights.
                 * @return String: Random set of 32 alpha-numeric characters
                 */
                function generateId() {
-                       var id = '';
-                       var seed = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
-                       for ( var i = 0, r; i < 32; i++ ) {
+                       var i, r,
+                               id = '',
+                               seed = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
+                       for ( i = 0; i < 32; i++ ) {
                                r = Math.floor( Math.random() * seed.length );
                                id += seed.substring( r, r + 1 );
                        }
                 * @return Boolean
                 */
                this.isAnon = function () {
-                       return that.getName() === null;
+                       return user.getName() === null;
                };
 
                /**
                 * @deprecated since 1.20 use mw.user.isAnon() instead
                 */
                this.anonymous = function () {
-                       return that.isAnon();
+                       return user.isAnon();
                };
 
                /**
                 * @return String: User name or random session ID
                 */
                this.id = function() {
-                       var name = that.getName();
+                       var id,
+                               name = user.getName();
                        if ( name ) {
                                return name;
                        }
-                       var id = $.cookie( 'mediaWiki.user.id' );
+                       id = $.cookie( 'mediaWiki.user.id' );
                        if ( typeof id === 'undefined' || id === null ) {
                                id = generateId();
                        }
                 *     } );
                 */
                this.bucket = function ( key, options ) {
+                       var cookie, parts, version, bucket,
+                               range, k, rand, total;
+
                        options = $.extend( {
-                               'buckets': {},
-                               'version': 0,
-                               'tracked': false,
-                               'expires': 30
+                               buckets: {},
+                               version: 0,
+                               tracked: false,
+                               expires: 30
                        }, options || {} );
-                       var cookie = $.cookie( 'mediaWiki.user.bucket:' + key );
-                       var bucket = null;
-                       var version = 0;
+
+                       cookie = $.cookie( 'mediaWiki.user.bucket:' + key );
+
                        // Bucket information is stored as 2 integers, together as version:bucket like: "1:2"
                        if ( typeof cookie === 'string' && cookie.length > 2 && cookie.indexOf( ':' ) > 0 ) {
-                               var parts = cookie.split( ':' );
+                               parts = cookie.split( ':' );
                                if ( parts.length > 1 && Number( parts[0] ) === options.version ) {
                                        version = Number( parts[0] );
                                        bucket = String( parts[1] );
                                }
                        }
-                       if ( bucket === null ) {
+                       if ( bucket === undefined ) {
                                if ( !$.isPlainObject( options.buckets ) ) {
                                        throw 'Invalid buckets error. Object expected for options.buckets.';
                                }
                                version = Number( options.version );
                                // Find range
-                               var     range = 0, k;
+                               range = 0;
                                for ( k in options.buckets ) {
                                        range += options.buckets[k];
                                }
                                // Select random value within range
-                               var rand = Math.random() * range;
+                               rand = Math.random() * range;
                                // Determine which bucket the value landed in
-                               var total = 0;
+                               total = 0;
                                for ( k in options.buckets ) {
                                        bucket = k;
                                        total += options.buckets[k];
index d1bfd05..2928438 100644 (file)
@@ -5,9 +5,7 @@
        'use strict';
 
        // Local cache and alias
-       var hideMessageTimeout,
-               messageBoxEvents = false,
-               util = {
+       var util = {
 
                /**
                 * Initialisation
                init: function () {
                        var profile, $tocTitle, $tocToggleLink, hideTocCookie;
 
-                       /* Set up $.messageBox */
-                       $.messageBoxNew( {
-                               id: 'mw-js-message',
-                               parent: '#content'
-                       } );
-
                        /* Set tooltipAccessKeyPrefix */
                        profile = $.client.profile();
 
                                && profile.name === 'safari'
                                && profile.layoutVersion > 526 ) {
                                util.tooltipAccessKeyPrefix = 'ctrl-alt-';
-
+                       // Firefox 14+ on Mac
+                       } else if ( profile.platform === 'mac'
+                               && profile.name === 'firefox'
+                               && profile.versionNumber >= 14 ) {
+                               util.tooltipAccessKeyPrefix = 'ctrl-option-';
                        // Safari/Konqueror on any platform, or any browser on Mac
                        // (but not Safari on Windows)
                        } else if ( !( profile.platform === 'win' && profile.name === 'safari' )
                        }
 
                        /* Fill $content var */
-                       if ( $( '#bodyContent' ).length ) {
-                               // Vector, Monobook, Chick etc.
-                               util.$content = $( '#bodyContent' );
-
-                       } else if ( $( '#mw_contentholder' ).length ) {
-                               // Modern
-                               util.$content = $( '#mw_contentholder' );
-
-                       } else if ( $( '#article' ).length ) {
-                               // Standard, CologneBlue
-                               util.$content = $( '#article' );
+                       util.$content = ( function () {
+                               var $content, selectors = [
+                                       // The preferred standard for setting $content (class="mw-body")
+                                       // You may also use (class="mw-body mw-body-primary") if you use
+                                       // mw-body in multiple locations.
+                                       // Or class="mw-body-primary" if you want $content to be deeper
+                                       // in the dom than mw-body
+                                       '.mw-body-primary',
+                                       '.mw-body',
+
+                                       /* Legacy fallbacks for setting the content */
+                                       // Vector, Monobook, Chick, etc... based skins
+                                       '#bodyContent',
+
+                                       // Modern based skins
+                                       '#mw_contentholder',
+
+                                       // Standard, CologneBlue
+                                       '#article',
+
+                                       // #content is present on almost all if not all skins. Most skins (the above cases)
+                                       // have #content too, but as an outer wrapper instead of the article text container.
+                                       // The skins that don't have an outer wrapper do have #content for everything
+                                       // so it's a good fallback
+                                       '#content',
+
+                                       // If nothing better is found fall back to our bodytext div that is guaranteed to be here
+                                       '#mw-content-text',
+
+                                       // Should never happen... well, it could if someone is not finished writing a skin and has
+                                       // not inserted bodytext yet. But in any case <body> should always exist
+                                       'body'
+                               ];
+                               for ( var i = 0, l = selectors.length; i < l; i++ ) {
+                                       $content = $( selectors[i] ).first();
+                                       if ( $content.length ) {
+                                               return $content;
+                                       }
+                               }
 
-                       } else {
-                               // #content is present on almost all if not all skins. Most skins (the above cases)
-                               // have #content too, but as an outer wrapper instead of the article text container.
-                               // The skins that don't have an outer wrapper do have #content for everything
-                               // so it's a good fallback
-                               util.$content = $( '#content' );
-                       }
+                               // Make sure we don't unset util.$content if it was preset and we don't find anything
+                               return util.$content;
+                       } )();
 
                        // Table of contents toggle
                        $tocTitle = $( '#toctitle' );
                 * @return string Address to script (eg. '/w/api.php' )
                 */
                wikiScript: function ( str ) {
-                       return mw.config.get( 'wgScriptPath' ) + '/' + ( str || 'index' ) +
-                               mw.config.get( 'wgScriptExtension' );
+                       str = str || 'index';
+                       if ( str === 'index' ) {
+                               return mw.config.get( 'wgScript' );
+                       } else if ( str === 'load' ) {
+                               return mw.config.get( 'wgLoadScript' );
+                       } else {
+                               return mw.config.get( 'wgScriptPath' ) + '/' + str +
+                                       mw.config.get( 'wgScriptExtension' );
+                       }
                },
 
                /**
 
                /*
                 * @var jQuery
-                * A jQuery object that refers to the page-content element
+                * A jQuery object that refers to the content area element
                 * Populated by init().
                 */
                $content: null,
                 * Calling with no arguments, with an empty string or null will hide the message
                 *
                 * @param message {mixed} The DOM-element, jQuery object or HTML-string to be put inside the message box.
-                * @param className {String} Used in adding a class; should be different for each call
                 * to allow CSS/JS to hide different boxes. null = no class used.
-                * @return {Boolean} True on success, false on failure.
+                * @depreceated Use mw.notify
                 */
-               jsMessage: function ( message, className ) {
-                       var $messageDiv = $( '#mw-js-message' );
-
+               jsMessage: function ( message ) {
                        if ( !arguments.length || message === '' || message === null ) {
-                               $messageDiv.empty().hide();
-                               stopHideMessageTimeout();
-                               return true; // Emptying and hiding message is intended behaviour, return true
-                       } else {
-                               // We special-case skin structures provided by the software. Skins that
-                               // choose to abandon or significantly modify our formatting can just define
-                               // an mw-js-message div to start with.
-                               if ( !$messageDiv.length ) {
-                                       $messageDiv = $( '<div id="mw-js-message"></div>' );
-                                       if ( util.$content.parent().length ) {
-                                               util.$content.parent().prepend( $messageDiv );
-                                       } else {
-                                               return false;
-                                       }
-                               }
-
-                               if ( !messageBoxEvents ) {
-                                       messageBoxEvents = true;
-                                       $messageDiv
-                                               .on( {
-                                                       'mouseenter': stopHideMessageTimeout,
-                                                       'mouseleave': startHideMessageTimeout,
-                                                       'click': hideMessage
-                                               } )
-                                               .on( 'click', 'a', function ( e ) {
-                                                       // Prevent links, even those that don't exist yet, from causing the
-                                                       // message box to close when clicked
-                                                       e.stopPropagation();
-                                               } );
-                               }
-
-                               if ( className ) {
-                                       $messageDiv.prop( 'className', 'mw-js-message-' + className );
-                               }
-
-                               if ( typeof message === 'object' ) {
-                                       $messageDiv.empty();
-                                       $messageDiv.append( message );
-                               } else {
-                                       $messageDiv.html( message );
-                               }
-
-                               $messageDiv.slideDown();
-                               startHideMessageTimeout();
                                return true;
                        }
+                       if ( typeof message !== 'object' ) {
+                               message = $.parseHTML( message );
+                       }
+                       mw.notify( message, { autoHide: true, tag: 'legacy' } );
+                       return true;
                },
 
                /**
                }
        };
 
-       // Message auto-hide helpers
-       function hideMessage() {
-               $( '#mw-js-message' ).fadeOut( 'slow' );
-       }
-       function stopHideMessageTimeout() {
-               clearTimeout( hideMessageTimeout );
-       }
-       function startHideMessageTimeout() {
-               clearTimeout( hideMessageTimeout );
-               hideMessageTimeout = setTimeout( hideMessage, 5000 );
-       }
-
        mw.util = util;
 
 }( mediaWiki, jQuery ) );
index d8fb2b3..0e0ce80 100644 (file)
@@ -3,7 +3,7 @@
 if ( !defined( 'MEDIAWIKI' ) ) {
        $wgNoDBParam = true;
        $optionsWithArgs = array( 'o' );
-       require_once( dirname(__FILE__).'/../maintenance/commandLine.inc' );
+       require_once( __DIR__ .'/../maintenance/commandLine.inc' );
 
        $stderr = fopen( 'php://stderr', 'w' );
        if ( !isset( $args[0] ) ) {
index 214d9bc..913c19b 100644 (file)
@@ -84,14 +84,14 @@ class CologneBlueTemplate extends LegacyTemplate {
 
                $s .= '<td class="top" nowrap="nowrap">';
                $s .= '<a href="' . htmlspecialchars( $mainPageObj->getLocalURL() ) . '">';
-               $s .= '<span id="sitetitle">' . wfMsg( 'sitetitle' ) . '</span></a>';
+               $s .= '<span id="sitetitle">' . wfMessage( 'sitetitle' )->escaped() . '</span></a>';
 
                $s .= '</td><td class="top" id="top-syslinks" width="100%">';
                $s .= $this->sysLinks();
                $s .= '</td></tr><tr><td class="top-subheader">';
 
                $s .= '<font size="-1"><span id="sitesub">';
-               $s .= htmlspecialchars( wfMsg( 'sitesubtitle' ) ) . '</span></font>';
+               $s .= wfMessage( 'sitesubtitle' )->escaped() . '</span></font>';
                $s .= '</td><td class="top-linkcollection">';
 
                $s .= '<font size="-1"><span id="langlinks">';
@@ -128,15 +128,11 @@ class CologneBlueTemplate extends LegacyTemplate {
 
                $s .= $this->bottomLinks();
                $s .= $this->getSkin()->getLanguage()->pipeList( array(
-                       "\n<br />" . Linker::link(
-                               Title::newMainPage(),
-                               null,
-                               array(),
-                               array(),
-                               array( 'known', 'noclasses' )
+                       "\n<br />" . Linker::linkKnown(
+                               Title::newMainPage()
                        ),
                        $this->getSkin()->aboutLink(),
-                       $this->searchForm( wfMsg( 'qbfind' ) )
+                       $this->searchForm( wfMessage( 'qbfind' )->text() )
                ) );
 
                $s .= "\n<br />" . $this->pageStats();
@@ -167,16 +163,16 @@ class CologneBlueTemplate extends LegacyTemplate {
                $s = array(
                        $this->getSkin()->mainPageLink(),
                        Linker::linkKnown(
-                               Title::newFromText( wfMsgForContent( 'aboutpage' ) ),
-                               wfMsg( 'about' )
+                               Title::newFromText( wfMessage( 'aboutpage' )->inContentLanguage()->text() ),
+                               wfMessage( 'about' )->text()
                        ),
                        Linker::linkKnown(
-                               Title::newFromText( wfMsgForContent( 'helppage' ) ),
-                               wfMsg( 'help' )
+                               Title::newFromText( wfMessage( 'helppage' )->inContentLanguage()->text() ),
+                               wfMessage( 'help' )->text()
                        ),
                        Linker::linkKnown(
-                               Title::newFromText( wfMsgForContent( 'faqpage' ) ),
-                               wfMsg( 'faq' )
+                               Title::newFromText( wfMessage( 'faqpage' )->inContentLanguage()->text() ),
+                               wfMessage( 'faq' )->text()
                        ),
                        Linker::specialLink( 'Specialpages' )
                );
@@ -191,14 +187,14 @@ class CologneBlueTemplate extends LegacyTemplate {
                if ( $this->data['loggedin'] ) {
                        $s[] = Linker::linkKnown(
                                $lo,
-                               wfMsg( 'logout' ),
+                               wfMessage( 'logout' )->text(),
                                array(),
                                $q
                        );
                } else {
                        $s[] = Linker::linkKnown(
                                $li,
-                               wfMsg( 'login' ),
+                               wfMessage( 'login' )->text(),
                                array(),
                                $q
                        );
@@ -257,8 +253,8 @@ class CologneBlueTemplate extends LegacyTemplate {
                        $s .= '<strong>' . $this->editThisPage() . '</strong>';
 
                        $s .= $sep . Linker::linkKnown(
-                               Title::newFromText( wfMsgForContent( 'edithelppage' ) ),
-                               wfMsg( 'edithelp' )
+                               Title::newFromText( wfMessage( 'edithelppage' )->inContentLanguage()->text() ),
+                               wfMessage( 'edithelp' )->text()
                        );
 
                        if( $this->data['loggedin'] ) {
@@ -309,31 +305,22 @@ class CologneBlueTemplate extends LegacyTemplate {
 
                $s .= $this->menuHead( 'qbmyoptions' );
                if ( $this->data['loggedin'] ) {
-                       $tl = Linker::link(
+                       $tl = Linker::linkKnown(
                                $user->getTalkPage(),
-                               wfMsg( 'mytalk' ),
-                               array(),
-                               array(),
-                               array( 'known', 'noclasses' )
+                               wfMessage( 'mytalk' )->escaped()
                        );
                        if ( $user->getNewtalk() ) {
                                $tl .= ' *';
                        }
 
-                       $s .= Linker::link(
+                       $s .= Linker::linkKnown(
                                        $user->getUserPage(),
-                                       wfMsg( 'mypage' ),
-                                       array(),
-                                       array(),
-                                       array( 'known', 'noclasses' )
+                                       wfMessage( 'mypage' )->escaped()
                                ) . $sep . $tl . $sep . Linker::specialLink( 'Watchlist' )
                                        . $sep .
-                               Linker::link(
+                               Linker::linkKnown(
                                        SpecialPage::getSafeTitleFor( 'Contributions', $user->getName() ),
-                                       wfMsg( 'mycontris' ),
-                                       array(),
-                                       array(),
-                                       array( 'known', 'noclasses' )
+                                       wfMessage( 'mycontris' )->escaped()
                                ) . $sep . Linker::specialLink( 'Preferences' )
                                . $sep . Linker::specialLink( 'Userlogout' );
                } else {
@@ -352,15 +339,12 @@ class CologneBlueTemplate extends LegacyTemplate {
 
                if( $wgSiteSupportPage ) {
                        $s .= $sep . '<a href="' . htmlspecialchars( $wgSiteSupportPage ) . '" class="internal">'
-                                       . wfMsg( 'sitesupport' ) . '</a>';
+                                       . wfMessage( 'sitesupport' )->escaped() . '</a>';
                }
 
-               $s .= $sep . Linker::link(
+               $s .= $sep . Linker::linkKnown(
                        SpecialPage::getTitleFor( 'Specialpages' ),
-                       wfMsg( 'moredotdotdot' ),
-                       array(),
-                       array(),
-                       array( 'known', 'noclasses' )
+                       wfMessage( 'moredotdotdot' )->text()
                );
 
                $s .= $sep . "\n</div>\n";
@@ -372,7 +356,7 @@ class CologneBlueTemplate extends LegacyTemplate {
         * @return string
         */
        function menuHead( $key ) {
-               $s = "\n<h6>" . wfMsg( $key ) . "</h6>";
+               $s = "\n<h6>" . wfMessage( $key )->text() . "</h6>";
                return $s;
        }
 
@@ -392,12 +376,12 @@ class CologneBlueTemplate extends LegacyTemplate {
 
                $s .= "<input type='text' id=\"searchInput{$this->searchboxes}\" class=\"mw-searchInput\" name=\"search\" size=\"14\" value=\""
                        . htmlspecialchars( substr( $search, 0, 256 ) ) . "\" /><br />"
-                       . "<input type='submit' id=\"searchGoButton{$this->searchboxes}\" class=\"searchButton\" name=\"go\" value=\"" . htmlspecialchars( wfMsg( 'searcharticle' ) ) . "\" />";
+                       . "<input type='submit' id=\"searchGoButton{$this->searchboxes}\" class=\"searchButton\" name=\"go\" value=\"" . wfMessage( 'searcharticle' )->escaped() . "\" />";
 
                if( $wgUseTwoButtonsSearchForm ) {
-                       $s .= "<input type='submit' id=\"mw-searchButton{$this->searchboxes}\" class=\"searchButton\" name=\"fulltext\" value=\"" . htmlspecialchars( wfMsg( 'search' ) ) . "\" />\n";
+                       $s .= "<input type='submit' id=\"mw-searchButton{$this->searchboxes}\" class=\"searchButton\" name=\"fulltext\" value=\"" . wfMessage( 'search' )->escaped() . "\" />\n";
                } else {
-                       $s .= '<div><a href="' . $action . '" rel="search">' . wfMsg( 'powersearch-legend' ) . "</a></div>\n";
+                       $s .= '<div><a href="' . $action . '" rel="search">' . wfMessage( 'powersearch-legend' )->escaped() . "</a></div>\n";
                }
 
                $s .= '</form>';
index 6e87786..4211bb8 100644 (file)
@@ -77,7 +77,7 @@ class ModernTemplate extends MonoBookTemplate {
        <!-- contentholder does nothing by default, but it allows users to style the text inside
             the content area without affecting the meaning of 'em' in #mw_content, which is used
             for the margins -->
-       <div id="mw_contentholder">
+       <div id="mw_contentholder" class="mw-body">
                <div class='mw-topboxes'>
                        <div id="mw-js-message" style="display:none;"<?php $this->html('userlangattributes')?>></div>
                        <div class="mw-topbox" id="siteSub"><?php $this->msg('tagline') ?></div>
index 5c7ca14..0bd7134 100644 (file)
@@ -80,7 +80,7 @@ class MonoBookTemplate extends BaseTemplate {
 
                $this->html( 'headelement' );
 ?><div id="globalWrapper">
-<div id="column-content"><div id="content">
+<div id="column-content"><div id="content" class="mw-body-primary">
        <a id="top"></a>
        <?php if($this->data['sitenotice']) { ?><div id="siteNotice"><?php $this->html('sitenotice') ?></div><?php } ?>
 
index 98437e2..c3f73e5 100644 (file)
@@ -99,8 +99,8 @@ class NostalgiaTemplate extends LegacyTemplate {
                } else {
                        /* show user page and user talk links */
                        $user = $this->getSkin()->getUser();
-                       $s .= $sep . Linker::link( $user->getUserPage(), wfMsgHtml( 'mypage' ) );
-                       $s .= $sep . Linker::link( $user->getTalkPage(), wfMsgHtml( 'mytalk' ) );
+                       $s .= $sep . Linker::link( $user->getUserPage(), wfMessage( 'mypage' )->escaped() );
+                       $s .= $sep . Linker::link( $user->getTalkPage(), wfMessage( 'mytalk' )->escaped() );
                        if ( $user->getNewtalk() ) {
                                $s .= ' *';
                        }
@@ -109,7 +109,7 @@ class NostalgiaTemplate extends LegacyTemplate {
                        /* show my contributions link */
                        $s .= $sep . Linker::link(
                                SpecialPage::getSafeTitleFor( 'Contributions', $this->data['username'] ),
-                               wfMsgHtml( 'mycontris' ) );
+                               wfMessage( 'mycontris' )->escaped() );
                        /* show my preferences link */
                        $s .= $sep . Linker::specialLink( 'Preferences' );
                        /* show upload file link */
index d06bdfd..9a3ab94 100644 (file)
@@ -26,7 +26,7 @@ if( !defined( 'MEDIAWIKI' ) )
        die( -1 );
 
 /** */
-require_once( dirname(__FILE__) . '/MonoBook.php' );
+require_once( __DIR__ . '/MonoBook.php' );
 
 /**
  * Inherit main code from SkinTemplate, set the CSS and template filter.
index 1114e7d..5461309 100644 (file)
@@ -67,7 +67,7 @@ class StandardTemplate extends LegacyTemplate {
                wfProfileOut( __METHOD__ . '-1' );
                wfProfileIn( __METHOD__ . '-2' );
                $l = $this->getSkin()->getLanguage()->alignStart();
-               $s .= "<td class='bottom' align='$l' valign='top'>";
+               $s .= "<td class='bottom' style='text-align: $l; vertical-align: top;'>";
 
                $s .= $this->bottomLinks();
                $s .= "\n<br />" . $this->getSkin()->getLanguage()->pipeList( array(
@@ -133,7 +133,7 @@ class StandardTemplate extends LegacyTemplate {
                                        $s.= Linker::specialLink( 'Watchlist' ) ;
                                        $s .= $sep . Linker::linkKnown(
                                                SpecialPage::getTitleFor( 'Contributions' ),
-                                               wfMsg( 'mycontris' ),
+                                               wfMessage( 'mycontris' )->escaped(),
                                                array(),
                                                array( 'target' => $this->data['username'] )
                                        );
@@ -158,34 +158,34 @@ class StandardTemplate extends LegacyTemplate {
                                                case NS_TEMPLATE_TALK:
                                                case NS_HELP_TALK:
                                                case NS_CATEGORY_TALK:
-                                                       $text = wfMsg('viewtalkpage');
+                                                       $text = wfMessage('viewtalkpage');
                                                        break;
                                                case NS_MAIN:
-                                                       $text = wfMsg( 'articlepage' );
+                                                       $text = wfMessage( 'articlepage' );
                                                        break;
                                                case NS_USER:
-                                                       $text = wfMsg( 'userpage' );
+                                                       $text = wfMessage( 'userpage' );
                                                        break;
                                                case NS_PROJECT:
-                                                       $text = wfMsg( 'projectpage' );
+                                                       $text = wfMessage( 'projectpage' );
                                                        break;
                                                case NS_FILE:
-                                                       $text = wfMsg( 'imagepage' );
+                                                       $text = wfMessage( 'imagepage' );
                                                        break;
                                                case NS_MEDIAWIKI:
-                                                       $text = wfMsg( 'mediawikipage' );
+                                                       $text = wfMessage( 'mediawikipage' );
                                                        break;
                                                case NS_TEMPLATE:
-                                                       $text = wfMsg( 'templatepage' );
+                                                       $text = wfMessage( 'templatepage' );
                                                        break;
                                                case NS_HELP:
-                                                       $text = wfMsg( 'viewhelppage' );
+                                                       $text = wfMessage( 'viewhelppage' );
                                                        break;
                                                case NS_CATEGORY:
-                                                       $text = wfMsg( 'categorypage' );
+                                                       $text = wfMessage( 'categorypage' );
                                                        break;
                                                default:
-                                                       $text = wfMsg( 'articlepage' );
+                                                       $text = wfMessage( 'articlepage' );
                                        }
 
                                        $link = $title->getText();
@@ -194,11 +194,11 @@ class StandardTemplate extends LegacyTemplate {
                                                $link = $nstext . ':' . $link;
                                        }
 
-                                       $s .= Linker::link( Title::newFromText( $link ), $text );
+                                       $s .= Linker::link( Title::newFromText( $link ), $text->escaped() );
                                } elseif( $title->getNamespace() != NS_SPECIAL ) {
                                        # we just throw in a "New page" text to tell the user that he's in edit mode,
                                        # and to avoid messing with the separator that is prepended to the next item
-                                       $s .= '<strong>' . wfMsg( 'newpage' ) . '</strong>';
+                                       $s .= '<strong>' . wfMessage( 'newpage' )->escaped() . '</strong>';
                                }
                        }
 
@@ -206,7 +206,7 @@ class StandardTemplate extends LegacyTemplate {
                        if( ( $title->isTalkPage() || $this->getSkin()->getOutput()->showNewSectionLink() ) && $action != 'edit' && !$wpPreview )
                                $s .= '<br />' . Linker::link(
                                        $title,
-                                       wfMsg( 'postcomment' ),
+                                       wfMessage( 'postcomment' )->escaped(),
                                        array(),
                                        array(
                                                'action' => 'edit',
@@ -268,12 +268,11 @@ class StandardTemplate extends LegacyTemplate {
                global $wgSiteSupportPage;
                if( $wgSiteSupportPage ) {
                        $s .= "\n<br /><a href=\"" . htmlspecialchars( $wgSiteSupportPage ) .
-                       '" class="internal">' . wfMsg( 'sitesupport' ) . '</a>';
+                       '" class="internal">' . wfMessage( 'sitesupport' )->escaped() . '</a>';
                }
 
                $s .= "\n<br /></div>\n";
                wfProfileOut( __METHOD__ );
                return $s;
        }
-
 }
index f82f45d..3497423 100644 (file)
Binary files a/skins/common/images/add.png and b/skins/common/images/add.png differ
index 3288d10..72203fd 100644 (file)
Binary files a/skins/common/images/ajax-loader.gif and b/skins/common/images/ajax-loader.gif differ
index 37d3a43..6146be4 100644 (file)
Binary files a/skins/common/images/spinner.gif and b/skins/common/images/spinner.gif differ
index 9e76ca0..c88272d 100644 (file)
 /**
  * Live preview script for MediaWiki
  */
-(function( $ ) {
-       window.doLivePreview = function( e ) {
+( function( mw, $ ) {
+       var doLivePreview = function( e ) {
                e.preventDefault();
 
                $( mw ).trigger( 'LivePreviewPrepare' );
 
-               var postData = $('#editform').formToArray();
-               postData.push( { 'name' : 'wpPreview', 'value' : '1' } );
+               var $wikiPreview = $( '#wikiPreview' );
 
-               // Hide active diff, used templates, old preview if shown
-               var copyElements = ['#wikiPreview', '.templatesUsed', '.hiddencats',
-                                                       '#catlinks'];
-               var copySelector = copyElements.join(',');
-
-               $.each( copyElements, function(k,v) { $(v).fadeOut('fast'); } );
-
-               // Display a loading graphic
-               var loadSpinner = $('<div class="mw-ajax-loader"/>');
-               $('#wikiPreview').before( loadSpinner );
-
-               var page = $('<div/>');
-               var target = $('#editform').attr('action');
-
-               if ( !target ) {
-                       target = window.location.href;
+               // this needs to be checked before we unconditionally show the preview
+               var overlaySpinner = false;
+               if ( $wikiPreview.is( ':visible' ) || $( '.mw-newarticletext:visible' ).length > 0 ) {
+                       overlaySpinner = true;
                }
 
-               page.load( target + ' ' + copySelector, postData,
-                       function() {
-
-                               for( var i=0; i<copyElements.length; ++i) {
-                                       // For all the specified elements, find the elements in the loaded page
-                                       //  and the real page, empty the element in the real page, and fill it
-                                       //  with the content of the loaded page
-                                       var copyContent = page.find( copyElements[i] ).contents();
-                                       $(copyElements[i]).empty().append( copyContent );
-                                       var newClasses = page.find( copyElements[i] ).prop('class');
-                                       $(copyElements[i]).prop( 'class', newClasses );
-                               }
+               // show #wikiPreview if it's hidden to be able to scroll to it
+               // (if it is hidden, it's also empty, so nothing changes in the rendering)
+               $wikiPreview.show();
+               // jump to where the preview will appear
+               $wikiPreview[0].scrollIntoView();
+
+               // list of elements that will be loaded from the preview page
+               // elements absent in the preview page (such as .mw-newarticletext) will be cleared using .empty()
+               var copySelectors = [
+                       '#wikiPreview', '#wikiDiff', '#catlinks', '.hiddencats', '#p-lang', // the meat
+                       '.templatesUsed', '.mw-summary-preview', // editing-related
+                       '.mw-newarticletext' // it is not shown during normal preview, and looks weird with throbber overlaid
+               ];
+               var $copyElements = $( copySelectors.join( ',' ) );
+
+               var $loadSpinner = $( '<div>' ).addClass( 'mw-ajax-loader' );
+               $loadSpinner.css( 'top', '0' ); // move away from header (default is -16px)
+
+               // If the preview is already visible, overlay the spinner on top of it.
+               if ( overlaySpinner ) {
+                       $( '#mw-content-text' ).css( 'position', 'relative' ); // FIXME this seems like a bad idea
+
+                       $loadSpinner.css( {
+                               'position': 'absolute',
+                               'z-index': '3',
+                               'left': '50%',
+                               'margin-left': '-16px'
+                       } );
+               }
 
-                               $.each( copyElements, function(k,v) {
-                                       // Don't belligerently show elements that are supposed to be hidden
-                                       $(v).fadeIn( 'fast', function() { $(this).css('display', ''); } );
-                               } );
+               // fade out the elements and display the throbber
+               $( '#mw-content-text' ).prepend( $loadSpinner );
+               // we can't use fadeTo because it calls show(), and we might want to keep some elements hidden
+               // (e.g. empty #catlinks)
+               $copyElements.animate( { 'opacity': 0.4 }, 'fast' );
+
+               var $previewDataHolder = $( '<div>' );
+               var target = $( '#editform' ).attr( 'action' ) || window.location.href;
+
+               // gather all the data from the form
+               var postData = $( '#editform' ).formToArray(); // formToArray: from jquery.form
+               postData.push( { 'name' : e.target.name, 'value' : '1' } );
+
+               // load new preview data
+               // FIXME this should use the action=parse API instead of loading the entire page
+               $previewDataHolder.load( target + ' ' + copySelectors.join( ',' ), postData, function() {
+                       // Copy the contents of the specified elements from the loaded page to the real page.
+                       // Also copy their class attributes.
+                       for ( var i = 0; i < copySelectors.length; i++ ) {
+                               var $from = $previewDataHolder.find( copySelectors[i] );
+                               var $to = $( copySelectors[i] );
+
+                               $to.empty().append( $from.contents() );
+                               $to.attr( 'class', $from.attr( 'class' ) );
+                       }
 
-                               loadSpinner.remove();
+                       $loadSpinner.remove();
+                       $copyElements.animate( { 'opacity': 1 }, 'fast' );
 
-                               $( mw ).trigger( 'LivePreviewDone', [copyElements] );
-                       } );
+                       $( mw ).trigger( 'LivePreviewDone', [copySelectors] );
+               } );
        };
 
-       // Shamelessly stolen from the jQuery form plugin, which is licensed under the GPL.
-       // http://jquery.malsup.com/form/#download
-       $.fn.formToArray = function() {
-               var a = [];
-               if (this.length == 0) return a;
-
-               var form = this[0];
-               var els = form.elements;
-               if (!els) return a;
-               for(var i=0, max=els.length; i < max; i++) {
-                       var el = els[i];
-                       var n = el.name;
-                       if (!n) continue;
-
-                       var v = $.fieldValue(el, true);
-                       if (v && v.constructor == Array) {
-                               for(var j=0, jmax=v.length; j < jmax; j++)
-                                       a.push({name: n, value: v[j]});
-                       }
-                       else if (v !== null && typeof v != 'undefined')
-                               a.push({name: n, value: v});
+       $( document ).ready( function() {
+               // construct the elements we need if they are missing (usually when action=edit)
+               // we don't need to hide them, because they are empty when created
+
+               // interwiki links
+               if ( !document.getElementById( 'p-lang' ) && document.getElementById( 'p-tb' ) ) {
+                       $( '#p-tb' ).after( $( '<div>' ).attr( 'id', 'p-lang' ) );
                }
 
-               if (form.clk) {
-                       // input type=='image' are not found in elements array! handle it here
-                       var $input = $(form.clk), input = $input[0], n = input.name;
-                       if (n && !input.disabled && input.type == 'image') {
-                               a.push({name: n, value: $input.val()});
-                               a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y});
-                       }
+               // summary preview
+               if ( $( '.mw-summary-preview' ).length === 0 ) {
+                       $( '.editCheckboxes' ).before( $( '<div>' ).addClass( 'mw-summary-preview' ) );
                }
-               return a;
-       };
 
-       /**
-        * Returns the value of the field element.
-        */
-       $.fieldValue = function(el, successful) {
-               var n = el.name, t = el.type, tag = el.tagName.toLowerCase();
-               if (typeof successful == 'undefined') successful = true;
-
-               if (successful && (!n || el.disabled || t == 'reset' || t == 'button' ||
-                       (t == 'checkbox' || t == 'radio') && !el.checked ||
-                       (t == 'submit' || t == 'image') && el.form && el.form.clk != el ||
-                       tag == 'select' && el.selectedIndex == -1))
-                               return null;
-
-               if (tag == 'select') {
-                       var index = el.selectedIndex;
-                       if (index < 0) return null;
-                       var a = [], ops = el.options;
-                       var one = (t == 'select-one');
-                       var max = (one ? index+1 : ops.length);
-                       for(var i=(one ? index : 0); i < max; i++) {
-                               var op = ops[i];
-                               if (op.selected) {
-                                       var v = op.value;
-                                       if (!v) // extra pain for IE...
-                                               v = (op.attributes && op.attributes['value'] &&
-                                                       !(op.attributes['value'].specified))
-                                                               ? op.text : op.value;
-                                       if (one) return v;
-                                       a.push(v);
-                               }
-                       }
-                       return a;
+               // diff
+               if ( !document.getElementById( 'wikiDiff' ) && document.getElementById( 'wikiPreview' ) ) {
+                       $( '#wikiPreview' ).after( $( '<div>' ).attr( 'id', 'wikiDiff' ) );
                }
-               return el.value;
-       };
 
-       $(document).ready( function() {
-               $('#wpPreview').click( doLivePreview );
+               // diff styles are usually only loaded during, well, diff, and we might need them
+               // (mw.loader takes care of stuff if they happen to be loaded already)
+               mw.loader.load( 'mediawiki.action.history.diff' );
+
+               $( '#wpPreview, #wpDiff' ).click( doLivePreview );
        } );
-}) ( jQuery );
+} )( mediaWiki, jQuery );
index 8c35626..4cc0ad3 100644 (file)
@@ -121,16 +121,6 @@ span.texhtml {
        cursor: pointer;
 }
 
-div#mw-js-message {
-       margin: 1em 5%;
-       padding: 0.5em 2.5%;
-       border: solid 1px #ddd;
-       background-color: #fcfcfc;
-       /* Message hides on-click */
-       /* See also mw.util.jsMessage */
-       cursor: pointer;
-}
-
 /* Edit section links */
 /* Correct directionality when page dir is different from site/user dir */
 /* @noflip */
@@ -260,6 +250,7 @@ tr.mw-htmlform-vertical-label td.mw-label {
 
 input#wpSummary {
        width: 80%;
+       margin: 1em 0;
 }
 
 /**
index 8e08af3..df819e1 100644 (file)
@@ -1,4 +1,4 @@
-( function () {
+( function ( mw, $ ) {
 var    ajaxUploadDestCheck = mw.config.get( 'wgAjaxUploadDestCheck' ),
        fileExtensions = mw.config.get( 'wgFileExtensions' );
 
@@ -241,10 +241,17 @@ window.fillDestFilename = function(id) {
        }
 
        // Output result
-       var destFile = document.getElementById('wpDestFile');
-       if (destFile) {
-               destFile.value = fname;
-               wgUploadWarningObj.checkNow(fname) ;
+       var destFile = document.getElementById( 'wpDestFile' );
+       if ( destFile ) {
+               // Call decodeURIComponent function to remove possible URL-encoded characters
+               // from the file name (bug 30390). Especially likely with upload-form-url.
+               // decodeURIComponent can throw an exception in input is invalid utf-8
+               try {
+                       destFile.value = decodeURIComponent( fname );
+               } catch ( e ) {
+                       destFile.value = fname;
+               }
+               wgUploadWarningObj.checkNow( fname );
        }
 };
 
@@ -302,4 +309,4 @@ window.wgUploadLicenseObj = {
 
 $( document ).ready( uploadSetup );
 
-}() );
+}( mediaWiki, jQuery ) );
index 6526e8b..563bd74 100644 (file)
@@ -515,11 +515,8 @@ window.redirectToFragment = function( fragment ) {
  * Add a cute little box at the top of the screen to inform the user of
  * something, replacing any preexisting message.
  *
- * @deprecated since 1.17 Use mw.util.jsMessage instead.
+ * @deprecated since 1.17 Use mw.util.notify instead.
  * @param {String|HTMLElement} message To be put inside the message box.
- * @param {String} className Used in adding a class; Can be used to selectively
- *  apply CSS to a certain category of messages.  null = no class used.
- * @return {Boolean} True on success, false on failure
  */
 window.jsMsg = function () {
        return mw.util.jsMessage.apply( mw.util, arguments );
index 0566e98..5866d97 100644 (file)
@@ -840,7 +840,7 @@ div#searchTargetHide {
 }
 
 #powersearch p {
-       margin-top:0px;
+       margin-top: 0;
 }
 
 div.multipageimagenavbox {
@@ -914,16 +914,9 @@ div.mw-lag-warn-high {
        font-size: 127%;
 }
 
-/* jsMessage */
-
-div#mw-js-message {
-       position: absolute;
-       margin: 0;
-       padding: 0.25em 1em;
-       right: 1em;
-       top: 1em;
-       width: 20em;
-       z-index: 10000;
-       -webkit-box-shadow: 0px 2px 5px 0px rgba(0, 0, 0, 0.125);
-       box-shadow: 0px 2px 5px 0px rgba(0, 0, 0, 0.125);
+/* mediawiki.notification */
+.skin-monobook .mw-notification {
+       -webkit-box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.125);
+       -moz-box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.125);
+       box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.125);
 }
index 061e58a..4069d9e 100644 (file)
@@ -149,7 +149,7 @@ div.vectorTabs ul li {
        background-image: url(images/tab-normal-fade.png);
        background-position: bottom left;
        background-repeat: repeat-x;
-       white-space:nowrap;
+       white-space: nowrap;
 }
 /* IGNORED BY IE6 */
 div.vectorTabs ul > li {
@@ -784,24 +784,24 @@ div#content a.external[href *=".pdf?"], div#content a.external[href *=".PDF?"],
        position: relative;
        width: 100%;
 }
-div#mw-js-message {
+div#bodyContent {
+       line-height: 1.5em;
+}
+
+/* mediawiki.notification */
+.skin-vector #mw-notification-area {
+       top: 7em;
+       font-size: 0.8em;
+}
+.skin-vector .mw-notification {
        background-color: #fff;
        background-color: rgba(255, 255, 255, 0.93);
-       font-size: 0.8em;
-       position: absolute;
-       margin: 0;
-       padding: 1em 2em;
-       right: 1em;
-       top: 7em;
-       width: 20em;
-       z-index: 10000;
+       padding: 0.75em 1.5em;
        border: solid 1px #a7d7f9;
        border-radius: 0.75em;
-       -webkit-box-shadow: 0px 2px 10px 0px rgba(0, 0, 0, 0.125);
-       box-shadow: 0px 2px 10px 0px rgba(0, 0, 0, 0.125);
-}
-div#bodyContent {
-       line-height: 1.5em;
+       -webkit-box-shadow: 0 2px 10px 0 rgba(0, 0, 0, 0.125);
+       -moz-box-shadow: 0 2px 10px 0 rgba(0, 0, 0, 0.125);
+       box-shadow: 0 2px 10px 0 rgba(0, 0, 0, 0.125);
 }
 
 /* Watch/Unwatch Icon Styling */
@@ -848,9 +848,9 @@ div#bodyContent {
 }
 div.vectorTabs ul {
        /* @embed */
-       background-image:url(images/tab-break.png);
-       background-position:right bottom;
-       background-repeat:no-repeat;
+       background-image: url(images/tab-break.png);
+       background-position: right bottom;
+       background-repeat: no-repeat;
 }
 
 /* Tooltips are outside of the normal body code, so this helps make the size of the text sensible */
@@ -862,39 +862,39 @@ div.vectorTabs ul {
 
 body.vector-animateLayout div#content,
 body.vector-animateLayout div#footer {
-       transition: margin-left 250ms, padding 250ms;
        -moz-transition: margin-left 250ms, padding 250ms;
        -webkit-transition: margin-left 250ms, padding 250ms;
        -o-transition: margin-left 250ms, padding 250ms;
+       transition: margin-left 250ms, padding 250ms;
 }
 body.vector-animateLayout #p-logo,
 body.vector-animateLayout #left-navigation {
-       transition: left 250ms;
        -moz-transition: left 250ms;
        -webkit-transition: left 250ms;
        -o-transition: left 250ms;
+       transition: left 250ms;
 }
 body.vector-animateLayout #mw-panel {
-       transition: padding-left 250ms;
        -moz-transition: padding-left 250ms;
        -webkit-transition: padding-left 250ms;
        -o-transition: padding-left 250ms;
+       transition: padding-left 250ms;
 }
 body.vector-animateLayout #p-search {
-       transition: margin-right 250ms;
        -moz-transition: margin-right 250ms;
        -webkit-transition: margin-right 250ms;
        -o-transition: margin-right 250ms;
+       transition: margin-right 250ms;
 }
 body.vector-animateLayout #p-personal {
-       transition: right 250ms;
        -moz-transition: right 250ms;
        -webkit-transition: right 250ms;
        -o-transition: right 250ms;
+       transition: right 250ms;
 }
 body.vector-animateLayout #mw-head-base {
-       transition: margin-left 250ms;
        -moz-transition: margin-left 250ms;
        -webkit-transition: margin-left 250ms;
        -o-transition: margin-left 250ms;
+       transition: margin-left 250ms;
 }
index 9cadd75..28501ea 100644 (file)
  * http://www.gnu.org/copyleft/gpl.html
  */
 
-$IP = dirname( dirname( __FILE__ ) );
+$IP = dirname( __DIR__ );
 
 define( 'SELENIUMTEST', true );
 
-//require_once( dirname( __FILE__ ) . '/../maintenance/commandLine.inc' );
-require( dirname( __FILE__ ) . '/../maintenance/Maintenance.php' );
+//require_once( __DIR__ . '/../maintenance/commandLine.inc' );
+require( __DIR__ . '/../maintenance/Maintenance.php' );
 
 require_once( 'PHPUnit/Runner/Version.php' );
 if( version_compare( PHPUnit_Runner_Version::id(), '3.5.0', '>=' ) ) {
@@ -43,7 +43,7 @@ if( version_compare( PHPUnit_Runner_Version::id(), '3.5.0', '>=' ) ) {
 require_once( 'PHPUnit/Extensions/SeleniumTestCase.php' );
 include_once( 'PHPUnit/Util/Log/JUnit.php' );
 
-require_once( dirname( __FILE__ ) . "/selenium/SeleniumServerManager.php" );
+require_once( __DIR__ . "/selenium/SeleniumServerManager.php" );
 
 class SeleniumTester extends Maintenance {
        protected $selenium;
index 3125284..cb5ca36 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 
 global $wgAutoloadClasses;
-$testFolder = dirname( __FILE__ );
+$testFolder = __DIR__;
 
 $wgAutoloadClasses += array(
 
@@ -13,7 +13,6 @@ $wgAutoloadClasses += array(
 
        //includes
        'BlockTest' => "$testFolder/phpunit/includes/BlockTest.php",
-       'MockOutputPage' => "$testFolder/phpunit/includes/MockOutputPage.php",
 
        //API
        'ApiFormatTestBase' => "$testFolder/phpunit/includes/api/format/ApiFormatTestBase.php",
index 9d75be4..4301587 100644 (file)
@@ -14,7 +14,7 @@
  *
  */ 
 
-$maintenanceDir = dirname( dirname( dirname( dirname( dirname( __FILE__ ) ) ) ) ) . '/maintenance';
+$maintenanceDir = dirname( dirname( dirname( dirname( __DIR__ ) ) ) ) . '/maintenance';
 
 require( "$maintenanceDir/Maintenance.php" );
 
index 23067c1..c418116 100644 (file)
@@ -2442,6 +2442,21 @@ Link with double quotes in title part (literal) and alternate part (interpreted)
 </p>
 !! end
 
+!! test
+Broken image links with HTML captions (bug 39700)
+!! input
+[[File:Nonexistent|<script></script>]]
+[[File:Nonexistent|100px|<script></script>]]
+[[File:Nonexistent|&lt;]]
+[[File:Nonexistent|a<i>b</i>c]]
+!! result
+<p><a href="/index.php?title=Special:Upload&amp;wpDestFile=Nonexistent" class="new" title="File:Nonexistent">&lt;script&gt;&lt;/script&gt;</a>
+<a href="/index.php?title=Special:Upload&amp;wpDestFile=Nonexistent" class="new" title="File:Nonexistent">&lt;script&gt;&lt;/script&gt;</a>
+<a href="/index.php?title=Special:Upload&amp;wpDestFile=Nonexistent" class="new" title="File:Nonexistent">&lt;</a>
+<a href="/index.php?title=Special:Upload&amp;wpDestFile=Nonexistent" class="new" title="File:Nonexistent">abc</a>
+</p>
+!! end
+
 !! test
 Plain link to URL
 !! input
@@ -4984,6 +4999,15 @@ Bug 3090: External links other than http: in image captions
 
 !! end
 
+!! test
+Custom class
+!! input
+[[Image:foobar.jpg|a|class=b]]
+!! result
+<p><a href="/wiki/File:Foobar.jpg" class="image" title="a"><img alt="a" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" class="b" /></a>
+</p>
+!! end
+
 !! article 
 File:Barfoo.jpg
 !! text
@@ -10319,6 +10343,33 @@ abc
 </p>
 !! end
 
+!!test
+Bug 34939 - Case insensitive link parsing ([HttP://])
+!! input
+[HttP://MediaWiki.Org/]
+!! result
+<p><a rel="nofollow" class="external autonumber" href="HttP://MediaWiki.Org/">[1]</a>
+</p>
+!! end
+
+!!test
+Bug 34939 - Case insensitive link parsing ([HttP:// title])
+!! input
+[HttP://MediaWiki.Org/ MediaWiki]
+!! result
+<p><a rel="nofollow" class="external text" href="HttP://MediaWiki.Org/">MediaWiki</a>
+</p>
+!! end
+
+!!test
+Bug 34939 - Case insensitive link parsing (HttP://)
+!! input
+HttP://MediaWiki.Org/
+!! result
+<p><a rel="nofollow" class="external free" href="HttP://MediaWiki.Org/">HttP://MediaWiki.Org/</a>
+</p>
+!! end
+
 
 TODO:
 more images
index d930ac5..4df9a61 100644 (file)
@@ -27,7 +27,7 @@
 $otions = array( 'quick', 'color', 'quiet', 'help', 'show-output', 'record', 'run-disabled' );
 $optionsWithArgs = array( 'regex', 'filter', 'seed', 'setversion' );
 
-require_once( dirname( __FILE__ ) . '/../maintenance/commandLine.inc' );
+require_once( __DIR__ . '/../maintenance/commandLine.inc' );
 
 if ( isset( $options['help'] ) ) {
        echo <<<ENDS
index ea385ad..fca3251 100644 (file)
@@ -37,7 +37,7 @@ class MediaWikiPHPUnitCommand extends PHPUnit_TextUI_Command {
                # PHPUnit uses stream_resolve_include_path() internally
                # See bug 32022
                set_include_path(
-                       dirname( __FILE__ )
+                       __DIR__
                        .PATH_SEPARATOR
                        . get_include_path()
                );
index c873c51..bfad334 100644 (file)
@@ -115,7 +115,7 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
        }
 
        protected function tearDown() {
-               // Cleaning up temoporary files
+               // Cleaning up temporary files
                foreach ( $this->tmpfiles as $fname ) {
                        if ( is_file( $fname ) || ( is_link( $fname ) ) ) {
                                unlink( $fname );
@@ -124,6 +124,13 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                        }
                }
 
+               // clean up open transactions
+               if( $this->needsDB() && $this->db ) {
+                       while( $this->db->trxLevel() > 0 ) {
+                               $this->db->rollback();
+                       }
+               }
+
                parent::tearDown();
        }
 
@@ -434,6 +441,25 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                );
        }
 
+       /**
+        * Put each HTML element on its own line and then equals() the results
+        *
+        * Use for nicely formatting of PHPUnit diff output when comparing very
+        * simple HTML
+        *
+        * @since 1.20
+        *
+        * @param String $expected HTML on oneline
+        * @param String $actual HTML on oneline
+        * @param String $msg Optional message
+        */
+       protected function assertHTMLEquals( $expected, $actual, $msg='' ) {
+               $expected = str_replace( '>', ">\n", $expected );
+               $actual   = str_replace( '>', ">\n", $actual   );
+
+               $this->assertEquals( $expected, $actual, $msg );
+       }
+
        /**
         * Does an associative sort that works for objects.
         *
index 08eb50f..933767e 100644 (file)
@@ -11,7 +11,7 @@ if ( !defined( 'MW_PHPUNIT_TEST' ) ) {
 You are running these tests directly from phpunit. You may not have all globals correctly set.
 Running phpunit.php instead is recommended.
 EOF;
-       require_once ( dirname( __FILE__ ) . "/phpunit.php" );
+       require_once ( __DIR__ . "/phpunit.php" );
 }
 
 // Output a notice when running with older versions of PHPUnit
index f99b484..4013734 100644 (file)
Binary files a/tests/phpunit/data/media/exif-gps.jpg and b/tests/phpunit/data/media/exif-gps.jpg differ
diff --git a/tests/phpunit/data/xmp/gps.result.php b/tests/phpunit/data/xmp/gps.result.php
new file mode 100644 (file)
index 0000000..2d1243d
--- /dev/null
@@ -0,0 +1,12 @@
+<?php
+
+$result = array( 'xmp-exif' =>
+       array(
+               'GPSAltitude' => -3.14159265301,
+               'GPSDOP' => '5/1',
+               'GPSLatitude' => 88.51805555,
+               'GPSLongitude' => -21.12356945,
+               'GPSVersionID' => '2.2.0.0'
+        )
+);
+
diff --git a/tests/phpunit/data/xmp/gps.xmp b/tests/phpunit/data/xmp/gps.xmp
new file mode 100644 (file)
index 0000000..e52d2c8
--- /dev/null
@@ -0,0 +1,17 @@
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
+<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Image::ExifTool 7.30'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'>
+
+ <rdf:Description rdf:about=''
+  xmlns:exif='http://ns.adobe.com/exif/1.0/'>
+  <exif:GPSAltitude>103993/33102</exif:GPSAltitude>
+  <exif:GPSAltitudeRef>1</exif:GPSAltitudeRef>
+  <exif:GPSDOP>5/1</exif:GPSDOP>
+  <exif:GPSLatitude>88,31.083333N</exif:GPSLatitude>
+  <exif:GPSLongitude>21,7.414167W</exif:GPSLongitude>
+  <exif:GPSVersionID>2.2.0.0</exif:GPSVersionID>
+ </rdf:Description>
+
+</rdf:RDF>
+</x:xmpmeta>
+<?xpacket end='w'?>
index a9088cb..903a6d2 100644 (file)
@@ -21,6 +21,8 @@ class ExtraParserTest extends MediaWikiTestCase {
                $this->options = new ParserOptions;
                $this->options->setTemplateCallback( array( __CLASS__, 'statelessFetchTemplate' ) );
                $this->parser = new Parser;
+
+               MagicWord::clearCache();
        }
 
        // Bug 8689 - Long numeric lines kill the parser
@@ -146,7 +148,7 @@ class ExtraParserTest extends MediaWikiTestCase {
         */
        function testTrackingCategory() {
                $title = Title::newFromText( __FUNCTION__ );
-               $catName =  wfMsgForContent( 'broken-file-category' );
+               $catName =  wfMessage( 'broken-file-category' )->inContentLanguage()->text();
                $cat = Title::makeTitleSafe( NS_CATEGORY, $catName );
                $expected = array( $cat->getDBkey() );
                $parserOutput = $this->parser->parse( "[[file:nonexistent]]" , $title, $this->options );
index 746add5..9097d30 100644 (file)
@@ -108,7 +108,7 @@ class GlobalTest extends MediaWikiTestCase {
                        array( array( 'foo' => 1 ), 'foo=1' ), // number test
                        array( array( 'foo' => true ), 'foo=1' ), // true test
                        array( array( 'foo' => false ), '' ), // false test
-                       array( array( 'foo' => null ), 'foo' ), // null test
+                       array( array( 'foo' => null ), '' ), // null test
                        array( array( 'foo' => 'A&B=5+6@!"\'' ), 'foo=A%26B%3D5%2B6%40%21%22%27' ), // urlencoding test
                        array( array( 'foo' => 'bar', 'baz' => 'is', 'asdf' => 'qwerty' ), 'foo=bar&baz=is&asdf=qwerty' ), // multi-item test
                        array( array( 'foo' => array( 'bar' => 'baz' ) ), 'foo%5Bbar%5D=baz' ),
@@ -311,7 +311,7 @@ class GlobalTest extends MediaWikiTestCase {
        
        function testDebugFunctionTest() {
        
-               global $wgDebugLogFile, $wgOut, $wgShowDebug, $wgDebugTimestamps;
+               global $wgDebugLogFile, $wgDebugTimestamps;
                
                $old_log_file = $wgDebugLogFile;
                $wgDebugLogFile = tempnam( wfTempDir(), 'mw-' );
@@ -333,33 +333,7 @@ class GlobalTest extends MediaWikiTestCase {
                wfDebug( "\00305This has böth UTF and control chars\003" );
                $this->assertEquals( " 05This has böth UTF and control chars ", file_get_contents( $wgDebugLogFile ) );
                unlink( $wgDebugLogFile );
-               
-               
-               
-               $old_wgOut = $wgOut;
-               $old_wgShowDebug = $wgShowDebug;
-               
-               $wgOut = new MockOutputPage;
-               
-               $wgShowDebug = true;
-               
-               $message = "\00305This has böth UTF and control chars\003";
-               
-               wfDebug( $message );
-               
-               if( $wgOut->message == "JAJA is a stupid error message. Anyway, here's your message: $message" ) {
-                       $this->assertTrue( true, 'MockOutputPage called, set the proper message.' );
-               }
-               else {
-                       $this->assertTrue( false, 'MockOutputPage was not called.' );
-               }
-               
-               $wgOut = $old_wgOut;
-               $wgShowDebug = $old_wgShowDebug;                
-               unlink( $wgDebugLogFile );
-               
-               
-               
+
                wfDebugMem();
                $this->assertGreaterThan( 5000, preg_replace( '/\D/', '', file_get_contents( $wgDebugLogFile ) ) );
                unlink( $wgDebugLogFile );
index 8b019d7..0dd85c1 100644 (file)
@@ -6,15 +6,18 @@ class HtmlTest extends MediaWikiTestCase {
        private static $oldContLang;
        private static $oldLanguageCode;
        private static $oldNamespaces;
+       private static $oldHTML5;
 
        public function setUp() {
-               global $wgLang, $wgContLang, $wgLanguageCode;
-               
+               global $wgLang, $wgContLang, $wgLanguageCode, $wgHTML5;
+
+               // Save globals
                self::$oldLang = $wgLang;
                self::$oldContLang = $wgContLang;
                self::$oldNamespaces = $wgContLang->getNamespaces();
                self::$oldLanguageCode = $wgLanguageCode;
-               
+               self::$oldHTML5 = $wgHTML5;
+
                $wgLanguageCode = 'en';
                $wgContLang = $wgLang = Language::factory( $wgLanguageCode );
 
@@ -42,14 +45,35 @@ class HtmlTest extends MediaWikiTestCase {
                        101  => 'Custom_talk',
                ) );
        }
-       
+
        public function tearDown() {
-               global $wgLang, $wgContLang, $wgLanguageCode;
+               global $wgLang, $wgContLang, $wgLanguageCode, $wgHTML5;
 
+               // Restore globals
                $wgContLang->setNamespaces( self::$oldNamespaces );
                $wgLang = self::$oldLang;
                $wgContLang = self::$oldContLang;
                $wgLanguageCode = self::$oldLanguageCode;
+               $wgHTML5 = self::$oldHTML5;
+       }
+
+       /**
+        * Wrapper to easily set $wgHTML5 = true.
+        * Original value will be restored after test completion.
+        * @todo Move to MediaWikiTestCase
+        */
+       public function enableHTML5() {
+               global $wgHTML5;
+               $wgHTML5 = true;
+       }
+       /**
+        * Wrapper to easily set $wgHTML5 = false
+        * Original value will be restored after test completion.
+        * @todo Move to MediaWikiTestCase
+        */
+       public function disableHTML5() {
+               global $wgHTML5;
+               $wgHTML5 = false;
        }
 
        public function testExpandAttributesSkipsNullAndFalse() {
diff --git a/tests/phpunit/includes/LocalisationCacheTest.php b/tests/phpunit/includes/LocalisationCacheTest.php
new file mode 100644 (file)
index 0000000..356db87
--- /dev/null
@@ -0,0 +1,31 @@
+<?php
+
+class LocalisationCacheTest extends MediaWikiTestCase {
+       public function testPuralRulesFallback() {
+               $cache = Language::getLocalisationCache();
+
+               $this->assertEquals(
+                       $cache->getItem( 'ru', 'pluralRules' ),
+                       $cache->getItem( 'os', 'pluralRules' ),
+                       'os plural rules (undefined) fallback to ru (defined)'
+               );
+
+               $this->assertEquals(
+                       $cache->getItem( 'ru', 'compiledPluralRules' ),
+                       $cache->getItem( 'os', 'compiledPluralRules' ),
+                       'os compiled plural rules (undefined) fallback to ru (defined)'
+               );
+
+               $this->assertNotEquals(
+                       $cache->getItem( 'ksh', 'pluralRules' ),
+                       $cache->getItem( 'de', 'pluralRules' ),
+                       'ksh plural rules (defined) dont fallback to de (defined)'
+               );
+
+               $this->assertNotEquals(
+                       $cache->getItem( 'ksh', 'compiledPluralRules' ),
+                       $cache->getItem( 'de', 'compiledPluralRules' ),
+                       'ksh compiled plural rules (defined) dont fallback to de (defined)'
+               );
+       }
+}
diff --git a/tests/phpunit/includes/MockOutputPage.php b/tests/phpunit/includes/MockOutputPage.php
deleted file mode 100644 (file)
index bdee483..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-<?php
-
-class MockOutputPage {
-
-       public $message;
-
-       function debug( $message ) {
-               $this->message = "JAJA is a stupid error message. Anyway, here's your message: $message";
-       }
-}
index 20199b2..6d82d0c 100644 (file)
@@ -213,6 +213,7 @@ class RevisionStorageTest extends MediaWikiTestCase {
         */
        public function testRevText()
        {
+               $this->hideDeprecated( 'Revision::revText' );
                $orig = $this->makeRevision( array( 'text' => 'hello hello rev.' ) );
                $rev = Revision::newFromId( $orig->getId() );
 
index 416ec86..39ce6e3 100644 (file)
@@ -3,7 +3,7 @@
 /**
  * @group Database
  */
-require dirname( __FILE__ ) . "/../../../maintenance/runJobs.php";
+require __DIR__ . "/../../../maintenance/runJobs.php";
 
 class TemplateCategoriesTest extends MediaWikiLangTestCase {
 
diff --git a/tests/phpunit/includes/TimestampTest.php b/tests/phpunit/includes/TimestampTest.php
new file mode 100644 (file)
index 0000000..231228f
--- /dev/null
@@ -0,0 +1,72 @@
+<?php
+
+/**
+ * Tests timestamp parsing and output.
+ */
+class TimestampTest extends MediaWikiTestCase {
+       /**
+        * Test parsing of valid timestamps and outputing to MW format.
+        * @dataProvider provideValidTimestamps
+        */
+       function testValidParse( $format, $original, $expected ) {
+               $timestamp = new MWTimestamp( $original );
+               $this->assertEquals( $expected, $timestamp->getTimestamp( TS_MW ) );
+       }
+
+       /**
+        * Test outputting valid timestamps to different formats.
+        * @dataProvider provideValidTimestamps
+        */
+       function testValidOutput( $format, $expected, $original ) {
+               $timestamp = new MWTimestamp( $original );
+               $this->assertEquals( $expected, (string) $timestamp->getTimestamp( $format ) );
+       }
+
+       /**
+        * Test an invalid timestamp.
+        * @expectedException TimestampException
+        */
+       function testInvalidParse() {
+               $timestamp = new MWTimestamp( "This is not a timestamp." );
+       }
+
+       /**
+        * Test requesting an invalid output format.
+        * @expectedException TimestampException
+        */
+       function testInvalidOutput() {
+               $timestamp = new MWTimestamp( '1343761268' );
+               $timestamp->getTimestamp( 98 );
+       }
+
+       /**
+        * Test human readable timestamp format.
+        */
+       function testHumanOutput() {
+               $timestamp = new MWTimestamp( time() - 3600 );
+               $this->assertEquals( "1 hour ago", $timestamp->getHumanTimestamp()->toString() );
+       }
+
+       /**
+        * Returns a list of valid timestamps in the format:
+        * array( type, timestamp_of_type, timestamp_in_MW )
+        */
+       function provideValidTimestamps() {
+               return array(
+                       // Various formats
+                       array( TS_UNIX, '1343761268', '20120731190108' ),
+                       array( TS_MW, '20120731190108', '20120731190108' ),
+                       array( TS_DB, '2012-07-31 19:01:08', '20120731190108' ),
+                       array( TS_ISO_8601, '2012-07-31T19:01:08Z', '20120731190108' ),
+                       array( TS_ISO_8601_BASIC, '20120731T190108Z', '20120731190108' ),
+                       array( TS_EXIF, '2012:07:31 19:01:08', '20120731190108' ),
+                       array( TS_RFC2822, 'Tue, 31 Jul 2012 19:01:08 GMT', '20120731190108' ),
+                       array( TS_ORACLE, '31-07-2012 19:01:08.000000', '20120731190108' ),
+                       array( TS_POSTGRES, '2012-07-31 19:01:08 GMT', '20120731190108' ),
+                       array( TS_DB2, '2012-07-31 19:01:08', '20120731190108' ),
+                       // Some extremes and weird values
+                       array( TS_ISO_8601, '9999-12-31T23:59:59Z', '99991231235959' ),
+                       array( TS_UNIX, '-62135596801', '00001231235959' )
+               );
+       }
+}
index 1c8be5f..f61652d 100644 (file)
@@ -77,4 +77,79 @@ class TitleTest extends MediaWikiTestCase {
        }
        
        
+       /**
+        * @dataProvider provideCasesForGetpageviewlanguage
+        */
+       function testGetpageviewlanguage( $expected, $titleText, $contLang, $lang, $variant, $msg='' ) {
+               // Save globals
+               global $wgContLang, $wgLang, $wgAllowUserJs, $wgLanguageCode, $wgDefaultLanguageVariant;
+               $save['wgContLang']               = $wgContLang;
+               $save['wgLang']                   = $wgLang;
+               $save['wgAllowUserJs']            = $wgAllowUserJs;
+               $save['wgLanguageCode']           = $wgLanguageCode;
+               $save['wgDefaultLanguageVariant'] = $wgDefaultLanguageVariant;
+
+               // Setup test environnement:
+               $wgContLang = Language::factory( $contLang );
+               $wgLang     = Language::factory( $lang );
+               # To test out .js titles:
+               $wgAllowUserJs = true;
+               $wgLanguageCode = $contLang;
+               $wgDefaultLanguageVariant = $variant;
+
+               $title = Title::newFromText( $titleText );
+               $this->assertInstanceOf( 'Title', $title,
+                       "Test must be passed a valid title text, you gave '$titleText'"
+               );
+               $this->assertEquals( $expected,
+                       $title->getPageViewLanguage()->getCode(),
+                       $msg
+               );
+
+               // Restore globals
+               $wgContLang               = $save['wgContLang'];
+               $wgLang                   = $save['wgLang'];
+               $wgAllowUserJs            = $save['wgAllowUserJs'];
+               $wgLanguageCode           = $save['wgLanguageCode'];
+               $wgDefaultLanguageVariant = $save['wgDefaultLanguageVariant'];
+       }
+
+       function provideCasesForGetpageviewlanguage() {
+               # Format:
+               # - expected
+               # - Title name
+               # - wgContLang (expected in most case)
+               # - wgLang (on some specific pages)
+               # - wgDefaultLanguageVariant
+               # - Optional message
+               return array(
+                       array( 'fr', 'Main_page', 'fr', 'fr', false ),
+                       array( 'es', 'Main_page', 'es', 'zh-tw', false ),
+                       array( 'zh', 'Main_page', 'zh', 'zh-tw', false ),
+
+                       array( 'es',    'Main_page',                 'es', 'zh-tw', 'zh-cn' ),
+                       array( 'es',    'MediaWiki:About',           'es', 'zh-tw', 'zh-cn' ),
+                       array( 'es',    'MediaWiki:About/',          'es', 'zh-tw', 'zh-cn' ),
+                       array( 'de',    'MediaWiki:About/de',        'es', 'zh-tw', 'zh-cn' ),
+                       array( 'en',    'MediaWiki:Common.js',       'es', 'zh-tw', 'zh-cn' ),
+                       array( 'en',    'MediaWiki:Common.css',      'es', 'zh-tw', 'zh-cn' ),
+                       array( 'en',    'User:JohnDoe/Common.js',    'es', 'zh-tw', 'zh-cn' ),
+                       array( 'en',    'User:JohnDoe/Monobook.css', 'es', 'zh-tw', 'zh-cn' ),
+
+                       array( 'zh-cn', 'Main_page',                 'zh', 'zh-tw', 'zh-cn' ),
+                       array( 'zh',    'MediaWiki:About',           'zh', 'zh-tw', 'zh-cn' ),
+                       array( 'zh',    'MediaWiki:About/',          'zh', 'zh-tw', 'zh-cn' ),
+                       array( 'de',    'MediaWiki:About/de',        'zh', 'zh-tw', 'zh-cn' ),
+                       array( 'zh-cn', 'MediaWiki:About/zh-cn',     'zh', 'zh-tw', 'zh-cn' ),
+                       array( 'zh-tw', 'MediaWiki:About/zh-tw',     'zh', 'zh-tw', 'zh-cn' ),
+                       array( 'en',    'MediaWiki:Common.js',       'zh', 'zh-tw', 'zh-cn' ),
+                       array( 'en',    'MediaWiki:Common.css',      'zh', 'zh-tw', 'zh-cn' ),
+                       array( 'en',    'User:JohnDoe/Common.js',    'zh', 'zh-tw', 'zh-cn' ),
+                       array( 'en',    'User:JohnDoe/Monobook.css', 'zh', 'zh-tw', 'zh-cn' ),
+
+                       array( 'zh-tw', 'Special:NewPages',       'es', 'zh-tw', 'zh-cn' ),
+                       array( 'zh-tw', 'Special:NewPages',       'zh', 'zh-tw', 'zh-cn' ),
+
+               );
+       }
 }
diff --git a/tests/phpunit/includes/UriTest.php b/tests/phpunit/includes/UriTest.php
deleted file mode 100644 (file)
index 3b78f47..0000000
+++ /dev/null
@@ -1,164 +0,0 @@
-<?php
-
-class UriTest extends MediaWikiTestCase {
-
-       function setUp() {
-               AutoLoader::loadClass( 'Uri' );
-       }
-
-       function dataUris() {
-               return array(
-                       array(
-                               'http://example.com/',
-                               array(
-                                       'scheme'    => 'http',
-                                       'delimiter' => '://',
-                                       'user'      => null,
-                                       'pass'      => null,
-                                       'host'      => 'example.com',
-                                       'port'      => null,
-                                       'path'      => '/',
-                                       'query'     => null,
-                                       'fragment'  => null,
-                               ),
-                       ),
-                       array(
-                               '//mediawiki.org/wiki/Main_Page',
-                               array(
-                                       'scheme'    => null,
-                                       'delimiter' => '//',
-                                       'user'      => null,
-                                       'pass'      => null,
-                                       'host'      => 'mediawiki.org',
-                                       'port'      => null,
-                                       'path'      => '/wiki/Main_Page',
-                                       'query'     => null,
-                                       'fragment'  => null,
-                               ),
-                       ),
-                       array(
-                               'http://user:pass@example.com/',
-                               array(
-                                       'scheme'    => 'http',
-                                       'delimiter' => '://',
-                                       'user'      => 'user',
-                                       'pass'      => 'pass',
-                                       'host'      => 'example.com',
-                                       'port'      => null,
-                                       'path'      => '/',
-                                       'query'     => null,
-                                       'fragment'  => null,
-                               ),
-                       ),
-                       array(
-                               '/?asdf=asdf',
-                               array(
-                                       'scheme'    => null,
-                                       'delimiter' => null,
-                                       'user'      => null,
-                                       'pass'      => null,
-                                       'host'      => null,
-                                       'port'      => null,
-                                       'path'      => '/',
-                                       'query'     => 'asdf=asdf',
-                                       'fragment'  => null,
-                               ),
-                       ),
-                       array(
-                               '?asdf=asdf#asdf',
-                               array(
-                                       'scheme'    => null,
-                                       'delimiter' => null,
-                                       'user'      => null,
-                                       'pass'      => null,
-                                       'host'      => null,
-                                       'port'      => null,
-                                       'path'      => null,
-                                       'query'     => 'asdf=asdf',
-                                       'fragment'  => 'asdf',
-                               ),
-                       )
-               );
-       }
-
-       /**
-        * Ensure that get* methods properly match the appropriate getComponent( key ) value
-        * @dataProvider dataUris
-        */
-       function testGetters( $uri ) {
-               $uri = new Uri( $uri );
-               $getterMap = array(
-                       'getProtocol' => 'scheme',
-                       'getUser' => 'user',
-                       'getPassword' => 'pass',
-                       'getHost' => 'host',
-                       'getPort' => 'port',
-                       'getPath' => 'path',
-                       'getQueryString' => 'query',
-                       'getFragment' => 'fragment',
-               );
-               foreach ( $getterMap as $fn => $c ) {
-                       $this->assertSame( $uri->{$fn}(), $uri->getComponent( $c ), "\$uri->{$fn}(); matches \$uri->getComponent( '$c' );" );
-               }
-       }
-
-       /**
-        * Ensure that Uri has the proper components for our example uris
-        * @dataProvider dataUris
-        */
-       function testComponents( $uri, $components ) {
-               $uri = new Uri( $uri );
-
-               $this->assertSame( $components['scheme'], $uri->getProtocol(), 'Correct scheme' );
-               $this->assertSame( $components['delimiter'], $uri->getDelimiter(), 'Correct delimiter' );
-               $this->assertSame( $components['user'], $uri->getUser(), 'Correct user' );
-               $this->assertSame( $components['pass'], $uri->getPassword(), 'Correct pass' );
-               $this->assertSame( $components['host'], $uri->getHost(), 'Correct host' );
-               $this->assertSame( $components['port'], $uri->getPort(), 'Correct port' );
-               $this->assertSame( $components['path'], $uri->getPath(), 'Correct path' );
-               $this->assertSame( $components['query'], $uri->getQueryString(), 'Correct query' );
-               $this->assertSame( $components['fragment'], $uri->getFragment(), 'Correct fragment' );
-       }
-
-       /**
-        * Ensure that the aliases work for various components.
-        */
-       function testAliases() {
-               $url = "//myuser@test.com";
-               $uri = new Uri( $url );
-
-               // Set the aliases.
-               $uri->setComponent( 'protocol', 'https' );
-               $uri->setComponent( 'password', 'mypass' );
-
-               // Now try getting them.
-               $this->assertSame( 'https', $uri->getComponent( 'protocol' ), 'Correct protocol (alias for scheme)' );
-               $this->assertSame( 'mypass', $uri->getComponent( 'password' ), 'Correct password (alias for pass)' );
-
-               // Finally check their actual names.
-               $this->assertSame( 'https', $uri->getProtocol(), 'Alias for scheme works' );
-               $this->assertSame( 'mypass', $uri->getPassword(), 'Alias for pass works' );
-       }
-
-       /**
-        * Ensure that Uri's helper methods return the correct data
-        */
-       function testHelpers() {
-               $uri = new Uri( 'http://a:b@example.com:8080/path?query=value' );
-
-               $this->assertSame( 'a:b', $uri->getUserInfo(), 'Correct getUserInfo' );
-               $this->assertSame( 'example.com:8080', $uri->getHostPort(), 'Correct getHostPort' );
-               $this->assertSame( 'a:b@example.com:8080', $uri->getAuthority(), 'Correct getAuthority' );
-               $this->assertSame( '/path?query=value', $uri->getRelativePath(), 'Correct getRelativePath' );
-               $this->assertSame( 'http://a:b@example.com:8080/path?query=value', $uri->toString(), 'Correct toString' );
-       }
-
-       /**
-        * Ensure that Uri's extend method properly overrides keys
-        */
-       function testExtend() {
-               $uri = new Uri( 'http://example.org/?a=b&hello=world' );
-               $uri->extendQuery( 'a=c&foo=bar' );
-               $this->assertSame( 'a=c&hello=world&foo=bar', $uri->getQueryString() );
-       }
-}
index f7ca59e..d90a695 100644 (file)
@@ -4,7 +4,7 @@ class ZipDirectoryReaderTest extends MediaWikiTestCase {
        var $zipDir, $entries;
 
        function setUp() {
-               $this->zipDir = dirname( __FILE__ ) . '/../data/zip';
+               $this->zipDir = __DIR__ . '/../data/zip';
        }
 
        function zipCallback( $entry ) {
diff --git a/tests/phpunit/includes/api/ApiEditPageTest.php b/tests/phpunit/includes/api/ApiEditPageTest.php
new file mode 100644 (file)
index 0000000..5297d6d
--- /dev/null
@@ -0,0 +1,84 @@
+<?php
+
+/**
+ * Tests for MediaWiki api.php?action=edit.
+ *
+ * @author Daniel Kinzler
+ *
+ * @group API
+ * @group Database
+ */
+class ApiEditPageTest extends ApiTestCase {
+
+       function setUp() {
+               parent::setUp();
+               $this->doLogin();
+       }
+
+       function testEdit( ) {
+               $name = 'ApiEditPageTest_testEdit';
+
+               // -- test new page --------------------------------------------
+               $apiResult = $this->doApiRequestWithToken( array(
+                               'action' => 'edit',
+                               'title' => $name,
+                               'text' => 'some text', ) );
+               $apiResult = $apiResult[0];
+
+               # Validate API result data
+               $this->assertArrayHasKey( 'edit', $apiResult );
+               $this->assertArrayHasKey( 'result', $apiResult['edit'] );
+               $this->assertEquals( 'Success', $apiResult['edit']['result'] );
+
+               $this->assertArrayHasKey( 'new', $apiResult['edit'] );
+               $this->assertArrayNotHasKey( 'nochange', $apiResult['edit'] );
+
+               $this->assertArrayHasKey( 'pageid', $apiResult['edit'] );
+
+               // -- test existing page, no change ----------------------------
+               $data = $this->doApiRequestWithToken( array(
+                               'action' => 'edit',
+                               'title' => $name,
+                               'text' => 'some text', ) );
+
+               $this->assertEquals( 'Success', $data[0]['edit']['result'] );
+
+               $this->assertArrayNotHasKey( 'new', $data[0]['edit'] );
+               $this->assertArrayHasKey( 'nochange', $data[0]['edit'] );
+
+               // -- test existing page, with change --------------------------
+               $data = $this->doApiRequestWithToken( array(
+                               'action' => 'edit',
+                               'title' => $name,
+                               'text' => 'different text' ) );
+
+               $this->assertEquals( 'Success', $data[0]['edit']['result'] );
+
+               $this->assertArrayNotHasKey( 'new', $data[0]['edit'] );
+               $this->assertArrayNotHasKey( 'nochange', $data[0]['edit'] );
+
+               $this->assertArrayHasKey( 'oldrevid', $data[0]['edit'] );
+               $this->assertArrayHasKey( 'newrevid', $data[0]['edit'] );
+               $this->assertNotEquals(
+                       $data[0]['edit']['newrevid'],
+                       $data[0]['edit']['oldrevid'],
+                       "revision id should change after edit"
+               );
+       }
+
+       function testEditAppend() {
+               $this->markTestIncomplete( "not yet implemented" );
+       }
+
+       function testEditSection() {
+               $this->markTestIncomplete( "not yet implemented" );
+       }
+
+       function testUndo() {
+               $this->markTestIncomplete( "not yet implemented" );
+       }
+
+       function testEditNonText() {
+               $this->markTestIncomplete( "not yet implemented" );
+       }
+}
index 3b044ef..d6c48cb 100644 (file)
@@ -85,10 +85,16 @@ abstract class ApiTestCase extends MediaWikiLangTestCase {
         * This is cheating a bit -- we grab a token in the correct format and then add it to the pseudo-session and to the
         * request, without actually requesting a "real" edit token
         * @param $params Array: key-value API params
-        * @param $session Array: session array
+        * @param $session Array|null: session array
         * @param $user User|null A User object for the context
         */
-       protected function doApiRequestWithToken( Array $params, Array $session, User $user = null ) {
+       protected function doApiRequestWithToken( Array $params, Array $session = null, User $user = null ) {
+               global $wgRequest;
+
+               if ( $session === null ) {
+                       $session = $wgRequest->getSessionArray();
+               }
+
                if ( $session['wsToken'] ) {
                        // add edit token to fake session
                        $session['wsEditToken'] = $session['wsToken'];
index 86c0a82..8b6a384 100644 (file)
@@ -79,7 +79,7 @@ class RandomImageGenerator {
                        foreach ( array(
                                        '/usr/share/dict/words',
                                        '/usr/dict/words',
-                                       dirname( __FILE__ ) . '/words.txt' )
+                                       __DIR__ . '/words.txt' )
                                        as $dictionaryFile ) {
                                if ( is_file( $dictionaryFile ) and is_readable( $dictionaryFile ) ) {
                                        $this->dictionaryFile = $dictionaryFile;
index b22eccd..ee34562 100644 (file)
@@ -6,11 +6,11 @@
  */
 
 // Evaluate the include path relative to this file
-$IP = dirname( dirname( dirname( dirname( dirname( __FILE__ ) ) ) ) );
+$IP = dirname( dirname( dirname( dirname( __DIR__ ) ) ) );
 
 // Start up MediaWiki in command-line mode
 require_once( "$IP/maintenance/Maintenance.php" );
-require(  dirname( __FILE__ ) . "/RandomImageGenerator.php" );
+require(  __DIR__ . "/RandomImageGenerator.php" );
 
 class GenerateRandomImages extends Maintenance {
 
index d56e632..e37cd44 100644 (file)
@@ -16,9 +16,9 @@ class DatabaseSQLTest extends MediaWikiTestCase {
        }
 
        /**
-        * @dataProvider dataSQL
+        * @dataProvider dataSelectSQLText
         */
-       function testSQL( $sql, $sqlText ) {
+       function testSelectSQLText( $sql, $sqlText ) {
                $this->assertEquals( trim( $this->db->selectSQLText(
                        isset( $sql['tables'] ) ? $sql['tables'] : array(),
                        isset( $sql['fields'] ) ? $sql['fields'] : array(),
@@ -29,7 +29,7 @@ class DatabaseSQLTest extends MediaWikiTestCase {
                ) ), $sqlText );
        }
 
-       function dataSQL() {
+       function dataSelectSQLText() {
                return array(
                        array(
                                array(
@@ -70,6 +70,78 @@ class DatabaseSQLTest extends MediaWikiTestCase {
                                "ORDER BY field " .
                                "LIMIT 1"
                        ),
+                       array(
+                               array(
+                                       'tables' => array( 'table', 't2' => 'table2' ),
+                                       'fields' => array( 'tid', 'field', 'alias' => 'field2', 't2.id' ),
+                                       'conds' => array( 'alias' => 'text' ),
+                                       'options' => array( 'LIMIT' => 1, 'GROUP BY' => 'field', 'HAVING' => 'COUNT(*) > 1' ),
+                                       'join_conds' => array( 't2' => array(
+                                               'LEFT JOIN', 'tid = t2.id'
+                                       )),
+                               ),
+                               "SELECT  tid,field,field2 AS alias,t2.id  " .
+                               "FROM `unittest_table` LEFT JOIN `unittest_table2` `t2` ON ((tid = t2.id))  " .
+                               "WHERE alias = 'text'  " .
+                               "GROUP BY field HAVING COUNT(*) > 1 " .
+                               "LIMIT 1"
+                       ),
+                       array(
+                               array(
+                                       'tables' => array( 'table', 't2' => 'table2' ),
+                                       'fields' => array( 'tid', 'field', 'alias' => 'field2', 't2.id' ),
+                                       'conds' => array( 'alias' => 'text' ),
+                                       'options' => array( 'LIMIT' => 1, 'GROUP BY' => array( 'field', 'field2' ), 'HAVING' => array( 'COUNT(*) > 1', 'field' => 1 ) ),
+                                       'join_conds' => array( 't2' => array(
+                                               'LEFT JOIN', 'tid = t2.id'
+                                       )),
+                               ),
+                               "SELECT  tid,field,field2 AS alias,t2.id  " .
+                               "FROM `unittest_table` LEFT JOIN `unittest_table2` `t2` ON ((tid = t2.id))  " .
+                               "WHERE alias = 'text'  " .
+                               "GROUP BY field,field2 HAVING (COUNT(*) > 1) AND field = '1' " .
+                               "LIMIT 1"
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider dataConditional
+        */
+       function testConditional( $sql, $sqlText ) {
+               $this->assertEquals( trim( $this->db->conditional(
+                       $sql['conds'],
+                       $sql['true'],
+                       $sql['false']
+               ) ), $sqlText );
+       }
+
+       function dataConditional() {
+               return array(
+                       array(
+                               array(
+                                       'conds' => array( 'field' => 'text' ),
+                                       'true' => 1,
+                                       'false' => 'NULL',
+                               ),
+                               "(CASE WHEN field = 'text' THEN 1 ELSE NULL END)"
+                       ),
+                       array(
+                               array(
+                                       'conds' => array( 'field' => 'text', 'field2' => 'anothertext' ),
+                                       'true' => 1,
+                                       'false' => 'NULL',
+                               ),
+                               "(CASE WHEN field = 'text' AND field2 = 'anothertext' THEN 1 ELSE NULL END)"
+                       ),
+                       array(
+                               array(
+                                       'conds' => 'field=1',
+                                       'true' => 1,
+                                       'false' => 'NULL',
+                               ),
+                               "(CASE WHEN field=1 THEN 1 ELSE NULL END)"
+                       ),
                );
        }
 }
\ No newline at end of file
index fe5867a..afd1cb8 100644 (file)
@@ -38,7 +38,7 @@
  * @licence GNU GPL v2+
  * @author Jeroen De Dauw < jeroendedauw@gmail.com >
  */
-require_once dirname( __FILE__ ) . "/ORMRowTest.php";
+require_once __DIR__ . "/ORMRowTest.php";
 
 class TestORMRowTest extends ORMRowTest {
 
index 1627c47..246b291 100644 (file)
@@ -12,6 +12,11 @@ class MWDebugTest extends MediaWikiTestCase {
                }
                /** Clear log before each test */
                MWDebug::clearLog();
+               wfSuppressWarnings();
+       }
+
+       function tearDown() {
+               wfRestoreWarnings();
        }
 
        function testAddLog() {
index 6fb7ace..a2dc5c6 100644 (file)
@@ -3,6 +3,7 @@
 /**
  * @group FileRepo
  * @group FileBackend
+ * @group medium
  */
 class FileBackendTest extends MediaWikiTestCase {
        private $backend, $multiBackend;
@@ -882,6 +883,20 @@ class FileBackendTest extends MediaWikiTestCase {
                                "Correct file size of '$path'" );
                        $this->assertTrue( abs( time() - wfTimestamp( TS_UNIX, $time ) ) < 10,
                                "Correct file timestamp of '$path'" );
+
+                       $this->backend->clearCache( array( $path ) );
+
+                       $size = $this->backend->getFileSize( array( 'src' => $path ) );
+
+                       $this->assertEquals( strlen( $content ), $size,
+                               "Correct file size of '$path'" );
+
+                       $this->backend->preloadCache( array( $path ) );
+
+                       $size = $this->backend->getFileSize( array( 'src' => $path ) );
+
+                       $this->assertEquals( strlen( $content ), $size,
+                               "Correct file size of '$path'" );
                } else {
                        $size = $this->backend->getFileSize( array( 'src' => $path ) );
                        $time = $this->backend->getFileTimestamp( array( 'src' => $path ) );
@@ -1147,26 +1162,6 @@ class FileBackendTest extends MediaWikiTestCase {
                $this->tearDownFiles();
                $this->doTestDoOperations();
                $this->tearDownFiles();
-
-               $this->backend = $this->singleBackend;
-               $this->tearDownFiles();
-               $this->doTestDoOperations2();
-               $this->tearDownFiles();
-
-               $this->backend = $this->multiBackend;
-               $this->tearDownFiles();
-               $this->doTestDoOperations2();
-               $this->tearDownFiles();
-
-               $this->backend = $this->singleBackend;
-               $this->tearDownFiles();
-               $this->doTestDoOperationsFailing();
-               $this->tearDownFiles();
-
-               $this->backend = $this->multiBackend;
-               $this->tearDownFiles();
-               $this->doTestDoOperationsFailing();
-               $this->tearDownFiles();
        }
 
        private function doTestDoOperations() {
@@ -1242,8 +1237,20 @@ class FileBackendTest extends MediaWikiTestCase {
                        "Correct file SHA-1 of $fileC" );
        }
 
+       public function testDoOperationsPipeline() {
+               $this->backend = $this->singleBackend;
+               $this->tearDownFiles();
+               $this->doTestDoOperationsPipeline();
+               $this->tearDownFiles();
+
+               $this->backend = $this->multiBackend;
+               $this->tearDownFiles();
+               $this->doTestDoOperationsPipeline();
+               $this->tearDownFiles();
+       }
+
        // concurrency orientated
-       private function doTestDoOperations2() {
+       private function doTestDoOperationsPipeline() {
                $base = $this->baseStorePath();
 
                $fileAContents = '3tqtmoeatmn4wg4qe-mg3qt3 tq';
@@ -1329,6 +1336,18 @@ class FileBackendTest extends MediaWikiTestCase {
                        "Correct file SHA-1 of $fileC" );
        }
 
+       public function testDoOperationsFailing() {
+               $this->backend = $this->singleBackend;
+               $this->tearDownFiles();
+               $this->doTestDoOperationsFailing();
+               $this->tearDownFiles();
+
+               $this->backend = $this->multiBackend;
+               $this->tearDownFiles();
+               $this->doTestDoOperationsFailing();
+               $this->tearDownFiles();
+       }
+
        private function doTestDoOperationsFailing() {
                $base = $this->baseStorePath();
 
index 6abceeb..3ab56af 100644 (file)
@@ -1,6 +1,7 @@
 <?php
 /**
  * @group FileRepo
+ * @group medium
  */
 class StoreBatchTest extends MediaWikiTestCase {
 
index 5e4cda1..70fce11 100644 (file)
@@ -1,6 +1,5 @@
 <?php
 
-
 /**
  * Tests for the GenericArrayObject and deriving classes.
  *
@@ -40,22 +39,30 @@ abstract class GenericArrayObjectTest extends MediaWikiTestCase {
        public abstract function elementInstancesProvider();
 
        /**
-        * Provides instances of the concrete class being tested.
+        * Returns the name of the concrete class being tested.
         *
         * @since 1.20
         *
-        * @return array
+        * @return string
         */
-       public abstract function instanceProvider();
+       public abstract function getInstanceClass();
 
        /**
-        * Returns the name of the concrete class being tested.
+        * Provides instances of the concrete class being tested.
         *
         * @since 1.20
         *
-        * @return string
+        * @return array
         */
-       public abstract function getInstanceClass();
+       public function instanceProvider() {
+               $instances = array();
+
+               foreach ( $this->elementInstancesProvider() as $elementInstances ) {
+                       $instances[] = $this->getNew( $elementInstances );
+               }
+
+               return $this->arrayWrap( $instances );
+       }
 
        /**
         * @since 1.20
@@ -171,7 +178,7 @@ abstract class GenericArrayObjectTest extends MediaWikiTestCase {
                                call_user_func( $function, $list, $element );
                                $valid = true;
                        }
-                       catch ( \MWException $exception ) {
+                       catch ( InvalidArgumentException $exception ) {
                                $valid = false;
                        }
 
index f4f52dd..b604d59 100644 (file)
@@ -2,7 +2,7 @@
 class BitmapMetadataHandlerTest extends MediaWikiTestCase {
 
        public function setUp() {
-               $this->filePath = dirname( __FILE__ ) . '/../../data/media/';
+               $this->filePath = __DIR__ . '/../../data/media/';
        }
 
        /**
@@ -73,8 +73,10 @@ class BitmapMetadataHandlerTest extends MediaWikiTestCase {
                $this->assertEquals( '2020:07:14 01:36:05', $meta['DateTimeDigitized'] );
                $this->assertEquals( '1997:03:02 00:01:02', $meta['DateTimeOriginal'] );
        }
-       /* File has an invalid time (+ one valid but really weird time)
+       /**
+        * File has an invalid time (+ one valid but really weird time)
         * that shouldn't be included
+        * @expectedException TimestampException
         */
        public function testIPTCDatesInvalid() {
                $meta = BitmapMetadataHandler::Jpeg( $this->filePath .
index 1e2d1bb..6af52dd 100644 (file)
@@ -8,7 +8,7 @@ class ExifRotationTest extends MediaWikiTestCase {
        function setUp() {
                parent::setUp();
                $this->handler = new BitmapHandler();
-               $filePath = dirname( __FILE__ ) . '/../../data/media';
+               $filePath = __DIR__ . '/../../data/media';
 
                $tmpDir = $this->getNewTempDirectory();
 
index 80aaac2..045777d 100644 (file)
@@ -2,7 +2,7 @@
 class ExifTest extends MediaWikiTestCase {
 
        public function setUp() {
-               $this->mediaPath = dirname( __FILE__ ) . '/../../data/media/';
+               $this->mediaPath = __DIR__ . '/../../data/media/';
 
                if ( !wfDl( 'exif' ) ) {
                        $this->markTestSkipped( "This test needs the exif extension." );
@@ -25,7 +25,7 @@ class ExifTest extends MediaWikiTestCase {
                $expected = array(
                        'GPSLatitude' => 88.5180555556,
                        'GPSLongitude' => -21.12357,
-                       'GPSAltitude' => -200,
+                       'GPSAltitude' => -3.141592653,
                        'GPSDOP' => '5/1',
                        'GPSVersionID' => '2.2.0.0',
                );
index 8a632f5..6ade670 100644 (file)
@@ -4,7 +4,7 @@ class FormatMetadataTest extends MediaWikiTestCase {
                if ( !wfDl( 'exif' ) ) {
                        $this->markTestSkipped( "This test needs the exif extension." );
                }
-               $filePath = dirname( __FILE__ ) .  '/../../data/media';
+               $filePath = __DIR__ .  '/../../data/media';
                $this->backend = new FSFileBackend( array(
                        'name'           => 'localtesting',
                        'lockManager'    => 'nullLockManager',
index 47fc368..650fdd5 100644 (file)
@@ -2,7 +2,7 @@
 class GIFMetadataExtractorTest extends MediaWikiTestCase {
 
        public function setUp() {
-               $this->mediaPath = dirname( __FILE__ ) . '/../../data/media/';
+               $this->mediaPath = __DIR__ . '/../../data/media/';
        }
        /**
         * Put in a file, and see if the metadata coming out is as expected.
index 3665835..5dcbeee 100644 (file)
@@ -2,7 +2,7 @@
 class GIFHandlerTest extends MediaWikiTestCase {
 
        public function setUp() {
-               $this->filePath = dirname( __FILE__ ) .  '/../../data/media';
+               $this->filePath = __DIR__ .  '/../../data/media';
                $this->backend = new FSFileBackend( array(
                        'name'           => 'localtesting',
                        'lockManager'    => 'nullLockManager',
index f48382a..41d8119 100644 (file)
@@ -9,7 +9,7 @@
 class JpegMetadataExtractorTest extends MediaWikiTestCase {
 
        public function setUp() {
-               $this->filePath = dirname( __FILE__ ) . '/../../data/media/';
+               $this->filePath = __DIR__ . '/../../data/media/';
        }
 
        /**
index ddabf5b..ea007f9 100644 (file)
@@ -2,7 +2,7 @@
 class JpegTest extends MediaWikiTestCase {
 
        public function setUp() {
-               $this->filePath = dirname( __FILE__ ) . '/../../data/media/';
+               $this->filePath = __DIR__ . '/../../data/media/';
                if ( !wfDl( 'exif' ) ) {
                        $this->markTestSkipped( "This test needs the exif extension." );
                }
index 9f702c5..1b1b2ec 100644 (file)
@@ -2,7 +2,7 @@
 class PNGMetadataExtractorTest extends MediaWikiTestCase {
 
        function setUp() {
-               $this->filePath = dirname( __FILE__ ) . '/../../data/media/';   
+               $this->filePath = __DIR__ . '/../../data/media/';
        }
        /**
         * Tests zTXt tag (compressed textual metadata) 
index b6f911f..fe73c9c 100644 (file)
@@ -2,7 +2,7 @@
 class PNGHandlerTest extends MediaWikiTestCase {
 
        public function setUp() {
-               $this->filePath = dirname( __FILE__ ) .  '/../../data/media';
+               $this->filePath = __DIR__ .  '/../../data/media';
                $this->backend = new FSFileBackend( array(
                        'name'           => 'localtesting',
                        'lockManager'    => 'nullLockManager',
index 526beae..2116554 100644 (file)
@@ -39,27 +39,33 @@ class SVGMetadataExtractorTest extends MediaWikiTestCase {
        }
 
        function providerSvgFiles() {
-               $base = dirname( __FILE__ ) . '/../../data/media';
+               $base = __DIR__ . '/../../data/media';
                return array(
                        array(
                                "$base/Wikimedia-logo.svg",
                                array(
                                        'width' => 1024,
-                                       'height' => 1024
+                                       'height' => 1024,
+                                       'originalWidth' => '1024',
+                                       'originalHeight' => '1024',
                                )
                        ),
                        array(
                                "$base/QA_icon.svg",
                                array(
                                        'width' => 60,
-                                       'height' => 60
+                                       'height' => 60,
+                                       'originalWidth' => '60',
+                                       'originalHeight' => '60',
                                )
                        ),
                        array(
                                "$base/Gtk-media-play-ltr.svg",
                                array(
                                        'width' => 60,
-                                       'height' => 60
+                                       'height' => 60,
+                                       'originalWidth' => '60.0000000',
+                                       'originalHeight' => '60.0000000',
                                )
                        ),
                        array(
@@ -67,14 +73,16 @@ class SVGMetadataExtractorTest extends MediaWikiTestCase {
                                // This file triggered bug 31719, needs entity expansion in the xmlns checks
                                array(
                                        'width' => 385,
-                                       'height' => 385
+                                       'height' => 385,
+                                       'originalWidth' => '385',
+                                       'originalHeight' => '385.0004883',
                                )
                        )
                );
        }
 
        function providerSvgFilesWithXMLMetadata() {
-               $base = dirname( __FILE__ ) . '/../../data/media';
+               $base = __DIR__ . '/../../data/media';
                $metadata = 
     '<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
       <ns4:Work xmlns:ns4="http://creativecommons.org/ns#" rdf:about="">
@@ -89,7 +97,9 @@ class SVGMetadataExtractorTest extends MediaWikiTestCase {
                                array(
                                        'height' => 593,
                                        'metadata' => $metadata,
-                                       'width' => 959
+                                       'width' => 959,
+                                       'originalWidth' => '958.69',
+                                       'originalHeight' => '592.78998',
                                )
                        ),
                );
index d4cf503..4c79f66 100644 (file)
@@ -5,7 +5,7 @@ class TiffTest extends MediaWikiTestCase {
                global $wgShowEXIF;
                $this->showExif = $wgShowEXIF;
                $wgShowEXIF = true;
-               $this->filePath = dirname( __FILE__ ) . '/../../data/media/';
+               $this->filePath = __DIR__ . '/../../data/media/';
                $this->handler = new TiffHandler;
        }
 
index c952b23..8198d3b 100644 (file)
@@ -22,11 +22,11 @@ class XMPTest extends MediaWikiTestCase {
                }
                $reader = new XMPReader;
                $reader->parse( $xmp );
-               $this->assertEquals( $expected, $reader->getResults(), $info );
+               $this->assertEquals( $expected, $reader->getResults(), $info, 0.0000000001 );
        }
 
        public function dataXMPParse() {
-               $xmpPath = dirname( __FILE__ ) . '/../../data/xmp/' ;
+               $xmpPath = __DIR__ . '/../../data/xmp/' ;
                $data = array();
 
                // $xmpFiles format: array of arrays with first arg file base name,
@@ -52,6 +52,7 @@ class XMPTest extends MediaWikiTestCase {
                        array( 'utf32BE', 'UTF-32BE encoding' ),
                        array( 'utf32LE', 'UTF-32LE encoding' ),
                        array( 'xmpExt', 'Extended XMP missing second part' ),
+                       array( 'gps', 'Handling of exif GPS parameters in XMP' ),
                 );
                foreach( $xmpFiles as $file ) {
                        $xmp = file_get_contents( $xmpPath . $file[0] . '.xmp' );
@@ -72,7 +73,7 @@ class XMPTest extends MediaWikiTestCase {
         * world example file to double check the support for this is right.
         */
        function testExtendedXMP() {
-               $xmpPath = dirname( __FILE__ ) . '/../../data/xmp/';
+               $xmpPath = __DIR__ . '/../../data/xmp/';
                $standardXMP = file_get_contents( $xmpPath . 'xmpExt.xmp' );
                $extendedXMP = file_get_contents( $xmpPath . 'xmpExt2.xmp' );
 
@@ -102,7 +103,7 @@ class XMPTest extends MediaWikiTestCase {
         * and thus should only return the StandardXMP, not the ExtendedXMP.
         */
        function testExtendedXMPWithWrongGUID() {
-               $xmpPath = dirname( __FILE__ ) . '/../../data/xmp/';
+               $xmpPath = __DIR__ . '/../../data/xmp/';
                $standardXMP = file_get_contents( $xmpPath . 'xmpExt.xmp' );
                $extendedXMP = file_get_contents( $xmpPath . 'xmpExt2.xmp' );
 
@@ -130,7 +131,7 @@ class XMPTest extends MediaWikiTestCase {
         * which should cause it to ignore the ExtendedXMP packet.
         */
        function testExtendedXMPMissingPacket() {
-               $xmpPath = dirname( __FILE__ ) . '/../../data/xmp/';
+               $xmpPath = __DIR__ . '/../../data/xmp/';
                $standardXMP = file_get_contents( $xmpPath . 'xmpExt.xmp' );
                $extendedXMP = file_get_contents( $xmpPath . 'xmpExt2.xmp' );
 
index 816c017..6a6fded 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-require_once( dirname( __FILE__ ) . '/NewParserTest.php' );
+require_once( __DIR__ . '/NewParserTest.php' );
 
 /**
  * The UnitTest must be either a class that inherits from MediaWikiTestCase
index 9d3499a..fee5674 100644 (file)
@@ -103,7 +103,7 @@ class PreprocessorTest extends MediaWikiTestCase {
                        array( "{{foo|bar=|}", "<root>{{foo|bar=|}</root>"),
                        array( "{{Foo|} Bar=", "<root>{{Foo|} Bar=</root>"),
                        array( "{{Foo|} Bar=}}", "<root><template><title>Foo</title><part><name>} Bar</name>=<value></value></part></template></root>"),
-                       /* array( file_get_contents( dirname( __FILE__ ) . '/QuoteQuran.txt' ), file_get_contents( dirname( __FILE__ ) . '/QuoteQuranExpanded.txt' ) ), */
+                       /* array( file_get_contents( __DIR__ . '/QuoteQuran.txt' ), file_get_contents( __DIR__ . '/QuoteQuranExpanded.txt' ) ), */
                );
        }
 
@@ -165,7 +165,7 @@ class PreprocessorTest extends MediaWikiTestCase {
         * @dataProvider provideFiles
         */
        function testPreprocessorOutputFiles( $filename ) {
-               $folder = dirname( __FILE__ ) . "/../../../parser/preprocess";
+               $folder = __DIR__ . "/../../../parser/preprocess";
                $wikiText = file_get_contents( "$folder/$filename.txt" );
                $output = $this->preprocessToXml( $wikiText );
 
index ea9d553..20e42a6 100644 (file)
@@ -87,6 +87,14 @@ class SpecialSearchTest extends MediaWikiTestCase {
                                'advanced', array( 2, 14 ),
                                'Bug 33583: search with no option should honor User search preferences'
                        ),
+                       array(
+                               $EMPTY_REQUEST, array_fill_keys( array_map( function( $ns ) {
+                                       return "searchNs$ns";
+                               }, $defaultNS ), 0 ) + array( 'searchNs2' => 1, 'searchNs14' => 1 ),
+                               'advanced', array( 2, 14 ),
+                               'Bug 33583: search with no option should honor User search preferences'
+                               . 'and have all other namespace disabled'
+                       ),
                );
        }
 
index c9dbb13..dc1c2ac 100644 (file)
@@ -12,7 +12,7 @@ class UploadStashTest extends MediaWikiTestCase {
                parent::setUp();
 
                // Setup a file for bug 29408
-               $this->bug29408File = dirname( __FILE__ ) . '/bug29408';
+               $this->bug29408File = __DIR__ . '/bug29408';
                file_put_contents( $this->bug29408File, "\x00" );
 
                self::$users = array(
index 9ac0f95..7833da7 100644 (file)
@@ -18,31 +18,31 @@ class LanguageHeTest extends MediaWikiTestCase {
 
        /** @dataProvider providerPluralDual */
        function testPluralDual( $result, $value ) {
-               $forms = array( 'one', 'many', 'two' );
+               $forms = array( 'one', 'two', 'other' );
                $this->assertEquals( $result, $this->lang->convertPlural( $value, $forms ) );
        }
 
        function providerPluralDual() {
                return array (
-                       array( 'many', 0 ), // Zero -> plural
+                       array( 'other', 0 ), // Zero -> plural
                        array( 'one', 1 ), // Singular
                        array( 'two', 2 ), // Dual
-                       array( 'many', 3 ), // Plural
+                       array( 'other', 3 ), // Plural
                );
        }
 
        /** @dataProvider providerPlural */
        function testPlural( $result, $value ) {
-               $forms = array( 'one', 'many' );
+               $forms = array( 'one', 'other' );
                $this->assertEquals( $result, $this->lang->convertPlural( $value, $forms ) );
        }
 
        function providerPlural() {
                return array (
-                       array( 'many', 0 ), // Zero -> plural
+                       array( 'other', 0 ), // Zero -> plural
                        array( 'one', 1 ), // Singular
-                       array( 'many', 2 ), // Plural, no dual provided
-                       array( 'many', 3 ), // Plural
+                       array( 'other', 2 ), // Plural, no dual provided
+                       array( 'other', 3 ), // Plural
                );
        }
 }
index e7d3ea1..d44ecf8 100644 (file)
@@ -12,7 +12,7 @@
  * @file
  */
 
-require_once dirname( dirname( __FILE__ ) ) . '/bootstrap.php';
+require_once dirname( __DIR__ ) . '/bootstrap.php';
 
 /** Tests for MediaWiki languages/LanguageSr.php */
 class LanguageSrTest extends MediaWikiTestCase {
index 86f483d..7238728 100644 (file)
@@ -12,7 +12,7 @@
  * @file
  */
 
-require_once dirname( dirname( __FILE__ ) ) . '/bootstrap.php';
+require_once dirname( __DIR__ ) . '/bootstrap.php';
 
 /** Tests for MediaWiki languages/LanguageUz.php */
 class LanguageUzTest extends MediaWikiTestCase {
diff --git a/tests/phpunit/languages/utils/CLDRPluralRuleEvaluatorTest.php b/tests/phpunit/languages/utils/CLDRPluralRuleEvaluatorTest.php
new file mode 100644 (file)
index 0000000..033164b
--- /dev/null
@@ -0,0 +1,95 @@
+<?php
+/**
+ * @author Niklas Laxström
+ * @file
+ */
+
+class CLDRPluralRuleEvaluatorTest extends MediaWikiTestCase {
+       /**
+        * @dataProvider validTestCases
+        */
+       function testValidRules( $expected, $rules, $number, $comment ) {
+               $result = CLDRPluralRuleEvaluator::evaluate( $number, (array) $rules );
+               $this->assertEquals( $expected, $result, $comment );
+       }
+
+       /**
+        * @dataProvider invalidTestCases
+        * @expectedException CLDRPluralRuleError
+        */
+       function testInvalidRules( $rules, $comment ) {
+               CLDRPluralRuleEvaluator::evaluate( 1, (array) $rules );
+       }
+
+       function validTestCases() {
+               $tests = array(
+                       # expected, number, rule, comment
+                       array( 0, 'n is 1', 1, 'integer number and is' ),
+                       array( 0, 'n is 1', "1", 'string integer number and is' ),
+                       array( 0, 'n is 1', 1.0, 'float number and is' ),
+                       array( 0, 'n is 1', "1.0", 'string float number and is' ),
+                       array( 1, 'n is 1', 1.1, 'float number and is' ),
+                       array( 1, 'n is 1', 2, 'float number and is' ),
+
+                       array( 0, 'n in 1,3,5',     3, '' ),
+                       array( 1, 'n not in 1,3,5', 5, '' ),
+
+                       array( 1, 'n in 1,3,5',     2, '' ),
+                       array( 0, 'n not in 1,3,5', 4, '' ),
+
+                       array( 0, 'n in 1..3',      2, '' ),
+                       array( 0, 'n in 1..3',      3, 'in is inclusive' ),
+                       array( 1, 'n in 1..3',      0, '' ),
+
+                       array( 1, 'n not in 1..3',      2, '' ),
+                       array( 1, 'n not in 1..3',      3, 'in is inclusive' ),
+                       array( 0, 'n not in 1..3',      0, '' ),
+
+                       array( 1, 'n is not 1 and n is not 2 and n is not 3', 1, 'and relation' ),
+                       array( 0, 'n is not 1 and n is not 2 and n is not 4', 3, 'and relation' ),
+
+                       array( 0, 'n is not 1 or n is 1', 1, 'or relation' ),
+                       array( 1, 'n is 1 or n is 2', 3, 'or relation' ),
+
+                       array( 0, 'n              is      1', 1, 'extra whitespace' ),
+
+                       array( 0, 'n mod 3 is 1', 7, 'mod' ),
+                       array( 0, 'n mod 3 is not 1', 4.3, 'mod with floats' ),
+
+                       array( 0, 'n within 1..3', 2, 'within with integer' ),
+                       array( 0, 'n within 1..3', 2.5, 'within with float' ),
+                       array( 0, 'n in 1..3', 2, 'in with integer' ),
+                       array( 1, 'n in 1..3', 2.5, 'in with float' ),
+
+                       array( 0, 'n in 3 or n is 4 and n is 5', 3, 'and binds more tightly than or' ),
+                       array( 1, 'n is 3 or n is 4 and n is 5', 4, 'and binds more tightly than or' ),
+
+                       array( 0, 'n mod 10 in 3..4,9 and n mod 100 not in 10..19,70..79,90..99', 24, 'breton rule' ),
+                       array( 1, 'n mod 10 in 3..4,9 and n mod 100 not in 10..19,70..79,90..99', 25, 'breton rule' ),
+
+                       array( 0, 'n within 0..2 and n is not 2', 0, 'french rule' ),
+                       array( 0, 'n within 0..2 and n is not 2', 1, 'french rule' ),
+                       array( 0, 'n within 0..2 and n is not 2', 1.2, 'french rule' ),
+                       array( 1, 'n within 0..2 and n is not 2', 2, 'french rule' ),
+
+                       array( 1, 'n in 3..10,13..19', 2, 'scottish rule - ranges with comma' ),
+                       array( 0, 'n in 3..10,13..19', 4, 'scottish rule - ranges with comma' ),
+                       array( 1, 'n in 3..10,13..19', 12.999, 'scottish rule - ranges with comma' ),
+                       array( 0, 'n in 3..10,13..19', 13, 'scottish rule - ranges with comma' ),
+
+                       array( 0, '5 mod 3 is n', 2, 'n as result of mod - no need to pass' ),
+               );
+
+               return $tests;
+       }
+
+       function invalidTestCases() {
+               $tests = array(
+                       array( 'n mod mod 5 is 1', 'mod mod' ),
+                       array( 'n', 'just n' ),
+                       array( 'n is in 5', 'is in' ),
+               );
+               return $tests;
+       }
+
+}
index 965d7be..8ff8557 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 
-require_once dirname( __FILE__ ) . "/../../../maintenance/backupPrefetch.inc";
+require_once __DIR__ . "/../../../maintenance/backupPrefetch.inc";
 
 /**
  * Tests for BaseDump
index 24186fb..f669b26 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 
-require_once dirname( __FILE__ ) . "/../../../maintenance/backupTextPass.inc";
+require_once __DIR__ . "/../../../maintenance/backupTextPass.inc";
 
 /**
  * Tests for page dumps of BackupDumper
index f0689b6..e7ffa01 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 
-require_once dirname( __FILE__ ) . "/../../../maintenance/fetchText.php";
+require_once __DIR__ . "/../../../maintenance/fetchText.php";
 
 /**
  * Mock for the input/output of FetchText
index 8635614..0b7c758 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 
-require_once dirname( __FILE__ ) . "/../../../maintenance/getSlaveServer.php";
+require_once __DIR__ . "/../../../maintenance/getSlaveServer.php";
 
 /**
  * Tests for getSlaveServer
index 61a20f1..bcbf4ec 100755 (executable)
@@ -9,7 +9,7 @@
 /* Configuration */
 
 // Evaluate the include path relative to this file
-$IP = dirname( dirname( dirname( __FILE__ ) ) );
+$IP = dirname( dirname( __DIR__ ) );
 
 // Set a flag which can be used to detect when other scripts have been entered through this entry point or not
 define( 'MW_PHPUNIT_TEST', true );
@@ -34,6 +34,10 @@ class PHPUnitMaintClass extends Maintenance {
                global $wgMainCacheType, $wgMessageCacheType, $wgParserCacheType;
                global $wgLanguageConverterCacheType, $wgUseDatabaseMessages;
                global $wgLocaltimezone, $wgLocalisationCacheConf;
+               global $wgDevelopmentWarnings;
+
+               // wfWarn should cause tests to fail
+               $wgDevelopmentWarnings = true;
 
                $wgMainCacheType = CACHE_NONE;
                $wgMessageCacheType = CACHE_NONE;
index 6779ad4..f263811 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 
-require_once( dirname( dirname( __FILE__ ) ) . '/includes/upload/UploadFromUrlTest.php' );
+require_once( dirname( __DIR__ ) . '/includes/upload/UploadFromUrlTest.php' );
 
 class UploadFromUrlTestSuite extends PHPUnit_Framework_TestSuite {
        public $savedGlobals = array();
index 1cd085f..59ae73c 100644 (file)
@@ -30,6 +30,7 @@ return array(
                        'tests/qunit/suites/resources/mediawiki.api/mediawiki.api.parse.test.js',
                        'tests/qunit/suites/resources/mediawiki.special/mediawiki.special.recentchanges.test.js',
                        'tests/qunit/suites/resources/mediawiki/mediawiki.language.test.js',
+                       'tests/qunit/suites/resources/mediawiki/mediawiki.cldr.test.js',
                ),
                'dependencies' => array(
                        'jquery.autoEllipsis',
@@ -55,6 +56,7 @@ return array(
                        'mediawiki.util',
                        'mediawiki.special.recentchanges',
                        'mediawiki.language',
+                       'mediawiki.cldr',
                ),
                'position' => 'top',
        )
index 7d8c1d6..16d8170 100644 (file)
@@ -1,4 +1,4 @@
-( function ( $ ) {
+( function ( $, mw ) {
 
 var config = {
        wgMonthNames: ['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
@@ -345,11 +345,11 @@ var complexMDYDates = [
 ];
 
 var complexMDYSorted = [
-       ["5.12.1990"],
-       ["April 21 1991"],
-       ["04 22 1991"],
-       ["January, 19 2010"],
-       ["December 12 '10"]
+       ['5.12.1990'],
+       ['April 21 1991'],
+       ['04 22 1991'],
+       ['January, 19 2010'],
+       ['December 12 \'10']
 ];
 
 tableTest(
@@ -365,6 +365,39 @@ tableTest(
        }
 );
 
+var currencyUnsorted = [
+       ['1.02 $'],
+       ['$ 3.00'],
+       ['€ 2,99'],
+       ['$ 1.00'],
+       ['$3.50'],
+       ['$ 1.50'],
+       ['€ 0.99']
+];
+
+var currencySorted = [
+       ['€ 0.99'],
+       ['$ 1.00'],
+       ['1.02 $'],
+       ['$ 1.50'],
+       ['$ 3.00'],
+       ['$3.50'],
+       // Comma's sort after dots
+       // Not intentional but test to detect changes
+       ['€ 2,99']
+];
+
+tableTest(
+       'Currency parsing I',
+       ['currency'],
+       currencyUnsorted,
+       currencySorted,
+       function ( $table ) {
+               $table.tablesorter();
+               $table.find( '.headerSort:eq(0)' ).click();
+       }
+);
+
 var ascendingNameLegacy = ascendingName.slice(0);
 ascendingNameLegacy[4] = ascendingNameLegacy[5];
 ascendingNameLegacy.pop();
@@ -381,6 +414,7 @@ tableTest(
        }
 );
 
+
 /** FIXME: the diff output is not very readeable. */
 QUnit.test( 'bug 32047 - caption must be before thead', function ( assert ) {
        var $table;
@@ -660,4 +694,4 @@ tableTest(
        }
 );
 
-}( jQuery ) );
+}( jQuery, mediaWiki ) );
diff --git a/tests/qunit/suites/resources/mediawiki/mediawiki.cldr.test.js b/tests/qunit/suites/resources/mediawiki/mediawiki.cldr.test.js
new file mode 100644 (file)
index 0000000..09a11b0
--- /dev/null
@@ -0,0 +1,67 @@
+module( 'mediawiki.cldr' );
+
+test( '-- Initial check', function() {
+       expect( 1 );
+       ok( mw.cldr, 'mw.cldr defined' );
+} );
+
+var pluralTestcases = {
+       /*
+        * Sample:
+        *"languagecode" : [
+        *      [ number, [ "form1", "form2", ... ],  "expected", "description" ],
+        * ]
+        */
+       "en": [
+               [ 0, [ "one", "other" ], "other", "English plural test- 0 is other" ],
+               [ 1, [ "one", "other" ], "one", "English plural test- 1 is one" ]
+       ],
+       "hi": [
+               [ 0, [ "one", "other" ], "one", "Hindi plural test- 0 is one" ],
+               [ 1, [ "one", "other" ], "one", "Hindi plural test- 1 is one" ],
+               [ 2, [ "one", "other" ], "other", "Hindi plural test- 2 is other" ]
+       ],
+       "he": [
+               [ 0, [ "one", "other" ], "other", "Hebrew plural test- 0 is other" ],
+               [ 1, [ "one", "other" ], "one", "Hebrew plural test- 1 is one" ],
+               [ 2, [ "one", "other" ], "other", "Hebrew plural test- 2 is other with 2 forms" ],
+               [ 2, [ "one", "dual", "other" ], "dual", "Hebrew plural test- 2 is dual with 3 forms" ]
+       ],
+       "ar": [
+               [ 0, [ "zero", "one", "two", "few", "many", "other" ], "zero", "Arabic plural test - 0 is zero" ],
+               [ 1, [ "zero", "one", "two", "few", "many", "other" ], "one", "Arabic plural test - 1 is one" ],
+               [ 2, [ "zero", "one", "two", "few", "many", "other" ], "two", "Arabic plural test - 2 is two" ],
+               [ 3, [ "zero", "one", "two", "few", "many", "other" ], "few", "Arabic plural test - 3 is few" ],
+               [ 9, [ "zero", "one", "two", "few", "many", "other" ], "few", "Arabic plural test - 9 is few" ],
+               [ "9", [ "zero", "one", "two", "few", "many", "other" ], "few", "Arabic plural test - 9 is few" ],
+               [ 110, [ "zero", "one", "two", "few", "many", "other" ], "few", "Arabic plural test - 110 is few" ],
+               [ 11, [ "zero", "one", "two", "few", "many", "other" ], "many", "Arabic plural test - 11 is many" ],
+               [ 15, [ "zero", "one", "two", "few", "many", "other" ], "many", "Arabic plural test - 15 is many" ],
+               [ 99, [ "zero", "one", "two", "few", "many", "other" ], "many", "Arabic plural test - 99 is many" ],
+               [ 9999, [ "zero", "one", "two", "few", "many", "other" ], "many", "Arabic plural test - 9999 is many" ],
+               [ 100, [ "zero", "one", "two", "few", "many", "other" ], "other", "Arabic plural test - 100 is other" ],
+               [ 102, [ "zero", "one", "two", "few", "many", "other" ], "other", "Arabic plural test - 102 is other" ],
+               [ 1000, [ "zero", "one", "two", "few", "many", "other" ], "other", "Arabic plural test - 1000 is other" ]
+               // FIXME plural rules for decimal numbers does not work
+               // [ 1.7, [ "zero", "one", "two", "few", "many", "other" ], "other", "Arabic plural test - 1.7 is other" ],
+       ]
+};
+
+function pluralTest( langCode, tests ) {
+       QUnit.test('-- Plural Test for ' + langCode, function( assert ) {
+               QUnit.expect( tests.length );
+               for ( var i = 0; i < tests.length; i++ ) {
+                       assert.equal(
+                               mw.language.convertPlural( tests[i][0], tests[i][1] ),
+                               tests[i][2], // Expected plural form
+                               tests[i][3] // Description
+                       );
+               }
+       } );
+}
+
+$.each( pluralTestcases, function( langCode, tests ) {
+       if ( langCode === mw.config.get( 'wgUserLanguage' ) ) {
+               pluralTest( langCode, tests );
+       }
+} );
index c823baf..16c97df 100644 (file)
@@ -37,7 +37,7 @@ QUnit.asyncTest( 'getGroups', 3, function ( assert ) {
        mw.user.getGroups( function ( groups ) {
                // First group should always be '*'
                assert.equal( $.type( groups ), 'array', 'Callback gets an array' );
-               assert.equal( groups[0], '*', '"*"" is the first group' );
+               assert.notStrictEqual( $.inArray( '*', groups ), -1, '"*"" is in the list' );
                // Sort needed because of different methods if creating the arrays,
                // only the content matters.
                assert.deepEqual( groups.sort(), mw.config.get( 'wgUserGroups' ).sort(), 'Array contains all groups, just like wgUserGroups' );
index d9b2055..ababa8d 100644 (file)
@@ -24,14 +24,17 @@ QUnit.test( 'wikiGetlink', 3, function ( assert ) {
        assert.equal( hrefC, '/wiki/Foobar', 'Default title; Get link for current page ("Foobar")' );
 });
 
-QUnit.test( 'wikiScript', 2, function ( assert ) {
+QUnit.test( 'wikiScript', 4, function ( assert ) {
        mw.config.set({
-               'wgScript': '/w/index.php',
+               'wgScript': '/w/i.php', // customized wgScript for bug 39103
+               'wgLoadScript': '/w/l.php', // customized wgLoadScript for bug 39103
                'wgScriptPath': '/w',
                'wgScriptExtension': '.php'
        });
 
-       assert.equal( mw.util.wikiScript(), mw.config.get( 'wgScript' ), 'Defaults to index.php and is equal to wgScript' );
+       assert.equal( mw.util.wikiScript(), mw.config.get( 'wgScript' ), 'wikiScript() returns wgScript' );
+       assert.equal( mw.util.wikiScript( 'index' ), mw.config.get( 'wgScript' ), "wikiScript( 'index' ) returns wgScript" );
+       assert.equal( mw.util.wikiScript( 'load' ), mw.config.get( 'wgLoadScript' ), "wikiScript( 'load' ) returns wgLoadScript" );
        assert.equal( mw.util.wikiScript( 'api' ), '/w/api.php', 'API path' );
 });
 
index bf5b379..8bca4b0 100644 (file)
@@ -28,7 +28,7 @@
  */
 
 
-require_once (dirname(__FILE__).'/'.'MediaWikiInstallationCommonFunction.php');
+require_once (__DIR__.'/'.'MediaWikiInstallationCommonFunction.php');
 
 /**
  * Test Case ID   : 30 (http://www.mediawiki.org/wiki/New_installer/Test_plan)
@@ -99,4 +99,4 @@ class MediaWikiButtonsAvailabilityTestCase extends MediaWikiInstallationCommonFu
         $this->assertTrue( $this->isElementPresent( "submit-back" ));
         $this->assertTrue( $this->isElementPresent( "submit-continue" ));
     }
-}
\ No newline at end of file
+}
index f1b7945..8e2afe7 100644 (file)
@@ -28,7 +28,7 @@
  */
 
 
-require_once ( dirname( __FILE__ ) . '/MediaWikiInstallationCommonFunction.php' );
+require_once ( __DIR__ . '/MediaWikiInstallationCommonFunction.php' );
 
 /**
  * Test Case ID   : 04 (http://www.mediawiki.org/wiki/New_installer/Test_plan)
index 2d623af..55ad461 100644 (file)
@@ -27,7 +27,7 @@
  *
  */
 
-require_once ( dirname( __FILE__ ) . '/MediaWikiInstallationCommonFunction.php' );
+require_once ( __DIR__ . '/MediaWikiInstallationCommonFunction.php' );
 
 /**
  * Test Case ID   : 02 (http://www.mediawiki.org/wiki/New_installer/Test_plan)
index b112bc0..825ca42 100644 (file)
@@ -28,7 +28,7 @@
  */
 
 
-require_once ( dirname( __FILE__ ) . '/MediaWikiInstallationCommonFunction.php' );
+require_once ( __DIR__ . '/MediaWikiInstallationCommonFunction.php' );
 
 /**
  * Test Case ID   : 09 (http://www.mediawiki.org/wiki/New_installer/Test_plan)
index 024fe5d..c2b3505 100644 (file)
@@ -33,7 +33,7 @@
  * Version        : MediaWiki 1.18alpha
 */
 
-require_once ( dirname( __FILE__ ) . '/MediaWikiInstallationCommonFunction.php' );
+require_once ( __DIR__ . '/MediaWikiInstallationCommonFunction.php' );
 
 class MediaWikiErrorsNamepageTestCase extends MediaWikiInstallationCommonFunction {
 
index 806fcfd..78205cf 100644 (file)
@@ -33,7 +33,7 @@
  * Version        : MediaWiki 1.18alpha
 */
 
-require_once ( dirname( __FILE__ ) . '/MediaWikiInstallationCommonFunction.php' );
+require_once ( __DIR__ . '/MediaWikiInstallationCommonFunction.php' );
 
 class MediaWikiHelpFieldHintTestCase extends MediaWikiInstallationCommonFunction {
 
index 99df8a2..353fa2e 100644 (file)
@@ -27,9 +27,9 @@
  */
 
 require_once 'PHPUnit/Extensions/SeleniumTestCase.php';
-require_once ( dirname( __FILE__ ) . '/MediaWikiInstallationConfig.php' );
-require_once ( dirname(__FILE__) . '/MediaWikiInstallationMessage.php' );
-require_once ( dirname(__FILE__) . '/MediaWikiInstallationVariables.php');
+require_once ( __DIR__ . '/MediaWikiInstallationConfig.php' );
+require_once ( __DIR__ . '/MediaWikiInstallationMessage.php' );
+require_once ( __DIR__ . '/MediaWikiInstallationVariables.php');
 
 
 class MediaWikiInstallationCommonFunction extends PHPUnit_Extensions_SeleniumTestCase {
index 386a50e..58ccc7c 100644 (file)
 require_once 'PHPUnit/Framework.php';
 require_once 'PHPUnit/Framework/TestSuite.php';
 
-require_once ( dirname( __FILE__ ) . '/MediaWikiUserInterfaceTestCase.php' );
-require_once ( dirname( __FILE__ ) . '/MediaWikiButtonsAvailabilityTestCase.php' );
-require_once ( dirname( __FILE__ ) . '/MediaWikiHelpFieldHintTestCase.php' );
-require_once ( dirname( __FILE__ ) . '/MediaWikiRightFrameworkLinksTestCase.php' );
-require_once ( dirname( __FILE__ ) . '/MediaWikiRestartInstallationTestCase.php' );
-require_once ( dirname( __FILE__ ) . '/MediaWikiErrorsConnectToDatabasePageTestCase.php' );
-require_once ( dirname( __FILE__ ) . '/MediaWikiErrorsNamepageTestCase.php' );
-require_once ( dirname( __FILE__ ) . '/MediaWikiMySQLDataBaseTestCase.php' );
-require_once ( dirname( __FILE__ ) . '/MediaWikiMySQLiteDataBaseTestCase.php' );
-require_once ( dirname( __FILE__ ) . '/MediaWikiUpgradeExistingDatabaseTestCase.php' );
-require_once ( dirname( __FILE__ ) . '/MediaWikiDifferntDatabasePrefixTestCase.php' );
-require_once ( dirname( __FILE__ ) . '/MediaWikiDifferentDatabaseAccountTestCase.php' );
-require_once ( dirname( __FILE__ ) . '/MediaWikiOnAlreadyInstalledTestCase.php' );
+require_once ( __DIR__ . '/MediaWikiUserInterfaceTestCase.php' );
+require_once ( __DIR__ . '/MediaWikiButtonsAvailabilityTestCase.php' );
+require_once ( __DIR__ . '/MediaWikiHelpFieldHintTestCase.php' );
+require_once ( __DIR__ . '/MediaWikiRightFrameworkLinksTestCase.php' );
+require_once ( __DIR__ . '/MediaWikiRestartInstallationTestCase.php' );
+require_once ( __DIR__ . '/MediaWikiErrorsConnectToDatabasePageTestCase.php' );
+require_once ( __DIR__ . '/MediaWikiErrorsNamepageTestCase.php' );
+require_once ( __DIR__ . '/MediaWikiMySQLDataBaseTestCase.php' );
+require_once ( __DIR__ . '/MediaWikiMySQLiteDataBaseTestCase.php' );
+require_once ( __DIR__ . '/MediaWikiUpgradeExistingDatabaseTestCase.php' );
+require_once ( __DIR__ . '/MediaWikiDifferntDatabasePrefixTestCase.php' );
+require_once ( __DIR__ . '/MediaWikiDifferentDatabaseAccountTestCase.php' );
+require_once ( __DIR__ . '/MediaWikiOnAlreadyInstalledTestCase.php' );
 
 
 
index 399ed4e..16d065c 100644 (file)
@@ -28,7 +28,7 @@
  */
 
 
-require_once (dirname(__FILE__).'/'.'MediaWikiInstallationCommonFunction.php');
+require_once (__DIR__.'/'.'MediaWikiInstallationCommonFunction.php');
 
 /**
  * Test Case ID   : 01 (http://www.mediawiki.org/wiki/New_installer/Test_plan)
index f57c1a5..4ca6916 100644 (file)
@@ -28,7 +28,7 @@
  */
 
 
-require_once (dirname(__FILE__).'/'.'MediaWikiInstallationCommonFunction.php');
+require_once (__DIR__.'/'.'MediaWikiInstallationCommonFunction.php');
 
 /**
  * Test Case ID   : 06 (http://www.mediawiki.org/wiki/New_installer/Test_plan)
index 4c05266..7a1b615 100644 (file)
@@ -28,7 +28,7 @@
  */
 
 
-require_once (dirname(__FILE__).'/'.'MediaWikiInstallationCommonFunction.php');
+require_once (__DIR__.'/'.'MediaWikiInstallationCommonFunction.php');
 
 
 /**
index b9ca830..ea87de0 100644 (file)
@@ -29,7 +29,7 @@
 
 
 
-require_once (dirname(__FILE__).'/'.'MediaWikiInstallationCommonFunction.php');
+require_once (__DIR__.'/'.'MediaWikiInstallationCommonFunction.php');
 
 /**
  * Test Case ID   : 11, 12 (http://www.mediawiki.org/wiki/New_installer/Test_plan)
index 700172c..7b0fcf3 100644 (file)
@@ -28,7 +28,7 @@
  */
 
 
-require_once (dirname(__FILE__).'/'.'MediaWikiInstallationCommonFunction.php');
+require_once (__DIR__.'/'.'MediaWikiInstallationCommonFunction.php');
 
 /**
  * Test Case ID   : 14, 15, 16, 17 (http://www.mediawiki.org/wiki/New_installer/Test_plan)
index eb82071..5cdc8d4 100644 (file)
@@ -28,7 +28,7 @@
  */
 
 
-require_once (dirname(__FILE__).'/'.'MediaWikiInstallationCommonFunction.php');
+require_once (__DIR__.'/'.'MediaWikiInstallationCommonFunction.php');
 
 /**
  * Test Case ID   : 05 (http://www.mediawiki.org/wiki/New_installer/Test_plan)
@@ -114,4 +114,4 @@ class MediaWikiUpgradeExistingDatabaseTestCase extends MediaWikiInstallationComm
         $this->chooseCancelOnNextConfirmation();
         parent::restartInstallation();
     }
-}
\ No newline at end of file
+}
index 0994892..15fad95 100644 (file)
@@ -27,7 +27,7 @@
  *
  */
 
-require_once (dirname(__FILE__).'/'.'MediaWikiInstallationCommonFunction.php');
+require_once (__DIR__.'/'.'MediaWikiInstallationCommonFunction.php');
 
 /**
  * Test Case ID   : 18 - 27 (http://www.mediawiki.org/wiki/New_installer/Test_plan)
index 5fc1a5a..6b8fc97 100644 (file)
@@ -43,7 +43,7 @@ class MediawikiCoreSmokeTestCase extends SeleniumTestCase {
                $this->login();
                $this->open( $this->getUrl() .
                        '/index.php?title=Special:Upload' );
-               $this->type( 'wpUploadFile', dirname( __FILE__ ) .
+               $this->type( 'wpUploadFile', __DIR__ .
                        "\\..\\data\\Wikipedia-logo-v2-de.png" );
                $this->check( 'wpIgnoreWarning' );
                $this->click( 'wpUpload' );
index 01d87e4..b8d2d48 100644 (file)
@@ -27,7 +27,7 @@
  *
  */
 
-require_once dirname( dirname( __FILE__ ) ) . '/SeleniumTestConstants.php';
+require_once dirname( __DIR__ ) . '/SeleniumTestConstants.php';
 
 class MyContributionsTestCase extends SeleniumTestCase {
 
index d1ee3e7..998fab9 100644 (file)
@@ -27,7 +27,7 @@
  *
  */
 
-require_once dirname( dirname( __FILE__ ) ) . '/SeleniumTestConstants.php';
+require_once dirname( __DIR__ ) . '/SeleniumTestConstants.php';
 
 class MyWatchListTestCase extends SeleniumTestCase {
 
index 5fc4446..8fc868d 100644 (file)
--- a/thumb.php
+++ b/thumb.php
@@ -25,7 +25,7 @@ define( 'MW_NO_OUTPUT_COMPRESSION', 1 );
 if ( isset( $_SERVER['MW_COMPILED'] ) ) {
        require( 'core/includes/WebStart.php' );
 } else {
-       require( dirname( __FILE__ ) . '/includes/WebStart.php' );
+       require( __DIR__ . '/includes/WebStart.php' );
 }
 
 // Don't use fancy mime detection, just check the file extension for jpg/gif/png
@@ -71,9 +71,10 @@ function wfThumbHandle404() {
        }
        # Just get the URI path (REDIRECT_URL/REQUEST_URI is either a full URL or a path)
        if ( substr( $uriPath, 0, 1 ) !== '/' ) {
-               $uri = new Uri( $uriPath );
-               $uriPath = $uri->getPath();
-               if ( $uriPath === null ) {
+               $bits = wfParseUrl( $uriPath );
+               if ( $bits && isset( $bits['path'] ) ) {
+                       $uriPath = $bits['path'];
+               } else {
                        wfThumbError( 404, 'The source file for the specified thumbnail does not exist.' );
                        return;
                }
@@ -204,27 +205,34 @@ function wfStreamThumb( array $params ) {
                }
        }
 
+       $thumbName = $img->thumbName( $params );
+       if ( !strlen( $thumbName ) ) { // invalid params?
+               wfThumbError( 400, 'The specified thumbnail parameters are not valid.' );
+               wfProfileOut( __METHOD__ );
+               return;
+       }
+
+       $disposition = $img->getThumbDisposition( $thumbName );
+       $headers[] = "Content-Disposition: $disposition";
+
        // Stream the file if it exists already...
        try {
-               $thumbName = $img->thumbName( $params );
-               if ( strlen( $thumbName ) ) { // valid params?
-                       // For 404 handled thumbnails, we only use the the base name of the URI
-                       // for the thumb params and the parent directory for the source file name.
-                       // Check that the zone relative path matches up so squid caches won't pick
-                       // up thumbs that would not be purged on source file deletion (bug 34231).
-                       if ( isset( $params['rel404'] ) // thumbnail was handled via 404
-                               && urldecode( $params['rel404'] ) !== $img->getThumbRel( $thumbName ) )
-                       {
-                               wfThumbError( 404, 'The source file for the specified thumbnail does not exist.' );
-                               wfProfileOut( __METHOD__ );
-                               return;
-                       }
-                       $thumbPath = $img->getThumbPath( $thumbName );
-                       if ( $img->getRepo()->fileExists( $thumbPath ) ) {
-                               $img->getRepo()->streamFile( $thumbPath, $headers );
-                               wfProfileOut( __METHOD__ );
-                               return;
-                       }
+               // For 404 handled thumbnails, we only use the the base name of the URI
+               // for the thumb params and the parent directory for the source file name.
+               // Check that the zone relative path matches up so squid caches won't pick
+               // up thumbs that would not be purged on source file deletion (bug 34231).
+               if ( isset( $params['rel404'] ) // thumbnail was handled via 404
+                       && urldecode( $params['rel404'] ) !== $img->getThumbRel( $thumbName ) )
+               {
+                       wfThumbError( 404, 'The source file for the specified thumbnail does not exist.' );
+                       wfProfileOut( __METHOD__ );
+                       return;
+               }
+               $thumbPath = $img->getThumbPath( $thumbName );
+               if ( $img->getRepo()->fileExists( $thumbPath ) ) {
+                       $img->getRepo()->streamFile( $thumbPath, $headers );
+                       wfProfileOut( __METHOD__ );
+                       return;
                }
        } catch ( MWException $e ) {
                wfThumbError( 500, $e->getHTML() );
index abc71dd..69bdddd 100644 (file)
@@ -26,4 +26,4 @@ define( 'THUMB_HANDLER', true );
 
 # Execute thumb.php, having set THUMB_HANDLER so that
 # it knows to extract params from a thumbnail file URL.
-require( dirname( __FILE__ ) . '/thumb.php' );
+require( __DIR__ . '/thumb.php' );