Merge "Add isCurrentWikiId()/isCurrentWikiDomain()/getCurrentWikiDomain() to WikiMap"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Mon, 29 Oct 2018 22:27:15 +0000 (22:27 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Mon, 29 Oct 2018 22:27:15 +0000 (22:27 +0000)
587 files changed:
.gitignore
INSTALL
RELEASE-NOTES-1.32
RELEASE-NOTES-1.33 [new file with mode: 0644]
UPGRADE
autoload.php
composer.json
docs/hooks.txt
includes/AjaxResponse.php
includes/AutoLoader.php
includes/Block.php
includes/DefaultSettings.php
includes/EditPage.php
includes/FileDeleteForm.php
includes/GlobalFunctions.php
includes/MediaWiki.php
includes/MediaWikiServices.php
includes/MovePage.php
includes/OutputPage.php
includes/PHPVersionCheck.php
includes/ProtectionForm.php
includes/Revision.php
includes/ServiceWiring.php
includes/Setup.php
includes/actions/RawAction.php
includes/actions/RollbackAction.php
includes/api/ApiBase.php
includes/api/ApiBlock.php
includes/api/ApiEditPage.php
includes/api/ApiFormatBase.php
includes/api/ApiHelp.php
includes/api/ApiOptions.php
includes/api/ApiParse.php
includes/api/ApiQueryBlocks.php
includes/api/ApiQueryLogEvents.php
includes/api/ApiQueryRevisionsBase.php
includes/api/ApiQueryUserInfo.php
includes/api/ApiRollback.php
includes/api/i18n/ar.json
includes/api/i18n/de.json
includes/api/i18n/en.json
includes/api/i18n/fr.json
includes/api/i18n/it.json
includes/api/i18n/ko.json
includes/api/i18n/lb.json
includes/api/i18n/pt-br.json
includes/api/i18n/pt.json
includes/api/i18n/qqq.json
includes/api/i18n/sr-el.json
includes/api/i18n/sv.json
includes/api/i18n/uk.json
includes/api/i18n/zh-hant.json
includes/auth/AuthManager.php
includes/auth/AuthManagerAuthPlugin.php
includes/auth/LegacyHookPreAuthenticationProvider.php
includes/block/BlockRestriction.php [new file with mode: 0644]
includes/block/Restriction/AbstractRestriction.php [new file with mode: 0644]
includes/block/Restriction/PageRestriction.php [new file with mode: 0644]
includes/block/Restriction/Restriction.php [new file with mode: 0644]
includes/cache/BacklinkCache.php
includes/cache/MessageCache.php
includes/cache/localisation/LCStoreCDB.php
includes/cache/localisation/LCStoreStaticArray.php
includes/changes/ChangesListBooleanFilter.php
includes/changes/ChangesListFilterGroup.php
includes/changetags/ChangeTags.php
includes/clientpool/SquidPurgeClient.php
includes/collation/IcuCollation.php
includes/compat/normal/UtfNormal.php [deleted file]
includes/debug/logger/monolog/KafkaHandler.php
includes/deferred/JobQueueEnqueueUpdate.php [new file with mode: 0644]
includes/deferred/MergeableUpdate.php
includes/deferred/UserEditCountUpdate.php [new file with mode: 0644]
includes/diff/DifferenceEngine.php
includes/export/WikiExporter.php
includes/filerepo/FileRepo.php
includes/filerepo/ForeignAPIRepo.php
includes/filerepo/ForeignDBViaLBRepo.php
includes/filerepo/LocalRepo.php
includes/filerepo/RepoGroup.php
includes/filerepo/file/LocalFile.php
includes/htmlform/HTMLForm.php
includes/htmlform/HTMLFormField.php
includes/htmlform/fields/HTMLFormFieldWithButton.php
includes/htmlform/fields/HTMLMultiSelectField.php
includes/htmlform/fields/HTMLTitlesMultiselectField.php [new file with mode: 0644]
includes/http/MWHttpRequest.php
includes/import/WikiImporter.php
includes/installer/DatabaseUpdater.php
includes/installer/Installer.php
includes/installer/MysqlInstaller.php
includes/installer/WebInstaller.php
includes/installer/WebInstallerDocument.php
includes/installer/WebInstallerExistingWiki.php
includes/installer/WebInstallerOptions.php
includes/installer/WebInstallerOutput.php
includes/installer/WebInstallerWelcome.php
includes/installer/i18n/ar.json
includes/installer/i18n/be-tarask.json
includes/installer/i18n/bg.json
includes/installer/i18n/da.json
includes/installer/i18n/de.json
includes/installer/i18n/en.json
includes/installer/i18n/fr.json
includes/installer/i18n/ia.json
includes/installer/i18n/ja.json
includes/installer/i18n/nb.json
includes/installer/i18n/pt-br.json
includes/installer/i18n/pt.json
includes/installer/i18n/ru.json
includes/installer/i18n/sr-ec.json
includes/installer/i18n/sr-el.json
includes/installer/i18n/sv.json
includes/installer/i18n/vi.json
includes/jobqueue/JobQueueGroup.php
includes/jobqueue/JobRunner.php
includes/libs/CSSMin.php
includes/libs/Cookie.php
includes/libs/CryptRand.php
includes/libs/JavaScriptMinifier.php
includes/libs/mime/MimeAnalyzer.php
includes/libs/objectcache/BagOStuff.php
includes/libs/objectcache/RedisBagOStuff.php
includes/libs/objectcache/WANObjectCache.php
includes/libs/rdbms/database/Database.php
includes/libs/rdbms/database/DatabaseMssql.php
includes/libs/rdbms/database/IDatabase.php
includes/libs/rdbms/lbfactory/LBFactoryMulti.php
includes/libs/rdbms/loadbalancer/LoadBalancer.php
includes/libs/virtualrest/ParsoidVirtualRESTService.php
includes/libs/virtualrest/RestbaseVirtualRESTService.php
includes/logging/BlockLogFormatter.php
includes/logging/LogFormatter.php
includes/logging/LogPage.php
includes/mail/EmailNotification.php
includes/mail/MailAddress.php
includes/mail/UserMailer.php
includes/media/IPTC.php
includes/media/MediaHandler.php
includes/objectcache/ObjectCache.php
includes/page/Article.php
includes/page/ImagePage.php
includes/page/WikiPage.php
includes/parser/CoreParserFunctions.php
includes/parser/DateFormatter.php
includes/parser/MWTidy.php
includes/parser/Parser.php
includes/parser/ParserFactory.php
includes/parser/ParserOptions.php
includes/parser/ParserOutput.php
includes/parser/Preprocessor_DOM.php
includes/parser/Preprocessor_Hash.php
includes/preferences/DefaultPreferencesFactory.php
includes/registration/ExtensionProcessor.php
includes/resourceloader/ResourceLoader.php
includes/resourceloader/ResourceLoaderEditToolbarModule.php [deleted file]
includes/resourceloader/ResourceLoaderStartUpModule.php
includes/search/SearchEngine.php
includes/shell/Shell.php
includes/site/HashSiteStore.php
includes/skins/BaseTemplate.php
includes/skins/Skin.php
includes/specialpage/ChangesListSpecialPage.php
includes/specialpage/LoginSignupSpecialPage.php
includes/specialpage/SpecialPageFactory.php
includes/specials/SpecialBlock.php
includes/specials/SpecialBooksources.php
includes/specials/SpecialConfirmemail.php
includes/specials/SpecialEditTags.php
includes/specials/SpecialEditWatchlist.php
includes/specials/SpecialEmailuser.php
includes/specials/SpecialGoToInterwiki.php
includes/specials/SpecialImport.php
includes/specials/SpecialMediaStatistics.php
includes/specials/SpecialMovepage.php
includes/specials/SpecialRevisiondelete.php
includes/specials/SpecialSpecialpages.php
includes/specials/SpecialTags.php
includes/specials/SpecialUndelete.php
includes/specials/SpecialUpload.php
includes/specials/SpecialUserrights.php
includes/specials/SpecialVersion.php
includes/specials/formfields/UploadSourceField.php
includes/specials/pagers/BlockListPager.php
includes/upload/UploadBase.php
includes/user/User.php
includes/utils/MWCryptRand.php
includes/utils/MWFileProps.php
includes/watcheditem/NoWriteWatchedItemStore.php
includes/watcheditem/WatchedItemStore.php
includes/watcheditem/WatchedItemStoreInterface.php
includes/widget/ExpiryInputWidget.php
includes/widget/TitlesMultiselectWidget.php [new file with mode: 0644]
includes/widget/search/InterwikiSearchResultSetWidget.php
languages/ConverterRule.php
languages/Language.php
languages/LanguageCode.php
languages/LanguageConverter.php
languages/classes/LanguageAr.php
languages/classes/LanguageBe_tarask.php
languages/classes/LanguageMl.php
languages/i18n/ace.json
languages/i18n/ady-cyrl.json
languages/i18n/aeb-arab.json
languages/i18n/af.json
languages/i18n/ais.json
languages/i18n/aln.json
languages/i18n/am.json
languages/i18n/an.json
languages/i18n/ang.json
languages/i18n/anp.json
languages/i18n/ar.json
languages/i18n/arn.json
languages/i18n/arq.json
languages/i18n/ary.json
languages/i18n/arz.json
languages/i18n/as.json
languages/i18n/ase.json
languages/i18n/ast.json
languages/i18n/atj.json
languages/i18n/avk.json
languages/i18n/awa.json
languages/i18n/az.json
languages/i18n/azb.json
languages/i18n/ba.json
languages/i18n/bar.json
languages/i18n/bcc.json
languages/i18n/bcl.json
languages/i18n/be-tarask.json
languages/i18n/be.json
languages/i18n/bg.json
languages/i18n/bgn.json
languages/i18n/bho.json
languages/i18n/bjn.json
languages/i18n/bn.json
languages/i18n/bo.json
languages/i18n/bpy.json
languages/i18n/bqi.json
languages/i18n/br.json
languages/i18n/bs.json
languages/i18n/btm.json
languages/i18n/ca.json
languages/i18n/cdo.json
languages/i18n/ce.json
languages/i18n/ceb.json
languages/i18n/ckb.json
languages/i18n/co.json
languages/i18n/cps.json
languages/i18n/crh-cyrl.json
languages/i18n/crh-latn.json
languages/i18n/cs.json
languages/i18n/csb.json
languages/i18n/cv.json
languages/i18n/cy.json
languages/i18n/da.json
languages/i18n/de-formal.json
languages/i18n/de.json
languages/i18n/diq.json
languages/i18n/dsb.json
languages/i18n/dtp.json
languages/i18n/dty.json
languages/i18n/egl.json
languages/i18n/el.json
languages/i18n/en-gb.json
languages/i18n/en.json
languages/i18n/eo.json
languages/i18n/es-formal.json
languages/i18n/es.json
languages/i18n/et.json
languages/i18n/eu.json
languages/i18n/ext.json
languages/i18n/fa.json
languages/i18n/fi.json
languages/i18n/fo.json
languages/i18n/fr.json
languages/i18n/frc.json
languages/i18n/frp.json
languages/i18n/frr.json
languages/i18n/fur.json
languages/i18n/fy.json
languages/i18n/ga.json
languages/i18n/gag.json
languages/i18n/gan-hans.json
languages/i18n/gan-hant.json
languages/i18n/gcr.json
languages/i18n/gd.json
languages/i18n/gl.json
languages/i18n/gom-deva.json
languages/i18n/gom-latn.json
languages/i18n/gor.json
languages/i18n/grc.json
languages/i18n/gsw.json
languages/i18n/gu.json
languages/i18n/gv.json
languages/i18n/ha.json
languages/i18n/hak.json
languages/i18n/haw.json
languages/i18n/he.json
languages/i18n/hi.json
languages/i18n/hif-latn.json
languages/i18n/hil.json
languages/i18n/hr.json
languages/i18n/hrx.json
languages/i18n/hsb.json
languages/i18n/ht.json
languages/i18n/hu-formal.json
languages/i18n/hu.json
languages/i18n/hy.json
languages/i18n/ia.json
languages/i18n/id.json
languages/i18n/ie.json
languages/i18n/ig.json
languages/i18n/ilo.json
languages/i18n/inh.json
languages/i18n/io.json
languages/i18n/is.json
languages/i18n/it.json
languages/i18n/ja.json
languages/i18n/jam.json
languages/i18n/jut.json
languages/i18n/jv.json
languages/i18n/ka.json
languages/i18n/kaa.json
languages/i18n/kab.json
languages/i18n/kbd-cyrl.json
languages/i18n/khw.json
languages/i18n/kiu.json
languages/i18n/kjp.json
languages/i18n/kk-arab.json
languages/i18n/kk-cyrl.json
languages/i18n/kk-latn.json
languages/i18n/km.json
languages/i18n/kn.json
languages/i18n/ko.json
languages/i18n/krc.json
languages/i18n/ksh.json
languages/i18n/ku-latn.json
languages/i18n/kw.json
languages/i18n/ky.json
languages/i18n/la.json
languages/i18n/lad.json
languages/i18n/lb.json
languages/i18n/lez.json
languages/i18n/lfn.json
languages/i18n/lg.json
languages/i18n/li.json
languages/i18n/lij.json
languages/i18n/lki.json
languages/i18n/lmo.json
languages/i18n/lo.json
languages/i18n/loz.json
languages/i18n/lrc.json
languages/i18n/lt.json
languages/i18n/lus.json
languages/i18n/luz.json
languages/i18n/lv.json
languages/i18n/lzh.json
languages/i18n/mai.json
languages/i18n/map-bms.json
languages/i18n/mdf.json
languages/i18n/mg.json
languages/i18n/mhr.json
languages/i18n/min.json
languages/i18n/mk.json
languages/i18n/ml.json
languages/i18n/mn.json
languages/i18n/mni.json
languages/i18n/mnw.json
languages/i18n/mr.json
languages/i18n/ms.json
languages/i18n/mt.json
languages/i18n/mwl.json
languages/i18n/my.json
languages/i18n/myv.json
languages/i18n/mzn.json
languages/i18n/nah.json
languages/i18n/nan.json
languages/i18n/nap.json
languages/i18n/nb.json
languages/i18n/nds-nl.json
languages/i18n/nds.json
languages/i18n/ne.json
languages/i18n/nl.json
languages/i18n/nn.json
languages/i18n/nso.json
languages/i18n/oc.json
languages/i18n/olo.json
languages/i18n/or.json
languages/i18n/os.json
languages/i18n/pa.json
languages/i18n/pag.json
languages/i18n/pam.json
languages/i18n/pcd.json
languages/i18n/pfl.json
languages/i18n/pl.json
languages/i18n/pms.json
languages/i18n/pnb.json
languages/i18n/prg.json
languages/i18n/ps.json
languages/i18n/pt-br.json
languages/i18n/pt.json
languages/i18n/qqq.json
languages/i18n/qu.json
languages/i18n/qug.json
languages/i18n/rm.json
languages/i18n/ro.json
languages/i18n/roa-tara.json
languages/i18n/ru.json
languages/i18n/rue.json
languages/i18n/sa.json
languages/i18n/sah.json
languages/i18n/sat.json
languages/i18n/sc.json
languages/i18n/scn.json
languages/i18n/sco.json
languages/i18n/sd.json
languages/i18n/sdc.json
languages/i18n/se.json
languages/i18n/sei.json
languages/i18n/ses.json
languages/i18n/sgs.json
languages/i18n/sh.json
languages/i18n/shi.json
languages/i18n/shn.json
languages/i18n/shy-latn.json
languages/i18n/si.json
languages/i18n/sk.json
languages/i18n/skr-arab.json
languages/i18n/sl.json
languages/i18n/sli.json
languages/i18n/so.json
languages/i18n/sq.json
languages/i18n/sr-ec.json
languages/i18n/sr-el.json
languages/i18n/srn.json
languages/i18n/stq.json
languages/i18n/su.json
languages/i18n/sv.json
languages/i18n/sw.json
languages/i18n/szl.json
languages/i18n/ta.json
languages/i18n/tcy.json
languages/i18n/te.json
languages/i18n/tet.json
languages/i18n/tg-cyrl.json
languages/i18n/tg-latn.json
languages/i18n/th.json
languages/i18n/tk.json
languages/i18n/tl.json
languages/i18n/tr.json
languages/i18n/ts.json
languages/i18n/tt-cyrl.json
languages/i18n/tt-latn.json
languages/i18n/tyv.json
languages/i18n/udm.json
languages/i18n/ug-arab.json
languages/i18n/uk.json
languages/i18n/ur.json
languages/i18n/uz.json
languages/i18n/vec.json
languages/i18n/vep.json
languages/i18n/vi.json
languages/i18n/vo.json
languages/i18n/vro.json
languages/i18n/wa.json
languages/i18n/war.json
languages/i18n/wo.json
languages/i18n/wuu.json
languages/i18n/xal.json
languages/i18n/xmf.json
languages/i18n/yi.json
languages/i18n/yo.json
languages/i18n/yue.json
languages/i18n/zea.json
languages/i18n/zgh.json
languages/i18n/zh-hans.json
languages/i18n/zh-hant.json
languages/messages/MessagesAr.php
languages/messages/MessagesBe_tarask.php
languages/messages/MessagesDe.php
languages/messages/MessagesEn.php
languages/messages/MessagesFa.php
languages/messages/MessagesKsh.php
languages/messages/MessagesRu.php
maintenance/Maintenance.php
maintenance/dictionary/mediawiki.dic
maintenance/jsduck/categories.json
maintenance/language/generateCollationData.php
maintenance/populateCategory.php
maintenance/resetUserEmail.php
maintenance/storage/checkStorage.php
maintenance/storage/fixT22757.php
maintenance/storage/moveToExternal.php
maintenance/updateCollation.php
profileinfo.php
resources/Resources.php
resources/src/mediawiki.base/mediawiki.base.js
resources/src/mediawiki.feedback/feedback.js
resources/src/mediawiki.jqueryMsg/mediawiki.jqueryMsg.js
resources/src/mediawiki.less/mediawiki.mixins.less
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.ChangesListWrapperWidget.highlightCircles.seenunseen.less
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.ChangesListWrapperWidget.less
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterMenuOptionWidget.less
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.ItemMenuOptionWidget.less
resources/src/mediawiki.skinning/images/external-link-icons.svg [deleted file]
resources/src/mediawiki.special.block.js
resources/src/mediawiki.special.block.less [new file with mode: 0644]
resources/src/mediawiki.toolbar/images/ar/button_bold.png [deleted file]
resources/src/mediawiki.toolbar/images/ar/button_headline.png [deleted file]
resources/src/mediawiki.toolbar/images/ar/button_italic.png [deleted file]
resources/src/mediawiki.toolbar/images/ar/button_link.png [deleted file]
resources/src/mediawiki.toolbar/images/ar/button_nowiki.png [deleted file]
resources/src/mediawiki.toolbar/images/be-tarask/button_bold.png [deleted file]
resources/src/mediawiki.toolbar/images/be-tarask/button_italic.png [deleted file]
resources/src/mediawiki.toolbar/images/be-tarask/button_link.png [deleted file]
resources/src/mediawiki.toolbar/images/de/button_bold.png [deleted file]
resources/src/mediawiki.toolbar/images/de/button_italic.png [deleted file]
resources/src/mediawiki.toolbar/images/en/button_bold.png [deleted file]
resources/src/mediawiki.toolbar/images/en/button_extlink.png [deleted file]
resources/src/mediawiki.toolbar/images/en/button_headline.png [deleted file]
resources/src/mediawiki.toolbar/images/en/button_hr.png [deleted file]
resources/src/mediawiki.toolbar/images/en/button_image.png [deleted file]
resources/src/mediawiki.toolbar/images/en/button_italic.png [deleted file]
resources/src/mediawiki.toolbar/images/en/button_link.png [deleted file]
resources/src/mediawiki.toolbar/images/en/button_media.png [deleted file]
resources/src/mediawiki.toolbar/images/en/button_nowiki.png [deleted file]
resources/src/mediawiki.toolbar/images/en/button_sig.png [deleted file]
resources/src/mediawiki.toolbar/images/fa/button_bold.png [deleted file]
resources/src/mediawiki.toolbar/images/fa/button_headline.png [deleted file]
resources/src/mediawiki.toolbar/images/fa/button_italic.png [deleted file]
resources/src/mediawiki.toolbar/images/fa/button_link.png [deleted file]
resources/src/mediawiki.toolbar/images/fa/button_nowiki.png [deleted file]
resources/src/mediawiki.toolbar/images/ksh/LICENSE [deleted file]
resources/src/mediawiki.toolbar/images/ksh/button_italic.png [deleted file]
resources/src/mediawiki.toolbar/images/ru/LICENSE [deleted file]
resources/src/mediawiki.toolbar/images/ru/button_bold.png [deleted file]
resources/src/mediawiki.toolbar/images/ru/button_italic.png [deleted file]
resources/src/mediawiki.toolbar/images/ru/button_link.png [deleted file]
resources/src/mediawiki.toolbar/toolbar.js [deleted file]
resources/src/mediawiki.toolbar/toolbar.less [deleted file]
resources/src/mediawiki.widgets/mw.widgets.CalendarWidget.less
resources/src/mediawiki.widgets/mw.widgets.ExpiryInputWidget.js
resources/src/mediawiki.widgets/mw.widgets.TitleWidget.js
resources/src/mediawiki.widgets/mw.widgets.TitlesMultiselectWidget.js [new file with mode: 0644]
resources/src/startup/startup.js
tests/common/TestsAutoLoader.php
tests/parser/ParserTestParserHook.php
tests/parser/extraParserTests.txt
tests/phpunit/documentation/ReleaseNotesTest.php
tests/phpunit/includes/BlockTest.php
tests/phpunit/includes/ExtraParserTest.php
tests/phpunit/includes/MediaWikiServicesTest.php
tests/phpunit/includes/OutputPageTest.php
tests/phpunit/includes/Revision/MutableRevisionRecordTest.php
tests/phpunit/includes/RevisionDbTestBase.php
tests/phpunit/includes/RevisionMcrDbTest.php
tests/phpunit/includes/RevisionMcrReadNewDbTest.php
tests/phpunit/includes/RevisionTest.php
tests/phpunit/includes/TitleMethodsTest.php
tests/phpunit/includes/TitlePermissionTest.php
tests/phpunit/includes/api/ApiBlockTest.php
tests/phpunit/includes/api/ApiQueryBlocksTest.php [new file with mode: 0644]
tests/phpunit/includes/api/ApiQueryInfoTest.php
tests/phpunit/includes/api/ApiQueryUserInfoTest.php [new file with mode: 0644]
tests/phpunit/includes/api/ApiStashEditTest.php
tests/phpunit/includes/auth/LegacyHookPreAuthenticationProviderTest.php [deleted file]
tests/phpunit/includes/block/BlockRestrictionTest.php [new file with mode: 0644]
tests/phpunit/includes/block/Restriction/PageRestrictionTest.php [new file with mode: 0644]
tests/phpunit/includes/block/Restriction/RestrictionTestCase.php [new file with mode: 0644]
tests/phpunit/includes/libs/rdbms/database/DatabaseSQLTest.php
tests/phpunit/includes/libs/rdbms/database/DatabaseTest.php
tests/phpunit/includes/linker/LinkRendererTest.php
tests/phpunit/includes/logging/BlockLogFormatterTest.php
tests/phpunit/includes/page/WikiPageDbTestBase.php
tests/phpunit/includes/parser/ParserMethodsTest.php
tests/phpunit/includes/resourceloader/ResourceLoaderWikiModuleTest.php
tests/phpunit/includes/search/SearchNearMatcherTest.php
tests/phpunit/includes/specials/SpecialBlockTest.php [new file with mode: 0644]
tests/phpunit/includes/specials/pagers/BlockListPagerTest.php [new file with mode: 0644]
tests/phpunit/includes/user/UserTest.php
tests/phpunit/includes/watcheditem/WatchedItemStoreUnitTest.php
tests/phpunit/languages/LanguageTest.php
tests/phpunit/languages/classes/LanguageArTest.php
tests/phpunit/languages/classes/LanguageMlTest.php
tests/phpunit/languages/classes/LanguageSrTest.php
tests/qunit/suites/resources/mediawiki/mediawiki.base.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js

index 248931e..44f739e 100644 (file)
@@ -20,6 +20,8 @@ project.index
 ## Sublime
 sublime-*
 sftp-config.json
+## Visual Studio Code
+*.vscode/
 
 # MediaWiki install & usage
 /cache
diff --git a/INSTALL b/INSTALL
index d68342c..b6364e1 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -17,8 +17,8 @@ Required software:
 MediaWiki is developed and tested mainly on Unix/Linux platforms, but should
 work on Windows as well.
 
-Support for rendering mathematical formulas requires installing the Math extension,
-see https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:Math
+Support for specialised content requires installing the relevant extension. For
+formulæ, see https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:Math
 
 Don't forget to check the RELEASE-NOTES file...
 
@@ -67,8 +67,8 @@ available to download from the installer. Download this now, there is not a
 way (yet) to get it after you exit the installer. Place it in the main wiki
 directory, and the wiki should now be working.
 
-Once the wiki is set up, you should remove the mw-config directory (though it will
-refuse to config again if the wiki is set up).
+Once the wiki is set up, you should remove the mw-config directory (though it
+will refuse to config again if the wiki is set up).
 
 ----
 
index 9e71285..2cd1222 100644 (file)
@@ -27,6 +27,15 @@ production.
   by default.
 * $wgGrantPermissions – A new grant group, 'editsiteconfig', is added for
   granting the above rights.
+* $wgDBDefaultGroup – A default database group for use by maintenance scripts.
+* $wgResourceLoaderEnableJSProfiler – This new configuration setting lets you
+  enable client-side profiling of JavaScript modules; it is off by default.
+* (T193868) $wgChangeTagsSchemaMigrationStage — This temporary configuration
+  setting allows sysadmins to gradually migrate the database table schema for
+  how change tags are stored.
+* (T199334) $wgTagStatisticsNewTable — This temporary configuration setting
+  allows sysadmins to enable the caching of Special:Tags via the new
+  change_tag_def table.
 
 ==== Changed configuration ====
 * $wgUseAjax – This setting, deprecated in 1.31, is now ignored.
@@ -44,6 +53,17 @@ production.
   MIGRATION_WRITE_NEW. It instead uses SCHEMA_COMPAT_WRITE_BOTH |
   SCHEMA_COMPAT_READ_OLD and SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_NEW
   for intermediate stages of migration.
+* $wgDBTableOptions – The default table options now use the binary charset. The
+  default was already overridden in the installer-generated LocalSettings.php,
+  and so is always set to binary after the installer UI option was removed. The
+  default value is only used when the installer installs an extension.
+* $wgPopularPasswordFile — The location of the default popular passwords file
+  has been moved to be in line with other non-PHP files used by libraries and
+  classes.
+* $wgEnableImageWhitelist is now disabled by default, as it opens up a hole for
+  potential privacy leaks by administrators. You can check
+  "MediaWiki:External image whitelist" on your wiki to see whether the feature
+  was ever used, and whether it needs to be re-enabled.
 
 ==== Removed configuration ====
 * $wgEnableAPI and $wgEnableWriteAPI – These settings, deprecated in 1.31,
@@ -57,6 +77,19 @@ production.
   message `emailsender`.
 * $wgTidyConfig – The experimental Html5Internal and Html5Depurate tidy drivers
   were removed. RemexHtml, which is the default, should be used instead.
+* (T181318) The $wgStyleVersion setting and its appendage to various script and
+  style URLs in OutputPage, deprecated in 1.31, was removed.
+* (T140807) The wgResourceLoaderLESSImportPaths configuration option was removed
+  from ResourceLoader. Instead, use `@import` statements in LESS to import
+  files directly from nearby directories within the same project.
+* (T140804) The wgResourceLoaderLESSVars configuration option, deprecated
+  since 1.30, was removed. Instead, to expose variables from PHP to LESS, use
+  the ResourceLoaderModule::getLessVars() method.
+* $wgResourceLoaderValidateStaticJS – This setting, unused since MediaWiki 1.18,
+  was removed.
+* Two temporary variables for deploying the feature of filters on change lists,
+  $wgStructuredChangeFiltersShowPreference introduced in MediaWiki 1.30 and
+  $wgStructuredChangeFiltersOnWatchlist in 1.31, were removed.
 
 === New features in 1.32 ===
 * (T112474) Generalized the ResourceLoader mechanism for overriding modules
@@ -104,25 +137,39 @@ production.
 === External library changes in 1.32 ===
 
 ==== New external libraries ====
-* Added wikimedia/xmp-reader 0.6.0.
-* Added Add pear/Net_SMTP 1.8.0.
-* …
+* Added pear/Net_SMTP v1.8.0.
+* Added wikimedia/xmp-reader v0.6.0.
+
+* Added cache/integration-tests v0.16.0 (dev-only).
+* Added giorgiosironi/eris v0.10.0 (dev-only).
+* Added seld/jsonlint v1.7.1 (dev-only).
+
+* Added EasyDeflate (unversioned).
 
 ==== Changed external libraries ====
-* Updated qunitjs from 2.4.0 to 2.6.2.
-* Updated wikimedia/scoped-callback from 1.0.0 to 2.0.0.
+* Updated OOUI from v0.26.3 to v0.29.2.
+* Updated wikimedia/base-convert from v1.0.1 to v2.0.0.
+* Updated wikimedia/remex-html from v1.0.3 to v2.0.1.
+* Updated wikimedia/scoped-callback from v1.0.0 to v2.0.0.
 ** ScopedCallback objects can no longer be serialized.
-* Updated wikimedia/wrappedstring from 2.3.0 to 3.0.1.
-* Updated mediawiki/mediawiki-codesniffer from v20.0.0 to v21.0.0.
-* Updated composer/spdx-licenses from 1.3.0 to 1.4.0.
-* Updated jquery.i18n from 1.0.4 to 1.0.5.
-* Updated wikimedia/timestamp from 1.0.0 to 2.2.0.
-* Updated wikimedia/remex-html from 1.0.3 to 2.0.0.
+* Updated wikimedia/timestamp from v1.0.0 to v2.2.0.
+* Updated wikimedia/wrappedstring from v2.3.0 to v3.0.1.
+
+* Updated composer/spdx-licenses from v1.3.0 to v1.4.0 (dev-only).
+* Updated mediawiki/mediawiki-codesniffer from v18.0.0 to v22.0.0 (dev-only).
+* Updated psy/psysh from v0.8.11 to v0.9.6 (dev-only).
+
+* Updated CLDRPluralRuleParser from v0.1.0 to v1.3.2-pre.
 * Updated jquery from v3.2.1 to v3.3.1.
+* Updated jquery.client from v2.0.0 to v2.0.1.
+* Updated jquery.i18n from v1.0.4 to v1.0.5.
+* Updated mustache.js from v0.8.2-d9aa703 to v1.0.0.
+* Updated OOjs from v2.2.0 to v2.2.2.
+* Updated qunitjs from v2.4.0 to v2.6.2.
+* Updated sinonjs from v1.17.3 to v1.17.7.
 
 ==== Removed external libraries ====
 * pear/mail_mime-decode was removed.
-* …
 
 === Bug fixes in 1.32 ===
 * SpecialPage::execute() will now only call checkLoginSecurityLevel() if
@@ -269,8 +316,6 @@ because of Phabricator reports.
   removed. Use mediawiki.widgets.visibleLengthLimit instead.
 * The jquery.farbtastic module, unused since 1.18, was removed.
 * The 'jquery.expandableField' module, unused since 1.22, was removed.
-* (T181318) The $wgStyleVersion setting and its appendage to various script and
-  style URLs in OutputPage, deprecated in 1.31, was removed.
 * The hooks 'PreferencesFormPreSave' and 'PreferencesGetLegend' may provide
   any HTMLForm object rather than PreferencesForm.
 * The non namespaced TimestampException class, deprecated in 1.29, was removed.
@@ -280,12 +325,6 @@ because of Phabricator reports.
   The UtfNormal\Utils class from the utfnormal library should be used instead.
 * The deprecated UTF8_ and UNICODE_ constants were removed. The class constants
   from the UtfNormal\Constants class from the utfnormal library should be used
-* (T140807) The wgResourceLoaderLESSImportPaths configuration option was removed
-  from ResourceLoader. Instead, use `@import` statements in LESS to import
-  files directly from nearby directories within the same project.
-* (T140804) The wgResourceLoaderLESSVars configuration option, deprecated
-  since 1.30, was removed. Instead, to expose variables from PHP to LESS, use
-  the ResourceLoaderModule::getLessVars() method.
 * The protected methods PHPSessionHandler::returnSuccess() and returnFailure(),
   only needed for PHP5 compatibility, have been removed. It now uses the boolean
   values `true` and `false` respectively.
@@ -329,8 +368,8 @@ because of Phabricator reports.
   a no-op function since 1.30.
 * SpecialPageFactory::resetList() is a no-op.  Call overrideMwServices()
   instead.
-* MediaWiki no longer supports a StartProfiler.php file.
-  Define $wgProfiler via LocalSettings.php instead.
+* MediaWiki no longer supports a StartProfiler.php file. Instead, you can set
+  $wgProfiler and $wgEnableProfileInfo.
 * The mw.loader.addSource() is now considered a private method, and no longer
   supports the `id, url` signature. Use the `Object` parameter instead.
 * The backwards-compatibility code in HTMLForm to add a drop-down control to an
@@ -399,6 +438,26 @@ because of Phabricator reports.
   * ApiUsageException::getCodeString() (deprecated in 1.29)
   * ApiUsageException::getMessageArray() (deprecated in 1.29)
 * Class UsageException, deprecated in 1.29, has been removed.
+* MediaWiki no longer has a 'JavaScript-powered' wikitext toolbar built in. The
+  old "bulletin board style toolbar", known as "the 2006 wikitext editor", has
+  been removed, and instead sysadmins will be required to choose one (or more)
+  of the several extensions available for this purpose if they need the
+  functionality. The MediaWiki "tarball" releases have included the replacement
+  extension for this, the WikiEditor extension aka "the 2010 wikitext editor",
+  for many years now. As part of this, several parts of MediaWiki have been
+  removed or simplified:
+  * The user option 'showtoolbar' (shown as "Show edit toolbar") is no longer
+    available; if an extension adds a toolbar via the EditPageBeforeEditToolbar
+    hook, it will be shown; extensions should provide a specific user preference
+    to disable themselves as needed.
+  * The public methods Language::getImageFile() and ::getImageFiles(), and the
+    related specification of $imageFiles within individual languages' code file,
+    as well as the referenced static media assets, all of which were only used
+    inside MediaWiki itself for providing the icons for the old toolbar, have
+    been removed without explicit deprecation.
+  * The internal ResourceLoader module "mediawiki.toolbar", which is unused
+    except by MediaWiki itself and back-compatibility code, has been removed.
+  * The internal ResourceLoaderEditToolbarModule class has been removed.
 
 === Deprecations in 1.32 ===
 * HTMLForm::setSubmitProgressive() is deprecated. No need to call it. Submit
@@ -539,6 +598,7 @@ because of Phabricator reports.
   $wgTidyConfig instead.
 * All Tidy configurations other than Remex have been hard deprecated;
   future parsers will not emit compatible output for these configurations.
+  In particular, running MediaWiki with tidy disabled has been deprecated.
 * (T198214) OutputPage::addWikiText(), OutputPage::addWikiTextWithTitle(),
   and OutputPage::addWikiTextTitle() have been deprecated, since they
   can result in untidy output.  In addition OutputPage::addWikiTextTidy()
@@ -600,7 +660,8 @@ because of Phabricator reports.
 == Compatibility ==
 MediaWiki 1.32 requires PHP 7.0.0 or later. Although HHVM 3.18.5 or later is
 supported, it is generally advised to use PHP 7.0.0 or later for long term
-support.
+support. MediaWiki requires that the mbstring, xml, ctype, json, iconv and
+fileinfo PHP extensions are loaded to work.
 
 MySQL/MariaDB is the recommended DBMS. PostgreSQL or SQLite can also be used,
 but support for them is somewhat less mature. There is experimental support for
diff --git a/RELEASE-NOTES-1.33 b/RELEASE-NOTES-1.33
new file mode 100644 (file)
index 0000000..42fa12a
--- /dev/null
@@ -0,0 +1,149 @@
+== MediaWiki 1.33 ==
+
+THIS IS NOT A RELEASE YET
+
+MediaWiki 1.33 is an alpha-quality branch and is not recommended for use in
+production.
+
+=== Configuration changes in 1.33 ===
+
+==== New configuration ====
+* $wgEnablePartialBlocks – This enables the Partial Blocks feature, which gives
+  accounts with block permissions the ability to block users, IPs, and IP ranges
+  from editing specific pages, while allowing them to edit the rest of the wiki.
+* …
+
+==== Changed configuration ====
+* …
+
+==== Removed configuration ====
+* …
+
+=== New features in 1.33 ===
+* …
+
+=== External library changes in 1.33 ===
+
+==== New external libraries ====
+* …
+
+==== Changed external libraries ====
+* …
+
+==== Removed external libraries ====
+* …
+
+=== Bug fixes in 1.33 ===
+* …
+
+=== Action API changes in 1.33 ===
+* (T198913) Added 'ApiOptions' hook.
+* …
+
+=== Action API internal changes in 1.33 ===
+* …
+
+=== Languages updated in 1.33 ===
+MediaWiki supports over 350 languages. Many localisations are updated regularly.
+Below only new and removed languages are listed, as well as changes to languages
+because of Phabricator reports.
+
+* …
+
+=== Breaking changes in 1.33 ===
+* The parameteter $lang in DifferenceEngine::setTextLanguage must be of type
+  Language. Other types are deprecated since 1.32.
+* Skin::doEditSectionLink requires type Language for the parameter $lang.
+  The parameters $tooltip and $lang are mandatory. Omitting the parameters is
+  deprecated since 1.32.
+* Language::truncate(), deprecated in 1.31, has been removed.
+* UtfNormal, deprecated in 1.25, was removed. Use UtfNormal\Validator directly
+  instead.
+* (T197179) In OOUI HTMLForm fields, the parameters 'notice', 'notice-messages',
+  and 'notice-message', which were deprecated in 1.32, were removed. Instead,
+  use 'help', 'help-message', and 'help-messages'.
+* (T197179) HTMLFormField::getNotices(), deprecated in 1.32, was removed.
+* The "Parsoid v1" compatibility mappings in ParsoidVirtualRESTService and
+  RestbaseVirtualRESTService, deprecated since 1.26, have been removed.
+  Use the RESTBase v1 or Parsoid v3 API instead.
+* ParserOptions defaults 'tidy' to true now, since the untidy modes of the
+  parser are being deprecated and ParserOptions::getCanonicalOverrides()
+  has always been true at any rate.
+* …
+
+=== Deprecations in 1.33 ===
+* The configuration option $wgUseESI has been deprecated, and is expected
+  to be removed in a future release.
+* The configuration option $wgSquidPurgeUseHostHeader has been deprecated,
+  and is expected to be removed in a future release.
+* The configuration options $wgFixArabicUnicode and $wgFixMalayalamUnicode,
+  introduced in MW 1.17, have been deprecated.  These fixes will always be
+  applied for Arabic and Malayalam in the future.  Please enable these on
+  your local wiki (if you have them explicitly set to false) and run
+  maintenance/cleanupTitles.php to fix any existing page titles.
+* OutputPage::parse() and OutputPage::parseInline() have been deprecated
+  due to untidy output and inconsistent handling of wrapper divs and
+  interface/content language defaults.  Use OutputPage::parseAsContent(),
+  OutputPage::parseAsInterface(), or OutputPage::parseInlineAsInterface()
+  as appropriate.
+* The LegacyHookPreAuthenticationProvider class, deprecated since its creation
+  in 1.27 as part of the AuthManager re-write, now emits deprecation warnings.
+  This will help identify the issue if you added it to $wgAuthManagerConfig.
+* wfSplitWikiId() is now deprecated. Cache key generation should have the wiki
+  domain ID as a key component and use makeGlobalKey().
+* …
+
+=== Other changes in 1.33 ===
+* …
+
+== Compatibility ==
+MediaWiki 1.33 requires PHP 7.0.0 or later. Although HHVM 3.18.5 or later is
+supported, it is generally advised to use PHP 7.0.0 or later for long term
+support.
+
+MySQL/MariaDB is the recommended DBMS. PostgreSQL or SQLite can also be used,
+but support for them is somewhat less mature. There is experimental support for
+Oracle and Microsoft SQL Server.
+
+The supported versions are:
+
+* MySQL 5.5.8 or later
+* PostgreSQL 9.2 or later
+* SQLite 3.3.7 or later
+* Oracle 9.0.1 or later
+* Microsoft SQL Server 2005 (9.00.1399)
+
+== Upgrading ==
+1.33 has several database changes since 1.32, and will not work without schema
+updates. Note that due to changes to some very large tables like the revision
+table, the schema update may take quite long (minutes on a medium sized site,
+many hours on a large site).
+
+Don't forget to always back up your database before upgrading!
+
+See the file UPGRADE for more detailed upgrade instructions, including
+important information when upgrading from versions prior to 1.11.
+
+For notes on 1.32.x and older releases, see HISTORY.
+
+== Online documentation ==
+Documentation for both end-users and site administrators is available on
+MediaWiki.org, and is covered under the GNU Free Documentation License (except
+for pages that explicitly state that their contents are in the public domain):
+
+       https://www.mediawiki.org/wiki/Special:MyLanguage/Documentation
+
+== Mailing list ==
+A mailing list is available for MediaWiki user support and discussion:
+
+       https://lists.wikimedia.org/mailman/listinfo/mediawiki-l
+
+A low-traffic announcements-only list is also available:
+
+       https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce
+
+It's highly recommended that you sign up for one of these lists if you're
+going to run a public MediaWiki, so you can be notified of security fixes.
+
+== IRC help ==
+There's usually someone online in #mediawiki on irc.freenode.net.
diff --git a/UPGRADE b/UPGRADE
index 6b38b09..571b909 100644 (file)
--- a/UPGRADE
+++ b/UPGRADE
@@ -1,24 +1,23 @@
 This file provides an overview of the MediaWiki upgrade process. For help with
-specific problems, check
+specific problems, you should check:
 
-* the documentation at https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents
+* the docs at https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents ;
 * the mediawiki-l mailing list archive at
-  https://lists.wikimedia.org/pipermail/mediawiki-l/
+  https://lists.wikimedia.org/pipermail/mediawiki-l/ ; and
 * the bug tracker at https://phabricator.wikimedia.org/
 
-for information and workarounds to common issues.
+… for information and workarounds to common issues.
 
 == Overview ==
 
-Comprehensive documentation on upgrading to the latest version of the software
-is available at https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Upgrading
+We provide comprehensive documentation on upgrading to the latest version of the
+software at https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Upgrading.
 
 === Consult the release notes ===
 
 Before doing anything, stop and consult the release notes supplied with the new
 version of the software. These detail bug fixes, new features and functionality,
-and any particular points that may need to be noted during the upgrade
-procedure.
+and any particular points that may need to be noted during the upgrade process.
 
 === Backup first ===
 
@@ -27,19 +26,18 @@ you take a complete backup of your wiki database and files and verify it. While
 the upgrade scripts are somewhat robust, there is no guarantee that things will
 not fail, leaving the database in an inconsistent state.
 
-https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Backing_up_a_wiki provides an overview of
-the backup process. You should also refer to the documentation for your
-database management system for information on backing up a database, and to
+https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Backing_up_a_wiki is an
+overview of the backup process. You should also refer to the documentation for
+your database management system for information on backing up a database, and to
 your operating system documentation for information on making copies of files.
 
 === Perform the file upgrade ===
 
-Download the files for the new version of the software. These are available
-as a compressed "tar" archive from the Wikimedia Download Service
+Download the files for the new version of the software. These are available as a
+compressed "tar" archive from the Wikimedia Download Service
 (https://releases.wikimedia.org/mediawiki/).
 
-You can also obtain the new files directly from our Git source code
-repository.
+You can also obtain the new files directly from our Git source code repository.
 
 Replace the existing MediaWiki files with the new. You should preserve the
 LocalSettings.php file and the "extensions" and "images" directories.
@@ -50,15 +48,15 @@ deleted file archives, and any custom skins.
 
 === Perform the database upgrade ===
 
-As of 1.21, it is possible to separate schema changes (i.e. adding,
-dropping, or changing tables, fields, or indices) from all other
-database changes (e.g. populating fields).  If you need this
-capability, see "From the command line" below.
+As of 1.21, it is possible to separate schema changes (i.e. adding, dropping, or
+changing tables, fields, or indices) from all other database changes (e.g.
+populating fields). If you need this capability, see "From the command line"
+below.
 
-==== From the web ====
+==== From the Web ====
 
-If you browse to the web-based installation script (usually at
-/mw-config/index.php) from your wiki installation you can follow the script and
+If you browse to the Web-based installation script (usually at
+./mw-config/index.php) from your wiki installation you can follow the script and
 upgrade your database in place.
 
 ==== From the command line ====
@@ -68,19 +66,19 @@ update.php script to check and update the schema. This will insert missing
 tables, update existing tables, and move data around as needed. In most cases,
 this is successful and nothing further needs to be done.
 
-If you need to separate out the schema changes so they can be run
-by someone with more privileges, then you can use the --schema option
-to produce a text file with the necessary commands.  You can use
---schema, --noschema, $wgAllowSchemaUpdates as well as proper database
-permissions to enforce this separation.
+If you need to separate out the schema changes so they can be run by someone
+with more privileges, then you can use the --schema option to produce a text
+file with the necessary commands. You can use --schema, --noschema,
+$wgAllowSchemaUpdates as well as proper database permissions to enforce this
+separation.
 
 === Check configuration settings ===
 
-The names of configuration variables, and their default values and purposes,
-can change between release branches, e.g. $wgDisableUploads in 1.4 is replaced
-with $wgEnableUploads in later versions. When upgrading, consult the release
-notes to check for configuration changes which would alter the expected
-behavior of MediaWiki.
+The names of configuration variables, and their default values and purposes, can
+change between release branches, e.g. $wgDisableUploads in 1.4 is replaced with
+$wgEnableUploads in later versions. When upgrading, consult the release notes to
+check for configuration changes which would alter the expected behavior of
+MediaWiki.
 
 === Check installed extensions ===
 
@@ -94,48 +92,48 @@ LocalSettings.php
 
 It makes sense to test your wiki immediately following any kind of maintenance
 procedure, and especially after upgrading; check that page views and edits work
-normally and that special pages continue to function, etc. and correct errors
+normally, that special pages continue to function, etc., and correct any errors
 and quirks which reveal themselves.
 
 You should also test any extensions, and upgrade these if necessary.
 
 == Upgrading from 1.16 or earlier ==
 
-If you have a Chinese or Japanese wiki ($wgLanguageCode is set to one
-of "zh", "ja", or "yue") and you are using MySQL fulltext search, you
-will probably want to update the search index.
+If you have a Chinese or Japanese wiki ($wgLanguageCode is set to one of "zh",
+"ja", or "yue") and you are using MySQL fulltext search, you will probably want
+to update the search index.
 
-In the "maintenance" directory, run the updateDoubleWidthSearch.php
-script.  This will update the searchindex table for those pages that
-contain double-byte Latin characters.
+In the "maintenance" directory, run the updateDoubleWidthSearch.php script. This
+will update the searchindex table for those pages that contain double-byte Latin
+characters.
 
 == Upgrading from 1.10 or earlier ==
 
-If upgrading from before 1.11, and you are using a wiki as a commons
-repository, make sure that it is updated as well. Otherwise, errors may arise
-due to database schema changes.
+If upgrading from before 1.11, and you are using a wiki as a commons repository,
+make sure that it is updated as well. Otherwise, errors may arise due to
+database schema changes.
 
 == Upgrading from 1.8 or earlier ==
 
-MediaWiki 1.9 and later no longer keep default localized message text
-in the database; 'MediaWiki:'-namespace pages that do not exist in the
-database are simply transparently filled-in on demand.
+MediaWiki 1.9 and later no longer keep default localized message text in the
+database; 'MediaWiki:'-namespace pages that do not exist in the database are
+simply transparently filled-in on demand.
 
-The upgrade process will delete any 'MediaWiki:' pages which are left
-in the default state (last edited by 'MediaWiki default'). This may
-take a few moments, similar to the old initial setup.
+The upgrade process will delete any 'MediaWiki:' pages which are left in the
+default state (last edited by 'MediaWiki default'). This may take a few moments,
+similar to the old initial setup.
 
-Note that the large number of deletions may cause older edits to expire
-from the list on Special:Recentchanges, although the deletions themselves
-will be hidden by default. (Click "show bot edits" to list them.)
+Note that the large number of deletions may cause older edits to expire from the
+list on Special:Recentchanges, although the deletions themselves will be hidden
+by default. (Click "show bot edits" to list them.)
 
 See RELEASE-NOTES for more details about new and changed options.
 
 == Upgrading from 1.7 or earlier ==
 
-$wgDefaultUserOptions now contains all the defaults, not only overrides.
-If you're setting this as a complete array(), you may need to change it
-to set only specific items as recommended in DefaultSettings.php.
+$wgDefaultUserOptions now contains all the defaults, not only overrides. If you
+are setting this as a complete array(), you may need to change it to set only
+specific items as recommended in DefaultSettings.php.
 
 == Upgrading from 1.6 or earlier ==
 
@@ -146,58 +144,56 @@ new database fields are filled with data.
 
 == Upgrading from 1.5 or earlier ==
 
-Major changes have been made to the schema from 1.4.x. The updater
-has not been fully tested for all conditions, and might well break.
+Major changes have been made to the schema from 1.4.x. The updater has not been
+fully tested for all conditions, and might well break.
 
-On a large site, the schema update might take a long time. It might
-explode, or leave your database half-done or otherwise badly hurting.
+On a large site, the schema update might take a long time. It might explode, or
+leave your database half-done or otherwise badly hurting.
 
-Among other changes, note that Latin-1 encoding (ISO-8859-1) is
-no longer supported. Latin-1 wikis will need to be upgraded to
-UTF-8; an experimental command-line upgrade helper script,
-'upgrade1_5.php', can do this -- run it prior to 'update.php' or
-the web upgrader.
+Among other changes, note that Latin-1 encoding (ISO-8859-1) is no longer
+supported. Latin-1 wikis will need to be upgraded to UTF-8; an experimental
+command-line upgrade helper script, 'upgrade1_5.php', can do this -- run it
+prior to 'update.php' or the Web upgrader.
 
-NOTE that upgrade1_5.php does not work properly with recent versions
-of MediaWiki. If upgrading a 1.4.x wiki, you should upgrade to 1.5
-first.  upgrade1_5.php has been removed from MediaWiki 1.21.
+    NOTE that upgrade1_5.php does not work properly with recent versions of
+    MediaWiki. If upgrading a 1.4.x wiki, you should upgrade to 1.5 first.
+    upgrade1_5.php has been removed from MediaWiki 1.21.
 
-If you absolutely cannot make the UTF-8 upgrade work, you can try
-doing it by hand: dump your old database, convert the dump file
-using iconv as described here:
-http://portal.suse.com/sdb/en/2004/05/jbartsh_utf-8.html
-and then reimport it. You can also convert filenames using convmv,
-but note that the old directory hashes will no longer be valid,
-so you will also have to move them to new destinations.
+If you absolutely cannot make the UTF-8 upgrade work, you can try doing it by
+hand: dump your old database, convert the dump file using iconv as described
+here: http://portal.suse.com/sdb/en/2004/05/jbartsh_utf-8.html
+and then re-import it. You can also convert filenames using convmv, but note
+that the old directory hashes will no longer be valid, so you will also have to
+move them to new destinations.
 
 Message changes:
-* A number of additional UI messages have been changed from HTML to
-  wikitext, and will need to be manually fixed if customized.
+* A number of additional UI messages have been changed from HTML to wikitext,
+  and will need to be manually fixed if customized.
 
 === Configuration changes from 1.4.x: ===
 
 $wgDisableUploads has been replaced with $wgEnableUploads.
 
-$wgWhitelistAccount has been replaced by the 'createaccount' permission
-key in $wgGroupPermissions. To emulate the old effect of setting:
+$wgWhitelistAccount has been replaced by the 'createaccount' permission key in
+$wgGroupPermissions. To emulate the old effect of setting:
   $wgWhitelistAccount['user'] = 0;
 set:
   $wgGroupPermissions['*']['createaccount'] = false;
 
-$wgWhitelistEdit has been replaced by the 'edit' permission key.
-To emulate the old effect of setting:
+$wgWhitelistEdit has been replaced by the 'edit' permission key. To emulate the
+old effect of setting:
   $wgWhitelistEdit = true;
 set:
   $wgGroupPermissions['*']['edit'] = false;
 
-If $wgWhitelistRead is set, you must also disable the 'read' permission
-for it to take affect on anonymous users:
+If $wgWhitelistRead is set, you must also disable the 'read' permission for it
+to take affect on anonymous users:
   $wgWhitelistRead = array( "Main Page", "Special:Userlogin" );
   $wgGroupPermissions['*']['read'] = false;
 
-Note that you can disable/enable several other permissions by modifying
-this configuration array in your LocalSettings.php; see DefaultSettings.php
-for the complete default permission set.
+Note that you can disable/enable several other permissions by modifying this
+configuration array in your LocalSettings.php; see DefaultSettings.php for the
+complete default permission set.
 
 If using Memcached, you must enabled it differently now:
   $wgUseMemCached = true;
@@ -206,35 +202,31 @@ should be replaced with:
 
 == Upgrading from 1.4.2 or earlier ==
 
-1.4.3 has added new fields to the sitestats table. These fields are
-optional and help to speed Special:Statistics on large sites. If you
-choose not to run the database upgrades, everything will continue to
-work in 1.4.3.
+1.4.3 has added new fields to the sitestats table. These fields are optional and
+help to speed Special:Statistics on large sites. If you choose not to run the
+database upgrades, everything will continue to work in 1.4.3.
 
-You can apply the update by running maintenance/update.php, or
-manually run the SQL commands from this file:
+You can apply the update by running maintenance/update.php, or manually run the
+SQL commands from this file:
   maintenance/archives/patch-ss_total_articles.sql
 
-
 == Upgrading from 1.4rc1 or earlier betas ==
 
-The logging table has been altered from 1.4beta4 to 1.4beta5
-and again in 1.4.0 final. Copy in the new files and use the web
-installer to upgrade, or the command-line maintenance/update.php.
-
-If you cannot use the automated installers/updaters, you may
-update the table by manually running the SQL commands in these
-files:
-   maintenance/archives/patch-log_params.sql
-   maintenance/archives/patch-logging-title.sql
+The logging table has been altered from 1.4beta4 to 1.4beta5 and again in 1.4.0
+final. Copy in the new files and use the Web installer to upgrade, or the
+command-line maintenance/update.php.
 
+If you cannot use the automated installers/updaters, you may update the table by
+manually running the SQL commands in these files:
+  maintenance/archives/patch-log_params.sql
+  maintenance/archives/patch-logging-title.sql
 
 == Upgrading from 1.3 or earlier ==
 
 This should generally go smoothly.
 
-If you keep your LocalSettings.php, you may need to change the style paths
-to match the newly rearranged skin modules. Change these lines:
+If you keep your LocalSettings.php, you may need to change the style paths to
+match the newly rearranged skin modules. Change these lines:
   $wgStylePath        = "$wgScriptPath/stylesheets";
   $wgStyleDirectory   = "$IP/stylesheets";
   $wgLogo             = "$wgStylePath/images/wiki.png";
@@ -244,9 +236,9 @@ to this:
   $wgStyleDirectory   = "$IP/skins";
   $wgLogo             = "$wgStylePath/common/images/wiki.png";
 
-As well as new messages, the processing of some messages has changed.
-If you have customized them, please compare the new format using
-Special:Allmessages or the relevant LanguageXX.php files:
+As well as new messages, the processing of some messages has changed. If you
+have customized them, please compare the new format using Special:Allmessages or
+the relevant LanguageXX.php files:
 
 * copyrightwarning
 * dberrortext
@@ -262,45 +254,42 @@ Special:Allmessages or the relevant LanguageXX.php files:
 * showhideminor
 * unprotectedarticle
 
-Note that the 1.3 beta releases included a potential vulnerability if PHP
-is configured with register_globals on and the includes directory is
-served to the web. For general safety, turn register_globals *off* if you
-don't _really_ need it for another package.
-
-If your hosting provider turns it on and you can't turn it off yourself,
-send them a kind note explaining that it can expose their servers and their
-customers to attacks.
+Note that the 1.3 beta releases included a potential vulnerability if PHP is
+configured with register_globals on and the includes directory is served to the
+Web. For general safety, turn register_globals *off* if you don't _really_ need
+it for another package.
 
+If your hosting provider turns it on and you can't turn it off yourself, send
+them a kind note explaining that it can expose their servers and their customers
+to attacks.
 
 == Upgrading from 1.2 or earlier ==
 
-If you've been using the MediaWiki: namespace for custom page templates,
-note that things are a little different. The Template: namespace has been
-added which is more powerful -- templates can include parameters for
-instance.
-
-If you were using custom MediaWiki: entries for text inclusions, they
-will *not* automatically be moved to Template: entries at upgrade time.
-Be sure to go through and check that everything is working properly;
-you can move them manually or you can try using moveCustomMessages.php
-in maintenance/archives to do it automatically, but this might break things.
+If you've been using the MediaWiki: namespace for custom page templates, note
+that things are a little different. The Template: namespace has been added which
+is more powerful -- templates can include parameters for instance.
 
-Also, be sure to pick the correct character encoding -- some languages were
-only available in Latin-1 on 1.2.x and are now available for Unicode as well.
-If you want to upgrade an existing wiki from Latin-1 to Unicode you'll have
-to dump the database to SQL, run it through iconv or another conversion tool,
-and restore it. Sorry.
+If you were using custom MediaWiki: entries for text inclusions, they will *not*
+automatically be moved to Template: entries at upgrade time. Be sure to go
+through and check that everything is working properly; you can move them
+manually or you can try using moveCustomMessages.php in maintenance/archives to
+do it automatically, but this might break things.
 
+Also, be sure to pick the correct character encoding -- some languages were only
+available in Latin-1 on 1.2.x and are now available for Unicode as well. If you
+want to upgrade an existing wiki from Latin-1 to Unicode you'll have to dump the
+database to SQL, run it through iconv or another conversion tool, and restore
+it. Sorry.
 
 == Upgrading from 1.1 or earlier ==
 
 This is less thoroughly tested, but should work.
 
-You need to specify the *admin* database username and password to the
-installer in order for it to successfully upgrade the database structure.
-You may wish to manually change the GRANTs later.
+You need to specify the *admin* database username and password to the installer
+in order for it to successfully upgrade the database structure. You may wish to
+manually change the GRANTs later.
 
-If you have a very old database (earlier than organized MediaWiki releases
-in late August 2003) you may need to manually run some of the update SQL
-scripts in maintenance/archives before the installer is able to pick up
-with remaining updates.
+If you have a very old database (earlier than organized MediaWiki releases in
+late August 2003) you may need to manually run some of the update SQL scripts in
+maintenance/archives before the installer is able to pick up with remaining
+updates.
index 3e6b4a2..6df039c 100644 (file)
@@ -613,6 +613,7 @@ $wgAutoloadLocalClasses = [
        'HTMLTextField' => __DIR__ . '/includes/htmlform/fields/HTMLTextField.php',
        'HTMLTextFieldWithButton' => __DIR__ . '/includes/htmlform/fields/HTMLTextFieldWithButton.php',
        'HTMLTitleTextField' => __DIR__ . '/includes/htmlform/fields/HTMLTitleTextField.php',
+       'HTMLTitlesMultiselectField' => __DIR__ . '/includes/htmlform/fields/HTMLTitlesMultiselectField.php',
        'HTMLUserTextField' => __DIR__ . '/includes/htmlform/fields/HTMLUserTextField.php',
        'HTMLUsersMultiselectField' => __DIR__ . '/includes/htmlform/fields/HTMLUsersMultiselectField.php',
        'HTTPFileStreamer' => __DIR__ . '/includes/libs/filebackend/HTTPFileStreamer.php',
@@ -705,6 +706,7 @@ $wgAutoloadLocalClasses = [
        'JobQueueAggregatorRedis' => __DIR__ . '/includes/jobqueue/aggregator/JobQueueAggregatorRedis.php',
        'JobQueueConnectionError' => __DIR__ . '/includes/jobqueue/JobQueue.php',
        'JobQueueDB' => __DIR__ . '/includes/jobqueue/JobQueueDB.php',
+       'JobQueueEnqueueUpdate' => __DIR__ . '/includes/deferred/JobQueueEnqueueUpdate.php',
        'JobQueueError' => __DIR__ . '/includes/jobqueue/JobQueue.php',
        'JobQueueFederated' => __DIR__ . '/includes/jobqueue/JobQueueFederated.php',
        'JobQueueGroup' => __DIR__ . '/includes/jobqueue/JobQueueGroup.php',
@@ -937,6 +939,7 @@ $wgAutoloadLocalClasses = [
        'MediaWiki\\Widget\\SelectWithInputWidget' => __DIR__ . '/includes/widget/SelectWithInputWidget.php',
        'MediaWiki\\Widget\\SizeFilterWidget' => __DIR__ . '/includes/widget/SizeFilterWidget.php',
        'MediaWiki\\Widget\\TitleInputWidget' => __DIR__ . '/includes/widget/TitleInputWidget.php',
+       'MediaWiki\\Widget\\TitlesMultiselectWidget' => __DIR__ . '/includes/widget/TitlesMultiselectWidget.php',
        'MediaWiki\\Widget\\UserInputWidget' => __DIR__ . '/includes/widget/UserInputWidget.php',
        'MediaWiki\\Widget\\UsersMultiselectWidget' => __DIR__ . '/includes/widget/UsersMultiselectWidget.php',
        'MemcLockManager' => __DIR__ . '/includes/libs/lockmanager/MemcLockManager.php',
@@ -1211,7 +1214,6 @@ $wgAutoloadLocalClasses = [
        'ResourceLoader' => __DIR__ . '/includes/resourceloader/ResourceLoader.php',
        'ResourceLoaderClientHtml' => __DIR__ . '/includes/resourceloader/ResourceLoaderClientHtml.php',
        'ResourceLoaderContext' => __DIR__ . '/includes/resourceloader/ResourceLoaderContext.php',
-       'ResourceLoaderEditToolbarModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderEditToolbarModule.php',
        'ResourceLoaderFileModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderFileModule.php',
        'ResourceLoaderFilePath' => __DIR__ . '/includes/resourceloader/ResourceLoaderFilePath.php',
        'ResourceLoaderForeignApiModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderForeignApiModule.php',
@@ -1542,6 +1544,7 @@ $wgAutoloadLocalClasses = [
        'UserBlockedError' => __DIR__ . '/includes/exception/UserBlockedError.php',
        'UserCache' => __DIR__ . '/includes/cache/UserCache.php',
        'UserDupes' => __DIR__ . '/maintenance/userDupes.inc',
+       'UserEditCountUpdate' => __DIR__ . '/includes/deferred/UserEditCountUpdate.php',
        'UserGroupExpiryJob' => __DIR__ . '/includes/jobqueue/jobs/UserGroupExpiryJob.php',
        'UserGroupMembership' => __DIR__ . '/includes/user/UserGroupMembership.php',
        'UserMailer' => __DIR__ . '/includes/mail/UserMailer.php',
@@ -1552,7 +1555,6 @@ $wgAutoloadLocalClasses = [
        'UserRightsProxy' => __DIR__ . '/includes/user/UserRightsProxy.php',
        'UserrightsPage' => __DIR__ . '/includes/specials/SpecialUserrights.php',
        'UsersPager' => __DIR__ . '/includes/specials/pagers/UsersPager.php',
-       'UtfNormal' => __DIR__ . '/includes/compat/normal/UtfNormal.php',
        'UzConverter' => __DIR__ . '/languages/classes/LanguageUz.php',
        'VFormHTMLForm' => __DIR__ . '/includes/htmlform/VFormHTMLForm.php',
        'ValidateRegistrationFile' => __DIR__ . '/maintenance/validateRegistrationFile.php',
index 2e13f90..5663198 100644 (file)
@@ -20,6 +20,7 @@
                "composer/semver": "1.4.2",
                "cssjanus/cssjanus": "1.2.0",
                "ext-ctype": "*",
+               "ext-fileinfo": "*",
                "ext-iconv": "*",
                "ext-json": "*",
                "ext-mbstring": "*",
@@ -34,7 +35,7 @@
                "psr/log": "1.0.2",
                "wikimedia/assert": "0.2.2",
                "wikimedia/at-ease": "1.2.0",
-               "wikimedia/base-convert": "1.0.1",
+               "wikimedia/base-convert": "2.0.0",
                "wikimedia/cdb": "1.4.1",
                "wikimedia/cldr-plural-rule-parser": "1.0.0",
                "wikimedia/composer-merge-plugin": "1.4.1",
@@ -44,7 +45,7 @@
                "wikimedia/php-session-serializer": "1.0.6",
                "wikimedia/purtle": "1.0.7",
                "wikimedia/relpath": "2.1.1",
-               "wikimedia/remex-html": "2.0.0",
+               "wikimedia/remex-html": "2.0.1",
                "wikimedia/running-stat": "1.2.1",
                "wikimedia/scoped-callback": "2.0.0",
                "wikimedia/utfnormal": "2.0.0",
@@ -76,7 +77,6 @@
        "suggest": {
                "ext-apcu": "Local data cache for greatly improved performance",
                "ext-curl": "Improved http communication abilities",
-               "ext-fileinfo": "Improved mime magic detection",
                "ext-intl": "ICU integration",
                "ext-wikidiff2": "Diff accelerator",
                "monolog/monolog": "Flexible debug logging system",
index fd7b300..f9ae150 100644 (file)
@@ -473,6 +473,15 @@ can alter or append to the array.
       (url), 'width', 'height', 'alt', 'align'.
     - url: Url for the given title.
 
+'ApiOptions': Called by action=options before applying changes to user
+preferences.
+$apiModule: Calling ApiOptions object
+$user: User object whose preferences are being changed
+$changes: Associative array of preference name => value
+$resetKinds: Array of strings specifying which options kinds to reset.
+  See User::resetOptions() and User::getOptionKinds() for possible
+  values.
+
 'ApiParseMakeOutputPage': Called when preparing the OutputPage object for
 ApiParse. This is mainly intended for calling OutputPage::addContentOverride()
 or OutputPage::addContentOverrideCallback().
@@ -1471,11 +1480,10 @@ textarea in the edit form.
 &$buttons: Array of edit buttons "Save", "Preview", "Live", and "Diff"
 &$tabindex: HTML tabindex of the last edit check/button
 
-'EditPageBeforeEditToolbar': Allows modifying the edit toolbar above the
-textarea in the edit form.
-Hook subscribers can return false to avoid the default toolbar code being
-loaded.
-&$toolbar: The toolbar HTML
+'EditPageBeforeEditToolbar': Allow adding an edit toolbar above the textarea in
+the edit form.
+&$toolbar: The toolbar HTML, initially an empty `<div id="toolbar"></div>`
+Hook subscribers can return false to have no toolbar HTML be loaded.
 
 'EditPageCopyrightWarning': Allow for site and per-namespace customization of
 contribution/copyright notice.
@@ -2868,7 +2876,9 @@ $context: ResourceLoaderContext|null
 ResourceLoaderStartUpModule::getConfigSettings(). Use this to export static
 configuration variables to JavaScript. Things that depend on the current page
 or request state must be added through MakeGlobalVariablesScript instead.
+Skin is made available for skin specific config.
 &$vars: [ variable name => value ]
+$skin: Skin
 
 'ResourceLoaderJqueryMsgModuleMagicWords': Called in
 ResourceLoaderJqueryMsgModule to allow adding magic words for jQueryMsg.
index 0c11505..dfcf467 100644 (file)
@@ -186,6 +186,7 @@ class AjaxResponse {
                                # Surrogate-Control controls our CDN, Cache-Control downstream caches
 
                                if ( $this->mConfig->get( 'UseESI' ) ) {
+                                       wfDeprecated( '$wgUseESI = true', '1.33' );
                                        header( 'Surrogate-Control: max-age=' . $this->mCacheDuration . ', content="ESI/1.0"' );
                                        header( 'Cache-Control: s-maxage=0, must-revalidate, max-age=0' );
                                } else {
index e4e59da..677fd01 100644 (file)
@@ -130,6 +130,7 @@ class AutoLoader {
        public static function getAutoloadNamespaces() {
                return [
                        'MediaWiki\\Auth\\' => __DIR__ . '/auth/',
+                       'MediaWiki\\Block\\' => __DIR__ . '/block/',
                        'MediaWiki\\Edit\\' => __DIR__ . '/edit/',
                        'MediaWiki\\EditPage\\' => __DIR__ . '/editpage/',
                        'MediaWiki\\Linker\\' => __DIR__ . '/linker/',
index bf8bad1..befc50c 100644 (file)
@@ -22,6 +22,8 @@
 
 use Wikimedia\Rdbms\Database;
 use Wikimedia\Rdbms\IDatabase;
+use MediaWiki\Block\BlockRestriction;
+use MediaWiki\Block\Restriction\Restriction;
 use MediaWiki\MediaWikiServices;
 
 class Block {
@@ -79,6 +81,12 @@ class Block {
        /** @var string|null */
        private $systemBlockType;
 
+       /** @var bool */
+       private $isSitewide;
+
+       /** @var Restriction[] */
+       private $restrictions;
+
        # TYPE constants
        const TYPE_USER = 1;
        const TYPE_IP = 2;
@@ -129,6 +137,7 @@ class Block {
                        'allowUsertalk'   => false,
                        'byText'          => '',
                        'systemBlock'     => null,
+                       'sitewide'        => true,
                ];
 
                if ( func_num_args() > 1 || !is_array( $options ) ) {
@@ -165,6 +174,7 @@ class Block {
                $this->mHideName = (bool)$options['hideName'];
                $this->isHardblock( !$options['anonOnly'] );
                $this->isAutoblocking( (bool)$options['enableAutoblock'] );
+               $this->isSitewide( (bool)$options['sitewide'] );
 
                # Prevention measures
                $this->prevents( 'sendemail', (bool)$options['blockEmail'] );
@@ -236,6 +246,7 @@ class Block {
                        'ipb_block_email',
                        'ipb_allow_usertalk',
                        'ipb_parent_block_id',
+                       'ipb_sitewide',
                ] + CommentStore::getStore()->getFields( 'ipb_reason' );
        }
 
@@ -266,6 +277,7 @@ class Block {
                                'ipb_block_email',
                                'ipb_allow_usertalk',
                                'ipb_parent_block_id',
+                               'ipb_sitewide',
                        ] + $commentQuery['fields'] + $actorQuery['fields'],
                        'joins' => $commentQuery['joins'] + $actorQuery['joins'],
                ];
@@ -292,6 +304,10 @@ class Block {
                        && $this->prevents( 'sendemail' ) == $block->prevents( 'sendemail' )
                        && $this->prevents( 'editownusertalk' ) == $block->prevents( 'editownusertalk' )
                        && $this->mReason == $block->mReason
+                       && $this->isSitewide() == $block->isSitewide()
+                       // Block::getRestrictions() may perform a database query, so keep it at
+                       // the end.
+                       && BlockRestriction::equals( $this->getRestrictions(), $block->getRestrictions() )
                );
        }
 
@@ -477,6 +493,7 @@ class Block {
 
                $this->isHardblock( !$row->ipb_anon_only );
                $this->isAutoblocking( $row->ipb_enable_autoblock );
+               $this->isSitewide( (bool)$row->ipb_sitewide );
 
                $this->prevents( 'createaccount', $row->ipb_create_account );
                $this->prevents( 'sendemail', $row->ipb_block_email );
@@ -510,7 +527,11 @@ class Block {
                }
 
                $dbw = wfGetDB( DB_MASTER );
+
+               BlockRestriction::deleteByParentBlockId( $this->getId() );
                $dbw->delete( 'ipblocks', [ 'ipb_parent_block_id' => $this->getId() ], __METHOD__ );
+
+               BlockRestriction::deleteByBlockId( $this->getId() );
                $dbw->delete( 'ipblocks', [ 'ipb_id' => $this->getId() ], __METHOD__ );
 
                return $dbw->affectedRows() > 0;
@@ -546,7 +567,12 @@ class Block {
 
                $dbw->insert( 'ipblocks', $row, __METHOD__, [ 'IGNORE' ] );
                $affected = $dbw->affectedRows();
-               $this->mId = $dbw->insertId();
+               if ( $affected ) {
+                       $this->setId( $dbw->insertId() );
+                       if ( $this->restrictions ) {
+                               BlockRestriction::insert( $this->restrictions );
+                       }
+               }
 
                # Don't collide with expired blocks.
                # Do this after trying to insert to avoid locking.
@@ -564,9 +590,13 @@ class Block {
                        );
                        if ( $ids ) {
                                $dbw->delete( 'ipblocks', [ 'ipb_id' => $ids ], __METHOD__ );
+                               BlockRestriction::deleteByBlockId( $ids );
                                $dbw->insert( 'ipblocks', $row, __METHOD__, [ 'IGNORE' ] );
                                $affected = $dbw->affectedRows();
-                               $this->mId = $dbw->insertId();
+                               $this->setId( $dbw->insertId() );
+                               if ( $this->restrictions ) {
+                                       BlockRestriction::insert( $this->restrictions );
+                               }
                        }
                }
 
@@ -598,14 +628,24 @@ class Block {
 
                $dbw->startAtomic( __METHOD__ );
 
-               $dbw->update(
+               $result = $dbw->update(
                        'ipblocks',
                        $this->getDatabaseArray( $dbw ),
                        [ 'ipb_id' => $this->getId() ],
                        __METHOD__
                );
 
-               $affected = $dbw->affectedRows();
+               // Only update the restrictions if they have been modified.
+               if ( $this->restrictions !== null ) {
+                       // An empty array should remove all of the restrictions.
+                       if ( empty( $this->restrictions ) ) {
+                               $success = BlockRestriction::deleteByBlockId( $this->getId() );
+                       } else {
+                               $success = BlockRestriction::update( $this->restrictions );
+                       }
+                       // Update the result. The first false is the result, otherwise, true.
+                       $result = $result && $success;
+               }
 
                if ( $this->isAutoblocking() ) {
                        // update corresponding autoblock(s) (T50813)
@@ -615,8 +655,14 @@ class Block {
                                [ 'ipb_parent_block_id' => $this->getId() ],
                                __METHOD__
                        );
+
+                       // Only update the restrictions if they have been modified.
+                       if ( $this->restrictions !== null ) {
+                               BlockRestriction::updateByParentBlockId( $this->getId(), $this->restrictions );
+                       }
                } else {
                        // autoblock no longer required, delete corresponding autoblock(s)
+                       BlockRestriction::deleteByParentBlockId( $this->getId() );
                        $dbw->delete(
                                'ipblocks',
                                [ 'ipb_parent_block_id' => $this->getId() ],
@@ -626,12 +672,12 @@ class Block {
 
                $dbw->endAtomic( __METHOD__ );
 
-               if ( $affected ) {
+               if ( $result ) {
                        $auto_ipd_ids = $this->doRetroactiveAutoblock();
                        return [ 'id' => $this->mId, 'autoIds' => $auto_ipd_ids ];
                }
 
-               return false;
+               return $result;
        }
 
        /**
@@ -662,7 +708,8 @@ class Block {
                        'ipb_deleted'          => intval( $this->mHideName ), // typecast required for SQLite
                        'ipb_block_email'      => $this->prevents( 'sendemail' ),
                        'ipb_allow_usertalk'   => !$this->prevents( 'editownusertalk' ),
-                       'ipb_parent_block_id'  => $this->mParentBlockId
+                       'ipb_parent_block_id'  => $this->mParentBlockId,
+                       'ipb_sitewide'         => $this->isSitewide(),
                ] + CommentStore::getStore()->insert( $dbw, 'ipb_reason', $this->mReason )
                        + ActorMigration::newMigration()->getInsertValues( $dbw, 'ipb_by', $this->getBlocker() );
 
@@ -865,6 +912,8 @@ class Block {
                $autoblock->mHideName = $this->mHideName;
                $autoblock->prevents( 'editownusertalk', $this->prevents( 'editownusertalk' ) );
                $autoblock->mParentBlockId = $this->mId;
+               $autoblock->isSitewide( $this->isSitewide() );
+               $autoblock->setRestrictions( $this->getRestrictions() );
 
                if ( $this->mExpiry == 'infinity' ) {
                        # Original block was indefinite, start an autoblock now
@@ -1014,6 +1063,22 @@ class Block {
                return $this->mId;
        }
 
+       /**
+        * Set the block ID
+        *
+        * @param int $blockId
+        * @return int
+        */
+       private function setId( $blockId ) {
+               $this->mId = (int)$blockId;
+
+               if ( is_array( $this->restrictions ) ) {
+                       $this->restrictions = BlockRestriction::setBlockId( $blockId, $this->restrictions );
+               }
+
+               return $this;
+       }
+
        /**
         * Get the system block type, if any
         * @since 1.29
@@ -1061,6 +1126,18 @@ class Block {
                        : false;
        }
 
+       /**
+        * Indicates that the block is a sitewide block. This means the user is
+        * prohibited from editing any page on the site (other than their own talk
+        * page).
+        *
+        * @param null|bool $x
+        * @return bool
+        */
+       public function isSitewide( $x = null ) {
+               return wfSetVar( $this->isSitewide, $x );
+       }
+
        /**
         * Get/set whether the Block prevents a given action
         *
@@ -1069,7 +1146,10 @@ class Block {
         * @return bool|null Null for unrecognized rights.
         */
        public function prevents( $action, $x = null ) {
-               global $wgBlockDisablesLogin;
+               $config = RequestContext::getMain()->getConfig();
+               $blockDisablesLogin = $config->get( 'BlockDisablesLogin' );
+               $blockAllowsUTEdit = $config->get( 'BlockAllowsUTEdit' );
+
                $res = null;
                switch ( $action ) {
                        case 'edit':
@@ -1082,14 +1162,22 @@ class Block {
                        case 'sendemail':
                                $res = wfSetVar( $this->mBlockEmail, $x );
                                break;
+                       case 'upload':
+                               // Until T6995 is completed
+                               $res = $this->isSitewide();
+                               break;
                        case 'editownusertalk':
                                $res = wfSetVar( $this->mDisableUsertalk, $x );
+                               // edit own user talk can be disabled by config
+                               if ( !$blockAllowsUTEdit ) {
+                                       $res = true;
+                               }
                                break;
                        case 'read':
                                $res = false;
                                break;
                }
-               if ( !$res && $wgBlockDisablesLogin ) {
+               if ( !$res && $blockDisablesLogin ) {
                        // If a block would disable login, then it should
                        // prevent any action that all users cannot do
                        $anon = new User;
@@ -1145,6 +1233,7 @@ class Block {
                                        $fname
                                );
                                if ( $ids ) {
+                                       BlockRestriction::deleteByBlockId( $ids );
                                        $dbw->delete( 'ipblocks', [ 'ipb_id' => $ids ], $fname );
                                }
                        }
@@ -1614,6 +1703,29 @@ class Block {
         * @return array
         */
        public function getPermissionsError( IContextSource $context ) {
+               $params = $this->getBlockErrorParams( $context );
+
+               $msg = 'blockedtext';
+               if ( $this->getSystemBlockType() !== null ) {
+                       $msg = 'systemblockedtext';
+               } elseif ( $this->mAuto ) {
+                       $msg = 'autoblockedtext';
+               } elseif ( !$this->isSitewide() ) {
+                       $msg = 'blockedtext-partial';
+               }
+
+               array_unshift( $params, $msg );
+
+               return $params;
+       }
+
+       /**
+        * Get block information used in different block error messages
+        *
+        * @param IContextSource $context
+        * @return array
+        */
+       public function getBlockErrorParams( IContextSource $context ) {
                $blocker = $this->getBlocker();
                if ( $blocker instanceof User ) { // local user
                        $blockerUserpage = $blocker->getUserPage();
@@ -1630,14 +1742,10 @@ class Block {
                /* $ip returns who *is* being blocked, $intended contains who was meant to be blocked.
                 * This could be a username, an IP range, or a single IP. */
                $intended = $this->getTarget();
-
                $systemBlockType = $this->getSystemBlockType();
-
                $lang = $context->getLanguage();
+
                return [
-                       $systemBlockType !== null
-                               ? 'systemblockedtext'
-                               : ( $this->mAuto ? 'autoblockedtext' : 'blockedtext' ),
                        $link,
                        $reason,
                        $context->getRequest()->getIP(),
@@ -1648,4 +1756,70 @@ class Block {
                        $lang->userTimeAndDate( $this->mTimestamp, $context->getUser() ),
                ];
        }
+
+       /**
+        * Get Restrictions.
+        *
+        * Getting the restrictions will perform a database query if the restrictions
+        * are not already loaded.
+        *
+        * @return Restriction[]
+        */
+       public function getRestrictions() {
+               if ( $this->restrictions === null ) {
+                       // If the block id has not been set, then do not attempt to load the
+                       // restrictions.
+                       if ( !$this->mId ) {
+                               return [];
+                       }
+                       $this->restrictions = BlockRestriction::loadByBlockId( $this->mId );
+               }
+
+               return $this->restrictions;
+       }
+
+       /**
+        * Set Restrictions.
+        *
+        * @param Restriction[] $restrictions
+        *
+        * @return self
+        */
+       public function setRestrictions( array $restrictions ) {
+               $this->restrictions = array_filter( $restrictions, function ( $restriction ) {
+                       return $restriction instanceof Restriction;
+               } );
+
+               return $this;
+       }
+
+       /**
+        * Checks if a block prevents an edit on a given article
+        *
+        * @param \Title $title
+        * @return bool
+        */
+       public function preventsEdit( \Title $title ) {
+               $blocked = $this->isSitewide();
+
+               // user talk page has it's own rules
+               // This check happens before partial blocks because the flag
+               // to allow user to edit their user talk page could be
+               // overwritten by a partial block restriction (E.g. user talk namespace)
+               $user = $this->getTarget();
+               if ( $title->equals( $user->getTalkPage() ) ) {
+                       $blocked = $this->prevents( 'editownusertalk' );
+               }
+
+               if ( !$this->isSitewide() ) {
+                       $restrictions = $this->getRestrictions();
+                       foreach ( $restrictions as $restriction ) {
+                               if ( $restriction->matches( $title ) ) {
+                                       $blocked = true;
+                               }
+                       }
+               }
+
+               return $blocked;
+       }
 }
index 6a1ed92..82dbecf 100644 (file)
@@ -71,7 +71,7 @@ $wgConfigRegistry = [
  * MediaWiki version number
  * @since 1.2
  */
-$wgVersion = '1.32.0-alpha';
+$wgVersion = '1.33.0-alpha';
 
 /**
  * Name of the site. It must be changed in LocalSettings.php
@@ -2736,6 +2736,7 @@ $wgUseSquid = false;
 
 /**
  * If you run Squid3 with ESI support, enable this (default:false):
+ * @deprecated in 1.33. This was a now-defunct experimental feature.
  */
 $wgUseESI = false;
 
@@ -2849,6 +2850,7 @@ $wgSquidServersNoPurge = [];
  * reverse).
  *
  * @since 1.21
+ * @deprecated since 1.33, will always be true in a future release.
  */
 $wgSquidPurgeUseHostHeader = true;
 
@@ -2896,11 +2898,6 @@ $wgSquidPurgeUseHostHeader = true;
  * @endcode
  *
  * @since 1.22
- *
- * $wgHTCPRouting replaces $wgHTCPMulticastRouting that was introduced in 1.20.
- * For back compatibility purposes, whenever its array is empty
- * $wgHTCPMutlicastRouting will be used as a fallback if it not null.
- *
  * @see $wgHTCPMulticastTTL
  */
 $wgHTCPRouting = [];
@@ -3002,8 +2999,11 @@ $wgExtraLanguageNames = [];
  * @since 1.29
  */
 $wgExtraLanguageCodes = [
+       // Language codes of macro languages, which get mapped to the main language
        'bh' => 'bho', // Bihari language family
        'no' => 'nb', // Norwegian language family
+
+       // Language variants which get mapped to the main language
        'simple' => 'en', // Simple English
 ];
 
@@ -3022,6 +3022,8 @@ $wgDummyLanguageCodes = [];
  *
  * Note that pages with titles containing presentation forms will become
  * inaccessible, run maintenance/cleanupTitles.php to fix this.
+ *
+ * @deprecated since 1.33: in the future will always be true.
  */
 $wgFixArabicUnicode = true;
 
@@ -3033,6 +3035,8 @@ $wgFixArabicUnicode = true;
  *
  * If you enable this on an existing wiki, run maintenance/cleanupTitles.php to
  * fix any ZWJ sequences in existing page titles.
+ *
+ * @deprecated since 1.33: in the future will always be true.
  */
 $wgFixMalayalamUnicode = true;
 
@@ -4241,8 +4245,10 @@ $wgAllowExternalImagesFrom = '';
  *
  * Set this to true to enable the on-wiki whitelist (MediaWiki:External image whitelist)
  * Or false to disable it
+ *
+ * @since 1.14
  */
-$wgEnableImageWhitelist = true;
+$wgEnableImageWhitelist = false;
 
 /**
  * A different approach to the above: simply allow the "<img>" tag to be used.
@@ -4567,10 +4573,6 @@ $wgAuthManagerConfig = null;
  */
 $wgAuthManagerAutoConfig = [
        'preauth' => [
-               MediaWiki\Auth\LegacyHookPreAuthenticationProvider::class => [
-                       'class' => MediaWiki\Auth\LegacyHookPreAuthenticationProvider::class,
-                       'sort' => 0,
-               ],
                MediaWiki\Auth\ThrottlePreAuthenticationProvider::class => [
                        'class' => MediaWiki\Auth\ThrottlePreAuthenticationProvider::class,
                        'sort' => 0,
@@ -4887,7 +4889,6 @@ $wgDefaultUserOptions = [
        'rows' => 25, // @deprecated since 1.29 No longer used in core
        'showhiddencats' => 0,
        'shownumberswatching' => 1,
-       'showtoolbar' => 1,
        'skin' => false,
        'stubthreshold' => 0,
        'thumbsize' => 5,
@@ -9001,15 +9002,6 @@ $wgMultiContentRevisionSchemaMigrationStage = SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_
  */
 $wgActorTableSchemaMigrationStage = SCHEMA_COMPAT_OLD;
 
-/**
- * Temporary option to disable the date picker from the Expiry Widget.
- *
- * @since 1.32
- * @deprecated 1.32
- * @var bool
- */
-$wgExpiryWidgetNoDatePicker = false;
-
 /**
  * change_tag table schema migration stage.
  *
@@ -9036,6 +9028,16 @@ $wgChangeTagsSchemaMigrationStage = MIGRATION_WRITE_BOTH;
  */
 $wgTagStatisticsNewTable = false;
 
+/**
+ * Flag to enable Partial Blocks. This allows an admin to prevent a user from editing specific pages
+ * or namespaces.
+ *
+ * @since 1.32
+ * @deprecated 1.32
+ * @var bool
+ */
+$wgEnablePartialBlocks = false;
+
 /**
  * For really cool vim folding this needs to be at the end:
  * vim: foldmarker=@{,@} foldmethod=marker
index 7143c3f..a79b974 100644 (file)
@@ -794,7 +794,7 @@ class EditPage {
                $out->addHTML( $this->editFormTextTop );
 
                if ( $errorMessage !== '' ) {
-                       $out->addWikiText( $errorMessage );
+                       $out->addWikiTextAsInterface( $errorMessage );
                        $out->addHTML( "<hr />\n" );
                }
 
@@ -1640,7 +1640,7 @@ class EditPage {
                        case self::AS_CANNOT_USE_CUSTOM_MODEL:
                        case self::AS_PARSE_ERROR:
                        case self::AS_UNICODE_NOT_SUPPORTED:
-                               $out->addWikiText( '<div class="error">' . "\n" . $status->getWikiText() . '</div>' );
+                               $out->wrapWikiTextAsInterface( 'error', $status->getWikiText() );
                                return true;
 
                        case self::AS_SUCCESS_NEW_ARTICLE:
@@ -2479,13 +2479,6 @@ ERROR;
                $out->addModuleStyles( 'mediawiki.editfont.styles' );
 
                $user = $this->context->getUser();
-               if ( $user->getOption( 'showtoolbar' ) ) {
-                       // The addition of default buttons is handled by getEditToolbar() which
-                       // has its own dependency on this module. The call here ensures the module
-                       // is loaded in time (it has position "top") for other modules to register
-                       // buttons (e.g. extensions, gadgets, user scripts).
-                       $out->addModules( 'mediawiki.toolbar' );
-               }
 
                if ( $user->getOption( 'uselivepreview' ) ) {
                        $out->addModules( 'mediawiki.action.edit.preview' );
@@ -2788,13 +2781,8 @@ ERROR;
 
                $out->addHTML( $this->editFormTextTop );
 
-               $showToolbar = true;
                if ( $this->wasDeletedSinceLastEdit() ) {
-                       if ( $this->formtype == 'save' ) {
-                               // Hide the toolbar and edit area, user can click preview to get it back
-                               // Add an confirmation checkbox and explanation.
-                               $showToolbar = false;
-                       } else {
+                       if ( $this->formtype !== 'save' ) {
                                $out->wrapWikiMsg( "<div class='error mw-deleted-while-editing'>\n$1\n</div>",
                                        'deletedwhileediting' );
                        }
@@ -2932,7 +2920,7 @@ ERROR;
                        $out->addHTML( $editConflictHelper->getEditFormHtmlBeforeContent() );
                }
 
-               if ( !$this->mTitle->isUserConfigPage() && $showToolbar && $user->getOption( 'showtoolbar' ) ) {
+               if ( !$this->mTitle->isUserConfigPage() ) {
                        $out->addHTML( self::getEditToolbar( $this->mTitle ) );
                }
 
@@ -2991,7 +2979,7 @@ ERROR;
                                        $this->contentFormat,
                                        $ex->getMessage()
                                );
-                               $out->addWikiText( '<div class="error">' . $msg->plain() . '</div>' );
+                               $out->wrapWikiTextAsInterface( 'error', $msg->plain() );
                        }
                }
 
@@ -3109,7 +3097,7 @@ ERROR;
                        }
 
                        if ( $this->hookError !== '' ) {
-                               $out->addWikiText( $this->hookError );
+                               $out->addWikiTextAsInterface( $this->hookError );
                        }
 
                        if ( $this->section != 'new' ) {
@@ -3466,7 +3454,7 @@ ERROR;
                                        $this->contentFormat,
                                        $ex->getMessage()
                                );
-                               $out->addWikiText( '<div class="error">' . $msg->plain() . '</div>' );
+                               $out->wrapWikiTextAsInterface( 'error', $msg->plain() );
                        }
                }
        }
@@ -3707,7 +3695,7 @@ ERROR;
                $out->addHTML( "<div class='editCheckboxes'>" . $checkboxesHTML . "</div>\n" );
 
                // Show copyright warning.
-               $out->addWikiText( $this->getCopywarn() );
+               $out->addWikiTextAsInterface( $this->getCopywarn() );
                $out->addHTML( $this->editFormTextAfterWarn );
 
                $out->addHTML( "<div class='editButtons'>\n" );
@@ -4088,145 +4076,20 @@ ERROR;
        }
 
        /**
-        * Shows a bulletin board style toolbar for common editing functions.
-        * It can be disabled in the user preferences.
+        * Allow extensions to provide a toolbar.
         *
         * @param Title|null $title Title object for the page being edited (optional)
-        * @return string
+        * @return string|null
         */
        public static function getEditToolbar( $title = null ) {
-               global $wgOut, $wgEnableUploads, $wgForeignFileRepos;
-
-               $imagesAvailable = $wgEnableUploads || count( $wgForeignFileRepos );
-               $showSignature = true;
-               if ( $title ) {
-                       $showSignature = MWNamespace::wantSignatures( $title->getNamespace() );
-               }
-
-               $contLang = MediaWikiServices::getInstance()->getContentLanguage();
-
-               /**
-                * $toolarray is an array of arrays each of which includes the
-                * opening tag, the closing tag, optionally a sample text that is
-                * inserted between the two when no selection is highlighted
-                * and.  The tip text is shown when the user moves the mouse
-                * over the button.
-                *
-                * Images are defined in ResourceLoaderEditToolbarModule.
-                */
-               $toolarray = [
-                       [
-                               'id'     => 'mw-editbutton-bold',
-                               'open'   => '\'\'\'',
-                               'close'  => '\'\'\'',
-                               'sample' => wfMessage( 'bold_sample' )->text(),
-                               'tip'    => wfMessage( 'bold_tip' )->text(),
-                       ],
-                       [
-                               'id'     => 'mw-editbutton-italic',
-                               'open'   => '\'\'',
-                               'close'  => '\'\'',
-                               'sample' => wfMessage( 'italic_sample' )->text(),
-                               'tip'    => wfMessage( 'italic_tip' )->text(),
-                       ],
-                       [
-                               'id'     => 'mw-editbutton-link',
-                               'open'   => '[[',
-                               'close'  => ']]',
-                               'sample' => wfMessage( 'link_sample' )->text(),
-                               'tip'    => wfMessage( 'link_tip' )->text(),
-                       ],
-                       [
-                               'id'     => 'mw-editbutton-extlink',
-                               'open'   => '[',
-                               'close'  => ']',
-                               'sample' => wfMessage( 'extlink_sample' )->text(),
-                               'tip'    => wfMessage( 'extlink_tip' )->text(),
-                       ],
-                       [
-                               'id'     => 'mw-editbutton-headline',
-                               'open'   => "\n== ",
-                               'close'  => " ==\n",
-                               'sample' => wfMessage( 'headline_sample' )->text(),
-                               'tip'    => wfMessage( 'headline_tip' )->text(),
-                       ],
-                       $imagesAvailable ? [
-                               'id'     => 'mw-editbutton-image',
-                               'open'   => '[[' . $contLang->getNsText( NS_FILE ) . ':',
-                               'close'  => ']]',
-                               'sample' => wfMessage( 'image_sample' )->text(),
-                               'tip'    => wfMessage( 'image_tip' )->text(),
-                       ] : false,
-                       $imagesAvailable ? [
-                               'id'     => 'mw-editbutton-media',
-                               'open'   => '[[' . $contLang->getNsText( NS_MEDIA ) . ':',
-                               'close'  => ']]',
-                               'sample' => wfMessage( 'media_sample' )->text(),
-                               'tip'    => wfMessage( 'media_tip' )->text(),
-                       ] : false,
-                       [
-                               'id'     => 'mw-editbutton-nowiki',
-                               'open'   => "<nowiki>",
-                               'close'  => "</nowiki>",
-                               'sample' => wfMessage( 'nowiki_sample' )->text(),
-                               'tip'    => wfMessage( 'nowiki_tip' )->text(),
-                       ],
-                       $showSignature ? [
-                               'id'     => 'mw-editbutton-signature',
-                               'open'   => wfMessage( 'sig-text', '~~~~' )->inContentLanguage()->text(),
-                               'close'  => '',
-                               'sample' => '',
-                               'tip'    => wfMessage( 'sig_tip' )->text(),
-                       ] : false,
-                       [
-                               'id'     => 'mw-editbutton-hr',
-                               'open'   => "\n----\n",
-                               'close'  => '',
-                               'sample' => '',
-                               'tip'    => wfMessage( 'hr_tip' )->text(),
-                       ]
-               ];
-
-               $script = '';
-               foreach ( $toolarray as $tool ) {
-                       if ( !$tool ) {
-                               continue;
-                       }
-
-                       $params = [
-                               // Images are defined in ResourceLoaderEditToolbarModule
-                               false,
-                               // Note that we use the tip both for the ALT tag and the TITLE tag of the image.
-                               // Older browsers show a "speedtip" type message only for ALT.
-                               // Ideally these should be different, realistically they
-                               // probably don't need to be.
-                               $tool['tip'],
-                               $tool['open'],
-                               $tool['close'],
-                               $tool['sample'],
-                               $tool['id'],
-                       ];
+               $startingToolbar = '<div id="toolbar"></div>';
+               $toolbar = $startingToolbar;
 
-                       $script .= Xml::encodeJsCall(
-                               'mw.toolbar.addButton',
-                               $params,
-                               ResourceLoader::inDebugMode()
-                       );
-               }
-
-               $toolbar = '<div id="toolbar"></div>';
-
-               if ( Hooks::run( 'EditPageBeforeEditToolbar', [ &$toolbar ] ) ) {
-                       // Only add the old toolbar cruft to the page payload if the toolbar has not
-                       // been over-written by a hook caller
-                       $nonce = $wgOut->getCSPNonce();
-                       $wgOut->addScript( Html::inlineScript(
-                               ResourceLoader::makeInlineCodeWithModule( 'mediawiki.toolbar', $script ),
-                               $nonce
-                       ) );
+               if ( !Hooks::run( 'EditPageBeforeEditToolbar', [ &$toolbar ] ) ) {
+                       return null;
                };
-
-               return $toolbar;
+               // Don't add a pointless `<div>` to the page unless a hook caller populated it
+               return ( $toolbar === $startingToolbar ) ? null : $toolbar;
        }
 
        /**
index c362ec0..3e0595e 100644 (file)
@@ -120,9 +120,10 @@ class FileDeleteForm {
 
                        if ( !$status->isGood() ) {
                                $wgOut->addHTML( '<h2>' . $this->prepareMessage( 'filedeleteerror-short' ) . "</h2>\n" );
-                               $wgOut->addWikiText( '<div class="error">' .
+                               $wgOut->wrapWikiTextAsInterface(
+                                       'error',
                                        $status->getWikiText( 'filedeleteerror-short', 'filedeleteerror-long' )
-                                       . '</div>' );
+                               );
                        }
                        if ( $status->isOK() ) {
                                $wgOut->setPageTitle( wfMessage( 'actioncomplete' ) );
index 4531b54..6e95871 100644 (file)
@@ -2656,6 +2656,7 @@ function wfWikiID() {
  * @param string $wiki
  *
  * @return array
+ * @deprecated 1.32
  */
 function wfSplitWikiID( $wiki ) {
        $bits = explode( '-', $wiki, 2 );
index 99b1a78..267b589 100644 (file)
@@ -43,7 +43,7 @@ class MediaWiki {
        private $config;
 
        /**
-        * @var String Cache what action this request is
+        * @var string Cache what action this request is
         */
        private $action;
 
@@ -705,11 +705,12 @@ class MediaWiki {
         * @since 1.26
         */
        public function doPostOutputShutdown( $mode = 'normal' ) {
+               // Record backend request timing
+               $timing = $this->context->getTiming();
+               $timing->mark( 'requestShutdown' );
+
                // Perform the last synchronous operations...
                try {
-                       // Record backend request timing
-                       $timing = $this->context->getTiming();
-                       $timing->mark( 'requestShutdown' );
                        // Show visible profiling data if enabled (which cannot be post-send)
                        Profiler::instance()->logDataPageOutputOnly();
                } catch ( Exception $e ) {
@@ -900,9 +901,6 @@ class MediaWiki {
                        __METHOD__
                );
 
-               // Important: this must be the last deferred update added (T100085, T154425)
-               DeferredUpdates::addCallableUpdate( [ JobQueueGroup::class, 'pushLazyJobs' ] );
-
                // Do any deferred jobs; preferring to run them now if a client will not wait on them
                DeferredUpdates::doUpdates( $blocksHttpClient ? 'enqueue' : 'run' );
 
index 0acd55a..f3ca7d4 100644 (file)
@@ -518,6 +518,7 @@ class MediaWikiServices extends ServiceContainer {
         * @return CryptRand
         */
        public function getCryptRand() {
+               wfDeprecated( __METHOD__, '1.32' );
                return $this->getService( 'CryptRand' );
        }
 
index ecd12c6..5213fc1 100644 (file)
@@ -543,6 +543,13 @@ class MovePage {
                $nullRevId = $nullRevision->insertOn( $dbw );
                $logEntry->setAssociatedRevId( $nullRevId );
 
+               /**
+                * T163966
+                * Increment user_editcount during page moves
+                * Moved from SpecialMovepage.php per T195550
+                */
+               $user->incEditCount();
+
                if ( !$redirectContent ) {
                        // Clean up the old title *before* reset article id - T47348
                        WikiPage::onArticleDelete( $this->oldTitle );
index cde92e8..aa2afe9 100644 (file)
@@ -1758,6 +1758,7 @@ class OutputPage extends ContextSource {
         *    or else addWikiTextAsContent() if $interface is false.
         */
        public function addWikiText( $text, $linestart = true, $interface = true ) {
+               wfDeprecated( __METHOD__, '1.32' );
                $title = $this->getTitle();
                if ( !$title ) {
                        throw new MWException( 'Title is null' );
@@ -1793,6 +1794,29 @@ class OutputPage extends ContextSource {
                $this->addWikiTextTitleInternal( $text, $title, $linestart, /*tidy*/true, /*interface*/true );
        }
 
+       /**
+        * Convert wikitext *in the user interface language* to HTML and
+        * add it to the buffer with a `<div class="$wrapperClass">`
+        * wrapper.  The result will not be language-converted, as user
+        * interface messages as already localized into a specific
+        * variant.  The $text will be parsed in start-of-line context.
+        * Output will be tidy.
+        *
+        * @param string $wrapperClass The class attribute value for the <div>
+        *   wrapper in the output HTML
+        * @param string $text Wikitext in the user interface language
+        * @since 1.32
+        */
+       public function wrapWikiTextAsInterface(
+               $wrapperClass, $text
+       ) {
+               $this->addWikiTextTitleInternal(
+                       $text, $this->getTitle(),
+                       /*linestart*/true, /*tidy*/true, /*interface*/true,
+                       $wrapperClass
+               );
+       }
+
        /**
         * Convert wikitext *in the page content language* to HTML and add
         * it to the buffer.  The result with be language-converted to the
@@ -1904,27 +1928,24 @@ class OutputPage extends ContextSource {
         *             since 1.32; all wikitext should be tidied.
         * @param bool $interface Whether it is an interface message
         *   (for example disables conversion)
+        * @param string $wrapperClass if not empty, wraps the output in
+        *   a `<div class="$wrapperClass">`
         * @private
         */
        private function addWikiTextTitleInternal(
-               $text, Title $title, $linestart, $tidy, $interface
+               $text, Title $title, $linestart, $tidy, $interface, $wrapperClass = null
        ) {
-               global $wgParser;
-
-               $popts = $this->parserOptions();
-               $oldTidy = $popts->setTidy( $tidy );
-               $popts->setInterfaceMessage( (bool)$interface );
+               if ( !$tidy ) {
+                       wfDeprecated( 'disabling tidy', '1.32' );
+               }
 
-               $parserOutput = $wgParser->getFreshParser()->parse(
-                       $text, $title, $popts,
-                       $linestart, true, $this->mRevisionId
+               $parserOutput = $this->parseInternal(
+                       $text, $title, $linestart, $tidy, $interface, /*language*/null
                );
 
-               $popts->setTidy( $oldTidy );
-
                $this->addParserOutput( $parserOutput, [
                        'enableSectionEditLinks' => false,
-                       'wrapperDivClass' => '',
+                       'wrapperDivClass' => $wrapperClass ?? '',
                ] );
        }
 
@@ -2061,6 +2082,9 @@ class OutputPage extends ContextSource {
        /**
         * Parse wikitext and return the HTML.
         *
+        * @todo The output is wrapped in a <div> iff $interface is false; it's
+        * probably best to always strip the wrapper.
+        *
         * @param string $text
         * @param bool $linestart Is this the start of a line?
         * @param bool $interface Use interface language (instead of content language) while parsing
@@ -2069,54 +2093,144 @@ class OutputPage extends ContextSource {
         * @param Language|null $language Target language object, will override $interface
         * @throws MWException
         * @return string HTML
+        * @deprecated since 1.33, due to untidy output and inconsistent wrapper;
+        *  use parseAsContent() if $interface is default value or false, or else
+        *  parseAsInterface() if $interface is true.
         */
        public function parse( $text, $linestart = true, $interface = false, $language = null ) {
+               return $this->parseInternal(
+                       $text, $this->getTitle(), $linestart, /*tidy*/false, $interface, $language
+               )->getText( [
+                       'enableSectionEditLinks' => false,
+               ] );
+       }
+
+       /**
+        * Parse wikitext *in the page content language* and return the HTML.
+        * The result will be language-converted to the user's preferred variant.
+        * Output will be tidy.
+        *
+        * @param string $text Wikitext in the page content language
+        * @param bool $linestart Is this the start of a line? (Defaults to true)
+        * @throws MWException
+        * @return string HTML
+        * @since 1.33
+        */
+       public function parseAsContent( $text, $linestart = true ) {
+               return $this->parseInternal(
+                       $text, $this->getTitle(), $linestart, /*tidy*/true, /*interface*/false, /*language*/null
+               )->getText( [
+                       'enableSectionEditLinks' => false,
+                       'wrapperDivClass' => ''
+               ] );
+       }
+
+       /**
+        * Parse wikitext *in the user interface language* and return the HTML.
+        * The result will not be language-converted, as user interface messages
+        * are already localized into a specific variant.
+        * Output will be tidy.
+        *
+        * @param string $text Wikitext in the user interface language
+        * @param bool $linestart Is this the start of a line? (Defaults to true)
+        * @throws MWException
+        * @return string HTML
+        * @since 1.33
+        */
+       public function parseAsInterface( $text, $linestart = true ) {
+               return $this->parseInternal(
+                       $text, $this->getTitle(), $linestart, /*tidy*/true, /*interface*/true, /*language*/null
+               )->getText( [
+                       'enableSectionEditLinks' => false,
+                       'wrapperDivClass' => ''
+               ] );
+       }
+
+       /**
+        * Parse wikitext *in the user interface language*, strip
+        * paragraph wrapper, and return the HTML.
+        * The result will not be language-converted, as user interface messages
+        * are already localized into a specific variant.
+        * Output will be tidy.  Outer paragraph wrapper will only be stripped
+        * if the result is a single paragraph.
+        *
+        * @param string $text Wikitext in the user interface language
+        * @param bool $linestart Is this the start of a line? (Defaults to true)
+        * @throws MWException
+        * @return string HTML
+        * @since 1.33
+        */
+       public function parseInlineAsInterface( $text, $linestart = true ) {
+               return Parser::stripOuterParagraph(
+                       $this->parseAsInterface( $text, $linestart )
+               );
+       }
+
+       /**
+        * Parse wikitext, strip paragraph wrapper, and return the HTML.
+        *
+        * @param string $text
+        * @param bool $linestart Is this the start of a line?
+        * @param bool $interface Use interface language (instead of content language) while parsing
+        *   language sensitive magic words like GRAMMAR and PLURAL
+        * @return string HTML
+        * @deprecated since 1.33, due to untidy output and confusing default
+        *   for $interface.  Use parseInlineAsInterface() if $interface is
+        *   the default value or false, or else use
+        *   Parser::stripOuterParagraph($outputPage->parseAsContent(...)).
+        */
+       public function parseInline( $text, $linestart = true, $interface = false ) {
+               $parsed = $this->parseInternal(
+                       $text, $this->getTitle(), $linestart, /*tidy*/false, $interface, /*language*/null
+               )->getText( [
+                       'enableSectionEditLinks' => false,
+                       'wrapperDivClass' => '', /* no wrapper div */
+               ] );
+               return Parser::stripOuterParagraph( $parsed );
+       }
+
+       /**
+        * Parse wikitext and return the HTML (internal implementation helper)
+        *
+        * @param string $text
+        * @param Title The title to use
+        * @param bool $linestart Is this the start of a line?
+        * @param bool $tidy Whether the output should be tidied
+        * @param bool $interface Use interface language (instead of content language) while parsing
+        *   language sensitive magic words like GRAMMAR and PLURAL.  This also disables
+        *   LanguageConverter.
+        * @param Language|null $language Target language object, will override $interface
+        * @throws MWException
+        * @return ParserOutput
+        */
+       private function parseInternal( $text, $title, $linestart, $tidy, $interface, $language ) {
                global $wgParser;
 
-               if ( is_null( $this->getTitle() ) ) {
+               if ( is_null( $title ) ) {
                        throw new MWException( 'Empty $mTitle in ' . __METHOD__ );
                }
 
                $popts = $this->parserOptions();
-               if ( $interface ) {
-                       $popts->setInterfaceMessage( true );
-               }
+               $oldTidy = $popts->setTidy( $tidy );
+               $oldInterface = $popts->setInterfaceMessage( (bool)$interface );
+
                if ( $language !== null ) {
                        $oldLang = $popts->setTargetLanguage( $language );
                }
 
                $parserOutput = $wgParser->getFreshParser()->parse(
-                       $text, $this->getTitle(), $popts,
+                       $text, $title, $popts,
                        $linestart, true, $this->mRevisionId
                );
 
-               if ( $interface ) {
-                       $popts->setInterfaceMessage( false );
-               }
+               $popts->setTidy( $oldTidy );
+               $popts->setInterfaceMessage( $oldInterface );
+
                if ( $language !== null ) {
                        $popts->setTargetLanguage( $oldLang );
                }
 
-               return $parserOutput->getText( [
-                       'enableSectionEditLinks' => false,
-               ] );
-       }
-
-       /**
-        * Parse wikitext, strip paragraphs, and return the HTML.
-        *
-        * @todo This doesn't work as expected at all.  If $interface is false, there's always a
-        * wrapping <div>, so stripOuterParagraph() does nothing.
-        *
-        * @param string $text
-        * @param bool $linestart Is this the start of a line?
-        * @param bool $interface Use interface language (instead of content language) while parsing
-        *   language sensitive magic words like GRAMMAR and PLURAL
-        * @return string HTML
-        */
-       public function parseInline( $text, $linestart = true, $interface = false ) {
-               $parsed = $this->parse( $text, $linestart, $interface );
-               return Parser::stripOuterParagraph( $parsed );
+               return $parserOutput;
        }
 
        /**
@@ -2435,6 +2549,7 @@ class OutputPage extends ContextSource {
                                !$this->haveCacheVaryCookies()
                        ) {
                                if ( $config->get( 'UseESI' ) ) {
+                                       wfDeprecated( '$wgUseESI = true', '1.33' );
                                        # We'll purge the proxy cache explicitly, but require end user agents
                                        # to revalidate against the proxy on each visit.
                                        # Surrogate-Control controls our CDN, Cache-Control downstream caches
@@ -2748,7 +2863,7 @@ class OutputPage extends ContextSource {
                        }
                } else {
                        $this->prepareErrorPage( $this->msg( 'permissionserrors' ) );
-                       $this->addWikiText( $this->formatPermissionsErrorMessage( $errors, $action ) );
+                       $this->addWikiTextAsInterface( $this->formatPermissionsErrorMessage( $errors, $action ) );
                }
        }
 
@@ -4019,7 +4134,7 @@ class OutputPage extends ContextSource {
         *
         * Is equivalent to:
         *
-        *    $wgOut->addWikiText( "<div class='error'>\n"
+        *    $wgOut->addWikiTextAsInterface( "<div class='error'>\n"
         *        . wfMessage( 'some-error' )->plain() . "\n</div>" );
         *
         * The newline after the opening div is needed in some wikitext. See T21226.
@@ -4048,7 +4163,7 @@ class OutputPage extends ContextSource {
                        }
                        $s = str_replace( '$' . ( $n + 1 ), $this->msg( $name, $args )->plain(), $s );
                }
-               $this->addWikiText( $s );
+               $this->addWikiTextAsInterface( $s );
        }
 
        /**
@@ -4084,8 +4199,8 @@ class OutputPage extends ContextSource {
         * Helper function to setup the PHP implementation of OOUI to use in this request.
         *
         * @since 1.26
-        * @param String $skinName The Skin name to determine the correct OOUI theme
-        * @param String $dir Language direction
+        * @param string $skinName The Skin name to determine the correct OOUI theme
+        * @param string $dir Language direction
         */
        public static function setupOOUI( $skinName = 'default', $dir = 'ltr' ) {
                $themes = ResourceLoaderOOUIModule::getSkinThemeMap();
index c49318b..aee2a0c 100644 (file)
  * @class
  */
 class PHPVersionCheck {
-       /* @var string The number of the MediaWiki version used */
-       var $mwVersion = '1.32';
+       /* @var string The number of the MediaWiki version used. */
+       var $mwVersion = '1.33';
+
+       /* @var array A mapping of PHP functions to PHP extensions. */
        var $functionsExtensionsMapping = array(
                'mb_substr'   => 'mbstring',
                'xml_parser_create' => 'xml',
@@ -61,14 +63,14 @@ class PHPVersionCheck {
        }
 
        /**
-        * Returns the version of the installed php implementation.
+        * Returns the version of the installed PHP implementation.
         *
         * @param string $impl By default, the function returns the info of the currently installed PHP
         *  implementation. Using this parameter the caller can decide, what version info will be
         *  returned. Valid values: HHVM, PHP
-        * @return array An array of information about the php implementation, containing:
-        *  - 'version': The version of the php implementation (specific to the implementation, not
-        *  the version of the implemented php version)
+        * @return array An array of information about the PHP implementation, containing:
+        *  - 'version': The version of the PHP implementation (specific to the implementation, not
+        *  the version of the implemented PHP version)
         *  - 'implementation': The name of the implementation used
         *  - 'vendor': The development group, vendor or developer of the implementation.
         *  - 'upstreamSupported': The minimum version of the implementation supported by the named vendor.
@@ -101,7 +103,7 @@ class PHPVersionCheck {
        }
 
        /**
-        * Displays an error, if the installed php version does not meet the minimum requirement.
+        * Displays an error, if the installed PHP version does not meet the minimum requirement.
         */
        function checkRequiredPHPVersion() {
                $phpInfo = $this->getPHPInfo();
@@ -121,7 +123,7 @@ class PHPVersionCheck {
                                . "MediaWiki $this->mwVersion needs {$phpInfo['implementation']}"
                                . " $minimumVersion or higher or {$otherInfo['implementation']} version "
                                . "{$otherInfo['minSupported']}.\n\nCheck if you have a"
-                               . " newer php executable with a different name.\n\n";
+                               . " newer PHP executable with a different name.\n\n";
 
                        // phpcs:disable Generic.Files.LineLength
                        $longHtml = <<<HTML
@@ -331,11 +333,11 @@ HTML;
 }
 
 /**
- * Check php version and that external dependencies are installed, and
+ * Check PHP version and that external dependencies are installed, and
  * display an informative error if either condition is not satisfied.
  *
  * @note Since we can't rely on anything, the minimum PHP versions and MW current
- * version are hardcoded here
+ * version are hardcoded here.
  */
 function wfEntryPointCheck( $entryPoint ) {
        $phpVersionCheck = new PHPVersionCheck();
index eacd370..bb8eba1 100644 (file)
@@ -216,7 +216,9 @@ class ProtectionForm {
                                'protect-norestrictiontypes-title',
                                $this->mTitle->getPrefixedText()
                        ) );
-                       $out->addWikiText( $this->mContext->msg( 'protect-norestrictiontypes-text' )->plain() );
+                       $out->addWikiTextAsInterface(
+                               $this->mContext->msg( 'protect-norestrictiontypes-text' )->plain()
+                       );
 
                        // Show the log in case protection was possible once
                        $this->showLogExtract( $out );
@@ -246,7 +248,9 @@ class ProtectionForm {
                                $this->mContext->msg( 'protect-title-notallowed',
                                        $this->mTitle->getPrefixedText() )
                        );
-                       $out->addWikiText( $out->formatPermissionsErrorMessage( $this->mPermErrors, 'protect' ) );
+                       $out->addWikiTextAsInterface( $out->formatPermissionsErrorMessage(
+                               $this->mPermErrors, 'protect'
+                       ) );
                } else {
                        $out->setPageTitle( $this->mContext->msg( 'protect-title', $this->mTitle->getPrefixedText() ) );
                        $out->addWikiMsg( 'protect-text',
@@ -313,7 +317,7 @@ class ProtectionForm {
                );
 
                if ( !$status->isOK() ) {
-                       $this->show( $out->parseInline( $status->getWikiText() ) );
+                       $this->show( $out->parseInlineAsInterface( $status->getWikiText() ) );
                        return false;
                }
 
index e8fe8bd..6d1812a 100644 (file)
@@ -61,8 +61,13 @@ class Revision implements IDBAccessObject {
        /**
         * @return RevisionStore
         */
-       protected static function getRevisionStore() {
-               return MediaWikiServices::getInstance()->getRevisionStore();
+       protected static function getRevisionStore( $wiki = false ) {
+               if ( $wiki ) {
+                       return MediaWikiServices::getInstance()->getRevisionStoreFactory()
+                               ->getRevisionStore( $wiki );
+               } else {
+                       return MediaWikiServices::getInstance()->getRevisionStore();
+               }
        }
 
        /**
@@ -1036,10 +1041,17 @@ class Revision implements IDBAccessObject {
        /**
         * Get revision text associated with an old or archive row
         *
-        * Both the flags and the text field must be included. Including the old_id
+        * If the text field is not included, this uses RevisionStore to load the appropriate slot
+        * and return its serialized content. This is the default backwards-compatibility behavior
+        * when reading from the MCR aware database schema is enabled. For this to work, either
+        * the revision ID or the page ID must be included in the row.
+        *
+        * When using the old text field, the flags field must also be set. Including the old_id
         * field will activate cache usage as long as the $wiki parameter is not set.
         *
-        * @param stdClass $row The text data
+        * @deprecated since 1.32, use RevisionStore::newRevisionFromRow instead.
+        *
+        * @param stdClass $row The text data. If a falsy value is passed instead, false is returned.
         * @param string $prefix Table prefix (default 'old_')
         * @param string|bool $wiki The name of the wiki to load the revision text from
         *   (same as the wiki $row was loaded from) or false to indicate the local
@@ -1048,19 +1060,51 @@ class Revision implements IDBAccessObject {
         * @return string|false Text the text requested or false on failure
         */
        public static function getRevisionText( $row, $prefix = 'old_', $wiki = false ) {
+               global $wgMultiContentRevisionSchemaMigrationStage;
+
+               if ( !$row ) {
+                       return false;
+               }
+
                $textField = $prefix . 'text';
                $flagsField = $prefix . 'flags';
 
-               if ( isset( $row->$flagsField ) ) {
-                       $flags = explode( ',', $row->$flagsField );
+               if ( isset( $row->$textField ) ) {
+                       if ( !( $wgMultiContentRevisionSchemaMigrationStage & SCHEMA_COMPAT_WRITE_OLD ) ) {
+                               // The text field was read, but it's no longer being populated!
+                               // We could gloss over this by using the text when it's there and loading
+                               // if when it's not, but it seems preferable to complain loudly about a
+                               // query that is no longer guaranteed to work reliably.
+                               throw new LogicException(
+                                       'Cannot use ' . __METHOD__ . ' with the ' . $textField . ' field when'
+                                       . ' $wgMultiContentRevisionSchemaMigrationStage does not include'
+                                       . ' SCHEMA_COMPAT_WRITE_OLD. The field may not be populated for all revisions!'
+                               );
+                       }
+
+                       $text = $row->$textField;
                } else {
-                       $flags = [];
+                       // Missing text field, we are probably looking at the MCR-enabled DB schema.
+
+                       if ( !( $wgMultiContentRevisionSchemaMigrationStage & SCHEMA_COMPAT_WRITE_OLD ) ) {
+                               // This method should no longer be used with the new schema. Ideally, we
+                               // would already trigger a deprecation warning when SCHEMA_COMPAT_READ_NEW is set.
+                               wfDeprecated( __METHOD__ . ' (MCR without SCHEMA_COMPAT_WRITE_OLD)', '1.32' );
+                       }
+
+                       $store = self::getRevisionStore( $wiki );
+                       $rev = $prefix === 'ar_'
+                               ? $store->newRevisionFromArchiveRow( $row )
+                               : $store->newRevisionFromRow( $row );
+
+                       $content = $rev->getContent( SlotRecord::MAIN );
+                       return $content ? $content->serialize() : false;
                }
 
-               if ( isset( $row->$textField ) ) {
-                       $text = $row->$textField;
+               if ( isset( $row->$flagsField ) ) {
+                       $flags = explode( ',', $row->$flagsField );
                } else {
-                       return false;
+                       $flags = [];
                }
 
                $cacheKey = isset( $row->old_id )
index ed203ad..a1be225 100644 (file)
@@ -361,7 +361,8 @@ return [
                        $services->getMagicWordFactory(),
                        $services->getContentLanguage(),
                        wfUrlProtocols(),
-                       $services->getSpecialPageFactory()
+                       $services->getSpecialPageFactory(),
+                       $services->getMainConfig()
                );
        },
 
index bdfce62..aba050d 100644 (file)
@@ -498,11 +498,24 @@ if ( is_array( $wgExtraNamespaces ) ) {
        $wgCanonicalNamespaceNames = $wgCanonicalNamespaceNames + $wgExtraNamespaces;
 }
 
+// Hard-deprecate setting $wgDummyLanguageCodes in LocalSettings.php
+if ( count( $wgDummyLanguageCodes ) !== 0 ) {
+       wfDeprecated( '$wgDummyLanguageCodes', '1.29' );
+}
 // Merge in the legacy language codes, incorporating overrides from the config
 $wgDummyLanguageCodes += [
+       // Internal language codes of the private-use area which get mapped to
+       // themselves.
        'qqq' => 'qqq', // Used for message documentation
        'qqx' => 'qqx', // Used for viewing message keys
 ] + $wgExtraLanguageCodes + LanguageCode::getDeprecatedCodeMapping();
+// Merge in (inverted) BCP 47 mappings
+foreach ( LanguageCode::getNonstandardLanguageCodeMapping() as $code => $bcp47 ) {
+       $bcp47 = strtolower( $bcp47 ); // force case-insensitivity
+       if ( !isset( $wgDummyLanguageCodes[$bcp47] ) ) {
+               $wgDummyLanguageCodes[$bcp47] = $wgDummyLanguageCodes[$code] ?? $code;
+       }
+}
 
 // These are now the same, always
 // To determine the user language, use $wgLang->getCode()
index b5a6d3a..77a8b14 100644 (file)
@@ -129,6 +129,30 @@ class RawAction extends FormlessAction {
                        }
                }
 
+               // Don't allow loading non-protected pages as javascript.
+               // In future we may further restrict this to only CONTENT_MODEL_JAVASCRIPT
+               // in NS_MEDIAWIKI or NS_USER, as well as including other config types,
+               // but for now be more permissive. Allowing protected pages outside of
+               // NS_USER and NS_MEDIAWIKI in particular should be considered a temporary
+               // allowance.
+               if (
+                       $contentType === 'text/javascript' &&
+                       !$title->isUserJsConfigPage() &&
+                       !$title->inNamespace( NS_MEDIAWIKI ) &&
+                       !in_array( 'sysop', $title->getRestrictions( 'edit' ) ) &&
+                       !in_array( 'editprotected', $title->getRestrictions( 'edit' ) )
+               ) {
+
+                       $log = LoggerFactory::getInstance( "security" );
+                       $log->info( "Blocked loading unprotected JS {title} for {user}",
+                               [
+                                       'user' => $this->getUser()->getName(),
+                                       'title' => $title->getPrefixedDBKey(),
+                               ]
+                       );
+                       throw new HttpError( 403, wfMessage( 'unprotected-js' ) );
+               }
+
                $response->header( 'Content-type: ' . $contentType . '; charset=UTF-8' );
 
                $text = $this->getRawText();
index dc7b00e..7b41262 100644 (file)
@@ -69,6 +69,11 @@ class RollbackAction extends FormlessAction {
                        ] );
                }
 
+               // @TODO: remove this hack once rollback uses POST (T88044)
+               $trxLimits = $this->context->getConfig()->get( 'TrxProfilerLimits' );
+               $trxProfiler = Profiler::instance()->getTransactionProfiler();
+               $trxProfiler->setExpectations( $trxLimits['POST'], __METHOD__ );
+
                $data = null;
                $errors = $this->page->doRollback(
                        $from,
index bb86536..1ca54c1 100644 (file)
@@ -1853,6 +1853,12 @@ abstract class ApiBase extends ContextSource {
                                        'blocked',
                                        [ 'blockinfo' => ApiQueryUserInfo::getBlockInfo( $user->getBlock() ) ]
                                ) );
+                       } elseif ( is_array( $error ) && $error[0] === 'blockedtext-partial' && $user->getBlock() ) {
+                               $status->fatal( ApiMessage::create(
+                                       'apierror-blocked-partial',
+                                       'blocked',
+                                       [ 'blockinfo' => ApiQueryUserInfo::getBlockInfo( $user->getBlock() ) ]
+                               ) );
                        } elseif ( is_array( $error ) && $error[0] === 'autoblockedtext' && $user->getBlock() ) {
                                $status->fatal( ApiMessage::create(
                                        'apierror-autoblocked',
@@ -2027,6 +2033,12 @@ abstract class ApiBase extends ContextSource {
                                'autoblocked',
                                [ 'blockinfo' => ApiQueryUserInfo::getBlockInfo( $block ) ]
                        );
+               } elseif ( !$block->isSitewide() ) {
+                       $this->dieWithError(
+                               'apierror-blocked-partial',
+                               'blocked',
+                               [ 'blockinfo' => ApiQueryUserInfo::getBlockInfo( $block ) ]
+                       );
                } else {
                        $this->dieWithError(
                                'apierror-blocked',
index 8f40283..3581ac8 100644 (file)
@@ -54,6 +54,30 @@ class ApiBlock extends ApiBase {
                        }
                }
 
+               $editingRestriction = 'sitewide';
+               $pageRestrictions = '';
+               if ( $this->getConfig()->get( 'EnablePartialBlocks' ) ) {
+                       if ( $params['pagerestrictions'] ) {
+                               $count = count( $params['pagerestrictions'] );
+                               if ( $count > 10 ) {
+                                       $this->dieWithError(
+                                               $this->msg(
+                                                       'apierror-integeroutofrange-abovebotmax',
+                                                       'pagerestrictions',
+                                                       10,
+                                                       $count
+                                               )
+                                       );
+                               }
+                       }
+
+                       if ( $params['partial'] ) {
+                               $editingRestriction = 'partial';
+                       }
+
+                       $pageRestrictions = implode( "\n", $params['pagerestrictions'] );
+               }
+
                if ( $params['userid'] !== null ) {
                        $username = User::whoIs( $params['userid'] );
 
@@ -107,6 +131,8 @@ class ApiBlock extends ApiBase {
                        'Watch' => $params['watchuser'],
                        'Confirm' => true,
                        'Tags' => $params['tags'],
+                       'EditingRestriction' => $editingRestriction,
+                       'PageRestrictions' => $pageRestrictions,
                ];
 
                $retval = SpecialBlock::processForm( $data, $this->getContext() );
@@ -137,6 +163,11 @@ class ApiBlock extends ApiBase {
                $res['allowusertalk'] = $params['allowusertalk'];
                $res['watchuser'] = $params['watchuser'];
 
+               if ( $this->getConfig()->get( 'EnablePartialBlocks' ) ) {
+                       $res['partial'] = $params['partial'];
+                       $res['pagerestrictions'] = $params['pagerestrictions'];
+               }
+
                $this->getResult()->addValue( null, $this->getModuleName(), $res );
        }
 
@@ -149,7 +180,7 @@ class ApiBlock extends ApiBase {
        }
 
        public function getAllowedParams() {
-               return [
+               $params = [
                        'user' => [
                                ApiBase::PARAM_TYPE => 'user',
                        ],
@@ -171,6 +202,15 @@ class ApiBlock extends ApiBase {
                                ApiBase::PARAM_ISMULTI => true,
                        ],
                ];
+
+               if ( $this->getConfig()->get( 'EnablePartialBlocks' ) ) {
+                       $params['partial'] = false;
+                       $params['pagerestrictions'] = [
+                               ApiBase::PARAM_ISMULTI => true,
+                       ];
+               }
+
+               return $params;
        }
 
        public function needsToken() {
index 83f72e5..5e5efa5 100644 (file)
@@ -414,11 +414,7 @@ class ApiEditPage extends ApiBase {
                        // obvious that this is even possible.
                        // @codeCoverageIgnoreStart
                        case EditPage::AS_BLOCKED_PAGE_FOR_USER:
-                               $this->dieWithError(
-                                       'apierror-blocked',
-                                       'blocked',
-                                       [ 'blockinfo' => ApiQueryUserInfo::getBlockInfo( $user->getBlock() ) ]
-                               );
+                               $this->dieBlocked( $user->getBlock() );
 
                        case EditPage::AS_READ_ONLY_PAGE:
                                $this->dieReadOnly();
index 234fcfd..9d69145 100644 (file)
@@ -252,6 +252,7 @@ abstract class ApiFormatBase extends ApiBase {
                        $out = new OutputPage( $context );
                        $context->setOutput( $out );
 
+                       $out->setRobotPolicy( 'noindex,nofollow' );
                        $out->addModuleStyles( 'mediawiki.apipretty' );
                        $out->setPageTitle( $context->msg( 'api-format-title' ) );
 
index 72509c2..84fcbef 100644 (file)
@@ -44,6 +44,7 @@ class ApiHelp extends ApiBase {
                $context->setLanguage( $this->getMain()->getLanguage() );
                $context->setTitle( SpecialPage::getTitleFor( 'ApiHelp' ) );
                $out = new OutputPage( $context );
+               $out->setRobotPolicy( 'noindex,nofollow' );
                $out->setCopyrightUrl( 'https://www.mediawiki.org/wiki/Special:MyLanguage/Copyright' );
                $context->setOutput( $out );
 
index 3ea827c..c4de31f 100644 (file)
@@ -52,9 +52,9 @@ class ApiOptions extends ApiBase {
                        $this->dieWithError( [ 'apierror-missingparam', 'optionname' ] );
                }
 
-               if ( $params['reset'] ) {
-                       $this->resetPreferences( $params['resetkinds'] );
-                       $changed = true;
+               $resetKinds = $params['resetkinds'];
+               if ( !$params['reset'] ) {
+                       $resetKinds = [];
                }
 
                $changes = [];
@@ -68,6 +68,14 @@ class ApiOptions extends ApiBase {
                        $newValue = $params['optionvalue'] ?? null;
                        $changes[$params['optionname']] = $newValue;
                }
+
+               Hooks::run( 'ApiOptions', [ $this, $user, $changes, $resetKinds ] );
+
+               if ( $resetKinds ) {
+                       $this->resetPreferences( $resetKinds );
+                       $changed = true;
+               }
+
                if ( !$changed && !count( $changes ) ) {
                        $this->dieWithError( 'apierror-nochanges' );
                }
index a78cb7f..148ac67 100644 (file)
@@ -625,7 +625,7 @@ class ApiParse extends ApiBase {
         * This mimicks the behavior of EditPage in formatting a summary
         *
         * @param Title $title of the page being parsed
-        * @param Array $params the API parameters of the request
+        * @param array $params The API parameters of the request
         * @return Content|bool
         */
        private function formatSummary( $title, $params ) {
index 08c13e7..3cd2ace 100644 (file)
@@ -20,6 +20,9 @@
  * @file
  */
 
+use Wikimedia\Rdbms\IResultWrapper;
+use MediaWiki\Block\BlockRestriction;
+
 /**
  * Query module to enumerate all user blocks
  *
@@ -48,6 +51,7 @@ class ApiQueryBlocks extends ApiQueryBase {
                $fld_reason = isset( $prop['reason'] );
                $fld_range = isset( $prop['range'] );
                $fld_flags = isset( $prop['flags'] );
+               $fld_restrictions = isset( $prop['restrictions'] );
 
                $result = $this->getResult();
 
@@ -64,8 +68,9 @@ class ApiQueryBlocks extends ApiQueryBase {
                $this->addFieldsIf( 'ipb_expiry', $fld_expiry );
                $this->addFieldsIf( [ 'ipb_range_start', 'ipb_range_end' ], $fld_range );
                $this->addFieldsIf( [ 'ipb_anon_only', 'ipb_create_account', 'ipb_enable_autoblock',
-                       'ipb_block_email', 'ipb_deleted', 'ipb_allow_usertalk' ],
+                       'ipb_block_email', 'ipb_deleted', 'ipb_allow_usertalk', 'ipb_sitewide' ],
                        $fld_flags );
+               $this->addFieldsIf( 'ipb_sitewide', $fld_restrictions );
 
                if ( $fld_reason ) {
                        $commentQuery = $commentStore->getJoin( 'ipb_reason' );
@@ -180,6 +185,11 @@ class ApiQueryBlocks extends ApiQueryBase {
 
                $res = $this->select( __METHOD__ );
 
+               $restrictions = [];
+               if ( $fld_restrictions ) {
+                       $restrictions = $this->getRestrictionData( $res, $params['limit'] );
+               }
+
                $count = 0;
                foreach ( $res as $row ) {
                        if ( ++$count > $params['limit'] ) {
@@ -227,7 +237,16 @@ class ApiQueryBlocks extends ApiQueryBase {
                                $block['noemail'] = (bool)$row->ipb_block_email;
                                $block['hidden'] = (bool)$row->ipb_deleted;
                                $block['allowusertalk'] = (bool)$row->ipb_allow_usertalk;
+                               $block['partial'] = !(bool)$row->ipb_sitewide;
+                       }
+
+                       if ( $fld_restrictions ) {
+                               $block['restrictions'] = [];
+                               if ( !$row->ipb_sitewide && isset( $restrictions[$row->ipb_id] ) ) {
+                                       $block['restrictions'] = $restrictions[$row->ipb_id];
+                               }
                        }
+
                        $fit = $result->addValue( [ 'query', $this->getModuleName() ], null, $block );
                        if ( !$fit ) {
                                $this->setContinueEnumParameter( 'continue', "$row->ipb_timestamp|$row->ipb_id" );
@@ -256,6 +275,52 @@ class ApiQueryBlocks extends ApiQueryBase {
                return $name;
        }
 
+       /**
+        * Retrieves the restrictions based on the query result.
+        *
+        * @param IResultWrapper $result
+        * @param int $limit
+        *
+        * @return array
+        */
+       private static function getRestrictionData( IResultWrapper $result, $limit ) {
+               $partialIds = [];
+               $count = 0;
+               foreach ( $result as $row ) {
+                       if ( ++$count <= $limit && !$row->ipb_sitewide ) {
+                               $partialIds[] = (int)$row->ipb_id;
+                       }
+               }
+
+               $restrictions = BlockRestriction::loadByBlockId( $partialIds );
+
+               $data = [];
+               $keys = [
+                       'page' => 'pages',
+                       'ns' => 'namespaces',
+               ];
+               foreach ( $restrictions as $restriction ) {
+                       $key = $keys[$restriction->getType()];
+                       $id = $restriction->getBlockId();
+                       switch ( $restriction->getType() ) {
+                               case 'page':
+                                       $value = [ 'id' => $restriction->getValue() ];
+                                       self::addTitleInfo( $value, $restriction->getTitle() );
+                                       break;
+                               default:
+                                       $value = $restriction->getValue();
+                       }
+
+                       if ( !isset( $data[$id][$key] ) ) {
+                               $data[$id][$key] = [];
+                               ApiResult::setIndexedTagName( $data[$id][$key], $restriction->getType() );
+                       }
+                       $data[$id][$key][] = $value;
+               }
+
+               return $data;
+       }
+
        public function getAllowedParams() {
                $blockCIDRLimit = $this->getConfig()->get( 'BlockCIDRLimit' );
 
@@ -308,7 +373,8 @@ class ApiQueryBlocks extends ApiQueryBase {
                                        'expiry',
                                        'reason',
                                        'range',
-                                       'flags'
+                                       'flags',
+                                       'restrictions',
                                ],
                                ApiBase::PARAM_ISMULTI => true,
                                ApiBase::PARAM_HELP_MSG_PER_VALUE => [],
index 2d95cd3..3cb55e4 100644 (file)
@@ -388,6 +388,12 @@ class ApiQueryLogEvents extends ApiQueryBase {
 
        public function getAllowedParams( $flags = 0 ) {
                $config = $this->getConfig();
+               if ( $flags & ApiBase::GET_VALUES_FOR_HELP ) {
+                       $logActions = $this->getAllowedLogActions();
+                       sort( $logActions );
+               } else {
+                       $logActions = null;
+               }
                $ret = [
                        'prop' => [
                                ApiBase::PARAM_ISMULTI => true,
@@ -411,9 +417,7 @@ class ApiQueryLogEvents extends ApiQueryBase {
                        ],
                        'action' => [
                                // validation on request is done in execute()
-                               ApiBase::PARAM_TYPE => ( $flags & ApiBase::GET_VALUES_FOR_HELP )
-                                       ? $this->getAllowedLogActions()
-                                       : null
+                               ApiBase::PARAM_TYPE => $logActions
                        ],
                        'start' => [
                                ApiBase::PARAM_TYPE => 'timestamp'
index c9f528c..c00010a 100644 (file)
@@ -169,11 +169,7 @@ abstract class ApiQueryRevisionsBase extends ApiQueryGeneratorBase {
                                        $this->limit = 1;
                                }
                        }
-                       if ( isset( $params['section'] ) ) {
-                               $this->section = $params['section'];
-                       } else {
-                               $this->section = false;
-                       }
+                       $this->section = $params['section'] ?? false;
                }
 
                $userMax = $this->parseContent ? 1 : ( $smallLimit ? ApiBase::LIMIT_SML1 : ApiBase::LIMIT_BIG1 );
index fa151c9..44e2703 100644 (file)
@@ -70,6 +70,7 @@ class ApiQueryUserInfo extends ApiQueryBase {
                $vals['blockreason'] = $block->mReason;
                $vals['blockedtimestamp'] = wfTimestamp( TS_ISO_8601, $block->mTimestamp );
                $vals['blockexpiry'] = ApiResult::formatExpiry( $block->getExpiry(), 'infinite' );
+               $vals['blockpartial'] = !$block->isSitewide();
                if ( $block->getSystemBlockType() !== null ) {
                        $vals['systemblocktype'] = $block->getSystemBlockType();
                }
index d2ff790..db57f7e 100644 (file)
@@ -55,6 +55,11 @@ class ApiRollback extends ApiBase {
                        }
                }
 
+               // @TODO: remove this hack once rollback uses POST (T88044)
+               $trxLimits = $this->getConfig()->get( 'TrxProfilerLimits' );
+               $trxProfiler = Profiler::instance()->getTransactionProfiler();
+               $trxProfiler->setExpectations( $trxLimits['POST'], __METHOD__ );
+
                $retval = $pageObj->doRollback(
                        $this->getRbUser( $params ),
                        $summary,
@@ -69,10 +74,7 @@ class ApiRollback extends ApiBase {
                        $this->dieStatus( $this->errorArrayToStatus( $retval, $user ) );
                }
 
-               $watch = 'preferences';
-               if ( isset( $params['watchlist'] ) ) {
-                       $watch = $params['watchlist'];
-               }
+               $watch = $params['watchlist'] ?? 'preferences';
 
                // Watch pages
                $this->setWatch( $watch, $titleObj, 'watchrollback' );
index 7559a53..c75238c 100644 (file)
@@ -45,6 +45,8 @@
        "apihelp-block-param-reblock": "إذا كان المستخدم محظوراً بالفعل، يستبدل الحظر القائم.",
        "apihelp-block-param-watchuser": "مشاهدة صفحة المستخدم ونقاش IP.",
        "apihelp-block-param-tags": "تغيير الوسوم للتطبيق على الإدخال في سجل الحظر.",
+       "apihelp-block-param-partial": "منع المستخدم من صفحات أو نطاقات محددة بدلا من الموقع بأكمله.",
+       "apihelp-block-param-pagerestrictions": "قائمة العناوين لمنع المستخدم من التحرير، ينطبق فقط عندما يتم تعيين \"partial\" على صحيح.",
        "apihelp-block-example-ip-simple": "منع عنوان IP <kbd>192.0.2.5</kbd> لمدة ثلاثة أيام بسبب >المخالفة الأولى</kbd>.",
        "apihelp-block-example-user-complex": "منع المستخدم <kbd>المخرب</kbd> لأجل غير مسمى بسبب <kbd>التخريب</kbd>، ومنع إنشاء حساب جديد وإرسال بريد إلكتروني.",
        "apihelp-changeauthenticationdata-summary": "تغيير بيانات المصادقة للمستخدم الحالي.",
        "apihelp-query+blocks-paramvalue-prop-reason": "يضيف السبب المعطى للمنع.",
        "apihelp-query+blocks-paramvalue-prop-range": "يضيف نطاق عناوين الآيبي المتأثرة بالمنع.",
        "apihelp-query+blocks-paramvalue-prop-flags": "يوسم المنع بـ(المنع التلقائي والمجهولون فقط وما إلى ذلك).",
+       "apihelp-query+blocks-paramvalue-prop-restrictions": "يضيف قيود المنع الجزئي إذا لم يكن المنع على مستوى الموقع.",
        "apihelp-query+blocks-param-show": "إظهار العناصر التي تستوفي هذه المعايير فقط،\nعلى سبيل المثال، لمشاهدة عمليات المنع غير المحددة فقط على عناوين آيبي; اضبط <kbd>$1show=ip|!temp</kbd>.",
        "apihelp-query+blocks-example-simple": "قائمة المنع.",
        "apihelp-query+blocks-example-users": "إدراج عمليات منع المستخدمين <kbd>Alice</kbd> و<kbd>Bob</kbd>.",
        "apihelp-query+info-paramvalue-prop-notificationtimestamp": "الطابع الزمني لإشعار قائمة المراقبة لكل صفحة.",
        "apihelp-query+info-paramvalue-prop-subjectid": "معرف الصفحة للصفحة الرئيسية لكل صفحة نقاش.",
        "apihelp-query+info-paramvalue-prop-url": "يعطي مسارا كاملا، ومسارا للتعديل، ومسار الأساسي لكل صفحة.",
-       "apihelp-query+info-paramvalue-prop-readable": "ما إذا كان يمكن للمستخدم قراءة هذه الصفحة.",
+       "apihelp-query+info-paramvalue-prop-readable": "ما إذا كان يمكن للمستخدم قراءة هذه الصفحة، استخدم <kbd>intestactions=read</kbd> بدلا من ذلك.",
        "apihelp-query+info-paramvalue-prop-preload": "يعطي النص الذي تم إرجاعه بواسطة EditFormPreloadText.",
        "apihelp-query+info-paramvalue-prop-displaytitle": "يعطي الطريقة التي يتم بها عرض عنوان الصفحة بالفعل.",
        "apihelp-query+info-paramvalue-prop-varianttitles": "يعطي عنوان العرض بجميع الصيغ الخاصة بلغة محتوى الموقع.",
        "apihelp-query+info-param-testactions": "اختبر ما إذا كان المستخدم الحالي يمكنه تنفيذ إجراءات معينة على الصفحة.",
+       "apihelp-query+info-param-testactionsdetail": "مستوى التفاصيل لـ<var>$1testactions</var>، استخدم وسائط [[Special:ApiHelp/main|الوحدة الرئيسية]] <var>errorformat</var> و<var>errorlang</var> للتحكم في تنسيق الرسائل التي تم إرجاعها.",
+       "apihelp-query+info-paramvalue-testactionsdetail-boolean": "إرجاع قيمة منطقية لكل إجراء.",
+       "apihelp-query+info-paramvalue-testactionsdetail-full": "إرجاع الرسائل التي تصف سبب عدم السماح بالإجراء ، أو مصفوفة فارغة إذا كان مسموحا بها.",
+       "apihelp-query+info-paramvalue-testactionsdetail-quick": "مثل <kbd>full</kbd> ولكن تخطي المراجعات باهظة الثمن.",
        "apihelp-query+info-param-token": "استخدم [[Special:ApiHelp/query+tokens|action=query&meta=tokens]] بدلا من ذلك.",
        "apihelp-query+info-example-simple": "الحصول على معلومات حول الصفحة <kbd>Main Page</kbd>.",
        "apihelp-query+info-example-protection": "احصل على معلومات عامة وحماية حول الصفحة <kbd>Main Page</kbd>.",
        "apierror-bad-watchlist-token": "رمز قائمة مراقبة غير صحيح مقدم; يُرجَى تعيين رمز مميز في [[Special:Preferences]].",
        "apierror-blockedfrommail": "لقد تم منعك من إرسال البريد الإلكتروني.",
        "apierror-blocked": "لقد تم منعك من التحرير.",
+       "apierror-blocked-partial": "لقد تم منعك من تحرير هذه الصفحة.",
        "apierror-botsnotsupported": "هذه الواجهة غير مدعومة للبوتات.",
        "apierror-cannot-async-upload-file": "لا يمكن الجمع بين الوسيطين <var>async</var> و<var>file</var>، إذا كنت تريد معالجة غير متزامنة لملفك المرفوع، فارفعه أولاً إلى المخبأ (باستخدام الوسيط <var>stash</var>) ثم انشر الملف المتقطع بشكل غير متزامن (باستخدام <var>filekey</var> و<var>async</var>).",
        "apierror-cannotreauthenticate": "هذا الإجراء غير متاح لأن هويتك لا يمكن التحقق منها.",
index 913e129..e6f6baf 100644 (file)
@@ -52,6 +52,8 @@
        "apihelp-block-param-reblock": "Falls der Benutzer bereits gesperrt ist, die vorhandene Sperre überschreiben.",
        "apihelp-block-param-watchuser": "Benutzer- und Diskussionsseiten des Benutzers oder der IP-Adresse beobachten.",
        "apihelp-block-param-tags": "Auf den Eintrag im Sperr-Logbuch anzuwendende Änderungsmarkierungen.",
+       "apihelp-block-param-partial": "Sperrt den Benutzer für spezielle Seiten oder Namensräume und nicht für die gesamte Website.",
+       "apihelp-block-param-pagerestrictions": "Liste der Titel, die für den Benutzer gesperrt werden sollen. Nur zutreffend, wenn „partial“ auf true gesetzt ist.",
        "apihelp-block-example-ip-simple": "IP <kbd>192.0.2.5</kbd> für drei Tage mit der Begründung „First strike“ (erste Verwarnung) sperren",
        "apihelp-block-example-user-complex": "Benutzer <kbd>Vandal</kbd> unbeschränkt sperren mit der Begründung „Vandalism“ (Vandalismus), Erstellung neuer Benutzerkonten sowie Versand von E-Mails verhindern.",
        "apihelp-changeauthenticationdata-summary": "Ändert die Authentifizierungsdaten für den aktuellen Benutzer.",
        "apihelp-query+blocks-paramvalue-prop-reason": "Fügt den angegebenen Grund für die Sperrung hinzu.",
        "apihelp-query+blocks-paramvalue-prop-range": "Fügt den von der Sperrung betroffenen Bereich von IP-Adressen hinzu.",
        "apihelp-query+blocks-paramvalue-prop-flags": "Markiert die Sperre mit (autoblock, anononly, etc.).",
+       "apihelp-query+blocks-paramvalue-prop-restrictions": "Ergänzt die Beschränkungen der teilweisen Sperre, falls diese nicht für die gesamte Website ist.",
        "apihelp-query+blocks-param-show": "Zeige nur Elemente, die diese Kriterien erfüllen. Um zum Beispiel unbestimmte Sperren von IP-Adressen zu sehen, setzte <kbd>$1show=ip|!temp</kbd>.",
        "apihelp-query+blocks-example-simple": "Sperren auflisten",
        "apihelp-query+blocks-example-users": "Listet Sperren der Benutzer <kbd>Alice</kbd> und <kbd>Bob</kbd> auf.",
        "apihelp-query+info-paramvalue-prop-watchers": "Die Anzahl der Beobachter, falls erlaubt.",
        "apihelp-query+info-paramvalue-prop-notificationtimestamp": "Der Beobachtungslisten-Benachrichtigungs-Zeitstempel jeder Seite.",
        "apihelp-query+info-paramvalue-prop-subjectid": "Die Seitenkennung der Elternseite jeder Diskussionsseite.",
-       "apihelp-query+info-paramvalue-prop-readable": "Ob der Benutzer diese Seite betrachten darf.",
+       "apihelp-query+info-paramvalue-prop-readable": "Ob der Benutzer diese Seite lesen kann. Stattdessen <kbd>intestactions=read</kbd> verwenden.",
        "apihelp-query+info-paramvalue-prop-preload": "Gibt den Text aus, der von EditFormPreloadText zurückgegeben wurde.",
        "apihelp-query+info-paramvalue-prop-displaytitle": "Gibt die Art und Weise an, in der der Seitentitel tatsächlich angezeigt wird.",
        "apihelp-query+info-paramvalue-prop-varianttitles": "Gibt den Anzeigetitel in allen Varianten der Sprache des Websiteinhalts aus.",
        "apihelp-query+info-param-testactions": "Überprüft, ob der aktuelle Benutzer gewisse Aktionen auf der Seite ausführen kann.",
+       "apihelp-query+info-paramvalue-testactionsdetail-boolean": "Gibt einen booleschen Wert für jede Aktion zurück.",
+       "apihelp-query+info-paramvalue-testactionsdetail-quick": "Wie <kbd>full</kbd>, aber mit Überspringen von Aufwandsüberprüfungen.",
        "apihelp-query+info-example-simple": "Ruft Informationen über die Seite <kbd>Hauptseite</kbd> ab.",
        "apihelp-query+iwbacklinks-summary": "Findet alle Seiten, die auf einen angegebenen Interwikilink verlinken.",
        "apihelp-query+iwbacklinks-param-prefix": "Präfix für das Interwiki.",
        "apihelp-query+redirects-paramvalue-prop-title": "Titel einer jeden Weiterleitung.",
        "apihelp-query+redirects-param-namespace": "Schließt nur Seiten in diesen Namensräumen ein.",
        "apihelp-query+redirects-param-limit": "Wie viele Weiterleitungen zurückgegeben werden sollen.",
+       "apihelp-query+revisions-summary": "Ruft Informationen zur Version ab.",
+       "apihelp-query+revisions-param-excludeuser": "Schließt Versionen nach Benutzer aus.",
        "apihelp-query+revisions-param-tag": "Listet nur Versionen auf, die mit dieser Markierung markiert sind.",
        "apihelp-query+revisions+base-param-prop": "Zurückzugebende Eigenschaften jeder Version:",
        "apihelp-query+revisions+base-paramvalue-prop-ids": "Die Kennung der Version.",
        "apierror-badmodule-nosubmodules": "Das Modul <kbd>$1</kbd> hat keine Untermodule.",
        "apierror-badparameter": "Ungültiger Wert für den Parameter <var>$1</var>.",
        "apierror-badquery": "Ungültige Abfrage.",
+       "apierror-blocked-partial": "Du wurdest für das Bearbeiten dieser Seite gesperrt.",
        "apierror-cannot-async-upload-file": "Die Parameter <var>async</var> und <var>file</var> können nicht kombiniert werden. Falls du eine asynchrone Verarbeitung deiner hochgeladenen Datei wünschst, lade sie zuerst mithilfe des Parameters <var>stash</var> auf den Speicher hoch. Veröffentliche anschließend die gespeicherte Datei asynchron mithilfe <var>filekey</var> und <var>async</var>.",
        "apierror-compare-maintextrequired": "Der Parameter <var>$1text-main</var> ist erforderlich, wenn <var>$1slots</var> <kbd>main</kbd> enthält (kann nicht den Hauptschlitz löschen).",
        "apierror-compare-nofromrevision": "Keine Version „from“. <var>fromrev</var>, <var>fromtitle</var> oder <var>fromid</var> angeben.",
index 25bf3f7..588dbef 100644 (file)
@@ -40,6 +40,8 @@
        "apihelp-block-param-reblock": "If the user is already blocked, overwrite the existing block.",
        "apihelp-block-param-watchuser": "Watch the user's or IP address's user and talk pages.",
        "apihelp-block-param-tags": "Change tags to apply to the entry in the block log.",
+       "apihelp-block-param-partial": "Block user from specific pages or namespaces rather than the entire site.",
+       "apihelp-block-param-pagerestrictions": "List of titles to block the user from editing. Only applies when 'partial' is set to true.",
        "apihelp-block-example-ip-simple": "Block IP address <kbd>192.0.2.5</kbd> for three days with reason <kbd>First strike</kbd>.",
        "apihelp-block-example-user-complex": "Block user <kbd>Vandal</kbd> indefinitely with reason <kbd>Vandalism</kbd>, and prevent new account creation and email sending.",
 
        "apihelp-query+blocks-paramvalue-prop-reason": "Adds the reason given for the block.",
        "apihelp-query+blocks-paramvalue-prop-range": "Adds the range of IP addresses affected by the block.",
        "apihelp-query+blocks-paramvalue-prop-flags": "Tags the ban with (autoblock, anononly, etc.).",
+       "apihelp-query+blocks-paramvalue-prop-restrictions": "Adds the partial block restrictions if the block is not sitewide.",
        "apihelp-query+blocks-param-show": "Show only items that meet these criteria.\nFor example, to see only indefinite blocks on IP addresses, set <kbd>$1show=ip|!temp</kbd>.",
        "apihelp-query+blocks-example-simple": "List blocks.",
        "apihelp-query+blocks-example-users": "List blocks of users <kbd>Alice</kbd> and <kbd>Bob</kbd>.",
        "apierror-bad-watchlist-token": "Incorrect watchlist token provided. Please set a correct token in [[Special:Preferences]].",
        "apierror-blockedfrommail": "You have been blocked from sending email.",
        "apierror-blocked": "You have been blocked from editing.",
+       "apierror-blocked-partial": "You have been blocked from editing this page.",
        "apierror-botsnotsupported": "This interface is not supported for bots.",
        "apierror-cannot-async-upload-file": "The parameters <var>async</var> and <var>file</var> cannot be combined. If you want asynchronous processing of your uploaded file, first upload it to stash (using the <var>stash</var> parameter) and then publish the stashed file asynchronously (using <var>filekey</var> and <var>async</var>).",
        "apierror-cannotreauthenticate": "This action is not available as your identity cannot be verified.",
index 33c05e0..1af75a0 100644 (file)
@@ -65,6 +65,8 @@
        "apihelp-block-param-reblock": "Si l’utilisateur est déjà bloqué, écraser le blocage existant.",
        "apihelp-block-param-watchuser": "Surveiller les pages utilisateur et de discussion de l’utilisateur ou de l’adresse IP.",
        "apihelp-block-param-tags": "Modifier les balises à appliquer à l’entrée du journal des blocages.",
+       "apihelp-block-param-partial": "Bloquer un utilisateur pour des pages ou des espaces de nom spécifiques plutôt que pour tout un site.",
+       "apihelp-block-param-pagerestrictions": "Liste des titres pour lesquels bloquer l’utilisateur en modification. Ne s’applique que quand 'partiel' est mis à vrai.",
        "apihelp-block-example-ip-simple": "Bloquer l’adresse IP <kbd>192.0.2.5</kbd> pour trois jours avec le motif <kbd>Premier avertissement</kbd>.",
        "apihelp-block-example-user-complex": "Bloquer indéfiniment l’utilisateur <kbd>Vandal</kbd> avec le motif <kbd>Vandalism</kbd>, et empêcher la création de nouveau compte et l'envoi de courriel.",
        "apihelp-changeauthenticationdata-summary": "Modifier les données d’authentification pour l’utilisateur actuel.",
        "apihelp-query+blocks-paramvalue-prop-reason": "Ajoute le motif du blocage.",
        "apihelp-query+blocks-paramvalue-prop-range": "Ajoute la plage d’adresses IP affectée par le blocage.",
        "apihelp-query+blocks-paramvalue-prop-flags": "Marque le bannissement avec (autoblock, anononly, etc.).",
+       "apihelp-query+blocks-paramvalue-prop-restrictions": "Ajoute les restrictions de blocage partiel si le blocage n’est pas pour tout le site.",
        "apihelp-query+blocks-param-show": "Afficher uniquement les éléments correspondant à ces critères.\nPar exemple, pour voir uniquement les blocages infinis sur les adresses IP, mettre <kbd>$1show=ip|!temp</kbd>.",
        "apihelp-query+blocks-example-simple": "Lister les blocages",
        "apihelp-query+blocks-example-users": "Lister les blocages des utilisateurs <kbd>Alice</kbd> et <kbd>Bob</kbd>.",
        "apihelp-query+info-paramvalue-prop-notificationtimestamp": "L’horodatage de notification de la liste de suivi de chaque page.",
        "apihelp-query+info-paramvalue-prop-subjectid": "L’ID de page de la page parent de chaque page de discussion.",
        "apihelp-query+info-paramvalue-prop-url": "Fournit une URL complète, une URL de modification, et l’URL canonique de chaque page.",
-       "apihelp-query+info-paramvalue-prop-readable": "Si l’utilisateur peut lire cette page.",
+       "apihelp-query+info-paramvalue-prop-readable": "Si l’utilisateur peut lire cette page. Utiliser plutôt <kbd>intestactions=read</kbd>.",
        "apihelp-query+info-paramvalue-prop-preload": "Fournit le texte renvoyé par EditFormPreloadText.",
        "apihelp-query+info-paramvalue-prop-displaytitle": "Fournit la manière dont le titre de la page est réellement affiché.",
        "apihelp-query+info-paramvalue-prop-varianttitles": "Donne le titre affiché dans toutes les variantes de la langue de contenu du site.",
        "apihelp-query+info-param-testactions": "Tester si l’utilisateur actuel peut effectuer certaines actions sur la page.",
+       "apihelp-query+info-param-testactionsdetail": "Niveau de détail pour <var>$1testactions</var>. Utiliser les paramètres <var>errorformat</var> et <var>errorlang</var> du [[Special:ApiHelp/main|module principal]] pour contrôler la mise en forme des messages renvoyés.",
+       "apihelp-query+info-paramvalue-testactionsdetail-boolean": "Renvoyer une valeur booléenne pour chaque action.",
+       "apihelp-query+info-paramvalue-testactionsdetail-full": "Renvoyer des messages décrivant pourquoi l’action est interdite, ou un tableau vide si elle est autorisée.",
+       "apihelp-query+info-paramvalue-testactionsdetail-quick": "Comme <kbd>full</kbd> mais en sautant les contrôles coûteux.",
        "apihelp-query+info-param-token": "Utiliser plutôt [[Special:ApiHelp/query+tokens|action=query&meta=tokens]].",
        "apihelp-query+info-example-simple": "Obtenir des informations sur la page <kbd>Main Page</kbd>.",
        "apihelp-query+info-example-protection": "Obtenir des informations générales et de protection sur la page <kbd>Main Page</kbd>.",
        "apierror-bad-watchlist-token": "Jeton de liste de suivi fourni non valide. Veuillez mettre un jeton valide dans [[Special:Preferences]].",
        "apierror-blockedfrommail": "Vous avez été bloqué pour l’envoi de courriel.",
        "apierror-blocked": "Vous avez été bloqué pour modifier.",
+       "apierror-blocked-partial": "Vous avez été bloqué pour la modification de cette page.",
        "apierror-botsnotsupported": "Cette interface n’est pas prise en charge pour les robots.",
        "apierror-cannot-async-upload-file": "Les paramètres <var>async</var> et <var>file</var> ne peuvent pas être combinés. Si vous voulez un traitement asynchrone de votre fichier téléversé, importez-le d’abord dans la réserve (en utilisant le paramètre <var>stash</var>) puis publiez le fichier importé de façon asynchrone (en utilisant <var>filekey</var> et <var>async</var>).",
        "apierror-cannotreauthenticate": "Cette action n’est pas disponible car votre identité ne peut pas être vérifiée.",
index e71f0f3..a810d21 100644 (file)
        "apihelp-query+info-summary": "Ottieni informazioni base sulla pagina.",
        "apihelp-query+info-param-prop": "Quali proprietà aggiuntive ottenere:",
        "apihelp-query+info-paramvalue-prop-visitingwatchers": "Il numero di osservatori di ogni pagina che hanno visitato le ultime modifiche alla pagina, se consentito.",
+       "apihelp-query+info-paramvalue-testactionsdetail-boolean": "Restituisce un valore booleano per ogni azione.",
        "apihelp-query+iwbacklinks-param-prefix": "Prefisso per l'interwiki.",
        "apihelp-query+iwbacklinks-param-limit": "Quante pagine totali restituire.",
        "apihelp-query+iwbacklinks-param-prop": "Quali proprietà ottenere:",
index a31655d..b9f8868 100644 (file)
@@ -50,6 +50,8 @@
        "apihelp-block-param-reblock": "사용자가 이미 차단된 경우, 기존 차단 설정을 바꿉니다.",
        "apihelp-block-param-watchuser": "해당 사용자 또는 IP 주소의 사용자 문서 및 토론 문서를 주시합니다.",
        "apihelp-block-param-tags": "차단 기록의 항목에 적용할 태그를 변경합니다.",
+       "apihelp-block-param-partial": "사이트 전체가 아닌 특정 문서나 이름공간에서 사용자를 차단합니다.",
+       "apihelp-block-param-pagerestrictions": "사용자의 편집을 차단할 제목 목록입니다. '부분'이 true로 설정되어 있을 때에만 적용됩니다.",
        "apihelp-block-example-ip-simple": "IP <kbd>192.0.2.5</kbd>에 대해 <kbd>First strike</kbd>라는 이유로 3일 간 차단하기",
        "apihelp-block-example-user-complex": "사용자 <kbd>Vandal</kbd>을 <kbd>Vandalism</kbd>이라는 이유로 무기한 차단하며 계정 생성 및 이메일 발송을 막기",
        "apihelp-changeauthenticationdata-summary": "현재 사용자의 인증 데이터를 변경합니다.",
        "apihelp-query+info-summary": "기본 페이지 정보를 가져옵니다.",
        "apihelp-query+info-param-prop": "얻고자 하는 추가 속성:",
        "apihelp-query+info-paramvalue-prop-protection": "각 문서의 보호 수준을 나열합니다.",
-       "apihelp-query+info-paramvalue-prop-readable": "사용자가 이 문서를 읽을 수 있는지의 여부.",
+       "apihelp-query+info-paramvalue-prop-readable": "사용자가 이 문서를 읽을 수 있는지의 여부입니다. <kbd>intestactions=read</kbd>를 대신 사용하십시오.",
        "apihelp-query+info-paramvalue-prop-varianttitles": "모든 종류의 사이트 내용 언어의 표시 제목을 지정합니다.",
+       "apihelp-query+info-paramvalue-testactionsdetail-boolean": "각 동작의 불리언 값을 반환합니다.",
+       "apihelp-query+info-paramvalue-testactionsdetail-full": "동작이 허용되지 않는 이유를 설명하는 메시지를 반환하거나, 허용되는 경우에는 비어있는 배열을 반환합니다.",
+       "apihelp-query+info-paramvalue-testactionsdetail-quick": "<kbd>full</kbd>와 비슷하지만 비용이 많이 드는 검사는 건너뜁니다.",
        "apihelp-query+iwbacklinks-summary": "제시된 인터위키 링크에 연결된 모든 문서를 찾습니다.",
        "apihelp-query+iwbacklinks-param-prefix": "인터위키의 접두사.",
        "apihelp-query+iwbacklinks-param-title": "검색할 인터위키 링크. <var>$1blprefix</var>와 함께 사용해야 합니다.",
        "apierror-badtoken": "잘못된 CSRF 토큰.",
        "apierror-blockedfrommail": "이메일 보내기에서 차단되어 있습니다.",
        "apierror-blocked": "편집에서 차단되어 있습니다.",
+       "apierror-blocked-partial": "이 문서의 편집에서 차단되어 있습니다.",
        "apierror-botsnotsupported": "이 인터페이스는 봇을 위해 지원되지 않습니다.",
        "apierror-cannotviewtitle": "$1을(를) 볼 권한이 없습니다.",
        "apierror-cantblock": "사용자를 차단할 권한이 없습니다.",
index f68bd69..b959a6d 100644 (file)
        "apierror-articleexists": "Den Artikel deen dir probéiert hutt unzeleeë gouf schonn ugeluecht.",
        "apierror-autoblocked": "Är IP-Adress gouf automatesch gespaart well se vun engem gespaarte Benotzer benotzt gouf.",
        "apierror-badip": "IP-Parameter ass net valabel.",
+       "apierror-blocked-partial": "Dir gouft gespaart fir dës säit z'änneren.",
        "apierror-cantblock": "Dir hutt net d'Recht fir Benotzer ze spären.",
        "apierror-cantimport": "Dir hutt net déi néideg Rechter fir Säiten z'importéieren.",
        "apierror-copyuploadbadurl": "D'Eroplueden ass vun dëser URL net erlaabt.",
index db3e013..df7ab40 100644 (file)
@@ -48,6 +48,8 @@
        "apihelp-block-param-reblock": "Se o usuário já estiver bloqueado, sobrescrever o bloqueio existente.",
        "apihelp-block-param-watchuser": "Vigiar as páginas de usuário e de discussão, do usuário ou do endereço IP.",
        "apihelp-block-param-tags": "Alterar as tags para se inscrever na entrada no registro de bloqueio.",
+       "apihelp-block-param-partial": "Bloquear o usuário de acessar a páginas ou espaços nominais específicos, em vez de a todo o site.",
+       "apihelp-block-param-pagerestrictions": "Lista de títulos que o bloqueio impedirá o usuário de editar. Só se aplica quando 'partial' (parcial) estiver definido como 'true' (verdadeiro).",
        "apihelp-block-example-ip-simple": "Bloquear endereço IP <kbd>192.0.2.5</kbd> por três dias com razão <kbd>First strike</kbd>.",
        "apihelp-block-example-user-complex": "Bloquear usuário <kbd>Vandal</kbd> indefinidamente com razão <kbd>Vandalism</kbd> e o impedir de criar nova conta e de enviar e-mails.",
        "apihelp-changeauthenticationdata-summary": "Alterar os dados de autenticação para o usuário atual.",
        "apihelp-query+blocks-paramvalue-prop-reason": "Adiciona a razão dada para o bloqueio.",
        "apihelp-query+blocks-paramvalue-prop-range": "Adiciona o intervalo de endereços IP afetados pelo bloqueio.",
        "apihelp-query+blocks-paramvalue-prop-flags": "Etiqueta a proibição com (autobloqueio, anononly, etc.).",
+       "apihelp-query+blocks-paramvalue-prop-restrictions": "Adiciona as restrições parciais do bloqueio se este não for para todo o site.",
        "apihelp-query+blocks-param-show": "Mostre apenas itens que atendam a esses critérios. Por exemplo, para ver apenas blocos indefinidos nos endereços IP, defina <kbd>$1show=ip|!temp</kbd>.",
        "apihelp-query+blocks-example-simple": "Listar bloqueios.",
        "apihelp-query+blocks-example-users": "Liste os bloqueios dos usuários <kbd>Alice</kbd> e <kbd>Bob</kbd>.",
        "apihelp-query+info-paramvalue-prop-notificationtimestamp": "O timestamp da notificação da lista de páginas vigiadas de cada página.",
        "apihelp-query+info-paramvalue-prop-subjectid": "O ID da página principal para cada página de discussão.",
        "apihelp-query+info-paramvalue-prop-url": "Retorna um URL completo, de edição e o canônico para cada página.",
-       "apihelp-query+info-paramvalue-prop-readable": "Se o usuário pode ler esta página.",
+       "apihelp-query+info-paramvalue-prop-readable": "Se o usuário pode ler esta página. Use <kbd>intestactions=read</kbd> em seu lugar.",
        "apihelp-query+info-paramvalue-prop-preload": "Fornece o texto retornado por EditFormPreloadText.",
        "apihelp-query+info-paramvalue-prop-displaytitle": "Fornece o modo como o título da página é exibido.",
        "apihelp-query+info-paramvalue-prop-varianttitles": "Fornece o título de apresentação em todas as variantes da língua de conteúdo da wiki.",
        "apihelp-query+info-param-testactions": "Testa se o usuário atual pode executar determinadas ações na página.",
+       "apihelp-query+info-param-testactionsdetail": "Nível de detalhe de <var>$1testactions</var>. Use os parâmetros <var>errorformat</var> e <var>errorlang</var> do [[Special:ApiHelp/main|módulo principal]] para controlar o formato das mensagens devolvidas.",
+       "apihelp-query+info-paramvalue-testactionsdetail-boolean": "Retorna um valor booleano para cada ação.",
+       "apihelp-query+info-paramvalue-testactionsdetail-full": "Retornar mensagens descrevendo por que a ação não é permitida ou uma matriz vazia, se for permitida.",
+       "apihelp-query+info-paramvalue-testactionsdetail-quick": "Como <kbd>completo</kbd>, mas pulando verificação de caros.",
        "apihelp-query+info-param-token": "Use [[Special:ApiHelp/query+tokens|action=query&meta=tokens]] em vez.",
        "apihelp-query+info-example-simple": "Obter informações sobre a página <kbd>Main Page</kbd>.",
        "apihelp-query+info-example-protection": "Obter informações gerais e de proteção sobre a página <kbd>Main Page</kbd>.",
        "apierror-bad-watchlist-token": "Foi fornecido um token da lista de páginas vigiadas incorreto. Defina um token correto em [[Special:Preferences]].",
        "apierror-blockedfrommail": "Você foi bloqueado de enviar e-mail.",
        "apierror-blocked": "Você foi bloqueado de editar.",
+       "apierror-blocked-partial": "Você foi impedido de editar esta página.",
        "apierror-botsnotsupported": "Esta interface não é suportada por bots.",
        "apierror-cannot-async-upload-file": "Os parâmetros <var>async</var> e <var>file</var> não podem ser combinados. Se você deseja o processamento assíncrono do seu arquivo carregado, primeiro faça o upload para armazenar (usando o parâmetro <var>stash</var>) e depois publique o arquivo armazenado de forma assíncrona (usando <var>filekey</var> e <var>async</var>).",
        "apierror-cannotreauthenticate": "Esta ação não está disponível porque sua identidade não pode ser verificada.",
index 38cdaf2..c7fa15c 100644 (file)
@@ -43,6 +43,8 @@
        "apihelp-block-param-reblock": "Se o utilizador já está bloqueado, sobrescrever o bloco existente.",
        "apihelp-block-param-watchuser": "Vigiar as páginas de utilizador e de discussão, do utilizador ou do endereço IP.",
        "apihelp-block-param-tags": "Etiquetas de modificação a aplicar à entrada no registo de bloqueios.",
+       "apihelp-block-param-partial": "Bloquear o utilizador de aceder a páginas ou espaços nominais específicos, em vez de a todo o ''site''.",
+       "apihelp-block-param-pagerestrictions": "Lista de títulos que o bloqueio impedirá o utilizador de editar. Só se aplica quando 'partial' (parcial) estiver definido como 'true' (verdadeiro).",
        "apihelp-block-example-ip-simple": "Bloquear o endereço IP <kbd>192.0.2.5</kbd> por três dias com o motivo <kbd>First strike</kbd>.",
        "apihelp-block-example-user-complex": "Bloquear o utilizador <kbd>Vandal</kbd> indefinidamente com o motivo <kbd>Vandalism</kbd>, e impedir a criação de nova conta e o envio de correio eletrónico.",
        "apihelp-changeauthenticationdata-summary": "Alterar os dados de autenticação do utilizador atual.",
        "apihelp-query+blocks-paramvalue-prop-reason": "Adiciona o motivo apresentado para o bloqueio.",
        "apihelp-query+blocks-paramvalue-prop-range": "Adiciona o intervalo de endereços IP afetado pelo bloqueio.",
        "apihelp-query+blocks-paramvalue-prop-flags": "Etiqueta o bloqueio com (autoblock, anononly, etc.).",
+       "apihelp-query+blocks-paramvalue-prop-restrictions": "Adiciona as restrições parciais do bloqueio se este não for para todo o ''site''.",
        "apihelp-query+blocks-param-show": "Mostrar só os bloqueios que preenchem estes critérios.\nPor exemplo, para ver só bloqueios indefinidos de endereços IP, defina <kbd>$1show=ip|!temp</kbd>.",
        "apihelp-query+blocks-example-simple": "Listar bloqueios.",
        "apihelp-query+blocks-example-users": "Listar os bloqueios dos utilizadores <kbd>Alice</kbd> e <kbd>Bob</kbd>.",
        "apihelp-query+info-paramvalue-prop-notificationtimestamp": "A data e hora das notificações de alterações de cada página vigiada.",
        "apihelp-query+info-paramvalue-prop-subjectid": "O identificador da página progenitora de cada página de discussão.",
        "apihelp-query+info-paramvalue-prop-url": "Fornece um URL completo, um URL de edição e o URL canónico, para cada página.",
-       "apihelp-query+info-paramvalue-prop-readable": "Indica se o utilizador pode ler esta página.",
+       "apihelp-query+info-paramvalue-prop-readable": "Indica se o utilizador pode ler esta página. Em vez deste parâmetro, use <kbd>intestactions=read</kbd>.",
        "apihelp-query+info-paramvalue-prop-preload": "Fornece o texto devolvido por EditFormPreloadText.",
        "apihelp-query+info-paramvalue-prop-displaytitle": "Fornece a forma como o título da página é apresentado.",
        "apihelp-query+info-paramvalue-prop-varianttitles": "Fornece o título de apresentação em todas as variantes da língua de conteúdo da wiki.",
        "apihelp-query+info-param-testactions": "Testar se o utilizador pode realizar certas operações na página.",
+       "apihelp-query+info-param-testactionsdetail": "Nível de detalhe de <var>$1testactions</var>. Use os parâmetros <var>errorformat</var> e <var>errorlang</var> do [[Special:ApiHelp/main|módulo principal]] para controlar o formato das mensagens devolvidas.",
+       "apihelp-query+info-paramvalue-testactionsdetail-boolean": "Devolver um valor booliano para cada ação.",
+       "apihelp-query+info-paramvalue-testactionsdetail-full": "Devolver mensagens que descrevem porque a ação não é permitida, ou uma matriz vazia se ela for permitida.",
+       "apihelp-query+info-paramvalue-testactionsdetail-quick": "Como <kbd>full</kbd> mas saltando verificações exigentes.",
        "apihelp-query+info-param-token": "Em substituição, usar [[Special:ApiHelp/query+tokens|action=query&meta=tokens]].",
        "apihelp-query+info-example-simple": "Obter informações sobre a página <kbd>Main Page</kbd>.",
        "apihelp-query+info-example-protection": "Obter informação geral e de proteção sobre a página <kbd>Main Page</kbd>.",
        "api-help-authmanagerhelper-messageformat": "Formato a usar nas mensagens de saída.",
        "api-help-authmanagerhelper-mergerequestfields": "Combinar a informação de todos os pedidos de autenticação numa única matriz.",
        "api-help-authmanagerhelper-preservestate": "Preservar o estado de uma tentativa de autenticação anterior falhada, se possível.",
-       "api-help-authmanagerhelper-returnurl": "O URL de retorno para processos de autenticação por terceiros tem de ser absoluto. É obrigatório fornecer este URL ou <var>$1continue</var>.\n\nTipicamente, após receber uma resposta <samp>REDIRECT</samp>, abrirá um ''browser'' ou uma vista da Internet para o URL <samp>redirecttarget</samp> especificado, para dar lugar ao processo de autenticação por terceiros. Quando esse processo terminar, a terceira entidade encaminhará o ''browser'' ou a vista da Internet para este URL. Deve extrair do URL quaisquer parâmetros de consulta ou de POST, e passá-los como um pedido <var>$1continue</var> a este módulo da API.",
+       "api-help-authmanagerhelper-returnurl": "O URL de retorno para processos de autenticação por terceiros tem de ser absoluto. É obrigatório fornecer este URL ou <var>$1continue</var>.\n\nTipicamente, depois de receber uma resposta <samp>REDIRECT</samp>, abrirá um ''browser'' ou uma vista da Internet para o URL <samp>redirecttarget</samp> especificado, para dar lugar ao processo de autenticação por terceiros. Quando esse processo terminar, a terceira entidade encaminhará o ''browser'' ou a vista da Internet para este URL. Deve extrair do URL quaisquer parâmetros de consulta ou de POST, e passá-los como um pedido <var>$1continue</var> a este módulo da API.",
        "api-help-authmanagerhelper-continue": "Este pedido é uma continuação após uma resposta anterior com o valor <samp>UI</samp> ou <samp>REDIRECT</samp>. É obrigatório fornecer este parâmetro ou o parâmetro <var>$1returnurl</var>.",
        "api-help-authmanagerhelper-additional-params": "Este módulo aceita parâmetros adicionais, dependendo dos pedidos de autenticação disponíveis. Use <kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd> com <kbd>amirequestsfor=$1</kbd> (ou uma resposta anterior deste módulo, se aplicável) para determinar os pedidos disponíveis e os campos que estes utilizam.",
        "apierror-allimages-redirect": "Usar <kbd>gaifilterredir=nonredirects</kbd> em vez de <var>redirects</var> ao utilizar <kbd>allimages</kbd> como gerador.",
        "apierror-assertnameduserfailed": "A asserção de que o utilizador é \"$1\" falhou.",
        "apierror-assertuserfailed": "A asserção de que o utilizador está autenticado falhou.",
        "apierror-autoblocked": "O seu endereço IP foi bloqueado automaticamente, porque foi usado por um utilizador bloqueado.",
+       "apierror-bad-badfilecontexttitle": "Título inválido no parâmetro <var>$1badfilecontexttitle</var>.",
        "apierror-badconfig-resulttoosmall": "O valor de <code>$wgAPIMaxResultSize</code> nesta wiki é demasiado pequeno para conter informação básica de resultados.",
        "apierror-badcontinue": "Parâmetro de continuação inválido. Deve passar o valor original devolvido pela consulta anterior.",
        "apierror-baddiff": "Não foi possível obter a lista de diferenças. Uma das revisões, ou ambas, não existem, ou não tem permissão para vê-las.",
        "apierror-bad-watchlist-token": "A chave secreta da lista de páginas vigiadas que foi fornecida está incorreta. Configure uma chave correta em [[Special:Preferences]], por favor.",
        "apierror-blockedfrommail": "Foi-lhe bloqueada a capacidade de enviar correio eletrónico.",
        "apierror-blocked": "Foi-lhe bloqueada a capacidade de editar.",
+       "apierror-blocked-partial": "Foi-lhe bloqueada a capacidade de editar esta página.",
        "apierror-botsnotsupported": "Esta interface não é suportada para robôs.",
        "apierror-cannot-async-upload-file": "Os parâmetros <var>async</var> e <var>file</var> não podem ser combinados. Se pretende o processamento assíncrono do seu ficheiro carregado, carregue-o primeiro na área de ficheiros escondidos (usando o parâmetro <var>stash</var>) e depois publique de forma assíncrona este ficheiro escondido (usando <var>filekey</var> e <var>async</var>).",
        "apierror-cannotreauthenticate": "Esta operação não está disponível porque não é possível verificar a sua identidade.",
index d279330..4f68de0 100644 (file)
@@ -48,6 +48,8 @@
        "apihelp-block-param-reblock": "{{doc-apihelp-param|block|reblock}}",
        "apihelp-block-param-watchuser": "{{doc-apihelp-param|block|watchuser}}",
        "apihelp-block-param-tags": "{{doc-apihelp-param|block|tags}}",
+       "apihelp-block-param-partial": "{{doc-apihelp-param|block|partial}}",
+       "apihelp-block-param-pagerestrictions": "{{doc-apihelp-param|block|pagerestrictions}}",
        "apihelp-block-example-ip-simple": "{{doc-apihelp-example|block}}",
        "apihelp-block-example-user-complex": "{{doc-apihelp-example|block}}",
        "apihelp-changeauthenticationdata-summary": "{{doc-apihelp-summary|changeauthenticationdata}}",
        "apihelp-query+blocks-paramvalue-prop-reason": "{{doc-apihelp-paramvalue|query+blocks|prop|reason}}",
        "apihelp-query+blocks-paramvalue-prop-range": "{{doc-apihelp-paramvalue|query+blocks|prop|range}}",
        "apihelp-query+blocks-paramvalue-prop-flags": "{{doc-apihelp-paramvalue|query+blocks|prop|flags}}",
+       "apihelp-query+blocks-paramvalue-prop-restrictions": "{{doc-apihelp-paramvalue|query+blocks|prop|restrictions}}",
        "apihelp-query+blocks-param-show": "{{doc-apihelp-param|query+blocks|show}}",
        "apihelp-query+blocks-example-simple": "{{doc-apihelp-example|query+blocks}}",
        "apihelp-query+blocks-example-users": "{{doc-apihelp-example|query+blocks}}",
        "apierror-bad-watchlist-token": "{{doc-apierror}}",
        "apierror-blockedfrommail": "{{doc-apierror}}",
        "apierror-blocked": "{{doc-apierror}}",
+       "apierror-blocked-partial": "{{doc-apierror}}",
        "apierror-botsnotsupported": "{{doc-apierror}}",
        "apierror-cannot-async-upload-file": "{{doc-apierror}}",
        "apierror-cannotreauthenticate": "{{doc-apierror}}",
index 1515426..cdb56ea 100644 (file)
@@ -1,12 +1,27 @@
 {
        "@metadata": {
                "authors": [
-                       "Milicevic01"
+                       "Milicevic01",
+                       "Zoranzoki21"
                ]
        },
        "apihelp-block-summary": "Blokiraj korisnika.",
        "apihelp-block-param-reason": "Razlog za blokiranje.",
+       "apihelp-createaccount-param-name": "Korisničko ime.",
        "apihelp-delete-summary": "Obriši stranicu.",
+       "apihelp-edit-param-text": "Stranica sa sadržajem.",
        "apihelp-edit-param-minor": "Manja izmena.",
-       "apihelp-feedrecentchanges-param-hidepatrolled": "Sakrij patrolirane izmene."
+       "apihelp-edit-example-edit": "Uređivanje stranice.",
+       "apihelp-emailuser-summary": "Slanje imejla korisniku.",
+       "apihelp-emailuser-param-target": "Korisnik je poslao imejl.",
+       "apihelp-feedcontributions-param-year": "Od godine (i ranije).",
+       "apihelp-feedrecentchanges-param-hidepatrolled": "Sakrij patrolirane izmene.",
+       "apihelp-filerevert-summary": "Vratiti datoteku u raniju verziju.",
+       "apihelp-help-example-recursive": "Sva pomoć u jednoj stranici.",
+       "apihelp-login-param-name": "Korisničko ime.",
+       "apihelp-login-param-password": "Lozinka.",
+       "apihelp-login-example-login": "Prijava.",
+       "apihelp-move-summary": "Premeštanje stranice.",
+       "apihelp-query+allrevisions-param-namespace": "Samo spisak stranica u ovom imenskom prostoru.",
+       "apihelp-stashedit-param-text": "Stranica sa sadržajem."
 }
index 1cb6f5c..811ccc7 100644 (file)
        "apihelp-query+imageusage-example-simple": "Visa sidor med hjälp av [[:File:Albert Einstein Head.jpg]].",
        "apihelp-query+imageusage-example-generator": "Hämta information om sidor med hjälp av [[:File:Albert Einstein Head.jpg]].",
        "apihelp-query+info-summary": "Få grundläggande sidinformation.",
+       "apihelp-query+info-paramvalue-prop-readable": "Om användaren kan läsa denna sida. Använd <kbd>intestactions=read</kbd> istället.",
        "apihelp-query+info-paramvalue-prop-varianttitles": "Ger visningstiteln i alla variationer på webbplatsens innehållsspråk.",
+       "apihelp-query+info-paramvalue-testactionsdetail-boolean": "Returnera ett booleskt värde för varje åtgärd.",
        "apihelp-query+iwbacklinks-param-limit": "Hur många sidor att returnera totalt.",
        "apihelp-query+iwbacklinks-param-dir": "Riktningen att lista mot.",
        "apihelp-query+iwlinks-param-dir": "Riktningen att lista mot.",
index eb5e4fb..e98a0ba 100644 (file)
@@ -13,7 +13,8 @@
                        "Максим Підліснюк",
                        "AS",
                        "Umherirrender",
-                       "Choomaq"
+                       "Choomaq",
+                       "Zoranzoki21"
                ]
        },
        "apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|Документація]]\n* [[mw:Special:MyLanguage/API:FAQ|ЧаПи]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Список розсилки]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Оголошення API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Баґи і запити]\n</div>\n<strong>Статус:</strong> Усі функції, вказані на цій сторінці, мають працювати, але API далі перебуває в активній розробці і може змінитися у будь-який момент. Підпишіться на [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ список розсилки mediawiki-api-announce], щоб помічати оновлення.\n\n<strong>Хибні запити:</strong> Коли до API надсилаються хибні запити, буде відіслано HTTP-шапку з ключем «MediaWiki-API-Error», а тоді і значення шапки, і код помилки, надіслані назад, будуть встановлені з тим же значенням. Більше інформації див. на сторінці [[mw:Special:MyLanguage/API:Errors_and_warnings|API: Помилки й попередження]].\n\n<p class=\"mw-apisandbox-link\"><strong>Тестування:</strong> Для зручності тестування запитів API, див. [[Special:ApiSandbox]].</p>",
        "apihelp-opensearch-param-limit": "Максимальна кількість результатів для виведення.",
        "apihelp-opensearch-param-namespace": "Простори назв, у яких шукати. Ігнорується, якщо <var>$1search</var> починається з валідного префікса простору назв.",
        "apihelp-opensearch-param-suggest": "Нічого не робити, якщо <var>[[mw:Special:MyLanguage/Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> хибний.",
-       "apihelp-opensearch-param-redirects": "Як обробляти перенаправлення:\n;return:Видати саме перенаправлення.\n;resolve:Видати цільову сторінку. Може видати менше, ніж $1limit результат{{PLURAL:$1limit||и|ів}}.\nЗ історичних причин, за замовчуванням стоїть «return» для $1format=json і «resolve» — для інших форматів.",
+       "apihelp-opensearch-param-redirects": "Як обробляти перенаправлення:\n;return:Видати саме перенаправлення.\n;resolve:Видати цільову сторінку. Може видати менше, ніж $1limit результат{{PLURAL:$1|limit||и|ів}}.\nЗ історичних причин, за замовчуванням стоїть «return» для $1format=json і «resolve» — для інших форматів.",
        "apihelp-opensearch-param-format": "Формат виводу.",
        "apihelp-opensearch-param-warningsaserror": "Якщо при <kbd>format=json</kbd> з'являються попередження, видати помилку API замість того, щоб їх ігнорувати.",
        "apihelp-opensearch-example-te": "Знайти сторінки, що починаються з <kbd>Te</kbd>.",
index 6fd0ee5..3d73e0d 100644 (file)
        "apihelp-query+allpages-param-minsize": "限制頁面至少要有這樣多的位元組。",
        "apihelp-query+allpages-param-maxsize": "限制頁面最多只能這樣多的位元組。",
        "apihelp-query+allpages-param-prtype": "僅限受保護的頁面。",
+       "apihelp-query+allpages-param-prlevel": "篩選基於保護級別的保護(必須與 $1prtype= 參數一起使用)。",
        "apihelp-query+allpages-param-limit": "要回傳的頁面總數。",
        "apihelp-query+allpages-param-dir": "列出時所採用的方向。",
        "apihelp-query+allpages-example-B": "顯示以字母 <kbd>B</kbd> 為開頭的所有頁面清單。",
        "apihelp-query+allpages-example-generator": "顯示 4 個以 <kbd>T</kbd> 為開頭的頁面之資訊。",
+       "apihelp-query+allpages-example-generator-revisions": "顯示前 2 個以 <kbd>Re</kbd> 為開頭的非重新導向頁面內容。",
        "apihelp-query+allredirects-summary": "列出至命名空間的所有重新導向。",
        "apihelp-query+allredirects-param-from": "要起始列舉的重新導向標題。",
        "apihelp-query+allredirects-param-to": "要終止列舉的重新導向標題。",
        "apihelp-query+mystashedfiles-param-limit": "要取得的檔案數量。",
        "apihelp-query+alltransclusions-param-from": "要起始列舉的嵌入標題。",
        "apihelp-query+alltransclusions-param-to": "要終止列舉的嵌入標題。",
+       "apihelp-query+alltransclusions-param-prefix": "搜尋以此值為開頭的所有嵌入標題。",
        "apihelp-query+alltransclusions-param-prop": "要包含到的資訊部份:",
        "apihelp-query+alltransclusions-paramvalue-prop-ids": "添加嵌入頁面的頁面 ID(不能與 $1unique 一起使用)。",
        "apihelp-query+alltransclusions-paramvalue-prop-title": "添加嵌入的標題。",
        "apihelp-query+info-paramvalue-prop-visitingwatchers": "有訪問頁面近期編輯數的各頁面監視者數目,如有允許的話。",
        "apihelp-query+info-paramvalue-prop-notificationtimestamp": "各頁面的監視清單通知時間戳記。",
        "apihelp-query+info-paramvalue-prop-subjectid": "各對話頁的父頁面頁面 ID。",
-       "apihelp-query+info-paramvalue-prop-readable": "使用者是否可閱讀此頁面。",
+       "apihelp-query+info-paramvalue-prop-url": "替各頁面給予一個完整 URL、一個編輯 URL,以及一個規範 URL。",
+       "apihelp-query+info-paramvalue-prop-readable": "使用者是否可閱讀此頁面。請改用 <kbd>intestactions=read</kbd>。",
        "apihelp-query+info-paramvalue-prop-preload": "取得由 EditFormPreloadText 回傳的文字。",
        "apihelp-query+info-param-testactions": "測試目前使用者是否可執行頁面上的某項操作。",
        "apihelp-query+info-param-token": "請改用 [[Special:ApiHelp/query+tokens|action=query&meta=tokens]]。",
        "apihelp-query+iwlinks-paramvalue-prop-url": "添加完整的 URL。",
        "apihelp-query+iwlinks-param-limit": "要回傳的跨 Wiki 連結數量。",
        "apihelp-query+iwlinks-param-prefix": "僅回傳帶有此前綴的跨 wiki 連結。",
+       "apihelp-query+iwlinks-param-title": "要搜尋的跨 wiki 連結。必須與 <var>$1prefix</var> 一起使用。",
        "apihelp-query+iwlinks-param-dir": "列出時所採用的方向。",
        "apihelp-query+iwlinks-example-simple": "從頁面 <kbd>Main Page</kbd> 取得跨 wiki 連結。",
        "apihelp-query+langbacklinks-summary": "找出連結至指定語言連結的所有頁面。",
        "apihelp-query+pagepropnames-summary": "列出所有在 wiki 使用的頁面屬性名稱。",
        "apihelp-query+pagepropnames-param-limit": "回傳的名稱數量上限。",
        "apihelp-query+pagepropnames-example-simple": "取得前 10 個屬性名稱。",
+       "apihelp-query+pageprops-summary": "取得定義在頁面內容的各樣頁面屬性。",
        "apihelp-query+pageprops-example-simple": "取得頁面 <kbd>Main Page</kbd> 與 <kbd>MediaWiki</kbd> 的屬性。",
        "apihelp-query+pageswithprop-summary": "列出使用到指定頁面屬性的所有頁面。",
        "apihelp-query+pageswithprop-param-prop": "要包含到的資訊部份:",
        "apihelp-query+siteinfo-paramvalue-prop-namespacealiases": "已註冊命名空間別名清單。",
        "apihelp-query+siteinfo-paramvalue-prop-specialpagealiases": "特殊頁面別名清單。",
        "apihelp-query+siteinfo-paramvalue-prop-magicwords": "魔術字及其別名清單。",
+       "apihelp-query+siteinfo-paramvalue-prop-usergroups": "回傳使用者群組以及所分配權限。",
        "apihelp-query+siteinfo-paramvalue-prop-libraries": "回傳安裝在 wiki 上的函式庫。",
        "apihelp-query+siteinfo-paramvalue-prop-extensions": "回傳安裝在 wiki 上的擴充功能。",
+       "apihelp-query+siteinfo-paramvalue-prop-extensiontags": "回傳解析擴充標籤清單。",
+       "apihelp-query+siteinfo-paramvalue-prop-defaultoptions": "回傳用於使用者偏好設定的預設值。",
+       "apihelp-query+siteinfo-paramvalue-prop-uploaddialog": "回傳上傳對話框的設置。",
+       "apihelp-query+siteinfo-param-filteriw": "僅回傳跨 wiki 地圖的本地端或非本地端項目。",
        "apihelp-query+siteinfo-param-showalldb": "列出所有資料庫伺服器,不是只有最延遲的那台。",
        "apihelp-query+siteinfo-param-numberingroup": "列出在使用者群組裡的使用者數目。",
        "apihelp-query+siteinfo-param-inlanguagecode": "用於本地化語言的語言代碼(盡可能)與外觀名稱。",
        "apihelp-query+users-example-simple": "返回使用者 <kbd>Example</kbd> 的資訊。",
        "apihelp-query+watchlist-param-start": "起始列舉的時間戳記。",
        "apihelp-query+watchlist-param-end": "結束列舉的時間戳記。",
+       "apihelp-query+watchlist-param-namespace": "篩選僅為指定命名空間的更改。",
        "apihelp-query+watchlist-param-user": "此列出由該使用者作出的更改。",
        "apihelp-query+watchlist-param-excludeuser": "不要列出由該使用者作出的更改。",
        "apihelp-query+watchlist-param-limit": "每個請求要回傳的結果總數。",
        "apihelp-query+watchlist-paramvalue-prop-patrol": "標記編輯為已巡查。",
        "apihelp-query+watchlist-paramvalue-prop-autopatrol": "標記編輯為自動巡查。",
        "apihelp-query+watchlist-paramvalue-prop-sizes": "添加頁面舊有與新的長度。",
+       "apihelp-query+watchlist-paramvalue-prop-loginfo": "在適當處添加日誌資訊。",
        "apihelp-query+watchlist-paramvalue-prop-tags": "列出項目的標籤。",
        "apihelp-query+watchlist-param-type": "要顯示的更改類型:",
        "apihelp-query+watchlist-paramvalue-type-edit": "一般頁面編輯。",
        "apihelp-resetpassword-param-email": "正被重新設定使用者的電子郵件地址。",
        "apihelp-resetpassword-example-user": "向使用者 <kbd>Example</kbd> 寄送重新設定密碼用的電子郵件。",
        "apihelp-revisiondelete-summary": "刪除和取消刪除修訂。",
+       "apihelp-revisiondelete-param-type": "正執行的修訂刪除類型。",
        "apihelp-revisiondelete-param-hide": "各修訂所要隱藏的內容。",
        "apihelp-revisiondelete-param-show": "各修訂所要取消隱藏的內容。",
        "apihelp-revisiondelete-param-suppress": "是否對管理者及其他使用者禁止資料。",
        "apihelp-rollback-param-pageid": "要回退的頁面 ID。不可與 <var>$1title</var> 同時使用。",
        "apihelp-rollback-param-tags": "套用到回退的標籤。",
        "apihelp-rollback-param-summary": "自定義編輯摘要。若為空,則使用預設摘要。",
+       "apihelp-rollback-param-markbot": "將回退的編輯以及回退操作標記為機器人所做編輯。",
        "apihelp-rollback-param-watchlist": "無條件使用設置將頁面加入或移除目前使用者的監視清單或者是不更改監視清單。",
        "apihelp-rollback-example-simple": "回退由使用者 <kbd>Example</kbd> 對頁面 <kbd>Main Page</kbd> 所做的最新編輯。",
        "apihelp-rsd-summary": "匯出一個簡易探索(Really Simple Discovery、RSD)架構。",
        "apihelp-stashedit-param-contentformat": "用於輸入文字的內容序列化格式。",
        "apihelp-stashedit-param-baserevid": "基本修訂的修訂 ID。",
        "apihelp-stashedit-param-summary": "更改摘要。",
+       "apihelp-tag-param-revid": "要添加或移除標籤的一個或多個修訂 ID。",
+       "apihelp-tag-param-logid": "要添加或移除標籤的一個或多個日誌項目 ID。",
        "apihelp-tag-param-reason": "變更的原因。",
        "apihelp-tokens-summary": "取得資料修改動作的密鑰。",
        "apihelp-tokens-extended-description": "此模組已因支援 [[Special:ApiHelp/query+tokens|action=query&meta=tokens]] 而停用。",
        "apierror-assertnameduserfailed": "斷言使用者「$1」出錯。",
        "apierror-assertuserfailed": "斷言使用者已登入失敗。",
        "apierror-autoblocked": "您的 IP 位址已經被自動封鎖,因為它曾經被一名已封鎖的使用者使用過。",
+       "apierror-bad-badfilecontexttitle": "在 <var>$1badfilecontexttitle</var> 參數的無效標題。",
+       "apierror-baddiffto": "<var>$1diffto</var> 必須設定成非負值的數字、<kbd>prev</kbd>、<kbd>next</kbd>、或 <kbd>cur</kbd>。",
+       "apierror-badformat-generic": "內容模組 $2 不支援使用請求格式 $1。",
        "apierror-badgenerator-notgenerator": "模組 <kbd>$1</kbd> 不能作為產生器。",
        "apierror-badgenerator-unknown": "未知的 <kbd>generator=$1</kbd>。",
        "apierror-badip": "IP 參數無效。",
        "apierror-mustbeloggedin-linkaccounts": "您必須登入到連結帳號。",
        "apierror-mustbeloggedin-removeauth": "必須登入,才能移除身分核對資取。",
        "apierror-mustbeloggedin": "您必須登入才能$1。",
+       "apierror-nochanges": "沒有請求的更改。",
        "apierror-nodeleteablefile": "沒有這樣檔案的舊版本。",
        "apierror-noedit-anon": "匿名使用者不可編輯頁面。",
        "apierror-noedit": "您沒有權限來編輯頁面。",
        "apierror-nosuchsection": "沒有 ID 為 $1 的段落。",
        "apierror-nosuchsection-what": "在$2裡沒有段落$1。",
        "apierror-nosuchuserid": "沒有 ID 為 $1 的使用者。",
+       "apierror-notpatrollable": "因內容過舊,修訂 r$1 無法巡查。",
        "apierror-nouploadmodule": "未設定上傳模組。",
+       "apierror-opensearch-json-warnings": "警告不能以 OpenSearch JSON 格式表示。",
        "apierror-pagecannotexist": "命名空間不允許實際頁面。",
        "apierror-permissiondenied": "您沒有權限$1。",
        "apierror-permissiondenied-generic": "權限不足。",
        "apiwarn-deprecation-httpsexpected": "當應為 HTTPS 時,HTTP 要被使用。",
        "apiwarn-invalidcategory": "「$1」不是一個分類。",
        "apiwarn-invalidtitle": "「$1」不是一個有效標題。",
+       "apiwarn-invalidxmlstylesheet": "指定了無效或不存在的樣式表。",
+       "apiwarn-invalidxmlstylesheetns": "樣式表應在 {{ns:MediaWiki}} 命名空間。",
        "apiwarn-notfile": "「$1」不是一個檔案。",
+       "apiwarn-nothumb-noimagehandler": "無法建立縮圖,因為$1沒有相關的圖片處理器。",
        "apiwarn-parse-nocontentmodel": "未提供 <var>title</var> 或 <var>contentmodel</var>,應是 $1。",
        "apiwarn-tokennotallowed": "「$1」操作不允許目前的使用者。",
+       "apiwarn-unrecognizedvalues": "參數 <var>$1</var> 有無法識別的{{PLURAL:$3|值|值}}:$2。",
+       "apiwarn-unsupportedarray": "參數 <var>$1</var> 使用了不被支援的 PHP 陣列語法。",
        "apiwarn-validationfailed-badpref": "不是有效的偏好設定。",
        "apiwarn-validationfailed-cannotset": "不能透過此模組設定。",
        "apiwarn-validationfailed": "<kbd>$1</kbd>驗證錯誤:$2",
index ab7ba0f..c2e6d32 100644 (file)
@@ -681,8 +681,9 @@ class AuthManager implements LoggerAwareInterface {
                        // Step 4: Authentication complete! Set the user in the session and
                        // clean up.
 
-                       $this->logger->info( 'Login for {user} succeeded', [
+                       $this->logger->info( 'Login for {user} succeeded from {clientip}', [
                                'user' => $user->getName(),
+                               'clientip' => $this->request->getIP(),
                        ] );
                        /** @var RememberMeAuthenticationRequest $req */
                        $req = AuthenticationRequest::getRequestByClass(
index 01d992f..008639c 100644 (file)
@@ -79,11 +79,7 @@ class AuthManagerAuthPlugin extends \AuthPlugin {
        }
 
        public function getDomain() {
-               if ( isset( $this->domain ) ) {
-                       return $this->domain;
-               } else {
-                       return 'invaliddomain';
-               }
+               return $this->domain ?? 'invaliddomain';
        }
 
        public function validDomain( $domain ) {
index ad88564..5f55ec5 100644 (file)
 
 namespace MediaWiki\Auth;
 
-use LoginForm;
-use StatusValue;
-use User;
-
 /**
  * A pre-authentication provider to call some legacy hooks.
  * @ingroup Auth
@@ -32,149 +28,7 @@ use User;
  * @deprecated since 1.27
  */
 class LegacyHookPreAuthenticationProvider extends AbstractPreAuthenticationProvider {
-
-       public function testForAuthentication( array $reqs ) {
-               $req = AuthenticationRequest::getRequestByClass( $reqs, PasswordAuthenticationRequest::class );
-               if ( $req ) {
-                       $user = User::newFromName( $req->username );
-                       $password = $req->password;
-               } else {
-                       $user = null;
-                       foreach ( $reqs as $req ) {
-                               if ( $req->username !== null ) {
-                                       $user = User::newFromName( $req->username );
-                                       break;
-                               }
-                       }
-                       if ( !$user ) {
-                               $this->logger->debug( __METHOD__ . ': No username in $reqs, skipping hooks' );
-                               return StatusValue::newGood();
-                       }
-
-                       // Something random for the 'AbortLogin' hook.
-                       $password = wfRandomString( 32 );
-               }
-
-               $msg = null;
-               if ( !\Hooks::run( 'LoginUserMigrated', [ $user, &$msg ], '1.27' ) ) {
-                       return $this->makeFailResponse(
-                               $user, LoginForm::USER_MIGRATED, $msg, 'LoginUserMigrated'
-                       );
-               }
-
-               $abort = LoginForm::ABORTED;
-               $msg = null;
-               if ( !\Hooks::run( 'AbortLogin', [ $user, $password, &$abort, &$msg ], '1.27' ) ) {
-                       return $this->makeFailResponse( $user, $abort, $msg, 'AbortLogin' );
-               }
-
-               return StatusValue::newGood();
-       }
-
-       public function testForAccountCreation( $user, $creator, array $reqs ) {
-               $abortError = '';
-               $abortStatus = null;
-               if ( !\Hooks::run( 'AbortNewAccount', [ $user, &$abortError, &$abortStatus ], '1.27' ) ) {
-                       // Hook point to add extra creation throttles and blocks
-                       $this->logger->debug( __METHOD__ . ': a hook blocked creation' );
-                       if ( $abortStatus === null ) {
-                               // Report back the old string as a raw message status.
-                               // This will report the error back as 'createaccount-hook-aborted'
-                               // with the given string as the message.
-                               // To return a different error code, return a StatusValue object.
-                               $msg = wfMessage( 'createaccount-hook-aborted' )->rawParams( $abortError );
-                               return StatusValue::newFatal( $msg );
-                       } else {
-                               // For MediaWiki 1.23+ and updated hooks, return the Status object
-                               // returned from the hook.
-                               $ret = StatusValue::newGood();
-                               $ret->merge( $abortStatus );
-                               return $ret;
-                       }
-               }
-
-               return StatusValue::newGood();
-       }
-
-       public function testUserForCreation( $user, $autocreate, array $options = [] ) {
-               if ( $autocreate !== false ) {
-                       $abortError = '';
-                       if ( !\Hooks::run( 'AbortAutoAccount', [ $user, &$abortError ], '1.27' ) ) {
-                               // Hook point to add extra creation throttles and blocks
-                               $this->logger->debug( __METHOD__ . ": a hook blocked auto-creation: $abortError\n" );
-                               return $this->makeFailResponse(
-                                       $user, LoginForm::ABORTED, $abortError, 'AbortAutoAccount'
-                               );
-                       }
-               }
-
-               return StatusValue::newGood();
-       }
-
-       /**
-        * Construct an appropriate failure response
-        * @param User $user
-        * @param int $constant One of the LoginForm::… constants
-        * @param string|null $msg Optional message key, will be derived from $constant otherwise
-        * @param string $hook Name of the hook for error logging and exception messages
-        * @return StatusValue
-        */
-       private function makeFailResponse( User $user, $constant, $msg, $hook ) {
-               switch ( $constant ) {
-                       case LoginForm::SUCCESS:
-                               // WTF?
-                               $this->logger->debug( "$hook is SUCCESS?!" );
-                               return StatusValue::newGood();
-
-                       case LoginForm::NEED_TOKEN:
-                               return StatusValue::newFatal( $msg ?: 'nocookiesforlogin' );
-
-                       case LoginForm::WRONG_TOKEN:
-                               return StatusValue::newFatal( $msg ?: 'sessionfailure' );
-
-                       case LoginForm::NO_NAME:
-                       case LoginForm::ILLEGAL:
-                               return StatusValue::newFatal( $msg ?: 'noname' );
-
-                       case LoginForm::WRONG_PLUGIN_PASS:
-                       case LoginForm::WRONG_PASS:
-                               return StatusValue::newFatal( $msg ?: 'wrongpassword' );
-
-                       case LoginForm::NOT_EXISTS:
-                               return StatusValue::newFatal( $msg ?: 'nosuchusershort', wfEscapeWikiText( $user->getName() ) );
-
-                       case LoginForm::EMPTY_PASS:
-                               return StatusValue::newFatal( $msg ?: 'wrongpasswordempty' );
-
-                       case LoginForm::RESET_PASS:
-                               return StatusValue::newFatal( $msg ?: 'resetpass_announce' );
-
-                       case LoginForm::THROTTLED:
-                               $throttle = $this->config->get( 'PasswordAttemptThrottle' );
-                               return StatusValue::newFatal(
-                                       $msg ?: 'login-throttled',
-                                       \Message::durationParam( $throttle['seconds'] )
-                               );
-
-                       case LoginForm::USER_BLOCKED:
-                               return StatusValue::newFatal(
-                                       $msg ?: 'login-userblocked', wfEscapeWikiText( $user->getName() )
-                               );
-
-                       case LoginForm::ABORTED:
-                               return StatusValue::newFatal(
-                                       $msg ?: 'login-abort-generic', wfEscapeWikiText( $user->getName() )
-                               );
-
-                       case LoginForm::USER_MIGRATED:
-                               $error = $msg ?: 'login-migrated-generic';
-                               return StatusValue::newFatal( ...(array)$error );
-
-                       // @codeCoverageIgnoreStart
-                       case LoginForm::CREATE_BLOCKED: // Can never happen
-                       default:
-                               throw new \DomainException( __METHOD__ . ": Unhandled case value from $hook" );
-               }
-                       // @codeCoverageIgnoreEnd
+       public function __construct() {
+               wfDeprecated( self::class, '1.27' );
        }
 }
diff --git a/includes/block/BlockRestriction.php b/includes/block/BlockRestriction.php
new file mode 100644 (file)
index 0000000..3ce682b
--- /dev/null
@@ -0,0 +1,417 @@
+<?php
+/**
+ * Block restriction interface.
+ *
+ * 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
+ */
+
+namespace MediaWiki\Block;
+
+use MediaWiki\Block\Restriction\PageRestriction;
+use MediaWiki\Block\Restriction\Restriction;
+use Wikimedia\Rdbms\IResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
+
+class BlockRestriction {
+
+       /**
+        * Retrieves the restrictions from the database by block id.
+        *
+        * @param int|array $blockId
+        * @param IDatabase|null $db
+        * @param array $options Options to pass to the select query.
+        * @return Restriction[]
+        */
+       public static function loadByBlockId( $blockId, IDatabase $db = null ) {
+               if ( is_null( $blockId ) || $blockId === [] ) {
+                       return [];
+               }
+
+               $db = $db ?: wfGetDb( DB_REPLICA );
+
+               $result = $db->select(
+                       [ 'ipblocks_restrictions', 'page' ],
+                       [ 'ir_ipb_id', 'ir_type', 'ir_value', 'page_namespace', 'page_title' ],
+                       [ 'ir_ipb_id' => $blockId ],
+                       __METHOD__,
+                       [],
+                       [ 'page' => [ 'LEFT JOIN', [ 'ir_type' => PageRestriction::TYPE_ID, 'ir_value=page_id' ] ] ]
+               );
+
+               return self::resultToRestrictions( $result );
+       }
+
+       /**
+        * Inserts the restrictions into the database.
+        *
+        * @param Restriction[] $restrictions
+        * @return bool
+        */
+       public static function insert( array $restrictions ) {
+               if ( empty( $restrictions ) ) {
+                       return false;
+               }
+
+               $rows = [];
+               foreach ( $restrictions as $restriction ) {
+                       if ( !$restriction instanceof Restriction ) {
+                               continue;
+                       }
+                       $rows[] = $restriction->toRow();
+               }
+
+               if ( empty( $rows ) ) {
+                       return false;
+               }
+
+               $dbw = wfGetDB( DB_MASTER );
+
+               return $dbw->insert(
+                       'ipblocks_restrictions',
+                       $rows,
+                       __METHOD__,
+                       [ 'IGNORE' ]
+               );
+       }
+
+       /**
+        * Updates the list of restrictions. This method does not allow removing all
+        * of the restrictions. To do that, use ::deleteByBlockId().
+        *
+        * @param Restriction[] $restrictions
+        * @return bool
+        */
+       public static function update( array $restrictions ) {
+               $dbw = wfGetDB( DB_MASTER );
+
+               $dbw->startAtomic( __METHOD__ );
+
+               // Organize the restrictions by blockid.
+               $restrictionList = self::restrictionsByBlockId( $restrictions );
+
+               // Load the existing restrictions and organize by block id. Any block ids
+               // that were passed into this function will be used to load all of the
+               // existing restrictions. This list might be the same, or may be completely
+               // different.
+               $existingList = [];
+               $blockIds = array_keys( $restrictionList );
+               if ( !empty( $blockIds ) ) {
+                       $result = $dbw->select(
+                               [ 'ipblocks_restrictions', 'page' ],
+                               [ 'ir_ipb_id', 'ir_type', 'ir_value' ],
+                               [ 'ir_ipb_id' => $blockIds ],
+                               __METHOD__,
+                               [ 'FOR UPDATE' ]
+                       );
+
+                       $existingList = self::restrictionsByBlockId(
+                               self::resultToRestrictions( $result )
+                       );
+               }
+
+               $result = true;
+               // Perform the actions on a per block-id basis.
+               foreach ( $restrictionList as $blockId => $blockRestrictions ) {
+                       // Insert all of the restrictions first, ignoring ones that already exist.
+                       $success = self::insert( $blockRestrictions );
+
+                       // Update the result. The first false is the result, otherwise, true.
+                       $result = $success && $result;
+
+                       $restrictionsToRemove = self::restrictionsToRemove(
+                               $existingList[$blockId] ?? [],
+                               $restrictions
+                       );
+
+                       // Nothing to remove.
+                       if ( empty( $restrictionsToRemove ) ) {
+                               continue;
+                       }
+
+                       $success = self::delete( $restrictionsToRemove );
+
+                       // Update the result. The first false is the result, otherwise, true.
+                       $result = $success && $result;
+               }
+
+               $dbw->endAtomic( __METHOD__ );
+
+               return $result;
+       }
+
+       /**
+        * Updates the list of restrictions by parent id.
+        *
+        * @param int $parentBlockId
+        * @param Restriction[] $restrictions
+        * @return bool
+        */
+       public static function updateByParentBlockId( $parentBlockId, array $restrictions ) {
+               // If removing all of the restrictions, then just delete them all.
+               if ( empty( $restrictions ) ) {
+                       return self::deleteByParentBlockId( $parentBlockId );
+               }
+
+               $parentBlockId = (int)$parentBlockId;
+
+               $db = wfGetDb( DB_MASTER );
+
+               $db->startAtomic( __METHOD__ );
+
+               $blockIds = $db->selectFieldValues(
+                       'ipblocks',
+                       'ipb_id',
+                       [ 'ipb_parent_block_id' => $parentBlockId ],
+                       __METHOD__,
+                       [ 'FOR UPDATE' ]
+               );
+
+               $result = true;
+               foreach ( $blockIds as $id ) {
+                       $success = self::update( self::setBlockId( $id, $restrictions ) );
+                       // Update the result. The first false is the result, otherwise, true.
+                       $result = $success && $result;
+               }
+
+               $db->endAtomic( __METHOD__ );
+
+               return $result;
+       }
+
+       /**
+        * Delete the restrictions.
+        *
+        * @param Restriction[]|null $restrictions
+        * @throws MWException
+        * @return bool
+        */
+       public static function delete( array $restrictions ) {
+               $dbw = wfGetDB( DB_MASTER );
+               $result = true;
+               foreach ( $restrictions as $restriction ) {
+                       if ( !$restriction instanceof Restriction ) {
+                               continue;
+                       }
+
+                       $success = $dbw->delete(
+                               'ipblocks_restrictions',
+                               // The restriction row is made up of a compound primary key. Therefore,
+                               // the row and the delete conditions are the same.
+                               $restriction->toRow(),
+                               __METHOD__
+                       );
+                       // Update the result. The first false is the result, otherwise, true.
+                       $result = $success && $result;
+               }
+
+               return $result;
+       }
+
+       /**
+        * Delete the restrictions by Block ID.
+        *
+        * @param int|array $blockId
+        * @throws MWException
+        * @return bool
+        */
+       public static function deleteByBlockId( $blockId ) {
+               $dbw = wfGetDB( DB_MASTER );
+               return $dbw->delete(
+                       'ipblocks_restrictions',
+                       [ 'ir_ipb_id' => $blockId ],
+                       __METHOD__
+               );
+       }
+
+       /**
+        * Delete the restrictions by Parent Block ID.
+        *
+        * @param int|array $parentBlockId
+        * @throws MWException
+        * @return bool
+        */
+       public static function deleteByParentBlockId( $parentBlockId ) {
+               $dbw = wfGetDB( DB_MASTER );
+               return $dbw->deleteJoin(
+                       'ipblocks_restrictions',
+                       'ipblocks',
+                       'ir_ipb_id',
+                       'ipb_id',
+                       [ 'ipb_parent_block_id' => $parentBlockId ],
+                       __METHOD__
+               );
+       }
+
+       /**
+        * Checks if two arrays of Restrictions are effectively equal. This is a loose
+        * equality check as the restrictions do not have to contain the same block
+        * ids.
+        *
+        * @param Restriction[] $a
+        * @param Restriction[] $b
+        * @return bool
+        */
+       public static function equals( array $a, array $b ) {
+               $filter = function ( $restriction ) {
+                       return $restriction instanceof Restriction;
+               };
+
+               // Ensure that every item in the array is a Restriction. This prevents a
+               // fatal error from calling Restriction::getHash if something in the array
+               // is not a restriction.
+               $a = array_filter( $a, $filter );
+               $b = array_filter( $b, $filter );
+
+               $aCount = count( $a );
+               $bCount = count( $b );
+
+               // If the count is different, then they are obviously a different set.
+               if ( $aCount !== $bCount ) {
+                       return false;
+               }
+
+               // If both sets contain no items, then they are the same set.
+               if ( $aCount === 0 && $bCount === 0 ) {
+                       return true;
+               }
+
+               $hasher = function ( $r ) {
+                       return $r->getHash();
+               };
+
+               $aHashes = array_map( $hasher, $a );
+               $bHashes = array_map( $hasher, $b );
+
+               sort( $aHashes );
+               sort( $bHashes );
+
+               return $aHashes === $bHashes;
+       }
+
+       /**
+        * Set the blockId on a set of restrictions and return a new set.
+        *
+        * @param int $blockId
+        * @param Restriction[] $restrictions
+        * @return Restriction[]
+        */
+       public static function setBlockId( $blockId, array $restrictions ) {
+               $blockRestrictions = [];
+
+               foreach ( $restrictions as $restriction ) {
+                       if ( !$restriction instanceof Restriction ) {
+                               continue;
+                       }
+
+                       // Clone the restriction so any references to the current restriction are
+                       // not suddenly changed to a different blockId.
+                       $restriction = clone $restriction;
+                       $restriction->setBlockId( $blockId );
+
+                       $blockRestrictions[] = $restriction;
+               }
+
+               return $blockRestrictions;
+       }
+
+       /**
+        * Get the restrictions that should be removed, which are existing
+        * restrictions that are not in the new list of restrictions.
+        *
+        * @param Restriction[] $existing
+        * @param Restriction[] $new
+        * @return array
+        */
+       private static function restrictionsToRemove( array $existing, array $new ) {
+               return array_filter( $existing, function ( $e ) use ( $new ) {
+                       foreach ( $new as $restriction ) {
+                               if ( !$restriction instanceof Restriction ) {
+                                       continue;
+                               }
+
+                               if ( $restriction->equals( $e ) ) {
+                                       return false;
+                               }
+                       }
+
+                       return true;
+               } );
+       }
+
+       /**
+        * Converts an array of restrictions to an associative array of restrictions
+        * where the keys are the block ids.
+        *
+        * @param Restriction[] $restrictions
+        * @return array
+        */
+       private static function restrictionsByBlockId( array $restrictions ) {
+               $blockRestrictions = [];
+
+               foreach ( $restrictions as $restriction ) {
+                       // Ensure that all of the items in the array are restrictions.
+                       if ( !$restriction instanceof Restriction ) {
+                               continue;
+                       }
+
+                       if ( !isset( $blockRestrictions[$restriction->getBlockId()] ) ) {
+                               $blockRestrictions[$restriction->getBlockId()] = [];
+                       }
+
+                       $blockRestrictions[$restriction->getBlockId()][] = $restriction;
+               }
+
+               return $blockRestrictions;
+       }
+
+       /**
+        * Convert an Result Wrapper to an array of restrictions.
+        *
+        * @param IResultWrapper $result
+        * @return Restriction[]
+        */
+       private static function resultToRestrictions( IResultWrapper $result ) {
+               $restrictions = [];
+               foreach ( $result as $row ) {
+                       $restriction = self::rowToRestriction( $row );
+
+                       if ( !$restriction ) {
+                               continue;
+                       }
+
+                       $restrictions[] = $restriction;
+               }
+
+               return $restrictions;
+       }
+
+       /**
+        * Convert a result row from the database into a restriction object.
+        *
+        * @param \stdClass $row
+        * @return Restriction|null
+        */
+       private static function rowToRestriction( \stdClass $row ) {
+               switch ( $row->ir_type ) {
+                       case PageRestriction::TYPE_ID:
+                               return PageRestriction::newFromRow( $row );
+                       default:
+                               return null;
+               }
+       }
+}
diff --git a/includes/block/Restriction/AbstractRestriction.php b/includes/block/Restriction/AbstractRestriction.php
new file mode 100644 (file)
index 0000000..88a6a0f
--- /dev/null
@@ -0,0 +1,102 @@
+<?php
+/**
+ * Abstract block restriction.
+ *
+ * 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
+ */
+
+namespace MediaWiki\Block\Restriction;
+
+abstract class AbstractRestriction implements Restriction {
+
+       /**
+        * @var int
+        */
+       protected $blockId;
+
+       /**
+        * @var int
+        */
+       protected $value;
+
+       /**
+        * Create Restriction.
+        *
+        * @param int $blockId
+        * @param int $value
+        */
+       public function __construct( $blockId, $value ) {
+               $this->blockId = (int)$blockId;
+               $this->value = (int)$value;
+       }
+
+       /**
+        * {@inheritdoc}
+        */
+       public function getBlockId() {
+               return $this->blockId;
+       }
+
+       /**
+        * {@inheritdoc}
+        */
+       public function setBlockId( $blockId ) {
+               $this->blockId = (int)$blockId;
+
+               return $this;
+       }
+
+       /**
+        * {@inheritdoc}
+        */
+       public function getValue() {
+               return $this->value;
+       }
+
+       /**
+        * {@inheritdoc}
+        */
+       public static function newFromRow( \stdClass $row ) {
+               return new static( $row->ir_ipb_id, $row->ir_value );
+       }
+
+       /**
+        * {@inheritdoc}
+        */
+       public function toRow() {
+               return [
+                       'ir_ipb_id' => $this->getBlockId(),
+                       'ir_type' => $this->getTypeId(),
+                       'ir_value' => $this->getValue(),
+               ];
+       }
+
+       /**
+        * {@inheritdoc}
+        */
+       public function equals( Restriction $other ) {
+               return $this->getHash() === $other->getHash();
+       }
+
+       /**
+        * {@inheritdoc}
+        */
+       public function getHash() {
+               return $this->getType() . '-' . $this->getValue();
+       }
+}
diff --git a/includes/block/Restriction/PageRestriction.php b/includes/block/Restriction/PageRestriction.php
new file mode 100644 (file)
index 0000000..209b148
--- /dev/null
@@ -0,0 +1,99 @@
+<?php
+/**
+ * A Block restriction object of type 'Page'.
+ *
+ * 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
+ */
+
+namespace MediaWiki\Block\Restriction;
+
+class PageRestriction extends AbstractRestriction {
+
+       const TYPE = 'page';
+       const TYPE_ID = 1;
+
+       /**
+        * @var \Title
+        */
+       protected $title;
+
+       /**
+        * {@inheritdoc}
+        */
+       public function matches( \Title $title ) {
+               return $title->equals( $this->getTitle() );
+       }
+
+       /**
+        * {@inheritdoc}
+        */
+       public function getType() {
+               return self::TYPE;
+       }
+
+       /**
+        * {@inheritdoc}
+        */
+       public function getTypeId() {
+               return self::TYPE_ID;
+       }
+
+       /**
+        * Set the title.
+        *
+        * @param \Title $title
+        * @return self
+        */
+       public function setTitle( \Title $title ) {
+               $this->title = $title;
+
+               return $this;
+       }
+
+       /**
+        * Get Title.
+        *
+        * @return \Title|null
+        */
+       public function getTitle() {
+               if ( !$this->title ) {
+                       $this->title = \Title::newFromID( $this->value );
+               }
+
+               return $this->title;
+       }
+
+       /**
+        * {@inheritdoc}
+        */
+       public static function newFromRow( \stdClass $row ) {
+               $restriction = parent::newFromRow( $row );
+
+               // If the page_namespace and the page_title were provided, add the title to
+               // the restriction.
+               if ( isset( $row->page_namespace ) && isset( $row->page_title ) ) {
+                       // Clone the row so it is not mutated.
+                       $row = clone $row;
+                       $row->page_id = $row->ir_value;
+                       $title = \Title::newFromRow( $row );
+                       $restriction->setTitle( $title );
+               }
+
+               return $restriction;
+       }
+}
diff --git a/includes/block/Restriction/Restriction.php b/includes/block/Restriction/Restriction.php
new file mode 100644 (file)
index 0000000..f1cc1b0
--- /dev/null
@@ -0,0 +1,100 @@
+<?php
+/**
+ * Block restriction interface.
+ *
+ * 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
+ */
+
+namespace MediaWiki\Block\Restriction;
+
+interface Restriction {
+
+       /**
+        * Gets the id of the block.
+        *
+        * @return int
+        */
+       public function getBlockId();
+
+       /**
+        * Sets the id of the block.
+        *
+        * @param int $blockId
+        * @return self
+        */
+       public function setBlockId( $blockId );
+
+       /**
+        * Gets the value of the restriction.
+        *
+        * @return int
+        */
+       public function getValue();
+
+       /**
+        * Gets the type of restriction
+        *
+        * @return string
+        */
+       public function getType();
+
+       /**
+        * Gets the id of the type of restriction. This id is used in the database.
+        *
+        * @return string
+        */
+       public function getTypeId();
+
+       /**
+        * Creates a new Restriction from a database row.
+        *
+        * @return self
+        */
+       public static function newFromRow( \stdClass $row );
+
+       /**
+        * Convert a restriction object into a row array for insertion.
+        *
+        * @return array
+        */
+       public function toRow();
+
+       /**
+        * Determine if a restriction matches a given title.
+        *
+        * @param \Title $title
+        * @return bool
+        */
+       public function matches( \Title $title );
+
+       /**
+        * Determine if a restriction equals another restriction.
+        *
+        * @param Restriction $other
+        * @return bool
+        */
+       public function equals( Restriction $other );
+
+       /**
+        * Create a unique hash of the block restriction based on the type and value.
+        *
+        * @return string
+        */
+       public function getHash();
+
+}
index 48809d0..1407271 100644 (file)
@@ -567,7 +567,7 @@ class BacklinkCache {
        /**
         * Returns check key for the backlinks cache for a particular title
         *
-        * @return String
+        * @return string
         */
        private function makeCheckKey() {
                return $this->wanCache->makeKey(
index 869f768..5ada42f 100644 (file)
@@ -198,6 +198,7 @@ class MessageCache {
                                // either.
                                $po = ParserOptions::newFromAnon();
                                $po->setAllowUnsafeRawHtml( false );
+                               $po->setTidy( true );
                                return $po;
                        }
 
@@ -206,6 +207,8 @@ class MessageCache {
                        // from malicious sources. As a precaution, disable
                        // the <html> parser tag when parsing messages.
                        $this->mParserOptions->setAllowUnsafeRawHtml( false );
+                       // For the same reason, tidy the output!
+                       $this->mParserOptions->setTidy( true );
                }
 
                return $this->mParserOptions;
@@ -513,7 +516,7 @@ class MessageCache {
                foreach ( $res as $row ) {
                        $name = $this->contLang->lcfirst( $row->page_title );
                        // Include entries/stubs for all keys in $mostused in adaptive mode
-                       if ( $wgAdaptiveMessageCache || isset( $overridable[$name] ) ) {
+                       if ( $wgAdaptiveMessageCache || $this->isMainCacheable( $name, $overridable ) ) {
                                $cache[$row->page_title] = '!TOO BIG';
                        }
                        // At least include revision ID so page changes are reflected in the hash
@@ -535,7 +538,7 @@ class MessageCache {
                foreach ( $res as $row ) {
                        $name = $this->contLang->lcfirst( $row->page_title );
                        // Include entries/stubs for all keys in $mostused in adaptive mode
-                       if ( $wgAdaptiveMessageCache || isset( $overridable[$name] ) ) {
+                       if ( $wgAdaptiveMessageCache || $this->isMainCacheable( $name, $overridable ) ) {
                                $text = Revision::getRevisionText( $row );
                                if ( $text === false ) {
                                        // Failed to fetch data; possible ES errors?
@@ -571,6 +574,17 @@ class MessageCache {
                return $cache;
        }
 
+       /**
+        * @param string $name Message name with lowercase first letter
+        * @param array $overridable Map of (key => unused) for software-defined messages
+        * @return bool
+        */
+       private function isMainCacheable( $name, array $overridable ) {
+               // Include common conversion table pages. This also avoids problems with
+               // Installer::parse() bailing out due to disallowed DB queries (T207979).
+               return ( isset( $overridable[$name] ) || strpos( $name, 'conversiontable/' ) === 0 );
+       }
+
        /**
         * Updates cache as necessary when message page is changed
         *
@@ -1039,7 +1053,8 @@ class MessageCache {
                        );
                } else {
                        // Message page either does not exist or does not override a software message
-                       if ( !isset( $this->overridable[$this->contLang->lcfirst( $title )] ) ) {
+                       $name = $this->contLang->lcfirst( $title );
+                       if ( !$this->isMainCacheable( $name, $this->overridable ) ) {
                                // Message page does not override any software-defined message. A custom
                                // message might be defined to have content or settings specific to the wiki.
                                // Load the message page, utilizing the individual message cache as needed.
index 78a4863..246a3dd 100644 (file)
@@ -50,11 +50,7 @@ class LCStoreCDB implements LCStore {
        function __construct( $conf = [] ) {
                global $wgCacheDirectory;
 
-               if ( isset( $conf['directory'] ) ) {
-                       $this->directory = $conf['directory'];
-               } else {
-                       $this->directory = $wgCacheDirectory;
-               }
+               $this->directory = $conf['directory'] ?? $wgCacheDirectory;
        }
 
        public function get( $code, $key ) {
index 3b6da73..c5a2512 100644 (file)
@@ -41,11 +41,7 @@ class LCStoreStaticArray implements LCStore {
        public function __construct( $conf = [] ) {
                global $wgCacheDirectory;
 
-               if ( isset( $conf['directory'] ) ) {
-                       $this->directory = $conf['directory'];
-               } else {
-                       $this->directory = $wgCacheDirectory;
-               }
+               $this->directory = $conf['directory'] ?? $wgCacheDirectory;
        }
 
        public function startWrite( $code ) {
index c781d71..5bb1db9 100644 (file)
@@ -112,11 +112,7 @@ class ChangesListBooleanFilter extends ChangesListFilter {
                        $this->showHide = $filterDefinition['showHide'];
                }
 
-               if ( isset( $filterDefinition['isReplacedInStructuredUi'] ) ) {
-                       $this->isReplacedInStructuredUi = $filterDefinition['isReplacedInStructuredUi'];
-               } else {
-                       $this->isReplacedInStructuredUi = false;
-               }
+               $this->isReplacedInStructuredUi = $filterDefinition['isReplacedInStructuredUi'] ?? false;
 
                if ( isset( $filterDefinition['default'] ) ) {
                        $this->setDefault( $filterDefinition['default'] );
@@ -128,11 +124,7 @@ class ChangesListBooleanFilter extends ChangesListFilter {
                        $this->queryCallable = $filterDefinition['queryCallable'];
                }
 
-               if ( isset( $filterDefinition['activeValue'] ) ) {
-                       $this->activeValue = $filterDefinition['activeValue'];
-               } else {
-                       $this->activeValue = true;
-               }
+               $this->activeValue = $filterDefinition['activeValue'] ?? true;
        }
 
        /**
index 9d30537..deec915 100644 (file)
@@ -174,11 +174,7 @@ abstract class ChangesListFilterGroup {
                }
 
                $this->type = $groupDefinition['type'];
-               if ( isset( $groupDefinition['priority'] ) ) {
-                       $this->priority = $groupDefinition['priority'];
-               } else {
-                       $this->priority = self::DEFAULT_PRIORITY;
-               }
+               $this->priority = $groupDefinition['priority'] ?? self::DEFAULT_PRIORITY;
 
                $this->isFullCoverage = $groupDefinition['isFullCoverage'];
 
index d9ca8d7..b28983f 100644 (file)
@@ -351,13 +351,15 @@ class ChangeTags {
                                foreach ( $tagsToAdd as $tag ) {
                                        $changeTagMapping[$tag] = $changeTagDefStore->acquireId( $tag );
                                }
-
-                               $dbw->update(
-                                       'change_tag_def',
-                                       [ 'ctd_count = ctd_count + 1' ],
-                                       [ 'ctd_name' => $tagsToAdd ],
-                                       __METHOD__
-                               );
+                               // T207881: update the counts at the end of the transaction
+                               $dbw->onTransactionPreCommitOrIdle( function () use ( $dbw, $tagsToAdd ) {
+                                       $dbw->update(
+                                               'change_tag_def',
+                                               [ 'ctd_count = ctd_count + 1' ],
+                                               [ 'ctd_name' => $tagsToAdd ],
+                                               __METHOD__
+                                       );
+                               } );
                        }
 
                        $tagsRows = [];
@@ -408,18 +410,21 @@ class ChangeTags {
                                );
                                $dbw->delete( 'change_tag', $conds, __METHOD__ );
                                if ( $dbw->affectedRows() && $wgChangeTagsSchemaMigrationStage > MIGRATION_OLD ) {
-                                       $dbw->update(
-                                               'change_tag_def',
-                                               [ 'ctd_count = ctd_count - 1' ],
-                                               [ 'ctd_name' => $tag ],
-                                               __METHOD__
-                                       );
-
-                                       $dbw->delete(
-                                               'change_tag_def',
-                                               [ 'ctd_name' => $tag, 'ctd_count' => 0, 'ctd_user_defined' => 0 ],
-                                               __METHOD__
-                                       );
+                                       // T207881: update the counts at the end of the transaction
+                                       $dbw->onTransactionPreCommitOrIdle( function () use ( $dbw, $tag ) {
+                                               $dbw->update(
+                                                       'change_tag_def',
+                                                       [ 'ctd_count = ctd_count - 1' ],
+                                                       [ 'ctd_name' => $tag ],
+                                                       __METHOD__
+                                               );
+
+                                               $dbw->delete(
+                                                       'change_tag_def',
+                                                       [ 'ctd_name' => $tag, 'ctd_count' => 0, 'ctd_user_defined' => 0 ],
+                                                       __METHOD__
+                                               );
+                                       } );
                                }
                        }
                }
@@ -807,15 +812,15 @@ class ChangeTags {
                $tagTables[] = 'change_tag';
                if ( $wgChangeTagsSchemaMigrationStage > MIGRATION_WRITE_BOTH ) {
                        $tagTables[] = 'change_tag_def';
-                       $join_cond_ts_tags = [ $join_cond, 'ct_tag_id=ctd_id' ];
+                       $join_cond_ts_tags = [ 'change_tag_def' => [ 'INNER JOIN', 'ct_tag_id=ctd_id' ] ];
                        $field = 'ctd_name';
                } else {
                        $field = 'ct_tag';
-                       $join_cond_ts_tags = $join_cond;
+                       $join_cond_ts_tags = [];
                }
 
                $fields['ts_tags'] = wfGetDB( DB_REPLICA )->buildGroupConcatField(
-                       ',', $tagTables, $field, $join_cond_ts_tags
+                       ',', $tagTables, $field, $join_cond, $join_cond_ts_tags
                );
 
                if ( $wgUseTagFilter && $filter_tag ) {
index a531cd1..36d72c2 100644 (file)
@@ -211,6 +211,7 @@ class SquidPurgeClient {
                        $request[] = "PURGE $path HTTP/1.1";
                        $request[] = "Host: $host";
                } else {
+                       wfDeprecated( '$wgSquidPurgeUseHostHeader = false', '1.33' );
                        $request[] = "PURGE $url HTTP/1.0";
                }
                $request[] = "Connection: Keep-Alive";
index b23085d..8fea3ec 100644 (file)
@@ -560,6 +560,8 @@ class IcuCollation extends Collation {
                $versionPrefix = substr( $icuVersion, 0, 3 );
                // Source: http://site.icu-project.org/download
                $map = [
+                       '63.' => '11.0',
+                       '62.' => '11.0',
                        '61.' => '10.0',
                        '60.' => '10.0',
                        '59.' => '9.0',
diff --git a/includes/compat/normal/UtfNormal.php b/includes/compat/normal/UtfNormal.php
deleted file mode 100644 (file)
index bce1ea6..0000000
+++ /dev/null
@@ -1,136 +0,0 @@
-<?php
-/**
- * Unicode normalization routines
- *
- * Copyright © 2004 Brion Vibber <brion@pobox.com>
- * https://www.mediawiki.org/
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup UtfNormal
- */
-
-/**
- * @defgroup UtfNormal UtfNormal
- */
-
-use UtfNormal\Validator;
-
-/**
- * Unicode normalization routines for working with UTF-8 strings.
- * Currently assumes that input strings are valid UTF-8!
- *
- * Not as fast as I'd like, but should be usable for most purposes.
- * UtfNormal::toNFC() will bail early if given ASCII text or text
- * it can quickly determine is already normalized.
- *
- * All functions can be called static.
- *
- * See description of forms at https://www.unicode.org/reports/tr15/
- *
- * @deprecated since 1.25, use UtfNormal\Validator directly
- * @ingroup UtfNormal
- */
-class UtfNormal {
-       /**
-        * The ultimate convenience function! Clean up invalid UTF-8 sequences,
-        * and convert to normal form C, canonical composition.
-        *
-        * Fast return for pure ASCII strings; some lesser optimizations for
-        * strings containing only known-good characters. Not as fast as toNFC().
-        *
-        * @param string $string a UTF-8 string
-        * @return string a clean, shiny, normalized UTF-8 string
-        */
-       static function cleanUp( $string ) {
-               wfDeprecated( __METHOD__, '1.25' );
-               return Validator::cleanUp( $string );
-       }
-
-       /**
-        * Convert a UTF-8 string to normal form C, canonical composition.
-        * Fast return for pure ASCII strings; some lesser optimizations for
-        * strings containing only known-good characters.
-        *
-        * @param string $string a valid UTF-8 string. Input is not validated.
-        * @return string a UTF-8 string in normal form C
-        */
-       static function toNFC( $string ) {
-               wfDeprecated( __METHOD__, '1.25' );
-               return Validator::toNFC( $string );
-       }
-
-       /**
-        * Convert a UTF-8 string to normal form D, canonical decomposition.
-        * Fast return for pure ASCII strings.
-        *
-        * @param string $string a valid UTF-8 string. Input is not validated.
-        * @return string a UTF-8 string in normal form D
-        */
-       static function toNFD( $string ) {
-               wfDeprecated( __METHOD__, '1.25' );
-               return Validator::toNFD( $string );
-       }
-
-       /**
-        * Convert a UTF-8 string to normal form KC, compatibility composition.
-        * This may cause irreversible information loss, use judiciously.
-        * Fast return for pure ASCII strings.
-        *
-        * @param string $string a valid UTF-8 string. Input is not validated.
-        * @return string a UTF-8 string in normal form KC
-        */
-       static function toNFKC( $string ) {
-               wfDeprecated( __METHOD__, '1.25' );
-               return Validator::toNFKC( $string );
-       }
-
-       /**
-        * Convert a UTF-8 string to normal form KD, compatibility decomposition.
-        * This may cause irreversible information loss, use judiciously.
-        * Fast return for pure ASCII strings.
-        *
-        * @param string $string a valid UTF-8 string. Input is not validated.
-        * @return string a UTF-8 string in normal form KD
-        */
-       static function toNFKD( $string ) {
-               wfDeprecated( __METHOD__, '1.25' );
-               return Validator::toNFKD( $string );
-       }
-
-       /**
-        * Returns true if the string is _definitely_ in NFC.
-        * Returns false if not or uncertain.
-        * @param string $string a valid UTF-8 string. Input is not validated.
-        * @return bool
-        */
-       static function quickIsNFC( $string ) {
-               wfDeprecated( __METHOD__, '1.25' );
-               return Validator::quickIsNFC( $string );
-       }
-
-       /**
-        * Returns true if the string is _definitely_ in NFC.
-        * Returns false if not or uncertain.
-        * @param string &$string a UTF-8 string, altered on output to be valid UTF-8 safe for XML.
-        * @return bool
-        */
-       static function quickIsNFCVerify( &$string ) {
-               wfDeprecated( __METHOD__, '1.25' );
-               return Validator::quickIsNFCVerify( $string );
-       }
-}
index 8e71131..ef447d1 100644 (file)
@@ -254,11 +254,7 @@ class KafkaHandler extends AbstractProcessingHandler {
         * @param array $records List of records to append
         */
        protected function addMessages( $channel, array $records ) {
-               if ( isset( $this->options['alias'][$channel] ) ) {
-                       $topic = $this->options['alias'][$channel];
-               } else {
-                       $topic = "monolog_$channel";
-               }
+               $topic = $this->options['alias'][$channel] ?? "monolog_$channel";
                $partition = $this->getRandomPartition( $topic );
                if ( $partition !== null ) {
                        $this->produce->setMessages( $topic, $partition, $records );
diff --git a/includes/deferred/JobQueueEnqueueUpdate.php b/includes/deferred/JobQueueEnqueueUpdate.php
new file mode 100644 (file)
index 0000000..1691da2
--- /dev/null
@@ -0,0 +1,64 @@
+<?php
+/**
+ * Handler for triggering the enqueuing of lazy-pushed jobs
+ *
+ * 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
+ */
+
+use Wikimedia\Assert\Assert;
+
+/**
+ * Enqueue lazy-pushed jobs that have accumulated from JobQueueGroup
+ *
+ * @ingroup JobQueue
+ * @since 1.33
+ */
+class JobQueueEnqueueUpdate implements DeferrableUpdate, MergeableUpdate {
+       /** @var array[] Map of (domain ID => IJobSpecification[]) */
+       private $jobsByDomain;
+
+       /**
+        * @param string $domain DB domain ID
+        * @param IJobSpecification[] $jobs
+        */
+       public function __construct( $domain, array $jobs ) {
+               $this->jobsByDomain[$domain] = $jobs;
+       }
+
+       public function merge( MergeableUpdate $update ) {
+               /** @var JobQueueEnqueueUpdate $update */
+               Assert::parameterType( __CLASS__, $update, '$update' );
+
+               foreach ( $update->jobsByDomain as $domain => $jobs ) {
+                       $this->jobsByDomain[$domain] = $this->jobsByDomain[$domain] ?? [];
+                       $this->jobsByDomain[$domain] = array_merge( $this->jobsByDomain[$domain], $jobs );
+               }
+       }
+
+       public function doUpdate() {
+               foreach ( $this->jobsByDomain as $domain => $jobs ) {
+                       $group = JobQueueGroup::singleton( $domain );
+                       try {
+                               $group->push( $jobs );
+                       } catch ( Exception $e ) {
+                               // Get in as many jobs as possible and let other post-send updates happen
+                               MWExceptionHandler::logException( $e );
+                       }
+               }
+       }
+}
index 8eeef13..6ae2bcc 100644 (file)
@@ -1,8 +1,17 @@
 <?php
 
 /**
- * Interface that deferrable updates can implement. DeferredUpdates uses this to merge
- * all pending updates of PHP class into a single update by calling merge().
+ * Interface that deferrable updates can implement to signal that updates can be combined.
+ *
+ * DeferredUpdates uses this to merge all pending updates of PHP class into a single update
+ * by calling merge(). Note that upon merge(), the combined update goes to the back of the FIFO
+ * queue so that such updates occur after related non-mergeable deferred updates. For example,
+ * suppose updates that purge URLs can be merged, and the calling pattern is:
+ *   - a) DeferredUpdates::addUpdate( $purgeCdnUrlsA );
+ *   - b) DeferredUpdates::addUpdate( $deleteContentUrlsB );
+ *   - c) DeferredUpdates::addUpdate( $purgeCdnUrlsB )
+ *
+ * The purges for urls A and B will all happen after the $deleteContentUrlsB update.
  *
  * @since 1.27
  */
diff --git a/includes/deferred/UserEditCountUpdate.php b/includes/deferred/UserEditCountUpdate.php
new file mode 100644 (file)
index 0000000..5194e4f
--- /dev/null
@@ -0,0 +1,113 @@
+<?php
+/**
+ * User edit count incrementing.
+ *
+ * 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
+ */
+
+use Wikimedia\Assert\Assert;
+use MediaWiki\MediaWikiServices;
+
+/**
+ * Handles increment the edit count for a given set of users
+ */
+class UserEditCountUpdate implements DeferrableUpdate, MergeableUpdate {
+       /** @var array[] Map of (user ID => ('increment': int, 'instances': User[])) */
+       private $infoByUser;
+
+       /**
+        * @param User $user
+        * @param int $increment
+        */
+       public function __construct( User $user, $increment ) {
+               if ( !$user->getId() ) {
+                       throw new RuntimeException( "Got user ID of zero" );
+               }
+               $this->infoByUser = [
+                       $user->getId() => [ 'increment' => $increment, 'instances' => [ $user ] ]
+               ];
+       }
+
+       public function merge( MergeableUpdate $update ) {
+               /** @var UserEditCountUpdate $update */
+               Assert::parameterType( __CLASS__, $update, '$update' );
+
+               foreach ( $update->infoByUser as $userId => $info ) {
+                       if ( !isset( $this->infoByUser[$userId] ) ) {
+                               $this->infoByUser[$userId] = [ 'increment' => 0, 'instances' => [] ];
+                       }
+                       // Merge the increment amount
+                       $this->infoByUser[$userId]['increment'] += $info['increment'];
+                       // Merge the list of User instances to update in doUpdate()
+                       foreach ( $info['instances'] as $user ) {
+                               if ( !in_array( $user, $this->infoByUser[$userId]['instances'], true ) ) {
+                                       $this->infoByUser[$userId]['instances'][] = $user;
+                               }
+                       }
+               }
+       }
+
+       /**
+        * Purges the list of URLs passed to the constructor.
+        */
+       public function doUpdate() {
+               $lb = MediaWikiServices::getInstance()->getDBLoadBalancer();
+               $dbw = $lb->getConnection( DB_MASTER );
+
+               ( new AutoCommitUpdate( $dbw, __METHOD__, function () use ( $lb, $dbw ) {
+                       foreach ( $this->infoByUser as $userId => $info ) {
+                               $dbw->update(
+                                       'user',
+                                       [ 'user_editcount=user_editcount+' . (int)$info['increment'] ],
+                                       [ 'user_id' => $userId, 'user_editcount IS NOT NULL' ],
+                                       __METHOD__
+                               );
+                               /** @var User[] $affectedInstances */
+                               $affectedInstances = $info['instances'];
+                               // Lazy initialization check...
+                               if ( $dbw->affectedRows() == 0 ) {
+                                       // No rows will be "affected" if user_editcount is NULL.
+                                       // Check if the generic "replica" connection is not the master.
+                                       $dbr = $lb->getConnection( DB_REPLICA );
+                                       if ( $dbr !== $dbw ) {
+                                               // This method runs after the new revisions were committed.
+                                               // Wait for the replica to catch up so they will all be counted.
+                                               $dbr->flushSnapshot( __METHOD__ );
+                                               $lb->safeWaitForMasterPos( $dbr );
+                                       }
+                                       $affectedInstances[0]->initEditCountInternal();
+                               }
+                               $newCount = (int)$dbw->selectField(
+                                       'user',
+                                       [ 'user_editcount' ],
+                                       [ 'user_id' => $userId ],
+                                       __METHOD__
+                               );
+
+                               // Update the edit count in the instance caches. This is mostly useful
+                               // for maintenance scripts, where deferred updates might run immediately
+                               // and user instances might be reused for a long time.
+                               foreach ( $affectedInstances as $affectedInstance ) {
+                                       $affectedInstance->setEditCountInternal( $newCount );
+                               }
+                               // Clear the edit count in user cache too
+                               $affectedInstances[0]->invalidateCache();
+                       }
+               } ) )->doUpdate();
+       }
+}
index f8f3d1c..8d0971e 100644 (file)
@@ -1665,11 +1665,8 @@ class DifferenceEngine extends ContextSource {
         * @param Language $lang
         * @since 1.19
         */
-       public function setTextLanguage( $lang ) {
-               if ( !$lang instanceof Language ) {
-                       wfDeprecated( __METHOD__ . ' with other type than Language for $lang', '1.32' );
-               }
-               $this->mDiffLang = wfGetLangObj( $lang );
+       public function setTextLanguage( Language $lang ) {
+               $this->mDiffLang = $lang;
        }
 
        /**
index 1f2b81d..32f7519 100644 (file)
@@ -55,7 +55,7 @@ class WikiExporter {
        const TEXT = 0;
        const STUB = 1;
 
-       const BATCH_SIZE = 1000;
+       const BATCH_SIZE = 50000;
 
        /** @var int */
        public $text;
@@ -367,8 +367,9 @@ class WikiExporter {
                } elseif ( $this->history & self::FULL ) {
                        # Full history dumps...
                        # query optimization for history stub dumps
-                       if ( $this->text == self::STUB && $orderRevs ) {
+                       if ( $this->text == self::STUB ) {
                                $tables = $revQuery['tables'];
+                               $opts[] = 'STRAIGHT_JOIN';
                                $opts['USE INDEX']['revision'] = 'rev_page_id';
                                unset( $join['revision'] );
                                $join['page'] = [ 'INNER JOIN', 'rev_page=page_id' ];
index 455d38f..3225625 100644 (file)
@@ -137,6 +137,9 @@ class FileRepo {
        /** @var string Secret key to pass as an X-Swift-Secret header to the proxied thumb service */
        protected $thumbProxySecret;
 
+       /** @var WANObjectCache */
+       protected $wanCache;
+
        /**
         * @param array|null $info
         * @throws MWException
@@ -200,6 +203,8 @@ class FileRepo {
                }
 
                $this->supportsSha1URLs = !empty( $info['supportsSha1URLs'] );
+
+               $this->wanCache = $info['wanCache'] ?? WANObjectCache::newEmpty();
        }
 
        /**
@@ -1507,7 +1512,7 @@ class FileRepo {
         * @throws MWException
         */
        protected function resolveToStoragePath( $path ) {
-               if ( $this->isVirtualUrl( $path ) ) {
+               if ( self::isVirtualUrl( $path ) ) {
                        return $this->resolveVirtualUrl( $path );
                }
 
@@ -1818,7 +1823,7 @@ class FileRepo {
        /**
         * Get a key on the primary cache for this repository.
         * Returns false if the repository's cache is not accessible at this site.
-        * The parameters are the parts of the key, as for wfMemcKey().
+        * The parameters are the parts of the key.
         *
         * STUB
         * @return bool
@@ -1830,7 +1835,7 @@ class FileRepo {
        /**
         * Get a key for this repo in the local cache domain. These cache keys are
         * not shared with remote instances of the repo.
-        * The parameters are the parts of the key, as for wfMemcKey().
+        * The parameters are the parts of the key.
         *
         * @return string
         */
@@ -1838,7 +1843,7 @@ class FileRepo {
                $args = func_get_args();
                array_unshift( $args, 'filerepo', $this->getName() );
 
-               return wfMemcKey( ...$args );
+               return $this->wanCache->makeKey( ...$args );
        }
 
        /**
index c20df76..9e4b6df 100644 (file)
@@ -22,7 +22,6 @@
  */
 
 use MediaWiki\Logger\LoggerFactory;
-use MediaWiki\MediaWikiServices;
 
 /**
  * A foreign repository with a remote MediaWiki with an API thingy
@@ -333,7 +332,6 @@ class ForeignAPIRepo extends FileRepo {
         * @return bool|string
         */
        function getThumbUrlFromCache( $name, $width, $height, $params = "" ) {
-               $cache = MediaWikiServices::getInstance()->getMainWANObjectCache();
                // We can't check the local cache using FileRepo functions because
                // we override fileExistsBatch(). We have to use the FileBackend directly.
                $backend = $this->getBackend(); // convenience
@@ -346,7 +344,7 @@ class ForeignAPIRepo extends FileRepo {
                $sizekey = "$width:$height:$params";
 
                /* Get the array of urls that we already know */
-               $knownThumbUrls = $cache->get( $key );
+               $knownThumbUrls = $this->wanCache->get( $key );
                if ( !$knownThumbUrls ) {
                        /* No knownThumbUrls for this file */
                        $knownThumbUrls = [];
@@ -392,7 +390,7 @@ class ForeignAPIRepo extends FileRepo {
                        if ( $remoteModified < $modified && $diff < $this->fileCacheExpiry ) {
                                /* Use our current and already downloaded thumbnail */
                                $knownThumbUrls[$sizekey] = $localUrl;
-                               $cache->set( $key, $knownThumbUrls, $this->apiThumbCacheExpiry );
+                               $this->wanCache->set( $key, $knownThumbUrls, $this->apiThumbCacheExpiry );
 
                                return $localUrl;
                        }
@@ -417,9 +415,9 @@ class ForeignAPIRepo extends FileRepo {
                $knownThumbUrls[$sizekey] = $localUrl;
 
                $ttl = $mtime
-                       ? $cache->adaptiveTTL( $mtime, $this->apiThumbCacheExpiry )
+                       ? $this->wanCache->adaptiveTTL( $mtime, $this->apiThumbCacheExpiry )
                        : $this->apiThumbCacheExpiry;
-               $cache->set( $key, $knownThumbUrls, $ttl );
+               $this->wanCache->set( $key, $knownThumbUrls, $ttl );
                wfDebug( __METHOD__ . " got local thumb $localUrl, saving to cache \n" );
 
                return $localUrl;
@@ -570,22 +568,21 @@ class ForeignAPIRepo extends FileRepo {
                        $url = $this->makeUrl( $query, 'api' );
                }
 
-               $cache = MediaWikiServices::getInstance()->getMainWANObjectCache();
-               return $cache->getWithSetCallback(
+               return $this->wanCache->getWithSetCallback(
                        $this->getLocalCacheKey( static::class, $target, md5( $url ) ),
                        $cacheTTL,
-                       function ( $curValue, &$ttl ) use ( $url, $cache ) {
+                       function ( $curValue, &$ttl ) use ( $url ) {
                                $html = self::httpGet( $url, 'default', [], $mtime );
                                if ( $html !== false ) {
-                                       $ttl = $mtime ? $cache->adaptiveTTL( $mtime, $ttl ) : $ttl;
+                                       $ttl = $mtime ? $this->wanCache->adaptiveTTL( $mtime, $ttl ) : $ttl;
                                } else {
-                                       $ttl = $cache->adaptiveTTL( $mtime, $ttl );
+                                       $ttl = $this->wanCache->adaptiveTTL( $mtime, $ttl );
                                        $html = null; // caches negatives
                                }
 
                                return $html;
                        },
-                       [ 'pcTTL' => $cache::TTL_PROC_LONG ]
+                       [ 'pcTTL' => WANObjectCache::TTL_PROC_LONG ]
                );
        }
 
index 302b194..ad6ec47 100644 (file)
@@ -23,7 +23,7 @@
 
 use MediaWiki\MediaWikiServices;
 use Wikimedia\Rdbms\IDatabase;
-use Wikimedia\Rdbms\LoadBalancer;
+use Wikimedia\Rdbms\ILoadBalancer;
 
 /**
  * A foreign repository with a MediaWiki database accessible via the configured LBFactory
@@ -34,12 +34,6 @@ class ForeignDBViaLBRepo extends LocalRepo {
        /** @var string */
        protected $wiki;
 
-       /** @var string */
-       protected $dbName;
-
-       /** @var string */
-       protected $tablePrefix;
-
        /** @var array */
        protected $fileFactory = [ ForeignDBFile::class, 'newFromTitle' ];
 
@@ -55,7 +49,6 @@ class ForeignDBViaLBRepo extends LocalRepo {
        function __construct( $info ) {
                parent::__construct( $info );
                $this->wiki = $info['wiki'];
-               list( $this->dbName, $this->tablePrefix ) = wfSplitWikiID( $this->wiki );
                $this->hasSharedCache = $info['hasSharedCache'];
        }
 
@@ -83,10 +76,11 @@ class ForeignDBViaLBRepo extends LocalRepo {
        }
 
        /**
-        * @return LoadBalancer
+        * @return ILoadBalancer
         */
        protected function getDBLoadBalancer() {
                $lbFactory = MediaWikiServices::getInstance()->getDBLoadBalancerFactory();
+
                return $lbFactory->getMainLB( $this->wiki );
        }
 
index c889e56..b3eae90 100644 (file)
@@ -23,7 +23,7 @@
  */
 
 use MediaWiki\MediaWikiServices;
-use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IResultWrapper;
 use Wikimedia\Rdbms\Database;
 use Wikimedia\Rdbms\IDatabase;
 
@@ -201,7 +201,7 @@ class LocalRepo extends FileRepo {
                }
 
                $method = __METHOD__;
-               $redirDbKey = MediaWikiServices::getInstance()->getMainWANObjectCache()->getWithSetCallback(
+               $redirDbKey = $this->wanCache->getWithSetCallback(
                        $memcKey,
                        $expiry,
                        function ( $oldValue, &$ttl, array &$setOpts ) use ( $method, $title ) {
@@ -275,7 +275,7 @@ class LocalRepo extends FileRepo {
                        );
                };
 
-               $applyMatchingFiles = function ( ResultWrapper $res, &$searchSet, &$finalFiles )
+               $applyMatchingFiles = function ( IResultWrapper $res, &$searchSet, &$finalFiles )
                        use ( $fileMatchesSearch, $flags )
                {
                        $contLang = MediaWikiServices::getInstance()->getContentLanguage();
@@ -500,14 +500,14 @@ class LocalRepo extends FileRepo {
        /**
         * Get a key on the primary cache for this repository.
         * Returns false if the repository's cache is not accessible at this site.
-        * The parameters are the parts of the key, as for wfMemcKey().
+        * The parameters are the parts of the key.
         *
         * @return string
         */
        function getSharedCacheKey( /*...*/ ) {
                $args = func_get_args();
 
-               return wfMemcKey( ...$args );
+               return $this->wanCache->makeKey( ...$args );
        }
 
        /**
@@ -521,7 +521,7 @@ class LocalRepo extends FileRepo {
                if ( $key ) {
                        $this->getMasterDB()->onTransactionPreCommitOrIdle(
                                function () use ( $key ) {
-                                       MediaWikiServices::getInstance()->getMainWANObjectCache()->delete( $key );
+                                       $this->wanCache->delete( $key );
                                },
                                __METHOD__
                        );
index f3fed57..b6c70ab 100644 (file)
@@ -21,6 +21,8 @@
  * @ingroup FileRepo
  */
 
+use MediaWiki\MediaWikiServices;
+
 /**
  * Prioritized list of file repositories
  *
@@ -61,6 +63,7 @@ class RepoGroup {
                        return self::$instance;
                }
                global $wgLocalFileRepo, $wgForeignFileRepos;
+               /** @var array $wgLocalFileRepo */
                self::$instance = new RepoGroup( $wgLocalFileRepo, $wgForeignFileRepos );
 
                return self::$instance;
@@ -164,7 +167,7 @@ class RepoGroup {
                        }
                }
 
-               $image = $image ?: false; // type sanity
+               $image = $image instanceof File ? $image : false; // type sanity
                # Cache file existence or non-existence
                if ( $useCache && ( !$image || $image->isCacheable() ) ) {
                        $this->cache->setField( $dbkey, $timeKey, $image );
@@ -317,7 +320,7 @@ class RepoGroup {
        /**
         * Get the repo instance with a given key.
         * @param string|int $index
-        * @return bool|LocalRepo
+        * @return bool|FileRepo
         */
        function getRepo( $index ) {
                if ( !$this->reposInitialised ) {
@@ -354,7 +357,10 @@ class RepoGroup {
         * @return LocalRepo
         */
        function getLocalRepo() {
-               return $this->getRepo( 'local' );
+               /** @var LocalRepo $repo */
+               $repo = $this->getRepo( 'local' );
+
+               return $repo;
        }
 
        /**
@@ -413,6 +419,9 @@ class RepoGroup {
        protected function newRepo( $info ) {
                $class = $info['class'];
 
+               $cache = MediaWikiServices::getInstance()->getMainWANObjectCache();
+               $info['wanCache'] = $cache;
+
                return new $class( $info );
        }
 
index 254ceff..ebbc8f8 100644 (file)
@@ -1543,8 +1543,8 @@ class LocalFile extends File {
                        }
                        if ( $wgCommentTableSchemaMigrationStage >= MIGRATION_WRITE_BOTH ) {
                                $tables[] = 'image_comment_temp';
-                               $fields['oi_description_id'] =
-                                       'CASE WHEN img_description_id = 0 THEN imgcomment_description_id ELSE img_description_id END';
+                               $fields['oi_description_id'] = 'CASE WHEN img_description_id = 0 '
+                                       . 'THEN COALESCE(imgcomment_description_id, 0) ELSE img_description_id END';
                                $joins['image_comment_temp'] = [
                                        $wgCommentTableSchemaMigrationStage === MIGRATION_NEW ? 'JOIN' : 'LEFT JOIN',
                                        [ 'imgcomment_name = img_name' ]
@@ -1570,7 +1570,13 @@ class LocalFile extends File {
                                        [ 'image_comment_temp' => [ 'LEFT JOIN', [ 'imgcomment_name = img_name' ] ] ]
                                );
                                foreach ( $res as $row ) {
-                                       $commentStore->insert( $dbw, 'img_description', $row->img_description );
+                                       $imgFields = $commentStore->insert( $dbw, 'img_description', $row->img_description );
+                                       $dbw->update(
+                                               'image',
+                                               $imgFields,
+                                               [ 'img_name' => $row->img_name ],
+                                               __METHOD__
+                                       );
                                }
                        }
 
@@ -2539,8 +2545,8 @@ class LocalFileDeleteBatch {
                        }
                        if ( $wgCommentTableSchemaMigrationStage >= MIGRATION_WRITE_BOTH ) {
                                $tables[] = 'image_comment_temp';
-                               $fields['fa_description_id'] =
-                                       'CASE WHEN img_description_id = 0 THEN imgcomment_description_id ELSE img_description_id END';
+                               $fields['fa_description_id'] = 'CASE WHEN img_description_id = 0 '
+                                       . 'THEN COALESCE(imgcomment_description_id, 0) ELSE img_description_id END';
                                $joins['image_comment_temp'] = [
                                        $wgCommentTableSchemaMigrationStage === MIGRATION_NEW ? 'JOIN' : 'LEFT JOIN',
                                        [ 'imgcomment_name = img_name' ]
@@ -2566,7 +2572,13 @@ class LocalFileDeleteBatch {
                                        [ 'image_comment_temp' => [ 'LEFT JOIN', [ 'imgcomment_name = img_name' ] ] ]
                                );
                                foreach ( $res as $row ) {
-                                       $commentStore->insert( $dbw, 'img_description', $row->img_description );
+                                       $imgFields = $commentStore->insert( $dbw, 'img_description', $row->img_description );
+                                       $dbw->update(
+                                               'image',
+                                               $imgFields,
+                                               [ 'img_name' => $row->img_name ],
+                                               __METHOD__
+                                       );
                                }
                        }
 
index 52a18eb..c6882c4 100644 (file)
@@ -81,9 +81,6 @@ use Wikimedia\ObjectFactory;
  *    'help-inline'         -- Whether help text (defined using options above) will be shown
  *                             inline after the input field, rather than in a popup.
  *                             Defaults to true. Only used by OOUI form fields.
- *    'notice'              -- (deprecated, use 'help' instead)
- *    'notice-messages'     -- (deprecated, use 'help-messages' instead)
- *    'notice-message'      -- (deprecated, use 'help-message' instead)
  *    'required'            -- passed through to the object, indicating that it
  *                             is a required field.
  *    'size'                -- the length of text fields
@@ -175,6 +172,7 @@ class HTMLForm extends ContextSource {
                'title' => HTMLTitleTextField::class,
                'user' => HTMLUserTextField::class,
                'usersmultiselect' => HTMLUsersMultiselectField::class,
+               'titlesmultiselect' => HTMLTitlesMultiselectField::class,
        ];
 
        public $mFieldData;
index 8902995..5f99aa0 100644 (file)
@@ -462,16 +462,6 @@ abstract class HTMLFormField {
                if ( isset( $params['hide-if'] ) ) {
                        $this->mHideIf = $params['hide-if'];
                }
-
-               if ( isset( $this->mParams['notice-message'] ) ) {
-                       wfDeprecated( "'notice-message' parameter in HTMLForm", '1.32' );
-               }
-               if ( isset( $this->mParams['notice-messages'] ) ) {
-                       wfDeprecated( "'notice-messages' parameter in HTMLForm", '1.32' );
-               }
-               if ( isset( $this->mParams['notice'] ) ) {
-                       wfDeprecated( "'notice' parameter in HTMLForm", '1.32' );
-               }
        }
 
        /**
@@ -617,17 +607,11 @@ abstract class HTMLFormField {
                        $error = new OOUI\HtmlSnippet( $error );
                }
 
-               $notices = $this->getNotices( 'skip deprecation' );
-               foreach ( $notices as &$notice ) {
-                       $notice = new OOUI\HtmlSnippet( $notice );
-               }
-
                $config = [
                        'classes' => [ "mw-htmlform-field-$fieldType", $this->mClass ],
                        'align' => $this->getLabelAlignOOUI(),
                        'help' => ( $help !== null && $help !== '' ) ? new OOUI\HtmlSnippet( $help ) : null,
                        'errors' => $errors,
-                       'notices' => $notices,
                        'infusable' => $infusable,
                        'helpInline' => $this->isHelpInline(),
                ];
@@ -926,37 +910,6 @@ abstract class HTMLFormField {
                return $errors;
        }
 
-       /**
-        * Determine notices to display for the field.
-        *
-        * @since 1.28
-        * @deprecated since 1.32
-        * @param string $skipDeprecation Pass 'skip deprecation' to avoid the deprecation
-        *   warning (since 1.32)
-        * @return string[]
-        */
-       public function getNotices( $skipDeprecation = null ) {
-               if ( $skipDeprecation !== 'skip deprecation' ) {
-                       wfDeprecated( __METHOD__, '1.32' );
-               }
-
-               $notices = [];
-
-               if ( isset( $this->mParams['notice-message'] ) ) {
-                       $notices[] = $this->getMessage( $this->mParams['notice-message'] )->parse();
-               }
-
-               if ( isset( $this->mParams['notice-messages'] ) ) {
-                       foreach ( $this->mParams['notice-messages'] as $msg ) {
-                               $notices[] = $this->getMessage( $msg )->parse();
-                       }
-               } elseif ( isset( $this->mParams['notice'] ) ) {
-                       $notices[] = $this->mParams['notice'];
-               }
-
-               return $notices;
-       }
-
        /**
         * @return string HTML
         */
index 716a092..03e479b 100644 (file)
@@ -66,8 +66,8 @@ class HTMLFormFieldWithButton extends HTMLFormField {
 
        /**
         * Combines the passed element with a button.
-        * @param String $element Element to combine the button with.
-        * @return String
+        * @param string $element Element to combine the button with.
+        * @return string
         */
        public function getElement( $element ) {
                return $element . "\u{00A0}" . $this->getInputHTML( '' );
index e9ecc40..477cc4c 100644 (file)
@@ -228,11 +228,7 @@ class HTMLMultiSelectField extends HTMLFormField implements HTMLNestedFilterable
        }
 
        public function getDefault() {
-               if ( isset( $this->mDefault ) ) {
-                       return $this->mDefault;
-               } else {
-                       return [];
-               }
+               return $this->mDefault ?? [];
        }
 
        public function filterDataForSubmit( $data ) {
diff --git a/includes/htmlform/fields/HTMLTitlesMultiselectField.php b/includes/htmlform/fields/HTMLTitlesMultiselectField.php
new file mode 100644 (file)
index 0000000..c93c940
--- /dev/null
@@ -0,0 +1,120 @@
+<?php
+
+use MediaWiki\Widget\TitlesMultiselectWidget;
+
+/**
+ * Implements a tag multiselect input field for titles.
+ *
+ * Besides the parameters recognized by HTMLTitleTextField, additional recognized
+ * parameters are:
+ *  default - (optional) Array of usernames to use as preset data
+ *  placeholder - (optional) Custom placeholder message for input
+ *
+ * The result is the array of titles
+ *
+ * This widget is a duplication of HTMLUsersMultiselectField, except for:
+ * - The configuration variable changed to 'titles' (from 'users')
+ * - OOUI modules were adjusted for the TitlesMultiselectWidget
+ * - The PHP version instantiates a MediaWiki\Widget\TitlesMultiselectWidget
+ *
+ * @note This widget is not likely to remain functional in non-OOUI forms.
+ */
+class HTMLTitlesMultiselectField extends HTMLTitleTextField {
+       public function __construct( $params ) {
+               $params += [
+                       // This overrides the default from HTMLTitleTextField
+                       'required' => false,
+               ];
+
+               parent::__construct( $params );
+       }
+
+       public function loadDataFromRequest( $request ) {
+               $value = $request->getText( $this->mName, $this->getDefault() );
+
+               $titlesArray = explode( "\n", $value );
+               // Remove empty lines
+               $titlesArray = array_values( array_filter( $titlesArray, function ( $title ) {
+                       return trim( $title ) !== '';
+               } ) );
+               // This function is expected to return a string
+               return implode( "\n", $titlesArray );
+       }
+
+       public function validate( $value, $alldata ) {
+               if ( !$this->mParams['exists'] ) {
+                       return true;
+               }
+
+               if ( is_null( $value ) ) {
+                       return false;
+               }
+
+               // $value is a string, because HTMLForm fields store their values as strings
+               $titlesArray = explode( "\n", $value );
+
+               if ( isset( $this->mParams['max'] ) ) {
+                       if ( count( $titlesArray ) > $this->mParams['max'] ) {
+                               return $this->msg( 'htmlform-int-toohigh', $this->mParams['max'] );
+                       }
+               }
+
+               foreach ( $titlesArray as $title ) {
+                       $result = parent::validate( $title, $alldata );
+                       if ( $result !== true ) {
+                               return $result;
+                       }
+               }
+
+               return true;
+       }
+
+       public function getInputHTML( $value ) {
+               $this->mParent->getOutput()->enableOOUI();
+               return $this->getInputOOUI( $value );
+       }
+
+       public function getInputOOUI( $value ) {
+               $params = [
+                       'id' => $this->mID,
+                       'name' => $this->mName,
+                       'dir' => $this->mDir,
+               ];
+
+               if ( isset( $this->mParams['disabled'] ) ) {
+                       $params['disabled'] = $this->mParams['disabled'];
+               }
+
+               if ( isset( $this->mParams['default'] ) ) {
+                       $params['default'] = $this->mParams['default'];
+               }
+
+               if ( isset( $this->mParams['placeholder'] ) ) {
+                       $params['placeholder'] = $this->mParams['placeholder'];
+               } else {
+                       $params['placeholder'] = $this->msg( 'mw-widgets-titlesmultiselect-placeholder' )->plain();
+               }
+
+               if ( !is_null( $value ) ) {
+                       // $value is a string, but the widget expects an array
+                       $params['default'] = $value === '' ? [] : explode( "\n", $value );
+               }
+
+               // Make the field auto-infusable when it's used inside a legacy HTMLForm rather than OOUIHTMLForm
+               $params['infusable'] = true;
+               $params['classes'] = [ 'mw-htmlform-field-autoinfuse' ];
+               $widget = new TitlesMultiselectWidget( $params );
+               $widget->setAttributes( [ 'data-mw-modules' => implode( ',', $this->getOOUIModules() ) ] );
+
+               return $widget;
+       }
+
+       protected function shouldInfuseOOUI() {
+               return true;
+       }
+
+       protected function getOOUIModules() {
+               return [ 'mediawiki.widgets.TitlesMultiselectWidget' ];
+       }
+
+}
index 257955c..435c34d 100644 (file)
@@ -97,11 +97,7 @@ abstract class MWHttpRequest implements LoggerAwareInterface {
                $this->url = wfExpandUrl( $url, PROTO_HTTP );
                $this->parsedUrl = wfParseUrl( $this->url );
 
-               if ( isset( $options['logger'] ) ) {
-                       $this->logger = $options['logger'];
-               } else {
-                       $this->logger = new NullLogger();
-               }
+               $this->logger = $options['logger'] ?? new NullLogger();
 
                if ( !$this->parsedUrl || !Http::isValidURI( $this->url ) ) {
                        $this->status = StatusValue::newFatal( 'http-invalid-url', $url );
index 00a7b52..9098981 100644 (file)
@@ -914,11 +914,7 @@ class WikiImporter {
 
                        $revision->setText( $text );
                }
-               if ( isset( $revisionInfo['timestamp'] ) ) {
-                       $revision->setTimestamp( $revisionInfo['timestamp'] );
-               } else {
-                       $revision->setTimestamp( wfTimestampNow() );
-               }
+               $revision->setTimestamp( $revisionInfo['timestamp'] ?? wfTimestampNow() );
 
                if ( isset( $revisionInfo['comment'] ) ) {
                        $revision->setComment( $revisionInfo['comment'] );
index 0194822..f5d01d6 100644 (file)
@@ -164,10 +164,7 @@ abstract class DatabaseUpdater {
 
                // This will automatically add "AutoloadClasses" to $wgAutoloadClasses
                $data = $registry->readFromQueue( $queue );
-               $hooks = [];
-               if ( isset( $data['globals']['wgHooks']['LoadExtensionSchemaUpdates'] ) ) {
-                       $hooks = $data['globals']['wgHooks']['LoadExtensionSchemaUpdates'];
-               }
+               $hooks = $data['globals']['wgHooks']['LoadExtensionSchemaUpdates'] ?? [];
                if ( $vars && isset( $vars['wgHooks']['LoadExtensionSchemaUpdates'] ) ) {
                        $hooks = array_merge_recursive( $hooks, $vars['wgHooks']['LoadExtensionSchemaUpdates'] );
                }
index d51ea2e..029f67d 100644 (file)
@@ -537,11 +537,7 @@ abstract class Installer {
         * @return mixed
         */
        public function getVar( $name, $default = null ) {
-               if ( !isset( $this->settings[$name] ) ) {
-                       return $default;
-               } else {
-                       return $this->settings[$name];
-               }
+               return $this->settings[$name] ?? $default;
        }
 
        /**
@@ -1505,9 +1501,8 @@ abstract class Installer {
                $data = $registry->readFromQueue( $queue );
                $wgAutoloadClasses += $data['autoload'];
 
-               $hooksWeWant = isset( $wgHooks['LoadExtensionSchemaUpdates'] ) ?
-                       /** @suppress PhanUndeclaredVariable $wgHooks is set by DefaultSettings */
-                       $wgHooks['LoadExtensionSchemaUpdates'] : [];
+               /** @suppress PhanUndeclaredVariable $wgHooks is set by DefaultSettings */
+               $hooksWeWant = $wgHooks['LoadExtensionSchemaUpdates'] ?? [];
 
                if ( isset( $data['globals']['wgHooks']['LoadExtensionSchemaUpdates'] ) ) {
                        $hooksWeWant = array_merge_recursive(
index 1b0780b..e9a2d03 100644 (file)
@@ -192,11 +192,7 @@ class MysqlInstaller extends DatabaseInstaller {
                                        $existingSchema = false;
                                        $this->parent->showMessage( 'config-unknown-collation' );
                                }
-                               if ( isset( $row->Engine ) ) {
-                                       $existingEngine = $row->Engine;
-                               } else {
-                                       $existingEngine = $row->Type;
-                               }
+                               $existingEngine = $row->Engine ?? $row->Type;
                        }
                } else {
                        $existingSchema = false;
index d8281b0..f555c0f 100644 (file)
@@ -178,17 +178,9 @@ class WebInstaller extends Installer {
                        return $this->session;
                }
 
-               if ( isset( $session['happyPages'] ) ) {
-                       $this->happyPages = $session['happyPages'];
-               } else {
-                       $this->happyPages = [];
-               }
+               $this->happyPages = $session['happyPages'] ?? [];
 
-               if ( isset( $session['skippedPages'] ) ) {
-                       $this->skippedPages = $session['skippedPages'];
-               } else {
-                       $this->skippedPages = [];
-               }
+               $this->skippedPages = $session['skippedPages'] ?? [];
 
                $lowestUnhappy = $this->getLowestUnhappy();
 
@@ -468,11 +460,7 @@ class WebInstaller extends Installer {
         * @return array
         */
        public function getSession( $name, $default = null ) {
-               if ( !isset( $this->session[$name] ) ) {
-                       return $default;
-               } else {
-                       return $this->session[$name];
-               }
+               return $this->session[$name] ?? $default;
        }
 
        /**
@@ -932,11 +920,7 @@ class WebInstaller extends Installer {
                if ( !isset( $params['labelAttribs'] ) ) {
                        $params['labelAttribs'] = [];
                }
-               if ( isset( $params['rawtext'] ) ) {
-                       $labelText = $params['rawtext'];
-               } else {
-                       $labelText = $this->parse( wfMessage( $params['label'] )->text() );
-               }
+               $labelText = $params['rawtext'] ?? $this->parse( wfMessage( $params['label'] )->text() );
 
                return "<div class=\"config-input-check\">\n" .
                        $params['help'] .
@@ -978,11 +962,7 @@ class WebInstaller extends Installer {
        public function getRadioSet( $params ) {
                $items = $this->getRadioElements( $params );
 
-               if ( !isset( $params['label'] ) ) {
-                       $label = '';
-               } else {
-                       $label = $params['label'];
-               }
+               $label = $params['label'] ?? '';
 
                if ( !isset( $params['controlName'] ) ) {
                        $params['controlName'] = 'config_' . $params['var'];
index 43fe748..f79d272 100644 (file)
@@ -29,7 +29,7 @@ abstract class WebInstallerDocument extends WebInstallerPage {
        public function execute() {
                $text = $this->getFileContents();
                $text = InstallDocFormatter::format( $text );
-               $this->parent->output->addWikiTextInterface( $text );
+               $this->parent->output->addWikiTextAsInterface( $text );
                $this->startForm();
                $this->endForm( false );
        }
index 0c7428f..f25d57c 100644 (file)
@@ -154,16 +154,8 @@ class WebInstallerExistingWiki extends WebInstallerPage {
                        return $status;
                }
 
-               if ( isset( $vars['wgDBadminuser'] ) ) {
-                       $this->setVar( '_InstallUser', $vars['wgDBadminuser'] );
-               } else {
-                       $this->setVar( '_InstallUser', $vars['wgDBuser'] );
-               }
-               if ( isset( $vars['wgDBadminpassword'] ) ) {
-                       $this->setVar( '_InstallPassword', $vars['wgDBadminpassword'] );
-               } else {
-                       $this->setVar( '_InstallPassword', $vars['wgDBpassword'] );
-               }
+               $this->setVar( '_InstallUser', $vars['wgDBadminuser'] ?? $vars['wgDBuser'] );
+               $this->setVar( '_InstallPassword', $vars['wgDBadminpassword'] ?? $vars['wgDBpassword'] );
 
                // Test the database connection
                $status = $installer->getConnection();
index 382ed3b..953295a 100644 (file)
@@ -490,11 +490,8 @@ class WebInstallerOptions extends WebInstallerPage {
                        // config-license-cc-0, config-license-pd, config-license-gfdl, config-license-none,
                        // config-license-cc-choose
                        $entry = $this->parent->licenses[$code];
-                       if ( isset( $entry['text'] ) ) {
-                               $this->setVar( 'wgRightsText', $entry['text'] );
-                       } else {
-                               $this->setVar( 'wgRightsText', wfMessage( 'config-license-' . $code )->text() );
-                       }
+                       $this->setVar( 'wgRightsText',
+                               $entry['text'] ?? wfMessage( 'config-license-' . $code )->text() );
                        $this->setVar( 'wgRightsUrl', $entry['url'] );
                        $this->setVar( 'wgRightsIcon', $entry['icon'] );
                } else {
index dd76ce9..6c1f2ec 100644 (file)
@@ -89,17 +89,18 @@ class WebInstallerOutput {
 
        /**
         * @param string $text
-        * @deprecated since 1.32; use addWikiTextInterface instead
+        * @deprecated since 1.32; use addWikiTextAsInterface instead
         */
        public function addWikiText( $text ) {
                wfDeprecated( __METHOD__, '1.32' );
-               $this->addWikiTextInterface( $text );
+               $this->addWikiTextAsInterface( $text );
        }
 
        /**
         * @param string $text
+        * @since 1.32
         */
-       public function addWikiTextInterface( $text ) {
+       public function addWikiTextAsInterface( $text ) {
                $this->addHTML( $this->parent->parse( $text ) );
        }
 
index 0d79484..a4f031c 100644 (file)
@@ -30,12 +30,12 @@ class WebInstallerWelcome extends WebInstallerPage {
                                return 'continue';
                        }
                }
-               $this->parent->output->addWikiTextInterface( wfMessage( 'config-welcome' )->plain() );
+               $this->parent->output->addWikiTextAsInterface( wfMessage( 'config-welcome' )->plain() );
                $status = $this->parent->doEnvironmentChecks();
                if ( $status->isGood() ) {
                        $this->parent->output->addHTML( '<span class="success-message">' .
                                wfMessage( 'config-env-good' )->escaped() . '</span>' );
-                       $this->parent->output->addWikiTextInterface( wfMessage( 'config-copyright',
+                       $this->parent->output->addWikiTextAsInterface( wfMessage( 'config-copyright',
                                SpecialVersion::getCopyrightAndAuthorList() )->plain() );
                        $this->startForm();
                        $this->endForm();
index 8112ccb..47d9f48 100644 (file)
        "config-help": "مساعدة",
        "config-help-tooltip": "اضغط للتوسيع",
        "config-nofile": "لا يمكن العثور على الملف \"$1\". هل حُذف؟",
-       "config-extension-link": "هل كنت تعلم أن الويكي الخاصة بك تدعم [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions الامتدادات]؟\n\nيمكنك تصفح [https://www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category الامتدادات حسب التصنيف] أو [https://www.mediawiki.org/wiki/Extension_Matrix مصفوفة الامتدادت] لترى القائمة الكاملة للامتدادات.",
+       "config-extension-link": "هل كنت تعلم أن الويكي الخاص بك تدعم [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions الامتدادات]؟\n\nيمكنك تصفح [https://www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category الامتدادات حسب التصنيف].",
        "config-skins-screenshots": "$1 (لقطات شاشة: $2)",
        "config-extensions-requires": "$1 (يتطلب $2)",
        "config-screenshot": "لقطة شاشة",
index 4acde23..f76ffab 100644 (file)
        "config-help": "дапамога",
        "config-help-tooltip": "націсьніце, каб разгарнуць",
        "config-nofile": "Файл «$1» ня знойдзены. Ці быў ён выдалены?",
-       "config-extension-link": "Ці ведаеце вы, што вашая вікі падтрымлівае [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions пашырэньні]?\n\nВы можаце праглядзець [https://www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category пашырэньні паводле катэгорыяў] або [https://www.mediawiki.org/wiki/Extension_Matrix матрыцу пашырэньняў], каб пабачыць поўны сьпіс.",
+       "config-extension-link": "Ці ведаеце вы, што вашая вікі падтрымлівае [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions пашырэньні]?\n\nВы можаце праглядзець [https://www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category пашырэньні паводле катэгорыяў].",
        "config-skins-screenshots": "$1 (здымкі экрану: $2)",
        "config-extensions-requires": "$1 (патрабуе $2)",
        "config-screenshot": "здымак экрану",
index 3805dfa..b3bcba3 100644 (file)
        "config-install-mainpage-failed": "Вмъкването на Началната страница беше невъзможно: $1",
        "config-install-done": "<strong>Поздравления!</strong>\nИнсталирането на МедияУики приключи успешно.\n\nИнсталаторът създаде файл <code>LocalSettings.php</code>.\nТой съдържа всичката необходима основна конфигурация на уикито.\n\nНеобходимо е той да бъде изтеглен и поставен в основната директория на уикито (директорията, в която е и index.php). Изтеглянето би трябвало да започне автоматично.\n\nАко изтеглянето не започне автоматично или е било прекратено, файлът може да бъде изтеглен чрез щракване на препратката по-долу:\n\n$3\n\n<strong>Забележка:</strong> Ако това не бъде извършено сега, генерираният конфигурационен файл няма да е достъпен на по-късен етап ако не бъде изтеглен сега или инсталацията приключи без изтеглянето му.\n\nКогато файлът вече е в основната директория, <strong>[$2 уикито ще е достъпно на този адрес]</strong>.",
        "config-install-done-path": "<strong>Поздравления!</strong>\nИнсталирането на МедияУики приключи успешно.\n\nИнсталаторът създаде файл <code>LocalSettings.php</code>.\nТой съдържа всички ваши настройки.\n\nНеобходимо е той да бъде изтеглен и поставен в <code>$4</code>. Изтеглянето би трябвало да започне автоматично.\n\nАко изтеглянето не започне автоматично или е било прекратено, файлът може да бъде изтеглен чрез щракване на препратката по-долу:\n\n$3\n\n<strong>Забележка:</strong> Ако това не бъде направено сега, генерираният конфигурационен файл няма да е достъпен на по-късен етап ако не бъде изтеглен сега или инсталацията приключи без изтеглянето му.\n\nКогато файлът вече е в основната директория, <strong>[$2 уикито ще е достъпно на този адрес]</strong>.",
-       "config-install-success": "МедияУики беше успешно инсталиран. Можете да посетите <$1$2> за да видите Вашето уики.\nАко имате въпроси, вижте списъка с често задавани въпроси:\n<https://www.mediawiki.org/wiki/Manual:FAQ> или използвайте някой от форумите за поддръжка на тази страница.",
+       "config-install-success": "МедияУики беше успешно инсталиран. Можете да посетите <$1$2> за да видите Вашето уики.\n\nАко имате въпроси, вижте списъка с често задавани въпроси:\n<https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ> или използвайте някой от форумите за поддръжка на тази страница.",
        "config-download-localsettings": "Изтегляне на <code>LocalSettings.php</code>",
        "config-help": "помощ",
        "config-help-tooltip": "щракнете за разгръщане",
index 54a4596..901953b 100644 (file)
        "config-upload-deleted": "Mappe for slettede filer:",
        "config-cc-again": "Vælg igen...",
        "config-extensions": "Udvidelser",
+       "config-install-step-done": "udført",
+       "config-install-step-failed": "mislykkedes",
+       "config-install-user-alreadyexists": "Brugeren \"$1\" findes allerede",
+       "config-install-user-create-failed": "Oprettelse af brugeren \"$1\" mislykkedes: $2",
+       "config-install-tables": "Opretter tabeller",
+       "config-install-mainpage-failed": "Kunne ikke indsætte forside: $1",
        "config-help": "hjælp",
        "config-help-tooltip": "klik for at udvide",
        "config-skins-screenshots": "$1 (skærmbilleder: $2)",
index 16d7c93..b5f5764 100644 (file)
        "config-help": "Hilfe",
        "config-help-tooltip": "Zum Expandieren klicken",
        "config-nofile": "Die Datei „$1“ konnte nicht gefunden werden. Wurde sie gelöscht?",
-       "config-extension-link": "Wusstest du, dass dein Wiki die Nutzung von [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions Erweiterungen] unterstützt?\n\nDu kannst die [https://www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category Erweiterungen nach Kategorie] anzeigen oder die [https://www.mediawiki.org/wiki/Extension_Matrix Erweiterungs-Matrix] aufrufen, um eine vollständige Liste der Erweiterungen zu sehen.",
+       "config-extension-link": "Wusstest du, dass dein Wiki die Nutzung von [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions Erweiterungen] unterstützt?\n\nDu kannst die [https://www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category Erweiterungen nach Kategorie] anzeigen.",
        "config-skins-screenshots": "$1 (Bildschirmfotos: $2)",
        "config-skins-screenshot": "$1 ($2)",
        "config-extensions-requires": "$1 (erfordert $2)",
index 893df5a..5a63d32 100644 (file)
        "config-help": "help",
        "config-help-tooltip": "click to expand",
        "config-nofile": "File \"$1\" could not be found. Has it been deleted?",
-       "config-extension-link": "Did you know that your wiki supports [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions extensions]?\n\nYou can browse [https://www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category extensions by category] or the [https://www.mediawiki.org/wiki/Extension_Matrix Extension Matrix] to see the full list of extensions.",
+       "config-extension-link": "Did you know that your wiki supports [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions extensions]?\n\nYou can browse [https://www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category extensions by category].",
        "config-skins-screenshots": "$1 (screenshots: $2)",
        "config-skins-screenshot": "$1 ($2)",
        "config-extensions-requires": "$1 (requires $2)",
index 95fd726..ecddb39 100644 (file)
        "config-help": "aide",
        "config-help-tooltip": "cliquer pour agrandir",
        "config-nofile": "Le fichier « $1 » est introuvable. A-t-il été supprimé ?",
-       "config-extension-link": "Saviez-vous que votre wiki prend en charge [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions des extensions] ?\n\nVous pouvez consulter les [https://www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category extensions par catégorie] ou la [https://www.mediawiki.org/wiki/Extension_Matrix matrice des extensions] pour voir la liste complète des extensions.",
+       "config-extension-link": "Saviez-vous que votre wiki prend en charge [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions des extensions] ?\n\nVous pouvez consulter les [https://www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category extensions par catégorie].",
        "config-skins-screenshots": "$1 (captures d’écran : $2)",
        "config-extensions-requires": "$1 (nécessite $2)",
        "config-screenshot": "Captures d’écrans",
index b526d5a..c336c06 100644 (file)
        "config-help": "adjuta",
        "config-help-tooltip": "clicca pro displicar",
        "config-nofile": "Le file \"$1\" non poteva esser trovate. Ha illo essite delite?",
-       "config-extension-link": "Sapeva tu que tu wiki supporta [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions extensiones]?\n\nTu pote explorar le [https://www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category extensiones per category] o le [https://www.mediawiki.org/wiki/Extension_Matrix matrice de extensiones] pro vider le lista complete de extensiones.",
+       "config-extension-link": "Sapeva tu que tu wiki supporta [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions extensiones]?\n\nTu pote explorar le [https://www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category extensiones per categoria].",
        "config-skins-screenshots": "$1 (capturas de schermo: $2)",
        "config-extensions-requires": "$1 (require $2)",
        "config-screenshot": "captura de schermo",
index 3ad6073..a649a81 100644 (file)
@@ -23,7 +23,8 @@
                        "ネイ",
                        "Suchichi02",
                        "Omotecho",
-                       "Yusuke1109"
+                       "Yusuke1109",
+                       "Aefgh39622"
                ]
        },
        "config-desc": "MediaWiki のインストーラー",
        "config-install-mainpage-failed": "メインページを挿入できませんでした: $1",
        "config-install-done": "<strong>おめでとうございます!</strong>\nMediaWikiのインストールに成功しました。\n\n<code>LocalSettings.php</code>ファイルが生成されました。\nこのファイルはすべての設定を含んでいます。\n\nこれをダウンロードして、ウィキをインストールした基準ディレクトリ (index.phpと同じディレクトリ) に設置する必要があります。ダウンロードは自動的に開始されるはずです。\n\nダウンロードが開始されていない場合、またはダウンロードをキャンセルした場合は、下記のリンクをクリックしてダウンロードを再開できます:\n\n$3\n\n<strong>注意:</strong> この生成された設定ファイルをダウンロードせずにインストールを終了すると、このファイルは利用できなくなります。\n\n上記の作業が完了すると、<strong>[$2 ウィキに入る]</strong>ことができます。",
        "config-install-done-path": "<strong>おめでとうございます!</strong>\nMediaWikiのインストールに成功しました。\n\n<code>LocalSettings.php</code>ファイルが生成されました。\nこのファイルはすべての設定を含んでいます。\n\nこれをダウンロードして、<code>$4</code> に設置する必要があります。ダウンロードは自動的に開始されるはずです。\n\nダウンロードが開始されていない場合、またはダウンロードをキャンセルした場合は、下記のリンクをクリックしてダウンロードを再開できます:\n\n$3\n\n<strong>注意:</strong> この生成された設定ファイルをダウンロードせずにインストールを終了すると、このファイルは利用できなくなります。\n\n上記の作業が完了すると、<strong>[$2 ウィキに入る]</strong>ことができます。",
-       "config-install-success": "MediaWikiが正常にインストールされました。\n今すぐ<$1$2>にアクセスしてあなたのwikiを表示できます。\nご質問がある場合は、よくある質問リストをご覧ください:\n<https://www.mediawiki.org/wiki/Manual:FAQ>または\nそのページにリンクされているサポートフォーラム",
+       "config-install-success": "MediaWikiが正常にインストールされました。\n今すぐ<$1$2>にアクセスしてあなたのwikiを表示できます。\nご質問がある場合は、よくある質問リストをご覧ください:\n<https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ>または\nそのページにリンクされているサポートフォーラム",
        "config-download-localsettings": "<code>LocalSettings.php</code> をダウンロード",
        "config-help": "ヘルプ",
        "config-help-tooltip": "クリックで展開",
        "config-nofile": "ファイル「$1」が見つかりませんでした。削除された可能性があります。",
-       "config-extension-link": "ã\81\82ã\81ªã\81\9fã\81®ã\82¦ã\82£ã\82­ã\81¯[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions æ\8b¡å¼µæ©\9fè\83½]ã\82\92ã\82µã\83\9dã\83¼ã\83\88ã\81\97ã\81¦ã\81\84ã\82\8bã\81\93ã\81¨ã\82\92ã\81\94å­\98ç\9f¥ã\81§ã\81\99ã\81\8b?\n\n[https://www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category ã\82«ã\83\86ã\82´ã\83ªå\88¥ã\81§æ\8b¡å¼µæ©\9fè\83½ã\82\92è¦\8bã\82\8b\81\8b[https://www.mediawiki.org/wiki/Extension_Matrix æ\8b¡å¼µæ©\9fè\83½ã\81®ã\83\9eã\83\88ã\83ªã\83\83ã\82¯ã\82¹]で拡張機能すべてのリストをご覧になれます。",
+       "config-extension-link": "ã\81\94å\88©ç\94¨ã\81®ã\82¦ã\82£ã\82­ã\81¯[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions æ\8b¡å¼µæ©\9fè\83½]ã\82\92ã\82µã\83\9dã\83¼ã\83\88ã\81\97ã\81¦ã\81\84ã\82\8bã\81\93ã\81¨ã\82\92ã\81\94å­\98ç\9f¥ã\81§ã\81\97ã\81\9fã\81\8b?\n\n[https://www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category ã\80\8cã\82«ã\83\86ã\82´ã\83ªå\88¥ã\81§æ\8b¡å¼µæ©\9fè\83½ã\82\92è¦\8bã\82\8bã\80\8d\81\8b[https://www.mediawiki.org/wiki/Extension_Matrix ã\80\8cæ\8b¡å¼µæ©\9fè\83½ã\81®ã\83\9eã\83\88ã\83ªã\83\83ã\82¯ã\82¹ã\80\8d\81®ã\83\9aã\83¼ã\82¸で拡張機能すべてのリストをご覧になれます。",
        "config-skins-screenshots": "$1 (スクリーンショット: $2)",
        "config-extensions-requires": "$1($2が必要)",
        "config-screenshot": "スクリーンショット",
index 1e88f7b..fef5391 100644 (file)
        "config-install-mainpage-failed": "Kunne ikke sette inn hovedside: $1",
        "config-install-done": "<strong>Gratulrerer!</strong>\nDu har lykkes i å installere MediaWiki.\n\nInstallasjonsprogrammet har generert en <code>LocalSettings.php</code>-fil.\nDen inneholder alle dine konfigureringer.\n\nDu må laste den ned og legge den på hovedfolderen for din wiki-installasjon (der index.php ligger). Nedlastingen skulle ha startet automatisk.\n\nHvis ingen nedlasting ble tilbudt, eller du avbrøt den, kan du få den i gang ved å klikke på lenken under:\n\n$3\n\n<strong>OBS:</strong> Hvis du ikke gjør dette nå, vil den genererte konfigurasjonsfilen ikke være tilgjengelig for deg senere.\n\nNår dette er gjort, kan du <strong>[$2 gå inn i wikien]</strong>.",
        "config-install-done-path": "<strong>Gratulerer!</strong>\nDu har installert MediaWiki.\n\nInstallereren har generert en <code>LocalSettings.php</code>-fil.\nDen inneholder all konfigurasjonen for wikien.\n\nDu må laste den ned og legge den i <code>$4</code>. Nedlastingen skal ha startet automatisk.\n\nOm nedlastingen ikke ble startet, eller om du avbrøt den, kan du starte på nytt ved å klikke lenken nedenfor:\n\n$3\n\n<strong>Merk:</strong> Om du ikke gjør dette nå vil den genererte konfigurasjonen ikke være tilgjengelig senere.\n\nNår dette er gjort kan du <strong>[$2 gå til wikien din]</strong>.",
-       "config-install-success": "MediaWiki har blitt installert. Du kan nå\nbesøke <$1$2> for å se wikien din.\nOm du har spørsmål, sjekk de ofte stilte spørsmålene:\n<https://www.mediawiki.org/wiki/Manual:FAQ> eller bruk et av\nsupportforumene som lenkes til fra den siden.",
+       "config-install-success": "MediaWiki har blitt installert. Du kan nå\nbesøke <$1$2> for å se wikien din.\nOm du har spørsmål, sjekk de ofte stilte spørsmålene:\n<https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ> eller bruk et av\nsupportforumene som lenkes til fra den siden.",
        "config-download-localsettings": "Last ned <code>LocalSettings.php</code>",
        "config-help": "hjelp",
        "config-help-tooltip": "klikk for å utvide",
        "config-nofile": "Filen \"$1\" ble ikke funnet. Kan den være blitt slettet?",
-       "config-extension-link": "Visste du at wikien din kan brukes sammen med en mengde [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions utvidelser]?\n\nDu kan sjekke gjennom [https://www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category utvidelser per kategori] eller [https://www.mediawiki.org/wiki/Extension_Matrix utvidelsesmatrisen] for å se den komplette listen av utvidelser.",
+       "config-extension-link": "Visste du at wikien din kan brukes sammen med en mengde [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions utvidelser]?\n\nDu kan sjekke gjennom [https://www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category utvidelser per kategori] for å se den komplette listen av utvidelser.",
        "config-skins-screenshots": "$1 (skjermbilder: $2)",
        "config-extensions-requires": "$1 (krever $2)",
        "config-screenshot": "skjermbilde",
+       "config-extension-not-found": "Kunne ikke finne registreringsfil for utvidelsen «$1»",
+       "config-extension-dependency": "En avhengighetsfeil inntraff under installering av utvidelsen «$1»: $2",
        "mainpagetext": "<strong>MediaWiki har blitt installert.</strong>",
        "mainpagedocfooter": "Sjekk [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents brukerveiledningen] for å få informasjon om hvordan du bruker wiki-programvaren.\n\n==Hvordan komme igang==\n*[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Innstillingsliste]\n*[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Ofte stilte spørsmål om MediaWiki]\n*[https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki e-postliste]\n*[https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Tilpass MediaWiki for ditt språk]\n*[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Lær deg å beskytte deg mot spam på wikien din]"
 }
index e4a3734..9d6fe7c 100644 (file)
        "config-help": "ajuda",
        "config-help-tooltip": "clique para expandir",
        "config-nofile": "O arquivo \"$1\" não foi encontrado. Ele foi apagado?",
-       "config-extension-link": "Você sabia que sua wiki suporta [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions extensões]?\n\nVocê pode explorar as [https://www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category extensões por categoria] ou visitar a [https://www.mediawiki.org/wiki/Extension_Matrix Matriz de Extensões] para ver a lista completa.",
+       "config-extension-link": "Você sabia que sua wiki suporta [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions extensões]?\n\nVocê pode explorar as [https://www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category extensões por categoria]",
        "config-skins-screenshots": "$1 (screenshots: $2)",
        "config-extensions-requires": "$1 (requer $2)",
        "config-screenshot": "screenshot",
index 0495d50..c4c8c43 100644 (file)
@@ -60,7 +60,7 @@
        "config-help-restart": "Deseja limpar todos os dados gravados que introduziu e reiniciar o processo de instalação?",
        "config-restart": "Sim, reiniciar",
        "config-welcome": "=== Verificações do ambiente ===\nSerão agora realizadas verificações básicas para determinar se este ambiente é apropriado para instalação do MediaWiki.\nLembre-se de fornecer esta informação se necessitar de pedir ajuda para concluir a instalação.",
-       "config-copyright": "=== Direitos de autor e Condições de uso ===\n\n$1\n\nEste programa é software livre; pode redistribuí-lo e/ou modificá-lo nos termos da licença GNU General Public License, tal como publicada pela Free Software Foundation; tanto a versão 2 da Licença, como (por opção sua) qualquer versão posterior.\n\nEste programa é distribuído na esperança de que seja útil, mas '''sem qualquer garantia'''; inclusive, sem a garantia implícita da '''possibilidade de ser comercializado''' ou de '''adequação para qualquer finalidade específica'''.\nConsulte a licença GNU General Public License para mais detalhes.\n\nEm conjunto com este programa deve ter recebido <doclink href=Copying>uma cópia da licença GNU General Public License</doclink>; se não a recebeu, peça-a por escrito a Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ou [https://www.gnu.org/copyleft/gpl.html leia-a na internet].",
+       "config-copyright": "=== Direitos de autor e Condições de utilização ===\n\n$1\n\nEste programa é software livre; pode redistribuí-lo e/ou modificá-lo nos termos da licença GNU General Public License, tal como publicada pela Free Software Foundation; tanto a versão 2 da Licença, como (por opção sua) qualquer versão posterior.\n\nEste programa é distribuído na esperança de que seja útil, mas '''sem qualquer garantia'''; inclusive, sem a garantia implícita da '''possibilidade de ser comercializado''' ou de '''adequação para qualquer finalidade específica'''.\nConsulte a licença GNU General Public License para mais detalhes.\n\nEm conjunto com este programa deve ter recebido <doclink href=Copying>uma cópia da licença GNU General Public License</doclink>; se não a recebeu, peça-a por escrito a Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ou [https://www.gnu.org/copyleft/gpl.html leia-a na Internet].",
        "config-sidebar": "* [https://www.mediawiki.org/wiki/MediaWiki/pt Página principal do MediaWiki]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents/pt Ajuda]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents/pt Manual técnico]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ FAQ]\n----\n* <doclink href=Readme>Leia-me</doclink>\n* <doclink href=ReleaseNotes>Notas de lançamento</doclink>\n* <doclink href=Copying>Cópia</doclink>\n* <doclink href=UpgradeDoc>Atualização</doclink>",
        "config-env-good": "O ambiente foi verificado.\nPode instalar o MediaWiki.",
        "config-env-bad": "O ambiente foi verificado.\nNão pode instalar o MediaWiki.",
        "config-help": "ajuda",
        "config-help-tooltip": "clique para expandir",
        "config-nofile": "Não foi possível encontrar o ficheiro \"$1\". Terá sido apagado?",
-       "config-extension-link": "Sabia que a sua wiki suporta [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions extensões]?\n\nPode consultar as [https://www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category extensões por categoria] ou a [https://www.mediawiki.org/wiki/Extension_Matrix Matriz de Extensões] para ver a lista completa de extensões.",
+       "config-extension-link": "Sabia que a sua wiki suporta [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions extensões]?\n\nPode consultar as [https://www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category extensões por categoria].",
        "config-skins-screenshots": "$1 (capturas de ecrã: $2)",
        "config-extensions-requires": "$1 (requer $2)",
        "config-screenshot": "captura de ecrã",
index 9d9f677..91b9cab 100644 (file)
        "config-install-mainpage-failed": "Не удаётся вставить главную страницу: $1",
        "config-install-done": "<strong>Поздравляем!</strong>\nВы установили MediaWiki.\n\nВо время установки был создан файл <code>LocalSettings.php</code>.\nОн содержит все ваши настройки.\n\nВам необходимо скачать его и положить в корневую директорию вашей вики (ту же директорию, где находится файл index.php). Его загрузка должна начаться автоматически.\n\nЕсли автоматическая загрузка не началась или вы её отменили, вы можете скачать по ссылке ниже:\n\n$3\n\n<strong>Примечание</strong>: Если вы не сделаете этого сейчас, то сгенерированный файл конфигурации не будет доступен вам в дальнейшем, если вы выйдете из установки, не скачивая его.\n\nПо окончании действий, описанных выше, вы сможете <strong>[$2 войти в вашу вики]</strong>.",
        "config-install-done-path": "<strong>Поздравляем!</strong>\nВы установили MediaWiki.\n\nВо время установки был создан файл <code>LocalSettings.php</code>.\nОн содержит все ваши настройки.\n\nВам необходимо скачать его и положить в <code>$4</code>. Его загрузка должна начаться автоматически.\n\nЕсли автоматическая загрузка не началась или вы её отменили, вы можете скачать по ссылке ниже:\n\n$3\n\n<strong>Примечание</strong>: Если вы не сделаете этого сейчас, то сгенерированный файл конфигурации не будет доступен вам в дальнейшем, если вы выйдете из установки, не скачивая его.\n\nПо окончании действий, описанных выше, вы сможете <strong>[$2 войти в вашу вики]</strong>.",
-       "config-install-success": "MediaWiki успешно установлена. Сейчас вы можете перейти на <$1 $2>, чтобы просмотреть свою вики\nЕсли у вас есть вопросы, ознакомьтесь с нашим часто задаваемыми вопросами:\n<https://www.mediawiki.org/wiki/Manual:FAQ> или используйте один из форумов поддержки, указанный на этой странице.",
+       "config-install-success": "MediaWiki успешно установлена. Сейчас вы можете перейти на <$1 $2>, чтобы просмотреть свою вики.\nЕсли у вас есть вопросы, ознакомьтесь с нашим часто задаваемыми вопросами:\n<https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ> или используйте один из форумов поддержки, указанный на этой странице.",
        "config-download-localsettings": "Загрузить <code>LocalSettings.php</code>",
        "config-help": "справка",
        "config-help-tooltip": "нажмите, чтобы развернуть",
        "config-skins-screenshots": "$1 (скриншоты: $2)",
        "config-extensions-requires": "$1 (требуется $2)",
        "config-screenshot": "скриншот",
+       "config-extension-not-found": "Не удалось найти файл регистрации для расширения «$1»",
+       "config-extension-dependency": "При установке расширения «$1» возникла ошибка зависимости: $2",
        "mainpagetext": "<strong>MediaWiki успешно установлена.</strong>",
        "mainpagedocfooter": "Информацию по работе с этой вики можно найти в [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents справочном руководстве].\n\n== Некоторые полезные ресурсы ==\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Список возможных настроек];\n* [https://www.mediawiki.org/wiki/Manual:FAQ/ru Часто задаваемые вопросы и ответы по MediaWiki];\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Рассылка уведомлений о выходе новых версий MediaWiki].\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Перевод MediaWiki на свой язык]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Узнайте, как бороться со спамом в вашей вики]"
 }
index 58c40ce..430602b 100644 (file)
        "config-help": "помоћ",
        "config-help-tooltip": "кликните да бисте проширили",
        "config-nofile": "Није могуће пронаћи датотеку „$1”. Да није избрисана?",
-       "config-extension-link": "Јесте ли знали да ваш вики подржава [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions додатке]?\n\nМожете их прегледати [https://www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category по категорији] или помоћу [https://www.mediawiki.org/wiki/Extension_Matrix Extension Matrix-а] да бисте видели потпуни списак.",
+       "config-extension-link": "Јесте ли знали да ваш вики подржава [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions додатке]?\n\nМожете их прегледати [https://www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category по категорији].",
        "config-skins-screenshots": "„$1” (снимци екрана: $2)",
        "config-skins-screenshot": "$1 ($2)",
        "config-extensions-requires": "$1 (захтева $2)",
index c3ca2d8..15ac139 100644 (file)
@@ -7,6 +7,15 @@
                        "Zoranzoki21"
                ]
        },
+       "config-desc": "Instalacioni program za Medijaviki",
+       "config-title": "Instalacija Medijavikija $1",
+       "config-information": "Informacije",
+       "config-localsettings-upgrade": "Otkrivena je datoteka <code>LocalSettings.php</code>.\nKako biste nadogradili ovu instalaciju, unesite vrednost <code>$wgUpgradeKey</code> u okviru ispod.\nNaći ćete je u <code>LocalSettings.php</code>-u.",
+       "config-localsettings-cli-upgrade": "Otkrivena je datoteka <code>LocalSettings.php</code>.\nKako biste nadogradili ovu instalaciju, pokrenite <code>update.php</code>",
+       "config-localsettings-key": "Ključ za nadogradnju:",
+       "config-localsettings-badkey": "Ključ za nadogradnju koji ste naveli je pogrešan.",
+       "config-upgrade-key-missing": "Otkrivena je postojeća instalacija Medijavikija.\nKako biste nadogradili ovu instalaciju, stavite sledeći red koda na dno vaše datoteke <code>LocalSettings.php</code>.\n\n$1",
+       "config-localsettings-incomplete": "Postojeći <code>LocalSettings.php</code> izgleda nekompletno.\nPromenljiva $1 nije postavljena.\nPromenite <code>LocalSettings.php</code> tako što ćete postaviti promenljivu, pa kliknite na „{{int:Config-continue}}”.",
        "config-session-error": "Greška pri započinjanju sesije: $1",
        "config-session-expired": "Vaši podaci o sesiji su istekli.\nSesije su podešene da traju $1.\nNjihov rok možete povećati postavljanjem <code>session.gc_maxlifetime</code> u php.ini.\nPonovo pokrenite instalaciju.",
        "config-no-session": "Vaši podaci o sesiji su izgubljeni!\nProverite Vaš php.ini i obezbedite da je <code>session.save_path</code> postavljen na odgovarajući direktorijum.",
        "config-back": "← Nazad",
        "config-continue": "Nastavi →",
        "config-page-language": "Jezik",
-       "config-page-welcome": "Dobro došli na MedijaViki!",
+       "config-page-welcome": "Dobro došli na Medijaviki!",
        "config-page-dbconnect": "Povezivanje sa bazom podataka",
        "config-page-upgrade": "Nadogradnja postojeće instalacije",
        "config-page-dbsettings": "Podešavanja baze podataka",
-       "config-page-name": "Naziv",
-       "config-page-options": "Postavke",
+       "config-page-name": "Ime",
+       "config-page-options": "Opcije",
        "config-page-install": "Instaliraj",
        "config-page-complete": "Završeno!",
        "config-page-restart": "Ponovno pokretanje instalacije",
-       "config-page-copying": "Umnožavanje",
+       "config-page-readme": "Pročitaj me",
+       "config-page-releasenotes": "Napomene o izdanju",
+       "config-page-copying": "Kopiranje",
        "config-page-upgradedoc": "Nadogradnja",
        "config-page-existingwiki": "Postojeći viki",
        "config-help-restart": "Želite li da obrišete sve sačuvane podatke koje ste uneli i ponovo pokrenete instalaciju?",
        "config-restart": "Da, pokreni ponovo",
        "config-welcome": "=== Provera okruženja ===\nSada će se izvršiti osnovna provera kako bi se utvrdilo da li je ovo okruženje pogodno za instalaciju Medijavikija.\nNe zaboravite da uključite ove informacije ako tražite podršku kako završiti instalaciju.",
-       "config-sidebar": "* [https://www.mediawiki.org Početna strana Medijavikija]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Vodič za korisnike]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Vodič za administratore]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ ČPP]\n----\n* <doclink href=Readme>Pročitaj me</doclink>\n* <doclink href=ReleaseNotes>Napomene o izdanjima</doclink>\n* <doclink href=Copying>Kopiranje</doclink>\n* <doclink href=UpgradeDoc>Nadogradnja</doclink>",
+       "config-sidebar": "* [https://www.mediawiki.org Početna strana Medijavikija]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Vodič za korisnike]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Vodič za administratore]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ ČPP]\n----\n* <doclink href=Readme>Pročitaj me</doclink>\n* <doclink href=ReleaseNotes>Napomene o izdanju</doclink>\n* <doclink href=Copying>Kopiranje</doclink>\n* <doclink href=UpgradeDoc>Nadogradnja</doclink>",
+       "config-env-good": "Okruženje je provereno.\nMožete instalirati Medijaviki.",
+       "config-env-bad": "Okruženje je provereno.\nNe možete instalirati Medijaviki.",
+       "config-env-php": "PHP $1 je instaliran.",
+       "config-env-hhvm": "HHVM $1 je instaliran.",
+       "config-apc": "[https://secure.php.net/apc APC] je instaliran",
+       "config-wincache": "[https://www.iis.net/downloads/microsoft/wincache-extension WinCache] je instaliran",
        "config-no-cache-apcu": "<strong>Upozorenje:</strong> Nije moguće pronaći [https://secure.php.net/apcu APCu] ili [https://www.iis.net/downloads/microsoft/wincache-extension WinCache].\nKeširanje objekata nije omogućeno.",
+       "config-diff3-bad": "GNU diff3 nije pronađen.",
+       "config-git": "Pronađen je Git softver za kontrolu verzija: <code>$1</code>",
+       "config-git-bad": "Nije pronađen Git softver za kontrolu verzija.",
        "config-no-scaling": "Nije moguće pronaći GD biblioteku ili ImageMagick.\nUmanjivanje slika će biti onemogućeno.",
+       "config-db-type": "Tip baze podataka:",
+       "config-db-host": "Host baze podataka",
+       "config-db-wiki-settings": "Identifikuj ovaj viki",
+       "config-db-name": "Ime baze podataka:",
+       "config-db-name-oracle": "Šema baze podataka:",
        "config-db-install-account": "Korisnički nalog za instalaciju",
-       "config-type-mysql": "MariaDB, MySQL, ili kompaktibilni",
+       "config-db-username": "Korisničko ime baze podataka:",
+       "config-db-password": "Lozinka baze podataka:",
+       "config-db-prefix": "Prefiks tabele u bazi podataka:",
+       "config-db-port": "Port baze podataka:",
+       "config-db-schema": "Šema za Medijaviki:",
+       "config-type-mysql": "MariaDB, MySQL ili kompatibilan",
        "config-type-postgres": "PostgreSQL",
        "config-type-sqlite": "SQLite",
        "config-type-oracle": "Oracle",
-       "config-support-info": "Medijaviki podržava navedene sisteme baza podataka:\n\n$1\n\nAko ne vidite sistem podataka koji pokušavate da koristite na spisku ispod, onda pratite navedene instrukcije da omogućite podršku.",
+       "config-type-mssql": "Microsoft SQL Server",
+       "config-support-info": "Medijaviki podržava sledeće sisteme baza podataka:\n\n$1\n\nAko ne vidite sistem podataka koji pokušavate da koristite na spisku ispod, onda pratite gornja uputstva da biste omogućili podršku.",
        "config-dbsupport-mysql": "* [{{int:version-db-mariadb-url}} MariaDB] je primarna meta za Medijaviki i najbolje je podržana. Medijaviki takođe radi sa [{{int:version-db-mysql-url}} MySQL-om] i [{{int:version-db-percona-url}} Percona Server-om], koji su kompatibilni sa MariaDB-om. ([https://secure.php.net/manual/en/mysqli.installation.php Kako kompajlirati PHP sa podrškom MySQL-a])",
        "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] je popularan sistem baza podataka otvorenog koda kao alternativa MySQL-u. ([https://secure.php.net/manual/en/pgsql.installation.php Kako kompajlirati PHP sa podrškom PostgreSQL-a])",
        "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] je lagan sistem baze podataka koji je veoma dobro podržan. ([https://secure.php.net/manual/en/pdo.installation.php Kako kompajlirati PHP sa podrškom SQLite-a], koristi PDO)",
        "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] je baza podataka komercijalnih preduzeća. ([https://secure.php.net/manual/en/oci8.installation.php Kako kompajlirati PHP sa podrškom OCI8-a])",
        "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] je baza podataka komercijalnih preduzeća za Vindous. ([https://secure.php.net/manual/en/sqlsrv.installation.php Kako kompajlirati PHP sa podrškom SQLSRV-a])",
+       "config-header-mysql": "Podešavanja MariaDB/MySQL-a",
+       "config-header-postgres": "Podešavanja PostgreSQL-a",
+       "config-header-sqlite": "Podešavanja SQLite-a",
+       "config-header-oracle": "Podešavanja Oracle-a",
        "config-header-mssql": "Podešavanja Microsoft SQL Server-a",
-       "config-db-web-account": "Nalog baze podataka za web pristup",
+       "config-invalid-db-type": "Nevažeći tip baze podataka.",
+       "config-mssql-old": "Neophodan je Microsoft SQL Server $1 ili noviji. Vi imate $2.",
+       "config-sqlite-readonly": "Datoteka <code>$1</code> nije zapisiva.",
+       "config-regenerate": "Regeneriši LocalSettings.php →",
+       "config-db-web-account": "Nalog baze podataka za veb-pristup",
        "config-db-web-account-same": "Koristi isti nalog kao i za instalaciju",
+       "config-mysql-innodb": "InnoDB (preporučeno)",
+       "config-mysql-myisam": "MyISAM",
+       "config-mssql-auth": "Tip potvrde identiteta:",
+       "config-mssql-sqlauth": "Potvrda identiteta za SQL Server",
+       "config-mssql-windowsauth": "Potvrda identiteta za Windows",
        "config-site-name": "Ime vikija:",
-       "config-admin-email": "Imejl adresa:",
+       "config-site-name-blank": "Unesite ime sajta.",
+       "config-project-namespace": "Imenski prostor projekta:",
+       "config-ns-generic": "Projekat",
+       "config-ns-site-name": "Isti kao ime vikija: $1",
+       "config-ns-other": "Drugo (navedite)",
+       "config-ns-other-default": "MyWiki",
+       "config-admin-box": "Nalog administratora",
+       "config-admin-name": "Korisničko ime:",
+       "config-admin-password": "Lozinka:",
+       "config-admin-password-confirm": "Ponovite lozinku:",
+       "config-admin-help": "Ovde unesite željeno korisničko ime; na primer, „Jovan Krstić”.\nOvo ime ćete koristiti za prijavu na viki.",
+       "config-admin-name-blank": "Unesite korisničko ime administratora.",
+       "config-admin-password-blank": "Unesite lozinku za nalog administratora.",
+       "config-admin-password-mismatch": "Lozinke koje ste uneli se ne poklapaju.",
+       "config-admin-email": "Imejl-adresa:",
+       "config-admin-error-bademail": "Uneli ste nevažeću imejl-adresu.",
        "config-pingback": "Podeli podatke o ovoj instalaciji sa programerima Medijavikija.",
        "config-almost-done": "Skoro ste završili!\nSada možete preskočiti preostalu konfiguraciju i odmah instalirati viki.",
+       "config-optional-continue": "Postavi mi još pitanja.",
+       "config-optional-skip": "Dosadno mi je, samo instaliraj viki.",
        "config-profile": "Profil korisničkih grupa:",
        "config-profile-wiki": "Otvoren viki",
        "config-profile-no-anon": "Neophodno je otvoriti nalog",
-       "config-profile-fishbowl": "Samo ovlašćeni korisnici",
+       "config-profile-fishbowl": "Samo ovlašćeni urednici",
        "config-profile-private": "Privatan viki",
        "config-profile-help": "Viki najbolje funkcioniše kada dozvoljavate što više korisnika da uređuju kako je to moguće.\nU Medijavikiju, lako je pregledati nedavne promene i vratiti svaku štetu koju počine naivni ili zlonamerni korisnici.\n\nMeđutim, mnogi su pronašli Medijaviki da je koristan u širokoj raznolikosti uloga, a ponekad nije lako uveriti se u sve prednosti načina vikija.\nTako da imate izbor.\n\nModel <strong>{{int:config-profile-wiki}}</strong> dozvoljava svima da uređuju, bez prijavljivanja.\nVikiji sa <strong>{{int:config-profile-no-anon}}</strong> pružaju dodatnu odgovornost, ali može sprečiti slučajne doprinose.\n\n<strong>{{int:config-profile-fishbowl}}</strong> scenario dozvoljava odobrenim korisnicima da uređuju, ali svi mogu videti stranice, uključujući istoriju.\n<strong>{{int:config-profile-private}}</strong> samo dozvoljava odobrenim korisnicima da vide stranice, sa istom grupom dozvoljenom da uređuje.\n\nSložene konfiguracije korisničkih prava su dostupne nakon instalacije, pogledajte [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:User_rights odgovarajući ručni unos].",
+       "config-license": "Autorska prava i licenca:",
+       "config-license-none": "Bez zaglavlja sa licencom",
+       "config-license-cc-by-sa": "Creative Commons Autorstvo-Deliti pod istim uslovima (CC BY-SA)",
+       "config-license-cc-by": "Creative Commons Autorstvo (CC BY)",
+       "config-license-cc-by-nc-sa": "Creative Commons Autorstvo-Nekomercijalno-Deliti pod istim uslovima (CC BY-NC-SA)",
        "config-license-cc-0": "Creative Commons Zero (javno vlasništvo)",
-       "config-license-cc-choose": "Odaberi prilagođenu Krijetiv Komons licencu",
+       "config-license-gfdl": "GNU-ova licenca za slobodnu dokumentaciju izdanje 1.3 ili novije",
+       "config-license-pd": "Javno vlasništvo",
+       "config-license-cc-choose": "Izaberi prilagođenu Creative Commons licencu",
        "config-email-settings": "Podešavanja imejla",
+       "config-enable-email": "Omogući odlazni imejl",
        "config-email-user": "Omogući korisnicima da međusobno razmenjuju imejlove",
        "config-email-usertalk": "Omogući obaveštenje o korisničkoj stranici za razgovor",
        "config-email-watchlist": "Omogući obaveštenja o spisku nadgledanja",
-       "config-email-auth": "Omogući potvrdu putem elektronske pošte",
+       "config-email-auth": "Omogući potvrdu identiteta putem imejla",
+       "config-upload-settings": "Otpremanja slika i datoteka",
+       "config-upload-enable": "Omogući otpremanje datoteka",
+       "config-upload-deleted": "Direktorijum za izbrisane datoteke:",
+       "config-logo": "URL logotipa:",
+       "config-instantcommons": "Omogući Instant Commons",
+       "config-cc-again": "Izaberite ponovo…",
+       "config-cc-not-chosen": "Odaberite koju Creative Commons licencu želite i kliknite na „nastavi”.",
+       "config-advanced-settings": "Napredna konfiguracija",
        "config-cache-options": "Podešavanja za keširanje objekta:",
        "config-cache-none": "Nema keširanja (funkcionalnost nije uklonjena, ali brzina može uticati na veće viki sajtove)",
-       "config-cache-memcached": "Користи Memcached (захтева додатно подешавање и конфигурацију)",
+       "config-cache-memcached": "Koristi Memcached (zahteva dodatno podešavanje i konfiguraciju)",
+       "config-memcached-servers": "Memcached serveri:",
+       "config-extensions": "Dodaci",
        "config-skins": "Teme",
-       "config-install-begin": "Klikom na \"{{int:config-continue}}\", započećete instalaciju Medijavikija.\nAko želite da izvršie izmene, kliknite \"{{int:config-back}}\".",
+       "config-skins-use-as-default": "Koristi ovu temu kao podrazumevanu",
+       "config-skins-must-enable-some": "Morate odabrati barem jednu temu za omogućavanje.",
+       "config-install-begin": "Pritiskom na „{{int:config-continue}}”, započećete instalaciju Medijavikija.\nAko želite da izvršite promene, pritisnite „{{int:config-back}}”.",
+       "config-install-step-done": "gotovo",
+       "config-install-step-failed": "nije uspelo",
+       "config-install-extensions": "Uključivanje dodataka",
        "config-install-database": "Podešavam bazu podataka",
        "config-install-schema": "Pravljenje šeme",
+       "config-install-pg-schema-not-exist": "Šema PostgreSQL ne postoji.",
        "config-install-user": "Pravim korisnika baze podataka",
+       "config-install-user-alreadyexists": "Korisnik „$1” već postoji",
        "config-install-tables": "Pravljenje tabela",
-       "config-install-interwiki": "Popunjavanje podrazumevane tabele intervikija",
-       "config-install-stats": "Pokrećem statistiku",
-       "config-install-keys": "Generišem tajne ključeve",
-       "config-install-sysop": "Pravim korisnički nalog administratora",
-       "config-install-mainpage": "Pravim glavnu stranu sa standardnim sadržajem",
-       "config-install-done": "<strong>Čestitamo!</strong>\nInstalirali ste Medijaviki.\n\nInstalacioni program je generisao datoteku <code>LocalSettings.php</code>.\nOna sadrži svu vašu konfiguraciju.\n\nMoraćete da je preuzmete i stavite u bazu vaše viki instalacije (isti direktorijum kao index.php). Preuzimanje bi automatski trebalo početi.\n\nAko preuzimanje nije ponuđeno, ili ako ga otkažete, možete ponovo pokrenuti preuzimanje tako što ćete kliknuti na donji link:\n\n$3\n\n<strong>Napomena:</strong> Ako to odmah ne uradite, ova generisana konfiguraciona datoteka neće vam biti dostupna kasnije ako izađete iz instalacije bez preuzimanja.\n\nKada je to učinjeno, možete da <strong>[$2 posetite svoj viki]</strong>.",
-       "config-install-done-path": "<strong>Čestitamo!</strong>\nInstalirali ste Medijaviki.\n\nInstalacioni program je generisao datoteku <code>LocalSettings.php</code>.\nOna sadrži svu vašu konfiguraciju.\n\nMoraćete da je preuzmete i stavite u <code>$4</code>. Preuzimanje bi automatski trebalo početi.\n\nAko preuzimanje nije ponuđeno, ili ako ga otkažete, možete ponovo pokrenuti preuzimanje tako što ćete kliknuti na donji link:\n\n$3\n\n<strong>Napomena:</strong> Ako to odmah ne uradite, ova generisana konfiguraciona datoteka neće vam biti dostupna kasnije ako izađete iz instalacije bez preuzimanja.\n\nKada je to učinjeno, možete da <strong>[$2 posetite svoj viki]</strong>.",
-       "config-install-success": "Medijaviki je uspešno instaliran. Sada možete posetiti <$1$2> da pogledate vaš viki.\nUkoliko imate pitanja, pogledajte našu listu često postavljanih pitanja: <https://www.mediawiki.org/wiki/Manual:FAQ> ili koristite jedan od foruma za podršku koji su povezani na toj stranici.",
-       "config-help-tooltip": "kliknite da proširite",
-       "config-extension-link": "Да ли сте знали да ваш вики подржава [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions екстензије]?\n\nМожете претраживати [https://www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category екстензије по категорији] или [https://www.mediawiki.org/wiki/Extension_Matrix Extension Matrix] да видите цео списак екстензија.",
-       "mainpagetext": "<strong>Medijaviki je uspešno instaliran.</strong>",
-       "mainpagedocfooter": "Pogledajte [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents korisnički vodič] za korišćenje programa.\n\n== Uvod ==\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Pomoć u vezi sa podešavanjima]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Često postavljana pitanja]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Dopisni spisak o izdanjima Medijavikija]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Naučite kako da se borite protiv spama na svojoj viki]"
+       "config-install-interwiki": "Popunjavanje podrazumevane tabele međuvikija",
+       "config-install-stats": "Pokretanje statistika",
+       "config-install-keys": "Generisanje tajnih ključeva",
+       "config-install-sysop": "Pravljenje korisničkog naloga administratora",
+       "config-install-subscribe-fail": "Nije moguće pretplatiti se na mediawiki-announce: $1",
+       "config-install-mainpage": "Pravljenje glavne strane sa podrazumevanim sadržajem",
+       "config-install-mainpage-exists": "Glavna strana već postoji, preskakanje",
+       "config-install-mainpage-failed": "Nije moguće umetnuti glavnu stranu: $1",
+       "config-install-done": "<strong>Čestitamo!</strong>\nInstalirali ste Medijaviki.\n\nInstalacioni program je generisao datoteku <code>LocalSettings.php</code>.\nOna sadrži svu vašu konfiguraciju.\n\nMoraćete da je preuzmete i stavite u bazu vaše viki instalacije (isti direktorijum kao index.php). Preuzimanje bi automatski trebalo početi.\n\nAko preuzimanje nije ponuđeno, ili ako ga otkažete, možete ponovo pokrenuti preuzimanje tako što ćete kliknuti na dolenavedenu vezu:\n\n$3\n\n<strong>Napomena:</strong> Ako to odmah ne uradite, ova generisana konfiguraciona datoteka neće vam biti dostupna kasnije ako izađete iz instalacije bez preuzimanja.\n\nKada je to učinjeno, možete da <strong>[$2 posetite svoj viki]</strong>.",
+       "config-install-done-path": "<strong>Čestitamo!</strong>\nInstalirali ste Medijaviki.\n\nInstalacioni program je generisao datoteku <code>LocalSettings.php</code>.\nOna sadrži svu vašu konfiguraciju.\n\nMoraćete da je preuzmete i stavite u <code>$4</code>. Preuzimanje bi automatski trebalo početi.\n\nAko preuzimanje nije ponuđeno, ili ako ga otkažete, možete ponovo pokrenuti preuzimanje tako što ćete kliknuti na dolenavedenu vezu:\n\n$3\n\n<strong>Napomena:</strong> Ako to odmah ne uradite, ova generisana konfiguraciona datoteka neće vam biti dostupna kasnije ako izađete iz instalacije bez preuzimanja.\n\nKada je to učinjeno, možete da <strong>[$2 posetite svoj viki]</strong>.",
+       "config-install-success": "Medijaviki je uspešno instaliran. Sada možete posetiti <$1$2> da biste videli svoj viki.\nAko imate pitanja, pogledajte naš spisak često postavljanih pitanja: <https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ> ili koristite jedan od foruma za podršku koji su povezani na toj stranici.",
+       "config-download-localsettings": "Preuzmi <code>LocalSettings.php</code>",
+       "config-help": "pomoć",
+       "config-help-tooltip": "kliknite da biste proširili",
+       "config-nofile": "Nije moguće pronaći datoteku „$1”. Da nije izbrisana?",
+       "config-extension-link": "Jeste li znali da vaš viki podržava [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions dodatke]?\n\nMožete ih pregledati [https://www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category po kategoriji] ili pomoću [https://www.mediawiki.org/wiki/Extension_Matrix Extension Matrix-a] da biste videli potpuni spisak.",
+       "config-skins-screenshots": "„$1” (snimci ekrana: $2)",
+       "config-skins-screenshot": "$1 ($2)",
+       "config-extensions-requires": "$1 (zahteva $2)",
+       "config-screenshot": "snimak ekrana",
+       "config-extension-not-found": "Nije moguće pronaći datoteku registracije za dodatak „$1”",
+       "mainpagetext": "<strong>Medijaviki je instaliran.</strong>",
+       "mainpagedocfooter": "Pogledajte [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents korisnički vodič] za korišćenje programa.\n\n== Uvod ==\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Pomoć u vezi sa podešavanjima]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Često postavljana pitanja]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Dopisni spisak o izdanjima Medijavikija]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Naučite kako da se borite protiv spama na svom vikiju]"
 }
index dd2e51f..1f82d3b 100644 (file)
        "config-install-mainpage-failed": "Kunde inte infoga huvudsidan: $1",
        "config-install-done": "<strong>Grattis!</strong>\nDu har installerat MediaWiki.\n\nInstallationsprogrammet har genererat filen <code>LocalSettings.php</code>.\nDet innehåller alla dina konfigurationer.\n\nDu kommer att behöva ladda ner den och placera den i roten för din wiki-installation (samma katalog som index.php). Nedladdningen borde ha startats automatiskt.\n\nOm ingen nedladdning erbjöds, eller om du har avbrutit det kan du starta om nedladdningen genom att klicka på länken nedan:\n\n$3\n\n<strong>OBS</strong>: Om du inte gör detta nu, kommer denna genererade konfigurationsfil inte vara tillgänglig för dig senare om du avslutar installationen utan att ladda ned den.\n\nNär det är klart, kan du <strong>[$2 gå in på din wiki]</strong>",
        "config-install-done-path": "<strong>Grattis!</strong>\nDu har installerat MediaWiki.\n\nInstallationsprogrammet har genererat filen <code>LocalSettings.php</code>.\nDet innehåller alla dina konfigurationer.\n\nDu kommer att behöva ladda ner den och placera den i <code>$4</code>. Nedladdningen borde ha startats automatiskt.\n\nOm ingen nedladdning erbjöds, eller om du har avbrutit det kan du starta om nedladdningen genom att klicka på länken nedan:\n\n$3\n\n<strong>OBS</strong>: Om du inte gör detta nu, kommer denna genererade konfigurationsfil inte vara tillgänglig för dig senare om du avslutar installationen utan att ladda ned den.\n\nNär det är klart, kan du <strong>[$2 gå in på din wiki]</strong>",
-       "config-install-success": "MediaWiki har installerats. Du kan nu besöka <$1$2> för att se din wiki.\nOm du undrar någonting, kolla in vår lista över vanliga ställda frågor:\n<https://www.mediawiki.org/wiki/Manual:FAQ> eller använda något supportforum som länkas på sidan.",
+       "config-install-success": "MediaWiki har installerats. Du kan nu besöka <$1$2> för att se din wiki.\nOm du undrar någonting, kolla in vår lista över vanliga ställda frågor:\n<https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ> eller använda något supportforum som länkas på sidan.",
        "config-download-localsettings": "Ladda ner <code>LocalSettings.php</code>",
        "config-help": "hjälp",
        "config-help-tooltip": "klicka för att expandera",
        "config-skins-screenshots": "$1 (skärmbilder: $2)",
        "config-extensions-requires": "$1 (kräver $2)",
        "config-screenshot": "skärmbild",
+       "config-extension-not-found": "Kunde inte hitta registreringsfilen för tillägget \"$1\"",
+       "config-extension-dependency": "En beroendefel inträffade när tillägget \"$1\" installerades: $2",
        "mainpagetext": "<strong>MediaWiki har installerats utan problem.</strong>",
        "mainpagedocfooter": "Information om hur wiki-programvaran används finns i [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents användarguiden].\n\n== Att komma igång ==\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Lista över konfigurationsinställningar]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-postlista för nya versioner av MediaWiki]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Lokalisera MediaWiki för ditt språk]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Läs om hur du bekämpar spam på din wiki]"
 }
index ca87d60..a77cee7 100644 (file)
@@ -7,22 +7,23 @@
                        "Dinhxuanduyet",
                        "Nguyên Lê",
                        "Macofe",
-                       "Leducthn"
+                       "Leducthn",
+                       "Vinhtantran"
                ]
        },
        "config-desc": "Trình cài đặt MediaWiki",
        "config-title": "Cài đặt MediaWiki $1",
        "config-information": "Thông tin",
-       "config-localsettings-upgrade": "Một tập tin <code>LocalSettings.php</code> đã được phát hiện.\nĐể nâng cấp bản cài đặt này, xin nhập giá trị của <code>$wgUpgradeKey</code> trong hộp thoại bên dưới đây.\nBạn sẽ tìm thấy nó trong <code>LocalSettings.php</code>.",
-       "config-localsettings-cli-upgrade": "Một tập tin <code>LocalSettings.php</code> đã được phát hiện.\nĐể nâng cấp bản cài đặt này, hãy chạy <code>update.php</code> thay thế.",
-       "config-localsettings-key": "Chìa khóa nâng cấp:",
-       "config-localsettings-badkey": "Bạn đã cung cấp một chìa khóa nâng cấp sai.",
-       "config-upgrade-key-missing": "Một bản cài đặt MediaWiki sẵn đã được phát hiện.\nĐể nâng cấp bản cài đặt này, hãy thêm dòng sau vào cuối <code>LocalSettings.php</code>:\n\n$1",
+       "config-localsettings-upgrade": "Phát hiện tập tin <code>LocalSettings.php</code>.\nĐể nâng cấp bản cài đặt này, xin nhập giá trị của <code>$wgUpgradeKey</code> trong hộp thoại bên dưới đây.\nBạn sẽ tìm thấy nó trong <code>LocalSettings.php</code>.",
+       "config-localsettings-cli-upgrade": "Phát hiện tập tin <code>LocalSettings.php</code>.\nĐể nâng cấp bản cài đặt này, hãy chạy <code>update.php</code> thay thế.",
+       "config-localsettings-key": "Khóa nâng cấp:",
+       "config-localsettings-badkey": "Bạn đã cung cấp một khóa nâng cấp sai.",
+       "config-upgrade-key-missing": "Phát hiện thấy đã có sẵn một bản cài đặt MediaWiki.\nĐể nâng cấp bản cài đặt này, hãy thêm dòng sau vào cuối <code>LocalSettings.php</code>:\n\n$1",
        "config-localsettings-incomplete": "Tập tin <code>LocalSettings.php</code> đã tồn tại hình như không hoàn chỉnh.\nBiến $1 chưa được đặt.\nXin hãy thay đổi <code>LocalSettings.php</code> để đặt biến này, rồi bấm “{{int:Config-continue}}”.",
-       "config-localsettings-connection-error": "Đã xuất hiện lỗi khi kết nối với cơ sở dữ liệu dùng cấu hình trong <code>LocalSettings.php</code>. Xin hãy sửa lại cấu hình và thử lại.\n\n$1",
+       "config-localsettings-connection-error": "Đã xuất hiện lỗi khi kết nối với cơ sở dữ liệu với cấu hình ghi trong <code>LocalSettings.php</code>. Xin hãy sửa lại cấu hình và thử lại.\n\n$1",
        "config-session-error": "Lỗi khi bắt đầu phiên làm việc: $1",
        "config-session-expired": "Dữ liệu phiên làm việc của bạn dường như đã hết hạn. Các phiên làm việc được cấu hình để kéo dài $1. Để tăng thời gian này, đặt <code>session.gc_maxlifetime</code> trong php.ini, rồi khởi động lại quá trình cài đặt.",
-       "config-no-session": "Đã mất dữ liệu phiên làm việc của bạn! Kiểm tra tập tin php.ini và đảm bảo rằng <code>session.save_path</code> đã được đặt thành một thư mục thích hợp.",
+       "config-no-session": "Đã mất dữ liệu phiên làm việc của bạn! Kiểm tra tập tin php.ini và đảm bảo rằng <code>session.save_path</code> đã được đặt vào một thư mục thích hợp.",
        "config-your-language": "Ngôn ngữ của bạn:",
        "config-your-language-help": "Chọn một ngôn ngữ để sử dụng trong quá trình cài đặt.",
        "config-wiki-language": "Ngôn ngữ của wiki:",
@@ -37,8 +38,8 @@
        "config-page-name": "Tên",
        "config-page-options": "Tùy chọn",
        "config-page-install": "Cài đặt",
-       "config-page-complete": "Xong rồi!",
-       "config-page-restart": "Bắt đầu cài đặt lại",
+       "config-page-complete": "Đã xong!",
+       "config-page-restart": "Tái khởi động cài đặt",
        "config-page-readme": "Đọc trước",
        "config-page-releasenotes": "Thông báo phát hành",
        "config-page-copying": "Sao chép",
        "config-install-mainpage-failed": "Không thể chèn trang đầu: $1",
        "config-install-done": "<strong>Xin chúc mừng!</strong>\nBạn đã cài đặt MediaWiki.\n\nBộ cài đặt đã tạo ra một tập tin <code>LocalSettings.php</code>.\nTập tin này chứa tất cả các cấu hình của bạn.\n\nBạn sẽ cần phải tải nó về và đặt nó trong thư mục cài đặt wiki của bạn (cùng thư mục với index.php). Việc tải về có lẽ sẽ được khởi động tự động.\n\nNếu bản tải về không được cung cấp, hoặc nếu bạn hủy bỏ nó, bạn có thể khởi động lại tải về bằng cách nhấn vào liên kết dưới đây:\n\n$3\n\n<strong>Lưu ý:</strong> Nếu bạn không làm điều này ngay bây giờ, điều này sẽ tạo ra tập tin cấu hình sẽ không có giá trị cho bạn sau này nếu bạn thoát khỏi trình cài đặt mà không tải nó về.\n\nKhi đã việc tải về đã hoàn thành, bạn có thể <strong>[$2 truy cập trang wiki của bạn]</strong>.",
        "config-install-done-path": "<strong>Xin chúc mừng!</strong>\nBạn đã cài đặt MediaWiki.\n\nBộ cài đặt đã tạo ra một tập tin <code>LocalSettings.php</code>.\nTập tin này chứa tất cả các cấu hình của bạn.\n\nBạn sẽ cần phải tải nó về và đặt nó tại <code>$4</code>. Việc tải về có lẽ sẽ được khởi động tự động.\n\nNếu bản tải về không được cung cấp, hoặc nếu bạn hủy bỏ nó, bạn có thể khởi động lại tải về bằng cách nhấn vào liên kết dưới đây:\n\n$3\n\n<strong>Lưu ý:</strong> Nếu bạn không làm điều này ngay bây giờ, điều này sẽ tạo ra tập tin cấu hình sẽ không có giá trị cho bạn sau này nếu bạn thoát khỏi trình cài đặt mà không tải nó về.\n\nKhi đã việc tải về đã hoàn thành, bạn có thể <strong>[$2 truy cập trang wiki của bạn]</strong>.",
-       "config-install-success": "MediaWiki đã được cài đặt thành công. Bây giờ bạn có thể mở <$1$2> để xem wiki của bạn.\nNếu bạn có thắc mắc, hãy đọc các câu thường hỏi:\n<https://www.mediawiki.org/wiki/Manual:FAQ?uselang=vi> hoặc ghé vào một diễn đàn hỗ trợ được liệt kê tại trang đó.",
+       "config-install-success": "MediaWiki đã được cài đặt thành công. Bây giờ bạn có thể mở <$1$2> để xem wiki của bạn.\nNếu bạn có thắc mắc, hãy đọc các câu thường hỏi:\n<https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ> hoặc ghé vào một diễn đàn hỗ trợ được liệt kê tại trang đó.",
        "config-download-localsettings": "Tải về <code>LocalSettings.php</code>",
        "config-help": "Trợ giúp",
        "config-help-tooltip": "nhấn chuột để mở rộng",
        "config-nofile": "Không tìm thấy tập tin “$1”. Nó có phải bị xóa không?",
-       "config-extension-link": "Bạn có biết rằng wiki của bạn có hỗ trợ [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions mở rộng]?\n\nBạn có thể truy cập [https://www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category phần mở rộng theo thể loại] hoặc [https://www.mediawiki.org/wiki/Extension_Matrix Ma trận Mở rộng] để xem danh sách đầy đủ các phần mở rộng.",
+       "config-extension-link": "Bạn có biết rằng wiki của bạn có hỗ trợ [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions phần mở rộng]?\n\nBạn có thể truy cập [https://www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category phần mở rộng theo thể loại].",
        "config-skins-screenshots": "$1 (ảnh chụp màn hình: $2)",
        "config-extensions-requires": "$1 (cần $2)",
        "config-screenshot": "ảnh chụp màn hình",
+       "config-extension-not-found": "Không tìm thấy tập tin đăng ký của bộ mở rộng \"$1$",
+       "config-extension-dependency": "Lỗi thiếu phần phụ thuộc xảy ra khi đang cài đặt bộ mở rộng \"$1\": $2",
        "mainpagetext": "'''MediaWiki đã được cài đặt.'''",
        "mainpagedocfooter": "Xin đọc [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Hướng dẫn sử dụng] để biết thêm thông tin về cách sử dụng phần mềm wiki.\n\n== Để bắt đầu ==\n\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Danh sách các thiết lập cấu hình]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Các câu hỏi thường gặp MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Danh sách gửi thư về việc phát hành MediaWiki]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Tìm hiểu cách chống spam tại wiki của bạn]"
 }
index dc0b249..3d88089 100644 (file)
@@ -43,9 +43,6 @@ class JobQueueGroup {
        /** @var array Map of (bucket => (queue => JobQueue, types => list of types) */
        protected $coalescedQueues;
 
-       /** @var Job[] */
-       protected $bufferedJobs = [];
-
        const TYPE_DEFAULT = 1; // integer; jobs popped by default
        const TYPE_ANY = 2; // integer; any job
 
@@ -105,11 +102,7 @@ class JobQueueGroup {
                global $wgJobTypeConf;
 
                $conf = [ 'wiki' => $this->wiki, 'type' => $type ];
-               if ( isset( $wgJobTypeConf[$type] ) ) {
-                       $conf = $conf + $wgJobTypeConf[$type];
-               } else {
-                       $conf = $conf + $wgJobTypeConf['default'];
-               }
+               $conf += $wgJobTypeConf[$type] ?? $wgJobTypeConf['default'];
                $conf['aggregator'] = JobQueueAggregator::singleton();
                if ( !isset( $conf['readOnlyReason'] ) ) {
                        $conf['readOnlyReason'] = $this->readOnlyReason;
@@ -203,7 +196,7 @@ class JobQueueGroup {
                // Throw errors now instead of on push(), when other jobs may be buffered
                $this->assertValidJobs( $jobs );
 
-               $this->bufferedJobs = array_merge( $this->bufferedJobs, $jobs );
+               DeferredUpdates::addUpdate( new JobQueueEnqueueUpdate( $this->wiki, $jobs ) );
        }
 
        /**
@@ -211,17 +204,10 @@ class JobQueueGroup {
         *
         * @return void
         * @since 1.26
+        * @deprecated Since 1.33 Not needed anymore
         */
        public static function pushLazyJobs() {
-               foreach ( self::$instances as $group ) {
-                       try {
-                               $group->push( $group->bufferedJobs );
-                               $group->bufferedJobs = [];
-                       } catch ( Exception $e ) {
-                               // Get in as many jobs as possible and let other post-send updates happen
-                               MWExceptionHandler::logException( $e );
-                       }
-               }
+               wfDeprecated( __METHOD__, '1.33' );
        }
 
        /**
@@ -464,12 +450,4 @@ class JobQueueGroup {
                        }
                }
        }
-
-       function __destruct() {
-               $n = count( $this->bufferedJobs );
-               if ( $n > 0 ) {
-                       $type = implode( ', ', array_unique( array_map( 'get_class', $this->bufferedJobs ) ) );
-                       trigger_error( __METHOD__ . ": $n buffered job(s) of type(s) $type never inserted." );
-               }
-       }
 }
index 39b5b3b..676659f 100644 (file)
@@ -290,8 +290,6 @@ class JobRunner implements LoggerAwareInterface {
                        $status = $job->run();
                        $error = $job->getLastError();
                        $this->commitMasterChanges( $lbFactory, $job, $fnameTrxOwner );
-                       // Important: this must be the last deferred update added (T100085, T154425)
-                       DeferredUpdates::addCallableUpdate( [ JobQueueGroup::class, 'pushLazyJobs' ] );
                        // Run any deferred update tasks; doUpdates() manages transactions itself
                        DeferredUpdates::doUpdates();
                } catch ( Exception $e ) {
index 92a4f9e..3129c5b 100644 (file)
@@ -202,11 +202,7 @@ class CSSMin {
        public static function getMimeType( $file ) {
                // Infer the MIME-type from the file extension
                $ext = strtolower( pathinfo( $file, PATHINFO_EXTENSION ) );
-               if ( isset( self::$mimeTypes[$ext] ) ) {
-                       return self::$mimeTypes[$ext];
-               }
-
-               return mime_content_type( realpath( $file ) );
+               return self::$mimeTypes[$ext] ?? mime_content_type( realpath( $file ) );
        }
 
        /**
index c0ab0a0..b7636b1 100644 (file)
@@ -58,11 +58,7 @@ class Cookie {
                        $this->expires = strtotime( $attr['expires'] );
                }
 
-               if ( isset( $attr['path'] ) ) {
-                       $this->path = $attr['path'];
-               } else {
-                       $this->path = '/';
-               }
+               $this->path = $attr['path'] ?? '/';
 
                if ( isset( $attr['domain'] ) ) {
                        if ( self::validateCookieDomain( $attr['domain'] ) ) {
index a1bbd09..da0cae2 100644 (file)
@@ -46,6 +46,7 @@ class CryptRand {
         * @return string
         */
        protected function initialRandomState() {
+               wfDeprecated( __METHOD__, '1.32' );
                return '';
        }
 
@@ -59,6 +60,7 @@ class CryptRand {
         * @author Tim Starling
         */
        protected function driftHash( $data ) {
+               wfDeprecated( __METHOD__, '1.32' );
                return '';
        }
 
@@ -70,6 +72,7 @@ class CryptRand {
         * @return string A new weak random state
         */
        protected function randomState() {
+               wfDeprecated( __METHOD__, '1.32' );
                return '';
        }
 
@@ -83,6 +86,7 @@ class CryptRand {
         * @return bool Always true
         */
        public function wasStrong() {
+               wfDeprecated( __METHOD__, '1.32' );
                return true;
        }
 
@@ -96,6 +100,7 @@ class CryptRand {
         * @return string Raw binary random data
         */
        public function generate( $bytes ) {
+               wfDeprecated( __METHOD__, '1.32' );
                $bytes = floor( $bytes );
                return random_bytes( $bytes );
        }
@@ -108,6 +113,7 @@ class CryptRand {
         * @return string Hexadecimal random data
         */
        public function generateHex( $chars ) {
+               wfDeprecated( __METHOD__, '1.32' );
                return MWCryptRand::generateHex( $chars );
        }
 }
index 73f3e70..f67387b 100644 (file)
@@ -92,7 +92,7 @@ class JavaScriptMinifier {
         * Returns minified JavaScript code.
         *
         * @param string $s JavaScript code to minify
-        * @return String Minified code
+        * @return string Minified code
         */
        public static function minify( $s ) {
                // First we declare a few tables that contain our parsing rules
index 77c377b..b93084a 100644 (file)
@@ -753,11 +753,7 @@ EOT;
                $xml = new XmlTypeCheck( $file );
                if ( $xml->wellFormed ) {
                        $xmlTypes = $this->xmlTypes;
-                       if ( isset( $xmlTypes[$xml->getRootElement()] ) ) {
-                               return $xmlTypes[$xml->getRootElement()];
-                       } else {
-                               return 'application/xml';
-                       }
+                       return $xmlTypes[$xml->getRootElement()] ?? 'application/xml';
                }
 
                /**
index 82ae5ae..c6bcc7a 100644 (file)
@@ -112,11 +112,7 @@ abstract class BagOStuff implements IExpiringStore, LoggerAwareInterface {
         * @param array $params
         */
        public function __construct( array $params = [] ) {
-               if ( isset( $params['logger'] ) ) {
-                       $this->setLogger( $params['logger'] );
-               } else {
-                       $this->setLogger( new NullLogger() );
-               }
+               $this->setLogger( $params['logger'] ?? new NullLogger() );
 
                if ( isset( $params['keyspace'] ) ) {
                        $this->keyspace = $params['keyspace'];
index a8047b0..a473210 100644 (file)
@@ -81,11 +81,7 @@ class RedisBagOStuff extends BagOStuff {
                        $this->serverTagMap[is_int( $key ) ? $server : $key] = $server;
                }
 
-               if ( isset( $params['automaticFailover'] ) ) {
-                       $this->automaticFailover = $params['automaticFailover'];
-               } else {
-                       $this->automaticFailover = true;
-               }
+               $this->automaticFailover = $params['automaticFailover'] ?? true;
 
                $this->attrMap[self::ATTR_SYNCWRITES] = self::QOS_SYNCWRITES_NONE;
        }
index 3af820b..e7586cf 100644 (file)
@@ -2225,7 +2225,17 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
         * @codeCoverageIgnore
         */
        protected function getCurrentTime() {
-               return $this->wallClockOverride ?: microtime( true );
+               if ( $this->wallClockOverride ) {
+                       return $this->wallClockOverride;
+               }
+
+               $clockTime = (float)time(); // call this first
+               // microtime() uses an initial gettimeofday() call added to usage clocks.
+               // This can severely drift from time() and the microtime() value of other threads
+               // due to undercounting of the amount of time elapsed. Instead of seeing the current
+               // time as being in the past, use the value of time(). This avoids setting cache values
+               // that will immediately be seen as expired and possibly cause stampedes.
+               return max( microtime( true ), $clockTime );
        }
 
        /**
index 68d4c9a..83b9660 100644 (file)
@@ -719,19 +719,27 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
 
                switch ( $type ) {
                        case self::ESTIMATE_DB_APPLY:
-                               $this->ping( $rtt );
-                               $rttAdjTotal = $this->trxWriteAdjQueryCount * $rtt;
-                               $applyTime = max( $this->trxWriteAdjDuration - $rttAdjTotal, 0 );
-                               // For omitted queries, make them count as something at least
-                               $omitted = $this->trxWriteQueryCount - $this->trxWriteAdjQueryCount;
-                               $applyTime += self::TINY_WRITE_SEC * $omitted;
-
-                               return $applyTime;
+                               return $this->pingAndCalculateLastTrxApplyTime();
                        default: // everything
                                return $this->trxWriteDuration;
                }
        }
 
+       /**
+        * @return float Time to apply writes to replicas based on trxWrite* fields
+        */
+       private function pingAndCalculateLastTrxApplyTime() {
+               $this->ping( $rtt );
+
+               $rttAdjTotal = $this->trxWriteAdjQueryCount * $rtt;
+               $applyTime = max( $this->trxWriteAdjDuration - $rttAdjTotal, 0 );
+               // For omitted queries, make them count as something at least
+               $omitted = $this->trxWriteQueryCount - $this->trxWriteAdjQueryCount;
+               $applyTime += self::TINY_WRITE_SEC * $omitted;
+
+               return $applyTime;
+       }
+
        public function pendingWriteCallers() {
                return $this->trxLevel ? $this->trxWriteCallers : [];
        }
@@ -1052,7 +1060,9 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
                //   that transactions by themselves don't make changes, only actual writes
                //   within the transaction matter, which we still detect.
                return !preg_match(
-                       '/^(?:SELECT|BEGIN|ROLLBACK|COMMIT|SET|SHOW|EXPLAIN|\(SELECT)\b/i', $sql );
+                       '/^(?:SELECT|BEGIN|ROLLBACK|COMMIT|SAVEPOINT|RELEASE|SET|SHOW|EXPLAIN|\(SELECT)\b/i',
+                       $sql
+               );
        }
 
        /**
@@ -1542,14 +1552,14 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
                        $options = [ $options ];
                }
 
-               $res = $this->select( $table, $var, $cond, $fname, $options, $join_conds );
+               $res = $this->select( $table, [ 'value' => $var ], $cond, $fname, $options, $join_conds );
                if ( $res === false ) {
                        return false;
                }
 
                $values = [];
                foreach ( $res as $row ) {
-                       $values[] = $row->$var;
+                       $values[] = $row->value;
                }
 
                return $values;
@@ -2028,10 +2038,7 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
                        $options = [ $options ];
                }
 
-               $fh = null;
-               if ( isset( $options['fileHandle'] ) ) {
-                       $fh = $options['fileHandle'];
-               }
+               $fh = $options['fileHandle'] ?? null;
                $options = $this->makeInsertOptions( $options );
 
                if ( isset( $a[0] ) && is_array( $a[0] ) ) {
@@ -3970,10 +3977,11 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
                        // Avoid fatals if close() was called
                        $this->assertOpen();
 
-                       $writeTime = $this->pendingWriteQueryDuration( self::ESTIMATE_DB_APPLY );
                        $this->doRollback( $fname );
                        $this->trxStatus = self::STATUS_TRX_NONE;
                        $this->trxAtomicLevels = [];
+                       // Estimate the RTT via a query now that trxStatus is OK
+                       $writeTime = $this->pingAndCalculateLastTrxApplyTime();
 
                        if ( $this->trxDoneWrites ) {
                                $this->trxProfiler->transactionWritingOut(
index 61367f5..de102a7 100644 (file)
@@ -987,10 +987,7 @@ class DatabaseMssql extends Database {
         */
        public function getServerVersion() {
                $server_info = sqlsrv_server_info( $this->conn );
-               $version = 'Error';
-               if ( isset( $server_info['SQLServerVersion'] ) ) {
-                       $version = $server_info['SQLServerVersion'];
-               }
+               $version = $server_info['SQLServerVersion'] ?? 'Error';
 
                return $version;
        }
index 1973322..3d3f855 100644 (file)
@@ -595,15 +595,7 @@ interface IDatabase {
         * Execute a SELECT query constructed using the various parameters provided.
         * See below for full details of the parameters.
         *
-        * @param string|array $table Table name
-        * @param string|array $vars Field names
-        * @param string|array $conds Conditions
-        * @param string $fname Caller function name
-        * @param array $options Query options
-        * @param array $join_conds Join conditions
-        *
-        *
-        * @param string|array $table
+        * @param string|array $table Table name(s)
         *
         * May be either an array of table names, or a single string holding a table
         * name. If an array is given, table aliases can be specified, for example:
@@ -638,7 +630,7 @@ interface IDatabase {
         * Do not use untrusted user input as a table name. Alias names should
         * not have characters outside of the Basic multilingual plane.
         *
-        * @param string|array $vars
+        * @param string|array $vars Field name(s)
         *
         * May be either a field name or an array of field names. The field names
         * can be complete fragments of SQL, for direct inclusion into the SELECT
@@ -685,7 +677,9 @@ interface IDatabase {
         *
         * Use an empty array, string, or '*' to update all rows.
         *
-        * @param string|array $options
+        * @param string $fname Caller function name
+        *
+        * @param string|array $options Query options
         *
         * Optional: Array of query options. Boolean options are specified by
         * including them in the array as a string value with a numeric key, for
@@ -741,7 +735,7 @@ interface IDatabase {
         *    - SQL_NO_CACHE
         *
         *
-        * @param string|array $join_conds
+        * @param string|array $join_conds Join conditions
         *
         * Optional associative array of table-specific join conditions. In the
         * most common case, this is unnecessary, since the join condition can be
@@ -1478,6 +1472,10 @@ interface IDatabase {
        /**
         * Wait for the replica DB to catch up to a given master position
         *
+        * Note that this does not start any new transactions. If any existing transaction
+        * is flushed, and this is called, then queries will reflect the point the DB was synced
+        * up to (on success) without interference from REPEATABLE-READ snapshots.
+        *
         * @param DBMasterPos $pos
         * @param int $timeout The maximum number of seconds to wait for synchronisation
         * @return int|null Zero if the replica DB was past that position already,
index 30074ec..cc6824d 100644 (file)
@@ -203,11 +203,7 @@ class LBFactoryMulti extends LBFactory {
                        return $this->lastSection;
                }
                list( $dbName, ) = $this->getDBNameAndPrefix( $domain );
-               if ( isset( $this->sectionsByDB[$dbName] ) ) {
-                       $section = $this->sectionsByDB[$dbName];
-               } else {
-                       $section = 'DEFAULT';
-               }
+               $section = $this->sectionsByDB[$dbName] ?? 'DEFAULT';
                $this->lastSection = $section;
                $this->lastDomain = $domain;
 
@@ -221,11 +217,7 @@ class LBFactoryMulti extends LBFactory {
        public function newMainLB( $domain = false ) {
                list( $dbName, ) = $this->getDBNameAndPrefix( $domain );
                $section = $this->getSectionForDomain( $domain );
-               if ( isset( $this->groupLoadsByDB[$dbName] ) ) {
-                       $groupLoads = $this->groupLoadsByDB[$dbName];
-               } else {
-                       $groupLoads = [];
-               }
+               $groupLoads = $this->groupLoadsByDB[$dbName] ?? [];
 
                if ( isset( $this->groupLoadsBySection[$section] ) ) {
                        $groupLoads = array_merge_recursive(
@@ -370,11 +362,7 @@ class LBFactoryMulti extends LBFactory {
                        if ( isset( $groupLoadsByServer[$serverName] ) ) {
                                $serverInfo['groupLoads'] = $groupLoadsByServer[$serverName];
                        }
-                       if ( isset( $this->hostsByName[$serverName] ) ) {
-                               $serverInfo['host'] = $this->hostsByName[$serverName];
-                       } else {
-                               $serverInfo['host'] = $serverName;
-                       }
+                       $serverInfo['host'] = $this->hostsByName[$serverName] ?? $serverName;
                        $serverInfo['hostName'] = $serverName;
                        $serverInfo['load'] = $load;
                        $serverInfo += [ 'flags' => IDatabase::DBO_DEFAULT ];
index 1f3fe4c..b2b2391 100644 (file)
@@ -47,7 +47,7 @@ class LoadBalancer implements ILoadBalancer {
        private $srvCache;
        /** @var WANObjectCache */
        private $wanCache;
-       /** @var object|string Class name or object With profileIn/profileOut methods */
+       /** @var mixed Class name or object With profileIn/profileOut methods */
        private $profiler;
        /** @var TransactionProfiler */
        private $trxProfiler;
@@ -204,11 +204,7 @@ class LoadBalancer implements ILoadBalancer {
                        $this->maxLag = $params['maxLag'];
                }
 
-               if ( isset( $params['loadMonitor'] ) ) {
-                       $this->loadMonitorConfig = $params['loadMonitor'];
-               } else {
-                       $this->loadMonitorConfig = [ 'class' => 'LoadMonitorNull' ];
-               }
+               $this->loadMonitorConfig = $params['loadMonitor'] ?? [ 'class' => 'LoadMonitorNull' ];
                $this->loadMonitorConfig += [ 'lagWarnThreshold' => $this->maxLag ];
 
                foreach ( $params['servers'] as $i => $server ) {
@@ -223,22 +219,10 @@ class LoadBalancer implements ILoadBalancer {
                        }
                }
 
-               if ( isset( $params['srvCache'] ) ) {
-                       $this->srvCache = $params['srvCache'];
-               } else {
-                       $this->srvCache = new EmptyBagOStuff();
-               }
-               if ( isset( $params['wanCache'] ) ) {
-                       $this->wanCache = $params['wanCache'];
-               } else {
-                       $this->wanCache = WANObjectCache::newEmpty();
-               }
+               $this->srvCache = $params['srvCache'] ?? new EmptyBagOStuff();
+               $this->wanCache = $params['wanCache'] ?? WANObjectCache::newEmpty();
                $this->profiler = $params['profiler'] ?? null;
-               if ( isset( $params['trxProfiler'] ) ) {
-                       $this->trxProfiler = $params['trxProfiler'];
-               } else {
-                       $this->trxProfiler = new TransactionProfiler();
-               }
+               $this->trxProfiler = $params['trxProfiler'] ?? new TransactionProfiler();
 
                $this->errorLogger = $params['errorLogger'] ?? function ( Exception $e ) {
                        trigger_error( get_class( $e ) . ': ' . $e->getMessage(), E_USER_WARNING );
@@ -1001,6 +985,8 @@ class LoadBalancer implements ILoadBalancer {
                }
 
                /** @var Database $conn */
+               $conn = null;
+
                if ( isset( $this->conns[$connInUseKey][$i][$domain] ) ) {
                        // Reuse an in-use connection for the same domain
                        $conn = $this->conns[$connInUseKey][$i][$domain];
@@ -1012,22 +998,36 @@ class LoadBalancer implements ILoadBalancer {
                        $this->conns[$connInUseKey][$i][$domain] = $conn;
                        $this->connLogger->debug( __METHOD__ . ": reusing free connection $i/$domain" );
                } elseif ( !empty( $this->conns[$connFreeKey][$i] ) ) {
-                       // Reuse a free connection from another domain
-                       $conn = reset( $this->conns[$connFreeKey][$i] );
-                       $oldDomain = key( $this->conns[$connFreeKey][$i] );
-                       if ( $domainInstance->getDatabase() !== null ) {
-                               $conn->selectDomain( $domainInstance );
-                       } else {
-                               // Stay on the current database, but update the schema/prefix
-                               $conn->dbSchema( $domainInstance->getSchema() );
-                               $conn->tablePrefix( $domainInstance->getTablePrefix() );
+                       // Reuse a free connection from another domain if possible
+                       foreach ( $this->conns[$connFreeKey][$i] as $oldDomain => $conn ) {
+                               if ( $domainInstance->getDatabase() !== null ) {
+                                       // Check if changing the database will require a new connection.
+                                       // In that case, leave the connection handle alone and keep looking.
+                                       // This prevents connections from being closed mid-transaction and can
+                                       // also avoid overhead if the same database will later be requested.
+                                       if (
+                                               $conn->databasesAreIndependent() &&
+                                               $conn->getDBname() !== $domainInstance->getDatabase()
+                                       ) {
+                                               continue;
+                                       }
+                                       // Select the new database, schema, and prefix
+                                       $conn->selectDomain( $domainInstance );
+                               } else {
+                                       // Stay on the current database, but update the schema/prefix
+                                       $conn->dbSchema( $domainInstance->getSchema() );
+                                       $conn->tablePrefix( $domainInstance->getTablePrefix() );
+                               }
+                               unset( $this->conns[$connFreeKey][$i][$oldDomain] );
+                               // Note that if $domain is an empty string, getDomainID() might not match it
+                               $this->conns[$connInUseKey][$i][$conn->getDomainId()] = $conn;
+                               $this->connLogger->debug( __METHOD__ .
+                                       ": reusing free connection from $oldDomain for $domain" );
+                               break;
                        }
-                       unset( $this->conns[$connFreeKey][$i][$oldDomain] );
-                       // Note that if $domain is an empty string, getDomainID() might not match it
-                       $this->conns[$connInUseKey][$i][$conn->getDomainId()] = $conn;
-                       $this->connLogger->debug( __METHOD__ .
-                               ": reusing free connection from $oldDomain for $domain" );
-               } else {
+               }
+
+               if ( !$conn ) {
                        if ( !isset( $this->servers[$i] ) || !is_array( $this->servers[$i] ) ) {
                                throw new InvalidArgumentException( "No server with index '$i'." );
                        }
@@ -1223,23 +1223,13 @@ class LoadBalancer implements ILoadBalancer {
        }
 
        public function getServerName( $i ) {
-               if ( isset( $this->servers[$i]['hostName'] ) ) {
-                       $name = $this->servers[$i]['hostName'];
-               } elseif ( isset( $this->servers[$i]['host'] ) ) {
-                       $name = $this->servers[$i]['host'];
-               } else {
-                       $name = '';
-               }
+               $name = $this->servers[$i]['hostName'] ?? $this->servers[$i]['host'] ?? '';
 
                return ( $name != '' ) ? $name : 'localhost';
        }
 
        public function getServerInfo( $i ) {
-               if ( isset( $this->servers[$i] ) ) {
-                       return $this->servers[$i];
-               } else {
-                       return false;
-               }
+               return $this->servers[$i] ?? false;
        }
 
        public function getServerType( $i ) {
index 3f8a11b..f7d4f7e 100644 (file)
@@ -35,8 +35,6 @@ class ParsoidVirtualRESTService extends VirtualRESTService {
         *   * $title is optional
         *   * $revision is optional
         *
-        * There are also deprecated "v1" requests; see onParsoid1Request
-        * for details.
         * @param array $params Key/value map
         *   - url            : Parsoid server URL
         *   - domain         : Wiki domain to use
@@ -98,8 +96,7 @@ class ParsoidVirtualRESTService extends VirtualRESTService {
                                # Map RESTBase v1 API to Parsoid v3 API (pretty easy)
                                $req['url'] = preg_replace( '#^local/v1/#', 'local/v3/', $req['url'] );
                        } elseif ( $version !== 'v3' ) {
-                               $result[$key] = $this->onParsoid1Request( $req, $idGeneratorFunc );
-                               continue;
+                               throw new Exception( "Only Parsoid v3 API is supported." );
                        }
                        if ( $targetWiki !== 'local' ) {
                                throw new Exception( "Only 'local' target wiki is currently supported" );
@@ -129,101 +126,4 @@ class ParsoidVirtualRESTService extends VirtualRESTService {
                return $result;
        }
 
-       /**
-        * Remap a Parsoid v1 request to a Parsoid v3 request.
-        *
-        * Example Parsoid v1 requests:
-        *  GET /local/v1/page/$title/html/$oldid
-        *   * $oldid is optional
-        *  POST /local/v1/transform/html/to/wikitext/$title/$oldid
-        *   * body: array( 'html' => ... )
-        *   * $title and $oldid are optional
-        *  POST /local/v1/transform/wikitext/to/html/$title
-        *   * body: array( 'wikitext' => ... ) or array( 'wikitext' => ..., 'body' => true/false )
-        *   * $title is optional
-        *
-        * NOTE: the POST APIs aren't "real" Parsoid v1 APIs, they are just what
-        * Visual Editor "pretends" the V1 API is like.  A previous version of
-        * ParsoidVirtualRESTService translated these to the "real" Parsoid v1
-        * API.  We now translate these to the "real" Parsoid v3 API.
-        * @param array $req
-        * @param Closure $idGeneratorFunc
-        * @return array
-        * @throws Exception
-        * @deprecated since 1.26, upgrade your client to issue v3 requests.
-        */
-       public function onParsoid1Request( array $req, Closure $idGeneratorFunc ) {
-               wfDeprecated( __METHOD__, '1.26' );
-               $parts = explode( '/', $req['url'] );
-               list(
-                       $targetWiki, // 'local'
-                       $version, // 'v1'
-                       $reqType // 'page' or 'transform'
-               ) = $parts;
-               if ( $targetWiki !== 'local' ) {
-                       throw new Exception( "Only 'local' target wiki is currently supported" );
-               } elseif ( $version !== 'v1' ) {
-                       throw new Exception( "Only v1 and v3 are supported." );
-               } elseif ( $reqType !== 'page' && $reqType !== 'transform' ) {
-                       throw new Exception( "Request type must be either 'page' or 'transform'" );
-               }
-               $req['url'] = $this->params['url'] . $this->params['domain'] . '/v3/';
-               if ( $reqType === 'page' ) {
-                       $title = $parts[3];
-                       if ( $parts[4] !== 'html' ) {
-                               throw new Exception( "Only 'html' output format is currently supported" );
-                       }
-                       $req['url'] .= 'page/html/' . $title;
-                       if ( isset( $parts[5] ) ) {
-                               $req['url'] .= '/' . $parts[5];
-                       } elseif ( isset( $req['query']['oldid'] ) && $req['query']['oldid'] ) {
-                               $req['url'] .= '/' . $req['query']['oldid'];
-                               unset( $req['query']['oldid'] );
-                       }
-               } elseif ( $reqType === 'transform' ) {
-                       $req['url'] .= 'transform/' . $parts[3] . '/to/' . $parts[5];
-                       // the title
-                       if ( isset( $parts[6] ) ) {
-                               $req['url'] .= '/' . $parts[6];
-                       }
-                       // revision id
-                       if ( isset( $parts[7] ) ) {
-                               $req['url'] .= '/' . $parts[7];
-                       } elseif ( isset( $req['body']['oldid'] ) && $req['body']['oldid'] ) {
-                               $req['url'] .= '/' . $req['body']['oldid'];
-                               unset( $req['body']['oldid'] );
-                       }
-                       if ( $parts[4] !== 'to' ) {
-                               throw new Exception( "Part index 4 is not 'to'" );
-                       }
-                       if ( $parts[3] === 'html' && $parts[5] === 'wikitext' ) {
-                               if ( !isset( $req['body']['html'] ) ) {
-                                       throw new Exception( "You must set an 'html' body key for this request" );
-                               }
-                       } elseif ( $parts[3] == 'wikitext' && $parts[5] == 'html' ) {
-                               if ( !isset( $req['body']['wikitext'] ) ) {
-                                       throw new Exception( "You must set a 'wikitext' body key for this request" );
-                               }
-                               if ( isset( $req['body']['body'] ) ) {
-                                       $req['body']['body_only'] = $req['body']['body'];
-                                       unset( $req['body']['body'] );
-                               }
-                       } else {
-                               throw new Exception( "Transformation unsupported" );
-                       }
-               }
-               // set the appropriate proxy, timeout and headers
-               if ( $this->params['HTTPProxy'] ) {
-                       $req['proxy'] = $this->params['HTTPProxy'];
-               }
-               if ( $this->params['timeout'] != null ) {
-                       $req['reqTimeout'] = $this->params['timeout'];
-               }
-               if ( $this->params['forwardCookies'] ) {
-                       $req['headers']['Cookie'] = $this->params['forwardCookies'];
-               }
-
-               return $req;
-       }
-
 }
index d31e735..f3b7872 100644 (file)
@@ -111,7 +111,7 @@ class RestbaseVirtualRESTService extends VirtualRESTService {
        }
 
        /**
-        * Remaps Parsoid v1/v3 requests to RESTBase v1 requests.
+        * Remaps Parsoid v3 requests to RESTBase v1 requests.
         * @param array $reqs
         * @param Closure $idGeneratorFunc
         * @return array
@@ -123,113 +123,14 @@ class RestbaseVirtualRESTService extends VirtualRESTService {
                        $version = explode( '/', $req['url'] )[1];
                        if ( $version === 'v3' ) {
                                $result[$key] = $this->onParsoid3Request( $req, $idGeneratorFunc );
-                       } elseif ( $version === 'v1' ) {
-                               $result[$key] = $this->onParsoid1Request( $req, $idGeneratorFunc );
                        } else {
-                               throw new Exception( "Only v1 and v3 are supported." );
+                               throw new Exception( "Only Parsoid v3 is supported." );
                        }
                }
 
                return $result;
        }
 
-       /**
-        * Remap a Parsoid v1 request to a RESTBase v1 request.
-        *
-        * Example Parsoid v1 requests:
-        *  GET /local/v1/page/$title/html/$oldid
-        *   * $oldid is optional
-        *  POST /local/v1/transform/html/to/wikitext/$title/$oldid
-        *   * body: array( 'html' => ... )
-        *   * $title and $oldid are optional
-        *  POST /local/v1/transform/wikitext/to/html/$title
-        *   * body: array( 'wikitext' => ... ) or array( 'wikitext' => ..., 'body' => true/false )
-        *   * $title is optional
-        *
-        * NOTE: the POST APIs aren't "real" Parsoid v1 APIs, they are just what
-        * Visual Editor "pretends" the V1 API is like.  (See
-        * ParsoidVirtualRESTService.)
-        * @param array $req
-        * @param Closure $idGeneratorFunc
-        * @return array
-        * @throws Exception
-        * @deprecated since 1.26, upgrade your client to issue v3 requests.
-        */
-       public function onParsoid1Request( array $req, Closure $idGeneratorFunc ) {
-               wfDeprecated( __METHOD__, '1.26' );
-               $parts = explode( '/', $req['url'] );
-               list(
-                       $targetWiki, // 'local'
-                       $version, // 'v1'
-                       $reqType // 'page' or 'transform'
-               ) = $parts;
-               if ( $targetWiki !== 'local' ) {
-                       throw new Exception( "Only 'local' target wiki is currently supported" );
-               } elseif ( $version !== 'v1' ) {
-                       throw new Exception( "Version mismatch: should not happen." );
-               } elseif ( $reqType !== 'page' && $reqType !== 'transform' ) {
-                       throw new Exception( "Request type must be either 'page' or 'transform'" );
-               }
-               $req['url'] = $this->params['url'] . $this->params['domain'] . '/v1/' . $reqType . '/';
-               if ( $reqType === 'page' ) {
-                       $title = $parts[3];
-                       if ( $parts[4] !== 'html' ) {
-                               throw new Exception( "Only 'html' output format is currently supported" );
-                       }
-                       $req['url'] .= 'html/' . $title;
-                       if ( isset( $parts[5] ) ) {
-                               $req['url'] .= '/' . $parts[5];
-                       } elseif ( isset( $req['query']['oldid'] ) && $req['query']['oldid'] ) {
-                               $req['url'] .= '/' . $req['query']['oldid'];
-                               unset( $req['query']['oldid'] );
-                       }
-               } elseif ( $reqType === 'transform' ) {
-                       // from / to transform
-                       $req['url'] .= $parts[3] . '/to/' . $parts[5];
-                       // the title
-                       if ( isset( $parts[6] ) ) {
-                               $req['url'] .= '/' . $parts[6];
-                       }
-                       // revision id
-                       if ( isset( $parts[7] ) ) {
-                               $req['url'] .= '/' . $parts[7];
-                       } elseif ( isset( $req['body']['oldid'] ) && $req['body']['oldid'] ) {
-                               $req['url'] .= '/' . $req['body']['oldid'];
-                               unset( $req['body']['oldid'] );
-                       }
-                       if ( $parts[4] !== 'to' ) {
-                               throw new Exception( "Part index 4 is not 'to'" );
-                       }
-                       if ( $parts[3] === 'html' && $parts[5] === 'wikitext' ) {
-                               if ( !isset( $req['body']['html'] ) ) {
-                                       throw new Exception( "You must set an 'html' body key for this request" );
-                               }
-                       } elseif ( $parts[3] == 'wikitext' && $parts[5] == 'html' ) {
-                               if ( !isset( $req['body']['wikitext'] ) ) {
-                                       throw new Exception( "You must set a 'wikitext' body key for this request" );
-                               }
-                               if ( isset( $req['body']['body'] ) ) {
-                                       $req['body']['body_only'] = $req['body']['body'];
-                                       unset( $req['body']['body'] );
-                               }
-                       } else {
-                               throw new Exception( "Transformation unsupported" );
-                       }
-               }
-               // set the appropriate proxy, timeout and headers
-               if ( $this->params['HTTPProxy'] ) {
-                       $req['proxy'] = $this->params['HTTPProxy'];
-               }
-               if ( $this->params['timeout'] != null ) {
-                       $req['reqTimeout'] = $this->params['timeout'];
-               }
-               if ( $this->params['forwardCookies'] ) {
-                       $req['headers']['Cookie'] = $this->params['forwardCookies'];
-               }
-
-               return $req;
-       }
-
        /**
         * Remap a Parsoid v3 request to a RESTBase v1 request.
         *
index 3762d62..2698cbe 100644 (file)
@@ -68,6 +68,17 @@ class BlockLogFormatter extends LogFormatter {
                        );
                        $params[5] = isset( $params[5] ) ?
                                self::formatBlockFlags( $params[5], $this->context->getLanguage() ) : '';
+
+                       // block restrictions
+                       if ( isset( $params[6] ) ) {
+                               $pages = $params[6]['pages'] ?? [];
+                               $pages = array_map( function ( $page ){
+                                       return $this->makePageLink( Title::newFromText( ( $page ) ) );
+                               }, $pages );
+
+                               $params[6] = Message::rawParam( $this->context->getLanguage()->listToText( $pages ) );
+                               $params[7] = count( $pages );
+                       }
                }
 
                return $params;
@@ -188,6 +199,7 @@ class BlockLogFormatter extends LogFormatter {
                        '6:array:flags',
                        '6::flags' => '6:array:flags',
                ];
+
                foreach ( $map as $index => $key ) {
                        if ( isset( $params[$index] ) ) {
                                $params[$key] = $params[$index];
@@ -195,6 +207,8 @@ class BlockLogFormatter extends LogFormatter {
                        }
                }
 
+               ksort( $params );
+
                $subtype = $entry->getSubtype();
                if ( $subtype === 'block' || $subtype === 'reblock' ) {
                        // Defaults for old log entries missing some fields
@@ -226,7 +240,37 @@ class BlockLogFormatter extends LogFormatter {
                if ( isset( $ret['flags'] ) ) {
                        ApiResult::setIndexedTagName( $ret['flags'], 'f' );
                }
+
+               if ( isset( $ret['restrictions']['pages'] ) ) {
+                       $ret['restrictions']['pages'] = array_map( function ( $title ) {
+                               return $this->formatParameterValueForApi( 'page', 'title-link', $title );
+                       }, $ret['restrictions']['pages'] );
+                       ApiResult::setIndexedTagName( $ret['restrictions']['pages'], 'p' );
+               }
+
                return $ret;
        }
 
+       protected function getMessageKey() {
+               $type = $this->entry->getType();
+               $subtype = $this->entry->getSubtype();
+               $sitewide = $this->entry->getParameters()['sitewide'] ?? true;
+
+               $key = "logentry-$type-$subtype";
+               if ( ( $subtype === 'block' || $subtype === 'reblock' ) && !$sitewide ) {
+                       // $this->getMessageParameters is doing too much. We just need
+                       // to check the presence of restrictions ($param[6]) and calling
+                       // on parent gives us that
+                       $params = parent::getMessageParameters();
+
+                       // message changes depending on whether there are editing restrictions or not
+                       if ( isset( $params[6] ) ) {
+                               $key = "logentry-partial$type-$subtype";
+                       } else {
+                               $key = "logentry-non-editing-$type-$subtype";
+                       }
+               }
+
+               return $key;
+       }
 }
index e14c485..b3afe0b 100644 (file)
@@ -51,13 +51,7 @@ class LogFormatter {
                global $wgLogActionsHandlers;
                $fulltype = $entry->getFullType();
                $wildcard = $entry->getType() . '/*';
-               $handler = '';
-
-               if ( isset( $wgLogActionsHandlers[$fulltype] ) ) {
-                       $handler = $wgLogActionsHandlers[$fulltype];
-               } elseif ( isset( $wgLogActionsHandlers[$wildcard] ) ) {
-                       $handler = $wgLogActionsHandlers[$wildcard];
-               }
+               $handler = $wgLogActionsHandlers[$fulltype] ?? $wgLogActionsHandlers[$wildcard] ?? '';
 
                if ( $handler !== '' && is_string( $handler ) && class_exists( $handler ) ) {
                        return new $handler( $entry );
index af99940..b63f818 100644 (file)
@@ -437,11 +437,7 @@ class LogPage {
                global $wgLogNames;
 
                // BC
-               if ( isset( $wgLogNames[$this->type] ) ) {
-                       $key = $wgLogNames[$this->type];
-               } else {
-                       $key = 'log-name-' . $this->type;
-               }
+               $key = $wgLogNames[$this->type] ?? 'log-name-' . $this->type;
 
                return wfMessage( $key );
        }
@@ -454,11 +450,7 @@ class LogPage {
        public function getDescription() {
                global $wgLogHeaders;
                // BC
-               if ( isset( $wgLogHeaders[$this->type] ) ) {
-                       $key = $wgLogHeaders[$this->type];
-               } else {
-                       $key = 'log-description-' . $this->type;
-               }
+               $key = $wgLogHeaders[$this->type] ?? 'log-description-' . $this->type;
 
                return wfMessage( $key );
        }
@@ -470,14 +462,8 @@ class LogPage {
         */
        public function getRestriction() {
                global $wgLogRestrictions;
-               if ( isset( $wgLogRestrictions[$this->type] ) ) {
-                       $restriction = $wgLogRestrictions[$this->type];
-               } else {
-                       // '' always returns true with $user->isAllowed()
-                       $restriction = '';
-               }
-
-               return $restriction;
+               // '' always returns true with $user->isAllowed()
+               return $wgLogRestrictions[$this->type] ?? '';
        }
 
        /**
index d32e93f..fa5ebfc 100644 (file)
@@ -23,8 +23,8 @@
  * @author Tim Starling
  * @author Luke Welling lwelling@wikimedia.org
  */
-use MediaWiki\Linker\LinkTarget;
 
+use MediaWiki\Linker\LinkTarget;
 use MediaWiki\MediaWikiServices;
 
 /**
index 000bbe3..63a114d 100644 (file)
@@ -50,7 +50,7 @@ class MailAddress {
         * @param string|null $name Human-readable name if a string address is given
         * @param string|null $realName Human-readable real name if a string address is given
         */
-       function __construct( $address, $name = null, $realName = null ) {
+       public function __construct( $address, $name = null, $realName = null ) {
                $this->address = strval( $address );
                $this->name = strval( $name );
                $this->realName = strval( $realName );
@@ -72,25 +72,26 @@ class MailAddress {
         * @return string
         */
        function toString() {
+               if ( !$this->address ) {
+                       return '';
+               }
+
                # PHP's mail() implementation under Windows is somewhat shite, and
                # can't handle "Joe Bloggs <joe@bloggs.com>" format email addresses,
                # so don't bother generating them
-               if ( $this->address ) {
-                       if ( $this->name != '' && !wfIsWindows() ) {
-                               global $wgEnotifUseRealName;
-                               $name = ( $wgEnotifUseRealName && $this->realName !== '' ) ? $this->realName : $this->name;
-                               $quoted = UserMailer::quotedPrintable( $name );
-                               // Must only be quoted if string does not use =? encoding (T191931)
-                               if ( $quoted === $name ) {
-                                       $quoted = '"' . addslashes( $quoted ) . '"';
-                               }
-                               return "$quoted <{$this->address}>";
-                       } else {
-                               return $this->address;
-                       }
-               } else {
-                       return "";
+               if ( $this->name === '' || wfIsWindows() ) {
+                       return $this->address;
                }
+
+               global $wgEnotifUseRealName;
+               $name = ( $wgEnotifUseRealName && $this->realName !== '' ) ? $this->realName : $this->name;
+               $quoted = UserMailer::quotedPrintable( $name );
+               // Must only be quoted if string does not use =? encoding (T191931)
+               if ( $quoted === $name ) {
+                       $quoted = '"' . addslashes( $quoted ) . '"';
+               }
+
+               return "$quoted <{$this->address}>";
        }
 
        function __toString() {
index cdbe1c5..f348c5b 100644 (file)
@@ -431,7 +431,7 @@ class UserMailer {
                        try {
                                foreach ( $to as $recip ) {
                                        $sent = mail(
-                                               $recip,
+                                               $recip->toString(),
                                                self::quotedPrintable( $subject ),
                                                $body,
                                                $headers,
index 441c515..683ded1 100644 (file)
@@ -222,11 +222,7 @@ class IPTC {
                                case '2#055':
                                        // Date created (not date digitized).
                                        // Maps to exif DateTimeOriginal
-                                       if ( isset( $parsed['2#060'] ) ) {
-                                               $time = $parsed['2#060'];
-                                       } else {
-                                               $time = [];
-                                       }
+                                       $time = $parsed['2#060'] ?? [];
                                        $timestamp = self::timeHelper( $val, $time, $c );
                                        if ( $timestamp ) {
                                                $data['DateTimeOriginal'] = $timestamp;
@@ -236,11 +232,7 @@ class IPTC {
                                case '2#062':
                                        // Date converted to digital representation.
                                        // Maps to exif DateTimeDigitized
-                                       if ( isset( $parsed['2#063'] ) ) {
-                                               $time = $parsed['2#063'];
-                                       } else {
-                                               $time = [];
-                                       }
+                                       $time = $parsed['2#063'] ?? [];
                                        $timestamp = self::timeHelper( $val, $time, $c );
                                        if ( $timestamp ) {
                                                $data['DateTimeDigitized'] = $timestamp;
@@ -249,11 +241,7 @@ class IPTC {
 
                                case '2#030':
                                        // Date released.
-                                       if ( isset( $parsed['2#035'] ) ) {
-                                               $time = $parsed['2#035'];
-                                       } else {
-                                               $time = [];
-                                       }
+                                       $time = $parsed['2#035'] ?? [];
                                        $timestamp = self::timeHelper( $val, $time, $c );
                                        if ( $timestamp ) {
                                                $data['DateTimeReleased'] = $timestamp;
@@ -262,11 +250,7 @@ class IPTC {
 
                                case '2#037':
                                        // Date expires.
-                                       if ( isset( $parsed['2#038'] ) ) {
-                                               $time = $parsed['2#038'];
-                                       } else {
-                                               $time = [];
-                                       }
+                                       $time = $parsed['2#038'] ?? [];
                                        $timestamp = self::timeHelper( $val, $time, $c );
                                        if ( $timestamp ) {
                                                $data['DateTimeExpires'] = $timestamp;
index 71db975..66a4291 100644 (file)
@@ -874,8 +874,8 @@ abstract class MediaHandler {
        /**
         * Converts a dimensions array about a potentially multipage document from an
         * exhaustive list of ordered page numbers to a list of page ranges
-        * @param Array $pagesByDimensions
-        * @return String
+        * @param array $pagesByDimensions
+        * @return string
         * @since 1.30
         */
        public static function getPageRangesByDimensions( $pagesByDimensions ) {
index 6d76d5e..ae42f80 100644 (file)
@@ -169,11 +169,7 @@ class ObjectCache {
         * @throws InvalidArgumentException
         */
        public static function newFromParams( $params ) {
-               if ( isset( $params['loggroup'] ) ) {
-                       $params['logger'] = LoggerFactory::getInstance( $params['loggroup'] );
-               } else {
-                       $params['logger'] = LoggerFactory::getInstance( 'objectcache' );
-               }
+               $params['logger'] = LoggerFactory::getInstance( $params['loggroup'] ?? 'objectcache' );
                if ( !isset( $params['keyspace'] ) ) {
                        $params['keyspace'] = self::getDefaultKeyspace();
                }
@@ -340,11 +336,7 @@ class ObjectCache {
                        }
                }
                $params['cache'] = self::newFromParams( $params['store'] );
-               if ( isset( $params['loggroup'] ) ) {
-                       $params['logger'] = LoggerFactory::getInstance( $params['loggroup'] );
-               } else {
-                       $params['logger'] = LoggerFactory::getInstance( 'objectcache' );
-               }
+               $params['logger'] = LoggerFactory::getInstance( $params['loggroup'] ?? 'objectcache' );
                if ( !$wgCommandLineMode ) {
                        // Send the statsd data post-send on HTTP requests; avoid in CLI mode (T181385)
                        $params['stats'] = $services->getStatsdDataFactory();
index 803bf0a..9f7f280 100644 (file)
@@ -120,7 +120,7 @@ class Article implements Page {
         * here, there doesn't seem to be any other way to stop calling
         * OutputPage::enableSectionEditLinks() and still have it work as it did before.
         */
-       private $disableSectionEditForRender = false;
+       protected $viewIsRenderAction = false;
 
        /**
         * Constructor and clear the article
@@ -633,7 +633,7 @@ class Article implements Page {
                if ( $outputPage->isPrintable() ) {
                        $parserOptions->setIsPrintable( true );
                        $poOptions['enableSectionEditLinks'] = false;
-               } elseif ( $this->disableSectionEditForRender
+               } elseif ( $this->viewIsRenderAction
                        || !$this->isCurrent() || !$this->getTitle()->quickUserCan( 'edit', $user )
                ) {
                        $poOptions['enableSectionEditLinks'] = false;
@@ -792,7 +792,7 @@ class Article implements Page {
                                                        $outputPage->setRobotPolicy( 'noindex,nofollow' );
 
                                                        $errortext = $error->getWikiText( false, 'view-pool-error' );
-                                                       $outputPage->addWikiText( Html::errorBox( $errortext ) );
+                                                       $outputPage->wrapWikiTextAsInterface( 'errorbox', $errortext );
                                                }
                                                # Connection or timeout error
                                                return;
@@ -820,9 +820,8 @@ class Article implements Page {
                // Note that the ArticleViewHeader hook is allowed to set $outputDone to a
                // ParserOutput instance.
                $pOutput = ( $outputDone instanceof ParserOutput )
-                       // phpcs:ignore MediaWiki.Usage.NestedInlineTernary.UnparenthesizedTernary -- FIXME T203805
                        ? $outputDone // object fetched by hook
-                       : $this->mParserOutput ?: null; // ParserOutput or null, avoid false
+                       : ( $this->mParserOutput ?: null ); // ParserOutput or null, avoid false
 
                # Adjust title for main page & pages with displaytitle
                if ( $pOutput ) {
@@ -1461,7 +1460,7 @@ class Article implements Page {
 
                        $dir = $this->getContext()->getLanguage()->getDir();
                        $lang = $this->getContext()->getLanguage()->getHtmlCode();
-                       $outputPage->addWikiText( Xml::openElement( 'div', [
+                       $outputPage->addWikiTextAsInterface( Xml::openElement( 'div', [
                                'class' => "noarticletext mw-content-$dir",
                                'dir' => $dir,
                                'lang' => $lang,
@@ -1735,7 +1734,8 @@ class Article implements Page {
        public function render() {
                $this->getContext()->getRequest()->response()->header( 'X-Robots-Tag: noindex' );
                $this->getContext()->getOutput()->setArticleBodyOnly( true );
-               $this->disableSectionEditForRender = true;
+               // We later set 'enableSectionEditLinks=false' based on this; also used by ImagePage
+               $this->viewIsRenderAction = true;
                $this->view();
        }
 
@@ -2087,8 +2087,9 @@ class Article implements Page {
                        );
 
                        if ( $error == '' ) {
-                               $outputPage->addWikiText(
-                                       "<div class=\"error mw-error-cannotdelete\">\n" . $status->getWikiText() . "\n</div>"
+                               $outputPage->wrapWikiTextAsInterface(
+                                       'error mw-error-cannotdelete',
+                                       $status->getWikiText()
                                );
                                $deleteLogPage = new LogPage( 'delete' );
                                $outputPage->addHTML( Xml::element( 'h2', null, $deleteLogPage->getName()->text() ) );
index bf3eaf4..c933c15 100644 (file)
@@ -86,18 +86,15 @@ class ImagePage extends Article {
                $this->repo = $img->getRepo();
        }
 
-       /**
-        * Handler for action=render
-        * Include body text only; none of the image extras
-        */
-       public function render() {
-               $this->getContext()->getOutput()->setArticleBodyOnly( true );
-               parent::view();
-       }
-
        public function view() {
                global $wgShowEXIF;
 
+               // For action=render, include body text only; none of the image extras
+               if ( $this->viewIsRenderAction ) {
+                       parent::view();
+                       return;
+               }
+
                $out = $this->getContext()->getOutput();
                $request = $this->getContext()->getRequest();
                $diff = $request->getVal( 'diff' );
@@ -161,7 +158,7 @@ class ImagePage extends Article {
                if ( $this->mExtraDescription ) {
                        $fol = $this->getContext()->msg( 'shareddescriptionfollows' );
                        if ( !$fol->isDisabled() ) {
-                               $out->addWikiText( $fol->plain() );
+                               $out->addWikiTextAsInterface( $fol->plain() );
                        }
                        $out->addHTML( '<div id="shared-image-desc">' . $this->mExtraDescription . "</div>\n" );
                }
@@ -190,7 +187,10 @@ class ImagePage extends Article {
                                'h2',
                                [ 'id' => 'metadata' ],
                                        $this->getContext()->msg( 'metadata' )->text() ) . "\n" );
-                       $out->addWikiText( $this->makeMetadataTable( $formattedMetadata ) );
+                       $out->wrapWikiTextAsInterface(
+                               'mw-imagepage-section-metadata',
+                               $this->makeMetadataTable( $formattedMetadata )
+                       );
                        $out->addModules( [ 'mediawiki.action.view.metadata' ] );
                }
 
@@ -249,8 +249,7 @@ class ImagePage extends Article {
         * @return string The metadata table. This is treated as Wikitext (!)
         */
        protected function makeMetadataTable( $metadata ) {
-               $r = "<div class=\"mw-imagepage-section-metadata\">";
-               $r .= $this->getContext()->msg( 'metadata-help' )->plain();
+               $r = $this->getContext()->msg( 'metadata-help' )->plain();
                // Intial state is collapsed
                // see filepage.css and mediawiki.action.view.metadata module.
                $r .= "<table id=\"mw_metadata\" class=\"mw_metadata collapsed\">\n";
@@ -267,7 +266,7 @@ class ImagePage extends Article {
                                );
                        }
                }
-               $r .= "</table>\n</div>\n";
+               $r .= "</table>\n";
                return $r;
        }
 
@@ -542,16 +541,15 @@ class ImagePage extends Article {
                                // to the filename, because it can get copied with it.
                                // See T27277.
                                // phpcs:disable Generic.Files.LineLength
-                               $out->addWikiText( <<<EOT
-<div class="fullMedia"><span class="dangerousLink">{$medialink}</span> $dirmark<span class="fileInfo">$longDesc</span></div>
-<div class="mediaWarning">$warning</div>
+                               $out->wrapWikiTextAsInterface( 'fullMedia', <<<EOT
+<span class="dangerousLink">{$medialink}</span> $dirmark<span class="fileInfo">$longDesc</span>
 EOT
                                );
                                // phpcs:enable
+                               $out->wrapWikiTextAsInterface( 'mediaWarning', $warning );
                        } else {
-                               $out->addWikiText( <<<EOT
-<div class="fullMedia">{$medialink} {$dirmark}<span class="fileInfo">$longDesc</span>
-</div>
+                               $out->wrapWikiTextAsInterface( 'fullMedia', <<<EOT
+{$medialink} {$dirmark}<span class="fileInfo">$longDesc</span>
 EOT
                                );
                        }
@@ -574,10 +572,7 @@ EOT
                                        'file-no-thumb-animation'
                                )->plain();
 
-                               $out->addWikiText( <<<EOT
-<div class="mw-noanimatethumb">{$noAnimMesg}</div>
-EOT
-                               );
+                               $out->wrapWikiTextAsInterface( 'mw-noanimatethumb', $noAnimMesg );
                        }
 
                        if ( !$this->displayImg->isLocal() ) {
@@ -1005,7 +1000,7 @@ EOT
                $out->setRobotPolicy( 'noindex,nofollow' );
                $out->setArticleRelated( false );
                $out->enableClientCache( false );
-               $out->addWikiText( $description );
+               $out->addWikiTextAsInterface( $description );
        }
 
        /**
index 086dc80..6a6b2a6 100644 (file)
@@ -1045,20 +1045,22 @@ class WikiPage implements Page, IDBAccessObject {
                $dbw->startAtomic( __METHOD__ );
 
                if ( !$oldLatest || $oldLatest == $this->lockAndGetLatest() ) {
+                       $contLang = MediaWikiServices::getInstance()->getContentLanguage();
+                       $truncatedFragment = $contLang->truncateForDatabase( $rt->getFragment(), 255 );
                        $dbw->upsert(
                                'redirect',
                                [
                                        'rd_from' => $this->getId(),
                                        'rd_namespace' => $rt->getNamespace(),
                                        'rd_title' => $rt->getDBkey(),
-                                       'rd_fragment' => $rt->getFragment(),
+                                       'rd_fragment' => $truncatedFragment,
                                        'rd_interwiki' => $rt->getInterwiki(),
                                ],
                                [ 'rd_from' ],
                                [
                                        'rd_namespace' => $rt->getNamespace(),
                                        'rd_title' => $rt->getDBkey(),
-                                       'rd_fragment' => $rt->getFragment(),
+                                       'rd_fragment' => $truncatedFragment,
                                        'rd_interwiki' => $rt->getInterwiki(),
                                ],
                                __METHOD__
@@ -2727,8 +2729,13 @@ class WikiPage implements Page, IDBAccessObject {
                        // in the job queue to avoid simultaneous deletion operations would add overhead.
                        // Number of archived revisions cannot be known beforehand, because edits can be made
                        // while deletion operations are being processed, changing the number of archivals.
-                       $archivedRevisionCount = $dbw->selectRowCount(
-                               'archive', '1', [ 'ar_page_id' => $id ], __METHOD__
+                       $archivedRevisionCount = $dbw->selectField(
+                               'archive', 'COUNT(*)',
+                               [
+                                       'ar_namespace' => $this->getTitle()->getNamespace(),
+                                       'ar_title' => $this->getTitle()->getDBkey(),
+                                       'ar_page_id' => $id
+                               ], __METHOD__
                        );
 
                        // Clone the title and wikiPage, so we have the information we need when
index d44ac8c..8ab5c31 100644 (file)
@@ -455,11 +455,10 @@ class CoreParserFunctions {
                                return '';
                        }
                } else {
-                       $converter = $parser->getTargetLanguage()->getConverter();
                        $parser->getOutput()->addWarning(
                                wfMessage( 'restricted-displaytitle',
                                        // Message should be parsed, but this param should only be escaped.
-                                       $converter->markNoConversion( wfEscapeWikiText( $text ) )
+                                       wfEscapeWikiText( $text )
                                )->text()
                        );
                        $parser->addTrackingCategory( 'restricted-displaytitle-ignored' );
index de02861..fb79442 100644 (file)
@@ -213,10 +213,7 @@ class DateFormatter {
         */
        private function replace( $matches ) {
                # Extract information from $matches
-               $linked = true;
-               if ( isset( $this->mLinked ) ) {
-                       $linked = $this->mLinked;
-               }
+               $linked = $this->mLinked ?? true;
 
                $bits = [];
                $key = $this->keys[$this->mSource];
index a73c28c..8881786 100644 (file)
@@ -117,6 +117,7 @@ class MWTidy {
                                $instance = new MediaWiki\Tidy\RemexDriver( $config );
                                break;
                        case 'disabled':
+                               wfDeprecated( '"disabled" tidy driver', '1.32' );
                                return false;
                        default:
                                throw new MWException( "Invalid tidy driver: \"{$config['driver']}\"" );
index dcb2c89..3509200 100644 (file)
@@ -273,25 +273,30 @@ class Parser {
        /** @var SpecialPageFactory */
        private $specialPageFactory;
 
+       /** @var Config */
+       private $siteConfig;
+
        /**
-        * @param array $conf See $wgParserConf documentation
+        * @param array $parserConf See $wgParserConf documentation
         * @param MagicWordFactory|null $magicWordFactory
         * @param Language|null $contLang Content language
         * @param ParserFactory|null $factory
         * @param string|null $urlProtocols As returned from wfUrlProtocols()
         * @param SpecialPageFactory|null $spFactory
+        * @param Config|null $siteConfig
         */
        public function __construct(
-               array $conf = [], MagicWordFactory $magicWordFactory = null, Language $contLang = null,
-               ParserFactory $factory = null, $urlProtocols = null, SpecialPageFactory $spFactory = null
+               array $parserConf = [], MagicWordFactory $magicWordFactory = null,
+               Language $contLang = null, ParserFactory $factory = null, $urlProtocols = null,
+               SpecialPageFactory $spFactory = null, Config $siteConfig = null
        ) {
-               $this->mConf = $conf;
+               $this->mConf = $parserConf;
                $this->mUrlProtocols = $urlProtocols ?? wfUrlProtocols();
                $this->mExtLinkBracketedRegex = '/\[(((?i)' . $this->mUrlProtocols . ')' .
                        self::EXT_LINK_ADDR .
                        self::EXT_LINK_URL_CLASS . '*)\p{Zs}*([^\]\\x00-\\x08\\x0a-\\x1F\\x{FFFD}]*?)\]/Su';
-               if ( isset( $conf['preprocessorClass'] ) ) {
-                       $this->mPreprocessorClass = $conf['preprocessorClass'];
+               if ( isset( $parserConf['preprocessorClass'] ) ) {
+                       $this->mPreprocessorClass = $parserConf['preprocessorClass'];
                } elseif ( wfIsHHVM() ) {
                        # Under HHVM Preprocessor_Hash is much faster than Preprocessor_DOM
                        $this->mPreprocessorClass = Preprocessor_Hash::class;
@@ -314,6 +319,7 @@ class Parser {
 
                $this->factory = $factory ?? $services->getParserFactory();
                $this->specialPageFactory = $spFactory ?? $services->getSpecialPageFactory();
+               $this->siteConfig = $siteConfig ?? MediaWikiServices::getInstance()->getMainConfig();
        }
 
        /**
@@ -542,8 +548,6 @@ class Parser {
         * @return string
         */
        protected function makeLimitReport() {
-               global $wgShowHostnames;
-
                $maxIncludeSize = $this->mOptions->getMaxIncludeSize();
 
                $cpuTime = $this->mOutput->getTimeSinceStart( 'cpu' );
@@ -584,7 +588,7 @@ class Parser {
                Hooks::run( 'ParserLimitReportPrepare', [ $this, $this->mOutput ] );
 
                $limitReport = "NewPP limit report\n";
-               if ( $wgShowHostnames ) {
+               if ( $this->siteConfig->get( 'ShowHostnames' ) ) {
                        $limitReport .= 'Parsed by ' . wfHostname() . "\n";
                }
                $limitReport .= 'Cached time: ' . $this->mOutput->getCacheTime() . "\n";
@@ -635,7 +639,7 @@ class Parser {
                $this->mOutput->setLimitReportData( 'limitreport-timingprofile', $profileReport );
 
                // Add other cache related metadata
-               if ( $wgShowHostnames ) {
+               if ( $this->siteConfig->get( 'ShowHostnames' ) ) {
                        $this->mOutput->setLimitReportData( 'cachereport-origin', wfHostname() );
                }
                $this->mOutput->setLimitReportData( 'cachereport-timestamp',
@@ -2153,8 +2157,6 @@ class Parser {
         * @private
         */
        public function replaceInternalLinks2( &$s ) {
-               global $wgExtraInterlanguageLinkPrefixes;
-
                static $tc = false, $e1, $e1_img;
                # the % is needed to support urlencoded titles as well
                if ( !$tc ) {
@@ -2359,7 +2361,7 @@ class Parser {
                                if (
                                        $iw && $this->mOptions->getInterwikiMagic() && $nottalk && (
                                                Language::fetchLanguageName( $iw, null, 'mw' ) ||
-                                               in_array( $iw, $wgExtraInterlanguageLinkPrefixes )
+                                               in_array( $iw, $this->siteConfig->get( 'ExtraInterlanguageLinkPrefixes' ) )
                                        )
                                ) {
                                        # T26502: filter duplicates
@@ -2541,9 +2543,6 @@ class Parser {
         * @return string
         */
        public function getVariableValue( $index, $frame = false ) {
-               global $wgSitename, $wgServer, $wgServerName;
-               global $wgArticlePath, $wgScriptPath, $wgStylePath;
-
                if ( is_null( $this->mTitle ) ) {
                        // If no title set, bad things are going to happen
                        // later. Title should always be set since this
@@ -2845,22 +2844,21 @@ class Parser {
                                $value = SpecialVersion::getVersion();
                                break;
                        case 'articlepath':
-                               return $wgArticlePath;
+                               return $this->siteConfig->get( 'ArticlePath' );
                        case 'sitename':
-                               return $wgSitename;
+                               return $this->siteConfig->get( 'Sitename' );
                        case 'server':
-                               return $wgServer;
+                               return $this->siteConfig->get( 'Server' );
                        case 'servername':
-                               return $wgServerName;
+                               return $this->siteConfig->get( 'ServerName' );
                        case 'scriptpath':
-                               return $wgScriptPath;
+                               return $this->siteConfig->get( 'ScriptPath' );
                        case 'stylepath':
-                               return $wgStylePath;
+                               return $this->siteConfig->get( 'StylePath' );
                        case 'directionmark':
                                return $pageLang->getDirMark();
                        case 'contentlanguage':
-                               global $wgLanguageCode;
-                               return $wgLanguageCode;
+                               return $this->siteConfig->get( 'LanguageCode' );
                        case 'pagelanguage':
                                $value = $pageLang->getCode();
                                break;
@@ -3803,9 +3801,7 @@ class Parser {
         * @return string
         */
        public function interwikiTransclude( $title, $action ) {
-               global $wgEnableScaryTranscluding, $wgTranscludeCacheExpiry;
-
-               if ( !$wgEnableScaryTranscluding ) {
+               if ( !$this->siteConfig->get( 'EnableScaryTranscluding' ) ) {
                        return wfMessage( 'scarytranscludedisabled' )->inContentLanguage()->text();
                }
 
@@ -3825,7 +3821,7 @@ class Parser {
                                ( $wikiId !== false ) ? $wikiId : 'external',
                                sha1( $url )
                        ),
-                       $wgTranscludeCacheExpiry,
+                       $this->siteConfig->get( 'TranscludeCacheExpiry' ),
                        function ( $oldValue, &$ttl ) use ( $url, $fname, $cache ) {
                                $req = MWHttpRequest::factory( $url, [], $fname );
 
@@ -4127,8 +4123,6 @@ class Parser {
         * @private
         */
        public function formatHeadings( $text, $origText, $isMain = true ) {
-               global $wgMaxTocLevel;
-
                # Inhibit editsection links if requested in the page
                if ( isset( $this->mDoubleUnderscores['noeditsection'] ) ) {
                        $maybeShowEditLink = false;
@@ -4199,6 +4193,7 @@ class Parser {
 
                $headlines = $numMatches !== false ? $matches[3] : [];
 
+               $maxTocLevel = $this->siteConfig->get( 'MaxTocLevel' );
                foreach ( $headlines as $headline ) {
                        $isTemplate = false;
                        $titleText = false;
@@ -4221,7 +4216,7 @@ class Parser {
                                # Increase TOC level
                                $toclevel++;
                                $sublevelCount[$toclevel] = 0;
-                               if ( $toclevel < $wgMaxTocLevel ) {
+                               if ( $toclevel < $maxTocLevel ) {
                                        $prevtoclevel = $toclevel;
                                        $toc .= Linker::tocIndent();
                                        $numVisible++;
@@ -4243,8 +4238,8 @@ class Parser {
                                if ( $i == 0 ) {
                                        $toclevel = 1;
                                }
-                               if ( $toclevel < $wgMaxTocLevel ) {
-                                       if ( $prevtoclevel < $wgMaxTocLevel ) {
+                               if ( $toclevel < $maxTocLevel ) {
+                                       if ( $prevtoclevel < $maxTocLevel ) {
                                                # Unindent only if the previous toc level was shown :p
                                                $toc .= Linker::tocUnindent( $prevtoclevel - $toclevel );
                                                $prevtoclevel = $toclevel;
@@ -4254,7 +4249,7 @@ class Parser {
                                }
                        } else {
                                # No change in level, end TOC line
-                               if ( $toclevel < $wgMaxTocLevel ) {
+                               if ( $toclevel < $maxTocLevel ) {
                                        $toc .= Linker::tocLineEnd();
                                }
                        }
@@ -4379,7 +4374,7 @@ class Parser {
                                ) . ' ' . $headline;
                        }
 
-                       if ( $enoughToc && ( !isset( $wgMaxTocLevel ) || $toclevel < $wgMaxTocLevel ) ) {
+                       if ( $enoughToc && ( !isset( $maxTocLevel ) || $toclevel < $maxTocLevel ) ) {
                                $toc .= Linker::tocLine( $linkAnchor, $tocline,
                                        $numbering, $toclevel, ( $isTemplate ? false : $sectionIndex ) );
                        }
@@ -4460,7 +4455,7 @@ class Parser {
                }
 
                if ( $enoughToc ) {
-                       if ( $prevtoclevel > 0 && $prevtoclevel < $wgMaxTocLevel ) {
+                       if ( $prevtoclevel > 0 && $prevtoclevel < $maxTocLevel ) {
                                $toc .= Linker::tocUnindent( $prevtoclevel - 1 );
                        }
                        $toc = Linker::tocList( $toc, $this->mOptions->getUserLangObj() );
@@ -4639,8 +4634,6 @@ class Parser {
         * @return string
         */
        public function getUserSig( &$user, $nickname = false, $fancySig = null ) {
-               global $wgMaxSigChars;
-
                $username = $user->getName();
 
                # If not given, retrieve from the user object.
@@ -4654,7 +4647,7 @@ class Parser {
 
                $nickname = $nickname == null ? $username : $nickname;
 
-               if ( mb_strlen( $nickname ) > $wgMaxSigChars ) {
+               if ( mb_strlen( $nickname ) > $this->siteConfig->get( 'MaxSigChars' ) ) {
                        $nickname = $username;
                        wfDebug( __METHOD__ . ": $username has overlong signature.\n" );
                } elseif ( $fancySig !== false ) {
@@ -5931,9 +5924,9 @@ class Parser {
                return '#' . Sanitizer::escapeIdForLink( $sectionName );
        }
 
-       private static function makeLegacyAnchor( $sectionName ) {
-               global $wgFragmentMode;
-               if ( isset( $wgFragmentMode[1] ) && $wgFragmentMode[1] === 'legacy' ) {
+       private function makeLegacyAnchor( $sectionName ) {
+               $fragmentMode = $this->siteConfig->get( 'FragmentMode' );
+               if ( isset( $fragmentMode[1] ) && $fragmentMode[1] === 'legacy' ) {
                        // ForAttribute() and ForLink() are the same for legacy encoding
                        $id = Sanitizer::escapeIdForAttribute( $sectionName, Sanitizer::ID_FALLBACK );
                } else {
@@ -5971,7 +5964,7 @@ class Parser {
                # Strip out wikitext links(they break the anchor)
                $text = $this->stripSectionName( $text );
                $sectionName = self::getSectionNameFromStrippedText( $text );
-               return self::makeLegacyAnchor( $sectionName );
+               return $this->makeLegacyAnchor( $sectionName );
        }
 
        /**
index 4238b27..eb05ace 100644 (file)
@@ -26,7 +26,7 @@ use MediaWiki\Special\SpecialPageFactory;
  */
 class ParserFactory {
        /** @var array */
-       private $conf;
+       private $parserConf;
 
        /** @var MagicWordFactory */
        private $magicWordFactory;
@@ -40,23 +40,28 @@ class ParserFactory {
        /** @var SpecialPageFactory */
        private $specialPageFactory;
 
+       /** @var Config */
+       private $siteConfig;
+
        /**
-        * @param array $conf See $wgParserConf documentation
+        * @param array $parserConf See $wgParserConf documentation
         * @param MagicWordFactory $magicWordFactory
         * @param Language $contLang Content language
         * @param string $urlProtocols As returned from wfUrlProtocols()
         * @param SpecialPageFactory $spFactory
+        * @param Config $siteConfig
         * @since 1.32
         */
        public function __construct(
-               array $conf, MagicWordFactory $magicWordFactory, Language $contLang, $urlProtocols,
-               SpecialPageFactory $spFactory
+               array $parserConf, MagicWordFactory $magicWordFactory, Language $contLang, $urlProtocols,
+               SpecialPageFactory $spFactory, Config $siteConfig
        ) {
-               $this->conf = $conf;
+               $this->parserConf = $parserConf;
                $this->magicWordFactory = $magicWordFactory;
                $this->contLang = $contLang;
                $this->urlProtocols = $urlProtocols;
                $this->specialPageFactory = $spFactory;
+               $this->siteConfig = $siteConfig;
        }
 
        /**
@@ -64,7 +69,7 @@ class ParserFactory {
         * @since 1.32
         */
        public function create() : Parser {
-               return new Parser( $this->conf, $this->magicWordFactory, $this->contLang, $this,
-                       $this->urlProtocols, $this->specialPageFactory );
+               return new Parser( $this->parserConf, $this->magicWordFactory, $this->contLang, $this,
+                       $this->urlProtocols, $this->specialPageFactory, $this->siteConfig );
        }
 }
index a8da3ce..de67b84 100644 (file)
@@ -1098,7 +1098,7 @@ class ParserOptions {
                        // *UPDATE* ParserOptions::matches() if any of this changes as needed
                        self::$defaults = [
                                'dateformat' => null,
-                               'tidy' => false,
+                               'tidy' => true,
                                'interfaceMessage' => false,
                                'targetLanguage' => null,
                                'removeComments' => true,
@@ -1164,7 +1164,6 @@ class ParserOptions {
                global $wgEnableParserLimitReporting;
 
                return [
-                       'tidy' => true,
                        'enableLimitReport' => $wgEnableParserLimitReporting,
                ];
        }
index 847214a..6260de6 100644 (file)
@@ -1127,11 +1127,7 @@ class ParserOutput extends CacheTime {
         *         or null if no value was set for this key.
         */
        public function getExtensionData( $key ) {
-               if ( isset( $this->mExtensionData[$key] ) ) {
-                       return $this->mExtensionData[$key];
-               }
-
-               return null;
+               return $this->mExtensionData[$key] ?? null;
        }
 
        private static function getTimes( $clock = null ) {
index d00c40f..f4e4efa 100644 (file)
@@ -1876,10 +1876,7 @@ class PPCustomFrame_DOM extends PPFrame_DOM {
         * @return string|bool
         */
        public function getArgument( $index ) {
-               if ( !isset( $this->args[$index] ) ) {
-                       return false;
-               }
-               return $this->args[$index];
+               return $this->args[$index] ?? false;
        }
 
        public function getArguments() {
index 6d6dd89..eb869e2 100644 (file)
@@ -1702,10 +1702,7 @@ class PPCustomFrame_Hash extends PPFrame_Hash {
         * @return string|bool
         */
        public function getArgument( $index ) {
-               if ( !isset( $this->args[$index] ) ) {
-                       return false;
-               }
-               return $this->args[$index];
+               return $this->args[$index] ?? false;
        }
 
        public function getArguments() {
index f32b1b7..3ec6876 100644 (file)
@@ -267,11 +267,7 @@ class DefaultPreferencesFactory implements PreferencesFactory {
                                continue;
                        }
 
-                       if ( isset( $userGroupMemberships[$ueg] ) ) {
-                               $groupStringOrObject = $userGroupMemberships[$ueg];
-                       } else {
-                               $groupStringOrObject = $ueg;
-                       }
+                       $groupStringOrObject = $userGroupMemberships[$ueg] ?? $ueg;
 
                        $userG = UserGroupMembership::getLink( $groupStringOrObject, $context, 'html' );
                        $userM = UserGroupMembership::getLink( $groupStringOrObject, $context, 'html',
@@ -467,7 +463,9 @@ class DefaultPreferencesFactory implements PreferencesFactory {
                        $user,
                        ParserOptions::newFromContext( $context )
                );
-               $oldsigHTML = $context->getOutput()->parseInline( $oldsigWikiText, true, true );
+               $oldsigHTML = Parser::stripOuterParagraph(
+                       $context->getOutput()->parseAsContent( $oldsigWikiText )
+               );
                $defaultPreferences['oldsig'] = [
                        'type' => 'info',
                        'raw' => true,
@@ -911,11 +909,6 @@ class DefaultPreferencesFactory implements PreferencesFactory {
                        'section' => 'editing/editor',
                        'label-message' => 'tog-useeditwarning',
                ];
-               $defaultPreferences['showtoolbar'] = [
-                       'type' => 'toggle',
-                       'section' => 'editing/editor',
-                       'label-message' => 'tog-showtoolbar',
-               ];
 
                $defaultPreferences['previewonfirst'] = [
                        'type' => 'toggle',
index eb56e13..e43b3b8 100644 (file)
@@ -484,11 +484,7 @@ class ExtensionProcessor implements Processor {
         * @param string $dir
         */
        protected function extractConfig2( array $info, $dir ) {
-               if ( isset( $info['config_prefix'] ) ) {
-                       $prefix = $info['config_prefix'];
-               } else {
-                       $prefix = 'wg';
-               }
+               $prefix = $info['config_prefix'] ?? 'wg';
                if ( isset( $info['config'] ) ) {
                        foreach ( $info['config'] as $key => $data ) {
                                $value = $data['value'];
index e2b60fc..2fc81e3 100644 (file)
@@ -550,11 +550,7 @@ class ResourceLoader implements LoggerAwareInterface {
                                $object->setConfig( $this->getConfig() );
                                $object->setLogger( $this->logger );
                        } else {
-                               if ( !isset( $info['class'] ) ) {
-                                       $class = ResourceLoaderFileModule::class;
-                               } else {
-                                       $class = $info['class'];
-                               }
+                               $class = $info['class'] ?? ResourceLoaderFileModule::class;
                                /** @var ResourceLoaderModule $object */
                                $object = new $class( $info );
                                $object->setConfig( $this->getConfig() );
@@ -1364,7 +1360,7 @@ MESSAGE;
         * - new XmlJsCode( '{}' )
         * - new stdClass() // (object) []
         *
-        * @param Array $array
+        * @param array $array
         */
        private static function trimArray( array &$array ) {
                $i = count( $array );
diff --git a/includes/resourceloader/ResourceLoaderEditToolbarModule.php b/includes/resourceloader/ResourceLoaderEditToolbarModule.php
deleted file mode 100644 (file)
index 2a6af71..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-<?php
-/**
- * ResourceLoader module for the edit toolbar.
- *
- * 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
- */
-
-/**
- * ResourceLoader module for the edit toolbar.
- *
- * @since 1.24
- */
-class ResourceLoaderEditToolbarModule extends ResourceLoaderFileModule {
-       /**
-        * Get language-specific LESS variables for this module.
-        *
-        * @since 1.27
-        * @param ResourceLoaderContext $context
-        * @return array
-        */
-       protected function getLessVars( ResourceLoaderContext $context ) {
-               $vars = parent::getLessVars( $context );
-               $language = Language::factory( $context->getLanguage() );
-               foreach ( $language->getImageFiles() as $key => $value ) {
-                       $vars[$key] = CSSMin::serializeStringValue( $value );
-               }
-               return $vars;
-       }
-}
index e4a753f..b5d31ef 100644 (file)
@@ -78,10 +78,11 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
                $oldCommentSchema = $conf->get( 'CommentTableSchemaMigrationStage' ) === MIGRATION_OLD;
 
                // Build list of variables
+               $skin = $context->getSkin();
                $vars = [
                        'wgLoadScript' => wfScript( 'load' ),
                        'debug' => $context->getDebug(),
-                       'skin' => $context->getSkin(),
+                       'skin' => $skin,
                        'stylepath' => $conf->get( 'StylePath' ),
                        'wgUrlProtocols' => wfUrlProtocols(),
                        'wgArticlePath' => $conf->get( 'ArticlePath' ),
@@ -126,7 +127,7 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
                        'wgCommentCodePointLimit' => $oldCommentSchema ? null : CommentStore::COMMENT_CHARACTER_LIMIT,
                ];
 
-               Hooks::run( 'ResourceLoaderGetConfigVars', [ &$vars ] );
+               Hooks::run( 'ResourceLoaderGetConfigVars', [ &$vars, $skin ] );
 
                return $vars;
        }
index ad9f934..2941f0a 100644 (file)
@@ -219,10 +219,7 @@ abstract class SearchEngine {
         * @return mixed the feature value or null if unset
         */
        public function getFeatureData( $feature ) {
-               if ( isset( $this->features[$feature] ) ) {
-                       return $this->features[$feature];
-               }
-               return null;
+               return $this->features[$feature] ?? null;
        }
 
        /**
index 0ddc443..467e4ef 100644 (file)
@@ -237,7 +237,7 @@ class Shell {
                // Give site config file a chance to run the script in a wrapper.
                // The caller may likely want to call wfBasename() on $script.
                Hooks::run( 'wfShellWikiCmd', [ &$script, &$parameters, &$options ] );
-               $cmd = isset( $options['php'] ) ? [ $options['php'] ] : [ $wgPhpCli ];
+               $cmd = [ $options['php'] ?? $wgPhpCli ];
                if ( isset( $options['wrapper'] ) ) {
                        $cmd[] = $options['wrapper'];
                }
index 6d98e72..f0a6e54 100644 (file)
@@ -87,11 +87,7 @@ class HashSiteStore implements SiteStore {
         * @return Site|null
         */
        public function getSite( $globalId, $source = 'cache' ) {
-               if ( isset( $this->sites[$globalId] ) ) {
-                       return $this->sites[$globalId];
-               } else {
-                       return null;
-               }
+               return $this->sites[$globalId] ?? null;
        }
 
        /**
index 64145ad..a71daa0 100644 (file)
@@ -371,11 +371,7 @@ abstract class BaseTemplate extends QuickTemplate {
         * @return string
         */
        function makeLink( $key, $item, $options = [] ) {
-               if ( isset( $item['text'] ) ) {
-                       $text = $item['text'];
-               } else {
-                       $text = wfMessage( $item['msg'] ?? $key )->text();
-               }
+               $text = $item['text'] ?? wfMessage( $item['msg'] ?? $key )->text();
 
                $html = htmlspecialchars( $text );
 
index 901676a..91d2a7e 100644 (file)
@@ -342,10 +342,7 @@ abstract class Skin extends ContextSource {
         * @return Title
         */
        public function getRelevantTitle() {
-               if ( isset( $this->mRelevantTitle ) ) {
-                       return $this->mRelevantTitle;
-               }
-               return $this->getTitle();
+               return $this->mRelevantTitle ?? $this->getTitle();
        }
 
        /**
@@ -1610,21 +1607,14 @@ abstract class Skin extends ContextSource {
         * @param string $section The designation of the section being pointed to,
         *   to be included in the link, like "&section=$section"
         * @param string|null $tooltip The tooltip to use for the link: will be escaped
-        *   and wrapped in the 'editsectionhint' message.
-        *   Not setting this parameter is deprecated.
-        * @param Language|string $lang Language object or language code string.
-        *   Type string is deprecated. Not setting this parameter is deprecated.
+        *   and wrapped in the 'editsectionhint' message
+        * @param Language $lang Language object
         * @return string HTML to use for edit link
         */
-       public function doEditSectionLink( Title $nt, $section, $tooltip = null, $lang = false ) {
+       public function doEditSectionLink( Title $nt, $section, $tooltip, Language $lang ) {
                // HTML generated here should probably have userlangattributes
                // added to it for LTR text on RTL pages
 
-               if ( !$lang instanceof Language ) {
-                       wfDeprecated( __METHOD__ . ' with other type than Language for $lang', '1.32' );
-                       $lang = wfGetLangObj( $lang );
-               }
-
                $attribs = [];
                if ( !is_null( $tooltip ) ) {
                        $attribs['title'] = $this->msg( 'editsectionhint' )->rawParams( $tooltip )
index 8ae4649..4201f80 100644 (file)
@@ -836,7 +836,7 @@ abstract class ChangesListSpecialPage extends SpecialPage {
        /**
         * Fetch the change tags list for the front end
         *
-        * @return Array Tag data
+        * @return array Tag data
         */
        protected function getChangeTagList() {
                $cache = ObjectCache::getMainWANInstance();
@@ -1591,7 +1591,8 @@ abstract class ChangesListSpecialPage extends SpecialPage {
        }
 
        /**
-        * Send the text to be displayed before the options. Should use $this->getOutput()->addWikiText()
+        * Send the text to be displayed before the options.
+        * Should use $this->getOutput()->addWikiTextAsInterface()
         * or similar methods to print the text.
         *
         * @param FormOptions $opts
@@ -1601,7 +1602,8 @@ abstract class ChangesListSpecialPage extends SpecialPage {
        }
 
        /**
-        * Send the text to be displayed after the options. Should use $this->getOutput()->addWikiText()
+        * Send the text to be displayed after the options.
+        * Should use $this->getOutput()->addWikiTextAsInterface()
         * or similar methods to print the text.
         *
         * @param FormOptions $opts
index 99a5a9a..eb2259e 100644 (file)
@@ -445,7 +445,7 @@ abstract class LoginSignupSpecialPage extends AuthManagerSpecialPage {
                }
                if ( $extraMessages ) {
                        $extraMessages = Status::wrap( $extraMessages );
-                       $out->addWikiText( $extraMessages->getWikiText() );
+                       $out->addWikiTextAsInterface( $extraMessages->getWikiText() );
                }
 
                $out->addHTML( $injected_html );
index 013ceb2..58212dd 100644 (file)
@@ -352,17 +352,11 @@ class SpecialPageFactory {
                $caseFoldedAlias = $this->contLang->caseFold( $bits[0] );
                $caseFoldedAlias = str_replace( ' ', '_', $caseFoldedAlias );
                $aliases = $this->getAliasList();
-               if ( isset( $aliases[$caseFoldedAlias] ) ) {
-                       $name = $aliases[$caseFoldedAlias];
-               } else {
+               if ( !isset( $aliases[$caseFoldedAlias] ) ) {
                        return [ null, null ];
                }
-
-               if ( !isset( $bits[1] ) ) { // T4087
-                       $par = null;
-               } else {
-                       $par = $bits[1];
-               }
+               $name = $aliases[$caseFoldedAlias];
+               $par = $bits[1] ?? null; // T4087
 
                return [ $name, $par ];
        }
@@ -504,11 +498,7 @@ class SpecialPageFactory {
                // @todo FIXME: Redirects broken due to this call
                $bits = explode( '/', $title->getDBkey(), 2 );
                $name = $bits[0];
-               if ( !isset( $bits[1] ) ) { // T4087
-                       $par = null;
-               } else {
-                       $par = $bits[1];
-               }
+               $par = $bits[1] ?? null; // T4087
 
                $page = $this->getPage( $name );
                if ( !$page ) {
@@ -606,6 +596,9 @@ class SpecialPageFactory {
                        'user' => $main->getUser(),
                        'language' => $main->getLanguage(),
                ];
+               if ( $main->canUseWikiPage() ) {
+                       $ctx['wikipage'] = $main->getWikiPage();
+               }
 
                // Override
                $wgTitle = $title;
@@ -633,6 +626,9 @@ class SpecialPageFactory {
                $main->setRequest( $ctx['request'] );
                $main->setUser( $ctx['user'] );
                $main->setLanguage( $ctx['language'] );
+               if ( isset( $ctx['wikipage'] ) ) {
+                       $main->setWikiPage( $ctx['wikipage'] );
+               }
 
                return $ret;
        }
index a60595a..6b9b9d4 100644 (file)
@@ -21,6 +21,9 @@
  * @ingroup SpecialPage
  */
 
+use MediaWiki\Block\BlockRestriction;
+use MediaWiki\Block\Restriction\PageRestriction;
+
 /**
  * A special page that allows users with 'block' right to block users from
  * editing pages and other actions
@@ -137,41 +140,63 @@ class SpecialBlock extends FormSpecialPage {
 
                $conf = $this->getConfig();
                $oldCommentSchema = $conf->get( 'CommentTableSchemaMigrationStage' ) === MIGRATION_OLD;
+               $enablePartialBlocks = $conf->get( 'EnablePartialBlocks' );
 
-               $a = [
-                       'Target' => [
-                               'type' => 'user',
-                               'ipallowed' => true,
-                               'iprange' => true,
-                               'label-message' => 'ipaddressorusername',
-                               'id' => 'mw-bi-target',
-                               'size' => '45',
-                               'autofocus' => true,
-                               'required' => true,
-                               'validation-callback' => [ __CLASS__, 'validateTargetField' ],
-                       ],
-                       'Expiry' => [
-                               'type' => 'expiry',
-                               'label-message' => 'ipbexpiry',
-                               'required' => true,
-                               'options' => $suggestedDurations,
-                               'default' => $this->msg( 'ipb-default-expiry' )->inContentLanguage()->text(),
-                       ],
-                       'Reason' => [
-                               'type' => 'selectandother',
-                               // HTML maxlength uses "UTF-16 code units", which means that characters outside BMP
-                               // (e.g. emojis) count for two each. This limit is overridden in JS to instead count
-                               // Unicode codepoints (or 255 UTF-8 bytes for old schema).
-                               'maxlength' => $oldCommentSchema ? 255 : CommentStore::COMMENT_CHARACTER_LIMIT,
-                               'maxlength-unit' => 'codepoints',
-                               'label-message' => 'ipbreason',
-                               'options-message' => 'ipbreason-dropdown',
-                       ],
-                       'CreateAccount' => [
-                               'type' => 'check',
-                               'label-message' => 'ipbcreateaccount',
-                               'default' => true,
-                       ],
+               $a = [];
+
+               $a['Target'] = [
+                       'type' => 'user',
+                       'ipallowed' => true,
+                       'iprange' => true,
+                       'label-message' => 'ipaddressorusername',
+                       'id' => 'mw-bi-target',
+                       'size' => '45',
+                       'autofocus' => true,
+                       'required' => true,
+                       'validation-callback' => [ __CLASS__, 'validateTargetField' ],
+               ];
+
+               if ( $enablePartialBlocks ) {
+                       $a['EditingRestriction'] = [
+                               'type' => 'radio',
+                               'label' => $this->msg( 'ipb-type-label' )->text(),
+                               'options' => [
+                                       $this->msg( 'ipb-sitewide' )->text() => 'sitewide',
+                                       $this->msg( 'ipb-partial' )->text() => 'partial',
+                               ],
+                       ];
+                       $a['PageRestrictions'] = [
+                               'type' => 'titlesmultiselect',
+                               'label' => $this->msg( 'ipb-pages-label' )->text(),
+                               'exists' => true,
+                               'max' => 10,
+                               'cssclass' => 'mw-block-page-restrictions',
+                       ];
+               }
+
+               $a['Expiry'] = [
+                       'type' => 'expiry',
+                       'label-message' => 'ipbexpiry',
+                       'required' => true,
+                       'options' => $suggestedDurations,
+                       'default' => $this->msg( 'ipb-default-expiry' )->inContentLanguage()->text(),
+               ];
+
+               $a['Reason'] = [
+                       'type' => 'selectandother',
+                       // HTML maxlength uses "UTF-16 code units", which means that characters outside BMP
+                       // (e.g. emojis) count for two each. This limit is overridden in JS to instead count
+                       // Unicode codepoints (or 255 UTF-8 bytes for old schema).
+                       'maxlength' => $oldCommentSchema ? 255 : CommentStore::COMMENT_CHARACTER_LIMIT,
+                       'maxlength-unit' => 'codepoints',
+                       'label-message' => 'ipbreason',
+                       'options-message' => 'ipbreason-dropdown',
+               ];
+
+               $a['CreateAccount'] = [
+                       'type' => 'check',
+                       'label-message' => 'ipbcreateaccount',
+                       'default' => true,
                ];
 
                if ( self::canBlockEmail( $user ) ) {
@@ -327,6 +352,29 @@ class SpecialBlock extends FormSpecialPage {
                        unset( $fields['Confirm']['default'] );
                        $this->preErrors[] = [ 'ipb-blockingself', 'ipb-confirmaction' ];
                }
+
+               if ( $this->getConfig()->get( 'EnablePartialBlocks' ) ) {
+                       if ( $block instanceof Block && !$block->isSitewide() ) {
+                               $fields['EditingRestriction']['default'] = 'partial';
+                       } else {
+                               $fields['EditingRestriction']['default'] = 'sitewide';
+                       }
+
+                       if ( $block instanceof Block ) {
+                               $pageRestrictions = [];
+                               foreach ( $block->getRestrictions() as $restriction ) {
+                                       if ( $restriction->getType() !== 'page' ) {
+                                               continue;
+                                       }
+
+                                       $pageRestrictions[] = $restriction->getTitle()->getPrefixedText();
+                               }
+
+                               // Sort the restrictions so they are in alphabetical order.
+                               sort( $pageRestrictions );
+                               $fields['PageRestrictions']['default'] = implode( "\n", $pageRestrictions );
+                       }
+               }
        }
 
        /**
@@ -632,6 +680,7 @@ class SpecialBlock extends FormSpecialPage {
                global $wgBlockAllowsUTEdit, $wgHideUserContribLimit;
 
                $performer = $context->getUser();
+               $enablePartialBlocks = $context->getConfig()->get( 'EnablePartialBlocks' );
 
                // Handled by field validator callback
                // self::validateTargetField( $data['Target'] );
@@ -740,11 +789,35 @@ class SpecialBlock extends FormSpecialPage {
                $block->isAutoblocking( $data['AutoBlock'] );
                $block->mHideName = $data['HideUser'];
 
+               if (
+                       $enablePartialBlocks &&
+                       isset( $data['EditingRestriction'] ) &&
+                       $data['EditingRestriction'] === 'partial'
+                ) {
+                        $block->isSitewide( false );
+               }
+
                $reason = [ 'hookaborted' ];
                if ( !Hooks::run( 'BlockIp', [ &$block, &$performer, &$reason ] ) ) {
                        return $reason;
                }
 
+               $restrictions = [];
+               if ( $enablePartialBlocks ) {
+                       if ( !empty( $data['PageRestrictions'] ) ) {
+                               $restrictions = array_map( function ( $text ) {
+                                       $title = Title::newFromText( $text );
+                                       // Use the link cache since the title has already been loaded when
+                                       // the field was validated.
+                                       $restriction = new PageRestriction( 0, $title->getArticleId() );
+                                       $restriction->setTitle( $title );
+                                       return $restriction;
+                               }, explode( "\n", $data['PageRestrictions'] ) );
+                       }
+
+                       $block->setRestrictions( $restrictions );
+               }
+
                $priorBlock = null;
                # Try to insert block. Is there a conflicting block?
                $status = $block->insert();
@@ -784,6 +857,17 @@ class SpecialBlock extends FormSpecialPage {
                                $currentBlock->prevents( 'editownusertalk', $block->prevents( 'editownusertalk' ) );
                                $currentBlock->mReason = $block->mReason;
 
+                               if ( $enablePartialBlocks ) {
+                                       // Maintain the sitewide status. If partial blocks is not enabled,
+                                       // saving the block will result in a sitewide block.
+                                       $currentBlock->isSitewide( $block->isSitewide() );
+
+                                       // Set the block id of the restrictions.
+                                       $currentBlock->setRestrictions(
+                                               BlockRestriction::setBlockId( $currentBlock->getId(), $restrictions )
+                                       );
+                               }
+
                                $status = $currentBlock->update();
 
                                $logaction = 'reblock';
@@ -826,6 +910,13 @@ class SpecialBlock extends FormSpecialPage {
                $logParams = [];
                $logParams['5::duration'] = $data['Expiry'];
                $logParams['6::flags'] = self::blockLogFlags( $data, $type );
+               $logParams['sitewide'] = $block->isSitewide();
+
+               if ( $enablePartialBlocks && !empty( $data['PageRestrictions'] ) ) {
+                       $logParams['7::restrictions'] = [
+                               'pages' => explode( "\n", $data['PageRestrictions'] ),
+                       ];
+               }
 
                # Make log entry, if the name is hidden, put it in the suppression log
                $log_type = $data['HideUser'] ? 'suppress' : 'block';
@@ -965,7 +1056,10 @@ class SpecialBlock extends FormSpecialPage {
         * @return string
         */
        protected static function blockLogFlags( array $data, $type ) {
-               global $wgBlockAllowsUTEdit;
+               $config = RequestContext::getMain()->getConfig();
+
+               $blockAllowsUTEdit = $config->get( 'BlockAllowsUTEdit' );
+
                $flags = [];
 
                # when blocking a user the option 'anononly' is not available/has no effect
@@ -991,7 +1085,7 @@ class SpecialBlock extends FormSpecialPage {
                        $flags[] = 'noemail';
                }
 
-               if ( $wgBlockAllowsUTEdit && $data['DisableUTEdit'] ) {
+               if ( $blockAllowsUTEdit && $data['DisableUTEdit'] ) {
                        // For grepping: message block-log-flags-nousertalk
                        $flags[] = 'nousertalk';
                }
index c187156..02c33b5 100644 (file)
@@ -172,7 +172,7 @@ class SpecialBookSources extends SpecialPage {
                                // XXX: in the future, this could be stored as structured data, defining a list of book sources
 
                                $text = $content->getNativeData();
-                               $out->addWikiText( str_replace( 'MAGICNUMBER', $isbn, $text ) );
+                               $out->addWikiTextAsInterface( str_replace( 'MAGICNUMBER', $isbn, $text ) );
 
                                return true;
                        } else {
index f494b9d..b51f92f 100644 (file)
@@ -110,7 +110,7 @@ class EmailConfirmation extends UnlistedSpecialPage {
                                // should never happen, but if so, don't let the user without any message
                                $out->addWikiMsg( 'confirmemail_sent' );
                        } elseif ( $retval instanceof Status && $retval->isGood() ) {
-                               $out->addWikiText( $retval->getValue() );
+                               $out->addWikiTextAsInterface( $retval->getValue() );
                        }
                } else {
                        // date and time are separate parameters to facilitate localisation.
index b657335..6198a84 100644 (file)
@@ -454,8 +454,8 @@ class SpecialEditTags extends UnlistedSpecialPage {
         */
        protected function failure( $status ) {
                $this->getOutput()->setPageTitle( $this->msg( 'actionfailed' ) );
-               $this->getOutput()->addWikiText(
-                       Html::errorBox( $status->getWikiText( 'tags-edit-failure' ) )
+               $this->getOutput()->wrapWikiTextAsInterface(
+                       'errorbox', $status->getWikiText( 'tags-edit-failure' )
                );
                $this->showForm();
        }
index 083b3c0..16cebe0 100644 (file)
@@ -459,8 +459,58 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
         * Add a list of targets to a user's watchlist
         *
         * @param string[]|LinkTarget[] $targets
+        * @return bool
+        * @throws FatalError
+        * @throws MWException
         */
-       private function watchTitles( $targets ) {
+       private function watchTitles( array $targets ) {
+               return MediaWikiServices::getInstance()->getWatchedItemStore()
+                       ->addWatchBatchForUser( $this->getUser(), $this->getExpandedTargets( $targets ) )
+                       && $this->runWatchUnwatchCompleteHook( 'Watch', $targets );
+       }
+
+       /**
+        * Remove a list of titles from a user's watchlist
+        *
+        * $titles can be an array of strings or Title objects; the former
+        * is preferred, since Titles are very memory-heavy
+        *
+        * @param string[]|LinkTarget[] $targets
+        *
+        * @return bool
+        * @throws FatalError
+        * @throws MWException
+        */
+       private function unwatchTitles( array $targets ) {
+               return MediaWikiServices::getInstance()->getWatchedItemStore()
+                       ->removeWatchBatchForUser( $this->getUser(), $this->getExpandedTargets( $targets ) )
+                       && $this->runWatchUnwatchCompleteHook( 'Unwatch', $targets );
+       }
+
+       /**
+        * @param string $action
+        *   Can be "Watch" or "Unwatch"
+        * @param string[]|LinkTarget[] $targets
+        * @return bool
+        * @throws FatalError
+        * @throws MWException
+        */
+       private function runWatchUnwatchCompleteHook( $action, $targets ) {
+               foreach ( $targets as $target ) {
+                       $title = $target instanceof TitleValue ?
+                               Title::newFromTitleValue( $target ) :
+                               Title::newFromText( $target );
+                       $page = WikiPage::factory( $title );
+                       Hooks::run( $action . 'ArticleComplete', [ $this->getUser(), &$page ] );
+               }
+               return true;
+       }
+
+       /**
+        * @param string[]|LinkTarget[] $targets
+        * @return TitleValue[]
+        */
+       private function getExpandedTargets( array $targets ) {
                $expandedTargets = [];
                foreach ( $targets as $target ) {
                        if ( !$target instanceof LinkTarget ) {
@@ -477,37 +527,7 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
                        $expandedTargets[] = new TitleValue( MWNamespace::getSubject( $ns ), $dbKey );
                        $expandedTargets[] = new TitleValue( MWNamespace::getTalk( $ns ), $dbKey );
                }
-
-               MediaWikiServices::getInstance()->getWatchedItemStore()->addWatchBatchForUser(
-                       $this->getUser(),
-                       $expandedTargets
-               );
-       }
-
-       /**
-        * Remove a list of titles from a user's watchlist
-        *
-        * $titles can be an array of strings or Title objects; the former
-        * is preferred, since Titles are very memory-heavy
-        *
-        * @param array $titles Array of strings, or Title objects
-        */
-       private function unwatchTitles( $titles ) {
-               $store = MediaWikiServices::getInstance()->getWatchedItemStore();
-
-               foreach ( $titles as $title ) {
-                       if ( !$title instanceof Title ) {
-                               $title = Title::newFromText( $title );
-                       }
-
-                       if ( $title instanceof Title ) {
-                               $store->removeWatch( $this->getUser(), $title->getSubjectPage() );
-                               $store->removeWatch( $this->getUser(), $title->getTalkPage() );
-
-                               $page = WikiPage::factory( $title );
-                               Hooks::run( 'UnwatchArticleComplete', [ $this->getUser(), &$page ] );
-                       }
-               }
+               return $expandedTargets;
        }
 
        public function submitNormal( $data ) {
index 7de44d8..aebec2f 100644 (file)
@@ -92,7 +92,6 @@ class SpecialEmailUser extends UnlistedSpecialPage {
                        'Text' => [
                                'type' => 'textarea',
                                'rows' => 20,
-                               'cols' => 80,
                                'label-message' => 'emailmessage',
                                'required' => true,
                        ],
@@ -106,12 +105,16 @@ class SpecialEmailUser extends UnlistedSpecialPage {
 
        public function execute( $par ) {
                $out = $this->getOutput();
+               $request = $this->getRequest();
                $out->addModuleStyles( 'mediawiki.special' );
 
                $this->mTarget = is_null( $par )
-                       ? $this->getRequest()->getVal( 'wpTarget', $this->getRequest()->getVal( 'target', '' ) )
+                       ? $request->getVal( 'wpTarget', $request->getVal( 'target', '' ) )
                        : $par;
 
+               // Make sure, that HTMLForm uses the correct target.
+               $request->setVal( 'wpTarget', $this->mTarget );
+
                // This needs to be below assignment of $this->mTarget because
                // getDescription() needs it to determine the correct page title.
                $this->setHeaders();
@@ -131,7 +134,7 @@ class SpecialEmailUser extends UnlistedSpecialPage {
                        case 'badaccess':
                                throw new PermissionsError( 'sendemail' );
                        case 'blockedemailuser':
-                               throw new UserBlockedError( $this->getUser()->mBlock );
+                               throw $this->getBlockedEmailError();
                        case 'actionthrottledtext':
                                throw new ThrottledError;
                        case 'mailnologin':
@@ -142,45 +145,22 @@ class SpecialEmailUser extends UnlistedSpecialPage {
                                list( $title, $msg, $params ) = $error;
                                throw new ErrorPageError( $title, $msg, $params );
                }
-               // Got a valid target user name? Else ask for one.
-               $ret = self::getTarget( $this->mTarget, $this->getUser() );
-               if ( !$ret instanceof User ) {
-                       if ( $this->mTarget != '' ) {
-                               // Messages used here: notargettext, noemailtext, nowikiemailtext
-                               $ret = ( $ret == 'notarget' ) ? 'emailnotarget' : ( $ret . 'text' );
-                               $out->wrapWikiMsg( "<p class='error'>$1</p>", $ret );
-                       }
-                       $out->addHTML( $this->userForm( $this->mTarget ) );
-
-                       return;
-               }
-
-               $this->mTargetObj = $ret;
-
-               // Set the 'relevant user' in the skin, so it displays links like Contributions,
-               // User logs, UserRights, etc.
-               $this->getSkin()->setRelevantUser( $this->mTargetObj );
 
+               // Make sure, that a submitted form isn't submitted to a subpage (which could be
+               // a non-existing username)
                $context = new DerivativeContext( $this->getContext() );
                $context->setTitle( $this->getPageTitle() ); // Remove subpage
-               $form = new HTMLForm( $this->getFormFields(), $context );
-               // By now we are supposed to be sure that $this->mTarget is a user name
-               $form->addPreText( $this->msg( 'emailpagetext', $this->mTarget )->parse() );
-               $form->setSubmitTextMsg( 'emailsend' );
-               $form->setSubmitCallback( [ __CLASS__, 'uiSubmit' ] );
-               $form->setWrapperLegendMsg( 'email-legend' );
-               $form->loadData();
-
-               if ( !Hooks::run( 'EmailUserForm', [ &$form ] ) ) {
-                       return;
-               }
-
-               $result = $form->show();
-
-               if ( $result === true || ( $result instanceof Status && $result->isGood() ) ) {
-                       $out->setPageTitle( $this->msg( 'emailsent' ) );
-                       $out->addWikiMsg( 'emailsenttext', $this->mTarget );
-                       $out->returnToMain( false, $this->mTargetObj->getUserPage() );
+               $this->setContext( $context );
+
+               // A little hack: HTMLForm will check $this->mTarget only, if the form was posted, not
+               // if the user opens Special:EmailUser/Florian (e.g.). So check, if the user did that
+               // and show the "Send email to user" form directly, if so. Show the "enter username"
+               // form, otherwise.
+               $this->mTargetObj = self::getTarget( $this->mTarget, $this->getUser() );
+               if ( !$this->mTargetObj instanceof User ) {
+                       $this->userForm( $this->mTarget );
+               } else {
+                       $this->sendEmailForm();
                }
        }
 
@@ -323,47 +303,62 @@ class SpecialEmailUser extends UnlistedSpecialPage {
         * @return string Form asking for user name.
         */
        protected function userForm( $name ) {
-               $this->getOutput()->addModules( 'mediawiki.userSuggest' );
-               $string = Html::openElement(
-                               'form',
-                               [ 'method' => 'get', 'action' => wfScript(), 'id' => 'askusername' ]
-                       ) .
-                       Html::hidden( 'title', $this->getPageTitle()->getPrefixedText() ) .
-                       Html::openElement( 'fieldset' ) .
-                       Html::rawElement( 'legend', null, $this->msg( 'emailtarget' )->parse() ) .
-                       Html::label(
-                               $this->msg( 'emailusername' )->text(),
-                               'emailusertarget'
-                       ) . "\u{00A0}" .
-                       Html::input(
-                               'target',
-                               $name,
-                               'text',
-                               [
-                                       'id' => 'emailusertarget',
-                                       'class' => 'mw-autocomplete-user', // used by mediawiki.userSuggest
-                                       'autofocus' => true,
-                                       'size' => 30,
-                               ]
-                       ) .
-                       ' ' .
-                       Html::submitButton( $this->msg( 'emailusernamesubmit' )->text(), [] ) .
-                       Html::closeElement( 'fieldset' ) .
-                       Html::closeElement( 'form' ) . "\n";
-
-               return $string;
+               $htmlForm = HTMLForm::factory( 'ooui', [
+                       'Target' => [
+                               'type' => 'user',
+                               'exists' => true,
+                               'label' => $this->msg( 'emailusername' )->text(),
+                               'id' => 'emailusertarget',
+                               'autofocus' => true,
+                               'value' => $name,
+                       ]
+               ], $this->getContext() );
+
+               $htmlForm
+                       ->setMethod( 'post' )
+                       ->setSubmitCallback( [ $this, 'sendEmailForm' ] )
+                       ->setFormIdentifier( 'userForm' )
+                       ->setId( 'askusername' )
+                       ->setWrapperLegendMsg( 'emailtarget' )
+                       ->setSubmitTextMsg( 'emailusernamesubmit' )
+                       ->show();
        }
 
-       /**
-        * Submit callback for an HTMLForm object, will simply call submit().
-        *
-        * @since 1.20
-        * @param array $data
-        * @param HTMLForm $form
-        * @return Status|bool
-        */
-       public static function uiSubmit( array $data, HTMLForm $form ) {
-               return self::submit( $data, $form->getContext() );
+       public function sendEmailForm() {
+               $out = $this->getOutput();
+
+               $ret = $this->mTargetObj;
+               if ( !$ret instanceof User ) {
+                       if ( $this->mTarget != '' ) {
+                               // Messages used here: notargettext, noemailtext, nowikiemailtext
+                               $ret = ( $ret == 'notarget' ) ? 'emailnotarget' : ( $ret . 'text' );
+                               return Status::newFatal( $ret );
+                       }
+                       return false;
+               }
+
+               $htmlForm = HTMLForm::factory( 'ooui', $this->getFormFields(), $this->getContext() );
+               // By now we are supposed to be sure that $this->mTarget is a user name
+               $htmlForm
+                       ->addPreText( $this->msg( 'emailpagetext', $this->mTarget )->parse() )
+                       ->setSubmitTextMsg( 'emailsend' )
+                       ->setSubmitCallback( [ __CLASS__, 'submit' ] )
+                       ->setFormIdentifier( 'sendEmailForm' )
+                       ->setWrapperLegendMsg( 'email-legend' )
+                       ->loadData();
+
+               if ( !Hooks::run( 'EmailUserForm', [ &$htmlForm ] ) ) {
+                       return false;
+               }
+
+               $result = $htmlForm->show();
+
+               if ( $result === true || ( $result instanceof Status && $result->isGood() ) ) {
+                       $out->setPageTitle( $this->msg( 'emailsent' ) );
+                       $out->addWikiMsg( 'emailsenttext', $this->mTarget );
+                       $out->returnToMain( false, $ret->getUserPage() );
+               }
+               return true;
        }
 
        /**
@@ -524,4 +519,17 @@ class SpecialEmailUser extends UnlistedSpecialPage {
        protected function getGroupName() {
                return 'users';
        }
+
+       /**
+        * Builds an error message based on the block params
+        *
+        * @return ErrorPageError
+        */
+       private function getBlockedEmailError() {
+               $block = $this->getUser()->mBlock;
+               $params = $block->getBlockErrorParams( $this->getContext() );
+
+               $msg = $block->isSitewide() ? 'blockedtext' : 'blocked-email-user';
+               return new ErrorPageError( 'blockedtitle', $msg, $params );
+       }
 }
index 809a14a..22a7612 100644 (file)
@@ -71,7 +71,7 @@ class SpecialGoToInterwiki extends UnlistedSpecialPage {
        }
 
        /**
-        * @return String
+        * @return string
         */
        protected function getGroupName() {
                return 'redirects';
index 153b7d1..839a9bc 100644 (file)
@@ -179,8 +179,9 @@ class SpecialImport extends SpecialPage {
 
                $out = $this->getOutput();
                if ( !$source->isGood() ) {
-                       $out->addWikiText( "<div class=\"error\">\n" .
-                               $this->msg( 'importfailed', $source->getWikiText() )->parse() . "\n</div>" );
+                       $out->wrapWikiTextAsInterface( 'error',
+                               $this->msg( 'importfailed', $source->getWikiText() )->plain()
+                       );
                } else {
                        $importer = new WikiImporter( $source->value, $this->getConfig() );
                        if ( !is_null( $this->namespace ) ) {
index 6dbc09b..e591da0 100644 (file)
@@ -102,7 +102,7 @@ class MediaStatisticsPage extends QueryPage {
         *
         * It's important that img_media_type come first, otherwise the
         * tables will be fragmented.
-        * @return Array Fields to sort by
+        * @return array Fields to sort by
         */
        function getOrderFields() {
                return [ 'img_media_type', 'count(*)', 'img_major_mime', 'img_minor_mime' ];
@@ -143,7 +143,7 @@ class MediaStatisticsPage extends QueryPage {
                        $this->outputTableEnd();
                        // add total size of all files
                        $this->outputMediaType( 'total' );
-                       $this->getOutput()->addWikiText(
+                       $this->getOutput()->addWikiTextAsInterface(
                                $this->msg( 'mediastatistics-allbytes' )
                                        ->numParams( $this->totalSize )
                                        ->sizeParams( $this->totalSize )
@@ -157,7 +157,7 @@ class MediaStatisticsPage extends QueryPage {
         */
        protected function outputTableEnd() {
                $this->getOutput()->addHTML( Html::closeElement( 'table' ) );
-               $this->getOutput()->addWikiText(
+               $this->getOutput()->addWikiTextAsInterface(
                                $this->msg( 'mediastatistics-bytespertype' )
                                        ->numParams( $this->totalPerType )
                                        ->sizeParams( $this->totalPerType )
@@ -214,7 +214,7 @@ class MediaStatisticsPage extends QueryPage {
 
        /**
         * @param float $decimal A decimal percentage (ie for 12.3%, this would be 0.123)
-        * @return String The percentage formatted so that 3 significant digits are shown.
+        * @return string The percentage formatted so that 3 significant digits are shown.
         */
        protected function makePercentPretty( $decimal ) {
                $decimal *= 100;
@@ -275,7 +275,7 @@ class MediaStatisticsPage extends QueryPage {
        /**
         * Get (not output) the header row for the table
         *
-        * @return String the header row of the able
+        * @return string The header row of the table
         */
        protected function getTableHeaderRow() {
                $headers = [ 'mimetype', 'extensions', 'count', 'totalbytes' ];
index 2f6dc03..5cbad8a 100644 (file)
@@ -789,12 +789,6 @@ class MovePageForm extends UnlistedSpecialPage {
                # Deal with watches (we don't watch subpages)
                WatchAction::doWatchOrUnwatch( $this->watch, $ot, $user );
                WatchAction::doWatchOrUnwatch( $this->watch, $nt, $user );
-
-               /**
-                * T163966
-                * Increment user_editcount during page moves
-                */
-               $user->incEditCount();
        }
 
        function showLogFragment( $title ) {
index e7db9f5..7661f28 100644 (file)
@@ -641,10 +641,9 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
        protected function failure( $status ) {
                // Messages: revdelete-failure, logdelete-failure
                $this->getOutput()->setPageTitle( $this->msg( 'actionfailed' ) );
-               $this->getOutput()->addWikiText(
-                       Html::errorBox(
-                               $status->getWikiText( $this->typeLabels['failure'] )
-                       )
+               $this->getOutput()->wrapWikiTextAsInterface(
+                       'errorbox',
+                       $status->getWikiText( $this->typeLabels['failure'] )
                );
                $this->showForm();
        }
index 00aa543..585a7cd 100644 (file)
@@ -151,10 +151,9 @@ class SpecialSpecialpages extends UnlistedSpecialPage {
                        $out->wrapWikiMsg(
                                "<h2 class=\"mw-specialpages-note-top\">$1</h2>", 'specialpages-note-top'
                        );
-                       $out->addWikiText(
-                               "<div class=\"mw-specialpages-notes\">\n" .
-                               implode( "\n", $notes ) .
-                               "\n</div>"
+                       $out->wrapWikiTextAsInterface(
+                               'mw-specialpages-notes',
+                               implode( "\n", $notes )
                        );
                }
        }
index 6b0598c..ca8ce89 100644 (file)
@@ -321,8 +321,7 @@ class SpecialTags extends SpecialPage {
                        $out->addBacklinkSubtitle( $this->getPageTitle() );
                        return true;
                } else {
-                       $out->addWikiText( "<div class=\"error\">\n" . $status->getWikiText() .
-                               "\n</div>" );
+                       $out->wrapWikiTextAsInterface( 'error', $status->getWikiText() );
                        return false;
                }
        }
@@ -340,8 +339,7 @@ class SpecialTags extends SpecialPage {
                // is the tag actually able to be deleted?
                $canDeleteResult = ChangeTags::canDeleteTag( $tag, $user );
                if ( !$canDeleteResult->isGood() ) {
-                       $out->addWikiText( "<div class=\"error\">\n" . $canDeleteResult->getWikiText() .
-                               "\n</div>" );
+                       $out->wrapWikiTextAsInterface( 'error', $canDeleteResult->getWikiText() );
                        if ( !$canDeleteResult->isOK() ) {
                                return;
                        }
@@ -402,8 +400,7 @@ class SpecialTags extends SpecialPage {
                $func = $activate ? 'canActivateTag' : 'canDeactivateTag';
                $result = ChangeTags::$func( $tag, $user );
                if ( !$result->isGood() ) {
-                       $out->addWikiText( "<div class=\"error\">\n" . $result->getWikiText() .
-                               "\n</div>" );
+                       $out->wrapWikiTextAsInterface( 'error', $result->getWikiText() );
                        if ( !$result->isOK() ) {
                                return;
                        }
@@ -449,14 +446,13 @@ class SpecialTags extends SpecialPage {
                        return true;
                } elseif ( $status->isOK() && $form->tagAction === 'delete' ) {
                        // deletion succeeded, but hooks raised a warning
-                       $out->addWikiText( $this->msg( 'tags-delete-warnings-after-delete', $tag,
+                       $out->addWikiTextAsInterface( $this->msg( 'tags-delete-warnings-after-delete', $tag,
                                count( $status->getWarningsArray() ) )->text() . "\n" .
                                $status->getWikitext() );
                        $out->addReturnTo( $this->getPageTitle() );
                        return true;
                } else {
-                       $out->addWikiText( "<div class=\"error\">\n" . $status->getWikitext() .
-                               "\n</div>" );
+                       $out->wrapWikiTextAsInterface( 'error', $status->getWikitext() );
                        return false;
                }
        }
index e4e513e..a93dec0 100644 (file)
@@ -1177,7 +1177,9 @@ class SpecialUndelete extends SpecialPage {
                // Show revision undeletion warnings and errors
                $status = $archive->getRevisionStatus();
                if ( $status && !$status->isGood() ) {
-                       $out->addWikiText( '<div class="error" id="mw-error-cannotundelete">' .
+                       $out->wrapWikiTextAsInterface(
+                               'error',
+                               '<div id="mw-error-cannotundelete">' .
                                $status->getWikiText(
                                        'cannotundelete',
                                        'cannotundelete'
@@ -1188,11 +1190,12 @@ class SpecialUndelete extends SpecialPage {
                // Show file undeletion warnings and errors
                $status = $archive->getFileStatus();
                if ( $status && !$status->isGood() ) {
-                       $out->addWikiText( '<div class="error">' .
+                       $out->wrapWikiTextAsInterface(
+                               'error',
                                $status->getWikiText(
                                        'undelete-error-short',
                                        'undelete-error-long'
-                               ) . '</div>'
+                               )
                        );
                }
        }
index f9d6b5f..836b6df 100644 (file)
@@ -177,7 +177,7 @@ class SpecialUpload extends SpecialPage {
                }
 
                # Check blocks
-               if ( $user->isBlocked() ) {
+               if ( $user->isBlockedFromUpload() ) {
                        throw new UserBlockedError( $user->getBlock() );
                }
 
index 00d8d6e..4168d91 100644 (file)
@@ -160,7 +160,7 @@ class UserrightsPage extends SpecialPage {
 
                        // save settings
                        if ( !$fetchedStatus->isOK() ) {
-                               $this->getOutput()->addWikiText( $fetchedStatus->getWikiText() );
+                               $this->getOutput()->addWikiTextAsInterface( $fetchedStatus->getWikiText() );
 
                                return;
                        }
@@ -189,7 +189,7 @@ class UserrightsPage extends SpecialPage {
                                        return;
                                } else {
                                        // Print an error message and redisplay the form
-                                       $out->addWikiText( '<div class="error">' . $status->getWikiText() . '</div>' );
+                                       $out->wrapWikiTextAsInterface( 'error', $status->getWikiText() );
                                }
                        }
                }
@@ -468,7 +468,7 @@ class UserrightsPage extends SpecialPage {
        function editUserGroupsForm( $username ) {
                $status = $this->fetchUser( $username, true );
                if ( !$status->isOK() ) {
-                       $this->getOutput()->addWikiText( $status->getWikiText() );
+                       $this->getOutput()->addWikiTextAsInterface( $status->getWikiText() );
 
                        return;
                } else {
@@ -767,7 +767,7 @@ class UserrightsPage extends SpecialPage {
         * @param UserGroupMembership[] $usergroups Associative array of (group name as string =>
         *   UserGroupMembership object) for groups the user belongs to
         * @param User $user
-        * @return Array with 2 elements: the XHTML table element with checkxboes, and
+        * @return array Array with 2 elements: the XHTML table element with checkxboes, and
         * whether any groups are changeable
         */
        private function groupCheckboxes( $usergroups, $user ) {
index 35c5689..c99a422 100644 (file)
@@ -106,7 +106,7 @@ class SpecialVersion extends SpecialPage {
                                }
 
                                $out->setPageTitle( $this->msg( 'version-credits-title', $extName ) );
-                               $out->addWikiText( $wikiText );
+                               $out->addWikiTextAsInterface( $wikiText );
                                break;
 
                        case 'license':
@@ -129,12 +129,12 @@ class SpecialVersion extends SpecialPage {
                                }
 
                                $out->setPageTitle( $this->msg( 'version-license-title', $extName ) );
-                               $out->addWikiText( $wikiText );
+                               $out->addWikiTextAsInterface( $wikiText );
                                break;
 
                        default:
                                $out->addModuleStyles( 'mediawiki.special.version' );
-                               $out->addWikiText(
+                               $out->addWikiTextAsInterface(
                                        $this->getMediaWikiCredits() .
                                        $this->softwareInformation() .
                                        $this->getEntryPointInfo()
@@ -146,7 +146,7 @@ class SpecialVersion extends SpecialPage {
                                        $this->getParserTags() .
                                        $this->getParserFunctionHooks()
                                );
-                               $out->addWikiText( $this->getWgHooks() );
+                               $out->addWikiTextAsInterface( $this->getWgHooks() );
                                $out->addHTML( $this->IPInfo() );
 
                                break;
@@ -716,7 +716,7 @@ class SpecialVersion extends SpecialPage {
                $vcsDate = null;
 
                if ( isset( $extension['version'] ) ) {
-                       $canonicalVersion = $out->parseInline( $extension['version'] );
+                       $canonicalVersion = $out->parseInlineAsInterface( $extension['version'] );
                }
 
                if ( isset( $extension['path'] ) ) {
@@ -792,7 +792,7 @@ class SpecialVersion extends SpecialPage {
                if ( isset( $extension['name'] ) ) {
                        $licenseName = null;
                        if ( isset( $extension['license-name'] ) ) {
-                               $licenseName = new HtmlArmor( $out->parseInline( $extension['license-name'] ) );
+                               $licenseName = new HtmlArmor( $out->parseInlineAsInterface( $extension['license-name'] ) );
                        } elseif ( $this->getExtLicenseFileName( $extensionPath ) ) {
                                $licenseName = $this->msg( 'version-ext-license' )->text();
                        }
@@ -829,7 +829,7 @@ class SpecialVersion extends SpecialPage {
                } else {
                        $description = '';
                }
-               $description = $out->parseInline( $description );
+               $description = $out->parseInlineAsInterface( $description );
 
                // ... now get the authors for this extension
                $authors = $extension['author'] ?? [];
@@ -981,11 +981,11 @@ class SpecialVersion extends SpecialPage {
                                $list[] = $text;
                        } elseif ( substr( $item, -5 ) == ' ...]' ) {
                                $hasOthers = true;
-                               $list[] = $this->getOutput()->parseInline(
+                               $list[] = $this->getOutput()->parseInlineAsInterface(
                                        substr( $item, 0, -4 ) . $this->msg( 'version-poweredby-others' )->text() . "]"
                                );
                        } else {
-                               $list[] = $this->getOutput()->parseInline( $item );
+                               $list[] = $this->getOutput()->parseInlineAsInterface( $item );
                        }
                }
 
index 6dc129c..f53ccea 100644 (file)
@@ -32,13 +32,10 @@ class UploadSourceField extends HTMLTextField {
                $label = Html::rawElement( 'label', [ 'for' => $id ], $this->mLabel );
 
                if ( !empty( $this->mParams['radio'] ) ) {
-                       if ( isset( $this->mParams['radio-id'] ) ) {
-                               $radioId = $this->mParams['radio-id'];
-                       } else {
+                       $radioId = $this->mParams['radio-id'] ??
                                // Old way. For the benefit of extensions that do not define
                                // the 'radio-id' key.
-                               $radioId = 'wpSourceType' . $this->mParams['upload-type'];
-                       }
+                               'wpSourceType' . $this->mParams['upload-type'];
 
                        $attribs = [
                                'name' => 'wpSourceType',
index 5789c28..74ec6b5 100644 (file)
@@ -22,6 +22,8 @@
 /**
  * @ingroup Pager
  */
+use MediaWiki\Block\BlockRestriction;
+use MediaWiki\Block\Restriction\Restriction;
 use MediaWiki\MediaWikiServices;
 use Wikimedia\Rdbms\IResultWrapper;
 
@@ -30,6 +32,13 @@ class BlockListPager extends TablePager {
        protected $conds;
        protected $page;
 
+       /**
+        * Array of restrictions.
+        *
+        * @var Restriction[]
+        */
+       protected $restrictions = [];
+
        /**
         * @param SpecialPage $page
         * @param array $conds
@@ -72,6 +81,8 @@ class BlockListPager extends TablePager {
                                'blocklist-nousertalk',
                                'unblocklink',
                                'change-blocklink',
+                               'blocklist-editing',
+                               'blocklist-editing-sitewide',
                        ];
 
                        foreach ( $keys as $key ) {
@@ -179,6 +190,18 @@ class BlockListPager extends TablePager {
 
                        case 'ipb_params':
                                $properties = [];
+
+                               if ( $this->getConfig()->get( 'EnablePartialBlocks' ) ) {
+                                       if ( $row->ipb_sitewide ) {
+                                               $properties[] = htmlspecialchars( $msg['blocklist-editing-sitewide'] );
+                                       }
+                               }
+
+                               if ( !$row->ipb_sitewide && $this->restrictions ) {
+                                       $list = $this->getRestrictionListHTML( $this->restrictions, $row );
+                                       $properties[] = htmlspecialchars( $msg['blocklist-editing'] ) . $list;
+                               }
+
                                if ( $row->ipb_anon_only ) {
                                        $properties[] = htmlspecialchars( $msg['anononlyblock'] );
                                }
@@ -197,7 +220,17 @@ class BlockListPager extends TablePager {
                                        $properties[] = htmlspecialchars( $msg['blocklist-nousertalk'] );
                                }
 
-                               $formatted = $language->commaList( $properties );
+                               $formatted = Html::rawElement(
+                                               'ul',
+                                               [],
+                                               implode( '', array_map( function ( $prop ) {
+                                                       return HTML::rawElement(
+                                                               'li',
+                                                               [],
+                                                               $prop
+                                                       );
+                                               }, $properties ) )
+                                       );
                                break;
 
                        default:
@@ -208,6 +241,47 @@ class BlockListPager extends TablePager {
                return $formatted;
        }
 
+       /**
+        * Get Restriction List HTML
+        *
+        * @param Restriction[] $restrictions
+        * @param stdClass $row
+        *
+        * @return string
+        */
+       private static function getRestrictionListHTML(
+               array $restrictions,
+               stdClass $row
+       ) {
+               $items = [];
+
+               foreach ( $restrictions as $restriction ) {
+                       if ( $restriction->getBlockId() !== (int)$row->ipb_id ) {
+                               continue;
+                       }
+
+                       if ( $restriction->getType() !== 'page' ) {
+                               continue;
+                       }
+
+                       $items[] = HTML::rawElement(
+                               'li',
+                               [],
+                               Linker::link( $restriction->getTitle() )
+                       );
+               }
+
+               if ( empty( $items ) ) {
+                       return '';
+               }
+
+               return Html::rawElement(
+                       'ul',
+                       [],
+                       implode( '', $items )
+               );
+       }
+
        function getQueryInfo() {
                $commentQuery = CommentStore::getStore()->getJoin( 'ipb_reason' );
                $actorQuery = ActorMigration::newMigration()->getJoin( 'ipb_by' );
@@ -232,6 +306,7 @@ class BlockListPager extends TablePager {
                                'ipb_deleted',
                                'ipb_block_email',
                                'ipb_allow_usertalk',
+                               'ipb_sitewide',
                        ] + $commentQuery['fields'] + $actorQuery['fields'],
                        'conds' => $this->conds,
                        'join_conds' => [
@@ -296,6 +371,7 @@ class BlockListPager extends TablePager {
                $lb = new LinkBatch;
                $lb->setCaller( __METHOD__ );
 
+               $partialBlocks = [];
                foreach ( $result as $row ) {
                        $lb->add( NS_USER, $row->ipb_address );
                        $lb->add( NS_USER_TALK, $row->ipb_address );
@@ -304,6 +380,16 @@ class BlockListPager extends TablePager {
                                $lb->add( NS_USER, $row->by_user_name );
                                $lb->add( NS_USER_TALK, $row->by_user_name );
                        }
+
+                       if ( !$row->ipb_sitewide ) {
+                               $partialBlocks[] = $row->ipb_id;
+                       }
+               }
+
+               if ( $partialBlocks ) {
+                       // Mutations to the $row object are not persisted. The restrictions will
+                       // need be stored in a separate store.
+                       $this->restrictions = BlockRestriction::loadByBlockId( $partialBlocks );
                }
 
                $lb->execute();
index dcebb60..ea805fb 100644 (file)
@@ -98,11 +98,7 @@ abstract class UploadBase {
                        self::WINDOWS_NONASCII_FILENAME => 'windows-nonascii-filename',
                        self::FILENAME_TOO_LONG => 'filename-toolong',
                ];
-               if ( isset( $code_to_status[$error] ) ) {
-                       return $code_to_status[$error];
-               }
-
-               return 'unknown-error';
+               return $code_to_status[$error] ?? 'unknown-error';
        }
 
        /**
index 8cbedb9..4310f1b 100644 (file)
@@ -1817,11 +1817,7 @@ class User implements IDBAccessObject, UserIdentity {
         */
        public static function getDefaultOption( $opt ) {
                $defOpts = self::getDefaultOptions();
-               if ( isset( $defOpts[$opt] ) ) {
-                       return $defOpts[$opt];
-               } else {
-                       return null;
-               }
+               return $defOpts[$opt] ?? null;
        }
 
        /**
@@ -2297,21 +2293,22 @@ class User implements IDBAccessObject, UserIdentity {
         * Check if user is blocked from editing a particular article
         *
         * @param Title $title Title to check
-        * @param bool $bFromSlave Whether to check the replica DB instead of the master
+        * @param bool $fromSlave Whether to check the replica DB instead of the master
         * @return bool
         */
-       public function isBlockedFrom( $title, $bFromSlave = false ) {
-               global $wgBlockAllowsUTEdit;
+       public function isBlockedFrom( $title, $fromSlave = false ) {
+               $blocked = $this->isHidden();
 
-               $blocked = $this->isBlocked( $bFromSlave );
-               $allowUsertalk = ( $wgBlockAllowsUTEdit ? $this->mAllowUsertalk : false );
-               // If a user's name is suppressed, they cannot make edits anywhere
-               if ( !$this->mHideName && $allowUsertalk && $title->getText() === $this->getName()
-                       && $title->getNamespace() == NS_USER_TALK ) {
-                       $blocked = false;
-                       wfDebug( __METHOD__ . ": self-talk page, ignoring any blocks\n" );
+               if ( !$blocked ) {
+                       $block = $this->getBlock( $fromSlave );
+                       if ( $block ) {
+                               $blocked = $block->preventsEdit( $title );
+                       }
                }
 
+               // only for the purpose of the hook. We really don't need this here.
+               $allowUsertalk = $this->mAllowUsertalk;
+
                Hooks::run( 'UserIsBlockedFrom', [ $this, $title, &$blocked, &$allowUsertalk ] );
 
                return $blocked;
@@ -2418,7 +2415,7 @@ class User implements IDBAccessObject, UserIdentity {
         */
        public function isHidden() {
                if ( $this->mHideName !== null ) {
-                       return $this->mHideName;
+                       return (bool)$this->mHideName;
                }
                $this->getBlockedStatus();
                if ( !$this->mHideName ) {
@@ -2428,7 +2425,7 @@ class User implements IDBAccessObject, UserIdentity {
                        $this->mHideName = $authUser && $authUser->isHidden();
                        Hooks::run( 'UserIsHidden', [ $this, &$this->mHideName ] );
                }
-               return $this->mHideName;
+               return (bool)$this->mHideName;
        }
 
        /**
@@ -3701,7 +3698,7 @@ class User implements IDBAccessObject, UserIdentity {
 
                        if ( $count === null ) {
                                // it has not been initialized. do so.
-                               $count = $this->initEditCount();
+                               $count = $this->initEditCountInternal();
                        }
                        $this->mEditCount = $count;
                }
@@ -4518,6 +4515,16 @@ class User implements IDBAccessObject, UserIdentity {
                return $this->mBlock && $this->mBlock->prevents( 'sendemail' );
        }
 
+       /**
+        * Get whether the user is blocked from using Special:Upload
+        *
+        * @return bool
+        */
+       public function isBlockedFromUpload() {
+               $this->getBlockedStatus();
+               return $this->mBlock && $this->mBlock->prevents( 'upload' );
+       }
+
        /**
         * Get whether the user is allowed to create an account.
         * @return bool
@@ -5316,73 +5323,36 @@ class User implements IDBAccessObject, UserIdentity {
        }
 
        /**
-        * Deferred version of incEditCountImmediate()
-        *
-        * This function, rather than incEditCountImmediate(), should be used for
-        * most cases as it avoids potential deadlocks caused by concurrent editing.
+        * Schedule a deferred update to update the user's edit count
         */
        public function incEditCount() {
-               wfGetDB( DB_MASTER )->onTransactionPreCommitOrIdle(
-                       function () {
-                               $this->incEditCountImmediate();
-                       },
-                       __METHOD__
+               if ( $this->isAnon() ) {
+                       return; // sanity
+               }
+
+               DeferredUpdates::addUpdate(
+                       new UserEditCountUpdate( $this, 1 ),
+                       DeferredUpdates::POSTSEND
                );
        }
 
        /**
-        * Increment the user's edit-count field.
-        * Will have no effect for anonymous users.
-        * @since 1.26
+        * This method should not be called outside User/UserEditCountUpdate
+        *
+        * @param int $count
         */
-       public function incEditCountImmediate() {
-               if ( $this->isAnon() ) {
-                       return;
-               }
-
-               $dbw = wfGetDB( DB_MASTER );
-               // No rows will be "affected" if user_editcount is NULL
-               $dbw->update(
-                       'user',
-                       [ 'user_editcount=user_editcount+1' ],
-                       [ 'user_id' => $this->getId(), 'user_editcount IS NOT NULL' ],
-                       __METHOD__
-               );
-               // Lazy initialization check...
-               if ( $dbw->affectedRows() == 0 ) {
-                       // Now here's a goddamn hack...
-                       $dbr = wfGetDB( DB_REPLICA );
-                       if ( $dbr !== $dbw ) {
-                               // If we actually have a replica DB server, the count is
-                               // at least one behind because the current transaction
-                               // has not been committed and replicated.
-                               $this->mEditCount = $this->initEditCount( 1 );
-                       } else {
-                               // But if DB_REPLICA is selecting the master, then the
-                               // count we just read includes the revision that was
-                               // just added in the working transaction.
-                               $this->mEditCount = $this->initEditCount();
-                       }
-               } else {
-                       if ( $this->mEditCount === null ) {
-                               $this->getEditCount();
-                               $dbr = wfGetDB( DB_REPLICA );
-                               $this->mEditCount += ( $dbr !== $dbw ) ? 1 : 0;
-                       } else {
-                               $this->mEditCount++;
-                       }
-               }
-               // Edit count in user cache too
-               $this->invalidateCache();
+       public function setEditCountInternal( $count ) {
+               $this->mEditCount = $count;
        }
 
        /**
         * Initialize user_editcount from data out of the revision table
         *
-        * @param int $add Edits to add to the count from the revision table
+        * This method should not be called outside User/UserEditCountUpdate
+        *
         * @return int Number of edits
         */
-       protected function initEditCount( $add = 0 ) {
+       public function initEditCountInternal() {
                // Pull from a replica DB to be less cruel to servers
                // Accuracy isn't the point anyway here
                $dbr = wfGetDB( DB_REPLICA );
@@ -5395,13 +5365,15 @@ class User implements IDBAccessObject, UserIdentity {
                        [],
                        $actorWhere['joins']
                );
-               $count = $count + $add;
 
                $dbw = wfGetDB( DB_MASTER );
                $dbw->update(
                        'user',
                        [ 'user_editcount' => $count ],
-                       [ 'user_id' => $this->getId() ],
+                       [
+                               'user_id' => $this->getId(),
+                               'user_editcount IS NULL OR user_editcount < ' . (int)$count
+                       ],
                        __METHOD__
                );
 
index 0fc45f7..ec8bf5c 100644 (file)
@@ -32,6 +32,7 @@ class MWCryptRand {
         * @return CryptRand
         */
        protected static function singleton() {
+               wfDeprecated( __METHOD__, '1.32' );
                return MediaWikiServices::getInstance()->getCryptRand();
        }
 
@@ -45,6 +46,7 @@ class MWCryptRand {
         * @return bool Always true
         */
        public static function wasStrong() {
+               wfDeprecated( __METHOD__, '1.32' );
                return true;
        }
 
@@ -58,6 +60,7 @@ class MWCryptRand {
         * @return string Raw binary random data
         */
        public static function generate( $bytes ) {
+               wfDeprecated( __METHOD__, '1.32' );
                return random_bytes( floor( $bytes ) );
        }
 
index a20435e..19a3ce5 100644 (file)
@@ -104,11 +104,7 @@ class MWFileProps {
                # NOTE: $gis[2] contains a code for the image type. This is no longer used.
                $info['width'] = $gis[0];
                $info['height'] = $gis[1];
-               if ( isset( $gis['bits'] ) ) {
-                       $info['bits'] = $gis['bits'];
-               } else {
-                       $info['bits'] = 0;
-               }
+               $info['bits'] = $gis['bits'] ?? 0;
 
                return $info;
        }
index 86e7be8..f4e3af2 100644 (file)
@@ -142,4 +142,9 @@ class NoWriteWatchedItemStore implements WatchedItemStoreInterface {
        public function clearUserWatchedItemsUsingJobQueue( User $user ) {
                throw new DBReadOnlyError( null, 'The watchlist is currently readonly.' );
        }
+
+       public function removeWatchBatchForUser( User $user, array $titles ) {
+               throw new DBReadOnlyError( null, 'The watchlist is currently readonly.' );
+       }
+
 }
index c763010..f9435a1 100644 (file)
@@ -4,6 +4,7 @@ use Wikimedia\Rdbms\IDatabase;
 use Liuggio\StatsdClient\Factory\StatsdDataFactoryInterface;
 use MediaWiki\Linker\LinkTarget;
 use Wikimedia\Assert\Assert;
+use Wikimedia\Rdbms\LBFactory;
 use Wikimedia\ScopedCallback;
 use Wikimedia\Rdbms\ILBFactory;
 use Wikimedia\Rdbms\LoadBalancer;
@@ -367,6 +368,47 @@ class WatchedItemStore implements WatchedItemStoreInterface, StatsdAwareInterfac
                return $visitingWatchers;
        }
 
+       /**
+        * @param User $user
+        * @param TitleValue[] $titles
+        * @return bool
+        * @throws MWException
+        */
+       public function removeWatchBatchForUser( User $user, array $titles ) {
+               if ( $this->readOnlyMode->isReadOnly() ) {
+                       return false;
+               }
+               if ( $user->isAnon() ) {
+                       return false;
+               }
+               if ( !$titles ) {
+                       return true;
+               }
+
+               $rows = $this->getTitleDbKeysGroupedByNamespace( $titles );
+               $this->uncacheTitlesForUser( $user, $titles );
+
+               $dbw = $this->getConnectionRef( DB_MASTER );
+               $ticket = $this->lbFactory->getEmptyTransactionTicket( __METHOD__ );
+               $affectedRows = 0;
+
+               // Batch delete items per namespace.
+               foreach ( $rows as $namespace => $namespaceTitles ) {
+                       $rowBatches = array_chunk( $namespaceTitles, $this->updateRowsPerQuery );
+                       foreach ( $rowBatches as $toDelete ) {
+                               $dbw->delete( 'watchlist', [
+                                       'wl_user' => $user->getId(),
+                                       'wl_namespace' => $namespace,
+                                       'wl_title' => $toDelete
+                               ], __METHOD__ );
+                               $affectedRows += $dbw->affectedRows();
+                               $this->lbFactory->commitAndWaitForReplication( __METHOD__, $ticket );
+                       }
+               }
+
+               return (bool)$affectedRows;
+       }
+
        /**
         * @since 1.27
         * @param LinkTarget[] $targets
@@ -655,6 +697,7 @@ class WatchedItemStore implements WatchedItemStoreInterface, StatsdAwareInterfac
         * @since 1.27
         * @param User $user
         * @param LinkTarget $target
+        * @throws MWException
         */
        public function addWatch( User $user, LinkTarget $target ) {
                $this->addWatchBatchForUser( $user, [ $target ] );
@@ -665,6 +708,7 @@ class WatchedItemStore implements WatchedItemStoreInterface, StatsdAwareInterfac
         * @param User $user
         * @param LinkTarget[] $targets
         * @return bool
+        * @throws MWException
         */
        public function addWatchBatchForUser( User $user, array $targets ) {
                if ( $this->readOnlyMode->isReadOnly() ) {
@@ -697,10 +741,15 @@ class WatchedItemStore implements WatchedItemStoreInterface, StatsdAwareInterfac
                }
 
                $dbw = $this->getConnectionRef( DB_MASTER );
-               foreach ( array_chunk( $rows, 100 ) as $toInsert ) {
+               $ticket = $this->lbFactory->getEmptyTransactionTicket( __METHOD__ );
+               $affectedRows = 0;
+               $rowBatches = array_chunk( $rows, $this->updateRowsPerQuery );
+               foreach ( $rowBatches as $toInsert ) {
                        // Use INSERT IGNORE to avoid overwriting the notification timestamp
                        // if there's already an entry for this page
                        $dbw->insert( 'watchlist', $toInsert, __METHOD__, 'IGNORE' );
+                       $affectedRows += $dbw->affectedRows();
+                       $this->lbFactory->commitAndWaitForReplication( __METHOD__, $ticket );
                }
                // Update process cache to ensure skin doesn't claim that the current
                // page is unwatched in the response of action=watch itself (T28292).
@@ -709,7 +758,7 @@ class WatchedItemStore implements WatchedItemStoreInterface, StatsdAwareInterfac
                        $this->cache( $item );
                }
 
-               return true;
+               return (bool)$affectedRows;
        }
 
        /**
@@ -717,26 +766,10 @@ class WatchedItemStore implements WatchedItemStoreInterface, StatsdAwareInterfac
         * @param User $user
         * @param LinkTarget $target
         * @return bool
+        * @throws MWException
         */
        public function removeWatch( User $user, LinkTarget $target ) {
-               // Only logged in user can have a watchlist
-               if ( $this->readOnlyMode->isReadOnly() || $user->isAnon() ) {
-                       return false;
-               }
-
-               $this->uncache( $user, $target );
-
-               $dbw = $this->getConnectionRef( DB_MASTER );
-               $dbw->delete( 'watchlist',
-                       [
-                               'wl_user' => $user->getId(),
-                               'wl_namespace' => $target->getNamespace(),
-                               'wl_title' => $target->getDBkey(),
-                       ], __METHOD__
-               );
-               $success = (bool)$dbw->affectedRows();
-
-               return $success;
+               return $this->removeWatchBatchForUser( $user, [ $target ] );
        }
 
        /**
@@ -1044,4 +1077,27 @@ class WatchedItemStore implements WatchedItemStoreInterface, StatsdAwareInterfac
                }
        }
 
+       /**
+        * @param TitleValue[] $titles
+        * @return array
+        */
+       private function getTitleDbKeysGroupedByNamespace( array $titles ) {
+               $rows = [];
+               foreach ( $titles as $title ) {
+                       // Group titles by namespace.
+                       $rows[ $title->getNamespace() ][] = $title->getDBkey();
+               }
+               return $rows;
+       }
+
+       /**
+        * @param User $user
+        * @param Title[] $titles
+        */
+       private function uncacheTitlesForUser( User $user, array $titles ) {
+               foreach ( $titles as $title ) {
+                       $this->uncache( $user, $title );
+               }
+       }
+
 }
index 99a051d..274d3f4 100644 (file)
@@ -193,7 +193,7 @@ interface WatchedItemStoreInterface {
        public function addWatchBatchForUser( User $user, array $targets );
 
        /**
-        * Removes the an entry for the User watching the LinkTarget
+        * Removes an entry for the User watching the LinkTarget
         * Must be called separately for Subject & Talk namespaces
         *
         * @since 1.31
@@ -316,4 +316,14 @@ interface WatchedItemStoreInterface {
         */
        public function clearUserWatchedItemsUsingJobQueue( User $user );
 
+       /**
+        * @since 1.32
+        *
+        * @param User $user
+        * @param LinkTarget[] $targets
+        *
+        * @return bool success
+        */
+       public function removeWatchBatchForUser( User $user, array $targets );
+
 }
index f9985eb..289cc85 100644 (file)
@@ -20,11 +20,6 @@ class ExpiryInputWidget extends Widget {
         */
        protected $relativeInput;
 
-       /**
-        * @var bool
-        */
-       protected $noDatePicker;
-
        /**
         * @var bool
         */
@@ -37,11 +32,8 @@ class ExpiryInputWidget extends Widget {
        public function __construct( Widget $relativeInput, array $options = [] ) {
                $config = \RequestContext::getMain()->getConfig();
 
-               $options['noDatePicker'] = $config->get( 'ExpiryWidgetNoDatePicker' );
-
                parent::__construct( $options );
 
-               $this->noDatePicker = $options['noDatePicker'];
                $this->required = $options['required'] ?? false;
 
                // Properties
@@ -49,14 +41,11 @@ class ExpiryInputWidget extends Widget {
                $this->relativeInput->addClasses( [ 'mw-widget-ExpiryWidget-relative' ] );
 
                // Initialization
-               $classes = [
-                       'mw-widget-ExpiryWidget',
-               ];
-               if ( $options['noDatePicker'] === false ) {
-                       $classes[] = 'mw-widget-ExpiryWidget-hasDatePicker';
-               }
                $this
-                       ->addClasses( $classes )
+                       ->addClasses( [
+                               'mw-widget-ExpiryWidget',
+                               'mw-widget-ExpiryWidget-hasDatePicker'
+                       ] )
                        ->appendContent( $this->relativeInput );
        }
 
@@ -68,7 +57,6 @@ class ExpiryInputWidget extends Widget {
         * {@inheritdoc}
         */
        public function getConfig( &$config ) {
-               $config['noDatePicker'] = $this->noDatePicker;
                $config['required'] = $this->required;
                $config['relativeInput'] = [];
                $this->relativeInput->getConfig( $config['relativeInput'] );
diff --git a/includes/widget/TitlesMultiselectWidget.php b/includes/widget/TitlesMultiselectWidget.php
new file mode 100644 (file)
index 0000000..95304b0
--- /dev/null
@@ -0,0 +1,67 @@
+<?php
+
+namespace MediaWiki\Widget;
+
+use OOUI\MultilineTextInputWidget;
+
+/**
+ * Widget to select multiple titles.
+ *
+ * @copyright 2017 MediaWiki Widgets Team and others; see AUTHORS.txt
+ * @license MIT
+ */
+class TitlesMultiselectWidget extends \OOUI\Widget {
+
+       protected $titlesArray = [];
+       protected $inputName = null;
+       protected $inputPlaceholder = null;
+
+       /**
+        * @param array $config Configuration options
+        *   - array $config['titles'] Array of titles to use as preset data
+        *   - array $config['placeholder'] Placeholder message for input
+        *   - array $config['name'] Name attribute (used in forms)
+        */
+       public function __construct( array $config = [] ) {
+               parent::__construct( $config );
+
+               // Properties
+               if ( isset( $config['default'] ) ) {
+                       $this->titlesArray = $config['default'];
+               }
+               if ( isset( $config['name'] ) ) {
+                       $this->inputName = $config['name'];
+               }
+               if ( isset( $config['placeholder'] ) ) {
+                       $this->inputPlaceholder = $config['placeholder'];
+               }
+
+               $textarea = new MultilineTextInputWidget( [
+                       'name' => $this->inputName,
+                       'value' => implode( "\n", $this->titlesArray ),
+                       'rows' => 10,
+               ] );
+               $this->appendContent( $textarea );
+               $this->addClasses( [ 'mw-widgets-titlesMultiselectWidget' ] );
+       }
+
+       protected function getJavaScriptClassName() {
+               return 'mw.widgets.TitlesMultiselectWidget';
+       }
+
+       public function getConfig( &$config ) {
+               if ( $this->titlesArray !== null ) {
+                       $config['selected'] = $this->titlesArray;
+               }
+               if ( $this->inputName !== null ) {
+                       $config['name'] = $this->inputName;
+               }
+               if ( $this->inputPlaceholder !== null ) {
+                       $config['placeholder'] = $this->inputPlaceholder;
+               }
+
+               $config['$overlay'] = true;
+               return parent::getConfig( $config );
+       }
+
+}
index 79380de..853601e 100644 (file)
@@ -128,11 +128,8 @@ class InterwikiSearchResultSetWidget implements SearchResultSetWidget {
                $interwiki = $this->iwLookup->fetch( $iwPrefix );
                $parsed = wfParseUrl( wfExpandUrl( $interwiki ? $interwiki->getURL() : '/' ) );
 
-               if ( isset( $this->customCaptions[$iwPrefix] ) ) {
-                       $caption = $this->customCaptions[$iwPrefix];
-               } else {
-                       $caption = $this->specialSearch->msg( 'search-interwiki-default', $parsed['host'] )->escaped();
-               }
+               $caption = $this->customCaptions[$iwPrefix] ??
+                       $this->specialSearch->msg( 'search-interwiki-default', $parsed['host'] )->escaped();
 
                $searchLink = Html::rawElement( 'em', null,
                        Html::rawElement( 'a', [ 'href' => $href, 'target' => '_blank' ], $caption )
index dc61519..8be2d6a 100644 (file)
@@ -20,7 +20,7 @@
  */
 
 /**
- * Parser for rules of language conversion , parse rules in -{ }- tag.
+ * Parser for rules of language conversion, parse rules in -{ }- tag.
  * @ingroup Language
  * @author fdcn <fdcn64@gmail.com>, PhiLiP <philip.npc@gmail.com>
  */
@@ -29,13 +29,13 @@ class ConverterRule {
        public $mConverter; // LanguageConverter object
        public $mRuleDisplay = '';
        public $mRuleTitle = false;
-       public $mRules = '';// string : the text of the rules
+       public $mRules = ''; // string : the text of the rules
        public $mRulesAction = 'none';
        public $mFlags = [];
        public $mVariantFlags = [];
        public $mConvTable = [];
-       public $mBidtable = [];// array of the translation in each variant
-       public $mUnidtable = [];// array of the translation in each variant
+       public $mBidtable = []; // array of the translation in each variant
+       public $mUnidtable = []; // array of the translation in each variant
 
        /**
         * @param string $text The text between -{ and }-
@@ -399,11 +399,7 @@ class ConverterRule {
                                case 'N':
                                        // process N flag: output current variant name
                                        $ruleVar = trim( $rules );
-                                       if ( isset( $this->mConverter->mVariantNames[$ruleVar] ) ) {
-                                               $this->mRuleDisplay = $this->mConverter->mVariantNames[$ruleVar];
-                                       } else {
-                                               $this->mRuleDisplay = '';
-                                       }
+                                       $this->mRuleDisplay = $this->mConverter->mVariantNames[$ruleVar] ?? '';
                                        break;
                                case 'D':
                                        // process D flag: output rules description
index fb78f13..86f4505 100644 (file)
@@ -814,22 +814,6 @@ class Language {
                return self::$dataCache->getItem( $this->mCode, 'datePreferenceMigrationMap' );
        }
 
-       /**
-        * @param string $image
-        * @return array|null
-        */
-       function getImageFile( $image ) {
-               return self::$dataCache->getSubitem( $this->mCode, 'imageFiles', $image );
-       }
-
-       /**
-        * @return array
-        * @since 1.24
-        */
-       public function getImageFiles() {
-               return self::$dataCache->getItem( $this->mCode, 'imageFiles' );
-       }
-
        /**
         * @return array
         */
@@ -3243,12 +3227,8 @@ class Language {
                        $this->doMagicHook();
                }
 
-               if ( isset( $this->mMagicExtensions[$mw->mId] ) ) {
-                       $rawEntry = $this->mMagicExtensions[$mw->mId];
-               } else {
-                       $rawEntry = self::$dataCache->getSubitem(
-                               $this->mCode, 'magicWords', $mw->mId );
-               }
+               $rawEntry = $this->mMagicExtensions[$mw->mId] ??
+                       self::$dataCache->getSubitem( $this->mCode, 'magicWords', $mw->mId );
 
                if ( !is_array( $rawEntry ) ) {
                        wfWarn( "\"$rawEntry\" is not a valid magic word for \"$mw->mId\"" );
@@ -3538,28 +3518,6 @@ class Language {
                );
        }
 
-       /**
-        * This method is deprecated since 1.31 and kept as alias for truncateForDatabase, which
-        * has replaced it. This method provides truncation suitable for DB.
-        *
-        * The database offers limited byte lengths for some columns in the database;
-        * multi-byte character sets mean we need to ensure that only whole characters
-        * are included, otherwise broken characters can be passed to the user.
-        *
-        * @deprecated since 1.31, use truncateForDatabase or truncateForVisual as appropriate.
-        *
-        * @param string $string String to truncate
-        * @param int $length Maximum length (including ellipsis)
-        * @param string $ellipsis String to append to the truncated text
-        * @param bool $adjustLength Subtract length of ellipsis from $length.
-        *      $adjustLength was introduced in 1.18, before that behaved as if false.
-        * @return string
-        */
-       function truncate( $string, $length, $ellipsis = '...', $adjustLength = true ) {
-               wfDeprecated( __METHOD__, '1.31' );
-               return $this->truncateForDatabase( $string, $length, $ellipsis, $adjustLength );
-       }
-
        /**
         * Truncate a string to a specified length in bytes, appending an optional
         * string (e.g. for ellipsis)
@@ -4285,14 +4243,17 @@ class Language {
        }
 
        /**
-        * Check if the language has the specific variant
+        * Strict check if the language has the specific variant.
+        *
+        * Compare to LanguageConverter::validateVariant() which does a more
+        * lenient check and attempts to coerce the given code to a valid one.
         *
         * @since 1.19
         * @param string $variant
         * @return bool
         */
        public function hasVariant( $variant ) {
-               return (bool)$this->mConverter->validateVariant( $variant );
+               return $variant && ( $variant === $this->mConverter->validateVariant( $variant ) );
        }
 
        /**
@@ -5098,10 +5059,6 @@ class Language {
        public function getPluralRuleType( $number ) {
                $index = $this->getPluralRuleIndexNumber( $number );
                $pluralRuleTypes = $this->getPluralRuleTypes();
-               if ( isset( $pluralRuleTypes[$index] ) ) {
-                       return $pluralRuleTypes[$index];
-               } else {
-                       return 'other';
-               }
+               return $pluralRuleTypes[$index] ?? 'other';
        }
 }
index b0baec1..7d954d3 100644 (file)
@@ -31,9 +31,10 @@ class LanguageCode {
         * Mapping of deprecated language codes that were used in previous
         * versions of MediaWiki to up-to-date, current language codes.
         * These may or may not be valid BCP 47 codes; they are included here
-        * because MediaWiki remapped these particular codes at some point.
+        * because MediaWiki renamed these particular codes at some point.
         *
-        * @var array Mapping from language code to language code
+        * @var array Mapping from deprecated MediaWiki-internal language code
+        *   to replacement MediaWiki-internal language code.
         *
         * @since 1.30
         * @see https://meta.wikimedia.org/wiki/Special_language_codes
@@ -71,7 +72,8 @@ class LanguageCode {
         * `kk-Cyrl` is a valid code, although some validators may emit
         * a warning note.
         *
-        * @var array Mapping from nonstandard codes to BCP 47 codes
+        * @var array Mapping from nonstandard MediaWiki-internal codes to
+        *   BCP 47 codes
         *
         * @since 1.32
         * @see https://meta.wikimedia.org/wiki/Special_language_codes
@@ -161,10 +163,7 @@ class LanguageCode {
         * @since 1.30
         */
        public static function replaceDeprecatedCodes( $code ) {
-               if ( isset( self::$deprecatedLanguageCodeMapping[$code] ) ) {
-                       return self::$deprecatedLanguageCodeMapping[$code];
-               }
-               return $code;
+               return self::$deprecatedLanguageCodeMapping[$code] ?? $code;
        }
 
        /**
index ea26c64..3c8d300 100644 (file)
@@ -140,10 +140,7 @@ class LanguageConverter {
         *   main code if there is no fallback
         */
        public function getVariantFallbacks( $variant ) {
-               if ( isset( $this->mVariantFallbacks[$variant] ) ) {
-                       return $this->mVariantFallbacks[$variant];
-               }
-               return $this->mMainLanguageCode;
+               return $this->mVariantFallbacks[$variant] ?? $this->mMainLanguageCode;
        }
 
        /**
@@ -212,9 +209,13 @@ class LanguageConverter {
        }
 
        /**
-        * Validate the variant
+        * Validate the variant and return an appropriate strict internal
+        * variant code if one exists.  Compare to Language::hasVariant()
+        * which does a strict test.
+        *
         * @param string|null $variant The variant to validate
-        * @return mixed Returns the variant if it is valid, null otherwise
+        * @return mixed Returns an equivalent valid variant code if possible,
+        *   null otherwise
         */
        public function validateVariant( $variant = null ) {
                if ( $variant === null ) {
index f2ce178..24b5e6c 100644 (file)
@@ -45,6 +45,8 @@ class LanguageAr extends Language {
                $s = parent::normalize( $s );
                if ( $wgFixArabicUnicode ) {
                        $s = $this->transformUsingPairFile( 'normalize-ar.php', $s );
+               } else {
+                       wfDeprecated( '$wgFixArabicUnicode = false', '1.33' );
                }
                return $s;
        }
index 07005d4..971cfad 100644 (file)
@@ -28,7 +28,7 @@
  * Belarusian in Taraškievica orthography (Беларуская тарашкевіца)
  *
  * @ingroup Language
- * @see http://be-x-old.wikipedia.org/wiki/Project_talk:LanguageBe_tarask.php
+ * @see https://be-tarask.wikipedia.org/wiki/Project_talk:LanguageBe_tarask.php
  */
 // phpcs:ignore Squiz.Classes.ValidClassName.NotCamelCaps
 class LanguageBe_tarask extends Language {
index 176c64c..3dd0d37 100644 (file)
@@ -46,6 +46,8 @@ class LanguageMl extends Language {
                $s = parent::normalize( $s );
                if ( $wgFixMalayalamUnicode ) {
                        $s = $this->transformUsingPairFile( 'normalize-ml.php', $s );
+               } else {
+                       wfDeprecated( '$wgFixMalayalamUnicode = false', '1.33' );
                }
                return $s;
        }
index b19a336..01f42e1 100644 (file)
        "tog-hideminor": "Peusom neuandam bacut bak neuubah barô",
        "tog-hidepatrolled": "Peusom neuandam teurunda bak neuubah barô",
        "tog-newpageshidepatrolled": "Peusom laman teurunda nibak dapeuta ôn barô",
-       "tog-hidecategorization": "Peusom kawan mieng",
+       "tog-hidecategorization": "Peusom kawan laman",
        "tog-extendwatchlist": "Peuhah dapeuta keunalön keu peuleumah ban dum neuubah, kön nyang barô mantöng",
        "tog-usenewrc": "Peusaho neuandam bak neuleumah neuubah barô ngön dapeuta keunalön meunurôt ôn",
        "tog-numberheadings": "Bôh numbôi nan keudroë",
-       "tog-showtoolbar": "Peuleumah bar alat peusaneut",
        "tog-editondblclick": "Peusaneut laman ngön duwa gö teugön",
        "tog-editsectiononrightclick": "Peujeuët peusaneut bideueng ngön teugön blah uneun bak nan bideueng",
        "tog-watchcreations": "Tamah laman nyang lôn peugöt u dapeuta keunalön",
@@ -48,6 +47,7 @@
        "tog-watchlisthideliu": "Peusom atra geupeusaneut lé ureuëng ngui nyang tamöng nibak dapeuta keunalön",
        "tog-watchlisthideanons": "Peusöm atra nyang geupeusaneut lé ureuëng ngui hana geuturi nibak dapeuta keunalön",
        "tog-watchlisthidepatrolled": "Peusom neuandam teukawai bak dapeuta keunalön",
+       "tog-watchlisthidecategorization": "Peusom peukawan laman",
        "tog-ccmeonemails": "Peu'ék keu lôn seunalén surat-e nyang lôn peu'ék keu ureueng la'én",
        "tog-diffonly": "Bek peuleumah asoë laman di yup beunida neuandam",
        "tog-showhiddencats": "Peuleumah kawan teusom",
        "and": "&#32;ngön",
        "faq": "Teunanyöng Umom",
        "actions": "Buët",
-       "namespaces": "Ruweuëng nan",
+       "namespaces": "Ruweueng nan",
        "variants": "Ragam",
        "navigation-heading": "Keumudoe",
        "errorpagetitle": "Seunalah",
        "newpage": "Laman barô",
        "talkpagelinktext": "marit",
        "specialpage": "Laman kusuih",
-       "personaltools": "Peukakaih droë",
+       "personaltools": "Peukakaih droe",
        "talk": "Marit",
        "views": "Leumah",
        "toolbox": "Alat",
        "viewcount": "Laman nyoë ka geusaweuë {{PLURAL:$1|sigo|$sigo}}.<br />",
        "protectedpage": "Laman teupeulindông",
        "jumpto": "Grôp u:",
-       "jumptonavigation": "keumudoë",
+       "jumptonavigation": "keumudoe",
        "jumptosearch": "mita",
        "view-pool-error": "Meu'ah, server teungöh sibôk jinoe\nLe that ureueng nyang meuh'eut jak eu laman nyoe\nNeuprèh si'at yôh goh neubaci lom\n\n$1",
        "generic-pool-error": "Meu'ah, server teungöh peunoh jinoë.\nRamè that ureuëng ngui nyang eu laman nyoë.\nNeuprèh sijamong sigoh neuci lom.",
        "policy-url": "Project:Neuatô",
        "portal": "Meusapat",
        "portal-url": "Project:Meusapat",
-       "privacy": "Jaga rahsia",
-       "privacypage": "Project:Jaga rahsia",
+       "privacy": "Keubijakan rahsia",
+       "privacypage": "Project:Keubijakan rahsia",
        "badaccess": "Salah khut/hak tamöng",
        "badaccess-group0": "Droeneuh hana geupeuidin keu neupeulaku buët nyang neulakèë",
        "badaccess-groups": "Buët nyang neulakèë geupeubatah keu ureuëng ngui lam {{PLURAL:$2|kawan|salah saboh nibak kawan}}: $1.",
        "versionrequired": "Peureulèë MediaWiki vèrsi $1",
        "versionrequiredtext": "MediaWiki versi $1 geupeureulèë keu neungui laman nyoë. Neu'eu [[Special:Version|on versi]]",
        "ok": "Ka göt",
-       "retrievedfrom": "Geurumpok nibak \"$1\"",
+       "retrievedfrom": "Geurumpök nibak \"$1\"",
        "youhavenewmessages": "Droëneuh na $1 ($2).",
        "youhavenewmessagesfromusers": "Droeneuh na $1 nibak {{PLURAL:$3|ureueng nguy la'en|$3 ureueng nguy}} ($2).",
        "youhavenewmessagesmanyusers": "Droeneuh na $1 nibak ureueng nguy la'en ($2)",
        "newmessageslinkplural": "{{PLURAL:$1|saboh peusan barô|999=peusan barô}}",
        "newmessagesdifflinkplural": "{{PLURAL:$1|neuubah|999=neuubah}} seuneulheuëh",
        "youhavenewmessagesmulti": "Droëneuh na padum boh peusan barô bak $1",
-       "editsection": "Peusaneut",
+       "editsection": "peusaneut",
        "editold": "peusaneut",
        "viewsourceold": "Eu nè",
        "editlink": "peusaneut",
        "exception-nologin-text": "Droëneuh suwah [[Special:Userlogin|neutamöng]] mangat jeuët neupeuhah laman nyoë",
        "virus-unknownscanner": "Antivirus hana geuturi:",
        "logouttext": "'''Droeneuh ka neutubiet log.'''\n\nBeuneuteupue meunyoe na padum-padum laman nyang deuh lagèe na neutamöng log, sampoe ka lheuh neupeugléh ''cache''.",
-       "cannotlogoutnow-title": "H`an jeuet teubiet log jinoe",
+       "cannotlogoutnow-title": "H'an jeuet teubiet jinoe",
        "welcomeuser": "Seulamat trôk teuka, $1 !",
-       "welcomecreation-msg": "Nan droëneuh ka geupeugöt. \nBèk tuwo neuatô [[Special:Preferences|geunalak {{SITENAME}}]] droëneuh.",
+       "welcomecreation-msg": "Akun-neuh ka geupeugöt. \nDroeneuh jeuet neugantoe {{SITENAME}} [[Special:Preferences|peuatô]] meunyö neumeuh'eut.",
        "yourname": "Ureuëng ngui:",
        "userlogin-yourname": "Ureuëng ngui",
        "userlogin-yourname-ph": "Peutamöng nan ureuëng ngui droëneuh",
        "createacct-yourpasswordagain-ph": "Pasoë lom lageuëm rahsia",
        "userlogin-remembermypassword": "Pubiyeuë lôn tamöng",
        "userlogin-signwithsecure": "Ngui koneksi aman",
-       "cannotlogin-title": "H`an jeuet tamong log",
+       "cannotlogin-title": "H'an jeuet tamöng",
+       "cannotloginnow-title": "H'an jeuet tamöng jinoe",
+       "cannotcreateaccount-title": "H'an jeuet peugöt akun",
        "yourdomainname": "Domain droeneuh:",
        "password-change-forbidden": "Droëneuh h‘an jeuët neuubah lageuëm rahsia bak wiki nyoë.",
-       "externaldberror": "Na seunalah bak peusahèh basis data luwa atawa droëneuh hana geubri idin keu neupeubarô akun luwa droëneuh",
+       "externaldberror": "Na seunalah bak peusahèh basis data luwa atawa droëneuh hana geubri idin keu neupubarô akun luwa droëneuh",
        "login": "Tamöng",
-       "nav-login-createaccount": "Tamöng / dapeuta",
+       "nav-login-createaccount": "Tamöng / peugöt akun",
        "logout": "Teubiët",
        "userlogout": "Teubiët",
-       "notloggedin": "Hana tamöng lom",
-       "userlogin-noaccount": "Goh lom neudapeuta?",
+       "notloggedin": "Goh lom neutamöng",
+       "userlogin-noaccount": "Goh lom na akun?",
        "userlogin-joinproject": "Neugabông ngön {{SITENAME}}",
        "createaccount": "Peudapeuta nan barô",
        "userlogin-resetpassword-link": "Tuwö lageuëm rahsia?",
        "userlogin-helplink2": "Beunantu tamöng log",
        "userlogin-loggedin": "Droëneuh ka neutamöng seubagoë $1. Neungui blangko di yup keu neutamöng seubagoë ureuëng ngui la’én",
-       "userlogin-createanother": "Peudapeuta nan barô",
+       "userlogin-createanother": "Peugöt akun laén",
        "createacct-emailrequired": "Alamat surat-e",
        "createacct-emailoptional": "Alamat surat-e (hana wajéb)",
        "createacct-email-ph": "Neupasoë alamat surat-e droëneuh",
        "createacct-realname": "Nan aseuli (hana wajéb)",
        "createacct-reason": "Alasan:",
        "createacct-reason-ph": "Pakön droëneuh neupeugöt nan ureuëng ngui la’én",
-       "createacct-submit": "Peudapeuta nan barô",
+       "createacct-submit": "Peugöt akun Droeneuh",
        "createacct-another-submit": "Peugöt nan ureuëng ngui la’én",
+       "createacct-continue-submit": "Lanjut pumeugöt akun",
        "createacct-benefit-heading": "{{SITENAME}} geupeugöt lé ureuëng lagèë droëneuh.",
        "createacct-benefit-body1": "{{PLURAL:$1|peusaneut}}",
        "createacct-benefit-body2": "{{PLURAL:$1|$1 halaman}}",
        "badretype": "Lageuëm rahsia nyang neupasoë salah.",
        "userexists": "Nan ureuëng ngui nyang neupasoë ka na soë ngui.\nNeupiléh nan nyang la'én.",
        "loginerror": "Salah bak tamöng",
-       "createacct-error": "Peudapeuta nan barô hana meuhasé",
-       "createaccounterror": "H‘an jeuët peudapeuta nan: $1",
+       "createacct-error": "Pumeugöt akun hana meuhasé",
+       "createaccounterror": "H'an jeuet peugöt akun: $1",
        "nocookiesnew": "Nan ureueng ngui nyoe ka meupeugöt, tapi goh meutamöng.\n{{SITENAME}} jingui ''cookies'' keu peutamöng ureueng ngui.\n''Cookies'' droeneuh hana meupeuudép.\nNeupeuudép ''cookies'' dilèe, lheuh nyan neutamöng ngön nan ureueng ngui ngön lageuem rahsia droeneuh.",
        "noname": "Nan ureuëng ngui nyang Droënueh peutamöng hana sah.",
        "loginsuccesstitle": "Meuhasé tamöng log",
        "loginsuccess": "'''Droëneuh  jinoë ka neutamöng di {{SITENAME}} sibagoë \"$1\".'''",
-       "nosuchuser": "Hana ureuëng ngui ngön nan \"$1\".\nHaraih rayek ngön haraih ubeut na peungarôh.\nTulông neuparéksa keulayi ijaan-neuh, atawa [[Special:CreateAccount|neudapeuta barô]].",
+       "nosuchuser": "Hana ureuëng ngui ngön nan \"$1\".\nHaraih rayek ngön haraih ubeut na peungarôh.\nNeuparéksa ijaan-neuh, atawa [[Special:CreateAccount|neupeugöt akun]].",
        "nosuchusershort": "Hana ureuëng ngui ngön nan \"$1\".\nPréksa keulayi neu’ija Droëneuh.",
        "nouserspecified": "Neupasoë nan Droëneuh.",
        "login-userblocked": "Ureuëng ngui nyoë ka teublokir, hana idin/hanjeut tamöng.",
        "noemail": "Hana alamat surat-e nyang teucatat keu ureuëng ngui \"$1\".",
        "noemailcreate": "Droeneuh suwah neuseudia alamt surat-e nyang jeut ngui.",
        "passwordsent": "Lageuëm barô ka geupeu'et u surat-e nyang geupeudapeuta keu \"$1\". Neutamöng teuma lheuëh neuteurimöng surat-e nyan.",
-       "eauthentsent": "Saboh surat-e keu peunyö ka geukirém u alamat surat-e Droëneuh. Droëneuh beuneuseutöt préntah lam surat nyan keu neupeunyö meunyö alamat nyan nakeuh beutôi atra Droëneuh. {{SITENAME}} h‘an geupeuudép surat Droëneuh meunyö langkah nyoë hana neupeubuet lom.",
+       "eauthentsent": "Saboh surat-e keu peusahèh ka geupeuét u alamat surat-e neuh. Sigohlom surat-e laén geupeuét u akun, Droëneuh beu neuseutöt préntah lam surat nyan, keu neupeusahèh meunyö akun nyan keubit atra Droeneuh.",
        "cannotchangeemail": "Alamat surat-e han jeut geugantoe bak wiki nyoe.",
        "emaildisabled": "Situs nyoe han jeut geukirém surat-e.",
-       "accountcreated": "Ureuëng ngui ka teupeugöt",
-       "accountcreatedtext": "Ureuëng ngui keu [[{{ns:User}}:$1|$1]]([[{{ns:User talk}}:$1|talk]]) ka teupeugöt.",
+       "accountcreated": "Akun ka geupeugöt",
+       "accountcreatedtext": "Akun ureuëng ngui keu [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|marit]]) ka geupeugöt.",
        "createaccount-title": "Peugöt ureuëng ngui keu {{SITENAME}}",
        "login-throttled": "Droeneuh ka lé that neuujoe tamöng.\nNeuprèh $1 sigohlom neuujoe lom.",
        "login-abort-generic": "Log tamöng droëneuh han meuhasé- Ngon ka geupeubateuë.",
        "user-mail-no-body": "Droëneuh ka neucuba kirém e-surat soh ngon that paneuk",
        "changepassword": "Gantoe lageuem rahsia",
        "resetpass_announce": "Keu neutamöng log, droëneuh suwah neupeugöt lageuëm rahsia barô",
-       "resetpass_header": "Gantoë lageuëm rahsia nan ureuëng ngui",
+       "resetpass_header": "Gantoë lageuëm rahsia akun",
        "oldpassword": "Lageuëm rahsia awai:",
        "newpassword": "Lageuëm rahsia barô:",
        "retypenew": "Pasoë lom lageuëm barô:",
        "publishpage": "Peuteubiet mieng",
        "publishchanges": "Peuteubiet neuubah",
        "savechanges-start": "Keubah neuubah...",
+       "publishchanges-start": "Peuteubiet neuubah...",
        "preview": "Eu dilèë",
        "showpreview": "Peuleumah hasé",
        "showdiff": "Peuleumah neuubah",
        "blockedtitle": "Ureueng ngui geutheun",
        "blockedtext": "<strong>Nan ureueng ngui atawa alamat IP Droeneuh ka geutheun.</strong>\n\nTeuneuheuen geupeugöt lé $1. \nAlasan nyang geubri nakeuh <em>$2</em>.\n\n* Phôn mula geutheun: $8\n* Maté tanggai teuneuheun: $6\n* Ureueng nyang geutheun: $7\n\nDroeneuh jeuet neutanyöng bak $1 atawa [[{{MediaWiki:Grouppage-sysop}}|ureueng urôih]] nyang la’én bhaih teuneuheun nyoe.\nDroeneuh h`an jeuet neungui alat \"{{int:emailuser}}\" keucuali meunyo alamat surat-e nyang sah na neupasoe bak [[Special:Preferences|Neuatô akun]] ngön Droeneuh hana geutheun keu neungui atra nyan.\nAlamat IP Droeneuh jinoe nakeuh $3, ngön ID teuneuheun nakeuh $5.\nNeutulông pasoe ban dum keutrangan di ateueh lam tiep teunanyöng nyang neupeugöt.",
        "autoblockedtext": "'''Nan ureuëng nguy atawa alamat IP Droëneuh  ka geutheun.'''\n\nGeutheun lé $1. Dalèh jih nakeuh ''$2''.\n\n* Geutheun yôh: $8\n* Neutheun maté tanggay bak: $6\n* Nyang geutheun: $7\n\nDroëneuh   jeuët neutanyong bak $1 atawa [[{{MediaWiki:Grouppage-sysop}}|nyang urôh nyang la’én]] keu peugah haba bhah nyoë.\n\nDroëneuh   h’an jeuët neunguy alat 'Kirém surat-e ureuëng nguy nyoë' keucuali ka neupasoë alamat surat-e nyang sah di [[Special:Preferences|Geunalak]] Droëneuh ngön Droëneuh ka geutheun keu nguy nyan.\n\nAlamat IP Droëneuh nakeuh $3, ngön ID neutheun nakeuh $5. Tulông peuseureuta salah saboh atawa ban duwa beurita nyoë bak tiëp teunanyöng nyang neupeugöt.",
-       "blockednoreason": "hana dalèh nyang geubri",
+       "blockednoreason": "hana alasan nyang geubri",
        "whitelistedittext": "Droeneuh suwah $1 keu neuandam ôn.",
        "nosuchsectiontitle": "Bideueng hana geutumèe",
        "loginreqtitle": "Droeneuh payah neutamöng log.",
        "template-protected": "(geulindông)",
        "template-semiprotected": "(siteungoh-lindông)",
        "hiddencategories": "Laman nyoë nakeuh anggèëta nibak {{PLURAL:$1|1 kawan teusom |$1 kawan teusom}}:",
-       "nocreatetext": "{{SITENAME}} ka jitham bak pumeugöt laman barô. \nDroëneuh jeuët neuriwang ngön neupeusaneut laman nyang ka na, atawa [[Special:UserLogin|neutamong log atawa neupeugöt akun]].",
+       "nocreatetext": "{{SITENAME}} ka jitham bak pumeugöt laman barô. \nDroëneuh jeuët neuriwang ngön neupeusaneut laman nyang ka na, atawa [[Special:UserLogin|neutamöng atawa neudapeuta]].",
        "nocreate-loggedin": "Droeneuh hana khut keu neupeugöt laman-laman barô.",
        "sectioneditnotsupported-title": "Peusaneut bideueng hana geudukông",
        "sectioneditnotsupported-text": "Peusaneut bideueng hana geudukông bak laman nyoe.",
        "rev-delundel": "peuleumah/peusom",
        "rev-showdeleted": "peudeuh",
        "revdelete-show-file-submit": "Nyoe",
+       "revdelete-hide-image": "Peusom asoe beureukaih",
        "revdelete-hide-comment": "Mohtasa neuandam",
        "revdelete-radio-same": "(bèk neugantoe)",
        "revdelete-radio-set": "Teusom",
        "preferences": "Galak",
        "mypreferences": "Atô",
        "prefs-edits": "Jumeulah neuandam:",
+       "prefsnologintext2": "Neutamöng mangat jeuet neugantoe peuatô",
        "prefs-skin": "Kulét",
        "skin-preview": "Eu dilèe",
        "datedefault": "Hana geunalak",
        "prefs-user-pages": "Laman ureueng ngui",
        "prefs-personal": "Profil ureueng ngui",
-       "prefs-rc": "Ban meuubah",
+       "prefs-rc": "Neuubah barô",
        "prefs-watchlist": "Dapeuta keunalön",
-       "prefs-watchlist-days": "Jumeulah uroe nyang meupeudeuh bak dapeuta keunalön:",
-       "prefs-watchlist-days-max": "{{PLURAL:$1|uroë}}",
+       "prefs-watchlist-days": "Jumeulah uroe nyang geupeuleumah lam dapeuta keunalön:",
+       "prefs-watchlist-days-max": "Paléng le {{PLURAL:$1|uroë}}",
        "prefs-misc": "La'én-la'én",
        "prefs-resetpass": "Gantoe lageuem rahsia",
        "prefs-changeemail": "Gantoe atawa böh alamat surat-e",
        "userrights-editusergroup": "Ubah kawan ureueng ngui",
        "saveusergroups": "Ubah kawan ureueng ngui",
        "userrights-groupsmember": "Anggèeta nibak:",
-       "userrights-reason": "Dalèh:",
+       "userrights-reason": "Alasan:",
        "userrights-no-interwiki": "Droeneuh hana izin keu neuubah khut ureueng ngui bak wiki la'én.",
        "userrights-changeable-col": "Kawan nyang jeut neugantoe",
        "userrights-unchangeable-col": "Kawan nyang han jeut neugantoe",
+       "userrights-expiry-options": "siuroe:1 day,sigo jumeu'at:1 week,sibuleuen:1 month,3 buleuen:3 months,6 buleuen:6 months,sithôn:1 year",
        "group": "Kawan:",
        "group-user": "Ureueng-ureueng ngui",
        "group-autoconfirmed": "Ureueng ngui nyang meu-konfirmasi otomatis",
        "right-createtalk": "Peugöt ôn marit",
        "right-createaccount": "Peugöt nan ureueng ngui barô",
        "right-minoredit": "Peutanda seubagoe peusaneut ubeut",
-       "right-move": "Pinah laman",
+       "right-move": "Pupinah laman",
        "right-move-subpages": "Pinah laman ngön ban dum aneuk laman",
        "right-move-rootuserpages": "Pinah laman ureueng ngui",
        "right-movefile": "Pinah beureukaih",
        "right-delete": "Sampôh laman",
        "right-bigdelete": "Sampôh laman ngön ban dum riwayatjih",
        "right-browsearchive": "Mita laman nyang geusampôh",
+       "grant-createeditmovepage": "Peugöt, peusaneut, ngön pupinah laman",
        "newuserlogpage": "Ureuëng ngui barô",
        "rightslog": "Log neuubah hak peuhah",
        "action-read": "beuët laman nyoe",
        "recentchanges-summary": "Neukalön nyang ban meuubah bak wiki lam laman nyoe.",
        "recentchanges-noresult": "Hana neuubah lam lheuëng watèë nyoë nyang paih ngön syarat",
        "recentchanges-feed-description": "Seutöt neuubah barô lam wiki bak umpeuën nyoë.",
-       "recentchanges-label-newpage": "Hasé peusaneut nyoë jipeugöt laman barô",
-       "recentchanges-label-minor": "Nyoe geupeusaneut bacut",
+       "recentchanges-label-newpage": "Geupeugöt laman barô",
+       "recentchanges-label-minor": "Geupeusaneut bacut",
        "recentchanges-label-bot": "Geupeusaneut lé bot",
        "recentchanges-label-unpatrolled": "Hasé peusaneut nyoe goh lom geukalon",
-       "recentchanges-label-plusminus": "Seunipat laman geugantoë lé jeumeulah bita nyoë",
+       "recentchanges-label-plusminus": "Neuubah seunipat laman lam byte",
        "recentchanges-legend-heading": "<strong>Hareutoë:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (eu cit [[Special:NewPages|dapeuta laman barô]])",
        "rcfilters-legend-heading": "<strong>Dapeuta seuningkat:</strong>",
        "rcfilters-group-results-by-page": "Peusapat hasé meunurôt laman",
        "rcfilters-activefilters": "Seunaréng udép",
        "rcfilters-activefilters-hide": "Peusom",
+       "rcfilters-activefilters-hide-tooltip": "Peusom teumpat saréng aktif",
        "rcfilters-limit-title": "Hasé keu teupeuleumah",
        "rcfilters-limit-and-date-label": "$1 {{PLURAL:$1|neuubah}}, $2",
        "rcfilters-date-popup-title": "Watèe nyang neumita",
        "rcfilters-days-title": "Uroe seuneulheueh",
        "rcfilters-hours-title": "Jeum seuneulheueh",
+       "rcfilters-days-show-days": "$1 {{PLURAL:$1|uroe}}",
        "rcfilters-quickfilters": "Seunaréng teukeubah",
        "rcfilters-savedqueries-defaultlabel": "Seunaréng teukeubah",
        "rcfilters-show-new-changes": "Peuleumah neuubah barô",
        "rcfilters-filter-pageedits-label": "Peusaneut laman",
        "rcfilters-filter-newpages-label": "Peugöt laman",
        "rcfilters-filter-logactions-label": "Buet teucètèt",
-       "rcfilters-liveupdates-button": "Neuubah jinoe",
+       "rcfilters-liveupdates-button": "Ban meuubah",
        "rcnotefrom": "Di yup nyoe nakeuh {{PLURAL:$5|neuubah}} yôh <strong>$3, $4</strong> (trôk 'an <strong>$1</strong> geupeuleumah).",
        "rclistfrom": "Peuleumah neuubah barô yôh $3 $2 kön",
        "rcshowhideminor": "$1 peusaneut bacut",
        "imagelinks": "Seuneungui beureukaih",
        "linkstoimage": "{{PLURAL:$1|laman}} di yup nyoe mupawôt u beureukaih nyoe:",
        "nolinkstoimage": "Hana laman nyang na meupawôt u beureukaih nyoe.",
+       "linkstoimage-redirect": "$1 (pinah beureukaih) $2",
        "sharedupload": "Beureukah nyoë dari $1 ngön kadang geunguy lé buët-buët la’én.",
        "sharedupload-desc-here": "Beureukaih nyoe nejih nibak $1 ngon kadang geunguy le proyek-proyek la'en.\nTeuneurang bak [$2 on teuneurangjih] geupeuleumah di yup nyoe.",
        "filepage-nofile": "Hana beureukaih ngön nan nyoe",
        "uploadnewversion-linktext": "Peulöt seunalén nyang leubèh barô nibak beureukah nyoë.",
        "upload-disallowed-here": "Droëneuh h'an jeuët neutimpa beureukaih nyoë",
+       "filerevert-comment": "Alasan:",
+       "filedelete-comment": "Alasan:",
+       "filedelete-otherreason": "Alasan laén/teunamah:",
        "mimesearch": "Mita MIME",
        "listredirects": "Dapeuta peuninah",
        "unusedtemplates": "Templat nyang hana geungui",
        "deadendpages": "Laman buntu",
        "protectedpages": "Laman nyang geulindông",
        "protectedpages-noredirect": "Peusom peuninah",
+       "protectedpages-reason": "Alasan",
        "listusers": "Dapeuta ureuëng ngui",
        "usercreated": "{{GENDER:$3|Geupeugot}} bak $1 poh $2",
        "newpages": "Laman barô",
        "watchlist-options": "Peuniléh dapeuta kalön",
        "watching": "Kalön...",
        "unwatching": "Hana kalön...",
+       "enotif_reset": "Bôh tanda ban dum laman kalheuh meusaweue",
        "deletepage": "Sampôh laman",
        "historywarning": "'''Peuneugah:''' Laman nyang keumeung neusampôh na riwayat ngön kureuëng leubèh $1 {{PLURAL:$1|geunantoë}}:",
        "confirmdeletetext": "Droëneuh neuk neusampôh laman atawa beureukaih nyoë keu sabé. Meunan cit ban mandum riwayatjih nibak basis data. Neupeupaseuti meunyo Droëneuh cit keubiët meung neusampôh, neutupeuë ban mandum akébatjih, ngön peuë nyang neupeulaku nyoë nakeuh meunurôt [[{{MediaWiki:Policy-url}}|kebijakan{{SITENAME}}]].",
        "actionfailed": "Hana meuhasé",
        "deletedtext": "\"$1\" ka geusampôh. Eu $2 keu log paléng barô bak laman nyang ka geusampôh.",
        "dellogpage": "Log seunampôh",
-       "deletecomment": "Choë:",
-       "deleteotherreason": "Nyang la’én/choë la’én:",
-       "deletereasonotherlist": "Choë la’én",
+       "deletecomment": "Alasan:",
+       "deleteotherreason": "Nyang laén/alasan laén:",
+       "deletereasonotherlist": "Alasan laén",
        "rollbacklink": "pulang",
        "rollbacklinkcount": "peuriwang $1 {{PLURAL:$1|hase peusaneut}}",
+       "changecontentmodel-reason-label": "Alasan:",
        "changecontentmodel-submit": "Gantoe",
        "protectlogpage": "Log lindông",
        "protectedarticle": "peulindông \"[[$1]]\"",
        "modifiedarticleprotection": "Ubah tingkat lindông \"[[$1]]\"",
        "prot_1movedto2": "peupinah [[$1]] u [[$2]]",
-       "protectcomment": "Choë:",
+       "protectcomment": "Alasan:",
        "protectexpiry": "Maté tanggay:",
        "protect_expiry_invalid": "Watèë maté tanggay hana sah.",
        "protect_expiry_old": "Watèë maté tanggay nakeuh bak masa u likôt.",
        "protect-expiry-indefinite": "sabé",
        "protect-cascade": "Peulindông ban mandum ôn nyang rôh lam ôn nyoë (lindông meuturôt).",
        "protect-cantedit": "Droëneuh h‘an jeuët neu’ubah tingkat lindông ôn nyoë kareuna Droëneuh hana hak keu neupeulaku nyan.",
+       "protect-otherreason": "Alasan laén/teunamah:",
        "protect-expiry-options": "1 jeum:1 hour,1 uroë:1 day,1 minggu:1 week,2 minggu:2 weeks,1 buleuën:1 month,3 buleuën:3 months,6 buleuën:6 months,1 thôn:1 year,sabé:infinite",
        "restriction-type": "Lindông:",
        "restriction-level": "Tingkat:",
        "undeletebtn": "Peuriwang!",
        "undeletelink": "eu/peuriwang",
        "undeleteviewlink": "eu",
+       "undeletecomment": "Alasan:",
        "undelete-search-submit": "Mita",
        "namespace": "Ruweuëng nan:",
        "invert": "Peubalék peuniléh",
        "whatlinkshere-hideimages": "$1 peunawôt beureukaih",
        "whatlinkshere-filters": "Saréng",
        "blockip": "Theun ureuëng ngui",
+       "ipbreason": "Alasan:",
        "ipboptions": "2 jeum:2 hours,1 uroë:1 day,3 uroë:3 days,1 minggu:1 week,2 minggu:2 weeks,1 buleuën:1 month,3 buleuën:3 months,6 buleuën:6 months,1 thôn:1 year,sabé:infinite",
+       "ipbhidename": "Peusom nan ureueng ngui nibak hasé peusaneut ngön dapeuta",
        "ipblocklist": "Ureuëng ngui teutheun",
+       "blocklist-reason": "Alasan",
        "ipblocklist-submit": "Mita",
        "infiniteblock": "hana bataih",
        "blocklink": "theun",
        "contribslink": "beuneuri",
        "blocklogpage": "Log peutheun",
        "blocklogentry": "theun [[$1]] ngön watèë maté tanggay $2 $3",
+       "reblock-logentry": "geuubah peuatô teuneutham keu [[$1]] ngön watèe abéh $2 $3",
        "unblocklogentry": "peugadöh theun \"$1\"",
        "block-log-flags-nocreate": "pumeugöt akun geupumaté",
        "proxyblocker": "Ngön theun proxy",
+       "move-page-legend": "Pupinah laman",
        "movepagetext": "Formulir di yup nyoë geunguy keu jak ubah nan saboh ôn ngön jak peupinah ban dum data riwayat u nan barô. Nan nyang trép euntreuk jeuët keu ôn peupinah u nan nyang barô. Hubông u nan trép hana meu’ubah. Neupeupaseuti keu neupréksa peuninah ôn nyang reulöh atawa meuganda lheuëh neupinah. Droëneuh nyang mat tanggông jaweuëb keu neupeupaseuti meunyo hubông laju teusambông u ôn nyang patôt.\n\nBeu neuingat that meunyo ôn '''h’an''' jan geupeupinah meunyo ka na ôn nyang geunguy nan barô, keucuali meunyo ôn nyan soh atawa nakeuh ôn peuninah ngön hana riwayat andam. Nyoë areutijih Droëneuh jeuët neu’ubah nan ôn keulayi lagèë söt meunyo Droëneuh neupeugöt seunalah, ngön Droëneuh h‘an jeuët neutimpa ôn nyang ka na.\n'''INGAT'''\nNyoë jeuët geupeuakébat neu’ubah nyang h’an neuduga ngön kreuëh ngön bacah keu ôn nyang meuceuhu. Neupeupaseuti Droëneuh meuphôm akébat nibak buët nyoë sigohlom neulanjut.",
        "movepagetalktext": "Ôn peugah haba nyang na hubôngan euntreuk teupinah keudroë '''keucuali meunyo:'''\n\n*Saboh ôn peugah haba nyang hana soh ka na di yup nan barô, atawa\n*Droëneuh hana neubôh tanda cunténg bak kutak di yup nyoë\n\nLam masalah nyoë, meunyo neuhawa, Droëneuh jeuët neupeupinah atawa neupeugabông ôn keudroë.",
+       "movenotallowed": "Droeneuh hana idin keu neupinah laman",
        "newtitle": "Nan barô:",
        "move-watch": "Kalön laman nyoë",
-       "movepagebtn": "Peupinah laman",
+       "movepagebtn": "Pupinah laman",
        "pagemovedsub": "Peupinah meuhasé",
        "movepage-moved": "'''\"$1\" ka geupeupinah u \"$2\".'''",
        "articleexists": "Ôn ngön nan nyan ka na atawa nan nyang neupiléh hana sah. Neupiléh nan la’én.",
        "movelogpage": "Log pinah",
        "movereason": "Choë:",
        "revertmove": "peuriwang",
+       "immobile-source-namespace": "H'an jeuet pupinah laman lam ruweueng nan \"$1\".",
+       "immobile-target-namespace": "H'an jeuet pupinah laman lam ruweueng nan \"$1\".",
        "export": "Èkspor laman",
        "allmessages": "Peusan sistem",
        "allmessagesname": "Nan",
        "pageinfo-header-basic": "Keutrangan peuneuphôn",
        "pageinfo-header-edits": "Riwayat peusaneut",
        "pageinfo-header-restrictions": "Lindông laman",
+       "pageinfo-header-properties": "Keutrangan laman",
        "pageinfo-display-title": "Judul tampilan",
        "pageinfo-default-sort": "Gunci urôt baku",
        "pageinfo-length": "Panyang laman (lam bit)",
        "pageinfo-robot-noindex": "Hana geupeuidin",
        "pageinfo-watchers": "Jumeulah ureueng kalön laman",
        "pageinfo-redirects-name": "Jumeulah peuninah u laman nyoe",
+       "pageinfo-subpages-name": "Jeumeulah aneuk laman nibak laman nyoe",
+       "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|peuninah}}; $3 {{PLURAL:$3|kön-peuninah}})",
        "pageinfo-firstuser": "Ureueng peugöt laman",
        "pageinfo-firsttime": "Uroe buleuen pumeugot laman",
        "pageinfo-lastuser": "Ureueng peusaneut seuneulheueh",
        "pageinfo-edits": "Jumeulah hasé peusaneut ban dum",
        "pageinfo-authors": "Jumeulah ban dum ureueng teumuléh nyang mubida",
        "pageinfo-recent-edits": "Jumeulah peusaneut ban-ban nyoe (lam $1 nyoe)",
+       "pageinfo-magic-words": "{{PLURAL:$1|Narit}} ajaéb ($1)",
+       "pageinfo-hidden-categories": "{{PLURAL:$1|Kawan}} teusom ($1)",
        "pageinfo-toolboxlink": "Keutrangan laman",
        "pageinfo-contentpage-yes": "Nyo",
        "patrol-log-page": "Log patroli",
        "previousdiff": "← Bida awai",
        "nextdiff": "Geunantoë lheuëh nyan →",
+       "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|laman}}",
        "file-info-size": "$1 × $2 piksel, rayek beureukaih: $3, MIME jeunèh: $4",
        "file-info-size-pages": "$1 × $2 piksel, seunipat beureukaih: $3, jeunèh MIME: $4, $5 {{PLURAL:$5|laman}}",
        "file-nohires": "Hana resolusi nyang leubèh manyang.",
        "tags-active-yes": "Nyo",
        "tags-active-no": "H`an",
        "tags-hitcount": "$1 {{PLURAL:$1|neuubah}}",
+       "tags-create-reason": "Alasan:",
+       "tags-delete-reason": "Alasan:",
+       "tags-activate-reason": "Alasan:",
+       "tags-deactivate-reason": "Alasan:",
+       "tags-edit-reason": "Alasan:",
        "logentry-delete-delete": "$1 {{GENDER:$2|geusampôh}} laman $3",
+       "logentry-delete-restore": "$1 {{GENDER:$2|geupeuriwang}} laman $3 ($4)",
+       "revdelete-content-hid": "asoe geusom",
        "logentry-move-move": "$1 {{GENDER:$2|geupinah}} laman $3 u $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|geupinah}} laman $3 u $4 hana geubôh peuninah",
        "logentry-move-move_redir": "$1 {{GENDER:$2|geupinah}} laman $3 u $4 ateueh laman peuninah",
        "duration-years": "{{PLURAL:$1|thôn}}",
        "duration-decades": "{{PLURAL:$1|dekade}}",
        "duration-centuries": "{{PLURAL:$1|abad}}",
-       "duration-millennia": "{{PLURAL:$1|milenium}}"
+       "duration-millennia": "{{PLURAL:$1|milenium}}",
+       "pagelang-reason": "Alasan"
 }
index 44f8a03..1540601 100644 (file)
@@ -23,7 +23,6 @@
        "tog-extendwatchlist": "КӀэлъыплъэ тхылъыр зэхэщ зэхъокӀ пстэур плъэгъунэу, бэмышӀхэм ямызакъоу",
        "tog-usenewrc": "БэмышI зэхъокIхэм ыкIи лъыплъэ купым щыщ зэхъокIхэр куп-купэу гъэзаф",
        "tog-numberheadings": "Аутоматэу цӀэшъхьаӀхэм номер ятын",
-       "tog-showtoolbar": "Къэгъэлъагъу еIэзэн Ӏэмэ-псымэхэр",
        "tog-editondblclick": "ТIо-теIункIэмкIэ нэкIубгъомэ яIаз",
        "tog-editsectiononrightclick": "Жъабгъу тIо-теIункIэмкIэ уеIэзэшъунэу къэшI",
        "tog-watchcreations": "СшIыгъэ нэкIубгъохэр ыкIи ислъхьэгъэ файлэхэр си лъыплъэ купым хэгъахъу",
index 2c68200..b5c162c 100644 (file)
@@ -15,7 +15,6 @@
                ]
        },
        "tog-usenewrc": ")جمّع التعديلات حسب الصفحة في أحدث التغييرات وقائمة المراقبة (يتطلب جافاسكربت",
-       "tog-showtoolbar": "أظهر شريط التحرير (يتطلب جافاسكربت)",
        "tog-editondblclick": "عدل الصفحات عند الضغط المزدوج (جافاسكربت)",
        "tog-editsectiononrightclick": "فعل تعديل الأقسام بواسطة كبسة الفأرة اليمين على عناوين الأقسام (جافاسكريبت)",
        "tog-fancysig": "عامل التوقيع كنص ويكي (بدون وصلة أوتوماتيكية)",
index ab0aa58..519d682 100644 (file)
@@ -38,7 +38,6 @@
        "tog-extendwatchlist": "Brei dophoulys uit om alle wysigings te wys, nie slegs die nuutste nie",
        "tog-usenewrc": "Groepeer wysigings per bladsy in onlangse wysigings en dophoulys",
        "tog-numberheadings": "Nommer opskrifte outomaties",
-       "tog-showtoolbar": "Wys redigeringsnutsbalk",
        "tog-editondblclick": "Dubbelklik om te redigeer",
        "tog-editsectiononrightclick": "Wysig afdeling met 'n regskliek op die afdeling se titel",
        "tog-watchcreations": "Voeg bladsye wat ek skep en lêers wat ek oplaai by my dophoulys",
index b00e768..d758d5b 100644 (file)
@@ -15,7 +15,6 @@
        "tog-extendwatchlist": "micuwat miazihay a piazihan-tu-sulit paazih yamalyilu capi demiad zumaay a sacahamin sumad",
        "tog-usenewrc": "kilul capi demiad misumad atu miazihay a piazihan-tu-sulit a kasabelih  kakuniza paazih ku masumaday",
        "tog-numberheadings": "satangahan lunuk pabanggu",
-       "tog-showtoolbar": "paazih mikawaway-kalumyiti sakaluk tusil",
        "tog-editondblclick": "sapecec sakatusa hawsa mikawaway-kalumyiti kasabelih",
        "tog-editsectiononrightclick": "miwawah hwasu kawanan-penec sapecec tusil satangahan mikawaway-kalumyiti",
        "tog-watchcreations": "amipatizeng kasabelih nu maku atu patapabaw a tangan pacunus miazihay a piazihan-tu-sulit",
index 24a6f97..6d111fc 100644 (file)
@@ -19,7 +19,6 @@
        "tog-extendwatchlist": "Zgjâno listën e mbikëqyrjeve që me i pa tâna ndryshimet, jo veç ato mâ të fresktat",
        "tog-usenewrc": "Përdor ndryshimet e freskëta me vegla të përparueme (lyp JavaScript)",
        "tog-numberheadings": "Numëro automatikisht mbititujt",
-       "tog-showtoolbar": "Trego butonat për redaktim (JavaScript)",
        "tog-editondblclick": "Redakto faqet me klikim të dyfishtë (JavaScript)",
        "tog-editsectiononrightclick": "Lejo redaktimin e seksioneve tue klikue me të djathtë mbi titull (JavaScript)",
        "tog-watchcreations": "Shtoji në listë mbikëqyrëse faqet që i krijoj vetë",
index 0612ee9..09f0d0c 100644 (file)
@@ -23,7 +23,6 @@
        "tog-extendwatchlist": "የሚደረጉ ለውጦችን ለማሳየት መቆጣጠሪያ-ዝርዝርን ዘርጋ",
        "tog-usenewrc": "የተሻሻሉ የቅርብ ጊዜ ለውጦች ተጠቀም (JavaScript ያስፈልጋል)",
        "tog-numberheadings": "አርዕስቶችን በራስገዝ ቁጥር ስጥ",
-       "tog-showtoolbar": "«አርም» ትዕዛዝ-መስጫ ይታይ (JavaScript)",
        "tog-editondblclick": "ሁለቴ መጫን ገጹን ማረም ያስችል (JavaScript ያስፈልጋል)",
        "tog-editsectiononrightclick": "የክፍል አርዕስት ላይ በቀኝ በመጫን ክፍል ማረምን አስችል (JavaScript)",
        "tog-watchcreations": "እኔ የምፈጥራቸውን ገጾችና የምልካቸውን ፋይሎች ወደምከታተላቸው ገጾች ዝርዝር ውስጥ ጨምር",
index e52509e..ff8bf7b 100644 (file)
@@ -27,7 +27,6 @@
        "tog-extendwatchlist": "Expandir a lista de seguimiento t'amostrar totz os cambeos, no nomás os más recients.",
        "tog-usenewrc": "Zaguers cambeos con presentación amillorada (cal JavaScript)",
        "tog-numberheadings": "Numerar automaticament os encabezaus",
-       "tog-showtoolbar": "Amostrar a barra d'edición",
        "tog-editondblclick": "Editar pachinas fendo-ie doble click",
        "tog-editsectiononrightclick": "Activar a edición de seccions punchando con o botón dreito d'o ratet en os títols de seccions",
        "tog-watchcreations": "Cosirar as pachinas que creye",
index f0fe020..a716930 100644 (file)
@@ -28,7 +28,6 @@
        "tog-extendwatchlist": "Sprǣdan behealdungtæl tō īwenne ealla andwendinga, nā synderlīce þā nīwostan",
        "tog-usenewrc": "Settan andwendunga on hēapas on trametum on nīwra andwendunga getæle and behealdungtæle",
        "tog-numberheadings": "Settan rīm on forecwidas selflīce",
-       "tog-showtoolbar": "Īwan þā adihtunge tōlmearce",
        "tog-editondblclick": "Adihtan trametas mid twifealdum mȳs swenge",
        "tog-editsectiononrightclick": "Þafian dǣla adihtunge þurh swīðran healfe mȳs swengas on dǣla titulum",
        "tog-watchcreations": "Ēacnian mīn behealdungtæl mid trametum þā ic scieppe and ymelum þā ic hlade on nett.",
index 5578f49..9154182 100644 (file)
@@ -17,7 +17,6 @@
        "tog-extendwatchlist": "ध्यान सूची मॆं सब्भे बदलाव दर्शाबॊ, सिर्फ हाले के नै",
        "tog-usenewrc": "हाल मं॑ होलऽ परिवर्तनऽ आरू ध्यानसूची मं॑ परिवर्तनऽ क॑ पृष्ठ अनुसार समूहऽ मं॑ बाँटऽ",
        "tog-numberheadings": "शीर्षक स्वयं-क्रमांकित करॊ",
-       "tog-showtoolbar": "सम्पादन उपकरण पट्टी दिखाबऽ",
        "tog-editondblclick": "दू-बार क्लीक करी क॑ पन्ना संपादित करऽ (जावास्क्रीप्ट)",
        "tog-editsectiononrightclick": "अनुभाग शीर्षक पर दायाँ क्लिक करला पर अनुभाग सम्पादित करऽ",
        "tog-watchcreations": "हमरऽ तैयार करलऽ पन्ना आरू हमरऽ अपलोड करलऽ फाइल सब क॑ हमरऽ ध्यानसूची मं॑ जोड़ऽ",
index c7b0604..3a4810f 100644 (file)
@@ -87,7 +87,6 @@
        "tog-extendwatchlist": "وسع قائمة المراقبة لتعرض كل التغييرات، وليس أحدثها فقط",
        "tog-usenewrc": "طي التغييرات حسب الصفحة في أحدث التغييرات وقائمة المراقبة",
        "tog-numberheadings": "ترقيم العناوين تلقائيا",
-       "tog-showtoolbar": "إظهار شريط التحرير",
        "tog-editondblclick": "تعديل الصفحات بالنقر المزدوج",
        "tog-editsectiononrightclick": "تفعيل تعديل الأقسام بالنقر باليمين على عناوين الأقسام",
        "tog-watchcreations": "أضف الصفحات التي أنشئها والملفات التي أرفعها إلى قائمة مراقبتي.",
        "subject-preview": "معاينة الموضوع:",
        "previewerrortext": "حدث خطأ أثناء محاولة معاينة تغييراتك.",
        "blockedtitle": "المستخدم ممنوع",
+       "blocked-email-user": "<strong>م منع اسم المستخدم الخاص بك من إرسال البريد الإلكتروني، لا يزال بإمكانك تحرير صفحات أخرى على هذا الويكي،</strong> يمكنك عرض تفاصيل المنع بالكامل في [[Special:MyContributions|مساهمات الحساب]].\n\nتم المنع بواسطة  $1.\n\nالسبب المعطى هو <em>$2</em>.\n\n* بداية المنع: $8\n* انتهاء المنع: $6\n* الممنوع المقصود: $7\n* معرف المنع #$5",
+       "blockedtext-partial": "<strong>تم منع اسم المستخدم أو عنوان الآيبي الخاص بك من إجراء تغييرات على هذه الصفحة، لا يزال بإمكانك تعديل صفحات أخرى على هذا الويكي،</strong> يمكنك عرض تفاصيل المنع بالكامل في [[Special:MyContributions|مساهمات الحساب]].\n\nتم المنع بواسطة  $1.\n\nالسبب المعطى هو <em>$2</em>.\n\n* بداية المنع: $8\n* انتهاء المنع: $6\n* الممنوع المقصود: $7\n* معرف المنع #$5",
        "blockedtext": "'''اسم المستخدم أو عنوان الأيبي الخاص بك تم منعه.'''\n\nقام بالمنع $1.\nسبب المنع هو: ''$2''.\n\n* بداية المنع: $8\n* انتهاء المنع: $6\n* الممنوع المقصود: $7\n\nيمكنك الاتصال ب$1 أو أحد [[{{MediaWiki:Grouppage-sysop}}|الإداريين]] للنقاش حول المنع.\nلا يمكنك استخدام خاصية \"{{int:emailuser}}\" إلا إذا كنت قد وضعت عنوان بريدي صحيح في [[Special:Preferences|تفضيلات حسابك]] ولم يتم منعك من استخدامها.\nعنوان الأيبي الخاص بك حاليا هو $3، ورقم المنع هو #$5.\nمن فضلك اذكر كل التفاصيل بالأعلى في أي استعلامات تقوم بها.",
        "autoblockedtext": "مُنِع عنوان آيبيك تلقائيا لأن مستخدما آخرا منعه $1 استخدمه.\nالسبب المعطى هو التالي:\n\n:<em>$2</em>\n\n* بداية المنع: $8\n* انتهاء المنع: $6\n* الممنوع المقصود: $7\n\nيمكنك أن تتصل ب $1 أو أحد [[{{MediaWiki:Grouppage-sysop}}|الإداريين]] الآخرين لمناقشة المنع.\n\nلاحظ أنه لا يمكنك استخدام خاصية \"إرسال رسالة لهذا المستخدم\" إلا لو كان لديك عنوان بريد إلكتروني صحيح مسجل في [[Special:Preferences|تفضيلاتك]] ولم يتم منعك من استخدامه.\n\nعنوان آيبيك الحالي $3، ورقم المنع #$5.\nمن فضلك اذكر كل التفاصيل بالأعلى في أي استعلامات تقوم بها.",
        "systemblockedtext": "اسم المستخدم أو عنوان الأيبي الخاص بك تم منعه تلقائيا بواسطة ميدياويكي.\nالسبب المعطى هو:\n\n:<em>$2</em>\n\n* بداية المنع: $8\n* نهاية المنع: $6\n* المقصود بالمنع: $7\n\nعنوان الأيبي الحالي الخاص بك هو $3.\nمن فضلك ضمن كل التفاصيل بالأعلى في أي استعلام تقوم به.",
        "mergehistory-go": "عرض التعديلات القابلة للدمج",
        "mergehistory-submit": "دمج المراجعات",
        "mergehistory-empty": "لا مراجعات يمكن دمجها.",
-       "mergehistory-done": "$3 {{PLURAL:$3|مراجعة}} من $1{{PLURAL:$3|كان|اين}} تم دمجها بنجاح في [[:$2]].",
+       "mergehistory-done": "$3 {{PLURAL:$3|مراجعة|مراجعات}} من $1 {{PLURAL:$3|تم}} دمجها في [[:$2]].",
        "mergehistory-fail": "غير قادر على عمل دمج التاريخ، من فضلك أعد التحقق من محددات الصفحة والزمن.",
        "mergehistory-fail-bad-timestamp": "الختم الزمني غير صالح.",
        "mergehistory-fail-invalid-source": "الصفحة المصدر غير صالحة.",
        "prefixindex": "كل الصفحات بالبادئة",
        "prefixindex-namespace": "كل الصفحات مع بادئة (نطاق $1)",
        "prefixindex-submit": "اعرض",
-       "prefixindex-strip": "أخÙ\81 Ø§Ù\84بادئة Ù\85Ù\86 Ø§Ù\84Ù\82ائÙ\85Ø©",
+       "prefixindex-strip": "إخÙ\81اء Ø§Ù\84بادئة Ù\81Ù\8a Ø§Ù\84Ù\86تائج",
        "shortpages": "صفحات قصيرة",
        "longpages": "صفحات طويلة",
        "deadendpages": "صفحات نهاية مسدودة",
        "ipb-disableusertalk": "امنع هذا المستخدم من تعديل صفحة نقاشه ما دام ممنوعاً",
        "ipb-change-block": "أعد منع المستخدم بهذه الإعدادات",
        "ipb-confirm": "أكّد المنع",
+       "ipb-sitewide": "الموقع بأكمله",
+       "ipb-partial": "جزئي",
+       "ipb-type-label": "النوع",
+       "ipb-pages-label": "الصفحات",
        "badipaddress": "عنوان أيبي غير صحيح",
        "blockipsuccesssub": "تم المنع بنجاح",
        "blockipsuccesstext": "[[Special:Contributions/$1|$1]] تم {{GENDER:$1|منعه|منعها}}.<br />\nطالع [[Special:BlockList|قائمة منع الآيبي]] لمراجعة حالات المنع.",
        "createaccountblock": "إنشاء الحسابات ممنوع.",
        "emailblock": "البريد الإلكتروني ممنوع",
        "blocklist-nousertalk": "لا يمكنه تعديل صفحة نقاشه الخاصة",
+       "blocklist-editing": "التحرير",
+       "blocklist-editing-sitewide": "التحرير (على مستوى الموقع)",
        "ipblocklist-empty": "قائمة المنع فارغة.",
        "ipblocklist-no-results": "عنوان الأيبي أو اسم المستخدم المطلوب غير ممنوع.",
        "blocklink": "امنع",
        "logentry-block-block": "{{GENDER:$2|منع|منعت}} $1 {{GENDER:$4|$3}} لفترة زمنية مدتها $5 $6",
        "logentry-block-unblock": "$1 {{GENDER:$2|رفع منع}} {{GENDER:$4|$3}}",
        "logentry-block-reblock": " {{GENDER:$2|غير|غيرت}} $1 إعدادات المنع ل{{GENDER:$4|$3}} بتاريخ انتهاء $5 $6",
+       "logentry-partialblock-block": "$1 {{GENDER:$2|منع|منعت}} {{GENDER:$4|$3}} من تحرير {{PLURAL:$8|صفحة|الصفحات}} $7 مع وقت انتهاء يبلغ $5 $6",
+       "logentry-partialblock-reblock": "$1 {{GENDER:$2|غير|غيرت}} إعدادات منع {{GENDER:$4|$3}} التي تمنع التعديلات على {{PLURAL:$8|صفحة|الصفحات}} $7 بوقت انتهاء يبلغ $5 $6",
+       "logentry-non-editing-block-block": "$1 {{GENDER:$2|منع|منعت}} {{GENDER:$4|$3}} من إجراءات عدم التعديل بوقت انتهاء يبلغ $5 $6",
+       "logentry-non-editing-block-reblock": "$1 {{GENDER:$2|غير|غيرت}} إعدادات منع {{GENDER:$4|$3}} لإجراءات عدم التعديل بوقت انتهاء يبلغ $5 $6",
        "logentry-suppress-block": "{{GENDER:$2|منع|منعت}} $1 {{GENDER:$4|$3}} لفترة زمنية مدتها $5 $6",
        "logentry-suppress-reblock": "$1 {{GENDER:$2|غير|غيرت}} إعدادات المنع ل{{GENDER:$4|$3}} بتاريخ انتهاء $5 $6",
        "logentry-import-upload": "$1 {{GENDER:$2|استورد}} $3 بواسطة رفع ملف",
        "mw-widgets-titleinput-description-redirect": "تحويل إلى $1",
        "mw-widgets-categoryselector-add-category-placeholder": "أضف تصنيفا...",
        "mw-widgets-usersmultiselect-placeholder": "أضف المزيد...",
+       "mw-widgets-titlesmultiselect-placeholder": "أضف المزيد...",
        "date-range-from": "من تاريخ:",
        "date-range-to": "حتى تاريخ:",
        "sessionmanager-tie": "لا يمكن جمع أنواع استيثاق متعددة: $1.",
        "passwordpolicies-policy-passwordcannotmatchblacklist": "لا يمكن أن تتطابق كلمة المرور مع كلمات المرور المدرجة على القائمة السوداء تحديدا",
        "passwordpolicies-policy-maximalpasswordlength": "يجب أن يكون طول كلمة المرور أقل من $1 {{PLURAL:$1|حرف|أحرف}}",
        "passwordpolicies-policy-passwordcannotbepopular": "لا يمكن أن تكون كلمة المرور {{PLURAL:$1|كلمة المرور الشائعة|في قائمة كلمات المرور الشائعة الـ$1}}",
-       "easydeflate-invaliddeflate": "المحتوى المقدم لا يتم تفريغه بشكل صحيح"
+       "easydeflate-invaliddeflate": "المحتوى المقدم لا يتم تفريغه بشكل صحيح",
+       "unprotected-js": "لأسباب تتعلق بالأمان; لا يمكن تحميل جافا سكريبت من الصفحات غير المحمية; الرجاء إنشاء جافا سكريبت فقط في نطاق ميدياويكي: أو كصفحة فرعية للمستخدم"
 }
index 98c4d62..b4686a1 100644 (file)
@@ -12,7 +12,6 @@
                ]
        },
        "tog-underline": "Miñcewirilpe lasun",
-       "tog-showtoolbar": "Pengelün kümeelkünun ñi chemkün",
        "tog-editondblclick": "Wirin pakina epu klik mew",
        "underline-always": "Rumel",
        "underline-never": "Turpu",
index 3aa0599..ce33e94 100644 (file)
@@ -20,7 +20,6 @@
        "tog-extendwatchlist": "دلّي الليستة تاع التتباع باش تورّي كامل التبديلات، ماشي برك غير التوالا",
        "tog-usenewrc": "جمّع الـتبدالات بل صفحة فل تبدالات الـجديدة و الـليستة تاع الـعسّة",
        "tog-numberheadings": "رقّم العلاون تاع القسيمات",
-       "tog-showtoolbar": "بيّن البارّة تاع دوزان‘ الكتبة",
        "tog-editondblclick": "آكتيفي التبدال تاع الباجات بل زوج ضركات تاع الفارة",
        "tog-editsectiononrightclick": "آكتيفي التبدال تاع السكسيوّات بل ضريك بل ليمنة على العلاوين نتاعهم",
        "tog-watchcreations": "زيد الـصفحات اللي نخلقها و الـفيشيّات فل قايمة تاع التتباع تاعي",
index 135dca5..061591e 100644 (file)
@@ -22,7 +22,6 @@
        "tog-extendwatchlist": "Kebber l-lista dyal s-suivi baċ bano ṫ-ṫeġyiraṫ kamlin, maċi ġir l-leĥĥrin.",
        "tog-usenewrc": "Sṫeĝmel ṫ-ṫeġyiraṫ l-leĥĥrin l-mezyanin (kayḫṫaj JavaScript)",
        "tog-numberheadings": "Nemra otomaṫikiya dyal l-ĝanawin",
-       "tog-showtoolbar": "Werri l-barra dyal ṫ-ṫeĝdilaṫ (kayḫṫaj JavaScript)",
        "tog-editondblclick": "Baċ ṫṣayeb ṣ-ṣefḫa ĥaṣek ṫbrek 2 merraṫ (kayḫṫaj JavaScript)",
        "tog-editsectiononrightclick": "Baċ ṫbeddel l-ĝonwan dyal ċi seksyon brek ĝlih be l-imniya (kayḫṫaj JavaScript)",
        "tog-watchcreations": "zid sfahi li nchatha f qaaimat lmoraqaba",
index 2435640..b386762 100644 (file)
@@ -23,7 +23,6 @@
        "tog-extendwatchlist": "وسع ليستة المراقبه علشان تبين كل التعديلات, مش بس اجدد تعديلات",
        "tog-usenewrc": "جمع  التغييرات  حسب الصفحه ف اجدد التغييرات و لستة الصفح اللى باراقبها",
        "tog-numberheadings": "رقم العناوين اوتوماتيك",
-       "tog-showtoolbar": "بين شريط التعديل",
        "tog-editondblclick": "عدل الصفح لما تدوس مرتين",
        "tog-editsectiononrightclick": "اسمح بـ تعديل الاجزاء لما تعمل كليك يمين بـالماوس على عناوين الاجزاء",
        "tog-watchcreations": "زوّد الصفح اللى ابتديتها على ليستة الصفح اللى باراقبها.",
index fead6f8..0e5c031 100644 (file)
@@ -34,7 +34,6 @@
        "tog-extendwatchlist": "কেৱল সাম্প্ৰতিকেই নহয, লক্ষ্য-তালিকাৰ সকলো সাল-সলনি বহলাই দেখুৱাওক",
        "tog-usenewrc": "পৃষ্ঠাৰ পৰিৱৰ্তনসমূহ শেহতীয়া সালসলনি আৰু লক্ষ্যতালিকাত ভাগ কৰক",
        "tog-numberheadings": "শীৰ্ষকত স্বয়ংক্ৰিয়ভাৱে ক্ৰমিক নং দিয়ক",
-       "tog-showtoolbar": "সম্পাদনা দণ্ডিকা দেখুৱাওক",
        "tog-editondblclick": "দুবাৰ ক্লিক কৰি পৃষ্ঠা সম্পাদনা কৰিব পাৰি",
        "tog-editsectiononrightclick": "অনুচ্ছেদৰ শিৰোনামাত ৰাইট্‌ ক্লিক টিপি সম্পাদনা কৰাটো সক্ৰিয় কৰক",
        "tog-watchcreations": "মই সৃষ্টি সকলো পৃষ্ঠা মোৰ লক্ষ্য-তালিকাত যোগ কৰক",
index b3783e9..53a0227 100644 (file)
@@ -10,7 +10,6 @@
        "tog-newpageshidepatrolled": "M518x560S15a16490x548S2880f453x527S20e00476x538S1821d488x535S30a00482x483 M518x558S15a37484x534S1f550490x541S20e00470x545S26502452x544S30a00482x483 M518x610S14402482x556S1440a475x532S22b04497x580S30a00482x483 S38700463x496 M546x533S15a56519x474S2ff00482x483S2c601516x507S1f740521x487S1f711484x508 M537x524S10e50516x494S26a10463x476S26a00510x476S10e58469x494 M531x516S15a37501x485S1f550507x492S20e00487x496S26a02470x489",
        "tog-extendwatchlist": "M518x534S14702496x489S1470a483x479S22704501x506S22700484x467S22a04501x519 M526x524S10e50511x494S26500510x476S10e58475x494S26510477x476 M519x539S14402488x485S1440a481x461S22b04503x509 M521x531S10012491x516S15a18479x503S26620486x469 M538x518S15a21515x483S15a07463x482S15a01466x483S2a20c493x490 M521x532S10609498x496S10621487x512S21100500x483S2df20479x468 S38700463x496 M534x542S2ff00482x483S26500520x505S20e00521x526S1f540493x518 M518x521S10000483x491S2ef00500x479 M521x524S1f740501x509S1f748479x498S20e00503x494S22a00502x476 M536x534S35610482x483S10601513x506S21600525x501",
        "tog-usenewrc": "L536x534S35610482x483S10601513x506S21600525x501S30a30488x489 L518x589S10609492x553S10621481x569S21100494x540S2df20473x525S30a00482x483 S38700463x496 R526x572S10e50511x542S26500510x524S10e58475x542S26510477x524S30a00482x483 R518x610S14402482x556S1440a475x532S22b04497x580S30a00482x483 S38700463x496 M514x533S19a20486x468S27106495x493 M531x516S15a37501x485S1f550507x492S20e00487x496S26a02470x489 M521x508S1f748479x493S1f740501x493",
-       "tog-showtoolbar": "M521x531S10012491x516S15a18479x503S26620486x469 M521x532S10609498x496S10621487x512S21100500x483S2df20479x468 M518x521S15a18482x494S1c501493x480S20600496x506 M512x531S1ec27488x470S22b04491x501",
        "tog-editondblclick": "M516x523S1c520485x495S26a00489x478 M521x532S10609498x496S10621487x512S21100500x483S2df20479x468 M531x516S15a37501x485S1f550507x492S20e00487x496S26a02470x489",
        "tog-editsectiononrightclick": "M531x528S15a40511x472S15a48478x472S2d200505x505S2d211470x505 M524x525S15a3a477x493S15a41478x476S2d60a501x505S21100506x488 M521x532S10609498x496S10621487x512S21100500x483S2df20479x468 M521x508S1f748479x493S1f740501x493 M512x518S12420489x488S22104500x482 M524x525S15a3a477x493S15a41478x476S2d60a501x505S21100506x488 M525x528S11010508x501S11018476x501S2df1e475x473S2df06505x473",
        "tog-watchcreations": "M529x562S15a37499x531S1f550505x538S20e00485x542S26a02468x535S30a00482x483 M536x561S10043506x528S20500495x550S30a00482x483 M531x566S20302492x532S2030a488x549S21100508x551S26900515x529S26910467x548S30a00482x483 S38700463x496 M520x576S14c19480x549S15a01497x550S20710483x530S30a00482x483 M536x561S10043506x528S20500495x550S30a00482x483 M539x579S10e27506x534S10e09480x534S22a07495x565S22a17469x564S21b00531x528S21b00504x528S30a00482x483 S38700463x496 M527x524S18548473x482S18540497x486S2880f507x504S22104500x476 M514x514S15a01491x487S20500487x503 M526x524S10e50511x494S26500510x476S10e58475x494S26510477x476 M519x539S14402488x485S1440a481x461S22b04503x509",
index 660ea80..bd1ba3a 100644 (file)
@@ -26,7 +26,6 @@
        "tog-extendwatchlist": "Espander la llista de siguimientu p'amosar tolos cambeos, non solo los más recientes",
        "tog-usenewrc": "Agrupar los cambeos por páxina nos cambeos recientes y na llista de siguimientu",
        "tog-numberheadings": "Autonumberar los encabezaos",
-       "tog-showtoolbar": "Amosar la barra de ferramientes d'edición",
        "tog-editondblclick": "Editar páxines con doble clic",
        "tog-editsectiononrightclick": "Activar la edición de seiciones calcando col botón drechu nos títulos de seición",
        "tog-watchcreations": "Amestar les páxines que cree y los ficheros que xuba a la mio llista de siguimientu",
index f12e3ce..4a131e8 100644 (file)
@@ -19,7 +19,6 @@
        "tog-extendwatchlist": "Ekoci kaskina kata nokok nohwe nosinesinihan ka kweskisinihikateki ka masinateki aka tepirak nohwe kata nokok aka weckat ka ki otci otamirotakaniwiki.",
        "tog-usenewrc": "Tatwa paskickwemakan mamowicta ka ki meckotcitakaniwoki  aka weckat kaki otci kweskisinihikateki acit nta nosinesinihikanik.",
        "tog-numberheadings": " Nicike kata masinihikepirik akitasowina  e icinikateki tipanisinihikanica",
-       "tog-showtoolbar": "Motena ka maskotikw kata nokoki irapitcitcikana masinihikakan e nisawitakaniwok",
        "tog-editondblclick": "Nicowaw mamakona kata kweskisinahaman paskickwemakana",
        "tog-watchcreations": "Ita acotcita nosinesinihikanik paskickwemikana ocki ka ocitaian acit nohwe ka natcipitaman natisinihikaniwoca.",
        "tog-watchdefault": "Acotcicta paskickemikana nosinesinihikanik acit natisinihikaniwoca ka ki kweskisinahaman",
index f51958c..f6de868 100644 (file)
@@ -18,7 +18,6 @@
        "tog-extendwatchlist": "Divatcera va suzdasiki ta nedira va kot rorewan betaks",
        "tog-usenewrc": "Noeltaf betakseem tulogijayan (kucilas va Javascript)",
        "tog-numberheadings": "Mivaskafa vergumveltotukara",
-       "tog-showtoolbar": "Nedira va tidexekak ke betararude",
        "tog-editondblclick": "Ta bubetara tolon vulegal (JavaScript tir adraf)",
        "tog-editsectiononrightclick": "Betara va gabot talton vulegason<br /> va gabotvergumvelt",
        "tog-watchcreations": "Kosuzdasikira va jinon betayan bueem",
index dde8033..8b995ff 100644 (file)
@@ -16,7 +16,6 @@
        "tog-extendwatchlist": "खाली हालिए कय नाहीं, बल्कि कुल बदलाव कय देखावे कय लिए ध्यानसूची कय विस्तारित करा जाय",
        "tog-usenewrc": "नँवा बदलाव में अउर ध्यानसूची बदलाव कय पन्ना अनुसार समूह में बाँटा जाय",
        "tog-numberheadings": "शीर्षक स्व-क्रमांकित करा जाय",
-       "tog-showtoolbar": "सम्पादन औज़ारपट्टी देखावो",
        "tog-editondblclick": "दुई क्लिक से पन्ना संपादित करा जाय",
        "tog-editsectiononrightclick": "अनुभाग शीर्षक पे दायाँ क्लिक कई कय अनुभाग सम्पादित कीन जाय",
        "tog-watchcreations": "हमार बनावा पन्ना अव हमार अपलोड करल फाइल कय हमरे ध्यानसूची में जोडो",
index 65c9f89..1002158 100644 (file)
@@ -42,7 +42,6 @@
        "tog-extendwatchlist": "Yalnız son dəyişiklikləri yox, bütün dəyişiklikləri göstərmək üçün izləmə siyahısını genişlət",
        "tog-usenewrc": "Son dəyişikliklərdəki və izləmə siyahısındakı dəyişiklikləri qruplaşdır",
        "tog-numberheadings": "Başlıqları avtomatik nömrələ",
-       "tog-showtoolbar": "Redaktə zamanı üstdəki alətlər qutusunu göstər",
        "tog-editondblclick": "Səhifələri iki kliklə redaktə et",
        "tog-editsectiononrightclick": "Bölmə başlığı üzərində siçanın sağ düyməsini klikləməklə bölmələri redaktə et",
        "tog-watchcreations": "Yaratdığım səhifələri və yüklədiyim faylları izlədiyim səhifələrə əlavə et",
index 2ceaf98..d297eee 100644 (file)
@@ -34,7 +34,6 @@
        "tog-extendwatchlist": "ایزله‌دیک‌لری تکجه یئنی‌لر اۆچون دئییل، بۆتون دییشیک‌لیک‌لری گؤسترمک اۆچون گئنیشلندیر.",
        "tog-usenewrc": "دَییشیک‌لیک‌لری سوْن دَییشیک‌لیک‌لر صفحه‌سینده ایزله‌دیک‌لر صفحه‌سینده قروپ‌لا (جاوااسکریپت گرک‌دیر)",
        "tog-numberheadings": "باشلیق‌لاری اوْتوماتیک نۆمره‌له",
-       "tog-showtoolbar": "دَییشدیرمه آراج-چۇبوغونو گؤستر",
        "tog-editondblclick": "صفحه‌‌لری ایکی کیلیک‌ده دَییشدیر",
        "tog-editsectiononrightclick": "بؤلوم‌لرین دَییشدیرمه‌سینی، باشلیق‌لارین اۆستونده ساغ‌کلیک ائتمک‌‌له ایجازه وئر",
        "tog-watchcreations": "ياراتدیغیم صفحه‌‌لری و يۆکله‌دیگیم فايل‌لاری، ایزله‌دیک‌لریمه آرتیر",
index 79b9215..42702c3 100644 (file)
@@ -29,7 +29,8 @@
                        "Ilmira",
                        "Irus",
                        "Khanmarat",
-                       "Fitoschido"
+                       "Fitoschido",
+                       "Amire80"
                ]
        },
        "tog-underline": "Һылтанмалар аҫтына һыҙыу:",
@@ -40,7 +41,6 @@
        "tog-extendwatchlist": "Барлыҡ үҙгәртеүҙәрҙе үҙ эсенә алған, киңәйтелгән күҙәтеү исемлеге",
        "tog-usenewrc": "Һуңғы төҙәтеүҙәр һәм күҙәтеү теҙмәһендәге биттәр буйлап төркөм-үҙгәрештәр",
        "tog-numberheadings": "Атамаларҙы автоматик номерлау",
-       "tog-showtoolbar": "Мөхәррирләү мәлендә ҡоралдар панелен күрһәтергә (JavaScript кәрәк)",
        "tog-editondblclick": "Биттәрҙе ике сиртеп мөхәррирлә",
        "tog-editsectiononrightclick": "Бүлектәрҙе мөхәррирләүҙе тоҡандырыу өсөн, бүлек атамаһын билдәләгәс, төрткөнөң уң яғына баҫырға кәрәк",
        "tog-watchcreations": "Мин төҙөгән биттәрҙе һәм күсергән файлдарҙы күҙәтеү исемлегенә өҫтәргә",
        "category_header": "«$1» категорияһындағы биттәр",
        "subcategories": "Эске категориялар",
        "category-media-header": "«$1» категорияһындағы файлдар",
-       "category-empty": "\"Был категория әлегә буш.\"",
+       "category-empty": "<em>Был категория әлегә буш.</em>",
        "hidden-categories": "{{PLURAL:$1|Йәшерен категория|Йәшерен категориялар}}",
        "hidden-category-category": "Йәшерен категориялар",
        "category-subcat-count": "{{PLURAL:$2|Был категорияла тик киләһе эске категория ғына бар.|Барлығы $2 категориянан, был категорияла киләһе {{PLURAL:$1|эске категория|$1 эске категория}} күрһәтелә.}}",
index f2a684d..c1bb56b 100644 (file)
@@ -31,7 +31,6 @@
        "tog-extendwatchlist": "Daweiterde Beówochtungslisten",
        "tog-usenewrc": "Endarunga vo \"Lezde Endarunga\" und vo \"Mei Beobochtd\" noch Seitn gruppian",
        "tog-numberheadings": "Ywerschriften autómaatisch nummerrirn",
-       "tog-showtoolbar": "Zoag de Edit Toolbar (JavaScript nedig)",
        "tog-editondblclick": "Seiten mid am Dóppedrucker beorweiden",
        "tog-editsectiononrightclick": "Oahzelne Obschnitt mid am Rechtsdrucker beorweiten",
        "tog-watchcreations": "Voh mir söwer eihgstöde Seiten autómaatisch beówochten",
index e0e4805..1b5ad82 100644 (file)
@@ -23,7 +23,6 @@
        "tog-extendwatchlist": "لیست چارگ مزن کن دان کل تغییرات پیش داریت نه که فقط نوکینءَ",
        "tog-usenewrc": "گروپء تغییران تاکء واسته مان نوکین تغییران ءُ چاروک لیست",
        "tog-numberheadings": "اتوماتیک شماره کتن عناوین",
-       "tog-showtoolbar": "اصلاح کنوکین میلگ ابزارء پیش بدار",
        "tog-editondblclick": "ویبتاکانء مان دو کلیک ٹگل بدئ",
        "tog-editsectiononrightclick": "فعال کتن زرتگین بهرء اصلاح کتن گون کلیک زرتگین عنوانانء سرا",
        "tog-watchcreations": "منی اڈ کتگین پیج و اپلود کتگین فایلانء چارگ لیستء توکا هوار کن",
index 0821ad5..cec0171 100644 (file)
@@ -21,7 +21,6 @@
        "tog-extendwatchlist": "Palakbanga an bantay-listahan (watchlist) na maipahiling an gabos na pinagbago, bako sana an pinakahurihang binago",
        "tog-usenewrc": "Pangrupong mga kaliwatan sa kada pahina kan mga dae pa sana nahaloy na mga kaliwatan asin bantay-listahan",
        "tog-numberheadings": "Tolos-bilang na mga pamayohán",
-       "tog-showtoolbar": "Ipahiling an barang-gamit nin pagliwat",
        "tog-editondblclick": "Liwaton an mga pahina sa pagdoble nin klik",
        "tog-editsectiononrightclick": "Paganaha an seksyon nin pagliliwat sa pag-klik kan mga titulo nin seksyon",
        "tog-watchcreations": "Idagdag an mga pahina na ako an nagmukna asin an mga sagunson na ako an nagkarga sa sakong bantay-listahan",
index db8f0f4..23fdb36 100644 (file)
@@ -28,7 +28,6 @@
        "tog-extendwatchlist": "Пашырыць сьпіс назіраньня, каб ён паказваў усе зьмены, а ня толькі апошнія",
        "tog-usenewrc": "Групаваць зьмены па старонках у апошніх зьменах і сьпісе назіраньня",
        "tog-numberheadings": "Аўтаматычная нумарацыя загалоўкаў",
-       "tog-showtoolbar": "Паказваць панэль інструмэнтаў рэдагаваньня",
        "tog-editondblclick": "Рэдагаваць старонкі па падвойным націсканьні",
        "tog-editsectiononrightclick": "Рэдагаваць сэкцыі па націсканьні правай кнопкі мышы на загалоўку",
        "tog-watchcreations": "Дадаваць у мой сьпіс назіраньня створаныя мной старонкі і загружаныя файлы",
        "subject-preview": "Папярэдні прагляд загалоўку:",
        "previewerrortext": "Адбылася памылка пры спробе папярэдняга прагляду вашых зьменаў.",
        "blockedtitle": "Удзельнік заблякаваны",
+       "blocked-email-user": "<strong>Вашаму рахунку было забаронена дасылаць лісты электроннай поштай. Вы ўсё яшчэ можаце рэдагаваць іншыя старонкі ў гэтай вікі.</strong> Вы можаце пабачыць падрабязнасьці блякаваньня на старонцы [[Special:MyContributions|ўнёску рахунку]].\n\nБлякавананьне зробленае $1.\n\nПададзеная прычына — <em>$2</em>.\n\n* Пачатак блякаваньня: $8\n* Сканчэньне блякаваньня: $6\n* Мэта блякаваньня: $7\n* Ідэнтыфікатар блякаваньня #$5",
+       "blockedtext-partial": "<strong>Вашаму рахунку ці IP-адрасу было забаронена зьмяняць гэтую старонку. Вы ўсё яшчэ можаце рэдагаваць іншыя старонкі ў гэтай вікі.</strong> Вы можаце паглядзець падрабязнасьці блякаваньня на старонцы [[Special:MyContributions|ўнёску рахунку]].\n\nБлякаваньне зробленае $1.\n\nПададзеная прычына — <em>$2</em>.\n\n* Пачатак блякаваньня: $8\n* Сканчэньне блякаваньня: $6\n* Мэта блякаваньня: $7\n* Ідэнтыфікатар блякаваньня #$5",
        "blockedtext": "<strong>Ваш рахунак удзельніка ці IP-адрас быў заблякаваны.</strong>\n\nБлякаваньне выканаў $1.\nПрычына гэтага: <em>$2</em>.\n\n* Пачатак блякаваньня: $8\n* Сканчэньне блякаваньня: $6\n* Быў заблякаваны: $7\n\nВы можаце скантактавацца з $1 ці адным зь іншых [[{{MediaWiki:Grouppage-sysop}}|адміністратараў]], каб абмеркаваць блякаваньне. Заўважце, што вы ня зможаце ўжыць магчымасьць «{{int:emailuser}}», пакуль не пазначыце сапраўдны адрас электроннай пошты ў вашых [[Special:Preferences|наладах]], і калі гэта вам не было забаронена.\nВаш IP-адрас — $3, ідэнтыфікатар блякаваньня — #$5.\nКалі ласка, улучайце ўсю вышэйпададзеную інфармацыю ва ўсе запыты, што вы будзеце рабіць.",
        "autoblockedtext": "Ваш IP-адрас быў аўтаматычна заблякаваны, таму што ён ужываўся іншым удзельнікам, які быў заблякаваны $1.\nПрычына гэтага:\n\n:<em>$2</em>\n\n* Блякаваньне пачалося: $8\n* Блякаваньне скончыцца: $6\n* Быў заблякаваны: $7\n\nВы можаце скантактавацца з $1 ці з адным зь іншых [[{{MediaWiki:Grouppage-sysop}}|адміністратараў]], каб абмеркаваць блякаваньне.\n\nЗаўважце, што вы ня зможаце ўжываць магчымасьць «{{int:emailuser}}», пакуль ня будзе пазначаны дзейны адрас электроннай пошты ў вашых [[Special:Preferences|наладах удзельніка]], і калі гэта вам не было забаронена.\n\nВаш цяперашні IP-адрас — $3, ідэнтыфікатар блякаваньня — #$5.\nКалі ласка, улучайце ўсю вышэйпададзеную інфармацыю ва ўсе запыты, што вы будзеце рабіць.",
        "systemblockedtext": "Вашае імя ўдзельніка ці IP-адрас былі аўтаматычна заблякаваныя MediaWiki.\nЗ наступнай прычыны:\n\n:<em>$2</em>\n\n* Пачатак блякаваньня: $8\n* Сканчэньне блякаваньня: $6\n* Мэта блякаваньня: $7\n\nВаш цяперашні IP-адрас — $3.\nКалі ласка, уключайце ўсе пададзеныя вышэй дэталі ва ўсе запыты, што вы робіце.",
        "invalid-chunk-offset": "Няслушнае зрушэньне фрагмэнту",
        "img-auth-accessdenied": "Доступ забаронены",
        "img-auth-nopathinfo": "Адсутнічаюць зьвесткі пра шлях.\nВаш сэрвэр мусіць быць наладжаны на пропуск зьменных REQUEST_URI і/ці PATH_INFO.\nКалі гэта так, паспрабуйце ўключыць $wgUsePathInfo.\nГлядзіце https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.",
-       "img-auth-notindir": "Ð\9dеабÑ\85однага Ñ\88лÑ\8fÑ\85Ñ\83 Ð½Ñ\8fма Ñ\9e Ð´Ñ\8bÑ\80Ñ\8dкÑ\82оÑ\80Ñ\8bÑ\96 Ð·Ð°Ð³Ñ\80Ñ\83зкÑ\96, Ð¿Ð°Ð·Ð½Ð°Ñ\87анай Ñ\83 канфігурацыі.",
+       "img-auth-notindir": "Ð\97апÑ\8bÑ\82анÑ\8b Ñ\88лÑ\8fÑ\85 Ð½Ðµ Ð½Ð°Ð»ÐµÐ¶Ñ\8bÑ\86Ñ\8c Ð´Ð° ÐºÐ°Ñ\82алÑ\91гÑ\83 Ð·Ð°Ð³Ñ\80Ñ\83зкÑ\96, Ð¿Ð°Ð·Ð½Ð°Ñ\87анага Ñ\9e канфігурацыі.",
        "img-auth-badtitle": "Немагчыма стварыць слушную назву з «$1».",
        "img-auth-nologinnWL": "Вы не ўвайшлі ў сыстэму, а «$1» не знаходзіцца ў белым сьпісе.",
        "img-auth-nofile": "Файл «$1» не існуе.",
-       "img-auth-isdir": "Ð\92Ñ\8b Ñ\81пÑ\80абÑ\83еÑ\86е Ð°Ñ\82Ñ\80Ñ\8bмаÑ\86Ñ\8c Ð´Ð¾Ñ\81Ñ\82Ñ\83п Ð´Ð° Ð´Ñ\8bÑ\80Ñ\8dкÑ\82оÑ\80Ñ\8bÑ\96 «$1».\nДазволены толькі доступ да файлаў.",
-       "img-auth-streaming": "Ð\9fеÑ\80адаÑ\87а Ñ\81Ñ\82Ñ\80Ñ\83менÑ\8f «$1».",
-       "img-auth-public": "Функцыя img_auth.php ужываецца для файла выхаду з прыватнай вікі.\nГэта вікі ўсталявана як публічная вікі.\nДля найлепшай бясьпекі img_auth.php выключана.",
+       "img-auth-isdir": "Ð\92Ñ\8b Ñ\81пÑ\80абÑ\83еÑ\86е Ð°Ñ\82Ñ\80Ñ\8bмаÑ\86Ñ\8c Ð´Ð¾Ñ\81Ñ\82Ñ\83п Ð´Ð° ÐºÐ°Ñ\82алÑ\91гÑ\83 «$1».\nДазволены толькі доступ да файлаў.",
+       "img-auth-streaming": "СÑ\82Ñ\80Ñ\83меннаÑ\8f Ð¿ÐµÑ\80адаÑ\87а «$1».",
+       "img-auth-public": "Функцыя img_auth.php ужываецца для вываду файлаў з прыватнай вікі.\nГэтая вікі ўсталяваная як публічная вікі.\nДля найлепшай бясьпекі img_auth.php адключаная.",
        "img-auth-noread": "Удзельнік ня мае доступу на чытаньне «$1».",
        "http-invalid-url": "Няслушны URL-адрас: $1",
        "http-invalid-scheme": "URL-адрасы схемы «$1» не падтрымліваюцца",
        "http-request-error": "HTTP-запыт не атрымаўся ў выніку невядомай памылкі.",
        "http-read-error": "Памылка чытаньня HTTP.",
        "http-timed-out": "Скончыўся час чаканьня HTTP-запыту.",
-       "http-curl-error": "Ð\9fамÑ\8bлка Ð²Ñ\8bбаÑ\80кÑ\96 URL-адрасу: $1",
+       "http-curl-error": "Ð\9fамÑ\8bлка Ð·Ð²Ð°Ñ\80оÑ\82Ñ\83 Ð´Ð° URL-адрасу: $1",
        "http-bad-status": "Адбылася памылка пад час выкананьня HTTP-запыту: $1 $2",
        "http-internal-error": "Унутраная памылка HTTP.",
        "upload-curl-error6": "Немагчыма дасягнуць URL-адрас",
        "prefixindex": "Усе старонкі з пачаткам назваў",
        "prefixindex-namespace": "Усе старонкі з прэфіксам (прастора назваў $1)",
        "prefixindex-submit": "Паказаць",
-       "prefixindex-strip": "Ð\9fÑ\80Ñ\8bбÑ\80аÑ\86Ñ\8c Ð¿Ñ\80Ñ\8dÑ\84Ñ\96кÑ\81 Ñ\83 Ñ\81Ñ\8cпÑ\96Ñ\81е",
+       "prefixindex-strip": "СÑ\85аваÑ\86Ñ\8c Ð¿Ñ\80Ñ\8dÑ\84Ñ\96кÑ\81 Ñ\83 Ð²Ñ\8bнÑ\96каÑ\85",
        "shortpages": "Кароткія старонкі",
        "longpages": "Доўгія старонкі",
        "deadendpages": "Тупіковыя старонкі",
        "ipb-disableusertalk": "Забараніць удзельніку рэдагаваньне ўласнай старонкі гутарак падчас блякаваньня",
        "ipb-change-block": "Зьмяніць парамэтры блякаваньня",
        "ipb-confirm": "Пацьвердзіць блякаваньне",
+       "ipb-sitewide": "На ўсім сайце",
+       "ipb-partial": "Частковая",
+       "ipb-type-label": "Тып",
+       "ipb-pages-label": "Старонкі",
        "badipaddress": "Некарэктны IP-адрас",
        "blockipsuccesssub": "Блякаваньне пасьпяховае",
        "blockipsuccesstext": "[[Special:Contributions/$1|$1]] {{GENDER:$1|быў заблякаваны|была заблякаваная}}.<br />\nГлядзіце [[Special:BlockList|сьпіс блякаваньняў]] дзеля іх перагляду.",
        "createaccountblock": "стварэньне рахунку заблякаванае",
        "emailblock": "дасылка лістоў забароненая",
        "blocklist-nousertalk": "ня можа рэдагаваць уласную старонку гутарак",
+       "blocklist-editing": "рэдагаваньне",
+       "blocklist-editing-sitewide": "рэдагаваньне (ва ўсім праекце)",
        "ipblocklist-empty": "Сьпіс блякаваньняў пусты.",
        "ipblocklist-no-results": "Паданы IP-адрас альбо імя ўдзельніка не заблякаваныя.",
        "blocklink": "заблякаваць",
        "tooltip-preferences-save": "Захаваць налады",
        "tooltip-summary": "Увядзіце кароткае апісаньне",
        "interlanguage-link-title": "$1 — $2",
+       "interlanguage-link-title-nonlang": "$1 — $2",
        "common.json": "/* Кожны разьмешчаны тут JSON будзе загружацца для ўсіх удзельнікаў пры загрузцы кожнай старонкі. */",
        "anonymous": "{{PLURAL:$1|1=Ананімны ўдзельнік ці ўдзельніца|Ананімныя ўдзельнікі і ўдзельніцы}} {{GRAMMAR:родны|{{SITENAME}}}}",
        "siteuser": "Удзельнік/удзельніца {{GRAMMAR:родны|{{SITENAME}}}} $1",
        "logentry-block-block": "$1 {{GENDER:$2|заблякаваў|заблякавала}} {{GENDER:$4|$3}} на тэрмін $5 $6",
        "logentry-block-unblock": "$1 {{GENDER:$2|разблякаваў|разблякавала}} {{GENDER:$4|$3}}",
        "logentry-block-reblock": "$1 {{GENDER:$2|зьмяніў|зьмяніла}} тэрмін блякаваньня {{GENDER:$4|$3}} на пэрыяд $5 $6",
+       "logentry-partialblock-block": "$1 {{GENDER:$2|заблякаваў|заблякавала}} {{GENDER:$4|$3}} ад рэдагаваньня {{PLURAL:$8||старонак}} $7 з часам сканчэньня $5 $6",
+       "logentry-partialblock-reblock": "$1 {{GENDER:$2|зьмяніў|зьмяніла}} налады блякаваньня для {{GENDER:$4|$3}} і забараніў праўкі на {{PLURAL:$8||старонках}} $7 на тэрмін $5 $6",
        "logentry-suppress-block": "$1 {{GENDER:$2|заблякаваў|заблякавала}} {{GENDER:$4|$3}} на тэрмін $5 $6",
        "logentry-suppress-reblock": "$1 {{GENDER:$2|зьмяніў|зьмяніла}} тэрмін блякаваньня {{GENDER:$4|$3}} на пэрыяд $5 $6",
        "logentry-import-upload": "$1 {{GENDER:$2|імпартаваў|імпартавала}} $3 праз загрузку файлу",
        "passwordpolicies-policy-passwordcannotmatchblacklist": "Пароль ня можа супадаць з паролямі з чорнага сьпісу",
        "passwordpolicies-policy-maximalpasswordlength": "Пароль мусіць быць даўжынёй менш за $1 {{PLURAL:$1|сымбаль|сымбалі|сымбаляў}}",
        "passwordpolicies-policy-passwordcannotbepopular": "Пароль ня можа {{PLURAL:$1|супадаць з самым папулярным паролем|быць зь сьпісу $1 папулярных пароляў}}",
-       "easydeflate-invaliddeflate": "Пададзены зьмест ня сьціснуты адпаведным чынам"
+       "easydeflate-invaliddeflate": "Пададзены зьмест ня сьціснуты адпаведным чынам",
+       "unprotected-js": "З прычынаў бясьпекі JavaScript ня можа быць загружаны зь неабароненых сайтаў. Калі ласка, стварайце javascript выключна ў прасторы назваў MediaWiki: ці як падстаронку ўдзельніка"
 }
index e6d2ee6..b4f3b48 100644 (file)
@@ -46,7 +46,6 @@
        "tog-extendwatchlist": "Паказваць усе змяненні, а не толькі апошнія",
        "tog-usenewrc": "Групаваць змены па старонках у апошніх зменах і спісе назірання",
        "tog-numberheadings": "Аўта-нумараваць падзагалоўкі",
-       "tog-showtoolbar": "Паказваць панэль інструментаў рэдактара",
        "tog-editondblclick": "Праўка старонак па двайным пстрыку",
        "tog-editsectiononrightclick": "Правіць падраздзелы па правым пстрыку на загалоўку",
        "tog-watchcreations": "Дадаваць створаныя мной старонкі і файлы ў мой спіс назірання",
        "watchlisttools-raw": "Паказаць нефарматаваны спіс назірання",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|размовы]])",
        "timezone-local": "Мясцовы",
-       "duplicate-defaultsort": "Увага: Ð¿Ñ\80адвÑ\8bзнаÑ\87анаÑ\8f ÐºÐ»Ð°Ð²Ñ\96Ñ\88а Ñ\9eпаÑ\80адкаваннÑ\8f \"$2\" Ð·Ð°Ð¼Ñ\8fнÑ\96ла Ñ\80анейÑ\88Ñ\83Ñ\8e Ñ\82акÑ\83Ñ\8e ÐºÐ»Ð°Ð²Ñ\96Ñ\88Ñ\83 \"$1\".",
+       "duplicate-defaultsort": "Увага: Ð\9aлÑ\8eÑ\87 Ñ\81аÑ\80Ñ\82аваннÑ\8f Ð¿Ð° Ð·Ð¼Ð¾Ñ\9eÑ\87аннÑ\96 Â«$2» Ð¿ÐµÑ\80авÑ\8bзнаÑ\87ае Ð¿Ð°Ð¿Ñ\8fÑ\80Ñ\8dднÑ\96 ÐºÐ»Ñ\8eÑ\87 Ñ\81аÑ\80Ñ\82аваннÑ\8f Ð¿Ð° Ð·Ð¼Ð¾Ñ\9eÑ\87аннÑ\96 Â«$1».",
        "duplicate-displaytitle": "<strong>Папярэджанне:</strong> Паказаная назва \"$2\" перасягае ранейшую назву \"$1\".",
        "invalid-indicator-name": "<strong>Памылка:</strong> Атрыбут <code>name</code> індыкатараў статусу старонкі не можа быць пустым.",
        "version": "Версія",
index 12ffcf9..cad8d1a 100644 (file)
@@ -54,7 +54,6 @@
        "tog-extendwatchlist": "Разширяване на списъка за наблюдение, така че да показва всички промени, не само последните",
        "tog-usenewrc": "Групиране по страници на промените на Последни промени и в списъка за наблюдение",
        "tog-numberheadings": "Автоматично номериране на заглавията",
-       "tog-showtoolbar": "Показване на лентата с инструменти за редактиране",
        "tog-editondblclick": "Редактиране на страниците чрез двойно щракване",
        "tog-editsectiononrightclick": "Възможност за редактиране на раздел при щракване с десния бутон върху заглавието му",
        "tog-watchcreations": "Добавяне на създадените от мен страници и качените от мен файлове към списъка ми за наблюдение",
        "botpasswords-label-appid": "Име на бота:",
        "botpasswords-label-create": "Създаване",
        "botpasswords-label-update": "Обновяване",
-       "botpasswords-label-cancel": "Отказване",
+       "botpasswords-label-cancel": "Отказ",
        "botpasswords-label-delete": "Изтриване",
        "botpasswords-label-resetpassword": "Възстановяване на парола",
        "botpasswords-label-grants": "Приложими разрешения:",
        "right-noratelimit": "Пренебрегване на всякакви ограничения",
        "right-import": "Внасяне на страници от други уикита",
        "right-importupload": "Внасяне на страници от качен файл",
-       "right-patrol": "Отбелязване на редакциите като проверени",
-       "right-autopatrol": "Автоматично отбелязване на редакции като проверени",
+       "right-patrol": "Отбелязване на редакциите като патрулирани",
+       "right-autopatrol": "Автоматично отбелязване на редакции като патрулирани",
        "right-patrolmarks": "Показване на отбелязаните като патрулирани последни промени",
        "right-unwatchedpages": "Преглеждане на списъка с ненаблюдаваните страници",
        "right-mergehistory": "Сливане на редакционни истории на страници",
        "action-rollback": "бърза отмяна на промените, направени от последния потребител, редактирал дадена страница",
        "action-import": "внасяне на страници от други уикита",
        "action-importupload": "внасяне на страници от качен файл",
-       "action-patrol": "отбелязване на чуждите редакции като проверени",
+       "action-patrol": "отбелязване на чуждите редакции като патрулирани",
        "action-autopatrol": "отбелязване на собствените редакции като автоматично патрулирани",
        "action-unwatchedpages": "преглеждане на списъка с ненаблюдавани страници",
        "action-mergehistory": "сливане на историята на тази страница",
        "rcshowhideanons": "$1 на анонимни потребители",
        "rcshowhideanons-show": "Показване",
        "rcshowhideanons-hide": "Скриване",
-       "rcshowhidepatr": "$1 на проверени редакции",
+       "rcshowhidepatr": "$1 на патрулирани редакции",
        "rcshowhidepatr-show": "Показване",
        "rcshowhidepatr-hide": "Скриване",
        "rcshowhidemine": "$1 на моите приноси",
        "ip_range_toolarge": "Забранено е блокиране на диапазони от IP адреси по-големи от /$1.",
        "ip_range_exceeded": "IP диапазонът превишава максималния диапазон. Позволен диапазон: /$1.",
        "proxyblocker": "Блокировач на проксита",
-       "proxyblockreason": "IP-адÑ\80еÑ\81Ñ\8aÑ\82 Ð²Ð¸ Ð±ÐµÑ\88е Ð±Ð»Ð¾ÐºÐ¸Ñ\80ан, Ñ\82Ñ\8aй ÐºÐ°Ñ\82о Ðµ Ð°Ð½Ð¾Ð½Ð¸Ð¼Ð½Ð¾ Ð´Ð¾Ñ\81Ñ\82Ñ\8aпен Ð¼ÐµÐ¶Ð´Ð¸Ð½ÐµÐ½ Ñ\81Ñ\8aÑ\80вÑ\8aÑ\80. Ð¡Ð²Ñ\8aÑ\80жеÑ\82е Ñ\81е Ñ\81 Ð´Ð¾Ñ\81Ñ\82авÑ\87ика Ð²Ð¸ Ð½Ð° Ð¸нтернет и го информирайте за този сериозен проблем в сигурността.",
+       "proxyblockreason": "IP-адÑ\80еÑ\81Ñ\8aÑ\82 Ð\92и Ð±ÐµÑ\88е Ð±Ð»Ð¾ÐºÐ¸Ñ\80ан, Ñ\82Ñ\8aй ÐºÐ°Ñ\82о Ðµ Ð°Ð½Ð¾Ð½Ð¸Ð¼Ð½Ð¾ Ð´Ð¾Ñ\81Ñ\82Ñ\8aпен Ð¼ÐµÐ¶Ð´Ð¸Ð½ÐµÐ½ Ñ\81Ñ\8aÑ\80вÑ\8aÑ\80. Ð¡Ð²Ñ\8aÑ\80жеÑ\82е Ñ\81е Ñ\81 Ð´Ð¾Ñ\81Ñ\82авÑ\87ика Ñ\81и Ð½Ð° Ð\98нтернет и го информирайте за този сериозен проблем в сигурността.",
        "sorbs": "DNSBL",
-       "sorbsreason": "IP-адÑ\80еÑ\81Ñ\8aÑ\82 Ð²и е записан като анонимно достъпен междинен сървър в DNSBL на {{SITENAME}}.",
-       "sorbs_create_account_reason": "IP-адÑ\80еÑ\81Ñ\8aÑ\82 Ð²Ð¸ Ðµ Ð·Ð°Ð¿Ð¸Ñ\81ан ÐºÐ°Ñ\82о Ð°Ð½Ð¾Ð½Ð¸Ð¼Ð½Ð¾ Ð´Ð¾Ñ\81Ñ\82Ñ\8aпен Ð¼ÐµÐ¶Ð´Ð¸Ð½ÐµÐ½ Ñ\81Ñ\8aÑ\80вÑ\8aÑ\80 Ð² DNSBL Ð½Ð° {{SITENAME}}. Не може да създадете сметка.",
+       "sorbsreason": "IP-адÑ\80еÑ\81Ñ\8aÑ\82 Ð\92и е записан като анонимно достъпен междинен сървър в DNSBL на {{SITENAME}}.",
+       "sorbs_create_account_reason": "IP-адÑ\80еÑ\81Ñ\8aÑ\82 Ð\92и Ðµ Ð·Ð°Ð¿Ð¸Ñ\81ан ÐºÐ°Ñ\82о Ð°Ð½Ð¾Ð½Ð¸Ð¼Ð½Ð¾ Ð´Ð¾Ñ\81Ñ\82Ñ\8aпен Ð¼ÐµÐ¶Ð´Ð¸Ð½ÐµÐ½ Ñ\81Ñ\8aÑ\80вÑ\8aÑ\80 Ð² DNSBL Ð½Ð° {{SITENAME}}.\nНе може да създадете сметка.",
        "cant-see-hidden-user": "Потребителят, който опитвате да блокирате, вече е блокиран и скрит. Тъй като нямате права да скривате потребители, не можете да видите или редактирате блокирането на потребителя.",
-       "ipbblocked": "Ð\9dе Ð¼Ð¾Ð¶ÐµÑ\82е Ð´Ð° Ð±Ð»Ð¾ÐºÐ¸Ñ\80аÑ\82е Ð¸ Ñ\80азблокиÑ\80аÑ\82е Ð´Ñ\80Ñ\83ги Ð¿Ð¾Ñ\82Ñ\80ебиÑ\82ели, Ð·Ð°Ñ\89оÑ\82о Ð²ие самият (самата) сте блокиран(а).",
+       "ipbblocked": "Ð\9dе Ð¼Ð¾Ð¶ÐµÑ\82е Ð´Ð° Ð±Ð»Ð¾ÐºÐ¸Ñ\80аÑ\82е Ð¸ Ñ\80азблокиÑ\80аÑ\82е Ð´Ñ\80Ñ\83ги Ð¿Ð¾Ñ\82Ñ\80ебиÑ\82ели, Ð·Ð°Ñ\89оÑ\82о Ð\92ие самият (самата) сте блокиран(а).",
        "ipbnounblockself": "Нямате право да се разблокирате сам(а).",
        "lockdb": "Заключване на базата от данни",
        "unlockdb": "Отключване на базата от данни",
-       "lockdbtext": "Заключването на базата от данни ще попречи на всички потребители да редактират страници, да сменят своите настройки, да редактират своите списъци за наблюдение и на всички други техни действия, изискващи промени в базата данни.\nПотвърдете, че искате точно това и ще отключите базата от данни, когато привършите с работата по подръжката.",
+       "lockdbtext": "Заключването на базата от данни ще попречи на всички потребители да редактират страници, да сменят своите настройки, да редактират своите списъци за наблюдение и на всички други техни действия, изискващи промени в базата данни.\nПотвърдете, че искате точно това и ще отключите базата от данни, когато привършите с работата по поддръжката.",
        "unlockdbtext": "Отключването на базата от данни ще възстанови способността на потребителите да редактират страници, да сменят своите настройки, да редактират своите списъци за наблюдение и изпълнението на всички други действия, изискващи промени в базата от данни.\nПотвърдете, че искате точно това.",
        "lockconfirm": "Да, наистина искам да заключа базата от данни.",
        "unlockconfirm": "Да, наистина искам да отключа базата от данни.",
        "movecategorypage-warning": "<strong>Внимание:</strong> На път сте да преместите категорийна страница. Моля, обърнете внимание, че ще бъде преместена само страницата на категорията. <em>Никоя</em> от страниците в старата категория <em>няма</em> да бъде прекатегоризирана.",
        "movenologintext": "Необходимо е да [[Special:UserLogin|влезете]], за да може да премествате страници.",
        "movenotallowed": "Нямате права за преместване на страници.",
-       "movenotallowedfile": "Ð\9dÑ\8fмаÑ\82е Ð¿Ñ\80ава Ð´Ð° Ð¿Ñ\80емеÑ\81Ñ\82ваÑ\82е файлове.",
-       "cant-move-user-page": "Ð\9dÑ\8fмаÑ\82е Ð½Ñ\83жниÑ\82е Ð¿Ñ\80ава Ð½а достъп, за да местите потребителски страници (можете да местите само подстраници).",
+       "movenotallowedfile": "Ð\9dÑ\8fмаÑ\82е Ð¿Ñ\80ава Ð·Ð° Ð¿Ñ\80емеÑ\81Ñ\82ване Ð½Ð° файлове.",
+       "cant-move-user-page": "Ð\9dÑ\8fмаÑ\82е Ð½Ñ\83жниÑ\82е Ð¿Ñ\80ава Ð·а достъп, за да местите потребителски страници (можете да местите само подстраници).",
        "cant-move-to-user-page": "Нямате нужните права на достъп, за да извършвате преместване на страници върху потребителски страници (можете да местите само върху подстраници от потребителското пространство).",
        "cant-move-category-page": "Нямате необходимите права за преместване на страници на категории.",
        "cant-move-to-category-page": "Нямате необходимите права за преместване на страница в страница на категория.",
        "cant-move-subpages": "Нямате права за преместване на подстраници.",
        "namespace-nosubpages": "Именно пространство „$1“ не позволява подстраници.",
        "newtitle": "Ново заглавие:",
-       "move-watch": "Наблюдаване на страницата",
+       "move-watch": "Наблюдаване на изходната и целевата страници",
        "movepagebtn": "Преместване",
        "pagemovedsub": "Преместването беше успешно",
        "movepage-moved": "<strong>Страницата „$1“ беше преместена под името „$2“</strong>",
        "pageinfo-category-files": "Брой файлове",
        "pageinfo-user-id": "Потребителски номер",
        "pageinfo-file-hash": "Хеш-стойност",
-       "markaspatrolleddiff": "Отбелязване като проверена редакция",
+       "markaspatrolleddiff": "Отбелязване като патрулирана редакция",
        "markaspatrolledtext": "Отбелязване на редакцията като проверена",
        "markaspatrolledtext-file": "Отбелязване на версията на файла като проверена",
        "markedaspatrolled": "Проверена редакция",
        "rcpatroldisabledtext": "Патрулирането на последните промени е деактивирано.",
        "markedaspatrollederror": "Не е възможно да се отбележи като проверена",
        "markedaspatrollederrortext": "Необходимо е да се посочи редакция, която да бъде отбелязана като проверена.",
-       "markedaspatrollederror-noautopatrol": "Не е разрешено да маркирате своите редакции като проверени.",
+       "markedaspatrollederror-noautopatrol": "Не е разрешено да маркирате своите редакции като патрулирани.",
        "markedaspatrollednotify": "Редакцията на $1 беше отбелязана като патрулирана.",
        "markedaspatrollederrornotify": "Неуспешно отбелязване на редакция като патрулирана.",
        "patrol-log-page": "Дневник на патрула",
-       "patrol-log-header": "Тази страница съдържа дневник на проверените версии.",
+       "patrol-log-header": "Тази страница съдържа дневник на патрулираните версии.",
        "confirm-markpatrolled-button": "Добре",
        "confirm-markpatrolled-top": "Маркиране на редакция $3 на $2 като патрулирана?",
        "deletedrevision": "Изтрита стара версия $1",
        "previousdiff": "← По-стара редакция",
        "nextdiff": "По-нова редакция →",
        "mediawarning": "<strong>Внимание:</strong> Възможно е файлът да съдържа злонамерен програмен код. Неговото изпълнение може да доведе до повреди в системата Ви.",
-       "imagemaxsize": "Ограничение на размера на картинките:<br /><em>(само за описателните страници)</em>",
+       "imagemaxsize": "Ограничение на размера на картинките за описателните страници:",
        "thumbsize": "Размер на миникартинките:",
        "widthheight": "$1 × $2",
        "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|страница|страници}}",
        "newimages-hidepatrolled": "Скриване на проверените качвания",
        "newimages-mediatype": "Файлов тип:",
        "noimages": "Няма нищо.",
+       "gallery-slideshow-toggle": "Превключване на миниатюрите",
        "ilsubmit": "Търсене",
        "bydate": "по дата",
        "sp-newimages-showfrom": "Показване на новите файлове, като се започне от $2, $1",
        "feedback-bugcheck": "Страхотно! Само проверете дали това не сред вече [$1 докладваните грешки].",
        "feedback-bugnew": "Проверих. Докладвай за нова грешка",
        "feedback-bugornote": "Ако сте готови подробно да опишете технически проблем, моля [$1 докладвайте го тук].\nВ противен случай, можете да използвате лесния формуляр по-долу. Коментарът ви ще бъде добавен към страницата „[$3 $2]“, наред с вашето потребителско име.",
-       "feedback-cancel": "Отказване",
+       "feedback-cancel": "Отказ",
        "feedback-close": "Готово",
        "feedback-dialog-title": "Изпращане на обратна връзка",
        "feedback-error1": "Грешка: Неразпознат резултат от API",
index 4d9537c..d8c1548 100644 (file)
@@ -20,7 +20,6 @@
        "tog-extendwatchlist": "پراخ کورتین واچلیستی لڑلیست په موچین تغیراتان،نه فقط آخرینان",
        "tog-usenewrc": "گروپ بندی تغیراتانئ بی اساسئ تاکدیمانئ اخیر ئین تغیران و واچلیستئ لڑ لیستا",
        "tog-numberheadings": "ئنوانانئ اتوماتیکین شماره گذاری",
-       "tog-showtoolbar": "نشان داتین ایڈیٹی نوارئ",
        "tog-editondblclick": "تاکدیمانی ایڈیٹ کورتین گو دو کلیک ئا",
        "tog-editsectiononrightclick": "پئال کورتین بخشانی ایڈیٹی گو راست کلیکا بی ئنوانی سرا",
        "tog-watchcreations": "تاکدیمان که من جوڑ ئه کنین یا فایلان که بُرز ( ڈ\tانلوڈ\t) ئه کنین بی نئ واچلیست ئا اضافه بیئنت",
index c03b9a9..8ca47ef 100644 (file)
@@ -18,7 +18,6 @@
        "tog-extendwatchlist": "खाली हाले के बदलाव ना बालुक, सगरी बदलाव के देखावे खातिर धियानसूची के बिस्तारित करीं",
        "tog-usenewrc": "तुरंत भइल बदलाव में आ धियानसूची में भइल बदलाव सभ के पन्ना अनुसार झुंड में बांटी",
        "tog-numberheadings": "हेडिंग के ऑटो-नंबरिंग",
-       "tog-showtoolbar": "संपादन औजारपट्टी के देखावल जाव",
        "tog-editondblclick": "दुइ क्लिक पर पन्ना सभ के संपादन करीं",
        "tog-editsectiononrightclick": "हेडिंग पर दायाँ क्लिक कइ के खंड के संपादन संभव करीं",
        "tog-watchcreations": "हमार बनावल पन्ना आ हमार अपलोड कइल फाइल सभ के हमरी धियानसूची में जोड़ल जाव",
index d677a0b..81ce363 100644 (file)
@@ -18,7 +18,6 @@
        "tog-extendwatchlist": "Singkaiakan daptar itihan hagan manampaiakan samunyaan paubahan, kada nang hanyar haja.",
        "tog-usenewrc": "Purukakan panampaian paubahan pahanyarnya tingkat tinggi (parlu ada JavaScript)",
        "tog-numberheadings": "Bari numur judul utumatis",
-       "tog-showtoolbar": "Tampaiakan bilah-pakakas babak (parlu ada JavaScript)",
        "tog-editondblclick": "Babak tutungkaran wan klik ganda (parlu ada JavaScript)",
        "tog-editsectiononrightclick": "Kawa'akan mambabak sub-hagian lawan mang-klik kanan pada judul hagian (parlu ada JavaScript)",
        "tog-watchcreations": "Tambahi tungkaran nang ulun ulah ka daptar itihan",
index 66849a1..3ee7556 100644 (file)
@@ -49,7 +49,6 @@
        "tog-extendwatchlist": "শুধু সাম্প্রতিক পরিবর্তনই নয়, সকল পরিবর্তন দেখতে নজর তালিকা সম্প্রসারণ করা হোক",
        "tog-usenewrc": "সাম্প্রতিক পরিবর্তনসমূহ এবং নজরতালিকা পাতায় পরিবর্তনগুলি একত্রে প্রদর্শন করা হোক",
        "tog-numberheadings": "শিরোনামগুলিকে স্বয়ংক্রিয়ভাবে ক্রমিক নম্বর দেয়া হোক",
-       "tog-showtoolbar": "সম্পাদনা সরঞ্জামদণ্ড দেখানো হোক",
        "tog-editondblclick": "দুইবার ক্লিক করে পাতা সম্পাদনা করা হোক",
        "tog-editsectiononrightclick": "পরিচ্ছেদের শিরোনামে ডান ক্লিক করার মাধ্যমে পরিচ্ছেদ সম্পাদনা করার সুবিধাটি সক্রিয় করা হোক",
        "tog-watchcreations": "আমার তৈরি করা পাতাগুলি এবং আপলোড করা ফাইলগুলি আমার নজরতালিকায় যোগ করা হোক",
        "badarticleerror": "এই পাতায় এই কাজটি করা সম্ভব নয়।",
        "cannotdelete": "\"$1\" পাতা বা ফাইলটি মোছা সম্ভব হয়নি।\nসম্ভবত অন্য কেউ আগেই এটিকে মুছে ফেলেছেন।",
        "cannotdelete-title": "\"$1\" পাতাটি মুছে ফেলা যাচ্ছে না",
+       "delete-scheduled": "\"$1\" পাতাটি মুছে ফেলার জন্য তালিকাভুক্ত হয়েছে।\nদয়া করে ধৈর্য ধরুন।",
        "delete-hook-aborted": "হুকের কারণে পাতা মোছার কাজটি পরিত্যক্ত হয়েছে।\nকোন ব্যাখ্যা দেয়া হয়নি।",
        "no-null-revision": "\"$1\" পাতার জন্য ফাঁকা সংস্করণ তৈরী করা যায়নি",
        "badtitle": "ভুল শিরোনাম",
        "stub-threshold-disabled": "নিস্ক্রিয়",
        "recentchangesdays": "সাম্প্রতিক পরিবর্তন পাতায় প্রদর্শিত দিনের সংখ্যা:",
        "recentchangesdays-max": "সর্বোচ্চ $1 {{PLURAL:$1|দিনের}}",
-       "recentchangescount": "সামà§\8dপà§\8dরতিà¦\95 à¦ªà¦°à¦¿à¦¬à¦°à§\8dতনà§\87 à¦ªà§\8dরদরà§\8dশিত à¦¸à¦®à§\8dপাদনার à¦ªà§\82রà§\8dবনিরà§\8dধারিত সংখ্যা:",
+       "recentchangescount": "পà§\82রà§\8dবনিরà§\8dধারিতভাবà§\87, à¦¸à¦¾à¦®à§\8dপà§\8dরতিà¦\95 à¦ªà¦°à¦¿à¦¬à¦°à§\8dতনà§\87, à¦ªà¦¾à¦¤à¦¾à¦° à¦\87তিহাসà§\87, à¦\93 à¦²à¦\97à§\87 à¦ªà§\8dরদরà§\8dশনà§\87র à¦\9cনà§\8dয à¦¸à¦®à§\8dপাদনার সংখ্যা:",
        "prefs-help-recentchangescount": "সর্বোচ্চ সংখ্যা: ১০০০",
        "prefs-help-watchlist-token2": "এটি আপনার নজরতালিকার ওয়েব ফিডের গোপন চাবি।\nকেউ যদি এটি জানতে পারেন, তাহলে তিনি আপনার নজরতালিকা পড়তে সক্ষম হবেন, তাই এটি প্রকাশ করবেন না।\n[[Special:ResetTokens|আপনার এটি পুনঃনির্ধারণ করার প্রয়োজন হলে এখানে ক্লিক করুন]]।",
        "prefs-help-tokenmanagement": "আপনি আপনার অ্যাকাউন্টের জন্য গোপন চাবি দেখতে এবং পুনরায় নির্ধারন করতে পারবেন যা দিয়ে আপনার নজরতালিকার ওয়েব ফিডে প্রবেশাধিকার পাওয়া যাবে। যে কেউ যিনি এই চাবিটি জানেন তিনি আপনার নজর তালিকাটি পড়তে সক্ষম হবেন, তাই এটি অন্যদের সাথে ভাগ করবেন না।",
        "rcfilters-activefilters": "সক্রিয় ছাঁকনিসমূহ",
        "rcfilters-activefilters-hide": "লুকান",
        "rcfilters-activefilters-show": "দেখান",
+       "rcfilters-activefilters-hide-tooltip": "সক্রিয় ছাঁকনির এলাকা লুকান",
+       "rcfilters-activefilters-show-tooltip": "সক্রিয় ছাঁকনির এলাকা দেখান",
        "rcfilters-advancedfilters": "উন্নত ছাঁকনি",
        "rcfilters-limit-title": "যেসব ফলাফল দেখাবে",
        "rcfilters-limit-and-date-label": "$1টি {{PLURAL:$1|পরিবর্তন}}, $2",
        "imagelinks": "ফাইলের ব্যবহার",
        "linkstoimage": "নিম্নলিখিত {{PLURAL:$1|পাতাটি|$1টি পাতা}} এই ফাইল ব্যবহার করে:",
        "linkstoimage-more": "এই ফাইলের সাথে $1টির বেশি {{PLURAL:$1|পাতার লিংক}} রয়েছে।\nনিচের তালিকায় ফাইলের সাথে যুক্ত {{PLURAL:$1|প্রথম পাতাটির লিংক|প্রথম $1টি পাতার লিংক}} দেখানো হচ্চে।\nএছাড়া একটি [[Special:WhatLinksHere/$2|পূর্ণাঙ্গ তালিকাও]] রয়েছে।",
-       "nolinkstoimage": "এই ফাইলে সংযোগ করে এমন কোন পাতা নেই।",
+       "nolinkstoimage": "এই ফাইল ব্যবহার করে এমন কোন পাতা নেই।",
        "morelinkstoimage": "এই ফাইলের [[Special:WhatLinksHere/$1|আরও লিঙ্ক]] দেখাও।",
        "linkstoimage-redirect": "$1 (ফাইল পুনঃর্নিদেশ) $2",
        "duplicatesoffile": "নিচের {{PLURAL:$1|ফাইলটি|$1 ফাইলগুলো}} এই ফাইলের প্রতিলিপি ([[Special:FileDuplicateSearch/$2|বিস্তারিত দেখুন]]):",
        "prefixindex": "উপসর্গ সহ সমস্ত পাতা",
        "prefixindex-namespace": "উপসর্গ সহ সকল পাতা ($1 নামস্থান)",
        "prefixindex-submit": "দেখাও",
-       "prefixindex-strip": "তালিà¦\95া à¦¥à§\87à¦\95ে উপসর্গ লুকান",
+       "prefixindex-strip": "ফলাফলে উপসর্গ লুকান",
        "shortpages": "সংক্ষিপ্ত পাতাসমূহ",
        "longpages": "দীর্ঘ পাতাসমূহ",
        "deadendpages": "যেসব পাতা থেকে কোনো সংযোগ নেই",
        "pageinfo-category-files": "ফাইলের সংখ্যা",
        "pageinfo-user-id": "ব্যবহারকারী আইডি",
        "pageinfo-file-hash": "হ্যাশ মান",
+       "pageinfo-view-protect-log": "এই পাতার জন্য সুরক্ষা লগ দেখুন।",
        "markaspatrolleddiff": "পরীক্ষিত হিসেবে চিহ্নিত করুন",
        "markaspatrolledtext": "এই পাতাটি পরীক্ষিত হিসেবে চিহ্নিত করুন",
        "markaspatrolledtext-file": "এই ফাইলের সংস্করণ পরীক্ষিত হিসেবে চিহ্নিত করুন",
        "previousdiff": "← পুরনো সম্পাদনা",
        "nextdiff": "নতুনতর সম্পাদনা →",
        "mediawarning": "'''সতর্কীকরণ''': এই ফাইলের ধরনে ক্ষতিকর কোড থাকতে পারে। এটি চালালে আপনার সিস্টেমে ক্ষতি হতে পারে।",
-       "imagemaxsize": "à¦\9bবির à¦\86à¦\95ারà§\87র à¦¸à¦°à§\8dবà§\8bà¦\9aà§\8dà¦\9a à¦¸à§\80মা:<br />''(à¦\9bবির à¦¬à¦¿à¦¬à¦°à¦£ à¦ªà¦¾à¦¤à¦¾à¦° à¦\9cনà§\8dয)''",
+       "imagemaxsize": "à¦\9bবির à¦¬à¦¿à¦¬à¦°à¦£à§\87র à¦ªà¦¾à¦¤à¦¾à¦¯à¦¼ à¦\9bবির à¦\86à¦\95ারà§\87র à¦¸à¦°à§\8dবà§\8bà¦\9aà§\8dà¦\9a à¦¸à§\80মা:",
        "thumbsize": "থাম্বনেইল আকার:",
        "widthheightpage": "$1 × $2, $3টি {{PLURAL:$1|পাতা}}",
        "file-info": "ফাইলের আকার: $1, MIME ধরন: $2",
        "confirm-unwatch-top": "এই পাতাটি আপনার নজরতালিকা থেকে সরিয়ে ফেলতে ইচ্ছুক?",
        "confirm-rollback-button": "ঠিক আছে",
        "confirm-rollback-top": "এই পাতায় করা সম্পাদনাগুলি প্রত্যাবর্তন করবেন?",
+       "confirm-mcrrestore-title": "সংশোধনটি পুনরুদ্ধার করুন",
        "mcrundofailed": "পূর্বাবস্থায় ফেরা ব্যর্থ হয়েছে",
        "quotation-marks": "\"$1\"",
        "imgmultipageprev": "← পূর্ববর্তী পাতা",
        "redirect-file": "ফাইলের নাম",
        "redirect-logid": "লগ আইডি",
        "redirect-not-exists": "মান পাওয়া যায়নি",
+       "redirect-not-numeric": "মান সাংখ্যিক নয়",
        "fileduplicatesearch": "সদৃশ ফাইলের জন্য অনুসন্ধান",
        "fileduplicatesearch-summary": "হ্যাশ ভ্যালুর ওর ভিত্তি করে একই ছবিগুলো খুঁজুন।",
        "fileduplicatesearch-filename": "ফাইলনাম:",
        "unlinkaccounts-success": "অ্যাকাউন্টের সংযোগ বিচ্ছিন্ন করা হয়েছে।",
        "authenticationdatachange-ignored": "প্রমাণীকরণ উপাত্তের পরিবর্তন পরিচালনা করা হয়নি। হয়তো কোন প্রদানকারী কনফিগার করা হয়নি?",
        "userjsispublic": "অনুগ্রহ করে লক্ষ্য করুন: জাভাস্ক্রিপ্টের উপপাতাগুলিতে গোপনীয় তথ্য থাকা উচিত নয় যেহেতু অন্যান্য ব্যবহারকারীও এগুলি দেখতে পান।",
+       "userjsonispublic": "অনুগ্রহ করে লক্ষ্য করুন: JSON উপপাতাগুলিতে গোপনীয় তথ্য থাকা উচিত নয় যেহেতু অন্যান্য ব্যবহারকারীও এগুলি দেখতে পান।",
        "usercssispublic": "অনুগ্রহ করে লক্ষ্য করুন: সিএসএসের উপপাতাগুলিতে গোপনীয় তথ্য থাকা উচিত নয় যেহেতু অন্যান্য ব্যবহারকারীও এগুলি দেখতে পান।",
        "restrictionsfield-badip": "আইপি ঠিকানা অথবা পরিসীমা অবৈধ: $1",
        "restrictionsfield-label": "অনুমোদিত আইপি পরিসীমা:",
        "passwordpolicies-policy-minimalpasswordlength": "পাসওয়ার্ড অবশ্যই {{PLURAL:$1|১ অক্ষরের|$1 অক্ষরের}} হতে হবে",
        "passwordpolicies-policy-passwordcannotmatchusername": "পাসওয়ার্ড ব্যবহারকারী নামের মত একই হতে পারে না",
        "passwordpolicies-policy-passwordcannotmatchblacklist": "পাসওয়ার্ড বিশেষত কালো তালিকাভুক্ত পাসওয়ার্ডের সাথে মিলতে পারবে না",
-       "passwordpolicies-policy-maximalpasswordlength": "পাসওয়ার্ড $1 {{PLURAL:$1|অক্ষরের}} চেয়ে কম দীর্ঘ হতে হবে"
+       "passwordpolicies-policy-maximalpasswordlength": "পাসওয়ার্ড $1 {{PLURAL:$1|অক্ষরের}} চেয়ে কম দীর্ঘ হতে হবে",
+       "unprotected-js": "নিরাপত্তার কারণে জাভাস্ক্রিপ্ট অনিরাপদ পৃষ্ঠা থেকে লোড করা যাবে না। শুধুমাত্র মিডিয়াউইকি: নামস্থান বা ব্যবহারকারী উপপাতায় জাভাস্ক্রিপ্ট তৈরি করুন"
 }
index 46cc757..88c0642 100644 (file)
@@ -19,7 +19,6 @@
        "tog-extendwatchlist": "ལྟ་ཞིབ་ཐོ་རྒྱ་སྐྱེད་ཏེ་ཉེ་ལམ་ཙམ་མིན་པར་བཟོ་བཅོས་ཡོངས་རྫོགས་སྟོན་ཅིག",
        "tog-usenewrc": "ཉེ་བའི་བཟོ་བཅོས་དང་དགས་འདེམས་ཤོག་ངོས་ཀྱི་བཅོས་འགྱུར་རྐྱེན་པས་སྡེ་ཚན་བཅོས་འགྱུར་ཕྱིན་འདུག།",
        "tog-numberheadings": "རང་སྒྲིག་ཨང་རྟགས་འགོ་བརྗོད།",
-       "tog-showtoolbar": "རྩོམ་སྒྲིག་ལག་ཆ་སྟོན། (JavaScript ཡི་བརྡ་ཆད་དགོས།)",
        "tog-editondblclick": "ཤོག་ངོས་རྩོམ་སྒྲིག་བྱེད་པར་ལན་གཉིས་རྡེབ།",
        "tog-editsectiononrightclick": "དུམ་འཚམས་ཀྱི་འགོ་འརྗོད་ལ་འཐེབ་གཞོང་གཡས་པ་གནོན་ཏེ་དུམ་འཚམས་བཟོ་འཅོས་བྱེད་རོགས།",
        "tog-watchcreations": "ངས་གསར་བཟོ་བྱས་པའི་ཤོག་ངོས་དང་ཡིག་ཆ་ཡར་འཇུག་བྱས་པ་རྣམས་ངའི་དགའ་འདེམས་ཐོ་ལ་སྣོན་རོགས།",
index da44540..6297e78 100644 (file)
@@ -16,7 +16,6 @@
        "tog-extendwatchlist": "হুদ্দা হাদি এহান পতাসি অতা নাবে, হাব্বি পতানি দেহাদেনার কা আহিরফঙে থসি তালিকাহান সালকরানি অক।",
        "tog-usenewrc": "হাব্বিত্ত ঙালসে পতানিহানি ব্যবহার কর (জাভাস্ক্রিপ্ট)",
        "tog-numberheadings": "নিজেলত্ত পাজালার চিঙনাঙ",
-       "tog-showtoolbar": "পতানির আতিয়ার দেহাদে (জাভাস্ক্রিপ্ট)",
        "tog-editondblclick": "দ্বিমাউ যাতিয়া পতাহান পতিক (জাভাস্ক্রিপ্ট)",
        "tog-editsectiononrightclick": "পরিচ্ছদ পতানির য়্যাথাঙহান বাতেদের গোথামগ <br /> পরিচ্ছদর চিঙনাঙর গজে যাতিলে দে (জাভাস্ক্রিপ্ট)",
        "tog-watchcreations": "যে পতাহানি মি ইকরিসু অতা মর তালাবির তালিকাত থ",
index 8e9e882..3a8c295 100644 (file)
@@ -17,7 +17,6 @@
        "tog-extendwatchlist": "گپ کردن نوم گه آ مو سی دیئن همه آلشتا نه فقط هونو که بیشتر ز همه انجوم ابون.",
        "tog-usenewrc": "جٱرغاٛ کاری آلشتا ڤا آلشتکاری بٱلگاٛیلسۊن و سئیل بٱرگسۊن",
        "tog-numberheadings": "شوماراٛ ڤٱندن خودٱنجوم سی سربٱلگاٛیل",
-       "tog-showtoolbar": "دیاری کردن تۊلبار ڤیرایشت",
        "tog-editondblclick": "ڤیرایشت بٱلگاٛیل ڤا دو کئرٱت پۊرنیڌن",
        "tog-editsectiononrightclick": "ڤیرایشت ڤابیڌن ڤا راست پۊرنیڌن ری بٱرجا داسۊن هر جاگٱ",
        "tog-watchcreations": "اٛزاف کردن او بٱلگاٛیلی کاٛ خوم راست کردوماٛ و او جانیایلی کاٛ خوم لاهامسۊناٛ مئن سئیل بٱرگ خوم",
index 48526f5..8bb11c2 100644 (file)
@@ -31,7 +31,6 @@
        "tog-extendwatchlist": "Astenn ar roll evezhiañ a-benn diskouez an holl gemmoù ha neket ar re ziwezhañ hepken.",
        "tog-usenewrc": "Diskouez ar c'hemmoù nevez en ur feson kempennoc'h",
        "tog-numberheadings": "Niverenniñ emgefre an titloù",
-       "tog-showtoolbar": "Diskouez ar varrenn ostilhoù aozañ",
        "tog-editondblclick": "Daouglikañ evit kemmañ pajennoù",
        "tog-editsectiononrightclick": "Kemmañ ur rann dre glikañ a-zehou war titl ar rann",
        "tog-watchcreations": "Ouzhpennañ ar pajennoù krouet ganin da'm roll evezhiañ",
index 45d5fe5..f33972c 100644 (file)
@@ -40,7 +40,6 @@
        "tog-extendwatchlist": "Proširi spisak praćenja za pogled svih izmjena, ne samo nedavnih",
        "tog-usenewrc": "Grupiraj izmjene po stranicama sa nedavnih izmjena i praćenih članaka",
        "tog-numberheadings": "Automatski numeriši podnaslove",
-       "tog-showtoolbar": "Prikaži traku s alatkama za uređivanje",
        "tog-editondblclick": "Uredi stranice dvostrukim klikom",
        "tog-editsectiononrightclick": "Uključi uređivanje odjeljka sa pritiskom na desno dugme miša u naslovu odjeljka",
        "tog-watchcreations": "Dodaj stranice i datoteke koje napravim na moj spisak praćenih članaka",
        "login": "Prijava",
        "login-security": "Potvrdite svoj identitet",
        "nav-login-createaccount": "Prijavi se / Registruj se",
-       "logout": "Odjavi me",
+       "logout": "Odjava",
        "userlogout": "Odjava",
        "notloggedin": "Niste prijavljeni",
        "userlogin-noaccount": "Nemate korisnički račun?",
        "databaselocked": "Baza podataka već je zaključana.",
        "databasenotlocked": "Baza podataka nije zaključana.",
        "lockedbyandtime": "(od $1 dana $2 u $3)",
-       "move-page": "Premjesti $1",
+       "move-page": "Premeštanje $1",
        "move-page-legend": "Premjesti stranicu",
        "movepagetext": "Korištenjem ovog formulara možete preimenovati stranicu, premještajući cijelu historiju na novo ime.\nČlanak pod starim imenom postat će stranica koja preusmjerava na članak pod novim imenom. \nMožete automatski izmijeniti preusmjerenje do izvornog naslova.\nAko se ne odlučite na to, provjerite [[Special:DoubleRedirects|dvostruka]] ili [[Special:BrokenRedirects|neispravna preusmjeravanja]].\nDužni ste provjeriti da svi linkovi i dalje nastave voditi na prave stranice.\n\nImajte na umu da članak <strong>neće</strong> biti premješten ako već postoji članak pod imenom na koje ga namjeravate preusmjeriti osim u slučaju stranice za preusmjeravanje koja nema nikakvih starih izmjena.\nTo znači da možete vratiti stranicu na prethodno mjesto ako pogriješite, ali ne možete zamijeniti postojeću stranicu.\n\n<strong>Napomena:</strong>\nOvo može biti drastična i neočekivana promjena kad su u pitanju popularne stranice.\nMolimo da dobro razmislite prije no što premjestite stranicu.",
        "movepagetext-noredirectfixer": "Koristeći donji obrazac, preimenovat ćete stranicu i premjestiti cijelu njenu historiju na novi naziv.\nStari naziv postat će preusmjerenje na novi naziv.\nMolimo da provjerite postoje li [[Special:DoubleRedirects|dvostruka]] ili [[Special:BrokenRedirects|nedovršena preusmjerenja]].\nVi ste za to odgovorni te morate provjeriti jesu li linkovi ispravni i vode li tamo kamo bi trebali voditi.\n\nImajte na umu da stranica '''neće''' biti premještena ako već postoji stranica s tim imenom, osim ako je prazna ili je preusmjerenje ili nema ranije historije.\nOvo znači da možete preimenovati stranicu nazad gdje je ranije bila preimenovana ako ste pogriješili, ali ne možete ponovo preimenovati postojeću stranicu.\n\n<strong>Napomena:</strong>\nOvo može biti drastična i neočekivana promjena za popularnu stranicu;\ndobro razmislite o posljedicama prije nego što nastavite.",
        "tooltip-pt-mytalk": "{{GENDER:|Vaša}} stranica za razgovor",
        "tooltip-pt-anontalk": "Rasprava o izmjenama s ove IP-adrese",
        "tooltip-pt-preferences": "{{GENDER:|Vaše}} postavke",
-       "tooltip-pt-watchlist": "Spisak stranica koje pratite",
+       "tooltip-pt-watchlist": "Spisak stranica čije izmjene pratite",
        "tooltip-pt-mycontris": "Spisak {{GENDER:|Vaših}} doprinosa",
        "tooltip-pt-anoncontribs": "Spisak izmjena napravljenih s ove IP-adrese",
        "tooltip-pt-login": "Predlažemo vam da se prijavite, iako to nije obavezno",
        "tooltip-pt-login-private": "Morate se prijaviti da biste koristili ovaj wiki",
-       "tooltip-pt-logout": "Odjavi me",
+       "tooltip-pt-logout": "Odjavite se",
        "tooltip-pt-createaccount": "Predlažemo vam da napravite račun i prijavite se; međutim, to nije obavezno",
        "tooltip-ca-talk": "Razgovor o sadržaju",
-       "tooltip-ca-edit": "Uredi ovu stranicu",
+       "tooltip-ca-edit": "Uredite ovu stranicu",
        "tooltip-ca-addsection": "Započni novu sekciju.",
        "tooltip-ca-viewsource": "Ova stranica je zaštićena.\nMožete joj vidjeti izvorni kôd",
-       "tooltip-ca-history": "Prethodne verzije ove stranice.",
+       "tooltip-ca-history": "Prethodne izmjene ove stranice",
        "tooltip-ca-protect": "Zaštitite stranicu od budućih izmjena",
        "tooltip-ca-unprotect": "Promijeni zaštitu za ovu stranicu",
        "tooltip-ca-delete": "Obrišite ovu stranicu",
        "tooltip-ca-undelete": "Vratite izmjene koje su načinjene prije brisanja stranice",
-       "tooltip-ca-move": "Premjesti ovu stranicu",
+       "tooltip-ca-move": "Premjestite ovu stranicu",
        "tooltip-ca-watch": "Dodaj stranicu na spisak praćenja",
        "tooltip-ca-unwatch": "Ukloni ovu stranicu sa spiska praćenih članaka",
        "tooltip-search": "Pretraži {{GRAMMAR:akuzativ|{{SITENAME}}}}",
index 6800d66..3a7befe 100644 (file)
@@ -13,7 +13,6 @@
        "tog-extendwatchlist": "Kombangkon daftar pamataan tuna patidaon sude parubaan, inda umna tarbaru",
        "tog-usenewrc": "Kalompokkon editan i tampilan parubaan tarbaru dot daftar pamataan mardasorkon alaman",
        "tog-numberheadings": "Len nomor judul sacara otomatis",
-       "tog-showtoolbar": "Tampilkon bilah alat pangeditan",
        "tog-editondblclick": "Pature alaman dohot klik ganda",
        "tog-editsectiononrightclick": "Fungsion pangeditan bagian dohot mangklik siamun i judul bagian",
        "tog-watchcreations": "Tambaon alaman na ubaen dot berkas na uunggah tu daftar pamataan",
index ae2a6cb..586f07f 100644 (file)
@@ -72,7 +72,6 @@
        "tog-extendwatchlist": "Desplega la llista de seguiment per a mostrar tots els canvis afectats, no només els més recents",
        "tog-usenewrc": "Agrupa els canvis per pàgina en canvis recents i llista de seguiment",
        "tog-numberheadings": "Enumera automàticament els encapçalaments",
-       "tog-showtoolbar": "Mostra la barra d'eines d'edició (cal JavaScript)",
        "tog-editondblclick": "Edita les pàgines amb un doble clic (cal JavaScript)",
        "tog-editsectiononrightclick": "Habilita l'edició per seccions en clicar amb el botó dret sobre els títols de les seccions (cal JavaScript)",
        "tog-watchcreations": "Afegeix les pàgines que vagi creant i fitxers que carregui a la llista de seguiment",
index 3240ff7..439a784 100644 (file)
@@ -26,7 +26,6 @@
        "tog-extendwatchlist": "敆擴展監視單單臺中顯示所有其更改,伓啻最近其更改",
        "tog-usenewrc": "按頁顯示最近修改共監視列表臺中其群組改變",
        "tog-numberheadings": "標題自動編號",
-       "tog-showtoolbar": "顯示編輯家私條",
        "tog-editondblclick": "雙擊就修改頁面",
        "tog-editsectiononrightclick": "啟用右擊標題編輯段落",
        "tog-watchcreations": "加添我開其頁面共我上傳其文件遘我其監視單",
        "mytalk": "我其討論",
        "anontalk": "攀講",
        "navigation": "Dô̤-hòng",
-       "and": "&#32;gê̤ṳng",
+       "and": "&#32;gâe̤ng",
        "faq": "真稠碰著其問題",
        "actions": "動作",
        "namespaces": "Miàng-kŭng-găng",
        "recentchangeslinked": "相關其改變",
        "recentchangeslinked-feed": "相關其改變",
        "recentchangeslinked-toolbox": "Sŏng-guăng gì gāi-biéng",
-       "recentchangeslinked-title": "Gê̤ṳng „$1“ ô guăng-hiê gì gāi-biéng",
+       "recentchangeslinked-title": "Gâe̤ng „$1“ ô guăng-hiê gì gāi-biéng",
        "recentchangeslinked-page": "頁面名:",
        "recentchangeslinked-to": "Hiēng-sê liêng-ciék gáu cī-dêng hiĕk-miêng gì gāi-biéng",
        "upload": "Siông-diòng ùng-giông",
        "booksources-search-legend": "尋討書源",
        "booksources-search": "Sìng-tō̤",
        "booksources-text": "下底是鏈接遘其它賣新書共舊書其站點其單單,固加可能有更多關於汝敆𡅏看其茲本書其信息:",
+       "magiclink-tracking-isbn": "Sāi-ê̤ṳng ISBN mò̤-sŭk lièng-ciék gì hiĕk",
        "specialloguserlabel": "Có̤ gì nè̤ng:",
        "speciallogtitlelabel": "目標(頭銜或者{{ns:user}}:用戶其用戶名):",
        "log": "日誌",
        "watchlistfor2": "$1 gì găng-sê dăng-dăng $2",
        "nowatchlist": "汝其監視單𡅏無項目。",
        "watchnologin": "未躒入",
-       "addedwatchtext": "â\80\9e[[:$1]]â\80\9c gê̤ṳng ĭ gì tō̤-lâung-hiĕk dŭ gă-diē nṳ̄ gì [[Special:Watchlist|găng-sê-dăng]] kó̤-lāu.",
+       "addedwatchtext": "â\80\9e[[:$1]]â\80\9c gâe̤ng ĭ gì tō̤-lâung-hiĕk dŭ gă-diē nṳ̄ gì [[Special:Watchlist|găng-sê-dăng]] kó̤-lāu.",
        "removewatch": "趁汝其監視單臺中移去",
-       "removedwatchtext": "â\80\9e[[:$1]]â\80\9c gê̤ṳng ĭ gì tō̤-lâung-hiĕk dŭ téng nṳ̄ gì [[Special:Watchlist|găng-sê-dăng]] dṳ̀-kó̤ lāu.",
+       "removedwatchtext": "â\80\9e[[:$1]]â\80\9c gâe̤ng ĭ gì tō̤-lâung-hiĕk dŭ téng nṳ̄ gì [[Special:Watchlist|găng-sê-dăng]] dṳ̀-kó̤ lāu.",
        "watch": "監視",
        "watchthispage": "監視茲頁",
        "unwatch": "伓使監視",
        "whatlinkshere-hideimages": "$1 文件鏈接",
        "whatlinkshere-filters": "過濾器",
        "blockip": "封鎖{{GENDER:$1|用戶}}",
-       "blockiptext": "Dèng lâ Ã¢-dÄ\81̤ gì dÄ\83ng-dÄ\83ng, kÅ\8d̤-Ä« dá¹³Ì\80-kó̤ dÄ\95k-dêng IP dê-cÄ« hÄ\95̤k-chiÄ\81 ÃªÌ¤á¹³ng-hô-miàng biÄ\95ng-cÄ­k gì guòng-âing. \nCuòi nâ-sÄ\81i Ä\95ng lÄ\81̤ huòng-cÄ« pó-huâi, gó gÄ\83 diÅ\8fh hù-hÄ\83k [[{{MediaWiki:Policy-url}}|huÅ\8fng-cÄ\95ng gê̤ṳng céng-cháik]]. \nChiāng găk â-dā̤ dèng-siā gê̤ṳ-tā̤ gì lī-iù, bī-ṳ̀ gōng, īng-sŭk siŏh-piĕng ké̤ṳk pó-huâi gì hiĕk-miêng.\nNṳ̄ kō̤-ī sāi [//cdo.wikipedia.org/wiki/ù lôi-biék mĭk-găng lô-iù CIDR] ngṳ̄-huák gáik-sék hŭng-sō̤ IP huâng-ùi, IPv4 dék duâi ṳ̄ng-hṳ̄ gì huâng-ùi sê /$1, IPv6 sê  /$2.",
+       "blockiptext": "Dèng lâ Ã¢-dÄ\81̤ gì dÄ\83ng-dÄ\83ng, kÅ\8d̤-Ä« dá¹³Ì\80-kó̤ dÄ\95k-dêng IP dê-cÄ« hÄ\95̤k-chiÄ\81 ÃªÌ¤á¹³ng-hô-miàng biÄ\95ng-cÄ­k gì guòng-âing. \nCuòi nâ-sÄ\81i Ä\95ng lÄ\81̤ huòng-cÄ« pó-huâi, gó gÄ\83 diÅ\8fh hù-hÄ\83k [[{{MediaWiki:Policy-url}}|huÅ\8fng-cÄ\95ng gâe̤ng céng-cháik]]. \nChiāng găk â-dā̤ dèng-siā gê̤ṳ-tā̤ gì lī-iù, bī-ṳ̀ gōng, īng-sŭk siŏh-piĕng ké̤ṳk pó-huâi gì hiĕk-miêng.\nNṳ̄ kō̤-ī sāi [//cdo.wikipedia.org/wiki/ù lôi-biék mĭk-găng lô-iù CIDR] ngṳ̄-huák gáik-sék hŭng-sō̤ IP huâng-ùi, IPv4 dék duâi ṳ̄ng-hṳ̄ gì huâng-ùi sê /$1, IPv6 sê  /$2.",
        "ipaddressorusername": "IP地址或者用戶名:",
        "ipbexpiry": "過期:",
        "ipbreason": "原因:",
        "databasenotlocked": "茲數據庫無鎖。",
        "move-page-legend": "移動頁面",
        "movepagetext": "使下底其表單重新乞茲蜀頁起蜀萆名字,移動伊共伊所有其歷史遘伊其新名字。\n舊其標題會變成新其標題其重定向頁。\n汝會使自動更新重定向許蜀點遘原底其標題。\n如果伊結果伓是總款其話,汝著檢查蜀下[[Special:DoubleRedirects|雙重重定向]]或者[[Special:BrokenRedirects|獃其重定向]]。\n汝有責任讓頁面鏈接遘正確其地方。\n\n注意儷是許塊已經有蜀隻頁面,噲就'''無能耐'''移動過了,除開噲儷是蜀萆重定向並且無舊底其修改歷史。\n嚽其意思就是講儷是汝名字起綻了,汝會使將茲蜀萆頁面重新起伊原底其名字,但是𣍐使覆蓋已經有其頁面。\n\n<strong>注意:</strong>\n嚽可能會對一般頁面造成盡大其並且無能耐想遘其改變;\n起動汝著敆做之前會意總款做其後果。",
-       "movepagetalktext": "Nâ gÄ\83u-sÅ\8dng cÄ«-bÄ­h huÅ\8fng-kuái, siÅ\8fng-guÄ\83ng gì tÅ\8d̤-lâung-hiÄ\95k Ã¢Ì¤ cê̤ṳ-dông gê̤ṳng cī-siŏh-hiĕk iè gáu sĭng gì sū-câi, dṳ̀-hĭ sĭng gì sū-câi ī-gĭng ô siŏh-bĭh tō̤-lâung-hiĕk còng-câi.\nNâ sê dŏng-cĭng ô hiĕk-miêng còng-câi, nṳ̄ diŏh cê-gă iè-dông ī-gĭng còng-câi gì hiĕk-miêng, hĕ̤k-chiā ciŏng ciā lâng-gì hăk siŏh-dŏi.",
+       "movepagetalktext": "Nâ gÄ\83u-sÅ\8dng cÄ«-bÄ­h huÅ\8fng-kuái, siÅ\8fng-guÄ\83ng gì tÅ\8d̤-lâung-hiÄ\95k Ã¢Ì¤ cê̤ṳ-dông gâe̤ng cī-siŏh-hiĕk iè gáu sĭng gì sū-câi, dṳ̀-hĭ sĭng gì sū-câi ī-gĭng ô siŏh-bĭh tō̤-lâung-hiĕk còng-câi.\nNâ sê dŏng-cĭng ô hiĕk-miêng còng-câi, nṳ̄ diŏh cê-gă iè-dông ī-gĭng còng-câi gì hiĕk-miêng, hĕ̤k-chiā ciŏng ciā lâng-gì hăk siŏh-dŏi.",
        "movenologintext": "著[[Special:UserLogin|躒入]]才有能耐移動頁面。",
        "newtitle": "新題目:",
        "move-watch": "監視茲頁",
        "exif-orientation": "Huōng-ôi",
        "exif-xresolution": "Cūi-bìng hŭng-biêng-lŭk",
        "exif-yresolution": "Sùi-dĭk hŭng-biêng-lŭk",
-       "exif-datetime": "SiÅ­-gÄ\81i Ã¹ng-giông gì nÄ­k-gÄ­ gê̤ṳng sì-găng",
+       "exif-datetime": "SiÅ­-gÄ\81i Ã¹ng-giông gì nÄ­k-gÄ­ gâe̤ng sì-găng",
        "exif-make": "Kák-sióng-gĭ cié-cô̤-siŏng",
        "exif-model": "Kák-sióng-gĭ hìng-hô̤",
        "exif-software": "Sāi gì nuōng-giông",
index c6142e4..75120c8 100644 (file)
@@ -22,7 +22,6 @@
        "tog-extendwatchlist": "Шорбина тӀехьажарна могӀам, ша беригге а, хийцамаш чубогӀуш, тӀехьаббина боцурш а",
        "tog-usenewrc": "Лелабе дика могӀам керла чу хийцамашна (оьшу JavaScript)",
        "tog-numberheadings": "Ша шех хlитто терахь корташна",
-       "tog-showtoolbar": "Гайта лакхара гӀирсийн панель тадарш дечу хенахь",
        "tog-editondblclick": "Нисъе агӀонаш шозза тӀетаӀийча (JavaScript)",
        "tog-editsectiononrightclick": "Нисде дакъа шозза бакъехьар дахка тӀетаӀийча оцу кортан (JavaScript)",
        "tog-watchcreations": "ТӀетоха ас кхоьллина агӀонаш тергаме могӀам чу",
index c38812e..5bfbf4a 100644 (file)
@@ -22,7 +22,6 @@
        "tog-extendwatchlist": "Padak-a ang gibantayan aron mapakita ang tanang kausaban, dili lang ang labing bag-o",
        "tog-usenewrc": "Gamita ang na-enhance nga mga bag-ong giusab (JavaScript kinahanglan)",
        "tog-numberheadings": "Awtomatiko ang pagnumero sa mga heading",
-       "tog-showtoolbar": "Ipakita ang toolbar sa pag-edit (JavaScript)",
        "tog-editondblclick": "I-edit ang panid inig dobol-klik (JavaScript)",
        "tog-editsectiononrightclick": "Mahimo ang pag-usab sa seksyon pinaagi sa pag-right click sa titulo sa seksyon (JavaScript kinahanglan)",
        "tog-watchcreations": "Bantayi ang akong gisugdang mga panid",
index 5d4e5b7..fbea87b 100644 (file)
@@ -32,7 +32,6 @@
        "tog-extendwatchlist": "لیستی چاودێری درێژبکەرەوە بۆ نیشان دانی ھەموو گۆڕانکارییەکان، نەک تەنھا دوایینەکان.",
        "tog-usenewrc": "گۆڕانکارییەکان لە دوایین گۆڕانکارییەکان و پێرستی چاودێریدا بەپێی پەڕە پۆلێن بکە",
        "tog-numberheadings": "ژمارەکردنی خۆگەڕی سەردێڕەکان",
-       "tog-showtoolbar": "تووڵامرازی دەستکاری نیشان بدە",
        "tog-editondblclick": "دەستکاریی پەڕە بە دووکرتە",
        "tog-editsectiononrightclick": "دەستکاریی بەشەکان بە کرتەی ڕاست لەسەر سەردێڕی بەشەکان",
        "tog-watchcreations": "ئەو پەڕانەی من دروستم کردوون و ئەو پەڕگانە من بارم کردوون زیاد بکە بە لیستی چاودێڕییەکەم",
        "protectedtitlesempty": "ھیچ سەرناوێک بەم سنوورانەوە ئێستا نەپارێزراوە.",
        "listusers": "پێرستی بەکارھێنەران",
        "listusers-editsonly": "تەنیا ئەو بەکارھێنەرانە نیشان بدە کە دەستکارییان کردووە",
+       "listusers-temporarygroupsonly": "تەنیا ئەو بەکارھێنەرانە نیشان بدە کە بە شێوەیەکی کاتی مافیان ھەیە",
        "listusers-creationsort": "ڕیزکردن بە پێی ڕێکەوتی دروستکردن",
        "listusers-desc": "ڕیزکردنی بەرەوە ژێر",
        "usereditcount": "$1 {{PLURAL:$1|دەستکاری|دەستکاری}}",
index b8c7d88..86d642c 100644 (file)
@@ -41,7 +41,7 @@
        "august": "aostu",
        "september": "settembre",
        "october": "ottobre",
-       "november": "nuvembre",
+       "november": "nuvembri",
        "december": "dicembre",
        "january-gen": "ghjennaghju",
        "february-gen": "ferraghju",
        "istemplate": "inclusione",
        "whatlinkshere-prev": "{{PLURAL:$1|precidente|precidenti $1}}",
        "whatlinkshere-next": "{{PLURAL:$1|seguente|seguenti $1}}",
-       "whatlinkshere-links": "$1 ligami",
-       "whatlinkshere-hidetrans": "inclusione",
+       "whatlinkshere-links": " ligami",
+       "whatlinkshere-hidetrans": "$1 inclusione",
        "whatlinkshere-hidelinks": "$1 ligami",
        "ipaddressorusername": "Adrizzu IP o nome di cuntributore",
        "ipbreason": "Mutivu:",
index 316a13d..efe0557 100644 (file)
@@ -16,7 +16,6 @@
        "tog-extendwatchlist": "Palapadon ang lista sang mga ginabantayan para makita ang tanan nga nagla-in, indi lang man ang pinakabag-o",
        "tog-usenewrc": "Gamiton ang ginpatahum nga mga bag-ong ilis {kinanglan ang Javascript}",
        "tog-numberheadings": "Insigida nga pag-isip sang numero sa mga titulo",
-       "tog-showtoolbar": "Ipakita ang toolbar sang pag-ilis (kinahanglan ang JavaScript)",
        "tog-editondblclick": "Liwaton ang mga pahina sa duwa ka pindot {kinahanglan ang Javascript}",
        "tog-editsectiononrightclick": "Pasugtan ang pag-ilis sang mga bahin pama-agi sa tu-o nga pagpindot sa mga titulo sang pahina {kinanglan ang JavaScript}",
        "tog-watchcreations": "Idugang sa akon balantayan ang mga pahina nga gin-ubra ko.",
index 2241458..6216acd 100644 (file)
@@ -20,7 +20,6 @@
        "tog-extendwatchlist": "Козетюв джедвелини, тек сонъки дегиль, бутюн денъиштирмелерни корьмек ичюн кенишлет",
        "tog-usenewrc": "Сонъки денъиштирмелер саифесиндеки ве козетюв джедвелиндеки денъиштирмелерни группаландырув (JavaScript керек)",
        "tog-numberheadings": "Серлеваларны автоматик номераландыр",
-       "tog-showtoolbar": "Саифени денъиштирген вакъытта ярдымджы дёгмелерни косьтер. (JavaScript)",
        "tog-editondblclick": "Саифени чифт басып денъиштирмеге башла (JavaScript)",
        "tog-editsectiononrightclick": "Болюк серлевасына онъ баскъанда денъиштирюв пенджересини ач. (JavaScript)",
        "tog-watchcreations": "Яраткъан саифелеримни ве юклеген файлларымны козетюв джедвелиме кирсет",
index 02405da..7435577 100644 (file)
@@ -16,7 +16,6 @@
        "tog-extendwatchlist": "Közetüv cedvelini, tek soñki degil, bütün deñiştirmelerni körmek içün kenişlet",
        "tog-usenewrc": "Soñki deñiştirmeler saifesindeki ve közetüv cedvelindeki deñiştirmelerni gruppalandıruv (JavaScript kerek)",
        "tog-numberheadings": "Serlevalarnı avtomatik nomeralandır",
-       "tog-showtoolbar": "Saifeni deñiştirgen vaqıtta yardımcı dögmelerni köster. (JavaScript)",
        "tog-editondblclick": "Saifeni çift basıp deñiştirmege başla (JavaScript)",
        "tog-editsectiononrightclick": "Bölük serlevasına oñ basqanda deñiştirüv penceresini aç. (JavaScript)",
        "tog-watchcreations": "Yaratqan saifelerimni ve yüklegen fayllarımnı közetüv cedvelime kirset",
index 0f585c7..130c37a 100644 (file)
@@ -52,7 +52,6 @@
        "tog-extendwatchlist": "Na seznamu sledovaných stránek zobrazovat všechny změny, ne jen tu poslední",
        "tog-usenewrc": "V posledních změnách a sledovaných stránkách seskupovat změny podle stránek",
        "tog-numberheadings": "Automaticky číslovat nadpisy",
-       "tog-showtoolbar": "Zobrazit panel nástrojů",
        "tog-editondblclick": "Editovat stránky dvojklikem",
        "tog-editsectiononrightclick": "Umožnit editaci části stránky kliknutím pravým tlačítkem na nadpisy sekcí",
        "tog-watchcreations": "Přidávat mnou založené stránky a načtené soubory ke sledovaným",
        "prefixindex": "Seznam stránek dle začátku názvu",
        "prefixindex-namespace": "Seznam stránek dle začátku názvu (jmenný prostor $1)",
        "prefixindex-submit": "Zobrazit",
-       "prefixindex-strip": "Začátek názvu v seznamu odříznout",
+       "prefixindex-strip": "Skrýt začátek názvu v seznamu",
        "shortpages": "Nejkratší stránky",
        "longpages": "Nejdelší stránky",
        "deadendpages": "Slepé stránky",
index a5b0b20..ab129e1 100644 (file)
@@ -24,7 +24,6 @@
        "tog-extendwatchlist": "Rozwinië lëstã ùzérónëch artiklów bë wëskrzënic wszëtczé zmianë, ni le blós slédné",
        "tog-usenewrc": "Grëpùjë zjinaczi wedle starnów na lëscé slédnych zjinaków ë ùzérónych",
        "tog-numberheadings": "Aùtomatné numerowanié nôgłówków",
-       "tog-showtoolbar": "Wëskrzëni listwã nôrzãdzów edicëji",
        "tog-editondblclick": "Editëjë starnë przez dëbeltné klëkniãcé",
        "tog-editsectiononrightclick": "Włączë edicjã sekcji bez klëkniãcé prawą knąpą mëszë na titlu sekcje",
        "tog-watchcreations": "Dodôwôj do mòji lëstë ùzérónëch artiklów starnë, chtërné ùsôdzã, i lopczi, chtërné wladëjã",
index 9af37c1..122d457 100644 (file)
@@ -20,7 +20,6 @@
        "tog-extendwatchlist": "Пĕтĕм улшăнусене кăтартакан анлă сăнав списокĕ",
        "tog-usenewrc": "Юлашки улшăнусен лайăхлатнă списокĕ (JavaScript)",
        "tog-numberheadings": "Заголовоксене хăй тĕллĕн номерлесе пымалла.",
-       "tog-showtoolbar": "Тӳрлетнĕ чухне çӳлти хатĕрсен хăмине кăтартмалла (JavaScript)",
        "tog-editondblclick": "Иккĕ пуссан статьяна тӳрлетмелле (JavaScript)",
        "tog-editsectiononrightclick": "Шăшин сылтăм пускăчне пуссан статья пайне тӳрлетмелле (JavaScript)",
        "tog-watchcreations": "Эпĕ тунă страницăсене сăнав списокне кĕртмелле",
index 66a0816..314619a 100644 (file)
@@ -32,7 +32,6 @@
        "tog-extendwatchlist": "Ehangu'r rhestr wylio i ddangos pob golygiad yn hytrach na'r diweddaraf yn unig",
        "tog-usenewrc": "Grwpio'r newidiadau bob yn ddalen yn y 'newidiadau diweddar' a'r 'rhestr wylio'",
        "tog-numberheadings": "Rhifo penawdau'n awtomatig",
-       "tog-showtoolbar": "Dangos y bar offer golygu",
        "tog-editondblclick": "Golygu tudalennau wrth glicio ddwywaith",
        "tog-editsectiononrightclick": "Galluogi golygu adran drwy dde-glicio ar bennawd yr adran",
        "tog-watchcreations": "Ychwanegu tudalennau at fy rhestr wylio wrth i mi eu creu a ffeiliau wrth i mi eu huwchlwytho.",
index 5b286d7..3add3bb 100644 (file)
@@ -81,7 +81,6 @@
        "tog-extendwatchlist": "Udvid overvågningslisten til at vise alle ændringer og ikke kun den nyeste",
        "tog-usenewrc": "Gruppér ændringer efter side i listen over seneste ændringer og i overvågningslisten",
        "tog-numberheadings": "Automatisk nummerering af overskrifter",
-       "tog-showtoolbar": "Vis værktøjslinje til redigering",
        "tog-editondblclick": "Redigér sider med dobbeltklik",
        "tog-editsectiononrightclick": "Redigér afsnit ved at højreklikke på deres titler",
        "tog-watchcreations": "Føj sider jeg opretter og filer jeg lægger op, til min overvågningsliste",
        "passwordreset-emailelement": "Brugernavn: \n$1\n\nMidlertidig adgangskode: \n$2",
        "passwordreset-emailsentemail": "Hvis denne e-mailadresse er knyttet til din konto, så vil en e-mail om nulstilling af adgangskoden blive sendt.",
        "passwordreset-emailsentusername": "Hvis der er en e-mailadresse forbundet med dette brugernavn, så vil en e-mail om nulstilling af adgangskoden blive sendt.",
+       "passwordreset-nocaller": "En kalder skal angives",
+       "passwordreset-nosuchcaller": "Kalderen findes ikke: $1",
        "passwordreset-invalidemail": "Ugyldig e-mailadresse",
        "passwordreset-nodata": "Hverken et brugernavn eller en e-mailadresse blev angivet",
        "changeemail": "Ændr eller fjern e-mailadresse",
        "prefixindex": "Alle sider der begynder med",
        "prefixindex-namespace": "Alle sider (i navnerummet $1) der begynder med",
        "prefixindex-submit": "Vis",
-       "prefixindex-strip": "Strip præfiks i listen",
+       "prefixindex-strip": "Skjul præfikset i resultaterne",
        "shortpages": "Korte sider",
        "longpages": "Lange sider",
        "deadendpages": "Blindgydesider",
        "ipb-disableusertalk": "Forhindr denne bruger i at redigere sin egen brugerdiskussion under blokeringen",
        "ipb-change-block": "Forny brugerens blokering med disse indstillinger",
        "ipb-confirm": "Bekræft blokering",
+       "ipb-partial": "Delvist",
+       "ipb-type-label": "Type",
+       "ipb-pages-label": "Sider",
        "badipaddress": "IP-adressen/brugernavnet er udformet forkert eller eksistere ikke.",
        "blockipsuccesssub": "Blokeringen er gennemført.",
        "blockipsuccesstext": "[[Special:Contributions/$1|$1]] er blevet blokeret.<br />\nSe [[Special:BlockList|blokeringslisten]] for alle blokeringer.",
        "createaccountblock": "oprettelse af konto deaktiveret",
        "emailblock": "e-mail blokeret",
        "blocklist-nousertalk": "kan ikke redigere egen diskussionsside",
+       "blocklist-editing": "redigering",
        "ipblocklist-empty": "Blokeringslisten er tom.",
        "ipblocklist-no-results": "Den angivene IP-addresse eller brugernavn er ikke blokeret.",
        "blocklink": "blokér",
        "mw-widgets-titleinput-description-redirect": "omdiriger til $1",
        "mw-widgets-categoryselector-add-category-placeholder": "Tilføj en kategori...",
        "mw-widgets-usersmultiselect-placeholder": "Tilføj flere ...",
+       "mw-widgets-titlesmultiselect-placeholder": "Tilføj flere ...",
        "date-range-from": "Fra dato:",
        "date-range-to": "Til dato:",
        "sessionmanager-tie": "Kan ikke kombinere flere forespørgselgodkendelsetyper: $1.",
index 9773a6a..e122a07 100644 (file)
@@ -35,7 +35,6 @@
        "tog-extendwatchlist": "In der Beobachtungsliste alle Änderungen anzeigen, nicht nur die aktuellsten",
        "tog-usenewrc": "Änderungen auf „Letzte Änderungen“ und der Beobachtungsliste nach Seite gruppieren",
        "tog-numberheadings": "Überschriften automatisch nummerieren",
-       "tog-showtoolbar": "Bearbeiten-Werkzeugleiste aktivieren",
        "tog-editondblclick": "Seiten mit Doppelklick bearbeiten",
        "tog-editsectiononrightclick": "Einzelne Abschnitte per Rechtsklick bearbeiten",
        "tog-enotifrevealaddr": "Ihre E-Mail-Adresse in Benachrichtigungs-E-Mails anzeigen",
index 8a2588a..5b21347 100644 (file)
        "tog-extendwatchlist": "Alle Änderungen in der Beobachtungsliste anzeigen, nicht nur die aktuellsten",
        "tog-usenewrc": "Änderungen auf „Letzte Änderungen“ und der Beobachtungsliste nach Seite gruppieren",
        "tog-numberheadings": "Überschriften automatisch nummerieren",
-       "tog-showtoolbar": "Bearbeiten-Werkzeugleiste anzeigen",
        "tog-editondblclick": "Seiten mit Doppelklick bearbeiten",
        "tog-editsectiononrightclick": "Einzelne Abschnitte per Rechtsklick auf die Überschrift bearbeiten",
        "tog-watchcreations": "Selbst erstellte Seiten und hochgeladene Dateien automatisch beobachten",
        "subject-preview": "Vorschau der Zusammenfassungszeile:",
        "previewerrortext": "Beim Versuch, eine Vorschau deiner Änderungen anzuzeigen, ist ein Fehler aufgetreten.",
        "blockedtitle": "Benutzer ist gesperrt",
+       "blocked-email-user": "<strong>Dein Benutzerkonto wurde für das Versenden von E-Mails gesperrt. Du kannst noch andere Seiten in diesem Wiki bearbeiten.</strong> Du kannst die vollständigen Einzelheiten in deinen [[Special:MyContributions|Benutzerbeiträgen]] einsehen.\n\nDie Sperre wurde von $1 durchgeführt.\n\nDie angegebene Begründung lautet: <em>$2</em>.\n\n* Beginn der Sperre: $8\n* Ablauf der Sperre: $6\n* Sperre betrifft: $7\n* Sperrkennung: #$5",
+       "blockedtext-partial": "<strong>Dein Benutzerkonto oder deine IP-Adresse wurde für das Durchführen von Änderungen an dieser Seite gesperrt. Du kannst noch andere Seiten in diesem Wiki bearbeiten.</strong> Du kannst die vollständigen Einzelheiten in deinen [[Special:MyContributions|Benutzerbeiträgen]] einsehen.\n\nDie Sperre wurde von $1 durchgeführt.\n\nDie angegebene Begründung lautet: <em>$2</em>.\n\n* Beginn der Sperre: $8\n* Ablauf der Sperre: $6\n* Sperre betrifft: $7\n* Sperrkennung: #$5",
        "blockedtext": "'''Dein Benutzername oder deine IP-Adresse wurde gesperrt.'''\n\nDie Sperrung wurde vom Administrator $1 durchgeführt.\nAls Grund wurde ''$2'' angegeben.\n\n* Beginn der Sperre: $8\n* Ende der Sperre: $6\n* Sperre betrifft: $7\n\nDu kannst $1 oder einen der anderen [[{{MediaWiki:Grouppage-sysop}}|Administratoren]] kontaktieren, um über die Sperre zu diskutieren.\nDu kannst die „{{int:emailuser}}“-Funktion nicht nutzen, solange keine gültige E-Mail-Adresse in deinen [[Special:Preferences|Benutzerkonto-Einstellungen]] eingetragen ist oder diese Funktion für dich gesperrt wurde.\nDeine aktuelle IP-Adresse ist $3 und die Sperrkennung lautet $5.\nBitte füge alle Informationen jeder Anfrage hinzu, die du stellst.",
        "autoblockedtext": "Deine IP-Adresse wurde automatisch gesperrt, da sie von einem anderen Benutzer genutzt wurde, der von $1 gesperrt wurde.\nAls Grund wurde angegeben:\n\n:''$2''\n\n* Beginn der Sperre: $8\n* Ende der Sperre: $6\n* Sperre betrifft: $7\n\nDu kannst $1 oder einen der anderen [[{{MediaWiki:Grouppage-sysop}}|Administratoren]] kontaktieren, um über die Sperre zu diskutieren.\n\nDu kannst die „{{int:emailuser}}“-Funktion nicht nutzen, solange keine gültige E-Mail-Adresse in deinen [[Special:Preferences|Benutzerkonto-Einstellungen]] eingetragen ist oder diese Funktion für dich gesperrt wurde.\n\nDeine aktuelle IP-Adresse ist $3, und die Sperr-ID ist $5.\nBitte füge alle Informationen jeder Anfrage hinzu, die du stellst.",
        "systemblockedtext": "Dein Benutzername oder deine IP-Adresse wurde von MediaWiki automatisch gesperrt.\nDer angegebene Grund ist:\n\n:<em>$2</em>\n\n* Beginn der Sperre: $8\n* Ablauf der Sperre: $6\n* Sperre betrifft: $7\n\nDeine aktuelle IP-Adresse ist $3.\nBitte gib alle oben stehenden Details in jeder Anfrage an.",
        "prefixindex": "Alle Seiten (mit Präfix)",
        "prefixindex-namespace": "Alle Seiten mit Präfix (Namensraum $1)",
        "prefixindex-submit": "Anzeigen",
-       "prefixindex-strip": "Suchpräfix ausblenden",
+       "prefixindex-strip": "Das Präfix in den Ergebnissen ausblenden",
        "shortpages": "Kurze Seiten",
        "longpages": "Lange Seiten",
        "deadendpages": "Nicht verlinkende Seiten",
        "ipb-disableusertalk": "Diesen Benutzer daran hindern, seine eigene Diskussionsseite zu bearbeiten, solange er gesperrt ist",
        "ipb-change-block": "Sperre mit diesen Sperrparametern erneuern",
        "ipb-confirm": "Sperrung bestätigen",
+       "ipb-sitewide": "Auf der gesamten Website",
+       "ipb-partial": "Teilweise",
+       "ipb-type-label": "Typ",
+       "ipb-pages-label": "Seiten",
        "badipaddress": "Die IP-Adresse hat ein falsches Format.",
        "blockipsuccesssub": "Die Sperrung war erfolgreich.",
        "blockipsuccesstext": "Der Benutzer / die IP-Adresse [[Special:Contributions/$1|$1]] wurde gesperrt.<br />\nZur Aufhebung der Sperre siehe die [[Special:BlockList|Liste aller aktiven Sperren]].",
        "createaccountblock": "Erstellung von Benutzerkonten gesperrt",
        "emailblock": "E-Mail-Versand gesperrt",
        "blocklist-nousertalk": "darf eigene Diskussionsseite nicht bearbeiten",
+       "blocklist-editing": "Bearbeiten",
+       "blocklist-editing-sitewide": "Bearbeiten (gesamte Website)",
        "ipblocklist-empty": "Die Liste enthält keine Einträge.",
        "ipblocklist-no-results": "Die gesuchte IP-Adresse/der Benutzername ist nicht gesperrt.",
        "blocklink": "Sperren",
        "logentry-block-block": "$1 {{GENDER:$2|sperrte}} {{GENDER:$4|$3}} für eine Dauer von $5 $6",
        "logentry-block-unblock": "$1 {{GENDER:$2|hob}} die Sperre von {{GENDER:$4|$3}} auf",
        "logentry-block-reblock": "$1 {{GENDER:$2|änderte}} die Sperreinstellungen für {{GENDER:$4|$3}} mit einer Sperrdauer von $5 $6",
+       "logentry-partialblock-block": "$1 {{GENDER:$2|sperrte}} {{GENDER:$4|$3}} für das Bearbeiten {{PLURAL:$8||der Seiten}} $7 mit einer Ablaufzeit von $5 $6",
+       "logentry-partialblock-reblock": "$1 {{GENDER:$2|änderte}} die Sperreinstellungen für {{GENDER:$4|$3}} zum Verhindern von Bearbeitungen auf {{PLURAL:$8||den Seiten}} $7 mit einer Ablaufzeit von $5 $6",
+       "logentry-non-editing-block-block": "$1 {{GENDER:$2|sperrte}} {{GENDER:$4|$3}} für Nicht-Bearbeitungsaktionen mit einer Ablaufzeit von $5 $6",
+       "logentry-non-editing-block-reblock": "$1 {{GENDER:$2|änderte}} die Sperreinstellungen für {{GENDER:$4|$3}} für Nicht-Bearbeitungsaktionen mit einer Ablaufzeit von $5 $6",
        "logentry-suppress-block": "$1 {{GENDER:$2|sperrte}} {{GENDER:$4|$3}} mit einer Sperrdauer von $5 $6",
        "logentry-suppress-reblock": "$1 {{GENDER:$2|änderte}} die Sperreinstellungen für {{GENDER:$4|$3}} mit einer Sperrdauer von $5 $6",
        "logentry-import-upload": "$1 {{GENDER:$2|importierte}} $3 durch das Hochladen einer Datei",
        "duration-seconds": "$1 {{PLURAL:$1|Sekunde|Sekunden}}",
        "duration-minutes": "$1 {{PLURAL:$1|Minute|Minuten}}",
        "duration-hours": "$1 {{PLURAL:$1|Stunde|Stunden}}",
-       "duration-days": "$1 {{PLURAL:$1|Tag|Tage}}",
+       "duration-days": "$1 {{PLURAL:$1|Tag|Tagen}}",
        "duration-weeks": "$1 {{PLURAL:$1|Woche|Wochen}}",
        "duration-years": "$1 {{PLURAL:$1|Jahr|Jahre}}",
        "duration-decades": "$1 {{PLURAL:$1|Jahrzehnt|Jahrzehnte}}",
        "mw-widgets-titleinput-description-redirect": "Weiterleitung nach $1",
        "mw-widgets-categoryselector-add-category-placeholder": "Eine Kategorie hinzufügen …",
        "mw-widgets-usersmultiselect-placeholder": "Weitere hinzufügen …",
+       "mw-widgets-titlesmultiselect-placeholder": "Weitere hinzufügen …",
        "date-range-from": "Von Datum:",
        "date-range-to": "Bis Datum:",
        "sessionmanager-tie": "Mehrere Anfrageauthentifikationstypen konnten nicht kombiniert werden: $1.",
        "passwordpolicies-policy-passwordcannotmatchblacklist": "Ein Passwort kann nicht mit speziellen schwarzgelisteten Passwörtern übereinstimmen",
        "passwordpolicies-policy-maximalpasswordlength": "Ein Passwort muss weniger als {{PLURAL:$1|ein|$1}} Zeichen lang sein",
        "passwordpolicies-policy-passwordcannotbepopular": "Ein Passwort kann nicht {{PLURAL:$1|das beliebteste Passwort|in der Liste der $1 beliebtesten Passwörter}} sein",
-       "easydeflate-invaliddeflate": "Der angegebene Inhalt ist nicht ordnungsgemäß komprimiert"
+       "easydeflate-invaliddeflate": "Der angegebene Inhalt ist nicht ordnungsgemäß komprimiert",
+       "unprotected-js": "Aus Sicherheitsgründen kann JavaScript-Code nicht mehr von ungeschützten Seiten geladen werden. Erstelle die JavaScript-Seite bitte ausschließlich im Namensraum „MediaWiki“ oder als Benutzerunterseite."
 }
index b886c37..07f0702 100644 (file)
@@ -42,7 +42,6 @@
        "tog-extendwatchlist": "Lista seyrkerdışi hera bıke ke vurnayışi pêro basê, tenya tewr peyêni nê",
        "tog-usenewrc": "Vurnayışê ke pela vurnayışanê peyênan û lista seyrkerdışi derê inan grube ke.",
        "tog-numberheadings": "Sernuşteyan be xo numre cı şane",
-       "tog-showtoolbar": "Toolbar virnayisi bivin (JavaScript lazımo)",
        "tog-editondblclick": "Per virnayisi di dilet klik bike (JavaScript lazımo)",
        "tog-editsectiononrightclick": "Qısıman be tıknayışê serrêze ra ebe gocega raşte bıvurne (JavaScript lazımo)",
        "tog-watchcreations": "Pelê ke mı afernayê u dosyeyê ke mı bar kerdê lista mına seyrkerdışi ke",
        "diff-multi-otherusers": "(Terefê {{PLURAL:$2|yew karberi|$2 karberan}} ra {{PLURAL:$1|yew revizyono miyanên nêmocno|$1 revizyonê miyanêni nêmocnê}})",
        "diff-multi-manyusers": "({{PLURAL:$1|jew timar kerdışo qıckeko|$1 timar kerdışo qıckeko}} timar kerdo, $2 {{PLURAL:$2|Karber|karberi}} memocne)",
        "difference-missing-revision": "Ferqê {{PLURAL:$2|Yew rewizyonê|$2 rewizyonê}} {{PLURAL:$2|dı|dı}} ($1) sero çıniyo.\n\nNo normal de werênayış dê pelanê besterneyan dı ena xırabin asena.\nDetayê besternayışi [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} tiya dı] aseno.",
-       "searchresults": "Peyniyê cı geyrayışi",
+       "searchresults": "Peyniya cıgeyrayışi",
        "searchresults-title": "Qandê \"$1\" neticeyê geyrayışi",
        "titlematches": "Tekê (zewcê) sernameyê pele",
        "textmatches": "Tekê (zewcê) nuştey pele",
index e0137af..7f02bb6 100644 (file)
@@ -31,7 +31,6 @@
        "tog-extendwatchlist": "Wobglědowańku wócyniś, aby wšě změny pokazał, nic jano nejnowše",
        "tog-usenewrc": "Kupkowe změny pó boku w aktualnych změnach a wobglědowanjach",
        "tog-numberheadings": "Nadpisma awtomatiski numerěrowaś",
-       "tog-showtoolbar": "Wobźěłowańsku rědku pokazaś",
        "tog-editondblclick": "Boki z dwójnym kliknjenim wobźěłaś",
        "tog-editsectiononrightclick": "Wobźěłowanje wótrězkow pśez kliknjenje z pšaweju tastu myški zmóžniś",
        "tog-watchcreations": "Boki, kótarež napórajom a dataje, kótarež nagrawam, wobglědowaś",
index 1f8403a..8181f93 100644 (file)
@@ -14,7 +14,6 @@
        "tog-extendwatchlist": "Pointongo koinsanai listamangan do popokito koinsanai pinongundolihon, okon ko iri kawawagu nopo",
        "tog-usenewrc": "Tinimungan nopingalanan maya bobolikon ii wagu kaalanai om lispintangan",
        "tog-numberheadings": "oporian-mongonumbur it tuluhon",
-       "tog-showtoolbar": "Pokitono kakamotbar mongidit",
        "tog-editondblclick": "Idito bolikon momoguno induaan todos",
        "tog-editsectiononrightclick": "Pabanaro sikson mongidit momoguno todos golibang id sikson tuluon",
        "tog-watchcreations": "Ruhangai bolikon di winonsoiku om nogi pail pinosuangku id lisintanganku",
index b502538..ecfa68d 100644 (file)
@@ -19,7 +19,6 @@
        "tog-extendwatchlist": "निगरानी सूचीलाई सबै परिवर्तन धेकुन्या गरी बढुन्या , ऐईलका बाहेक",
        "tog-usenewrc": "पानाका अहिलका  परिवर्तन र अवलोकन सूचीका आधारमी सामूहिक परिवर्तनहरू",
        "tog-numberheadings": "शीर्षकहरूलाई स्वत:अङ्कित गर",
-       "tog-showtoolbar": "सम्पादन औजारबट्टा धेकौन्या",
        "tog-editondblclick": "दोहोरो क्लिकमा पाना सम्पादन गर्ने",
        "tog-editsectiononrightclick": "शीर्षकमा दाहिने क्लिकद्वारा खण्ड सम्पादन सक्षम पारन्या",
        "tog-watchcreations": "मेरा ध्यान सूचीमा मुइले सृजना गरयाका पाना र अपलोड जोड्न्या",
index f3a81cc..f4216fb 100644 (file)
@@ -19,7 +19,6 @@
        "tog-extendwatchlist": "Fà vèder tót' al mudéfichi fât a i tgnû sòt ôc, mìa sōl l'ûltma.",
        "tog-usenewrc": "Unés al mudéfichi per pàgina int al j ûltmi mudéfichi e in quî tgnû sòt' ôc.",
        "tog-numberheadings": "Cûnta automâtica di tétol ed sesiòun.",
-       "tog-showtoolbar": "Fà vèder la bâra di strumèint ed mudéfica.",
        "tog-editondblclick": "Mudéfica 'l pàgini cun un cléch dòpi.",
        "tog-editsectiononrightclick": "Mudéfica dal sesiòun per mèz dal cléch a dréta insém al tétol.",
        "tog-watchcreations": "Zûnta al pàgini fâti e i file carghê int i tgnû 'd ôc specêl.",
index ca46c54..44fc58e 100644 (file)
@@ -67,7 +67,6 @@
        "tog-extendwatchlist": "Επέκταση της λίστας παρακολούθησης ώστε να δείχνει όλες τις αλλαγές, όχι μόνο τις πιο πρόσφατες",
        "tog-usenewrc": "Ομαδοποίηση αλλαγών ανά σελίδα στις πρόσφατες αλλαγές και στη λίστα παρακολούθησης",
        "tog-numberheadings": "Αυτόματη αρίθμηση επικεφαλίδων",
-       "tog-showtoolbar": "Εμφάνιση μπάρας εργαλείων επεξεργασίας",
        "tog-editondblclick": "Επεξεργασία σελίδων με διπλό κλικ",
        "tog-editsectiononrightclick": "Ενεργοποίηση επεξεργασίας ενοτήτων με δεξί κλικ στους τίτλους των ενοτήτων",
        "tog-watchcreations": "Προσθήκη σελίδων που δημιουργώ και αρχείων που ανεβάζω στη λίστα παρακολούθησής μου",
        "ipb-disableusertalk": "Αποτρέψτε αυτό το χρήστη από την επεξεργασία της δική του σελίδας συζήτησης, ενώ είναι αποκλεισμένος",
        "ipb-change-block": "Επαναφραγή του χρήστη με αυτές τις ρυθμίσεις",
        "ipb-confirm": "Επιβεβαίωση φραγής",
+       "ipb-partial": "Μερική",
+       "ipb-type-label": "Τύπος",
+       "ipb-pages-label": "Σελίδες",
        "badipaddress": "Άκυρη διεύθυνση IP.",
        "blockipsuccesssub": "Η φραγή ολοκληρώθηκε επιτυχώς.",
        "blockipsuccesstext": "{{GENDER:$1|Ο|Η}} [[Special:Contributions/$1|$1]] έχει υποστεί φραγή.<br />\nΔείτε τον [[Special:BlockList|κατάλογο φραγών]] για να εποπτεύσετε τις φραγές.",
        "mw-widgets-titleinput-description-redirect": "ανακατεύθυνση στο $1",
        "mw-widgets-categoryselector-add-category-placeholder": "Προσθήκη κατηγορίας...",
        "mw-widgets-usersmultiselect-placeholder": "Προσθήκη περισσότερων...",
+       "mw-widgets-titlesmultiselect-placeholder": "Προσθήκη περισσότερων...",
        "date-range-from": "Από ημερομηνία:",
        "date-range-to": "Έως ημερομηνία:",
        "sessionprovider-generic": "$1 συνεδρίες",
index f002731..f03f82b 100644 (file)
@@ -46,7 +46,6 @@
        "tog-extendwatchlist": "Expand watchlist to show all changes, not just the most recent",
        "tog-usenewrc": "Group changes by page in recent changes and watchlist",
        "tog-numberheadings": "Auto-number headings",
-       "tog-showtoolbar": "Show edit toolbar",
        "tog-editondblclick": "Edit pages on double click",
        "tog-editsectiononrightclick": "Enable section editing by right clicking on section titles",
        "tog-watchcreations": "Add pages I create and files I upload to my watchlist",
index ea63054..91f259e 100644 (file)
@@ -11,7 +11,6 @@
        "tog-extendwatchlist": "Expand watchlist to show all changes, not just the most recent",
        "tog-usenewrc": "Group changes by page in recent changes and watchlist",
        "tog-numberheadings": "Auto-number headings",
-       "tog-showtoolbar": "Show edit toolbar",
        "tog-editondblclick": "Edit pages on double click",
        "tog-editsectiononrightclick": "Enable section editing by right clicking on section titles",
        "tog-watchcreations": "Add pages I create and files I upload to my watchlist",
        "subject-preview": "Preview of subject:",
        "previewerrortext": "An error occurred while attempting to preview your changes.",
        "blockedtitle": "User is blocked",
+       "blocked-email-user": "<strong>Your username has been blocked from sending email. You can still edit other pages on this wiki.</strong> You can view the full block details at [[Special:MyContributions|account contributions]].\n\nThe block was made by $1.\n\nThe reason given is <em>$2</em>.\n\n* Start of block: $8\n* Expiration of block: $6\n* Intended blockee: $7\n* Block ID #$5",
+       "blockedtext-partial": "<strong>Your username or IP address has been blocked from making changes to this page. You can still edit other pages on this wiki.</strong> You can view the full block details at [[Special:MyContributions|account contributions]].\n\nThe block was made by $1.\n\nThe reason given is <em>$2</em>.\n\n* Start of block: $8\n* Expiration of block: $6\n* Intended blockee: $7\n* Block ID #$5",
        "blockedtext": "<strong>Your username or IP address has been blocked.</strong>\n\nThe block was made by $1.\nThe reason given is <em>$2</em>.\n\n* Start of block: $8\n* Expiration of block: $6\n* Intended blockee: $7\n\nYou can contact $1 or another [[{{MediaWiki:Grouppage-sysop}}|administrator]] to discuss the block.\nYou cannot use the \"{{int:emailuser}}\" feature unless a valid email address is specified in your [[Special:Preferences|account preferences]] and you have not been blocked from using it.\nYour current IP address is $3, and the block ID is #$5.\nPlease include all above details in any queries you make.",
        "autoblockedtext": "Your IP address has been automatically blocked because it was used by another user, who was blocked by $1.\nThe reason given is:\n\n:<em>$2</em>\n\n* Start of block: $8\n* Expiration of block: $6\n* Intended blockee: $7\n\nYou may contact $1 or one of the other [[{{MediaWiki:Grouppage-sysop}}|administrators]] to discuss the block.\n\nNote that you may not use the \"{{int:emailuser}}\" feature unless you have a valid email address registered in your [[Special:Preferences|user preferences]] and you have not been blocked from using it.\n\nYour current IP address is $3, and the block ID is #$5.\nPlease include all above details in any queries you make.",
        "systemblockedtext": "Your username or IP address has been automatically blocked by MediaWiki.\nThe reason given is:\n\n:<em>$2</em>\n\n* Start of block: $8\n* Expiration of block: $6\n* Intended blockee: $7\n\nYour current IP address is $3.\nPlease include all above details in any queries you make.",
        "prefixindex-namespace": "All pages with prefix ($1 namespace)",
        "prefixindex-summary": "",
        "prefixindex-submit": "Show",
-       "prefixindex-strip": "Strip prefix in list",
+       "prefixindex-strip": "Hide the prefix in results",
        "shortpages": "Short pages",
        "shortpages-summary": "",
        "longpages": "Long pages",
        "ipb-disableusertalk": "Prevent this user from editing their own talk page while blocked",
        "ipb-change-block": "Re-block the user with these settings",
        "ipb-confirm": "Confirm block",
+       "ipb-sitewide": "Sitewide",
+       "ipb-partial": "Partial",
+       "ipb-type-label": "Type",
+       "ipb-pages-label": "Pages",
        "badipaddress": "Invalid IP address",
        "blockipsuccesssub": "Block succeeded",
        "blockipsuccesstext": "[[Special:Contributions/$1|$1]] has been blocked.<br />\nSee the [[Special:BlockList|block list]] to review blocks.",
        "createaccountblock": "account creation disabled",
        "emailblock": "email disabled",
        "blocklist-nousertalk": "cannot edit own talk page",
+       "blocklist-editing": "editing",
+       "blocklist-editing-sitewide": "editing (sitewide)",
        "ipblocklist-empty": "The block list is empty.",
        "ipblocklist-no-results": "The requested IP address or username is not blocked.",
        "blocklink": "block",
        "logentry-block-block": "$1 {{GENDER:$2|blocked}} {{GENDER:$4|$3}} with an expiration time of $5 $6",
        "logentry-block-unblock": "$1 {{GENDER:$2|unblocked}} {{GENDER:$4|$3}}",
        "logentry-block-reblock": "$1 {{GENDER:$2|changed}} block settings for {{GENDER:$4|$3}} with an expiration time of $5 $6",
+       "logentry-partialblock-block": "$1 {{GENDER:$2|blocked}} {{GENDER:$4|$3}} from editing {{PLURAL:$8||the pages}} $7 with an expiration time of $5 $6",
+       "logentry-partialblock-reblock": "$1 {{GENDER:$2|changed}} block settings for {{GENDER:$4|$3}} preventing edits on {{PLURAL:$8||the pages}} $7 with an expiration time of $5 $6",
+       "logentry-non-editing-block-block": "$1 {{GENDER:$2|blocked}} {{GENDER:$4|$3}} from non-editing actions with an expiration time of $5 $6",
+       "logentry-non-editing-block-reblock": "$1 {{GENDER:$2|changed}} block settings for {{GENDER:$4|$3}} for non-editing actions with an expiration time of $5 $6",
        "logentry-suppress-block": "$1 {{GENDER:$2|blocked}} {{GENDER:$4|$3}} with an expiration time of $5 $6",
        "logentry-suppress-reblock": "$1 {{GENDER:$2|changed}} block settings for {{GENDER:$4|$3}} with an expiration time of $5 $6",
        "logentry-import-upload": "$1 {{GENDER:$2|imported}} $3 by file upload",
        "mw-widgets-titleinput-description-redirect": "redirect to $1",
        "mw-widgets-categoryselector-add-category-placeholder": "Add a category...",
        "mw-widgets-usersmultiselect-placeholder": "Add more...",
+       "mw-widgets-titlesmultiselect-placeholder": "Add more...",
        "date-range-from": "From date:",
        "date-range-to": "To date:",
        "sessionmanager-tie": "Cannot combine multiple request authentication types: $1.",
        "passwordpolicies-policy-passwordcannotmatchblacklist": "Password cannot match specifically blacklisted passwords",
        "passwordpolicies-policy-maximalpasswordlength": "Password must be less than $1 {{PLURAL:$1|character|characters}} long",
        "passwordpolicies-policy-passwordcannotbepopular": "Password cannot be {{PLURAL:$1|the popular password|in the list of $1 popular passwords}}",
-       "easydeflate-invaliddeflate": "Content provided is not properly deflated"
+       "easydeflate-invaliddeflate": "Content provided is not properly deflated",
+       "unprotected-js": "For security reasons JavaScript cannot be loaded from unprotected pages. Please only create javascript in the MediaWiki: namespace or as a User subpage"
 }
index fd9d966..aac234e 100644 (file)
@@ -51,7 +51,8 @@
                        "Gamliel Fishkin",
                        "Kastanoto",
                        "Rafaneta",
-                       "NMaia"
+                       "NMaia",
+                       "Joao Xavier"
                ]
        },
        "tog-underline": "Substrekado de ligiloj:",
@@ -62,7 +63,6 @@
        "tog-extendwatchlist": "Etendi la atentaron por montri ĉiujn ŝanĝojn, ne nur la plej lastajn",
        "tog-usenewrc": "Grupigi ŝanĝojn laŭ paĝo en \"Lastaj ŝanĝoj\" kaj \"Atentaro\" (bezonas Ĝavaskripton)",
        "tog-numberheadings": "Aŭtomate numeri sekciojn",
-       "tog-showtoolbar": "Montri redakto-breton",
        "tog-editondblclick": "Redakti paĝojn per duobla alklako",
        "tog-editsectiononrightclick": "Ŝalti sekcian redaktadon per dekstra musklako de sekciaj titoloj (per Ĝavaskripto)",
        "tog-watchcreations": "Aldoni miajn kreatajn paĝojn kaj miajn alŝutaĵojn al mia atentaro",
        "savechanges": "Konservi ŝanĝojn",
        "publishpage": "Eldoni paĝon",
        "publishchanges": "Publikigi ŝanĝojn",
+       "publishchanges-start": "Publikigi ŝanĝojn…",
        "preview": "Antaŭrigardo",
        "showpreview": "Antaŭrigardo",
        "showdiff": "Montri ŝanĝojn",
index 3a99aaa..52d48e7 100644 (file)
@@ -14,7 +14,6 @@
        "tog-hideminor": "Ocultar ediciones menores de los cambios recientes",
        "tog-hidepatrolled": "Ocultar ediciones patrulladas de los cambios recientes",
        "tog-newpageshidepatrolled": "Ocultar páginas patrulladas de la lista de páginas nuevas",
-       "tog-showtoolbar": "Mostrar barra de edición",
        "tog-oldsig": "Su firma actual:",
        "tog-ccmeonemails": "Enviarme una copia de los correos electrónicos que yo envíe a otros usuarios",
        "sunday": "domingo",
        "tooltip-pt-mycontris": "Una lista de {{GENDER:|sus}} contribuciones",
        "tooltip-pt-login": "Le invitamos a que se registre, aunque no es obligatorio",
        "tooltip-pt-createaccount": "Le invitamos a que cree una cuenta de usuario e inicie sesión, aunque ello no es obligatorio.",
-       "tooltip-ca-talk": "Discusión acerca del artículo",
+       "tooltip-ca-talk": "Discusión acerca de la página de contenido",
        "tooltip-ca-edit": "Editar esta página",
        "tooltip-ca-history": "Versiones anteriores de esta página y sus autores",
        "tooltip-ca-watch": "Añadir esta página a tu lista de seguimiento",
index 3effe3e..087dfbb 100644 (file)
                        "AVIADOR71",
                        "AHmed Khaled",
                        "Caleidoscopic",
-                       "ديفيد"
+                       "ديفيد",
+                       "LittlePuppers"
                ]
        },
        "tog-underline": "Subrayar los enlaces:",
        "tog-extendwatchlist": "Mostrar todos los cambios en la lista de seguimiento, no solo los más recientes",
        "tog-usenewrc": "Agrupar los cambios por página en los cambios recientes y en la lista de seguimiento",
        "tog-numberheadings": "Numerar automáticamente los encabezados",
-       "tog-showtoolbar": "Mostrar la barra de edición",
        "tog-editondblclick": "Editar páginas al hacer doble clic",
        "tog-editsectiononrightclick": "Permitir las modificaciones de sección al hacer clic derecho en sus títulos",
        "tog-watchcreations": "Añadir a mi lista de seguimiento las páginas que cree y los archivos que suba",
        "tooltip-pt-login-private": "Es necesario acceder a una cuenta para utilizar este wiki",
        "tooltip-pt-logout": "Salir de la sesión",
        "tooltip-pt-createaccount": "Te recomendamos crear una cuenta e iniciar sesión; sin embargo, no es obligatorio",
-       "tooltip-ca-talk": "Discusión acerca de la página de contenido",
+       "tooltip-ca-talk": "Discusión acerca de la página",
        "tooltip-ca-edit": "Editar esta página",
        "tooltip-ca-addsection": "Iniciar una sección nueva",
        "tooltip-ca-viewsource": "Esta página está protegida.\nPuedes ver su código fuente",
        "pageinfo-category-files": "Número de archivos",
        "pageinfo-user-id": "Identificador de usuario",
        "pageinfo-file-hash": "Resumen criptográfico",
+       "pageinfo-view-protect-log": "Ver el registro de protecciones de esta página.",
        "markaspatrolleddiff": "Marcar como verificada",
        "markaspatrolledtext": "Marcar esta página como verificada",
        "markaspatrolledtext-file": "Marcar esta versión de archivo como verificada",
        "confirm-unwatch-top": "¿Quitar esta página de tu lista de seguimiento?",
        "confirm-rollback-button": "Aceptar",
        "confirm-rollback-top": "¿Revertir las ediciones a esta página?",
+       "confirm-mcrrestore-title": "Restaurar la revisión",
        "confirm-mcrundo-title": "Deshacer un cambio",
        "mcrundofailed": "Error al deshacer",
        "mcrundo-missingparam": "Faltan parámetros requeridos en la solicitud.",
        "limitreport-ppgeneratednodes": "N.º de nodos generados por el preprocesador",
        "limitreport-postexpandincludesize": "Tamaño de inclusión posexpansión",
        "limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|byte|bytes}}",
-       "limitreport-templateargumentsize": "Argumento del tamaño de la plantilla",
+       "limitreport-templateargumentsize": "Tamaño de los parámetros de plantilla",
        "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|byte|bytes}}",
        "limitreport-expansiondepth": "Profundidad máxima de expansión",
-       "limitreport-expensivefunctioncount": "Cuenta de la función expansiva del analizador",
+       "limitreport-expensivefunctioncount": "Contador de funciones costosas del analizador",
        "limitreport-unstrip-depth": "Profundidad de recursión de función «unstrip»",
-       "limitreport-unstrip-size": "Unstrip tamaño post-expandido",
+       "limitreport-unstrip-size": "Tamaño tras la expansión de «unstrip»",
        "limitreport-unstrip-size-value": "$1/$2 {{PLURAL:$2|byte|bytes}}",
        "expandtemplates": "Expandir plantillas",
        "expand_templates_intro": "Esta página especial toma un texto wiki y expande todas sus plantillas recursivamente.\nTambién expande las funciones sintácticas como <code><nowiki>{{</nowiki>#language:…}}</code>, y variables como\n<code><nowiki>{{</nowiki>CURRENTDAY}}</code>. De hecho, expande casi cualquier cosa que esté entre llaves dobles.",
index c2439de..553cdfe 100644 (file)
@@ -42,7 +42,6 @@
        "tog-extendwatchlist": "Laienda jälgimisloendit, et näha kõiki muudatusi, mitte vaid kõige värskemaid",
        "tog-usenewrc": "Rühmita viimased muudatused ja muudatuste jälgimisloend lehekülje järgi",
        "tog-numberheadings": "Pealkirjade automaatnummerdus",
-       "tog-showtoolbar": "Näita redigeerimise tööriistariba",
        "tog-editondblclick": "Redigeeri lehekülgi topeltklõpsu peale",
        "tog-editsectiononrightclick": "Alusta alaosa redigeerimist paremklõpsuga alaosa pealkirjal",
        "tog-watchcreations": "Lisa jälgimisloendisse minu alustatud leheküljed ja minu üles laaditud failid",
index cfd0594..bec3183 100644 (file)
@@ -33,7 +33,8 @@
                        "MarcoAurelio",
                        "Iñaki LL",
                        "Amaia",
-                       "Matěj Suchánek"
+                       "Matěj Suchánek",
+                       "CiaPan"
                ]
        },
        "tog-underline": "Azpimarratu loturak:",
@@ -44,7 +45,6 @@
        "tog-extendwatchlist": "Jarraipen-zerrenda zabaldu aldaketa guztiak ikusteko, ez bakarrik azken aldaketak",
        "tog-usenewrc": "Azken aldaketetan eta jarraipen-zerrendan aldaketak orrialdearen arabera taldekatu",
        "tog-numberheadings": "Zenbakitu automatikoki atalburuak",
-       "tog-showtoolbar": "Aldaketen tresna-barra erakutsi",
        "tog-editondblclick": "Klik bikoitzaren bitartez orrialdeak aldatu",
        "tog-editsectiononrightclick": "Atalen izenburuetan eskuin klik eginez aldatzea gaitu",
        "tog-watchcreations": "Sortzen ditudan orrialdeak eta fitxategiak nire jarraipen-zerrendara gehitu",
        "userpage-userdoesnotexist": "\"<nowiki>$1</nowiki>\" lankidea ez dago erregistatuta. Mesedez, konprobatu orri hau editatu/sortu nahi duzun.",
        "userpage-userdoesnotexist-view": "\"$1\" erabiltzaile-kontua ez dago erregistraturik.",
        "blocked-notice-logextract": "Erabiltzaile hau blokeatuta dago une honetan.\nAzken blokeoaren erregistroa ageri da behean, erreferentzia gisa:",
-       "clearyourcache": "<strong>Oharra:</strong> Gorde ondoren, zure nabigatzailearen katxea ekidin beharko duzu aldaketak ikusteko.\n* <strong>Firefox / Safari:</strong> <em>Shift</em> tekla sakatu birkargatzeko momentuan, edo <em>Ctrl-Shift-R</em> edo <em>Crtl-F5</em>  sakatu (<em>⌘-R</em> Mac batean)\n* <strong>Google Chrome:</strong> <em>Ctrl-Shift-R </em>  sakatu (<em>⌘-Shift-R</em> Mac batean)\n* <strong>Internet Explorer:</strong> <em>Ctrl</em> tekla sakatu birkargatzeko momentuan, edo <em>Ctrl-F5</em> sakatu\n* <strong>Opera</strong> erabiltzaileek <em>Tresnak → Hobespenak</em> atalera joan eta katxea garbitzeko aukera hautatu",
+       "clearyourcache": "<strong>Oharra:</strong> Gorde ondoren, zure nabigatzailearen katxea ekidin beharko duzu aldaketak ikusteko.\n* <strong>Firefox / Safari:</strong> <em>Shift</em> tekla sakatu birkargatzeko momentuan, edo <em>Ctrl-Shift-R</em> edo <em>Ctrl-F5</em>  sakatu (<em>⌘-R</em> Mac batean)\n* <strong>Google Chrome:</strong> <em>Ctrl-Shift-R </em>  sakatu (<em>⌘-Shift-R</em> Mac batean)\n* <strong>Internet Explorer:</strong> <em>Ctrl</em> tekla sakatu birkargatzeko momentuan, edo <em>Ctrl-F5</em> sakatu\n* <strong>Opera</strong> erabiltzaileek <em>Tresnak → Hobespenak</em> atalera joan eta katxea garbitzeko aukera hautatu",
        "usercssyoucanpreview": "'''Laguntza:''' Zure CSS berria gorde aurretik probatzeko \"{{int:showpreview}}\" botoia erabili.",
        "userjsonyoucanpreview": "<strong>Aholkua:</strong> Gorde aurretik, erabili \"{{int:showpreview}}\" botoia zure JSON berria probatzeko.",
        "userjsyoucanpreview": "'''Laguntza:''' Zure JS berria gorde aurretik probatzeko \"{{int:showpreview}}\" botoia erabili.",
index e4f4c7b..885f9ea 100644 (file)
@@ -22,7 +22,6 @@
        "tog-extendwatchlist": "Aumental la lista de seguimientu pa muestral tolos chambus apricabris, nu solu los úrtimus",
        "tog-usenewrc": "Resartal úrtimus chambus (es mestel JavaScript)",
        "tog-numberheadings": "Autu-numeral entítulus",
-       "tog-showtoolbar": "Muestral la barra d'eición (JavaScript)",
        "tog-editondblclick": "Eital páhinas haziendu dobri click (JavaScript)",
        "tog-editsectiononrightclick": "Premitil eital secionis pulsandu el botón de la derecha<br /> enus entítulus de secionis (JavaScript)",
        "tog-watchcreations": "Vehilal las páhinas que yo crei",
index 1b60832..afaea4b 100644 (file)
        "tog-extendwatchlist": "گسترش فهرست پیگیری‌ها برای نمایش همهٔ تغییرات، نه فقط جدیدترین‌ها",
        "tog-usenewrc": "در تغییرات اخیر و فهرست پیگیری‌ها تغییرات بر پایهٔ صفحه‌ گروه‌بندی شود",
        "tog-numberheadings": "شماره‌گذاری خودکار عنوان‌ها",
-       "tog-showtoolbar": "نوار ابزار ویرایش نمایش داده شود",
        "tog-editondblclick": "ویرایش صفحات با دو کلیک",
        "tog-editsectiononrightclick": "فعال کردن ویرایش بخش‌ها با کلیک راست روی عنوان بخش‌ها",
        "tog-watchcreations": "صفحه‌هایی که می‌سازم و پرونده‌هایی که بارگذاری می‌کنم به فهرست پیگیری‌های من افزوده شود",
        "tog-watchdefault": "صفحه‌ها و پرونده‌هایی که ویرایش می‌کنم به فهرست پیگیری‌های من افزوده شود",
        "tog-watchmoves": "صفحه‌ها و پرونده‌هایی که منتقل می‌کنم به فهرست پی‌گیری‌های من افزوده شود",
        "tog-watchdeletion": "صفحه‌ها و پرونده‌هایی که حذف می‌کنم به فهرست پی‌گیری‌های من افزوده شود",
-       "tog-watchuploads": "پرونده‌های جدیدی که بارگذاری می‌کنم به فهرست پیگیری من افزوده شود",
+       "tog-watchuploads": "پرونده‌های جدیدی که بارگذاری می‌کنم به فهرست پیگیری‌های من افزوده شود",
        "tog-watchrollback": "افزودن صفحاتی که واگردانی می‌کنم به فهرست پیگیری‌های من",
-       "tog-minordefault": "همهٔ ویرایش‌ها به طور پیش‌فرض به عنوان «جزئی» علامت زده شود",
+       "tog-minordefault": "همهٔ ویرایش‌ها به طور پیش‌فرض به عنوان «جزئی» علامت زده شوند",
        "tog-previewontop": "پیش‌نمایش بالای جعبهٔ ویرایش نمایش داده شود",
        "tog-previewonfirst": "پیش‌نمایش هنگام اولین ویرایش نمایش داده شود",
        "tog-enotifwatchlistpages": "اگر صفحه یا پرونده‌ای از فهرست پی‌گیری‌هایم ویرایش شد به من ایمیلی فرستاده شود",
        "tog-watchlisthideminor": "ویرایش‌های جزئی در فهرست پی‌گیری‌ها پنهان شود",
        "tog-watchlisthideliu": "ویرایش‌های کاربران وارد شده به سامانه در فهرست پی‌گیری‌ها پنهان شود",
        "tog-watchlistreloadautomatically": "زمانی که یک پالایه تغییر کرد فهرست پیگیری به صورت خودکار به روز شود (نیازمند جاوااسکریپت)",
-       "tog-watchlistunwatchlinks": "اÙ\81زÙ\88دÙ\86 Ù\85شخصâ\80\8cÚ©Ù\86Ù\86دÙ\87اÛ\8c Ø¹Ø¯Ù\85 Ù¾Û\8cÚ¯Û\8cرÛ\8c/Ù¾Û\8cÚ¯Û\8cرÛ\8c ({{int:Watchlist-unwatch}}/{{int:Watchlist-unwatch-undo}}) Ø¨Ù\87 ØµÙ\81حات Ù¾Û\8cÚ¯Û\8cرÛ\8c Ø¯Ø§Ø±Ø§Û\8c ØªØºÛ\8cÛ\8cرات (جاÙ\88اسکرÛ\8cپت Ù\85Ù\85Ú©Ù\86 Ø§Ø³Øª Ù\86Û\8cاز Ø´Ù\88د)",
+       "tog-watchlistunwatchlinks": "اÙ\81زÙ\88دÙ\86 Ù\85شخصâ\80\8cÚ©Ù\86Ù\86دÙ\87اÛ\8c Ø¹Ø¯Ù\85 Ù¾Û\8cÚ¯Û\8cرÛ\8c/Ù¾Û\8cÚ¯Û\8cرÛ\8c ({{int:Watchlist-unwatch}}/{{int:Watchlist-unwatch-undo}}) Ø¨Ù\87 ØµÙ\81حات Ù¾Û\8cÚ¯Û\8cرÛ\8c Ø¯Ø§Ø±Ø§Û\8c ØªØºÛ\8cÛ\8cرات (براÛ\8c Ø¹Ù\85Ù\84Û\8cات Ø®Ø§Ù\85Ù\88Ø´â\80\8c Ù\88 Ø±Ù\88Ø´Ù\86 Ú©Ø±Ø¯Ù\86Ø\8c Ø¬Ø§Ù\88اسکرÛ\8cپت   Ù\86Û\8cاز Ø§Ø³Øª)",
        "tog-watchlisthideanons": "ویرایش‌های کاربران ناشناس در فهرست پی‌گیری‌ها پنهان شود",
        "tog-watchlisthidepatrolled": "ویرایش‌های گشت‌خورده در فهرست پی‌گیری‌ها پنهان شود",
        "tog-watchlisthidecategorization": "نهفتن رده‌بندی صفحه‌ها",
        "ipb-disableusertalk": "جلوگیری از ویرایشی صفحهً بحث توسط خود کاربر در زمانی که بسته است",
        "ipb-change-block": "بستن دوبارهٔ کاربر با این تنظیم‌ها",
        "ipb-confirm": "تأیید بستن",
+       "ipb-type-label": "نوع",
+       "ipb-pages-label": "صفحات",
        "badipaddress": "نشانی آی‌پی نامجاز",
        "blockipsuccesssub": "بستن با موفقیت انجام شد",
        "blockipsuccesstext": "[[Special:Contributions/$1|$1]] بسته شد.<br />\nبرای بررسی بسته‌شده‌ها [[Special:BlockList|فهرست بسته‌شده‌ها]] را ببینید.",
        "pageinfo-recent-authors": "تعداد نویسندگان یکتای اخیر",
        "pageinfo-magic-words": "{{PLURAL:$1|حرف|حروف}} جادویی ($1)",
        "pageinfo-hidden-categories": "{{PLURAL:$1| ردهٔ|ردهٔ}} پنهان ( $1 )",
-       "pageinfo-templates": "{{PLURAL:$1|الگو|الگو}} استفاده‌شده ($1)",
+       "pageinfo-templates": "{{PLURAL:$1|الگوهای|الگوهای}} استفاده‌شده ($1)",
        "pageinfo-transclusions": "{{PLURAL:$1|صفحهٔ|صفحه‌های}} تراگنجانش‌شده در ($1)",
        "pageinfo-toolboxlink": "اطلاعات صفحه",
        "pageinfo-redirectsto": "تغییرمسیر به",
        "mw-widgets-titleinput-description-redirect": "تغییر مسیر به $1",
        "mw-widgets-categoryselector-add-category-placeholder": "در حال افزودن رده ...",
        "mw-widgets-usersmultiselect-placeholder": "افزودن بیشتر...",
+       "mw-widgets-titlesmultiselect-placeholder": "افزودن بیشتر...",
        "date-range-from": "از تاریخ:",
        "date-range-to": "تا تاریخ:",
        "sessionmanager-tie": "نمی‌توان چندین نوع درخواست هویت‌سنجی را ترکیب کرد: $1.",
index 2c09e0b..3db8b2c 100644 (file)
@@ -70,7 +70,6 @@
        "tog-extendwatchlist": "Laajenna tarkkailulista näyttämään kaikki tehdyt muutokset, eikä vain viimeisimmät",
        "tog-usenewrc": "Ryhmittele muutokset sivun mukaan tuoreiden muutosten listalla ja tarkkailulistalla",
        "tog-numberheadings": "Numeroi otsikot automaattisesti",
-       "tog-showtoolbar": "Näytä työkalupalkki",
        "tog-editondblclick": "Muokkaa sivuja kaksoisnapsautuksella",
        "tog-editsectiononrightclick": "Muokkaa osioita napsauttamalla osion otsikkoa hiiren oikealla painikkeella",
        "tog-watchcreations": "Lisää luomani sivut ja tallentamani tiedostot tarkkailulistalleni",
index af388a4..3f930c7 100644 (file)
@@ -24,7 +24,6 @@
        "tog-extendwatchlist": "Víðka eftirlitslistan fyri at vísa allar broytingar, ikki bara tær seinastu",
        "tog-usenewrc": "Bólka broytingar eftir síðu í seinastu broytingum og eftirlitslita",
        "tog-numberheadings": "Sjálvvirkandi talmerking av yvirskriftum",
-       "tog-showtoolbar": "Vís rættingar-tóllinju",
        "tog-editondblclick": "Rætta síður við at tvíklikkja",
        "tog-editsectiononrightclick": "Rætta reglubrot við at høgraklikkja á reglubrotsyvirskrift",
        "tog-watchcreations": "Legg síður, sum eg stovni og fílur sum eg leggi út, afturat mínum eftirlitslista",
index 07b43d0..f2ef1ef 100644 (file)
        "tog-extendwatchlist": "Étendre la liste de suivi pour afficher toutes les modifications et pas uniquement les plus récentes",
        "tog-usenewrc": "Grouper les changements par page dans les modifications récentes et la liste de suivi",
        "tog-numberheadings": "Numéroter automatiquement les titres de section",
-       "tog-showtoolbar": "Afficher la barre d’outils d’édition",
        "tog-editondblclick": "Modifier les pages avec un double-clic",
        "tog-editsectiononrightclick": "Activer la modification des sections par un clic droit sur les titres de section",
        "tog-watchcreations": "Ajouter à ma liste de suivi les pages que je crée et les fichiers que j’importe",
        "subject-preview": "Aperçu du sujet :",
        "previewerrortext": "Une erreur s’est produite lors de la tentative de prévisualisation de vos modifications.",
        "blockedtitle": "L’utilisateur est bloqué.",
+       "blocked-email-user": "<strong>Votre nom d’utilisateur a été bloqué pour l’envoi de courriels. Vous pouvez toujours modifier d’autres pages sur ce wiki.</strong> Vous pouvez voir tous les détails du blocage sur [[Special:MyContributions|contributions du compte]].\n\nCe blocage a été fait par $1.\n\nLe motif fourni est <em>$2</em>.\n\n* Début du blocage : $8\n* Expiration du blocage : $6\n* Cible souhaitée du blocage : $7\n* ID du blocage #$5",
+       "blockedtext-partial": "<strong>Votre nom d’utilisateur ou votre adresse IP a été bloqué pour effectuer des modifications sur cette page. Vous pouvez toujours modifier d’autres pages sur ce wiki.</strong> Vous pouvez voir tous les détails sur ce blocage sur [[Special:MyContributions|contributions du compte]].\n\nLe blocage a été effectué par $1.\n\nLe motif fourni est <em>$2</em>.\n\n* Début du blocage : $8\n* Expiration du blocage : $6\n* Cible souhaitée du blocage : $7\n* ID du blocage #$5",
        "blockedtext": "<strong>Votre compte utilisateur ou votre adresse IP a été bloqué.</strong>\n\nLe blocage a été effectué par $1.\nLa raison invoquée est la suivante : <em>$2</em>.\n\n* Début du blocage : $8\n* Expiration du blocage : $6\n* Compte bloqué : $7.\n\nVous pouvez contacter $1 ou un autre [[{{MediaWiki:Grouppage-sysop}}|administrateur]] pour en discuter.\nVous ne pouvez utiliser la fonction « {{int:emailuser}} » que si une adresse de courriel valide est spécifiée dans vos [[Special:Preferences|préférences]] et que si cette fonctionnalité ne vous a pas été bloquée.\nVotre adresse IP actuelle est $3 et votre identifiant de blocage est $5.\nVeuillez inclure tous les détails ci-dessus dans chacune des requêtes que vous ferez.",
        "autoblockedtext": "Votre adresse IP a été bloquée automatiquement car elle a été utilisée par un autre utilisateur, lui-même bloqué par $1.\nLa raison invoquée est :\n\n: <em>$2</em>.\n\n* Début du blocage : $8\n* Expiration du blocage : $6\n* Compte bloqué : $7\n\nVous pouvez contacter $1 ou l’un des autres [[{{MediaWiki:Grouppage-sysop}}|administrateurs]] pour discuter de ce blocage.\n\nNotez que vous ne pourrez utiliser la fonctionnalité « {{int:emailuser}} » que si vous avez une adresse de courriel validée dans vos [[Special:Preferences|préférences]] et que cette fonctionnalité ne vous a pas été désactivée.\n\nVotre adresse IP actuelle est $3, et le numéro de blocage est $5.\nVeuillez inclure tous les détails ci-dessus dans chacune des requêtes que vous ferez.",
        "systemblockedtext": "Votre nom d'utilisateur ou votre adresse IP ont été bloqués automatiquement par MediaWiki.\nLa raison donnée est la suivante:\n\n: <em>$2</em>.\n\n* Le début du blocage: $8\n* Expiration du délai de blocage: $6\n* Elément concerné: $7\n\nVotre adresse IP actuelle est $3.\nVeuillez inclure tous les détails ci-dessus dans chacune des requêtes que vous ferez.",
        "prefixindex": "Toutes les pages commençant par…",
        "prefixindex-namespace": "Toutes les pages avec préfixe (espace de noms $1)",
        "prefixindex-submit": "Lister",
-       "prefixindex-strip": "Enlever le préfixe dans la liste",
+       "prefixindex-strip": "Masquer le préfixe dans les résultats",
        "shortpages": "Pages courtes",
        "longpages": "Pages longues",
        "deadendpages": "Pages en impasse",
        "ipb-disableusertalk": "Empêcher l'utilisateur de modifier sa page de discussion pendant le blocage",
        "ipb-change-block": "Bloquer à nouveau l'utilisateur avec ces paramètres",
        "ipb-confirm": "Confirmer le blocage",
+       "ipb-sitewide": "À tout le site",
+       "ipb-partial": "Partiel",
+       "ipb-type-label": "Type",
+       "ipb-pages-label": "Pages",
        "badipaddress": "Adresse IP incorrecte",
        "blockipsuccesssub": "Blocage réussi",
        "blockipsuccesstext": "[[Special:Contributions/$1|$1]] a été bloqué{{GENDER:$1||e}}.<br />\nConsultez la [[Special:BlockList|liste des blocages]] pour voir les utilisateurs bloqués.",
        "createaccountblock": "création de compte bloquée",
        "emailblock": "courriel bloqué",
        "blocklist-nousertalk": "ne peut pas modifier sa propre page de discussion",
+       "blocklist-editing": "modification",
+       "blocklist-editing-sitewide": "modification (tout le site)",
        "ipblocklist-empty": "La liste des adresses IP bloquées est actuellement vide.",
        "ipblocklist-no-results": "L'adresse IP ou l'utilisateur demandé n'est pas bloqué.",
        "blocklink": "bloquer",
        "logentry-block-block": "$1 {{GENDER:$2|a bloqué}} {{GENDER:$4|$3}} avec la durée $5 $6",
        "logentry-block-unblock": "$1 {{GENDER:$2|a débloqué}} {{GENDER:$4|$3}}",
        "logentry-block-reblock": "$1 {{GENDER:$2|a modifié}} les paramètres de blocage pour {{GENDER:$4|$3}} avec une durée de $5 $6",
+       "logentry-partialblock-block": "$1 {{GENDER:$2|a bloqué}} {{GENDER:$4|$3}} pour modifier {{PLURAL:$8|la page|les pages}} $7 avec une date d’expiration à $5 $6",
+       "logentry-partialblock-reblock": "$1 {{GENDER:$2|a modifié}} les paramètres du blocage pour {{GENDER:$4|$3}} empêchant les modifications sur {{PLURAL:$8|la page|les pages}} $7 avec une date d’expiration au $5 $6",
+       "logentry-non-editing-block-block": "$1 {{GENDER:$2|a bloqué}} {{GENDER:$4|$3}} pour les actions autres que la modification avec une date d’expiration au $5 $6",
+       "logentry-non-editing-block-reblock": "$1 {{GENDER:$2|a modifié}} les paramètres du blocage de {{GENDER:$4|$3}} pour les actions autres que la modification avec une date d’expiration au $5 $6",
        "logentry-suppress-block": "$1 {{GENDER:$2|a bloqué}} {{GENDER:$4|$3}} avec une durée de $5 $6",
        "logentry-suppress-reblock": "$1 {{GENDER:$2|a modifié}} les paramètres de blocage pour {{GENDER:$4|$3}} avec une durée de $5 $6",
        "logentry-import-upload": "$1 {{GENDER:$2|a importé}} $3 par téléversement de fichier",
        "mw-widgets-titleinput-description-redirect": "redirection vers $1",
        "mw-widgets-categoryselector-add-category-placeholder": "Ajouter une catégorie...",
        "mw-widgets-usersmultiselect-placeholder": "Ajouter plus ...",
+       "mw-widgets-titlesmultiselect-placeholder": "Ajouter davantage…",
        "date-range-from": "À partir du :",
        "date-range-to": "Jusqu’au :",
        "sessionmanager-tie": "Impossible de combiner des types multiples de demandes d’authentification : $1.",
        "passwordpolicies-policy-passwordcannotmatchblacklist": "Les mots de passe ne peuvent pas être identiques à ceux qui sont dans la liste noire.",
        "passwordpolicies-policy-maximalpasswordlength": "Les mots de passe doivent avoir moins de $1 caractère{{PLURAL:$1||s}} de long",
        "passwordpolicies-policy-passwordcannotbepopular": "Le mot de passe ne peut pas être {{PLURAL:$1|le mot de passe populaire|dans la liste des $1 mots de passe populaires}}",
-       "easydeflate-invaliddeflate": "Le contenu fourni n'est pas correctement développé"
+       "easydeflate-invaliddeflate": "Le contenu fourni n'est pas correctement développé",
+       "unprotected-js": "Pour des raisons de sécurité, JavaScript ne peut pas être chargé depuis des pages non protégées. Veuillez ne créer du javascript que dans l’espace de noms MediaWiki: ou comme sous-page utilisateur"
 }
index c0de588..9c338a3 100644 (file)
@@ -21,7 +21,6 @@
        "tog-extendwatchlist": "Agrandir la liste des pages guettées pour montrer tous les changements",
        "tog-usenewrc": "User les derniers changements improuvés (JavaScript)",
        "tog-numberheadings": "Mettre les numéros sus les en-têtes",
-       "tog-showtoolbar": "Montrer la barre d'outils des changements (nécessite JavaScript)",
        "tog-editondblclick": "Faire un clic-double pour changer la page (nécessite JavaScript)",
        "tog-editsectiononrightclick": "Changer une section en faisant un clic droit sus son nom (JavaScript)",
        "tog-watchcreations": "Additionner les pages que je crée à ma liste des pages guettées",
index 86001dc..914bea9 100644 (file)
@@ -21,7 +21,6 @@
        "tog-extendwatchlist": "Èpatar la lista de gouârda por montrar tôs los changements et pas mas que los ples novéls",
        "tog-usenewrc": "Rassemblar los changements per pâge dedens los dèrriérs changements et la lista de gouârda",
        "tog-numberheadings": "Numerotar ôtomaticament los titros de sèccion",
-       "tog-showtoolbar": "Montrar la bârra d’outils de changement",
        "tog-editondblclick": "Changiér de pâges avouéc un doblo-cllic",
        "tog-editsectiononrightclick": "Activar lo changement de sèccions per un cllic drêt dessus lors titros",
        "tog-watchcreations": "Apondre a ma lista de gouârda les pâges que fé et pués los fichiérs que tèlèchârjo",
index 649b6f5..b655f35 100644 (file)
@@ -25,7 +25,6 @@
        "tog-extendwatchlist": "Ütjwidjet list faan sidjen, diar dü uun't uug behual wel",
        "tog-usenewrc": "Ütjwidjet uunwisin faan a ''Leetst feranrangen'' an bi a sidjen, diar dü ''Uun't uug behual'' wel",
        "tog-numberheadings": "Auerskraften automaatisk numeriare",
-       "tog-showtoolbar": "Werktjüch tu bewerkin wise",
        "tog-editondblclick": "Sidjen mä dobelklik bewerke",
        "tog-editsectiononrightclick": "Enkelt kirwer mä rochtsklik bewerke",
        "tog-watchcreations": "Salew maaget sidjen an huuchlooset datein leewen uun't uug behual",
index d4cc49e..dd51ddc 100644 (file)
@@ -22,7 +22,6 @@
        "tog-extendwatchlist": "Slargje la liste des controladis specialis, no dome aes ultimis",
        "tog-usenewrc": "Ragrupe lis modifichis par pagjine intes ultimis modifichis e inati oservâts speciai",
        "tog-numberheadings": "Numerazion automatiche dai titui",
-       "tog-showtoolbar": "Mostre sbare dai imprescj pe modifiche (JavaScript)",
        "tog-editondblclick": "Cambie lis pagjinis fracant dôs voltis",
        "tog-editsectiononrightclick": "Modifiche une sezion fracant cul tast diestri<br /> sui titui des sezions",
        "tog-watchcreations": "Zonte  lis pagjinis creadis e i file cjariats aes oservadis specials",
index c7025f7..6e06565 100644 (file)
@@ -30,7 +30,6 @@
        "tog-extendwatchlist": "Wreidzje folchlist út om alle wizigings sjen te litten, net allinnich de lêste wizigings",
        "tog-usenewrc": "Utwreide ferzje fan 'Koartlyn feroare' brûke (JavaScript fereaske)",
        "tog-numberheadings": "Koppen fansels nûmerje",
-       "tog-showtoolbar": "Brûk arkbalke by bewurkjen",
        "tog-editondblclick": "Dûbelklik jout bewurkingsside (freget JavaScript)",
        "tog-editsectiononrightclick": "Rjochtsklik op sekjsetitels jout seksjebewurking (freget JavaScript)",
        "tog-watchcreations": "Set siden dy't jo begjinne yn jo folchlist",
index e37a2ca..5535f19 100644 (file)
@@ -32,7 +32,6 @@
        "tog-extendwatchlist": "Leathnaigh an liosta faire chun gach athrú cuí a thaispeáint",
        "tog-usenewrc": "Athruithe a ghrúpáil de réir leathanaigh sna hathruithe le déanaí agus sa liosta faire",
        "tog-numberheadings": "Uimhrigh ceannteidil go huathoibríoch",
-       "tog-showtoolbar": "Taispeáin an barra uirlisí eagarthóireachta",
        "tog-editondblclick": "Déchliceáil chun leathanaigh a chur in eagar",
        "tog-editsectiononrightclick": "Cumasaigh mír-eagarthóireacht le deaschliceáil ar cheannteidil",
        "tog-watchcreations": "Cuir ar mo liosta faire leathanaigh a chruthaím",
index 46e6617..3e53476 100644 (file)
@@ -16,7 +16,6 @@
        "tog-extendwatchlist": "İlerlemiş bakmaa listası",
        "tog-usenewrc": "İlerlemiş bitki diişmäkler listası (JavaScript uymêêr)",
        "tog-numberheadings": "Başlıklara avtomatik nomer yaz",
-       "tog-showtoolbar": "Diişmäk yapar känä yardımcı tuşları göster. (JavaScript)",
        "tog-editondblclick": "Sayfayı çift tuşlayarak diiştirmää başla (JavaScript)",
        "tog-editsectiononrightclick": "Bölüm başlıına saa tuşla basarak bölümü düzmää izin ver.(JavaScript)",
        "tog-watchcreations": "Yarattıım sayfaları bakmaa listama ekle",
index d59ed57..0c54f4b 100644 (file)
@@ -29,7 +29,6 @@
        "tog-extendwatchlist": "增加监视清单来显示全部改动,不净系最晏𠮶",
        "tog-usenewrc": "用强化版最晏𠮶改动(需要JavaScript)",
        "tog-numberheadings": "标题自动编号",
-       "tog-showtoolbar": "显示编辑工具栏(JavaScript)",
        "tog-editondblclick": "按两下改吖(JavaScript)",
        "tog-editsectiononrightclick": "可以按右键来编写只把子段落(JavaScript)",
        "tog-watchcreations": "拿偶开嘞𠮶页面加到偶𠮶监视列表",
index f8dcab3..ecac1c6 100644 (file)
@@ -23,7 +23,6 @@
        "tog-extendwatchlist": "增加監視清單來顯示全部改動,不淨係最晏嗰",
        "tog-usenewrc": "用強化版最晏嗰改動(需要JavaScript)",
        "tog-numberheadings": "標題自動編號",
-       "tog-showtoolbar": "顯示編輯工具欄(JavaScript)",
        "tog-editondblclick": "捺兩下來改下(JavaScript)",
        "tog-editsectiononrightclick": "可以按右鍵來編寫隻把子段落(JavaScript)",
        "tog-watchcreations": "搦我開嗰頁面加到我嗰監視列表",
index 76a9b41..aa48de5 100644 (file)
@@ -13,7 +13,6 @@
        "tog-extendwatchlist": "Étann lis di swivi pou afiché tout modifikasyon-yan é pa inikman pli résan-yan",
        "tog-usenewrc": "Groupé chanjman-yan pa paj annan modifikasyon résan-yan é lis di swivi-a",
        "tog-numberheadings": "Niméroté otomatikman tit di sèksyon",
-       "tog-showtoolbar": "Afiché bar di zouti di édisyon",
        "tog-editondblclick": "Modifyé paj-ya ké roun doub-klik",
        "tog-editsectiononrightclick": "Agtivé modifikasyon-an dé sègsyon pa roun klik drèt asou tit-ya di sègsyon",
        "tog-watchcreations": "Ajouté à mo lis di swivi paj-ya ki mo kréyé é fiché-ya ki mo ka enpòrté",
        "collapsible-collapse": "Roupliyé",
        "collapsible-expand": "Dévlopé",
        "confirmable-confirm": "Ès zòt sir{{GENDER:$1||}} ?",
-       "confirmable-yes": "Wi",
+       "confirmable-yes": "Enren",
        "confirmable-no": "Awa",
        "thisisdeleted": "Ès zòt ka déziré afiché oben rèstoré $1 ?",
        "viewdeleted": "Wè $1 ?",
        "badarticleerror": "Sa agsyon pa pouvé fika éfègtchwé asou sa paj.",
        "cannotdelete": "Enposib di siprimen paj-a oben fiché-a « $1 ».\nSiprésyon-an pitèt ja té éfègtchwé pa rounòt moun.",
        "cannotdelete-title": "Enposib di siprimen paj-a « $1 »",
+       "delete-scheduled": "Paj-a « $1 » sa progranmen pou fika siprimen.\nSouplé, pasyanté.",
        "delete-hook-aborted": "Siprésyon annilé pa roun ègstansyon.\nPyès lèsplikasyon té fourni.",
        "no-null-revision": "Enposib di kréyé roun nouvèl révizyon vid pou paj-a « $1 »",
        "badtitle": "Movè tit",
        "customcssprotected": "Zòt pa gen pèrmisyon-an di modifyé sa féy di èstil CSS, pas li ka kontni paranmèt pésonnèl-ya di rounòt itilizatò.",
        "customjsonprotected": "Zòt pa gen drwè di modifyé sa paj JSON pas li ka kontni paranmèt pésonnèl-ya di rounòt itilizatò.",
        "customjsprotected": "Zòt pa gen pèrmisyon-an di modifyé sa paj di JavaScript, pas li ka kontni paranmèt pésonnèl-ya di rounòt itilizatò.",
+       "sitecssprotected": "Zòt pa gen drwè di modifyé sa paj CSS pas sa pouvé afègté tout vizitò-ya.",
+       "sitejsonprotected": "Zòt pa gen drwé di modifyé sa paj JSON pas sa pouvé afègté tout vizitò-ya.",
+       "sitejsprotected": "Zòt pa gen drwè di modifyé sa paj JavaScript pas sa pouvé afègté tout vizitò-ya.",
        "mycustomcssprotected": "Zòt pa gen drwè di modifyé sa paj CSS.",
        "mycustomjsonprotected": "Zòt pa gen drwè di modifyé sa paj JSON.",
        "mycustomjsprotected": "Zòt pa gen drwè di modifyé sa paj JavaScript.",
        "login-migrated-generic": "Zòt kont té migré, é zòt non d'itilizatò pa ka ègzisté òkò asou sa wiki.",
        "loginlanguagelabel": "Lanng : $1",
        "suspicious-userlogout": "Zòt doumann di konnègsyon té roufizé pas i sanblé ki li té voyé pa roun navigatò défègtché oben dipi kach-a di roun sèrvis mandatèr.",
-       "createacct-another-realname-tip": "Véritab non sa òpsyonèl.\nSi zòt désidé di fourni li, i ké fika itilizé pou krédité lotò di so travay.",
+       "createacct-another-realname-tip": "Véritab non-an sa òpsyonnèl.\nSi zòt désidé di fourni li, i ké fika itilizé pou krédité lotò-a di so travay-ya.",
        "pt-login": "Konnègté so kò",
        "pt-login-button": "Konnègté so kò",
        "pt-login-continue-button": "Kontinwé konnègsyon-an",
        "botpasswords-restriction-failed": "Rèstrigsyon-yan di modipas di robo ka anpéché sa konnègsyon.",
        "botpasswords-invalid-name": "Non-an d'itilizatò spésifyé pa ka kontni di séparatò di mo di pas di robo (« $1 »).",
        "botpasswords-not-exist": "{{GENDER:$1|Itilizatò|Itilizatris}}-a « $1 » pa gen di mo di pas di robo nonmen « $2 ».",
+       "botpasswords-needs-reset": "Modipas-a di robo di non « $2 » di itilizatò-a « $1 » divèt fika réynisyalizé.",
        "resetpass_forbidden": "Mo di pas pa pouvé fika chanjé.",
        "resetpass_forbidden-reason": "Mo di pas pa pouvé fika modifyé : $1",
        "resetpass-no-info": "Zòt divèt fika konnègté pou agsédé dirèkman à sa paj.",
        "editing": "Modifikasyon di $1",
        "creating": "Kréyasyon di $1",
        "editingsection": "Modifikasyon di $1 (sèksyon)",
+       "yourtext": "Zòt tègs",
+       "yourdiff": "Diférans",
        "templatesused": "{{PLURAL:$1|Modèl itilizé}} pa sa paj :",
        "templatesusedpreview": "{{PLURAL:$1|Modèl itilizé}} annan sa prévizwalizasyon :",
        "template-protected": "(protéjé)",
        "permissionserrorstext-withaction": "Zòt pa pouvé $2, pou {{PLURAL:$1|rézon swivant}} :",
        "recreate-moveddeleted-warn": "<strong>Panga : zòt ka roukréyé roun paj ki té présédanman siprimen.</strong>\n\nAsouré-zòt ki i sa pèrtinan di pourswiv modifikasyon-yan asou sa paj.\nJournal-ya dé siprésyon é dé déplasman pou sa paj sa fourni isi pou lenfòrmasyon :",
        "moveddeleted-notice": "Sa paj té siprimen. \nJournal-ya dé siprésyon, dé protègsyon é dé déplasman pou paj-a sa afiché anba pou référans.",
+       "edit-conflict": "Trafalga di modifikasyon.",
+       "postedit-confirmation-created": "Paj-a té fika kréyé.",
+       "invalid-content-data": "Data di kontni pa valid",
        "content-model-wikitext": "wikitèks",
+       "content-model-text": "tègs groso",
+       "content-model-javascript": "JavaScript",
+       "content-json-empty-object": "Lòbjè vid",
+       "content-json-empty-array": "Tablo vid",
        "undo-failure": "Sa modifikasyon pa pouvé fika défè : sa-a té ké rantré an konfli ké modifikasyon entèrmédjèr-ya.",
        "viewpagelogs": "Wè opérasyon-yan asou sa paj",
+       "nohistory": "I pa ka ègzisté di listorik dé modifikasyon pou sa paj.",
+       "currentrev": "Vèrsyon atchwèl",
        "currentrev-asof": "Vèrsyon atchwèl daté di $1",
        "revisionasof": "Vèrsyon di $1",
        "revision-info": "Révizyon daté di $1 pa {{GENDER:$6|$2}}$7",
        "nextrevision": "Vèrsyon swivant →",
        "currentrevisionlink": "Wè vèrsyon atchwèl-a",
        "cur": "atch",
+       "next": "swivan",
        "last": "dif",
+       "page_first": "pronmyé",
+       "page_last": "dannyé",
        "histlegend": "Sélègsyon di diff : koché bouton radjo-ya dé vèrsyon ki à konparé é apiyé asou rantré oben asou bouton-an ki anba.<br />\nLéjann : <strong>({{int:cur}})</strong> = diférans ké dannyé vèrsyon-an, <strong>({{int:last}})</strong> = diférans ké vèrsyon présédan-an, <strong>{{int:minoreditletter}}</strong> = modifikasyon minò.",
        "history-fieldset-title": "Sasé dé révizyon",
        "histfirst": "Pli ansyenn",
        "histlast": "Pli résan-yan",
+       "historyempty": "(vid)",
        "history-feed-title": "Listorik dé vèrsyon",
        "history-feed-description": "Listorik dé vèrsyon pou sa paj asou wiki-a",
        "history-feed-item-nocomment": "$1 à $2",
        "rev-delundel": "afiché/maské",
+       "rev-showdeleted": "afiché",
+       "revdelete-show-file-submit": "Enren",
+       "revdelete-hide-comment": "Rézimen di modifikasyon",
+       "revdelete-log": "Motif",
+       "pagehist": "Listorik di paj-a",
+       "revdelete-reasonotherlist": "Ròt rézon",
        "mergelog": "Journal dé fizyon",
        "history-title": "$1 : Listorik dé vèrsyon",
        "difference-title": "$1 : Diférans ant vèrsyon",
        "searchprofile-articles-tooltip": "Sasé annan $1",
        "searchprofile-images-tooltip": "Sasé dé fiché miltimédja",
        "searchprofile-everything-tooltip": "Sasé annan tout sit-a (osi annan paj di diskisyon-yan)",
-       "searchprofile-advanced-tooltip": "Sasé annan lèspas di non pèrsonalizé",
+       "searchprofile-advanced-tooltip": "Sasé annan lèspas di non-yan ki pésonnalizé",
        "search-result-size": "$1 ({{PLURAL:$2|1 mo|$2}})",
        "search-result-category-size": "$1 manm{{PLURAL:$1|}} ($2 soukatégori{{PLURAL:$2|}}, $3 fiché{{PLURAL:$3|}})",
        "search-redirect": "(Roudirègsyon dipi $1)",
        "speciallogtitlelabel": "Sib (tit oben {{ns:user}}:non di itilizatò) :",
        "log": "Journal d’opérasyon",
        "all-logs-page": "Tout journal piblik",
-       "alllogstext": "Lafichaj konbinen di tout journal-ya ki disponnib asou {{SITENAME}}.\nZòt pouvé pèrsonalizé lafichaj an sélègsyonnan tip di journal-a, non di itilizatò-a oben paj-a ki konsèrnen (sa Dé dannyé sa sansib Ã  lakas).",
+       "alllogstext": "Lafichaj konbinen di tout journal-ya ki disponnib asou {{SITENAME}}.\nZòt pouvé pésonnalizé lafichaj-a an sélègsyonnan tip di journal-a, non di itilizatò-a oben paj-a ki konsèrnen (sa Dé dannyé sa sansib Ã  lakas-a).",
        "logempty": "Pyès lopérasyon ki ka korèsponn annan journal-ya.",
        "allpages": "Tout paj-ya",
        "allarticles": "Tout paj-ya",
        "pageinfo-templates": "{{PLURAL:$1|Modèl enkli}} ($1)",
        "pageinfo-toolboxlink": "Lenfòrmasyon asou paj-a",
        "pageinfo-contentpage": "Konté kou paj di kontni",
-       "pageinfo-contentpage-yes": "Wi",
+       "pageinfo-contentpage-yes": "Enren",
        "patrol-log-page": "Journal dé roulèktir",
        "previousdiff": "← Modifikasyon présédant",
        "nextdiff": "Modifikasyon swivant →",
        "specialpages": "Paj èspésyal",
        "tag-filter": "Filtré [[Special:Tags|baliz]] :",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Baliz}}]] : $2)",
-       "tags-active-yes": "Wi",
+       "tags-active-yes": "Enren",
        "tags-active-no": "Awa",
        "tags-hitcount": "$1 modifikasyon{{PLURAL:$1|}}",
        "logentry-delete-delete": "$1 siprimen paj-a $3",
index 9bdd762..c4e700b 100644 (file)
@@ -22,7 +22,6 @@
        "tog-extendwatchlist": "Leudaich an clàr-faire gus an seall e gach mùthadh 's chan ann an fheadhainn as ùire a-mhàin",
        "tog-usenewrc": "Buidhnich na h-atharraichean a-rèir duilleige sna mùthaidhean ùra agus air a' chlàr-fhaire",
        "tog-numberheadings": "Cuir àireamhan ri ceann-sgrìobhaidhean leis fhèin",
-       "tog-showtoolbar": "Seall am bàr-inneal deasachaidh",
        "tog-editondblclick": "Tòisich air deasachadh duilleige le briogadh dùbailte",
        "tog-editsectiononrightclick": "Cuir an comas deasachadh earrainn le briogadh deas air tiotal na h-earrainn",
        "tog-watchcreations": "Cuir duilleagan a chruthaicheas mi air a' chlàr-fhaire agam",
index e3cacc2..f0ecb01 100644 (file)
@@ -39,7 +39,6 @@
        "tog-extendwatchlist": "Expandir a lista de vixilancia para amosar todos os cambios e non só os máis recentes",
        "tog-usenewrc": "Agrupar as modificacións por páxina nos cambios recentes e na lista de vixilancia",
        "tog-numberheadings": "Numerar automaticamente as cabeceiras",
-       "tog-showtoolbar": "Amosar a barra de ferramentas de edición",
        "tog-editondblclick": "Facer dobre clic para editar as páxinas",
        "tog-editsectiononrightclick": "Permitir a edición de seccións premendo co botón dereito nos títulos das seccións",
        "tog-watchcreations": "Engadir as páxinas que cree e os ficheiros que cargue á miña lista de vixilancia",
        "badarticleerror": "Non pode efectuarse esa acción nesta páxina.",
        "cannotdelete": "Non se puido borrar a páxina ou imaxe \"$1\".\nSe cadra, xa a borrou alguén.",
        "cannotdelete-title": "Non se pode borrar a páxina \"$1\"",
+       "delete-scheduled": "Programouse a eliminación da páxina \"$1\".\nPor favor, agarde.",
        "delete-hook-aborted": "O borrado foi abortado polo asociador.\nEste non deu ningunha explicación.",
        "no-null-revision": "Non se puido crear a nova revisión nula para a páxina \"$1\"",
        "badtitle": "Título incorrecto",
        "prefixindex": "Todas as páxinas con prefixo",
        "prefixindex-namespace": "Todas as páxinas con prefixo (espazo de nomes $1)",
        "prefixindex-submit": "Amosar",
-       "prefixindex-strip": "Quitar o prefixo na lista",
+       "prefixindex-strip": "Agochar o prefixo nos resultados",
        "shortpages": "Páxinas curtas",
        "longpages": "Páxinas longas",
        "deadendpages": "Páxinas sen ligazóns cara a outras",
        "movepage-moved": "<strong>A páxina \"$1\" foi movida a \"$2\"</strong>",
        "movepage-moved-redirect": "Creouse unha redirección da primeira cara á segunda.",
        "movepage-moved-noredirect": "Cancelouse a creación da redirección da primeira cara á segunda.",
+       "movepage-delete-first": "A páxina obxectivo ten demasiadas revisións como para eliminala como parte dun movemento de páxina. Por favor, elimine primeiro a páxina manualmente, e ténteo de novo a continuación.",
        "articleexists": "Xa existe unha páxina con ese nome, ou o nome que escolleu non é válido.\nPor favor, escolla outro nome.",
        "cantmove-titleprotected": "Non pode mover a páxina a este destino, xa que o novo título foi protexido fronte á creación",
        "movetalk": "Mover a páxina de conversa, se cómpre",
index f40ff1e..46c062d 100644 (file)
@@ -17,7 +17,6 @@
        },
        "tog-hideminor": "हालींच बदल केल्ल्यांतले बारीक संपादन लिपय",
        "tog-numberheadings": "माथाळे स्वंय क्रमांकित कर",
-       "tog-showtoolbar": "संपादन उपकरणाची पट्टी दाखय",
        "tog-editondblclick": "दोट्टी क्लिकाचेर पानां संपादीत कर",
        "tog-watchdefault": "हांवें संपादीत केल्लीं पानां आनी फायल म्हजे सादुरवळेरीक जोड",
        "tog-previewontop": "संपादन पेटीच्या मुखार प्रीव्यु दाखय",
index 4a36b53..36ee01e 100644 (file)
@@ -10,7 +10,6 @@
        "tog-underline": "Zoddnienche adhorekhan",
        "tog-hideminor": "Halinch bodol kel'leantle dhakte bodol lipoi",
        "tog-numberheadings": "Mathalle sway kromankit kor",
-       "tog-showtoolbar": "Bodolache hathiar-potti dakhoi",
        "tog-editondblclick": "Dotti klickacher pananche sonskoron kor",
        "tog-watchdefault": "Hanv bodolta tim panam moji sadurvollerint zod",
        "tog-previewontop": "Sonskoron petie mukhar zolok dakhoi",
        "nosuchusershort": "\"$1\" hea nanvan konn vapurpi na.\nNanv boroitana chuk zali gai?",
        "nouserspecified": "Vapurpeachem nanv diunk-uch zai.",
        "login-userblocked": "Hea vapurpeak addaila. Sotrorombh korunk zaina.",
-       "wrongpassword": "Chukichem gupitutor ghatlam.\nUpkar korun portun proyotn kor.",
+       "wrongpassword": "Chukichem vaporpeachem nanv vo gupitutor ghatlam.\nUpkar korun portun proyotn kor.",
        "wrongpasswordempty": "Gupitutor ghalunk na.\nUpkar korun portun proyotn kor.",
        "passwordtoolong": "Gupitutor {{PLURAL:$1|1 vornn|$1 vornnam}} proros vhodlem asunk zaina.",
        "password-name-match": "Tujem gupitutor vapurpeachea nanva poros vegllem asunk zai.",
        "showpreview": "Zholok dakhoi",
        "showdiff": "Bodolpam dakhoi",
        "anoneditwarning": "<strong>Chotrai:</strong> Tuven sotrorombh korunk nai. Tu bodlopam korit zalear tuzo internet potto soglleank polleunk zatelem. Tu <strong>[$1 sotrorombh korit]</strong> vo <strong>[$2 kont rochit]</strong> zalear, tujeo bodlopam tuzo vagddiachem nanvak zoddteleo ani anik-ui faide asat.",
-       "missingcommenttext": "Upkar korun tumcheo xiro sokoil boroi.",
+       "missingcommenttext": "Upkar korun tumcheo xiro boroi.",
        "blockedtitle": "Vapurpeak addaila",
        "blockednoreason": "Kainch karonn diunk na",
        "loginreqtitle": "Sotrorombh gorjechem",
        "filehist-dimensions": "Akar",
        "filehist-comment": "vivek",
        "imagelinks": "Failicho vapor",
-       "linkstoimage": "{{PLURAL:$1|Hem pan|$1 Him panam}} hea failik {{PLURAL:$1|zoddtta|zoddttat}}",
-       "nolinkstoimage": "Hea failik zoddpi panam nant",
+       "linkstoimage": "{{PLURAL:$1|Hem pan|$1 Him panam}} hi fayl {{PLURAL:$1|vaporta|vaportat}}:",
+       "nolinkstoimage": "Hea faylik vaportat toslim panam nant",
        "sharedupload-desc-here": "Hi fail $1, hachi ani dusrea prokolpanim haka uzar korunk zata.\nHachem [$2 failichem vivron panan] asleli vivron khala dilea:",
        "upload-disallowed-here": "Tu hea faili voir borounk xokonai",
        "filedelete-otherreason": "Dusrem/aniki karon:",
        "watch": "Nodor dovor",
        "watchthispage": "Hea panar dixtt dovor",
        "unwatch": "Nodor kadd",
-       "watchlist-details": "Tujea sadurvollerint {{PLURAL:$1|$1 pan asa|$1 panam asat}}, ulovpachim panam veglim mezonastanam.",
+       "watchlist-details": "Tujea Sadurvollerint {{PLURAL:$1|$1 pan asa|$1 panam asat}} (te-bhair ulovpachim panam asat).",
        "wlheader-showupdated": "Tujea fatle bhette san bodol'lean tim panam '''datt''' dakhoileant.",
        "wlshowlast": "Xevottchim $1 voram $2 dis  dakhoi",
        "watchlist-options": "Sadurvollericheo poryay",
index 0acbe20..4cf3bd2 100644 (file)
@@ -19,7 +19,6 @@
        "tog-extendwatchlist": "Bu'ade daputari he'awasiyalo mopobilohu nga'amila u loboli'a, diila bo ubohu",
        "tog-usenewrc": "Tayade u biloli'o to bibilohu halaman lobohuwa wawu daputari he awasiyalo",
        "tog-numberheadings": "Otomatis modulade nomoro",
-       "tog-showtoolbar": "Popobilohe pilakasi pomoli'o",
        "tog-editondblclick": "Boli'a halaman lo klik po'oluwo",
        "tog-editsectiononrightclick": "Popohunawa momoli'a tayadu wolo motepu olowala to judul lo tayadu",
        "tog-watchcreations": "Duhengi halaman pilohutu'u wawu berkas diletohu ode daputari he awasiyalo",
index 4b224c2..5c6bd75 100644 (file)
@@ -30,7 +30,6 @@
        "tog-extendwatchlist": "Ἐφοροδιαλογὴν ἐκτείνειν ἵνα φανῶσιν ἅπασαι αἱ ἀλλαγαὶ, οὐχὶ μόνον αἱ ἁρμόδιαι",
        "tog-usenewrc": "Χρῆσθαι προσκεκοσμημέναις προσφάτοις ἀλλαγαῖς (ἀπαιτεῖται JavaScript)",
        "tog-numberheadings": "Ἐξαριθμεῖν ἐπικεφαλίδας αὐτομάτως",
-       "tog-showtoolbar": "Δεικνύναι τὴν τῶν ἐργαλείων μεταγραφῆς μετώπην",
        "tog-editondblclick": "Ἐπὶ δέλτων δὶς θλίψας, μετάγραψον αὐτάς",
        "tog-editsectiononrightclick": "Καθιστάναι δυνατὸν τὸ μεταγράφειν τμήματα διὰ τοῦ ἐπὶ τῶν ἐπιγραφῶν τῶν τμημάτων θλίβειν δεξιῶς",
        "tog-watchcreations": "Προστιθέναι τὰς δέλτους ἃς ποιῶ τοῖς ἐφορωμένοις μου",
index 0e4d71f..9417a00 100644 (file)
@@ -34,7 +34,6 @@
        "tog-extendwatchlist": "Beobachtungslischte erwytere go alli Änderige aazeige, nit numme di letschte",
        "tog-usenewrc": "Änderigen uf „Letschte Änderige“ un dr Beobachtigslischt no Syte gruppiere",
        "tog-numberheadings": "Überschrifte outomatisch numeriere",
-       "tog-showtoolbar": "Wärchzyyglyscht zum Bearbeite aazeige",
        "tog-editondblclick": "Syte ändere mit Doppelklick",
        "tog-editsectiononrightclick": "Einzelni Absätz ändere mit Rächtsclick uf d Iberschrifte",
        "tog-watchcreations": "Sälber gmachti Sytene un uffegladeni Dateie automatisch  beobachte",
index a955d65..355b4f8 100644 (file)
@@ -42,7 +42,6 @@
        "tog-extendwatchlist": "ધ્યાનસૂચિને વિસ્તૃત કરો જેથી,ફક્ત તાજેતરનાજ નહીં, બધા આનુષાંગિક ફેરફારો જોઇ શકાય",
        "tog-usenewrc": "તાજા ફેરફારોમાં અને ધ્યાનસૂચિમાં ફેરફારોને પાનાં અનુસાર જૂથમાં ગોઠવો",
        "tog-numberheadings": "મથાળાંઓને આપો-આપ ક્રમ (ઑટો નંબર) આપો",
-       "tog-showtoolbar": "ફેરફાર માટેની ટૂલબાર બતાવો",
        "tog-editondblclick": "બે વખત ક્લિક કરી પાનાંઓમાં ફેરફાર કરો",
        "tog-editsectiononrightclick": "વિભાગના મથાળાં ને રાઇટ ક્લિક દ્વારા ફેરફાર કરવાની રીત અપનાવો.",
        "tog-watchcreations": "મેં બનાવેલાં પાનાં અને અપલોડ કરેલી ફાઇલો મારી ધ્યાનસૂચિમાં ઉમેરો",
index f88debf..b394d56 100644 (file)
@@ -16,7 +16,6 @@
        "tog-newpageshidepatrolled": "Follee duillagyn er nyn scrutaghey 'sy rolley duillagyn noa",
        "tog-extendwatchlist": "Lheeadee y rolley arrey dys taishbyney dagh caghlaa bentyn da",
        "tog-numberheadings": "Cur earrooyn gyn smooinaght er kione-linnaghyn",
-       "tog-showtoolbar": "Taishbyn barr greieyn (ta feme ec er JavaScript)",
        "tog-editondblclick": "Reagh duillagyn lesh crig dooblit (ta feme ec er JavaScript)",
        "tog-watchcreations": "Cur duillagyn ta crooit aym rish my rolley arrey",
        "tog-watchdefault": "Cur duillagyn ta reaghit aym rish my rolley arrey",
index beaa6c4..4650230 100644 (file)
@@ -16,7 +16,6 @@
        "tog-extendwatchlist": "A faɗaɗa jerin kan ido ya nuna duka gyare-gyare, ba na baya-bayan nan kawai ba",
        "tog-usenewrc": "A yi amfani da kyautattun gyare-gyare na baya-bayan nan (ana buƙatar Javascript)",
        "tog-numberheadings": "A lambace kanun matani kai tsaye",
-       "tog-showtoolbar": "A nuna sandar kayan aiki ta gyarawa (ana buƙatar JavaScript)",
        "tog-editondblclick": "A gyara shafuna da dabar-kiliki (ana buƙatar JavaScript)",
        "tog-editsectiononrightclick": "A lamunta gyara shashe da kilikin dama a kan kanun shashe (ana buƙatar JavaScript)",
        "tog-watchcreations": "A daɗa shafunan da na ƙirƙira a cikin jerina na kan ido",
index 012bb35..57b01f4 100644 (file)
@@ -26,7 +26,6 @@
        "tog-extendwatchlist": "Chán-khôi kâm-sṳ lie̍t-péu lòi hién-sṳ só-yû kiên-kói, m̀  tân-chhiang he chui-khiûn ke",
        "tog-usenewrc": "Chhai chui-khiûn kiên-kói lâu kâm-sṳ lie̍t-péu tú cháng-ha̍p thùng yit-ya̍p ke siû-kói",
        "tog-numberheadings": "Phiêu-thì chhṳ-thung phiên-ho",
-       "tog-showtoolbar": "Chán-sṳ phiên-siá kûng-khí-làn",
        "tog-editondblclick": "Sûng-khim phiên-siá ya̍p-mien",
        "tog-editsectiononrightclick": "Yún-hí yu-khim phiêu-thì phiên-siá thon-lo̍k",
        "tog-watchcreations": "Kâ ngài kien-li̍p ke ya̍p-mien lâu sông-chhòn ke tóng-on kâ-ngi̍p ngài-ke kâm-sṳ lie̍t-péu",
index 990dcb0..901a417 100644 (file)
@@ -17,7 +17,6 @@
        "tog-extendwatchlist": "E hoʻākea i ka papakiaʻi no ka hōʻike ʻana i nā loli apau, ʻaʻole nā mea hanawale wale nō",
        "tog-usenewrc": "Nā loli hui mao ka ʻaoʻao ma loko o ka loli hou a me ka papakiaʻi",
        "tog-numberheadings": "E hikahelu i nā poʻo",
-       "tog-showtoolbar": "E hōʻike i ka pahu hāmeʻa hoʻololi",
        "tog-editondblclick": "E ho‘ololi i nā ‘ao‘ao me ke kōmi pālua",
        "tog-editsectiononrightclick": "E hoʻokuʻu i ka hoʻololi mahele mao ka paʻina ʻākau ma nā poʻoinoa māhele",
        "tog-watchcreations": "E ho‘ohui i nā ‘ao‘ao aʻu i hana ai a me nā waihona aʻu i hoʻouka ai i ka‘u papakiaʻi",
index 6216762..33d0857 100644 (file)
@@ -48,7 +48,6 @@
        "tog-extendwatchlist": "הרחבת רשימת המעקב כך שתציג את כל השינויים, לא רק את השינויים האחרונים בכל דף",
        "tog-usenewrc": "קיבוץ השינויים לפי דפים בדף השינויים האחרונים וברשימת המעקב",
        "tog-numberheadings": "מספור כותרות אוטומטי",
-       "tog-showtoolbar": "הצגת סרגל העריכה",
        "tog-editondblclick": "עריכת דפים בלחיצה כפולה",
        "tog-editsectiononrightclick": "עריכת פסקאות באמצעות לחיצה ימנית על כותרות הפסקאות",
        "tog-watchcreations": "הוספת דפים שאני {{GENDER:|יוצר|יוצרת}} וקבצים שאני מעלה לרשימת המעקב שלי",
        "subject-preview": "תצוגה מקדימה של הנושא:",
        "previewerrortext": "אירעה שגיאה בעת הניסיון להציג תצוגה מקדימה של השינויים שלך.",
        "blockedtitle": "המשתמש חסום",
+       "blocked-email-user": "<strong>שם המשתמש שלך נחסם משליחת דואר אלקטרוני. עם זאת, באפשרותך לערוך דפים אחרים באתר זה.</strong> באפשרותך לצפות בפרטי החסימה המלאים ב[[Special:MyContributions|תרומות המשתמש]].\n\nהחסימה בוצעה על־ידי $1.\n\nהסיבה שניתנה לכך היא <em>$2</em>.\n\n* תחילת החסימה: $8\n* פקיעת החסימה: $6\n* החסימה שבוצעה: $7\n* מספר חסימה #$5",
+       "blockedtext-partial": "<strong>שם המשתמש או כתובת ה־IP שלך נחסמו מביצוע שינויים לדף זה. עם זאת, באפשרותך לערוך דפים אחרים באתר זה.</strong> באפשרותך לצפות בפרטי החסימה המלאים ב[[Special:MyContributions|תרומות המשתמש]].\n\nהחסימה בוצעה על־ידי $1.\n\nהסיבה שניתנה לכך היא <em>$2</em>.\n\n* תחילת החסימה: $8\n* פקיעת החסימה: $6\n* החסימה שבוצעה: $7\n* מספר חסימה #$5",
        "blockedtext": "<strong>שם המשתמש או כתובת ה־IP שלך נחסמו.</strong>\n\nהחסימה בוצעה על־ידי $1.\nהסיבה שניתנה לכך היא <em>$2</em>.\n\n* תחילת החסימה: $8\n* פקיעת החסימה: $6\n* החסימה שבוצעה: $7\n\nבאפשרותך ליצור קשר עם $1 או עם כל אחד מ[[{{MediaWiki:Grouppage-sysop}}|מפעילי המערכת]] האחרים כדי לדון בחסימה.\nכמו־כן, באפשרותך להשתמש בתכונת \"{{int:emailuser}}\", אלא אם לא ציינת כתובת דוא\"ל תקפה ב[[Special:Preferences|העדפות המשתמש שלך]] או אם נחסמת משליחת דוא\"ל.\nכתובת ה־IP הנוכחית שלך היא $3, ומספר החסימה שלך הוא #$5.\nיש לציין את כל הפרטים הללו בכל פנייה לבירור החסימה.",
        "autoblockedtext": "כתובת ה־IP שלך נחסמה באופן אוטומטי כיוון שמשתמש אחר, שנחסם על־ידי $1, השתמש בה.\nהסיבה שניתנה לחסימה היא:\n\n:<em>$2</em>\n\n* תחילת החסימה: $8\n* פקיעת החסימה: $6\n* החסימה שבוצעה: $7\n\nבאפשרותך ליצור קשר עם $1 או עם כל אחד מ[[{{MediaWiki:Grouppage-sysop}}|מפעילי המערכת]] האחרים כדי לדון בחסימה.\n\nכמו־כן, באפשרותך להשתמש בתכונת \"{{int:emailuser}}\", אלא אם לא ציינת כתובת דוא\"ל תקפה ב[[Special:Preferences|העדפות המשתמש שלך]] או אם נחסמת משליחת דוא\"ל.\n\nכתובת ה־IP הנוכחית שלך היא $3, ומספר החסימה שלך הוא #$5.\nיש לציין את כל הפרטים הללו בכל פנייה לבירור החסימה.",
        "systemblockedtext": "שם המשתמש או כתובת ה־IP שלך נחסמו באופן אוטומטי על־ידי תוכנת מדיה־ויקי.\nהסיבה שניתנה לחסימה היא:\n\n:<em>$2</em>\n\n* תחילת החסימה: $8\n* פקיעת החסימה: $6\n* החסימה שבוצעה: $7\n\nכתובת ה־IP הנוכחית שלך היא $3.\nיש לציין את כל הפרטים הללו בכל פנייה לבירור החסימה.",
        "prefixindex": "כל הדפים עם התחילית",
        "prefixindex-namespace": "כל הדפים עם התחילית (במרחב השם \"$1\")",
        "prefixindex-submit": "הצגה",
-       "prefixindex-strip": "×\94סתרת ×\94ת×\97×\99×\9c×\99ת ×\91רש×\99×\9e×\94",
+       "prefixindex-strip": "×\94סתרת ×\94ת×\97×\99×\9c×\99ת ×\91ת×\95צ×\90×\95ת",
        "shortpages": "דפים קצרים",
        "longpages": "דפים ארוכים",
        "deadendpages": "דפים ללא קישורים",
        "ipb-disableusertalk": "ביטול האפשרות של המשתמש לערוך את דף השיחה של עצמו בעת החסימה",
        "ipb-change-block": "חסימת המשתמש מחדש עם הגדרות אלה",
        "ipb-confirm": "אישור החסימה",
+       "ipb-sitewide": "כל האתר",
+       "ipb-partial": "חלקית",
+       "ipb-type-label": "סוג",
+       "ipb-pages-label": "דפים",
        "badipaddress": "כתובת IP שגויה",
        "blockipsuccesssub": "החסימה הושלמה בהצלחה",
        "blockipsuccesstext": "{{GENDER:$1|המשתמש|המשתמשת}} [[Special:Contributions/$1|$1]] {{GENDER:$1|נחסם|נחסמה}}.<br />\nניתן לעיין ב[[Special:BlockList|רשימת החסומים]] כדי לצפות בחסימות.",
        "createaccountblock": "יצירת חשבונות נחסמה",
        "emailblock": "שליחת דוא\"ל נחסמה",
        "blocklist-nousertalk": "עריכת דף השיחה האישי נחסמה",
+       "blocklist-editing": "עריכה",
+       "blocklist-editing-sitewide": "עריכה (כל האתר)",
        "ipblocklist-empty": "רשימת המשתמשים החסומים ריקה.",
        "ipblocklist-no-results": "שם המשתמש או כתובת ה־IP המבוקשים אינם חסומים.",
        "blocklink": "חסימה",
        "logentry-block-block": "$1 {{GENDER:$2|חסם|חסמה}} את {{GENDER:$4|$3}} למשך $5 $6",
        "logentry-block-unblock": "$1 {{GENDER:$2|שחרר|שחררה}} את החסימה של {{GENDER:$4|$3}}",
        "logentry-block-reblock": "$1 {{GENDER:$2|שינה|שינתה}} את הגדרות החסימה של {{GENDER:$4|$3}} עם זמן פקיעה של $5 $6",
+       "logentry-partialblock-block": "$1 {{GENDER:$2|חסם|חסמה}} את {{GENDER:$4|$3}} מעריכת {{PLURAL:$8||הדפים}} $7 למשך $5 $6",
+       "logentry-partialblock-reblock": "$1 {{GENDER:$2|שינה|שינתה}} את הגדרות החסימה של {{GENDER:$4|$3}} כך שימנעו עריכה של {{PLURAL:$8||הדפים}} $7 למשך $5 $6",
+       "logentry-non-editing-block-block": "$1 {{GENDER:$2|חסם|חסמה}} את {{GENDER:$4|$3}} מפעולות שאינן עריכה למשך $5 $6",
+       "logentry-non-editing-block-reblock": "$1 {{GENDER:$2|שינה|שינתה}} את הגדרות החסימה של {{GENDER:$4|$3}} עבור פעולות שאינן עריכה למשך $5 $6",
        "logentry-suppress-block": "$1 {{GENDER:$2|חסם|חסמה}} את {{GENDER:$4|$3}} עם זמן פקיעה של $5 $6",
        "logentry-suppress-reblock": "$1 {{GENDER:$2|שינה|שינתה}} את הגדרות החסימה של {{GENDER:$4|$3}} עם זמן פקיעה של $5 $6",
        "logentry-import-upload": "$1 {{GENDER:$2|ייבא|ייבאה}} את הדף $3 באמצעות העלאת קובץ",
        "mw-widgets-titleinput-description-redirect": "הפניה ל{{GRAMMAR:תחילית|$1}}",
        "mw-widgets-categoryselector-add-category-placeholder": "הוספת קטגוריה...",
        "mw-widgets-usersmultiselect-placeholder": "הוספת עוד...",
+       "mw-widgets-titlesmultiselect-placeholder": "הוספת עוד...",
        "date-range-from": "מתאריך:",
        "date-range-to": "עד תאריך:",
        "sessionmanager-tie": "לא ניתן לצרף מספר סוגי אימות זהות: $1.",
        "passwordpolicies-policy-passwordcannotmatchblacklist": "הסיסמה לא יכולה להתאים לסיסמאות מסוימות שנמצאות ברשימה השחורה",
        "passwordpolicies-policy-maximalpasswordlength": "הסיסמה חייבת להיות קצרה יותר {{PLURAL:$1|מתו אחד|מ־$1 תווים}}",
        "passwordpolicies-policy-passwordcannotbepopular": "הסיסמה לא יכולה להיות זהה {{PLURAL:$1|לסיסמה נפוצה|לאחת הסיסמאות שנמצאות ברשימה של $1 הסיסמאות הנפוצות}}",
-       "easydeflate-invaliddeflate": "התוכן שהועבר אינו דחוס כנדרש"
+       "easydeflate-invaliddeflate": "התוכן שהועבר אינו דחוס כנדרש",
+       "unprotected-js": "מסיבות אבטחה, לא ניתן לטעון JavaScript מדפים שאינם מוגנים. ניתן ליצור סקריפטי JavaScript רק במרחב השם \"מדיה ויקי:\" או בדפי משנה של דף המשתמש."
 }
index a2b79d2..cfef42e 100644 (file)
                        "Shypoetess",
                        "Innocentbunny",
                        "TryKid",
-                       "Fitoschido"
+                       "Fitoschido",
+                       "Tavleen"
                ]
        },
-       "tog-underline": "à¤\95ड़à¥\80 à¤°à¥\87à¤\96ाà¤\82à¤\95न:",
-       "tog-hideminor": "हाल à¤®à¥\87à¤\82 à¤¹à¥\81à¤\8f à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनà¥\8bà¤\82 à¤®à¥\87à¤\82 à¤²à¤\98à¥\81 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤\9bिपाà¤\8fà¤\81",
-       "tog-hidepatrolled": "हाल à¤®à¥\87à¤\82 à¤¹à¥\81à¤\8f à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनà¥\8bà¤\82 à¤®à¥\87à¤\82 à¤ªà¤°à¥\80à¤\95à¥\8dषित à¤¬à¤¦à¤²à¤¾à¤µ à¤\9bिपाà¤\8fà¤\81",
+       "tog-underline": "लिà¤\82à¤\95 à¤°à¥\87à¤\96ाà¤\82à¤\95ित:",
+       "tog-hideminor": "हाल à¤\95à¥\87 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤¸à¥\87 à¤®à¤¾à¤®à¥\82लà¥\80 à¤¸à¤\82पादन à¤\9bà¥\81पाà¤\8fà¤\82",
+       "tog-hidepatrolled": "हाल à¤\95à¥\87 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤¸à¥\87 à¤\97शà¥\8dत à¤¸à¤\82पादन à¤\9bà¥\81पाà¤\8fà¤\82",
        "tog-newpageshidepatrolled": "नये पृष्ठ की सूची में परीक्षित पृष्ठों को छिपाएँ",
        "tog-hidecategorization": "पृष्ठों का श्रेणीकरण छिपाएं",
        "tog-extendwatchlist": "केवल हालिया ही नहीं, बल्कि सभी परिवर्तनों को दिखाने के लिए ध्यानसूची को विस्तृत करें",
        "tog-usenewrc": "हाल में हुए परिवर्तनों और ध्यानसूची में परिवर्तनों को पृष्ठ अनुसार समूहों में बाँटें",
        "tog-numberheadings": "स्व-क्रमांकित शीर्षक",
-       "tog-showtoolbar": "सम्पादन उपकरण पट्टी दिखाएँ",
        "tog-editondblclick": "डबल क्लिक पर पृष्ठ संपादित करें",
        "tog-editsectiononrightclick": "अनुभाग शीर्षक पर दायाँ क्लिक करने पर अनुभाग सम्पादित करें",
        "tog-watchcreations": "मेरे द्वारा निर्मित पृष्ठों और मेरी अपलोड की फ़ाइलों को मेरी ध्यानसूची में जोड़ें",
        "prefs-watchlist-edits": "ध्यानसूची में दिखाने हेतु अधिकतम बदलाव:",
        "prefs-watchlist-edits-max": "अधिकतम संख्या: एक हज़ार",
        "prefs-watchlist-token": "ध्यानसूची टोकन",
+       "prefs-watchlist-managetokens": "टोकन प्रबंधित करें",
        "prefs-misc": "अन्य",
        "prefs-resetpass": "कूटशब्द बदलें",
        "prefs-changeemail": "ई-मेल पता परिवर्तित करें",
index 9a1d234..f6e1432 100644 (file)
@@ -30,7 +30,6 @@
        "tog-extendwatchlist": "Dhyaan suchi ke khol ke sab badlao ke dekhao, khaali nawaa waala nai",
        "tog-usenewrc": "Dher jan se badla gais panna, haali ke badlao aur dhyan suchi me",
        "tog-numberheadings": "Sab heading ke apne se number karo",
-       "tog-showtoolbar": "Badle waala toolbar ke dekhao",
        "tog-editondblclick": "Dugnaa click pe panna ke badlo",
        "tog-editsectiononrightclick": "Bhaag ke title pe right click kare pe bhaag ke badle ke laabu karo",
        "tog-watchcreations": "Hamaar banawa waala panna aur upload karaa gais file ke hamaar dhyaan suchi me jorro",
index ade51d1..fb09e25 100644 (file)
@@ -22,7 +22,6 @@
        "tog-extendwatchlist": "Palaparon ang watchlist para makita ang tanan nga mga na-islan, indi lang man sa pinaka bag-o",
        "tog-usenewrc": "Grupohon ang mga pagbag-o kada panid sa bag-o lang gid na ilisan kag sa ginabantayan (nagakilanlan sang JavaScript)",
        "tog-numberheadings": "Auto-numero heading",
-       "tog-showtoolbar": "Ipakita ang edit toolbar (nagakilanlan JavaScript)",
        "tog-editondblclick": "Islan ang pahina kung i-doble klik mo (nagakilanlan JavaScript)",
        "tog-editsectiononrightclick": "Sugtan ang pag-ilis sang seksyon paagi sa pagtum-ok sang natoo sa mouse sa titulo sang seksyon (nagakinahanglan sang JavaScript)",
        "tog-watchcreations": "Magdugang sang mga panid nga akon buhaton kag mga hilera nga akon igapasaka sa akon mga ginabantayan",
index d5377bd..9c57822 100644 (file)
@@ -51,7 +51,6 @@
        "tog-extendwatchlist": "Proširi popis praćenih stranica tako da prikaže sve promjene, ne samo najnovije",
        "tog-usenewrc": "Grupne promjene po stranici u popisu nedavnih izmjena i popisu praćenih stranica (zahtijeva JavaScript)",
        "tog-numberheadings": "Automatski označi naslove brojevima",
-       "tog-showtoolbar": "Prikaži traku s alatima za uređivanje (zahtijeva JavaScript)",
        "tog-editondblclick": "Dvoklik otvara uređivanje stranice (JavaScript)",
        "tog-editsectiononrightclick": "Pritiskom na desnu tipku miša otvori uređivanje pojedinih odlomaka (JavaScript)",
        "tog-watchcreations": "Dodaj stranice koje sam stvorio na moj popis praćenja",
        "sig_tip": "Vaš potpis s datumom",
        "hr_tip": "Vodoravna crta (koristiti rijetko)",
        "summary": "Sažetak:",
-       "subject": "Tema:",
+       "subject": "Predmet:",
        "minoredit": "Ovo je manja promjena",
        "watchthis": "Prati ovu stranicu",
        "savearticle": "Sačuvaj stranicu",
        "tooltip-pt-mytalk": "Vaša stranica za razgovor",
        "tooltip-pt-anontalk": "Rasprava o uređivanjima s ove IP adrese",
        "tooltip-pt-preferences": "Vaše postavke",
-       "tooltip-pt-watchlist": "Popis stranica koje pratite.",
+       "tooltip-pt-watchlist": "Popis stranica čije promjene pratite",
        "tooltip-pt-mycontris": "Popis Vaših doprinosa",
        "tooltip-pt-anoncontribs": "Popis uređivanja učinjenih s ove IP adrese",
        "tooltip-pt-login": "Predlažemo Vam da se prijavite, iako to nije obavezno",
        "tooltip-pt-logout": "Odjavi se",
        "tooltip-pt-createaccount": "Predlažemo Vam da stvorite račun i prijavite se, iako to nije obavezno",
        "tooltip-ca-talk": "Razgovorna stranica",
-       "tooltip-ca-edit": "Uredi ovu stranicu",
+       "tooltip-ca-edit": "Uredite ovu stranicu",
        "tooltip-ca-addsection": "Dodaj novi odlomak",
        "tooltip-ca-viewsource": "Ova stranica je zaštićena. Možete pogledati izvorni kod.",
        "tooltip-ca-history": "Ranije izmjene na ovoj stranici",
        "version-license-not-found": "Za ovaj dodatak nema detaljnih informacija o licenciji.",
        "version-credits-title": "Zasluge za $1",
        "version-credits-not-found": "Za ovo proširenje nisu pronađene informacije o zaslugama.",
-       "version-poweredby-credits": "Ovaj wiki pogoni '''[https://www.mediawiki.org/ MediaWiki]''', autorska prava © 2001-$1 $2.",
+       "version-poweredby-credits": "Ovaj wiki pokreće '''[https://www.mediawiki.org/ MediaWiki]''', autorska prava © 2001-$1 $2.",
        "version-poweredby-others": "ostali",
        "version-poweredby-translators": "prevoditelji s projekta translatewiki.net",
        "version-credits-summary": "Željeli bismo zahvaliti sljedećim suradnicima na njihovom doprinosu [[Special:Version|MediaWikiju]].",
index 4bfe193..13e5c8b 100644 (file)
@@ -16,7 +16,6 @@
        "tog-extendwatchlist": "Beobachtungslist erweitre, um statt nuer der letzte Ännrung alle Ännrunge oonzuzeiche.",
        "tog-usenewrc": "Ännrunge uff \"Letzte Ännrunge\" und Beobachtungslist noh Seit gruppiere",
        "tog-numberheadings": "Üwerschrifte automatisch nummeriere",
-       "tog-showtoolbar": "Beoorbeite-Werrekzeichleiste oonzeiche",
        "tog-editondblclick": "Seite mit Doppelklick beoorbeite",
        "tog-editsectiononrightclick": "Einzelne Abschnitte per Rechtsklick beoorbeite",
        "tog-watchcreations": "Sellebst erstellt Seite und hochgeloodne Dateie automatisch beobachte",
index 443217d..1664cbd 100644 (file)
@@ -27,7 +27,6 @@
        "tog-extendwatchlist": "Lisćinu wobkedźbowankow wočinić, zo by wšě změny widźał, nic jenož najnowše",
        "tog-usenewrc": "Změny po stronje w aktualnych změnach a wobkedźbowankach zeskupjeć",
        "tog-numberheadings": "Nadpisma awtomatisce čisłować",
-       "tog-showtoolbar": "Wobdźěłowansku lajstu pokazać",
        "tog-editondblclick": "Strony z dwójnym kliknjenjom wobdźěłować",
        "tog-editsectiononrightclick": "Wobdźěłowanje wotrězkow přez kliknjenje z prawej tastu na nadpisma wotrězkow zmóžnić",
        "tog-watchcreations": "Strony, kotrež wutworjam a dataje, kotrež nahrawam, swojim wobkedźbowankam přidać",
index 6c537a7..01d3006 100644 (file)
@@ -22,7 +22,6 @@
        "tog-extendwatchlist": "Etann lis swivi pou ou kapab wè tout chanjman yo, pa sèlman sa ki fèk fèt yo",
        "tog-usenewrc": "Sanble modifikasyon pou chak paj nan chanjman resan ak paj an vèy",
        "tog-numberheadings": "Nimewote otomatikman tit yo",
-       "tog-showtoolbar": "Montre zouti chanjman yo",
        "tog-editondblclick": "Klike de fwa pou chanje yon paj",
        "tog-editsectiononrightclick": "Pemèt chanje yon seksyon lè ou klike a dwat sou tit seksyon an",
        "tog-watchcreations": "Ajoute paj mwen kreye yo nan lis swivi mwen.",
index bed8b65..bbbdb4d 100644 (file)
@@ -15,7 +15,6 @@
        "tog-extendwatchlist": "A figyelőlistán az összes változtatás látszódjon, ne csak az utolsó",
        "tog-usenewrc": "Szerkesztések csoportosítása oldal szerint a friss változtatásokban és a figyelőlistán",
        "tog-numberheadings": "Fejezetcímek automatikus számozása",
-       "tog-showtoolbar": "Szerkesztőeszközsor megjelenítése",
        "tog-editondblclick": "A lapok szerkesztése dupla kattintásra",
        "tog-editsectiononrightclick": "Szakaszok szerkesztése a szakaszcímre való jobb kattintással",
        "tog-watchcreations": "Az Ön által létrehozott lapok és feltöltött fájlok felvétele a figyelőlistára",
index e611786..5f3e8a1 100644 (file)
@@ -62,7 +62,6 @@
        "tog-extendwatchlist": "A figyelőlistán az összes változtatás látszódjon, ne csak az utolsó",
        "tog-usenewrc": "Szerkesztések csoportosítása oldal szerint a friss változtatásokban és a figyelőlistán",
        "tog-numberheadings": "Fejezetcímek automatikus számozása",
-       "tog-showtoolbar": "Szerkesztőeszközsor megjelenítése",
        "tog-editondblclick": "A lapok szerkesztése dupla kattintásra",
        "tog-editsectiononrightclick": "Szakaszok szerkesztése a szakaszcímre való jobb kattintással",
        "tog-watchcreations": "Az általam létrehozott lapok és feltöltött fájlok felvétele a figyelőlistámra",
        "badarticleerror": "Ez a tevékenység nem végezhető el ezen a lapon.",
        "cannotdelete": "A(z) $1 lapot vagy fájlt nem lehet törölni.\nTalán már valaki más törölte.",
        "cannotdelete-title": "Nem lehet törölni a(z) „$1” lapot",
+       "delete-scheduled": "„$1” oldal törlése folyamatban van. Kérlek légy türelmes.",
        "delete-hook-aborted": "A törlést egy hook (szűrő) megszakította.\nNincs csatolt magyarázat hozzá.",
        "no-null-revision": "Nem sikerült új null-revíziót létrehozni a(z) „$1” lap számára.",
        "badtitle": "Hibás cím",
index 811820a..b23e460 100644 (file)
@@ -44,7 +44,6 @@
        "tog-extendwatchlist": "Ընդարձակել հսկացանկը՝ ցույց տալով բոլոր փոփոխությունները, այլ ոչ միայն վերջինները",
        "tog-usenewrc": "Խմբավորել փոփոխությունները վերջին փոփոխություններում և հսկացանկում (պահանջում է JavaScript)",
        "tog-numberheadings": "Ինքնաթվագրել վերնագրերը",
-       "tog-showtoolbar": "Ցույց տալ խմբագրումների գործիքների վահանակը",
        "tog-editondblclick": "Խմբագրել էջերը կրկնակի սեղմամբ",
        "tog-editsectiononrightclick": "Խմբագրել բաժինները վերնագրի աջ սեղմամբ",
        "tog-watchcreations": "Ավելացնել իմ ստեղծած էջերը և բեռնած նիշքերը իմ հսկացանկում",
index 04c3105..153a5b8 100644 (file)
@@ -28,7 +28,6 @@
        "tog-extendwatchlist": "Displicar le observatorio pro monstrar tote le modificationes, non solmente les plus recente",
        "tog-usenewrc": "Gruppar modificationes per pagina in modificationes recente e observatorio",
        "tog-numberheadings": "Numerar titulos automaticamente",
-       "tog-showtoolbar": "Monstrar instrumentario de modification",
        "tog-editondblclick": "Modificar paginas con duple clic",
        "tog-editsectiononrightclick": "Permitter modification de sectiones con clic-a-dextra sur titulos de section",
        "tog-watchcreations": "Adder le paginas que io crea e le files que io incarga a mi observatorio",
        "prefixindex": "Tote le paginas con prefixo",
        "prefixindex-namespace": "Tote le paginas con prefixo (spatio de nomines $1)",
        "prefixindex-submit": "Monstrar",
-       "prefixindex-strip": "Remover prefixo in lista",
+       "prefixindex-strip": "Celar le prefixo in resultatos",
        "shortpages": "Paginas curte",
        "longpages": "Paginas longe",
        "deadendpages": "Paginas sin exito",
        "passwordpolicies-policy-passwordcannotmatchblacklist": "Le contrasigno non pote corresponder a contrasignos in le lista nigre",
        "passwordpolicies-policy-maximalpasswordlength": "Le contrasigno debe continer minus de $1 {{PLURAL:$1|character|characteres}}",
        "passwordpolicies-policy-passwordcannotbepopular": "Le contrasigno non pote esser {{PLURAL:$1|le contrasigno le plus popular|in le lista de $1 contrasignos popular}}",
-       "easydeflate-invaliddeflate": "Le contento fornite non es correctemente comprimite"
+       "easydeflate-invaliddeflate": "Le contento fornite non es correctemente comprimite",
+       "unprotected-js": "Pro motivos de securitate, non es possibile cargar codice JavaScript de paginas non protegite. Crea JavaScript solmente in le spatio de nomines \"MediaWiki:\" o como un subpagina de usator."
 }
index e91a308..4e0be27 100644 (file)
@@ -72,7 +72,6 @@
        "tog-extendwatchlist": "Kembangkan daftar pantauan untuk menunjukkan semua perubahan, tidak hanya yang terbaru",
        "tog-usenewrc": "Kelompokkan suntingan di tampilan perubahan terbaru dan daftar pantauan berdasarkan halaman",
        "tog-numberheadings": "Beri nomor judul secara otomatis",
-       "tog-showtoolbar": "Tampilkan bilah alat penyuntingan",
        "tog-editondblclick": "Sunting halaman dengan klik ganda",
        "tog-editsectiononrightclick": "Fungsikan penyuntingan bagian dengan mengeklik kanan pada judul bagian",
        "tog-watchcreations": "Tambahkan halaman yang saya buat dan berkas yang saya unggah ke daftar pantauan",
index 6f6d173..3cb5476 100644 (file)
@@ -27,7 +27,6 @@
        "tog-extendwatchlist": "Expander li liste de vigilantie a omni changes, ne solmen li max nov",
        "tog-usenewrc": "Ordinar changes in «Recent changes» e li liste de vigila secun págines",
        "tog-numberheadings": "Auto-numerar rublicas",
-       "tog-showtoolbar": "Monstrar barre de redactional utensiles",
        "tog-editondblclick": "Redacter págines per duplic clacca",
        "tog-editsectiononrightclick": "Redacter singul sectiones per dextri clacca",
        "tog-watchcreations": "Automaticmen viligar págines e files, queles yo ha creat.",
index e154b98..8f98fc8 100644 (file)
@@ -13,7 +13,6 @@
        "tog-extendwatchlist": "Gbasa ndetu ihe ánà elé ka ó zi gbanwere nke níle, o bughi nani nke isi nso",
        "tog-usenewrc": "Ji ihe gbanwere nso níguélé élu (ö chọrọ JavaScript)",
        "tog-numberheadings": "Onuogụgụ-otu anyi mere ya maka ishi edemede",
-       "tog-showtoolbar": "Zi igbe orü (Í gí nwere JavaScript)",
        "tog-editondblclick": "Rüwá na élu ihü mgbe I kpạtạrạ (ö chọrọ JavaScript)",
        "tog-editsectiononrightclick": "Kpa na áká nri Í gbanyé orürü nkeji na ishi nkeji (ö chọrọ JavaScript)",
        "tog-watchcreations": "Tinyé ihüm na eké na ndetu ihem ne lé",
index 5c75650..649b125 100644 (file)
@@ -21,7 +21,6 @@
        "tog-extendwatchlist": "Ipalawa ti listaan ti bambantayan tapno maipakita amin a nasukatan, saan laeng a ti kabiitan",
        "tog-usenewrc": "Dagiti grupo a panagbaliw babaen ti panid ti kaudian a balbaliw ken listaan ti bambantayan",
        "tog-numberheadings": "Automatiko a pabilangan dagiti paulo",
-       "tog-showtoolbar": "Ipakita ti baras ti ramit ti panagurnos",
        "tog-editondblclick": "Urnosen dagiti panid iti mamindua a panagpindut",
        "tog-editsectiononrightclick": "Pakabaelan ti panagurnos iti seksion babaen ti panagpindut iti kanawan kadagiti titulo ti paset",
        "tog-watchcreations": "Agnayon kadagiti panid a pinartuatko ken papeles nga inkargak iti listaan ti bambantayak",
index e54666d..a79eebd 100644 (file)
@@ -24,7 +24,6 @@
        "tog-extendwatchlist": "Хьашеръе зéма хьаязъяьр шедола хувцамаш юкъелоацаш, тIехьара даь хувцамаш хинна ца Iеш.",
        "tog-usenewrc": "Хувцамех тоабаш е керда нийсдарашка а зéма хьаязъяьра чу а",
        "tog-numberheadings": "Ши-шегIа номераш увттае кепакертошта",
-       "tog-showtoolbar": "Кечала панель хьахьокха хувцам беча хана",
        "tog-editondblclick": "Тоае оагӀонаш шозза тӀатоӀайича (JavaScript)",
        "tog-editsectiononrightclick": "Тоаде оагIон дáкъа цун кепакертá дахкилга аьттехьара тоIаерг тӀатоӀайича (JavaScript)",
        "tog-watchcreations": "Зем беш йолча оагIонашта а файлашта а тIатоха аз хьаяь оагIонаши чуяьха хинна файлаши",
index 5184f3c..cb8e621 100644 (file)
@@ -27,7 +27,6 @@
        "tog-extendwatchlist": "Expansez surveyo-listo por montrar omna chanji, vice nur la maxim recenta",
        "tog-usenewrc": "Grupigar la modifiki por pagino en recenta chanji e \"watchlist\"",
        "tog-numberheadings": "Autonumerez tituli",
-       "tog-showtoolbar": "Montrez redaktilo (JavaScript bezonesas)",
        "tog-editondblclick": "Redaktez pagini kande on klikus dufoye (JavaScript bezonesas)",
        "tog-editsectiononrightclick": "Kapabligez redakto di secioni per dextre-klikar tituli di secioni",
        "tog-watchcreations": "Adjuntez la pagini qui me kreos a mea surveyaji",
        "previewnote": "<strong>Atencez ke ico esas nur prevido.</strong> Ol ne registragesis ankore!",
        "continue-editing": "Irez a la redakto-areo",
        "session_fail_preview": "'''Pardonez! Ni ne povis traktar vua redakto pro perdo di sesiono donaji.'''\nVoluntez probar itere.\nSe ol ankore nefuncionas, probez [[Special:UserLogout|ekirar]] e pose enirar.",
+       "session_fail_preview_html": "Pardonez! Ni ne povis recevar vua redakto pro perdajo di dati.\n\n<em>Pro ke la wiki {{SITENAME}} permisas uzar bruta HTML, la previdado celesas por preventar ataki uzante JavaScript.</em>\n\n<strong>Se la probo di redakto esas legitima, voluntez itere sendar ol.</strong>\nSe duros ne funcionar, facez [[Special:UserLogout|logout]] ed itere facez login. Videz se vua retonavigilo (browser) permisas uzar 'cookies' de ica retosituo.",
        "editing": "Vu redaktas $1",
        "creating": "Vu kreas $1",
        "editingsection": "Vu redaktas $1 (seciono)",
        "group-autoconfirmed": "Uzeri automatale konfirmita",
        "group-bot": "Roboti",
        "group-sysop": "Administreri",
+       "group-interface-admin": "Administreri dil interkonekto (interface)",
        "group-bureaucrat": "Burokrati",
        "group-suppress": "Efaceri",
        "group-all": "(omna)",
        "rcfilters-filter-watchlist-watched-label": "En mea surveyo-listo",
        "rcfilters-filter-watchlist-watched-description": "Modifikuri en pagini de vua surveyo-listo.",
        "rcfilters-filter-watchlist-watchednew-label": "Nova modifikuri en la surveyo-listo",
+       "rcfilters-filter-watchlistactivity-unseen-description": "Modifikuri en la pagini quin vu ne vizitis pos ke la modifikuri facesis.",
        "rcfilters-filtergroup-changetype": "Tipo di modifikuro",
        "rcfilters-filter-pageedits-label": "Redakti di pagini",
        "rcfilters-filter-pageedits-description": "Redakturi en la kontenajo dil Wiki, diskuti, deskriptado di kategorii...",
        "rcfilters-view-namespaces-tooltip": "Filtrar rezulti segun nomo",
        "rcfilters-liveupdates-button": "Quika aktualigi",
        "rcfilters-watchlist-markseen-button": "Indikar \"vidita\" en omna modifikuri",
+       "rcfilters-watchlist-edit-watchlist-button": "Modifikez vua listo pri pagini vigilata",
+       "rcfilters-watchlist-showupdated": "La chanji en pagini quin vu ne vizitis pos eventir modifikuri indikesas per <strong>dika literi</strong>, kun solida marki.",
        "rcnotefrom": "Infre {{PLURAL:$5|esas la chanjo|esas la chanji}} de <strong>$3, $4</strong> (montrata til <strong>$1</strong>).",
        "rclistfrom": "Montrar nova chanji startante de $3 $2",
        "rcshowhideminor": "$1 mikra redakturi",
        "upload-form-label-infoform-date": "Dato",
        "upload-form-label-own-work-message-generic-local": "Me konfirmas ke me sendas l'arkivo segun la kondicioni e politiki pri autoroyuri de {{SITENAME}}",
        "upload-form-label-not-own-work-message-generic-foreign": "Se vu ne povas sendar ica arkivo segun la politiki dil depozeyo por partigita arkivi, voluntez klozar ica dialogo-fenestro e probar altra metodo.",
+       "backend-fail-maxsize": "Ne povis skribar l'arkivo \"$1\" nam ol esas plu granda kam {{PLURAL:$2|1 bicoko* (byte)|$2 bicoki* (bytes)}}.",
        "uploadstash-bad-path": "La voyo ne existas.",
        "uploadstash-bad-path-invalid": "La voyo esas nevalida.",
        "uploadstash-bad-path-unknown-type": "Tipo \"$1\" nekonocita.",
        "protectedtitles": "Protektita tituli",
        "listusers": "Uzerolisto",
        "listusers-editsonly": "Montrez nur uzeri qui facis redakti",
+       "listusers-temporarygroupsonly": "Montrez nur l'uzeri en tempala uzero-grupi",
        "listusers-creationsort": "Ordinar segun la dato di kreado",
        "listusers-desc": "Ordinar segun decensanta ordeno",
        "usereditcount": "$1 {{PLURAL:$1|redakto|redakti}}",
        "linksearch-ok": "Serchez",
        "listusersfrom": "Montrez uzeri komencante de:",
        "listusers-submit": "Montrez",
+       "listusers-noresult": "Nula uzero trovita.",
        "listusers-blocked": "(blokusita)",
        "activeusers": "Listo pri aktiva uzeri",
        "activeusers-intro": "Yen listo pri uzeri qui laboris en la Wiki dum la lasta $1 {{PLURAL:$1|dio|dii}}.",
        "tooltip-ca-nstab-category": "Videz la pagino dil kategorio",
        "tooltip-minoredit": "Markizar ica redaktajo kom mikra",
        "tooltip-save": "Registrigez chanji",
+       "tooltip-publish": "Publikigar vua modifikuri",
        "tooltip-preview": "Previdar vua chanji. Voluntez uzor ico ante registragar!",
        "tooltip-diff": "Montrez la chanji a la texto quin vu facis",
        "tooltip-compareselectedversions": "Vidar la diferaji inter la du selektita versioni di ca pagino.",
        "logentry-delete-delete": "$1 {{GENDER:$2|efacis}} la pagino $3",
        "logentry-delete-delete_redir": "$1 {{GENDER:$2|efacis}} la ridirektilo $3, riskribante ol",
        "logentry-delete-restore": "$1 {{GENDER:$2|restauris}} la pagino $3 ($4)",
+       "restore-count-revisions": "{{PLURAL:$1|1 revizuro|$1 revizuri}}",
        "logentry-delete-revision": "$1 {{GENDER:$2|modifikis}} videbleso di {{PLURAL:$5|la revizo|$5 revizi}} di la pagino $3: $4",
        "revdelete-content-hid": "celita kontenajo",
        "logentry-block-block": "$1 {{GENDER:$2|blokusis}} {{GENDER:$4|$3}} dum $5 $6",
        "limitreport-ppvisitednodes": "Quanto di nodi vizitita dal preprocesoro",
        "limitreport-ppgeneratednodes": "Quanto di nodi kreita dal preprocesoro",
        "limitreport-postexpandincludesize": "Grandeso dil inkluzo pos expanso",
+       "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|bicoko*|bicoki*}}",
        "limitreport-expansiondepth": "Maxima profundeso di expanso",
        "limitreport-expensivefunctioncount": "Kontado di funcioni kustoza di analizo sintaxala",
        "expand_templates_output": "Rezulto",
        "expand_templates_ok": "O.K.",
        "expand_templates_preview": "Previdar",
        "pagelang-language": "Linguo",
+       "mediastatistics-nbytes": "{{PLURAL:$1|$1 bicoko*|$1 bicoki*}} ($2; $3%)",
        "special-characters-group-latin": "Latina",
        "special-characters-group-latinextended": "Latina extensita",
        "special-characters-group-symbols": "Simboli",
index 69bb504..4faf576 100644 (file)
@@ -38,7 +38,6 @@
        "tog-extendwatchlist": "Sýna allar breytingar á vaktlistanum, ekki einungis þær nýjustu",
        "tog-usenewrc": "Flokka breytingar eftir síðu í nýlegum breytingum og vaktlista",
        "tog-numberheadings": "Númera fyrirsagnir sjálfkrafa",
-       "tog-showtoolbar": "Sýna breytingaverkfærastiku",
        "tog-editondblclick": "Breyta síðum þegar tvísmellt er",
        "tog-editsectiononrightclick": "Virkja hlutabreytingu með því að hægrismella á hlutafyrirsagnir",
        "tog-watchcreations": "Bæta á vaktlistann minn síðum sem ég bý til og skrám sem ég hleð inn",
index 4268257..5c1204b 100644 (file)
        "tog-extendwatchlist": "Mostra tutte le modifiche agli osservati speciali, non solo l'ultima",
        "tog-usenewrc": "Raggruppa le modifiche per pagina nelle ultime modifiche e negli osservati speciali",
        "tog-numberheadings": "Numerazione automatica dei titoli di sezione",
-       "tog-showtoolbar": "Mostra la barra degli strumenti di modifica",
        "tog-editondblclick": "Modifica delle pagine tramite doppio clic",
        "tog-editsectiononrightclick": "Modifica delle sezioni tramite clic destro sul titolo",
        "tog-watchcreations": "Aggiungi le pagine che creo e i file che carico agli osservati speciali",
        "prefixindex": "Indice delle pagine per lettere iniziali",
        "prefixindex-namespace": "Tutte le pagine con il prefisso del namespace $1",
        "prefixindex-submit": "Mostra",
-       "prefixindex-strip": "Nascondi prefisso nell'elenco",
+       "prefixindex-strip": "Nascondi il prefisso nei risultati",
        "shortpages": "Pagine più corte",
        "longpages": "Pagine più lunghe",
        "deadendpages": "Pagine senza uscita",
        "ipb-disableusertalk": "Impedisci a questo utente di modificare la propria pagina di discussioni mentre è bloccato",
        "ipb-change-block": "Ri-blocca l'utente con queste impostazioni",
        "ipb-confirm": "Conferma il blocco",
+       "ipb-partial": "Parziale",
+       "ipb-type-label": "Tipo",
+       "ipb-pages-label": "Pagine",
        "badipaddress": "Indirizzo IP non valido.",
        "blockipsuccesssub": "Blocco eseguito",
        "blockipsuccesstext": "[[Special:Contributions/$1|$1]] è stato bloccato.<br />\nConsultare la [[Special:BlockList|lista dei blocchi]] per vedere i blocchi attivi.",
        "duration-centuries": "$1 {{PLURAL:$1|secolo|secoli}}",
        "duration-millennia": "$1 {{PLURAL:$1|millennio|millenni}}",
        "rotate-comment": "Immagine ruotata di $1 {{PLURAL:$1|grado|gradi}} in senso orario",
-       "limitreport-title": "Dati profilo del parser:",
+       "limitreport-title": "Dati di profilazione del parser:",
        "limitreport-cputime": "Tempo di utilizzo CPU",
        "limitreport-cputime-value": "$1 {{PLURAL:$1|secondo|secondi}}",
        "limitreport-walltime": "Tempo di utilizzo reale",
        "mw-widgets-titleinput-description-redirect": "reindirizzamento a $1",
        "mw-widgets-categoryselector-add-category-placeholder": "Aggiungi una categoria...",
        "mw-widgets-usersmultiselect-placeholder": "Aggiungi altri...",
+       "mw-widgets-titlesmultiselect-placeholder": "Aggiungi altri...",
        "date-range-from": "Dalla data:",
        "date-range-to": "Alla data:",
        "sessionmanager-tie": "Non è possibile combinare più tipi di richieste di autenticazione: $1.",
        "passwordpolicies-policy-passwordcannotmatchusername": "La password non può essere uguale al nome utente",
        "passwordpolicies-policy-passwordcannotmatchblacklist": "La password non può corrispondere a password specificate nell'elenco delle password proibite",
        "passwordpolicies-policy-maximalpasswordlength": "La password deve essere lunga meno di $1 {{PLURAL:$1|carattere|caratteri}}",
-       "passwordpolicies-policy-passwordcannotbepopular": "La password non può essere {{PLURAL:$1|la password più popolare|nell'elenco delle $1 password più popolari}}"
+       "passwordpolicies-policy-passwordcannotbepopular": "La password non può essere {{PLURAL:$1|la password più popolare|nell'elenco delle $1 password più popolari}}",
+       "unprotected-js": "Per motivi di sicurezza, non è possibile caricare JavaScript da pagine non protette. Crea javascript solo nel namespace MediaWiki o come sottopagina Utente"
 }
index c2ec297..7641b96 100644 (file)
        "tog-extendwatchlist": "ウォッチリストを拡張して最新の変更以外もすべて表示",
        "tog-usenewrc": "最近の更新とウォッチリストで、複数の変更をページごとにまとめる",
        "tog-numberheadings": "見出しに番号を自動的に振る",
-       "tog-showtoolbar": "編集用のツールバーを表示",
        "tog-editondblclick": "ダブルクリックでページを編集",
        "tog-editsectiononrightclick": "節見出しの右クリックで節を編集できるようにする",
        "tog-watchcreations": "自分が作成したページやアップロードしたファイルをウォッチリストに追加",
        "prefixindex": "先頭が同じ全ページ",
        "prefixindex-namespace": "先頭が同じ全ページ ($1名前空間)",
        "prefixindex-submit": "表示",
-       "prefixindex-strip": "一覧で接頭辞を省略",
+       "prefixindex-strip": "結果一覧から接頭辞を省略",
        "shortpages": "短いページ",
        "longpages": "長いページ",
        "deadendpages": "行き止まりページ",
index ffc35a1..33e24a0 100644 (file)
@@ -20,7 +20,6 @@
        "tog-extendwatchlist": "Expan wachlis fi shuo aal chienj, no jos di muos riisant",
        "tog-usenewrc": "Yuuz enans riisant chienj (rikwaya JavaScript)",
        "tog-numberheadings": "Aato-nomba edndem",
-       "tog-showtoolbar": "Shuo edit tuulbaar (rikwaya JavaScript)",
        "tog-editondblclick": "Edit piej pahn dobl klik (rikwaya JavaScript)",
        "tog-editsectiononrightclick": "Eniebl sekshan editin bai rait klikin pahn sekshan taikl (rikwaya JavaScript)",
        "tog-watchcreations": "Ad piej mi kriet tu mi wachlis",
index 44bd00f..30310e2 100644 (file)
@@ -20,7 +20,6 @@
        "tog-extendwatchlist": "Utwiid öwewågnengslisten te å wis åll øndrenge å ett kons di nysti",
        "tog-usenewrc": "Gruppiir øndrenge pro siid i listen öwe siensti øndrenge å i öwewågnengslisten",
        "tog-numberheadings": "Automatisk nummeriireng å öweskrifte",
-       "tog-showtoolbar": "Wis wærktyeslinje te redigiireng",
        "tog-editondblclick": "Redigiir side mä doppeltklikk",
        "tog-editsectiononrightclick": "Redigiir åsnit we å højaklikk på dæes title",
        "tog-watchcreations": "Tilfye side, æ oprette, å fili, æ lägge op, te min öwewågnengslist",
index 63962e9..ced9bc5 100644 (file)
@@ -29,7 +29,6 @@
        "tog-extendwatchlist": "Ambakaké pawawangan nedya nuduhaké kabèh owahan, ora mung kang paling anyar",
        "tog-usenewrc": "Golongaké owah-owahan miturut kaca ing owah-owahan anyar lan pawawangan",
        "tog-numberheadings": "Wènèhi angkaning sesirah kanthi otomatis",
-       "tog-showtoolbar": "Tuduhaké wilah piranti sarana besut",
        "tog-editondblclick": "Besut kaca sarana ngeklik pindho",
        "tog-editsectiononrightclick": "Idinaké mbesut pérangan sarana klik tengen ing sesirahing pérangan",
        "tog-watchcreations": "Wuwuh kaca gawéanku lan barkas unggahanku menyang pawawanganku",
        "nosuchusershort": "Ora ana panganggo mawa asma \"$1\". Coba dipriksa manèh pasang aksarané (éjaané).",
        "nouserspecified": "Panjenengan kudu milih jeneng panganggo.",
        "login-userblocked": "Panganggo iki pinalangan. Ora kena mbelu.",
-       "wrongpassword": "Jenang panganggo utawa tembung wadi kang diisèkaké salah.\nMangga jajalen manèh.",
+       "wrongpassword": "Jenang panganggo utawa tembung wadi kang panjenengan isèkaké salah.\nSumangga jajal manèh.",
        "wrongpasswordempty": "Tembung wadi kosong.\nJajalen manèh.",
        "passwordtooshort": "Tembung sesinglon paling sethithik cacahé {{PLURAL:$1|1 aksara|$1 aksara}}.",
        "passwordtoolong": "Tembung wadi ora kena munjuli {{PLURAL:$1|1 pralambang|$1 pralambang}}.",
-       "passwordtoopopular": "Tembung wadi kang wis kaprah ora kena dianggo. Mangga pilih tembung wadi liya kang mbédani.",
+       "passwordtoopopular": "Tembung wadi kang wis kaprah ora kena panjenengan agem. Sumangga pilih tembung wadi liya kang mbédani.",
        "password-name-match": "Tembung wadiné panjenengan kudu béda saka jeneng panganggoné panjenengan.",
        "password-login-forbidden": "Panganggoning jeneng panganggo lan tembung wadi iki dilarang.",
        "mailmypassword": "Balèni gawé tembung wadi",
        "anonpreviewwarning": "<em>Panjenengan durung mlebu log. Yèn disimpen, alamat IP panjenengan bakal kacathet ing sajarah besutan kaca iki.</em>",
        "missingsummary": "<strong>Pangéling-éling:</strong> Panjenengan ora ngisèni ringkesané besutan.\nManawa panjenengan mencèt \"$1\" manèh, besutané panjengan bakal kasimpen tanpa katerangan.",
        "selfredirect": "<strong>Pepéling:</strong> Panjenengan ngalih kaca iki menyang kaca iki dhéwé.\nPanjenengan mungkin salah wènèh paraning alihan utawa salah mbesut kaca.\nYèn panjenengan ngeklik \"$1\" manèh, kaca alihan bakal digawé.",
-       "missingcommenttext": "Mangga awèh tanggepan.",
+       "missingcommenttext": "Sumangga isi mawa tanggepan.",
        "missingcommentheader": "<strong>Pangéling-éling:</strong> Panjenengan durung mènèhi subyèk tumrap tanggapan iki.\nManawa panjenengan ngeklik \"$1\" manèh, besutané panjenengan bakal kasimpen tanpa subyèk.",
        "summary-preview": "Pratuduh ringkesan besutan:",
        "subject-preview": "Pratuduh jejer:",
        "reuploaddesc": "Wurung ngunggah lan bali menyang formulir unggahan",
        "upload-tryagain": "Kirim déskripsi barkas kang wis diowah",
        "uploadnologin": "Durung mlebu log",
-       "uploadnologintext": "Mangga $1 saperlu ngunggah barkas.",
+       "uploadnologintext": "Sumangga $1 saperlu ngunggah barkas.",
        "upload_directory_missing": "Dhirèktori unggahan ($1) ora tinemu lan ora bisa digawé déning server wèb.",
        "upload_directory_read_only": "Dhirèktori pangunggahan ($1) ora bisa ditulis déning paladèn jaringan.",
        "uploaderror": "Masalah pangunggah",
index 1dc9504..bab6507 100644 (file)
@@ -40,7 +40,6 @@
        "tog-extendwatchlist": "გავრცობილი კონტროლის სია ყველა დაკავშირებული ცვლილების ჩვენების ჩათვლით",
        "tog-usenewrc": "ბოლო ცვლილებების და კონტროლის სიის ცვლილებების დაჯგუფება",
        "tog-numberheadings": "ავტომატურად დანომრე ქვესათაურები",
-       "tog-showtoolbar": "რედაქტირების პანელის ჩვენება",
        "tog-editondblclick": "გვერდების რედაქტირება ორმაგი დაწკაპუნებით",
        "tog-editsectiononrightclick": "სექციის რედაქტირების ნებართვა სათაურებზე მარჯვენა ღილაკზე დაჭერით",
        "tog-watchcreations": "დაამატე ჩემი კონტროლის სიას ჩემს მიერ შექმნილი გვერდები და ატვირთული ფაილები",
index c836f82..34a7ffc 100644 (file)
@@ -18,7 +18,6 @@
        "tog-extendwatchlist": "Baqlaw dizimin barlıq o'zgerislerdi ko'rsetetug'ın qılıp ken'eyt (tek aqırg'ıların emes)",
        "tog-usenewrc": "Jaqındag'ı o'zgerisler ha'm baqlaw dizimindegi o'zgerislerdi birlestiriw",
        "tog-numberheadings": "Atamalardı avtomat nomerle",
-       "tog-showtoolbar": "O'zgertiw a'sbapların ko'rset",
        "tog-editondblclick": "Betlerdi eki ma'rte basıp o'zgertiw",
        "tog-editsectiononrightclick": "Bo'lim atamasın on' jaqqa basıp o'zgertiwdi qos",
        "tog-watchcreations": "Men jaratqan betlerdi ha'm ju'klegen fayllardı baqlaw dizimime qos",
index 631949d..02ff34b 100644 (file)
@@ -31,7 +31,6 @@
        "tog-extendwatchlist": "Ssemɣer umuɣ n uɛessi iwakken ad muqleɣ akk n wayen zemreɣ ad beddleɣ",
        "tog-usenewrc": "Ssegrew ibeddlen s usebtar deg ibeddilen imaynuten d umuɣ n uḍfar",
        "tog-numberheadings": "Izwal ɣur-sen imḍanen mebla ma serseɣ-iten",
-       "tog-showtoolbar": "Ssken tafeggagt n ifecka n ubeddel",
        "tog-editondblclick": "Beddel isebtar mi wekkiɣ snat n tikwal",
        "tog-editsectiononrightclick": "Ssermed abeddel n tigezmi s ukliki ayeffus ɣef izwal",
        "tog-watchcreations": "Rnu isebtar i xelqeɣ deg wumuɣ n uɛessi inu",
index 27e530f..048d018 100644 (file)
@@ -17,7 +17,6 @@
        "tog-extendwatchlist": "ЩӀэлъыплъыгъуэм и тхылъышхуэ, яужырэй къуэдейхэм нэмыщӀу зэхъуэкӀыгъуэ псори хэту",
        "tog-usenewrc": "Гъэтэрэзыгъуэ щӀэхэм я тхылъ нэхъыфӀыр къэгъэсэбэпын (JavaScript хуэныкъуэ)",
        "tog-numberheadings": "Псалъащхьэхэм автоматику номер ятын",
-       "tog-showtoolbar": "Гъэтэрэзыным идежь ищхьэ пэнелыр гъэлъэгъуэн (JavaScript)",
        "tog-editondblclick": "ТӀуанэ текъузэгъуэкӀэ напэкӀуэцӀхэр гъэтэрэзын (requires JavaScript)",
        "tog-editsectiononrightclick": "Псалъашъхьэм, дзыгъуэм и ижырабгъу текъузэгъуэмкӀэ секциэхэр гъэтэрэзын (JavaScript)",
        "tog-watchcreations": "Сэ сщIа напэкIуэцIхэр сызыкIэлъыплъ тхылъым хэлъхьэн",
index 24c157a..585d25c 100644 (file)
@@ -18,7 +18,6 @@
        "tog-extendwatchlist": "زیرِنظرفہرستو پھیلاؤ  کورے تاکہ ھیارا تھمامو ترمیمات غیچھی گیانی، نہ کہ صرفی تازہ ترین",
        "tog-usenewrc": "حالیہ تبدیلیان اوچے زیر نظر فہرستہ تبدیلیان بلحاظ صفحہ گروہ بندی کورے",
        "tog-numberheadings": "سرخیانتے تان لمبار دیت",
-       "tog-showtoolbar": "ترمیم کوریکو اوزاران پشاوے",
        "tog-editondblclick": "جو کلکہ صفحاتن ترمیم کورے",
        "tog-editsectiononrightclick": "سطری عنواناتا فروسکی کلکو ذریعا سطری ترمیم کاریو فعال ساؤزاوے",
        "tog-watchcreations": "مہ مرتب کاردو صفحاتن مہ  زیرِنظرفہرستہ شامل کورے",
index 9b798f0..7dff56c 100644 (file)
@@ -19,7 +19,6 @@
        "tog-extendwatchlist": "Lista şêrkerdene hira bıke ke vurnayişi pêro basê, teyna tewr peyêni nê",
        "tog-usenewrc": "Vurnayisê ke pela vurnayisunê peyênun u lista şêrkerdişi derê inu grube ke.",
        "tog-numberheadings": "Sernustu be ho numra cı sane",
-       "tog-showtoolbar": "Gozagunê hacetunê vurnayişi bıasne (JavaScript lazımo)",
        "tog-editondblclick": "Pê dı rey teqnayene pele sero bıguriye (JavaScript lazımo)",
        "tog-editsectiononrightclick": "Qısımu be teqnayena serrêze ra ebe gozaga raste bıvurne (JavaScript lazımo)",
        "tog-watchcreations": "Pelê ke mı afernê u dosyê ke mı bar kerdê lista mına şêrkerdişi ke",
index 19a44c0..f0ebb5c 100644 (file)
@@ -2,7 +2,8 @@
        "@metadata": {
                "authors": [
                        "Ninjastrikers",
-                       "Rul1902"
+                       "Rul1902",
+                       "Sawmw"
                ]
        },
        "underline-always": "ကိုဲၜၠင်",
@@ -85,6 +86,7 @@
        "noindex-category": "ဝီႋဖၠုံးသံင့်လေဝ်လိက်ဖၠုံးခၞါလ်ုအ်ှ လိက်မေံၜၠါ်လ်ုဖး",
        "broken-file-category": "ခါၯာၯံင် ဖိုင်ႋလင့်အှ်သယ်လ်ုဖး လိက်မေံၜၠါ်",
        "about": "အ်ုကျံင်",
+       "article": "ပ်ုယုံ့ခေါဟ်တင်လိက်မေံၜၠာ်",
        "newwindow": "(ဝင်းဒိုးသင့်လ်ုၮါင်းဝယ် မ်ုပုဂ်ထုင်း)",
        "cancel": "မာလှ်ေအေး",
        "moredotdotdot": "ၰိုဲမေံၜၠာ်...",
        "searchbutton": "အင်းၰူ့",
        "go": "လေဝ်",
        "searcharticle": "လေဝ်",
-       "history": "á\80\83á\80½á\80¾á\80¬á\80\94á\80·်မေင်ႋစိင်",
+       "history": "á\80\9cá\80­á\80\99á\80±á\80¶á\81\9cá\81 á\80¬်မေင်ႋစိင်",
        "history_short": "မေင်ႋစိင်",
        "history_small": "မေင်ႋစိင်",
        "updatedmarker": "လေဝ်ယောဝ်ႋဝေ့အ်ုလါင်ခါင့်ခါ့ အင်းတင်ထဝေ့",
        "jumpto": "မ်ုၯယ့်ထါင်ယိုဝ်",
        "jumptonavigation": "ပ်ုယုံ့",
        "jumptosearch": "အင်းၯူ့",
+       "pool-errorunknown": "လ်ုသီးယာ့ ဆ်ုမးၜး",
+       "poolcounter-usage-error": "ဆ်ုသုံႋဆာႋအ်ုမး: $1",
        "aboutsite": "အ်ုကျံင် {{SITENAME}}",
        "aboutpage": "Project:အ်ုၯံင်အ်ုကျံင်",
        "copyrightpage": "{{ns:project}}: ပ္တုံဆာပၞံင့်",
        "showtoc": "ဍုဂ်ၮဲ",
        "hidetoc": "အ်ှသူး",
        "collapsible-collapse": "မ်ုပေဝ်ႋက္ဍာ",
+       "collapsible-expand": "လဝ်လဲာ",
        "confirmable-confirm": "{{GENDER:$1|ၮ်ု}} ထီ့ဆာႋဝး?",
        "confirmable-yes": "မွာဲ",
        "confirmable-no": "လ်ုမာၜး",
        "nosuchspecialpage": "ဗေ့ယိုဝ်သိုဝ် လိက်မေံၜၠါ်ခေါဟ် လ်ုအှ်ၜး",
        "nospecialpagetext": "<strong>ၮ်ုယိုဝ် လ်ုထီ့ဆာ့ၜး လိက်မေံခေါဟ်လ်ုၮါင်းအိုဝ် အင်းကိင်ဖှ်ေထဆေဝ်ႋလှ်။</strong>\n\nထီ့ဆာ့ လိက်မေံခေါဟ် စ်ုရင့်သယ် [[Special:SpecialPages|{{int:specialpages}}]] ခဝ့် ၮ်ုဍးၮေဝ်လှ်။",
        "error": "ဆ်ုမး",
+       "databaseerror-error": "အ်ုမး: $1",
        "badtitle": "လိက်မေံဆ်ုနာႋ",
        "badtitletext": "အင်းကိင်ႋလင်ထ လိက်မေံၜၠါ် ခေါဟ်တင်ၮ်ှ လ်ုဖံင်ပၞံင့် (လ်ု) လ်ုအှ်မိင်ၜး (လ်ု) ၰာၰံင်ဘာႋသာ့လ်ုဖး(inter-language or inter-wiki title)အိုဝ် ထိုဝ်ၜုဂ်လင့်မးဝေ့လှ်။",
        "viewsource": "မ်ုယောဝ်ႋအ်ုဝီခၞာ",
        "whatlinkshere-hideimages": "ဖိုင်ႋဆ်ုထိုဝ်ၜုဂ်လ်ုဖး $1 ၮါင်း",
        "whatlinkshere-filters": "ဆၟိုဝ်သယ်လ်ုဖး",
        "ipboptions": "၂ နာႋဍီ:2 hours,၁ မူႋသင့်:1 day,၃ မူႋသင့်:3 days,၁ နိုဲ့:1 week,၂ နိုဲ့:2 weeks,လာ ၁ ၜိင်း:1 month,လာ ၃ ၜိင်း:3 months,လာ ၆ ၜိင်း:6 months,၁ ၮိင်း:1 year,လ်ုထုက်ၜးတ:infinite",
+       "ipb-partial": "ပါဍီယာႋ",
+       "ipb-type-label": "အ်ုမိင်အ်ုကုဂ်",
+       "ipb-pages-label": "လိက်မေံၜၠာ်လ်ုဖး",
        "infiniteblock": "အ်ုထုက်လ်ုအ်ှ",
+       "blocklist-editing": "ဆ်ုအင်းတါင်",
        "blocklink": "ဍုဂ်အ်ှပွါ်",
        "contribslink": "မာၜိုဝ်မာဆိုင်",
        "blocklogpage": "ဆ်ုဍာ်အှ်ၯင်း  လိက်မါၮါင်း",
        "logentry-upload-overwrite": "$3 ၮှ်ခဝ့် ဗားရှင်းအ်ုသင့်အိုဝ် $1 {{GENDER:$2|upload ပ္တုံထုင်းထဆေဝ်ႋ}}",
        "searchsuggest-search": "{{SITENAME}}ဝဲါ မ်ုအင်းၰူ့",
        "duration-days": "$1 {{PLURAL:$1|မူႋသင့်|မူႋသင့်လ်ုဖး}}",
+       "mw-widgets-titlesmultiselect-placeholder": "ဆူ့ဍုဂ် ဆ်ုအှ်ထါင်...",
        "randomrootpage": "လ်ုၜးမိင် အ်ုခံင့် လိက်မေံၜၠါ်"
 }
index 3967e27..edb61af 100644 (file)
@@ -12,7 +12,6 @@
        "tog-extendwatchlist": "باقىلاۋ ٴتىزىمدى ۇلعايت (بارلىق جارامدى وزگەرىستەردى كورسەت)",
        "tog-usenewrc": "كەڭەيتىلگەن جۋىقتاعى وزگەرىستەر (JavaScript)",
        "tog-numberheadings": "باس جولداردى وزدىكتىك نومىرلە",
-       "tog-showtoolbar": "وڭدەۋ قۋرالدار جولاعىن كورسەت (JavaScript)",
        "tog-editondblclick": "قوس نۇقىمداپ وڭدەۋ (JavaScript)",
        "tog-editsectiononrightclick": "ٴبولىم تاقىرىبىن وڭ نۇقۋمەن وڭدەۋىن قوس (JavaScript)",
        "tog-watchcreations": "مەن باستاعان بەتتەردى باقىلاۋ تىزىمىمە ۇستە",
index 93f7982..036a9d3 100644 (file)
@@ -28,7 +28,6 @@
        "tog-extendwatchlist": "Бақылау тізімді ұлғайтып барлық өзгерістерді көрсету, ең соңғыларды ғана емес",
        "tog-usenewrc": "Жуықтағы өзгерістер және бақылау тізімінде беті бойынша өзгерістерді топтау",
        "tog-numberheadings": "Мазмұн тақырыптарын автоматты нөмірлеу",
-       "tog-showtoolbar": "Өңдеу құралдарын үстелін көрсету",
        "tog-editondblclick": "Қос шерту арқылы бетті өңдеу",
        "tog-editsectiononrightclick": "Бөлім тақырыбын оң нұқумен бөлім өңдеуін қосу",
        "tog-watchcreations": "Мен бастаған беттерді және мен жүктеген файлдарды бақылау тізіміне қосу",
index eac51e1..824ae67 100644 (file)
@@ -14,7 +14,6 @@
        "tog-extendwatchlist": "Baqılaw tizimdi ulğaýt (barlıq jaramdı özgeristerdi körset)",
        "tog-usenewrc": "Keñeýtilgen jwıqtağı özgerister (JavaScript)",
        "tog-numberheadings": "Bas joldardı özdiktik nomirle",
-       "tog-showtoolbar": "Öñdew qwraldar jolağın körset (JavaScript)",
        "tog-editondblclick": "Qos nuqımdap öñdew (JavaScript)",
        "tog-editsectiononrightclick": "Bölim taqırıbın oñ nuqwmen öñdewin qos (JavaScript)",
        "tog-watchcreations": "Men bastağan betterdi baqılaw tizimime üste",
index e130589..017c661 100644 (file)
@@ -28,7 +28,6 @@
        "tog-extendwatchlist": "ពន្លាត​បញ្ជីតាមដាន​ដើម្បី​បង្ហាញ​គ្រប់​បន្លាស់ប្ដូរទាំងអស់ មិន​មែន​ត្រឹមតែ​បន្លាស់ប្ដូរថ្មី​ៗ​នោះ​ទេ",
        "tog-usenewrc": "បន្លាស់ប្ដូរជាក្រុមតាមទំព័រក្នុងបន្លាស់ប្តូរថ្មីៗនិងបញ្ជីតាមដាន",
        "tog-numberheadings": "ដាក់លេខ​ចំណងជើងរង​ដោយស្វ័យប្រវត្តិ",
-       "tog-showtoolbar": "បង្ហាញ​របារឧបករណ៍កែប្រែ",
        "tog-editondblclick": "កែប្រែទំព័រដោយចុចពីរដង​ជាប់គ្នា",
        "tog-editsectiononrightclick": "អនុញ្ញាត​អោយកែប្រែ​​ផ្នែកណាមួយ ដោយ​ចុចកណ្តុរស្ដាំ​លើ​ចំណងជើង​របស់វា",
        "tog-watchcreations": "បន្ថែម​ទំព័រ​ទាំងឡាយដែលខ្ញុំបង្កើត​ទៅ​បញ្ជីតាមដាន​របស់ខ្ញុំ",
index e751f0c..398584c 100644 (file)
@@ -44,7 +44,6 @@
        "tog-extendwatchlist": "ಕೇವಲ ಇತ್ತೀಚೆಗಿನ ಬದಲಾವಣೆಗಳಲ್ಲದೆ, ಎಲ್ಲಾ ಬದಲಾವಣೆಗಳನ್ನು ತೋರುವಂತೆ ಪಟ್ಟಿಯನ್ನು ವಿಸ್ತರಿಸಿ",
        "tog-usenewrc": "ಹೆಚ್ಚು ವರ್ಧಿಸಲಾದ ಇತ್ತೀಚಿನ ಬದಲಾವಣೆಗಳು ಪುಟ ಬಳಸು",
        "tog-numberheadings": "ತಲೆಬರಹಗಳಿಗೆ ಅಂಕಿಗಳನ್ನು ತೋರಿಸು",
-       "tog-showtoolbar": "ಸಂಪಾದನೆಯ ಉಪಕರಣಗಳ ಪಟ್ಟಿಯನ್ನು ತೋರು",
        "tog-editondblclick": "ಎರಡು ಬಾರಿ ಕ್ಲಿಕ್ ಮಾಡಿದಾಗ ಪುಟವು ಸಂಪಾದಿಸುವಂತಾಗಲಿ",
        "tog-editsectiononrightclick": "ಪುಟದ ವಿಭಾಗಗಳನ್ನು ಅವುಗಳ ಶೀರ್ಷಿಕೆಯನ್ನು ಎರಡು ಬಾರಿ ಕ್ಲಿಕ್ ಮಾಡಿ ಸಂಪಾದನೆ ಮಾಡುವಂತೆ ಇರಲಿ",
        "tog-watchcreations": "ನಾನು ಪ್ರಾರಂಭಿಸುವ ಲೇಖನಗಳನ್ನು ಮತ್ತು ಕಡತಗಳನ್ನು ನನ್ನ ವೀಕ್ಷಣಾಪಟ್ಟಿಗೆ ಸೇರಿಸು",
index 826a37d..601b284 100644 (file)
@@ -82,7 +82,6 @@
        "tog-extendwatchlist": "주시문서 목록에서 가장 최근의 편집만이 아닌 모든 편집을 보기",
        "tog-usenewrc": "최근 바뀜과 주시문서 목록의 문서별 그룹 바뀜",
        "tog-numberheadings": "자동으로 머리글 번호 매기기",
-       "tog-showtoolbar": "편집 도구 모음 보이기",
        "tog-editondblclick": "더블 클릭으로 문서 편집하기",
        "tog-editsectiononrightclick": "문단 제목을 오른쪽 클릭해서 문단 편집하기 활성화",
        "tog-watchcreations": "내가 만든 문서와 내가 올린 파일을 주시문서 목록에 추가",
        "subject-preview": "주제 미리 보기:",
        "previewerrortext": "변경사항을 미리보기하는 도중 오류가 발생했습니다.",
        "blockedtitle": "사용자가 차단됨",
+       "blocked-email-user": "<strong>사용자 이름은 이메일 보내기에서 차단되었습니다. 그러나 이 위키에서 다른 문서를 편집할 수 있습니다.</strong> [[Special:MyContributions|계정 기여]]에서 자세한 전체 차단 정보를 볼 수 있습니다.\n\n차단은 $1님에 의해 이루어졌습니다.\n\n지정된 이유는 <em>$2</em>입니다.\n\n* 차단이 시작된 시간: $8\n* 차단이 끝나는 시간: $6\n* 차단된 사용자: $7\n* 차단 ID #$5",
        "blockedtext": "'''사용자 계정 또는 IP 주소가 차단되었습니다.'''\n\n차단한 사람은 $1입니다.\n차단한 이유는 다음과 같습니다: <em>$2</em>.\n\n* 차단이 시작된 시간: $8\n* 차단이 끝나는 시간: $6\n* 차단된 사용자: $7\n\n$1 또는 [[{{MediaWiki:Grouppage-sysop}}|다른 관리자]]에게 차단에 대해 문의할 수 있습니다.\n[[Special:Preferences|계정 환경 설정]]에 올바른 이메일 주소가 있어야만 '이메일 보내기' 기능을 사용할 수 있습니다. 또 이메일 보내기 기능이 차단되어 있으면 이메일을 보낼 수 없습니다.\n현재 당신의 IP 주소는 $3이고, 차단 ID는 #$5입니다.\n문의할 때에 이 정보를 같이 알려주세요.",
        "autoblockedtext": "당신의 IP 주소는 $1님이 차단한 사용자가 사용했던 IP이기 때문에 자동으로 차단되었습니다.\n차단된 이유는 다음과 같습니다:\n\n:<em>$2</em>\n\n* 차단이 시작된 시간: $8\n* 차단이 끝나는 시간: $6\n* 차단된 사용자: $7\n\n$1 또는 [[{{MediaWiki:Grouppage-sysop}}|다른 관리자]]에게 차단에 대해 문의할 수 있습니다.\n\n[[Special:Preferences|사용자 환경 설정]]에 올바른 이메일 주소가 있어야만 \"이메일 보내기\" 기능을 사용할 수 있습니다. 또한 이메일 보내기 기능이 차단되어 있으면 이메일을 보낼 수 없습니다.\n\n현재 IP 주소는 $3이고, 차단 ID는 #$5입니다.\n문의할 때에 이 정보를 같이 알려주세요.",
        "systemblockedtext": "당신의 사용자 이름 또는 IP 주소가 자동으로 미디어위키에 의해 차단되었습니다.\n이유는 다음과 같습니다:\n\n:<em>$2</em>\n\n* 차단 시작: $8\n* 차단 만료: $6\n* 차단 대상: $7\n\n당신의 현재 IP 주소는 $3입니다.\n문의에 대해 상기의 상세 설명을 모두 포함해 주십시오.",
        "logdelete-text": "삭제된 로그 내용은 로그에 나타나지만, 내용 중 일부는 일반인이 접근할 수 없게 됩니다.",
        "revdelete-text-others": "다른 관리자는 여전히 숨겨진 내용에 접근할 수 있고 추가 제한이 설정되어 있지 않으면, 다시 되살릴 수 있습니다.",
        "revdelete-confirm": "이 작업의 수행 결과를 알고 있으며, 이 작업이 [[{{MediaWiki:Policy-url}}|정책]]에 의거하는지 확인해주세요.",
-       "revdelete-suppress-text": "숨기기는 <strong>다음 경우에만</strong> 사용되어야 합니다:\n* 잠재적인 비방 정보\n* 부적절한 개인 정보\n*: 집 주소, 전화번호, 주민등록번호 등",
+       "revdelete-suppress-text": "감추기는 <strong>다음 경우에만</strong> 사용되어야 합니다:\n* 잠재적인 비방 정보\n* 부적절한 개인 정보\n*: 집 주소, 전화번호, 주민등록번호 등",
        "revdelete-legend": "보이기 제한을 설정",
        "revdelete-hide-text": "판 문자열",
        "revdelete-hide-image": "파일을 숨기기",
        "revdelete-radio-same": "(바꾸지 않음)",
        "revdelete-radio-set": "숨겨짐",
        "revdelete-radio-unset": "보임",
-       "revdelete-suppress": "문서 내용을 관리자에게도 보이지 않게 숨기기",
+       "revdelete-suppress": "문서 내용을 관리자에게도 보이지 않게 감추기",
        "revdelete-unsuppress": "복구된 판에 대한 제한을 해제",
        "revdelete-log": "이유:",
        "revdelete-submit": "선택한 {{PLURAL:$1|판}}에 적용",
        "prefixindex": "접두어에 따른 문서 목록",
        "prefixindex-namespace": "접두어가 있는 모든 문서 ($1 이름공간)",
        "prefixindex-submit": "보이기",
-       "prefixindex-strip": "목록에서 접두어 생략",
+       "prefixindex-strip": "결과에서 접두어 숨기기",
        "shortpages": "내용이 적은 문서 목록",
        "longpages": "내용이 많은 문서 목록",
        "deadendpages": "막다른 문서 목록",
        "ipb-disableusertalk": "차단된 동안 자신의 사용자 토론 문서를 편집하지 못하도록 막기",
        "ipb-change-block": "이 설정으로 이 사용자를 다시 차단합니다",
        "ipb-confirm": "차단 확인",
+       "ipb-sitewide": "사이트 전체",
+       "ipb-partial": "부분",
+       "ipb-type-label": "유형",
+       "ipb-pages-label": "문서",
        "badipaddress": "잘못된 IP 주소",
        "blockipsuccesssub": "차단 완료",
        "blockipsuccesstext": "[[Special:Contributions/$1|$1]]님이 차단되었습니다.<br />\n차단된 사용자 목록은 [[Special:BlockList|여기]]에서 볼 수 있습니다.",
        "createaccountblock": "계정 만들기 금지됨",
        "emailblock": "이메일 차단됨",
        "blocklist-nousertalk": "자신의 토론 문서 편집 불가",
+       "blocklist-editing": "편집 중",
+       "blocklist-editing-sitewide": "편집 중 (사이트 전체)",
        "ipblocklist-empty": "차단 목록이 비어 있습니다.",
        "ipblocklist-no-results": "요청한 IP 주소나 사용자는 차단되지 않았습니다.",
        "blocklink": "차단",
        "mw-widgets-titleinput-description-redirect": "$1 문서로 넘겨주기",
        "mw-widgets-categoryselector-add-category-placeholder": "분류 추가...",
        "mw-widgets-usersmultiselect-placeholder": "더 추가하기...",
+       "mw-widgets-titlesmultiselect-placeholder": "더 추가하기...",
        "date-range-from": "시작 날짜:",
        "date-range-to": "끝 날짜:",
        "sessionmanager-tie": "여러 요청 인증 유형 결합할 수 없습니다: $1.",
        "passwordpolicies-policy-passwordcannotmatchblacklist": "비밀번호는 블랙리스트에 있는 비밀번호와 일치할 수 없습니다",
        "passwordpolicies-policy-maximalpasswordlength": "비밀번호는 적어도 $1 {{PLURAL:$1|자}} 미만이어야 합니다",
        "passwordpolicies-policy-passwordcannotbepopular": "비밀번호는 {{PLURAL:$1|저명한 비밀번호가 될|$1개의 저명한 비밀번호에 속할}} 수 없습니다",
-       "easydeflate-invaliddeflate": "주어진 컨텐츠가 적절히 압축되지 않았습니다"
+       "easydeflate-invaliddeflate": "주어진 컨텐츠가 적절히 압축되지 않았습니다",
+       "unprotected-js": "보안 상의 이유로 자바스크립트는 보호되지 않은 문서로부터 불러올 수 없습니다. 미디어위키: 이름공간이나 사용자의 하위 문서에서만 자바스크립트를 만들어 주십시오."
 }
index 89e4ac1..9e6c932 100644 (file)
@@ -21,7 +21,6 @@
        "tog-extendwatchlist": "Кёзде тургъан тизмени, къуру ахыр тюл, бютеу тюрлениулени кёрюр ючюн кенгерт",
        "tog-usenewrc": "Ахыр тюрлениуледе эм кёздеги тизмеде бетлени тюрлениулерин къауумлашдыр",
        "tog-numberheadings": "Башлыкъланы (бёлюмлени атлары) автомат номерленсинле",
-       "tog-showtoolbar": "Тюрлендириу адыр панелни кёргюз",
        "tog-editondblclick": "Эки басыу бла бетлени тюрлендир",
        "tog-editsectiononrightclick": "Бёлюмлени бёлюм башлыкъгъа басханлай тюрлендир",
        "tog-watchcreations": "Мен къурагъан (башлагъан) бетлени эм мен джюклеген файлланы кёзюмде тургъан тизмеме къош",
index d3f6dbd..3609d87 100644 (file)
@@ -11,7 +11,8 @@
                        "TTO",
                        "Macofe",
                        "Nemo bis",
-                       "Fitoschido"
+                       "Fitoschido",
+                       "MusikAnimal"
                ]
        },
        "tog-underline": "Dun de Lengks ongerschtriische:",
@@ -22,7 +23,6 @@
        "tog-extendwatchlist": "Verjrößer de Oppaßleß för jede Aat vun müjjeliche Ännderonge ze zeije, nit alleijns  de neuste.",
        "tog-usenewrc": "De Änderonge en de „{{int:Recentchanges}}“ un en de Oppaßleß en Jroppe zesammevaße.",
        "tog-numberheadings": "Dun de Üvverschrefte automatisch nummereere",
-       "tog-showtoolbar": "De Wärkzüchleß zom Ändere aanzeije",
        "tog-editondblclick": "Sigge met Dubbel-Klicke ändere",
        "tog-editsectiononrightclick": "Afschnedde met Räächs-Klecke op de Üvverschrefte ändere",
        "tog-watchcreations": "Donn Sigge beim neu Aanlääje automattesch för ming Oppaßlėß vörschlonn",
        "booksources-search": "Söhke",
        "booksources-text": "Hee noh küdd_en Leßß met Websigge,\nwo mir {{GRAMMAR:Dative fun|{{SITENAME}}}} nix wigger med ze donn hänn,\nwo mer jät övver Böösher erfaare\nun zom Dëijl och Böösher koufe kann.\nDoför moßß De Desh mannshmool allodengs eetß ennß aanmällde,\nwat Koßte un Jefaare met sesh brenge künndt.\nWo_t jëijdt,\njonn di Lengkß hee tirrägg_op dat Booch,\nwadd_Er am Sööke sidt.",
        "booksources-invalid-isbn": "De ISBNummer schingk verkeeht ze sin. Loohr ens donoh, woh se häe kütt.",
-       "specialloguserlabel": "Dä Metmaacher, dä et jedonn hät:",
+       "specialloguserlabel": "Metmaacher:",
        "speciallogtitlelabel": "Betroffe wohr: (dä Tittel vun ener Sigg udder enem Metmaacher singe Nahme)",
        "log": "Logböcher ehr Opzeichnunge (all)",
        "logeventslist-submit": "Lohß jonn!",
index d9353bc..c112217 100644 (file)
@@ -33,7 +33,6 @@
        "tog-extendwatchlist": "Lîsteya şopandinê berfireh bike ji bo dîtina hemû guherandinan, ne tenê yên nû",
        "tog-usenewrc": "Weşandina zêdetir (JavaScript pêwîst e)",
        "tog-numberheadings": "Sernavan otomatîk bihejmêre",
-       "tog-showtoolbar": "Çoyê sererastkirinê nîşan bide",
        "tog-editondblclick": "Rûpelan bi du klîkan biguherîne",
        "tog-editsectiononrightclick": "Beşekê bi rast-klîkekê biguherîne",
        "tog-watchcreations": "Rûpelên min çêkirin û dosyeyên min barkirin, têxe nav lîsteya min a şopandinê",
index 89b7548..947f7a3 100644 (file)
@@ -20,7 +20,6 @@
        "tog-extendwatchlist": "Efani an rol wolya dhe dhiskwedhes keniver chanj, a-dar an moyha a-dhiwedhes hepken",
        "tog-usenewrc": "Bagasa chanjyow herwydh an folen yn chanjyow a-dhiwedhes hag y'n rol wolya (res yw JavaScript)",
        "tog-numberheadings": "Awto-nivera pennlinennow",
-       "tog-showtoolbar": "Diskwedhes an toulvar chanjya (res yw JavaScript)",
        "tog-editondblclick": "Chanjya folennow ow tobyl-glyckya (res yw JavaScript)",
        "tog-editsectiononrightclick": "Galosegi chanjya trehow dre dhyhow-glyckya war ditlys an trehow (res yw JavaScript)",
        "tog-watchcreations": "Keworra folennow gwruthys genev ha restrennow ughkergys genev dhe'm rol golyas",
index bd7ae38..d979b6a 100644 (file)
@@ -28,7 +28,6 @@
        "tog-extendwatchlist": "Бүт өзгөртүүлөрдү камтыган кеңири көзөмөл тизмеси, эң соңкуларды гана эмес",
        "tog-usenewrc": "Өзгөртүүлөрдү соңку өзгөрүүлөргө жана көзөмөл тизмеме топтоо (JavaScript талап кылынат)",
        "tog-numberheadings": "Башжазууларды автоматтык түрдө номердөө",
-       "tog-showtoolbar": "Оңдоо учурунда аспаптар тактасын көрсөтүү (JavaScript талап кылынат)",
        "tog-editondblclick": "Эки басып баракты оңдоо (JavaScript талап кылынат)",
        "tog-editsectiononrightclick": "Бөлүмдүн башжазуусун чычкандын оң баскычы менен басканда оңдоп-түзөө бөлүгүн ачуу (JavaScript талап кылынат)",
        "tog-watchcreations": "Көзөмөл тизмеме мен жараткан барактарды жана мен жүктөгөн файлдарды кошуу",
index 0c39fbe..02d834b 100644 (file)
@@ -28,7 +28,8 @@
                        "Xð",
                        "Laurentianus",
                        "Guillermo2149",
-                       "Fitoschido"
+                       "Fitoschido",
+                       "LittlePuppers"
                ]
        },
        "tog-underline": "Versores linea denotandi:",
@@ -39,7 +40,6 @@
        "tog-extendwatchlist": "In indice paginarum observandarum non solum recentissimas, verum omnes mutationes ostendere",
        "tog-usenewrc": "Indices per paginas redigere",
        "tog-numberheadings": "Subtituli numeris adornandi",
-       "tog-showtoolbar": "Trabem editoriam affigere",
        "tog-editondblclick": "Duplici ictu liceat paginam recensere",
        "tog-editsectiononrightclick": "Titulis a dextra tactis liceat paginarum partes recensere",
        "tog-watchcreations": "Paginas, quas creavero, et fasciculos, quos imposuero, observare",
        "searcharticle": "Ire",
        "history": "Historia paginae",
        "history_short": "Historia",
+       "history_small": "historia",
        "updatedmarker": "mutata postquam vidi",
        "printableversion": "Forma impressibilis",
        "permalink": "Nexus perpetuus",
        "collapsible-collapse": "Collabi",
        "collapsible-expand": "Dilatare",
        "confirmable-yes": "Sic",
+       "confirmable-no": "Minime",
        "thisisdeleted": "Videre aut restituere $1?",
        "viewdeleted": "Visne conspicere $1?",
        "restorelink": "{{PLURAL:$1|unam redactionem deletam|$1 redactiones deletas}}",
        "nospecialpagetext": "<strong>Paginam specialem invalidam petivisti.</strong>\n\nPro indice paginarum specialum validarum, vide [[Special:SpecialPages|{{int:specialpages}}]].",
        "error": "Erratum",
        "databaseerror": "Erratum in basi datorum",
+       "databaseerror-error": "Erratum: $1",
        "readonly": "Basis datorum obstructa",
        "missingarticle-rev": "(ID numerus redactionis: $1)",
        "missingarticle-diff": "(Diss: $1, $2)",
        "retypenew": "Adfirmare tesseram novam:",
        "resetpass_submit": "Tesseram mutare et nomen dare",
        "changepassword-success": "Tessera tua prospere mutata est.",
+       "botpasswords-label-create": "Creare",
+       "botpasswords-label-cancel": "Dimittere",
+       "botpasswords-label-delete": "Delere",
        "resetpass_forbidden": "Tesserae mutari non possunt",
        "resetpass-no-info": "Ad hanc paginam adeundam necesse est nomen dare.",
        "resetpass-submit-loggedin": "Tesseram mutare",
        "userrights-reason": "Causa:",
        "userrights-changeable-col": "Greges quos tibi oportet mutare",
        "userrights-unchangeable-col": "Greges quos tibi non oportet mutare",
+       "userrights-expiry-none": "Non desinere facit",
        "group": "Grex:",
        "group-user": "Usores",
        "group-autoconfirmed": "Usores automatice confirmati",
        "recentchanges-label-plusminus": "Tot octetis magnitudo paginae mutata est",
        "recentchanges-legend-heading": "<strong>Legenda:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (vide etiam [[Special:NewPages|indicem paginarum novarum]])",
+       "rcfilters-tag-prefix-namespace-inverted": "<strong>:non</strong> $1",
        "rcnotefrom": "Subter sunt '''$1''' nuperrime mutata in proxima '''$2''' die.",
        "rclistfrom": "Monstrare mutata nova incipiens ab $3 $2",
        "rcshowhideminor": "$1 recensiones minores",
        "ignorewarnings": "Ignorare monita omnia",
        "minlength1": "Nomina fasciculorum saltem unam litteram habere debent.",
        "badfilename": "Nomen fasciculi ad \"$1\" mutatum est.",
+       "filetype-banned-type": "<strong>\".$1\"</strong> {{PLURAL:$4|typus licitus fasciculi non est|typi liciti fasciculorum non sunt}}.\n{{PLURAL:$3|Typus licitus fasciculi est|Typi liciti fasciculorum sunt}} $2.",
        "filetype-missing": "Fasciculus extensionem non habet (sicut e.&nbsp;g. \".jpg\").",
        "large-file": "Suasum est ut fasciculi $1 magnitudine non excedant; magnitudo huius fasciculi est $2.",
        "uploadwarning": "Monitus imponendi",
        "license-header": "Potestas usoris",
        "nolicense": "Nulla selecta",
        "license-nopreview": "(Prospectus non fieri potest)",
+       "listfiles-delete": "delere",
        "imgfile": "fasciculus",
        "listfiles": "Fasciculorum index",
        "listfiles_thumb": "Minutio",
        "listfiles_size": "Magnitudo",
        "listfiles_description": "Descriptio",
        "listfiles_count": "Redactiones",
+       "listfiles-latestversion-yes": "Sic",
+       "listfiles-latestversion-no": "Minime",
        "file-anchor-link": "Fasciculus",
        "filehist": "Historia fasciculi",
        "filehist-help": "Presso die vel tempore fasciculum videbis, sicut tunc temporis apparuit.",
        "download": "depromere",
        "unwatchedpages": "Paginae non observatae",
        "listredirects": "Redirectiones",
+       "listduplicatedfiles-entry": "[[:File:$1|$1]] [[$3|{{PLURAL:$2|duplicatum|duplicatos $2}}]] habet.",
        "unusedtemplates": "Formulae non in usu",
        "unusedtemplateswlh": "nexus alii",
        "randompage": "Pagina fortuita",
        "mostimages": "Fasciculi maxime annexi",
        "mostrevisions": "Paginae plurimum mutatae",
        "prefixindex": "Paginae omnes cum praefixo",
+       "prefixindex-submit": "Monstrare",
        "shortpages": "Paginae breves",
        "longpages": "Paginae longae",
        "deadendpages": "Paginae sine nexu",
        "protectedpages": "Paginae protectae",
        "protectedpages-indef": "Solum protectiones infinitas",
        "protectedpages-cascade": "Solum protectiones defluentes quasi cataracta",
+       "protectedpages-page": "Pagina",
        "protectedtitles": "Tituli protecti",
        "listusers": "Usores",
        "listusers-editsonly": "Monstrare solum usores qui recensuerunt",
        "usereditcount": "$1 {{PLURAL:$1|recensio|recensiones}}",
        "usercreated": "$3 impositum die $2 hora $1",
        "newpages": "Paginae novae",
+       "newpages-submit": "Monstrare",
        "newpages-username": "Nomen usoris:",
        "ancientpages": "Paginae veterrimae",
        "move": "Movere",
        "pager-newer-n": "{{PLURAL:$1|recentiorem 1|recentiores $1}}",
        "pager-older-n": "{{PLURAL:$1|superiorem 1|superiores $1}}",
        "suppress": "Censura",
+       "apisandbox-examples": "Exempla",
        "booksources": "Librorum fontes",
        "booksources-search-legend": "Fontes impressas quaerere",
        "booksources-search": "Quaerere",
        "pageinfo-recent-edits": "Praesens numerus recensionum (intra praeterita $1)",
        "pageinfo-hidden-categories": "{{PLURAL:$1|Categoria celata|Categoriae celatae}} ($1)",
        "pageinfo-toolboxlink": "De hac pagina",
+       "pageinfo-contentpage-yes": "Ita",
+       "pageinfo-protect-cascading-yes": "Ita",
        "markaspatrolleddiff": "Indicare hanc paginam qua circumita",
        "markaspatrolledtext": "Indicare hanc paginam qua circumita",
        "markedaspatrolled": "Indicare hanc paginam qua circumita",
        "tag-filter-submit": "Filtrum",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tag|Tags}}]]: $2)",
        "tags-title": "Affixa",
+       "tags-active-yes": "Sic",
        "tags-edit": "recensere",
        "tags-hitcount": "$1 {{PLURAL:$1|mutatum|mutata}}",
        "compare-page1": "Pagina 1",
        "htmlform-submit": "Submittere",
        "htmlform-reset": "Mutationes abrogare",
        "htmlform-selectorother-other": "Aliud",
+       "htmlform-yes": "Sic",
        "logentry-delete-delete": "$1 delevit paginam $3",
        "logentry-delete-restore": "$1 restituit paginam $3",
        "logentry-move-move": "$1 movit paginam $3 ad $4",
index c1d7b45..1fffe53 100644 (file)
@@ -21,7 +21,6 @@
        "tog-extendwatchlist": "Anchar mi lista de akavidamiento afín de àmostrar todos los trocamientos, no sólo los muevos",
        "tog-usenewrc": "Agrupar kambios por pajinas en kambios resiente y lista",
        "tog-numberheadings": "Numerotar otomatika mente los títolos de los kapítolos",
-       "tog-showtoolbar": "Amostrar el chibuk de aparatos",
        "tog-editondblclick": "Trocar las hojas con doble klik",
        "tog-editsectiononrightclick": "Pueder trocar los kapítůlos, en pizando el botón derecho del ratón encima el títůlo",
        "tog-watchcreations": "Anyadir lad pajinas ke kree i archivos ke karge a mi lista",
index d765524..25e729c 100644 (file)
@@ -28,7 +28,6 @@
        "tog-extendwatchlist": "Iwwerwaachungslëscht op all Ännerungen ausbreeden, net nëmmen op déi rezentst",
        "tog-usenewrc": "Rezent Ännerungen an Iwwerwaachungslëscht pro Säit weisen",
        "tog-numberheadings": "Iwwerschrëften automatesch numeréieren",
-       "tog-showtoolbar": "Ännerungstoolbar weisen",
        "tog-editondblclick": "Säite mat Duebelklick änneren",
        "tog-editsectiononrightclick": "Eenzel Abschnitter mat Rietsklick änneren",
        "tog-watchcreations": "Säiten déi ech uleeën a Fichieren déi ech eroplueden op meng Iwwerwaachungslëscht dobäisetzen",
        "ipb-disableusertalk": "Dëse Benotzer dorun hënnere fir seng eegen Diskussiounssäit z'ännere sou laang wéi e gespaart ass",
        "ipb-change-block": "De Benotzer mat dese Parameteren nees spären",
        "ipb-confirm": "Spär confirméieren",
+       "ipb-partial": "Partiell",
+       "ipb-type-label": "Typ",
+       "ipb-pages-label": "Säiten",
        "badipaddress": "D'IP-Adress huet dat falscht Format.",
        "blockipsuccesssub": "Gouf gespaart",
        "blockipsuccesstext": "[[Special:Contributions/$1|$1]] gouf gespaart. <br />\n\nKuckt d'[[Special:BlockList|Spär-Lëscht]] fir all Spären nozekucken.",
        "createaccountblock": "Opmaache vu Benotzerkonte gespaart",
        "emailblock": "E-Maile schécke gespaart",
        "blocklist-nousertalk": "däerf seng eegen Diskussiounssäit net ännereen",
+       "blocklist-editing": "änneren",
        "ipblocklist-empty": "D'Spärlëscht ass eidel.",
        "ipblocklist-no-results": "Déi gesichten IP-Adress respektiv de gesichte Benotzer ass net gespaart.",
        "blocklink": "spären",
        "mw-widgets-titleinput-description-redirect": "viruleeden op $1",
        "mw-widgets-categoryselector-add-category-placeholder": "Eng Kategorie dobäisetzen...",
        "mw-widgets-usersmultiselect-placeholder": "Méi dobäisetzen...",
+       "mw-widgets-titlesmultiselect-placeholder": "Méi derbäisetzen...",
        "date-range-from": "Vum (Datum):",
        "date-range-to": "Bis den (Datum):",
        "sessionprovider-generic": "$1-Sessiounen",
index e57ba4a..ead8345 100644 (file)
@@ -27,7 +27,6 @@
        "tog-extendwatchlist": "ЧӀехи сиягь килигунин, кутазвай вири дегишунар, амма са эхирбур туш",
        "tog-usenewrc": "Мукьвара хьайи масакӀавилерин ччина ва вилив хуьнин сиягьда дуьзар хъувунар кӀеретӀриз ччара авун. (JavaScript герекзава)",
        "tog-numberheadings": "Кьилин цӀарариз автоматдаказ номерар эцигун",
-       "tog-showtoolbar": "Дуьзар хъувунин алатрин кьвати къалура (JavaScript)",
        "tog-editondblclick": "Ччинар кьве тӀампӀуналди дуьзар хъувун (JavaScript герекзава)",
        "tog-editsectiononrightclick": "Пайдин кьилинцӀардиз эрчӀи патан тӀампӀ авуна пайдин дуьзар хъувуниз мумкинвал гун (JavaScript герекзава)",
        "tog-watchcreations": "За туькӀуьрнавай ччинар зи гуьзетунин сиягьдиз алава авун",
index f279596..4c7a700 100644 (file)
@@ -24,7 +24,6 @@
        "tog-extendwatchlist": "Aumenta la lista monitorida per mostra tota cambias, no sola la plu resentes",
        "tog-usenewrc": "Grupi cambias par paje en cambias resente e lista monitorida",
        "tog-numberheadings": "Numeri automata titulos",
-       "tog-showtoolbar": "Mostra la utiles de edita",
        "tog-editondblclick": "Edita pajes par clica duple",
        "tog-editsectiononrightclick": "Edita un parte par clica destra un titulo de parte",
        "tog-watchcreations": "Ajunta a mea lista monitorida la pajes cual me crea e la fixes cual me carga",
index fe1221f..3acc272 100644 (file)
@@ -14,7 +14,6 @@
        "tog-extendwatchlist": "Olukalala lw'empapula zengoberera lulabike mu bujjuvu, nga ebikyuse byonna mwebiri so ssi ebisinga obugya byokka",
        "tog-usenewrc": "Olukalala olw'ebikyuse lweyambise obusobozi obw'enyongeza (kyetaagisa 'JavaScript')",
        "tog-numberheadings": "Emitwe gy'emiko ku mpapula gibengako ennamba",
-       "tog-showtoolbar": "Amapeesa g'ebiyamba mu kuwandika galabikenga (kino kyetaagisa JavaScript)",
        "tog-editondblclick": "Okunyiga eppeesa emirundi ebiri kubikkulenga w'okyusiza olupapula  (kyetaagisa 'JavaScript')",
        "tog-editsectiononrightclick": "Okunyiga ku omutwe gw'omuko ku lupapula n'eppeesa erya ddyo kubikkulenga w'ogukyusiza (kyetaagisa 'JavaScript')",
        "tog-watchcreations": "Empapula zenkolawo ziteekebwenga ku lukalala lw'ezo zengoberera",
index f7db609..ffc87a0 100644 (file)
@@ -29,7 +29,6 @@
        "tog-extendwatchlist": "Oetgebreide volglies gebroeke óm alle verangeringe te zeen en neet allein de lèste",
        "tog-usenewrc": "Tuun verangeringe per pagina in recènte verangeringe en volglies",
        "tog-numberheadings": "Köpkes autematis nómmere",
-       "tog-showtoolbar": "Laot bewirkingwerkbalk zeen",
        "tog-editondblclick": "Bewirk pagina's bie 'ne dobbelklik",
        "tog-editsectiononrightclick": "Secties bewirke mit 'ne rechtermoesklik op sectietitels",
        "tog-watchcreations": "Volg autematis pagina's die ich aanmaak en bestenj die ich upload",
        "imagetypemismatch": "De nuje bestandjsextensie is neet gliek aan 't bestandjstype.",
        "imageinvalidfilename": "De nuje bestandsnaam is ongeldig",
        "fix-double-redirects": "Alle doorverwiezinge biewerke die verwieze nao de originele paginanaam",
-       "move-leave-redirect": "'n Doorverwiezing achterlaote",
+       "move-leave-redirect": "Laot 'ne redirek staon",
        "protectedpagemovewarning": "'''Waorsjoewing: Dees pazjena is besjermp zoedat ze allein doer gebroekers mit administratorrechte kint weure verplaats.'''\nDe lèste logbookregel steit hierónger:",
        "semiprotectedpagemovewarning": "<strong>Let op:</strong> Dees pazjena is beveilig en kin allein door geregistreerde gebroekers verplaats waere.\nDe lèste logbookregel steit hiejónger:",
        "move-over-sharedrepo": "[[:$1]] besteit al in 'ne gedeildje mediadatabank.\nE bestandj hiehaer verplaatse euversjrief 't gedeildj bestandj.",
index 8356723..6a59927 100644 (file)
@@ -27,7 +27,6 @@
        "tog-extendwatchlist": "mostra tùtte e modìfiche di òservæ speciâli, no solo l'ùrtima",
        "tog-usenewrc": "Amùggia pe pàgina e modìfiche inte ùrtime modìfiche e sotta òservaçión",
        "tog-numberheadings": "Numeraçión aotomàtica di tìtoli de seçión",
-       "tog-showtoolbar": "Mostra a bâra di strumenti de modìfica",
        "tog-editondblclick": "Modìfica de pàgine tràmite dóggio clic",
        "tog-editsectiononrightclick": "Permetti de modificâ e seçioìn co-o clic drîto in sciô tìtolo",
        "tog-watchcreations": "Azonzi e pàgine che mi crêo e i files che càrego a-i öservæ speciâli",
index 2e98cb9..9c35093 100644 (file)
@@ -23,7 +23,6 @@
        "tog-extendwatchlist": " کؤل رزگ-فئرست الؤن(آلشت)کریال-تغیرات نیشان دۀ،نۀ هر تنیا دؤمائنۀل",
        "tog-usenewrc": "تنیا آڵؤن(آلشتی)کریال تازۀ ؤ لیست پئگیریۀل رزگ بنی-گروه بندی کۀ",
        "tog-numberheadings": "شؤمارۀ  نئ خودکار سروڵگۀل-عناوین",
-       "tog-showtoolbar": "دیار دائن ابزار دسکاری",
        "tog-editondblclick": "دەسکاری وەڵگەل وە دۆگل کلیک کردن",
        "tog-editsectiononrightclick": "دسکاری کردن راسال-بخشۀل ئۀ کلیک راست کردن ئۀرؤی سرولگۀل باج کار",
        "tog-watchcreations": "وڵگۀلئ گه مَسازم ؤ پرؤندۀلئ گه مۀنم اضافۀ که فئرست سئرکردنۀل",
index d66f127..7c6dcf9 100644 (file)
@@ -31,7 +31,6 @@
        "tog-extendwatchlist": "Slarga la funziun \"tegn sot ögg\" in manera che la fà vidè tüt i mudifegh, minga dumà l'ültema",
        "tog-usenewrc": "Reönés le mudifiche per pàgina endèle ölteme mudìfiche 'ndèi oservàcc speciài",
        "tog-numberheadings": "Auto-nümerazion di paragraf",
-       "tog-showtoolbar": "Fà ved la barra dei arnés de modifica",
        "tog-editondblclick": "Redatá i pagin cun al dópi clich",
        "tog-editsectiononrightclick": "Abilitá mudifica di seziún cun al clic dester sül tìtul",
        "tog-watchcreations": "Giunta i paginn e i archivi ch'hoo creaa mì a la lista di paginn che tegni sot ögg",
index 14c9294..8011325 100644 (file)
@@ -16,7 +16,6 @@
        "tog-extendwatchlist": "ຂະຫຍາຍລາຍການຕິດຕາມໃຫ້ສະແດງການປ່ຽນແປງທັງໝົດ, ບໍ່ແມ່ນພຽງການປ່ຽນແປງລ້າສຸດ",
        "tog-usenewrc": "ຈັດກຸ່ມການປ່ຽນແປງແບ່ງຕາມໜ້າຢູ່ໃນລາຍການປ່ຽນແປງລ້າສຸດແລະລາຍການຕິດຕາມ",
        "tog-numberheadings": "ກຳນົດເລກຫົວເລື່ອງອັດຕະໂນມັດ",
-       "tog-showtoolbar": "ສະແດງແຖບເຄື່ອງມືແກ້ໄຂ",
        "tog-editondblclick": "ແກ້ໄຂໜ້າເມື່ອກົດສອງເທື່ອ",
        "tog-editsectiononrightclick": "ເປີດໃຊ້ງານການແກ້ໄຂສ່ວນໂດຍກົດເມົາສ໌ດ້ານຂວາຢູ່ເທິງຊື່ເລື່ອງຂອງສ່ວນນັ້ນ",
        "tog-watchcreations": "ເພີ່ມໜ້າທີ່ຂ້ອຍສ້າງແລະໄຟລ໌ທີ່ຂ້ອຍອັບໂຫຼດເຂົ້າໃນລາຍການຕິດຕາມ",
index 82d0b26..06226ab 100644 (file)
@@ -11,7 +11,6 @@
        "tog-underline": "Tumana ling'ko:",
        "tog-usenewrc": "Inenset petuho nca (JavaScript)",
        "tog-numberheadings": "Auto-palo mukunguna",
-       "tog-showtoolbar": "Kamukile hloli ye ng'i toolbar (bulukezi JavaScript)",
        "tog-editondblclick": "Hloli ye ng'i petulo di 'klik' dubo (JavaScript)",
        "tog-watchcreations": "Pusize petulo a hloli di zwa mukoloko di kentezi",
        "tog-watchdefault": "Pusize petulo a hloli ye ng'i di zwa mukoloko di kentezi",
index ab62a89..085d254 100644 (file)
@@ -22,7 +22,6 @@
        "tog-extendwatchlist": "سئیل بأرگە نە سی نئشوٙ دأئن تأموٙم آلئشتیا ڤا کو نە فأقأط سی بیشتئر تازە باڤیا.",
        "tog-usenewrc": "دأسە بأنی آلئشتیا ڤا بألگە د آلئشتیا تازە و سئیل بأرگ",
        "tog-numberheadings": "سأربألگە خود شمارئشت کو",
-       "tog-showtoolbar": "نأڤار أڤزار ڤیرایئشت نە نئشو بیە",
        "tog-editondblclick": "بألگە یا نە ڤا د نۊ پوٙرنیئن ڤیرایئشت بأکیت",
        "tog-editsectiononrightclick": "بأرجا ڤیرایئشت نە ڤا راس پوٙرنییئن د بأرجا داسوٙنیا کونئشتگأر کو",
        "tog-watchcreations": "بألگە یایی کئ مئ رأڤأندیاری کئمە و جانیایی کئ مئ سوڤار کئمە ئضاف کو د سئیل بأرگە مئ",
index d133436..5d38a3b 100644 (file)
@@ -51,7 +51,6 @@
        "tog-extendwatchlist": "Išplėsti stebimųjų sąrašą, kad rodytų visus tinkamus keitimus, ne tik pačius naujausius",
        "tog-usenewrc": "Grupuoti pakeitimas pagal puslapį paskutinių keitimų ir stebėjimo sąrašuose",
        "tog-numberheadings": "Automatiškai numeruoti skyrelius",
-       "tog-showtoolbar": "Rodyti redagavimo įrankių juosta",
        "tog-editondblclick": "Puslapių redagavimas dvigubu spustelėjimu",
        "tog-editsectiononrightclick": "Įjungti skyrelių redagavimą paspaudus skyrelio pavadinimą dešiniuoju pelės klavišu (JavaScript)",
        "tog-watchcreations": "Pridėti mano sukuriamus puslapius į stebimųjų sąrašą",
index d7c7e26..b641dc0 100644 (file)
@@ -16,7 +16,6 @@
        "tog-extendwatchlist": "A thar chauh ni lo, tihdanglamna zawng zawng tilang tùrin ralvèn kapparh rawh",
        "tog-usenewrc": "Tihdanglam tharte leh ralvente a phêk azir zëlin tlar rawh (JavaScript a ngai)",
        "tog-numberheadings": "A thupuite amahin nambar inpêktir rawh",
-       "tog-showtoolbar": "Siamṭhatna hmanraw-liang tilang rawh (JavaScript a ngai)",
        "tog-editondblclick": "Hmehphìrin phêk siamṭha rawh (JavaScript a ngai)",
        "tog-editsectiononrightclick": "Hlawm thupui ding-hmeh hmangin hlawm siamţhat theihna awmtir rawh (JavaScript a ngai)",
        "tog-watchcreations": "Ka phêk siamte leh ka taksa hlankaite ka ralvèn zing-ah telh rawh",
index d55e07a..4acf87d 100644 (file)
@@ -15,7 +15,6 @@
        "tog-extendwatchlist": "گپ کردن بلگه یل  پیگیری یل سی نشو دائن تموم تغییره یل ، نه فقط هونو که جدید وابون",
        "tog-usenewrc": "تغییره یل جمی توسط بلگه مئنه تغییره یل نو و نوم بلگه پیگیری",
        "tog-numberheadings": "شماره وندن خودکار سی سرخط یل",
-       "tog-showtoolbar": "نشو دائن تولبار ویرایش",
        "tog-editondblclick": "ویرایس بلگه یل با دو کلیژ",
        "tog-editsectiononrightclick": "فعال کردن ویرایس قسمتل با یه کلیژ ری نوم او قسمت",
        "tog-watchcreations": "وندن بلگه یلی ک مو ساختمه و فایلل ک مو بار کردمه مئنه نوم بلگه پیگیری",
index 04c8c24..95a22b3 100644 (file)
@@ -39,7 +39,6 @@
        "tog-extendwatchlist": "Izvērst uzraugāmo lapu sarakstu, lai parādītu visas veiktās izmaiņas (ne tikai pašas svaigākās)",
        "tog-usenewrc": "Grupēt izmaiņas pēc lapas pēdējās izmaiņās un uzraugāmo lapu sarakstā",
        "tog-numberheadings": "Automātiski numurēt virsrakstus",
-       "tog-showtoolbar": "Rādīt labošanas rīkjoslu",
        "tog-editondblclick": "Atvērt lapu labošanai ar dubultklikšķi",
        "tog-editsectiononrightclick": "Atvērt sadaļas labošanas lapu, uzklikšķinot ar labo peles pogu uz sadaļas virsraksta (izmanto ''JavaScript'')",
        "tog-watchcreations": "Pievienot manis radītās lapas un manis augšuplādētos failus uzraugāmo lapu sarakstam",
        "botpasswords-updated-title": "Bota parole atjaunināta",
        "botpasswords-deleted-title": "Bota parole dzēsta",
        "botpasswords-restriction-failed": "Botu paroles ierobežojumi liedz šo pieslēgšanos.",
+       "botpasswords-not-exist": "Lietotājam \"$1\" nav bota paroles ar nosaukumu \"$2\".",
        "resetpass_forbidden": "Paroles nav iespējams nomainīt",
        "resetpass_forbidden-reason": "Paroles nav iespējams nomainīt: $1",
        "resetpass-no-info": "Jums ir nepieciešams ieiet, lai tūlīt piekļūtu šai lapai.",
        "diff-multi-otherusers": "({{PLURAL:$1|$1 starpversijas|Viena starpversija|$1 starpversijas}}, ko {{PLURAL:$2|saglabājuši|saglabājis|saglabājuši}} {{PLURAL:$2|$2 lietotāji|viens cits lietotājs|$2 lietotāji}}, nav parādīta{{PLURAL:$1||s}})",
        "diff-multi-manyusers": "({{PLURAL:$1|$1 starpversijas|$1 starpversija|$1 starpversijas}}, ko saglabājuši vairāk nekā $2 {{PLURAL:$2|lietotāji|lietotājs|lietotāji}}, nav parādīta{{PLURAL:$1||s}})",
        "searchresults": "Meklēšanas rezultāti",
+       "search-filter-title-prefix": "Meklē tikai lapas, kuru nosaukums sākas ar \"$1\"",
+       "search-filter-title-prefix-reset": "Meklēt visas lapas",
        "searchresults-title": "Meklēšanas rezultāti \"$1\"",
        "titlematches": "Rezultāti virsrakstos",
        "textmatches": "Rezultāti lapu tekstos",
        "rcfilters-filter-humans-label": "Cilvēki (ne boti)",
        "rcfilters-filter-humans-description": "Cilvēku veikti labojumi.",
        "rcfilters-filtergroup-reviewstatus": "Pārskatīšanas statuss",
-       "rcfilters-filter-reviewstatus-unpatrolled-label": "Nepatrulēti",
+       "rcfilters-filter-reviewstatus-unpatrolled-label": "Nepārbaudīti",
+       "rcfilters-filter-reviewstatus-manual-label": "Manuāli pārbaudīti",
+       "rcfilters-filter-reviewstatus-auto-label": "Automātiski pārbaudīti",
        "rcfilters-filtergroup-significance": "Nozīmīgums",
        "rcfilters-filter-minor-label": "Maznozīmīgi labojumi",
        "rcfilters-filter-minor-description": "Labojumi, kas atzīmēti kā maznozīmīgi.",
        "http-timed-out": "HTTP pieprasījumam ir iestājies noilgums.",
        "http-curl-error": "Kļūda, nolasot URL: $1",
        "http-bad-status": "HTTP pieprasījuma laikā atgadījās problēma: $1 $2",
+       "http-internal-error": "HTTP iekšējā kļūda.",
        "upload-curl-error6": "URL nevarēja sasniegt",
        "upload-curl-error28": "Augšupielādes noildze",
        "license": "Licence:",
        "protectedpages-noredirect": "Paslēpt pāradresācijas",
        "protectedpages-timestamp": "Laika zīmogs",
        "protectedpages-page": "Lapa",
+       "protectedpages-expiry": "Beidzas",
+       "protectedpages-performer": "Aizsargājušais lietotājs",
        "protectedpages-params": "Aizsardzības parametri",
        "protectedpages-reason": "Iemesls",
        "protectedpages-submit": "Parādīt lapas",
        "ipbwatchuser": "Uzraudzīt šī lietotāja lapu un lietotāja diskusijas lapu",
        "ipb-change-block": "Pārbloķēt ar šiem uzstādījumiem",
        "ipb-confirm": "Apstiprināt bloķēšanu",
+       "ipb-pages-label": "Lapas",
        "badipaddress": "Nederīga IP adrese",
        "blockipsuccesssub": "Nobloķēts veiksmīgi",
        "blockipsuccesstext": "[[Special:Contributions/$1|$1]] tika nobloķēts.<br />\nVisus blokus var apskatīties [[Special:BlockList|IP bloku sarakstā]].",
        "mw-widgets-titleinput-description-new-page": "lapa vēl nepastāv",
        "mw-widgets-categoryselector-add-category-placeholder": "Pievienot kategoriju...",
        "mw-widgets-usersmultiselect-placeholder": "Pievienot vēl...",
+       "mw-widgets-titlesmultiselect-placeholder": "Pievienot vēl...",
        "date-range-from": "No datuma:",
        "date-range-to": "Līdz datumam:",
        "sessionprovider-generic": "$1 sesijas",
index 43496d7..f27c5de 100644 (file)
@@ -35,7 +35,6 @@
        "tog-extendwatchlist": "展列見變",
        "tog-usenewrc": "監修以類",
        "tog-numberheadings": "生章數",
-       "tog-showtoolbar": "多寶列見",
        "tog-editondblclick": "雙擊以纂",
        "tog-editsectiononrightclick": "右擊標以纂段",
        "tog-watchcreations": "哨己撰",
index a693c65..96883a5 100644 (file)
@@ -35,7 +35,6 @@
        "tog-extendwatchlist": "सन्निकट परिवर्तन नै,अखन ध्यानसूचीमे रहल सभ परिवर्तन देखाबी",
        "tog-usenewrc": "नीक सन्निकट परिवर्तन प्रयोग करी (जावास्क्रिप्ट चाही)",
        "tog-numberheadings": "शीर्षक स्वयं-क्रमाङ्कित करी",
-       "tog-showtoolbar": "सम्पादन ओजारपेटी देखाबी",
        "tog-editondblclick": "दू बेर क्लीक कए पन्ना सम्पादित करी",
        "tog-editsectiononrightclick": "अनुभाग शीर्षक पर दाहिन क्लिक करै पर अनुभाग सम्पादित करी",
        "tog-watchcreations": "हमर बनाओल पृष्ठ हमर साकांक्ष सूचीमे राखी",
@@ -53,7 +52,7 @@
        "tog-shownumberswatching": "ध्यान राखैबला प्रयोगकर्ताक सङ्ख्या",
        "tog-oldsig": "अखुनका दस्खत:",
        "tog-fancysig": "दस्खतक विकिटेक्सटक समान मानी (स्वचालित श्रृङ्खला हीन)",
-       "tog-uselivepreview": "पूर्वावलोकनक उपयोग करी",
+       "tog-uselivepreview": "पूर्वावलोकनक उपयोग करी",
        "tog-forceeditsummary": "यदि सम्पादन सारांश नै देल गेल होए तहन हमरा सूचित करी",
        "tog-watchlisthideown": "हमर साकांक्ष सूचीसँ हमर सम्पादन नुकाबी",
        "tog-watchlisthidebots": "हमर साकांक्ष सूचीसँ स्वचालित सम्पादन हटाबी",
        "july-gen": "जुलाई",
        "august-gen": "अगस्त",
        "september-gen": "सितम्बर",
-       "october-gen": "अकटुबर",
+       "october-gen": "à¤\85à¤\95à¥\8dà¤\9fà¥\81बर",
        "november-gen": "नवम्बर",
        "december-gen": "दिसम्बर",
        "jan": "जन.",
        "category-file-count-limited": "ई श्रेणीमे निम्नलिखित {{PLURAL:$1|फाइल अछि।|फाइलसभ अछि।}}",
        "listingcontinuesabbrev": "शेष आगाँ।",
        "index-category": "सूचीबद्ध पृष्ठ",
-       "noindex-category": "à¤\95à¥\8dरम à¤¨à¥\88 à¤\95à¥\87ल पृष्ठ",
+       "noindex-category": "à¤\85सà¥\82à¤\9aà¥\80बदà¥\8dध पृष्ठ",
        "broken-file-category": "पन्नासभ जाहिमे फाइल लिङ्कसभ टूटल हुअए",
        "about": "क विषयमे",
        "article": "सामग्री लेख",
        "searcharticle": "जाए",
        "history": "पृष्ठ इतिहास",
        "history_short": "इतिहास",
+       "history_small": "इतिहास",
        "updatedmarker": "हमर अन्तिम आगमनसँ पहिने अद्यतन केल",
        "printableversion": "प्रिन्ट करबा योग्य",
        "permalink": "स्थायी लिङ्क",
        "views": "दर्शाव",
        "toolbox": "उपकरण",
        "tool-link-userrights": "{{GENDER:$1|सदस्य}} समूह परिवर्तन करी",
+       "tool-link-userrights-readonly": "{{GENDER:$1|प्रयोक्ता}} समूह देखी",
        "tool-link-emailuser": "ई {{GENDER:$1|प्रयोक्ता}}के इमेल भेजी",
        "imagepage": "फाइल पृष्ठ देखी",
        "mediawikipage": "सन्देश पन्ना देखी",
        "redirectedfrom": "($1सँ पुनर्निर्देशित)",
        "redirectpagesub": "पृष्ठ पुनर्निर्देशित करी",
        "redirectto": "कऽ अनुप्रेषित:",
-       "lastmodifiedat": "ई पृष्ठक नवीनतम परिवर्तन $1 के $2 बजे भेल छल।",
+       "lastmodifiedat": "ई पृष्ठक नवीनतम परिवर्तन $1 के $2 बजे भेल छल।",
        "viewcount": "ई पृष्ठ {{PLURAL:$1|एक|$1}} बेर देखल गेल छल।",
        "protectedpage": "सुरक्षित पृष्ठ",
        "jumpto": "एतय जाए:",
        "versionrequired": "मिडियाविकिक संस्करण $1 चाही",
        "versionrequiredtext": "ई पृष्ठ प्रयोग करैक लेल मिडियाविकिक $1 अवतरण जरुरी अछि।\nदेखी [[Special:Version|अवतरण पृष्ठ]]।",
        "ok": "ठीक अछि",
+       "pagetitle": "$1 - {{SITENAME}}",
        "pagetitle-view-mainpage": "{{अन्तर्जाल}}",
        "backlinksubtitle": "← $1",
        "retrievedfrom": "प्राप्ति स्थल \"$1\"",
        "ns-specialprotected": "विशेष पन्ना सभक सम्पादित नै कएल जा सकैए।",
        "titleprotected": "ई शीर्षकक निर्माण प्रतिबन्धित अछि [[User:$1|$1]] द्वारा।\nएकर लेल निम्न कारण देल गएल अछि <em>$2</em>।",
        "filereadonlyerror": "\"$1\" फाइलके बदलैलेल अक्षम कियाक भण्डार \"$2\" ई समय 'मात्र पाठनक लेल' अछि।\n\nजे प्रबन्धक ई प्रबन्ध लगोनै अछि ओ निम्न विवरण प्रदान कएने अछि: \"$3\"।",
+       "invalidtitle": "अवैध शीर्षक",
        "invalidtitle-knownnamespace": "\"$2\" नामस्थान आर \"$3\" नाम बला गलत शीर्षक",
        "invalidtitle-unknownnamespace": "अज्ञात नामस्थान संख्या $1 आर नाम \"$2\" वाला गलत शीर्षक",
        "exception-nologin": "सम्प्रवेशित नै",
        "nosuchusershort": "\"$1\" नामक कोनो प्रयोक्ता नै अछि।\nअपन हिजए सुधारी।",
        "nouserspecified": "अहाँक एकटा प्रयोक्तानाम देबऽ पडत।",
        "login-userblocked": "ई प्रयोक्ता प्रतिबन्धित अछि। सम्प्रवेशक अधिकार नै अछि।",
-       "wrongpassword": "à¤\97लत à¤\95à¥\82à¤\9fशबà¥\8dद à¤¦à¥\87ल à¤\97à¥\87ल।\nफà¥\87रसà¤\81 प्रयास करी।",
+       "wrongpassword": "à¤\85हाà¤\81 à¤\9cà¥\87 à¤\95à¥\82à¤\9fशबà¥\8dद à¤¦à¥\87लà¥\8cà¤\82 à¤\93 à¤\97लत à¤\85à¤\9bि à¥¤\nà¤\95à¥\83पया à¤ªà¥\81न: प्रयास करी।",
        "wrongpasswordempty": "रिक्त कूटशब्द देल गेल।\nफेरसँ प्रयास करी।",
        "passwordtooshort": "कूटशब्द कमसँ कम {{PLURAL:$1|1 वर्ण|$1 वर्णक}} हुअए।",
        "passwordtoolong": "कुटशब्द {{PLURAL:$1|1 वर्ण|$1 वर्णसभ}}सँ बेसी नम्हर नै भ सकएत अछि।",
-       "passwordtoopopular": "à¤\86म à¤ªà¤¾à¤¸à¤µà¤°à¥\8dड à¤\85हाà¤\81 à¤¨à¥\88 à¤\9aà¥\81नि à¤¸à¤\95à¤\8fत à¤\85à¤\9bि। à¤\95à¥\83पया à¤\85नà¥\8bà¤\96ा à¤ªà¤¾à¤¸à¤µà¤°à¥\8dड चुनी।",
+       "passwordtoopopular": "à¤\85हाà¤\81 à¤¸à¤¾à¤®à¤¾à¤¨à¥\8dय à¤\95à¥\82à¤\9fशबà¥\8dदड à¤¨à¥\88 à¤\9aà¥\81नि à¤¸à¤\95à¥\88त à¤\9bà¥\80 à¥¤ à¤\95à¥\83पया à¤\95ठिन à¤\95à¥\82à¤\9fशबà¥\8dद चुनी।",
        "password-name-match": "अहाँक कूटशब्द अहाँक प्रयोक्तानामसँ भिन्न हेबाक चाही।",
        "password-login-forbidden": "ऐ प्रयोक्तानाम आ कूटशब्दक प्रयोग प्रतिबन्धित अछि।",
        "mailmypassword": "नूतन कूटशब्द ई-पत्रसँ पठाबी",
        "passwordremindertitle": "{{SITENAME}}क लेल नव अस्थायी कूटशब्द",
-       "passwordremindertext": "कियो (सम्भवतः अहाँ, अनिकेत $1 सँ) एकटा नव कूटशब्दक आग्रह {{SITENAME}} ($4) केनए अछि। एकटा अस्थायी कूटशब्द प्रयोक्ता \"$2\" लेल बनाओल गेल अछि आ \"$3\" रूपमे स्थापित कएल गेल अछि। जँ ई अहाँक इच्छा अछि तँ अहाँक सम्प्रवेश करए पडत आ एकटा नव कूटशब्दक चुनाव करए पडत। \nअहाँक अस्थायी कूटशब्द खतम भऽ जाएत {{PLURAL:$5|एक दिन|$5 दिन}} मे।",
+       "passwordremindertext": "कियो ($1 आइपी ठेगान सँ) {{SITENAME}} ($4) पर प्रयोगक लेल नव कूटशब्द आग्रह केनए अछि। प्रयोक्ता \"$2\" कऽ लेल एक अस्थायी कूटशब्द बनाए देल गेल अछि, आ ओ अखन \"$3\" छी । यदि ई अहाँक इच्छा छल, तँ आब अहाँक सम्प्रवेश करवाक लेल एक नव कूटशब्द चुनऽ पड़त ।\nअहाँक अस्थायी कूटशब्दक अवधि {{PLURAL:$5|एक दिन|$5 दिन}}मे समाप्त भऽ जाएत।\n\nयदि ई अनुरोध कियो आओर केनए छल, या अहाँक अपन पुरान कूटशब्द आब नै परिवर्तन करै लेल चाहैत छी कियाकी अहाँक अपन पुरान कूटशब्द मोन आबि गेल अछि, तँ अहाँ ई सन्देश अनदेखा करि सकैत छी, आ अपन पुरान कूटशब्दकें पहिने जका प्रयोग करि सकैत छी।",
        "noemail": "प्रयोक्ता \"$1\" लेल कोनो ई-पत्र सङ्केत दर्ज नै अछि।",
        "noemailcreate": "अहाँक एकटा मान्य ई-पत्र सङ्केत देबऽ पडत।",
        "passwordsent": "एकटा नव कूटशब्द \"$1\" लेल पञ्जजीकृत ई-पत्र सङ्केतपर पठाएल गेल अछि।\nजखन अहाँक ई भेटैए तँ फेरसँ सम्प्रवेश करी।",
        "botpasswords-existing": "वर्तमान बोट पासवर्ड",
        "botpasswords-createnew": "बोटक लेल नव पासवर्ड बनाबी",
        "botpasswords-editexisting": "बोटक वर्तमान पासवर्डके बदली",
+       "botpasswords-label-needsreset": "(कूटशब्द नवीकरण करवाक आवश्यकता अछि)",
        "botpasswords-label-appid": "बोट नाम:",
        "botpasswords-label-create": "बनाबी",
        "botpasswords-label-update": "अद्यतन",
        "search-interwiki-caption": "अन्य प्रकल्प",
        "search-interwiki-default": "$1 सँ परिणाम:",
        "search-interwiki-more": "(आर)",
+       "search-interwiki-more-results": "अधिक परिणाम",
        "search-relatedarticle": "सम्बन्धी",
        "searchrelated": "सम्बन्धी",
        "searchall": "सभटा",
        "search-external": "बाह्य खोज",
        "searchdisabled": "{{SITENAME}} खोज बन्द अछि।\nता अहाँ गूगलक माध्यमसँ ताकि सकै छी।\nमोन राखी जे तकर विवरणी {{SITENAME}} समिग्री समयातीत भऽ सकैए।",
        "search-error": "खोजवाके समय निम्न त्रुटि उत्पन्न भेल: $1",
+       "search-warning": "खोजवाक समय निम्न त्रुटि उत्पन्न भेल: $1",
        "preferences": "विकल्प",
        "mypreferences": "खासमखास",
        "prefs-edits": "सम्पादनक सङ्ख्या:",
        "prefs-editwatchlist-clear": "अपन साकांक्षसूची खालि करी",
        "prefs-watchlist-days": "साकांक्ष-सूचीमे एतेक दिन देखाएल:",
        "prefs-watchlist-days-max": "बेसीसँ बेसी $1 {{PLURAL:$1|दिन|दिन}}",
-       "prefs-watchlist-edits": "बढाà¤\8fल à¤¸à¤¾à¤\95ाà¤\82à¤\95à¥\8dष à¤¸à¥\82à¤\9aà¥\80मà¥\87 à¤\85धिà¤\95तम à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤¦à¥\87à¤\96ाà¤\8fब:",
+       "prefs-watchlist-edits": "साà¤\95ाà¤\82à¤\95à¥\8dष à¤¸à¥\82à¤\9aà¥\80मà¥\87 à¤¦à¥\87à¤\96बà¥\88à¤\95 à¤²à¥\87ल à¤\85धिà¤\95तम à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन:",
        "prefs-watchlist-edits-max": "बेसीसँ बेसी:१०००",
        "prefs-watchlist-token": "साकांक्ष-सूची खेप:",
+       "prefs-watchlist-managetokens": "टोकन प्रबन्धित करी",
        "prefs-misc": "आर",
        "prefs-resetpass": "कूटशब्द बदली",
        "prefs-changeemail": "इमेल पता परिवर्तित करी",
        "prefs-help-recentchangescount": "एहिमे सम्मिलित अछि आइ-काल्हिक परिवर्तन, पन्नाक इतिहास आ वृत्तलेख",
        "prefs-help-watchlist-token2": "इ अहाँके कंक्षाकसूचीके वेब फिडके गोपनीय चाभी छी ।\nइ जे कोइ लंग अछि उ अपन कंक्षाकसूची पैढ सकैत अछि, ऐ लेल इ क्यों गोटा स नै बाटब ।\n[[Special:ResetTokens|एकरा रीसेट करवाक लेल यै ठाम क्लिक करु]]।",
        "savedprefs": "अहाँक पसिन्न सुरक्षित कएल गेल",
-       "savedrights": "पà¥\8dरयà¥\8bà¤\95à¥\8dता {{GENDER:$1|$1}}à¤\95 à¤¸à¤¦à¤¸à¥\8dय अधिकार सङ्ग्रह कएल गेल।",
+       "savedrights": "पà¥\8dरयà¥\8bà¤\95à¥\8dता {{GENDER:$1|$1}}à¤\95 à¤ªà¥\8dरयà¥\8bà¤\95à¥\8dता अधिकार सङ्ग्रह कएल गेल।",
        "timezonelegend": "समय क्षेत्र",
        "localtime": "स्थानीय समए:",
        "timezoneuseserverdefault": "पूर्वनिर्धारित वितरक प्रयुक्त करी ($1)",
        "timezoneregion-europe": "यूरोप",
        "timezoneregion-indian": "हिन्द महासागर",
        "timezoneregion-pacific": "प्रशान्त महासागर",
-       "allowemail": "आन प्रयोक्ताक ई-पत्र समर्थ करी",
+       "allowemail": "अन्य प्रयोक्ता सँ ई-पत्र सक्षम करी",
+       "email-allow-new-users-label": "एकदम नव उपयोगकर्तासभकें ई-पत्रक अनुमति दी",
        "prefs-searchoptions": "ताकी",
        "prefs-namespaces": "नामस्थानसभ",
        "default": "पूर्वनिर्धारित",
        "right-patrol": "अन्य सदस्यसभक सम्पादन परीक्षित चिन्हित करी",
        "right-autopatrol": "अपन सम्पादन स्वचालित रूपसँ परीक्षित चिन्हित करी",
        "right-patrolmarks": "हालक परिवर्तनमे संचालन चेन्ह देखू",
-       "right-unwatchedpages": "à¤\8fहन à¤ªà¥\83षà¥\8dठसभà¤\95 à¤¸à¥\82à¤\9aà¥\80 à¤¦à¥\87à¤\96à¥\80 à¤\9cà¥\87 à¤\95à¥\87à¤\95रà¥\8b à¤§à¥\8dयानसà¥\82à¤\9aà¥\80मà¥\87 à¤¨à¥\88 à¤\85à¤\9bि",
+       "right-unwatchedpages": "एहन पृष्ठसभक सूची देखी जे ककरो ध्यानसूचीमे नै अछि",
        "right-mergehistory": "पन्नाक इतिहास एकत्रित करी",
        "right-userrights": "सभटा प्रयोक्ता अधिकारकेँ सम्पादित करू",
        "right-userrights-interwiki": "दोसर विकीपर प्रयोक्ताक प्रयोक्ता अधिकारक सम्पादन करी",
        "recentchanges-legend-heading": "<strong>कुञ्जी:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|नव पन्नसभक सूची]] सेहो देखी)",
        "recentchanges-submit": "देखाबी",
+       "rcfilters-legend-heading": "<strong>सङ्केतक सूची:</strong>",
        "rcnotefrom": "नीचाँमे '''$2''' सँ भेल परिवर्तन अछि ('''$1''' धरि देखाएल)।",
        "rclistfrom": "$3 $2 सँ शुरू भेल नव परिवर्तन देखी",
        "rcshowhideminor": "$1 अल्प सम्पादन",
        "listfiles_search_for": "ऐ दृश्य-श्रव्य नामले ताकू:",
        "listfiles-userdoesnotexist": "प्रयोक्ता खाता \"$1\" पंजीकृत नै अछि।",
        "imgfile": "सञ्चिका",
-       "listfiles": "सà¤\82चिका सूची",
+       "listfiles": "सà¤\9eà¥\8dचिका सूची",
        "listfiles_thumb": "लघुचित्र",
        "listfiles_date": "तिथि",
        "listfiles_name": "नाम",
        "download": "अवारोपन",
        "unwatchedpages": "बिन ध्यान देल पन्ना",
        "listredirects": "पुनर्निर्देशनसभक सूची",
-       "listduplicatedfiles": "डà¥\81पà¥\8dलिà¤\95à¥\87à¤\9f à¤\95à¥\87 à¤¸à¤¾à¤¥ à¤«à¤¾à¤\87लसभ à¤\95à¥\87 सूची।",
+       "listduplicatedfiles": "नà¤\95à¥\8dà¤\95लà¤\95 à¤¸à¤\99à¥\8dà¤\97 à¤«à¤¾à¤\87लसभà¤\95 सूची।",
        "listduplicatedfiles-entry": "[[:File:$1|$1]] राखैत अछि  [[$3|{{PLURAL:$2|एक प्रतिलिपि|$2 duplicates}}]] ।",
        "unusedtemplates": "बिना प्रयोगक नमूना सभ",
        "unusedtemplatestext": "ई पन्ना {{ns:template}} नामस्थानमे सभ पन्नाकेँ सूची बनबैए, जे दोसर पन्नापर शामिल नै अछि।\nमेटेबासँ पहिने दोसर नमूनाक लागिकेँ जाँचब मोन राखू।",
        "mostrevisions": "सभसँ बेसी संशोधनबला पन्ना",
        "prefixindex": "उपसर्गक संग सभटा पृष्ठ",
        "prefixindex-namespace": "उपसर्ग भएल सभ पृष्ठ ($1 नामस्थान)",
-       "prefixindex-strip": "सà¥\82à¤\9aà¥\80 à¤®à¥\87à¤\82 à¤\89पसरà¥\8dà¤\97 à¤¨à¥\81à¤\95ाà¤\89",
+       "prefixindex-strip": "नतिà¤\9cामà¥\87 à¤\89पसरà¥\8dà¤\97 à¤¨à¥\81à¤\95ाबà¥\80",
        "shortpages": "छोट पृष्ठसभ",
        "longpages": "नमगर पन्ना सभ",
        "deadendpages": "एकदमसँ अन्त भऽ जाएबला पन्ना सभ",
        "logentry-contentmodel-change-revertlink": "पूर्ववत करी",
        "logentry-contentmodel-change-revert": "पूर्ववत करी",
        "protectlogpage": "सुरक्षा लौग",
-       "protectlogtext": "नीचाँ किछु पन्ना सुरक्षा परिवर्तनक सूची अछि।\nदेखू [[Special:ProtectedPages|protected pages list]] लगक कार्यरत पन्ना सुरक्षाकऽ सूची लेल।",
+       "protectlogtext": "नीचाँ किछ पन्ना सुरक्षा परिवर्तनक सूची अछि।\nवर्तमान सुरक्षित पृष्ठसभक सूचीक लेल [[Special:ProtectedPages|सुरक्षित पृष्ठसभक सूची]] देखी।",
        "protectedarticle": "रक्षित \"[[$1]]\" कएल गेल",
        "modifiedarticleprotection": "\"[[$1]]\" लेल बदलैत रक्षा स्तर",
        "unprotectedarticle": "अरक्षित केलौं \"[[$1]]\"",
        "blocklist": "प्रतिबन्धित प्रयोक्ता सभ",
        "ipblocklist": "प्रतिबन्धित प्रयोक्ता सभ",
        "ipblocklist-legend": "प्रतिबन्धित प्रयोक्ताकेँ ताकू",
-       "blocklist-userblocks": "खाता प्रतिबन्ध-सूची नुकाउ",
-       "blocklist-tempblocks": "अस्थायी प्रतिबन्ध-सूची नुकाउ",
+       "blocklist-userblocks": "खाता प्रतिबन्ध सूची नुकाबी",
+       "blocklist-tempblocks": "अस्थायी प्रतिबन्ध नुकाबी",
        "blocklist-addressblocks": "एकल अनिकेत प्रतिबन्ध नुकाउ",
        "blocklist-rangeblocks": "क्षेत्र प्रतिबन्ध नुकाउ",
        "blocklist-timestamp": "समएकाल",
        "exportall": "पन्ना सभकेँ निर्यात करू",
        "exportcuronly": "अखुनका संशोधन मात्र लिअ, पूरा इतिहास नै।",
        "exportnohistory": "----\n'''सूचना:''' परिणाम कुशलताकेँ देखैत पन्नाक सम्पूर्ण इतिहासक निर्यात अशक्त कएल गेल अछि।",
-       "exportlistauthors": "सभ à¤ªà¤¨à¥\8dनाà¤\95 à¤¸à¤®à¥\8dपà¥\82रà¥\8dण à¤¯à¥\8bà¤\97दानà¤\95रà¥\8dताà¤\95 à¤¸à¥\82à¤\9aà¥\80 à¤\9cà¥\8bड़à¥\82",
+       "exportlistauthors": "पà¥\8dरतà¥\8dयà¥\87à¤\95 à¤ªà¥\83षà¥\8dठà¤\95 à¤²à¥\87ल à¤¯à¥\8bà¤\97दानà¤\95रà¥\8dतासभà¤\95 à¤\8fà¤\95 à¤ªà¥\82रà¥\8dण à¤¸à¥\82à¤\9aà¥\80 à¤¶à¤¾à¤®à¤¿à¤² à¤\95रà¥\80",
        "export-submit": "निर्यात",
        "export-addcattext": "अहि श्रेणी केर पन्ना जोडू",
        "export-addcat": "जोडू",
        "watchlistedit-clear-legend": "साकांक्ष-सूची मेटाबी",
        "watchlistedit-clear-explain": "एही ठाम रहल सभ शिर्षक अहाँक साकांक्ष-सूची से मेटा जाएत",
        "watchlistedit-clear-titles": "शीर्षक",
-       "watchlistedit-clear-submit": "साà¤\95ाà¤\82à¤\95à¥\8dष-सà¥\82à¤\9aà¥\80 à¤®à¥\87à¤\9fाà¤\89 (à¤\88 à¤¸à¥\8dथायà¥\80 à¤\9bि!)",
+       "watchlistedit-clear-submit": "साà¤\95ाà¤\82à¤\95à¥\8dष-सà¥\82à¤\9aà¥\80 à¤®à¥\87à¤\9fाबà¥\80 (à¤\88 à¤¸à¥\8dथायà¥\80 à¤\9bà¥\80!)",
        "watchlistedit-clear-done": "अहाँक साकांक्ष-सूची मेटाओल गेल।",
        "watchlistedit-clear-removed": "{{PLURAL:$1|1 शीर्षक छल|$1शीर्षक सभ रहए}} हटाएल गेल:",
        "watchlistedit-too-many": "एतय दर्शावैक लेल अत्यधिक पृष्ठ अछि।",
        "tags-create-invalid-title-chars": "टैग नाम में एहन कैरेक्टर नै होना चाही जे पन्ना के शीर्षक में नै प्रयोग भऽ सकेत अछि।",
        "tags-create-already-exists": "फाइल $1 पहिने स अछि।",
        "tags-create-warnings-above": "निम्न लिखित {{PLURAL:$2|चेतना देखी गेल अछि}}  जखन टैग \"$1\" बनाबे प्रयास गेल छेल:",
-       "tags-create-warnings-below": "à¤\95à¥\80 à¤\86हाà¤\81 à¤\88 à¤\9fà¥\88à¤\97 à¤\95à¥\87 à¤¸à¤®à¥\8dपादन à¤\9cारà¥\80 à¤°à¤¾à¤\96à¥\87ला à¤\9aाहà¥\88 à¤\9aिà¤\8f?",
+       "tags-create-warnings-below": "à¤\95ि à¤\85हाà¤\81 à¤\88 à¤\9fà¥\8dयाà¤\97à¤\95à¥\87à¤\82 à¤¸à¤®à¥\8dपादन à¤\9cारà¥\80 à¤°à¤\96à¥\88लà¥\87ल à¤\9aाहà¥\88त à¤\9bà¥\80?",
        "tags-delete-title": "ट्याग मेटाउ",
        "tags-delete-explanation-initial": "आहाँ टैग \"$1\" के डाटाबेस से हटाबै जा रहल चिए।",
        "tags-delete-reason": "कारण:",
index 2bb8ea7..ec27ef9 100644 (file)
@@ -21,7 +21,6 @@
        "tog-extendwatchlist": "Kembangna daftar pengawasan kanggo nidokna kabeh pangowahan, ora mung sing paling anyar thok",
        "tog-usenewrc": "Klompok owahan miturut kaca nang owahan anyar lan daptar pangawasan (mbutuhna JavaScript)",
        "tog-numberheadings": "Aweh nomer judul secara otomatis",
-       "tog-showtoolbar": "Tidhokna bilah alat penyuntingan",
        "tog-editondblclick": "Nyunting kaca nganggo klik ping loro",
        "tog-editsectiononrightclick": "Aktifna panyuntingan subbagian nganggo klik-tengen nang judul bagian",
        "tog-watchcreations": "Tambahna kaca gaweanne inyong lan berkas sing tek unggah nang daptar pangawasanne inyong",
index 8f4fd3c..a23b4a4 100644 (file)
@@ -18,7 +18,6 @@
        "tog-extendwatchlist": "Келептемс мельгеваномать сембе полафтоматнень няфтемга, аф аньцек мекольценнет",
        "tog-usenewrc": "Полгаяфтомс илякстоптоматнень лопань коряс мекольце полафнематнень эса ди мельгеваномаса (веши JavaScript)",
        "tog-numberheadings": "Сёрмадома коняксс лувомтяшксне эслек путовихть",
-       "tog-showtoolbar": "Кядьёнкс седяфксть няфтемс сёрмадомбачк (JavaScript)",
        "tog-editondblclick": "Кафксть люпштазь сувамс сёрматфть петнема (JavaScript)",
        "tog-editsectiononrightclick": "Петнемс пялькстне: люпштамс сёрмадомбяльксть лемонц лангс видешире пуняса (JavaScript)",
        "tog-watchcreations": "Сувафтомс лопатнень, конатнень тиине ди файлат, конатнень тонгине мельгеваномазон",
index 8d0cf62..f42a099 100644 (file)
@@ -20,7 +20,6 @@
        "tog-extendwatchlist": "Hanitatra ny lisitra fanaraham-pejy mba haneho ny fanovana rehetra fa tsy ny vaovao indrindra fotsiny",
        "tog-usenewrc": "Hampivondrona ny fiovana araky ny pejy ao amin'ny fiovana farany ary ao amin'ny lisitry ny pejy arahana",
        "tog-numberheadings": "Asio laharany ny lohateny",
-       "tog-showtoolbar": "Haneho ny toolbar fanovana",
        "tog-editondblclick": "Hanova pejy amin'ny alalan'ny tsindrim-boalavo roa misesy",
        "tog-editsectiononrightclick": "Hampiasa ny fanovana fizarana amin'ny tsindry havanana eo amin'ny lohatenim-pizarana.",
        "tog-watchcreations": "Hanaraka ny pejy foronoko ary ny rakitra ampidiriko",
index 89b4dfd..5ae6f09 100644 (file)
@@ -23,7 +23,6 @@
        "tog-extendwatchlist": "Чыла вашталтышым, а пытартыш гына огылым ончыкташлан эскерыме лӱмерым кугемдаш",
        "tog-usenewrc": "У тӧрлатымаш саемдыме лӱмерым кучылташ (JavaScript кӱлеш)",
        "tog-numberheadings": "Вуймутым автоматик йӧн дене радамлаш",
-       "tog-showtoolbar": "Тӧрлатымаш ӱзгараҥам ончыкташ",
        "tog-watchcreations": "Мыйын ыштыме лаштык-влакым эскерыме лӱмерыш ешараш",
        "tog-watchdefault": "Мыйын тӧрлатыме лаштык-влакым эскерыме лӱмерыш ешараш",
        "tog-watchmoves": "Мыйын лӱмым вашталтыме лаштык-влакым эскерыме лӱмерыш ешараш",
index 642e01e..604e05a 100644 (file)
@@ -21,7 +21,6 @@
        "tog-extendwatchlist": "Kambangan daftar pantau untuak mancaliak kasado parubahan, indak nan baru se",
        "tog-usenewrc": "Gunoan tampilan parubahan tingkek lanjuik (paralu JavaScript)",
        "tog-numberheadings": "Agiah nomor judul sacaro otomatis",
-       "tog-showtoolbar": "Tunjuakan bilah panyuntiangan (paralu JavaScript)",
        "tog-editondblclick": "Suntiang laman jo klik duo kali (paralu JavaScript)",
        "tog-editsectiononrightclick": "Aktipan bagian panyuntiangan jo mangklik kanan pado judul bagian (paralu JavaScript)",
        "tog-watchcreations": "Tambahan laman nan den buek jo gambar nan den unggah ka daftar pantau",
index eddfffc..549ae72 100644 (file)
@@ -34,7 +34,6 @@
        "tog-extendwatchlist": "Прошири го список на набљудувања за приказ на сите промени, не само скорешните",
        "tog-usenewrc": "Промени во групи по страници во списокот на скорешни промени",
        "tog-numberheadings": "Наброј ги заглавијата",
-       "tog-showtoolbar": "Прикажи алатник за уредување",
        "tog-editondblclick": "Уредување на страници при двоен стисок",
        "tog-editsectiononrightclick": "Уредување на заглавија со десно копче од глушецот на нивниот наслов",
        "tog-watchcreations": "Додавај ги страниците што ги создавам и податотеките што ги подигам во набљудуваните",
        "subject-preview": "Преглед на насловот:",
        "previewerrortext": "Се појави грешка при обидот да се прегледаат промените.",
        "blockedtitle": "Корисникот е блокиран",
+       "blocked-email-user": "<strong><strong>На вашето корисничко име му е забрането да праќа е-пошта. Можете сепак да уредувате други страници на ова вики.</strong> Сите поединости за забраната ќе ги најдете во [[Special:MyContributions|придонесите на сметката]].\n\nЗабраната ја дал $1.\n\nНаведената причина гласи <em>$2</em>.\n\n* Почеток на забраната: $8\n* Истек на забраната: $6\n* Предвиден забраненик: $7\n* Назнака на забраната #$5",
+       "blockedtext-partial": "<strong>На вашето корисничко или IP-адреса му е забрането да прави измени на страницава. Можете сепак да уредувате други страници на ова вики.</strong> Сите поединости за забраната ќе ги најдете во [[Special:MyContributions|придонесите на сметката]].\n\nЗабраната ја дал $1.\n\nНаведената причина гласи <em>$2</em>.\n\n* Почеток на забраната: $8\n* Истек на забраната: $6\n* Предвиден забраненик: $7\n* Назнака на забраната #$5",
        "blockedtext": "<strong>Вашето корисничко име или IP-адреса е блокирано.</strong>\n\nБлокирањето е направено од страна на $1.\nДаденото образложение е ''$2''.\n\n* Почеток на блокирањето: $8\n* Истекување на блокирањето: $6\n* Корисникот што требало да биде блокиран: $7\n\nМоже да контактирате со $1 или некој друг [[{{MediaWiki:Grouppage-sysop}}|администратор]] за да разговарате во врска со блокирањето.\nМожете да ја искористите можноста „{{int:emailuser}}“ ако е назначена важечка е-поштенска адреса во [[Special:Preferences|вашите нагодувања]] и не ви е забрането да ја користите.\nВашата сегашна IP-адреса е $3, а назнака на блокирањето гласи #$5.\nВе молиме наведете ги сите подробности прикажани погоре, во вашата евентуална реакција.",
        "autoblockedtext": "Вашата IP-адреса е автоматски блокирана бидејќи била користена од страна на друг корисник, кој бил блокиран од $1.\nДаденото образложение е следново:\n\n:<em>$2</em>\n\n* Почеток на блокирањето: $8\n* Истекување на блокирањето: $6\n* Со намера да се блокира: $7\n\nМоже да контактирате со $1 или некој друг [[{{MediaWiki:Grouppage-sysop}}|администратор]] за да разговарате во врска со ова блокирање.\n\nИмајте предвид дека можеби нема да можете да ја искористите можноста „{{int:emailuser}}“ доколку не е назначена важечка е-поштенска адреса во [[Special:Preferences|вашите нагодувања]] и ви е забрането користитење на истата.\n\nВашата IP-адреса е $3, a ID на блокирањеto е $5.\nВе молиме наведете ги овие подробности доколку реагирате на блокирањето.",
        "systemblockedtext": "Вашето корисничко име или IP-адреса е автоматски блокирано од МедијаВики.\nПонудена причина:\n\n:<em>$2</em>\n\n* Почеток на блокот: $8\n* Истек на блокот: $6\n* Блокот е наменет за: $7\n\nВашата тековна IP-адреса гласи $3.\nПрепишете ги сите горенаведени поединости доколку сакате да се распрашате кај надлежните во врска со блокот.",
        "right-nominornewtalk": "Ситните уредувања на разговорни страници да не поттикнуваат потсетник за нова порака",
        "right-apihighlimits": "Користење на помалку ограничени барања од извршникот",
        "right-writeapi": "Можност за запишување во извршникот",
-       "right-delete": "Бришење страници",
-       "right-bigdelete": "Бришење страници со долга историја",
+       "right-delete": "Бришење на страници",
+       "right-bigdelete": "Бришење на страници со долга историја",
        "right-deletelogentry": "Бришење и враќање на конкретни ставки во дневник",
        "right-deleterevision": "Бришење и враќање на конкретни преработки на страници",
        "right-deletedhistory": "Прегледување на записи во историја на бришења, без придружниот текст",
        "prefixindex": "Сите страници (со претставка)",
        "prefixindex-namespace": "Сите страници со претставка (именски простор „$1“)",
        "prefixindex-submit": "Прикажи",
-       "prefixindex-strip": "Отстрани ја претставката во списокот",
+       "prefixindex-strip": "Отстрани ја претставката во исходот",
        "shortpages": "Кратки страници",
        "longpages": "Долги страници",
        "deadendpages": "Слепи страници",
        "ipb-disableusertalk": "Спречи го корисников да ја уредува неговата разговорна страница додека е блокиран",
        "ipb-change-block": "Преблокирај го корисникот со овие нагодувања",
        "ipb-confirm": "Потврди блок",
+       "ipb-sitewide": "Насекаде",
+       "ipb-partial": "Делумно",
+       "ipb-type-label": "Вид",
+       "ipb-pages-label": "Страници",
        "badipaddress": "Неважечка IP-адреса",
        "blockipsuccesssub": "Успешно блокирање",
        "blockipsuccesstext": "[[Special:Contributions/$1|$1]] е блокирана.<br />\nБлоковите можете да ги прегледате на [[Special:BlockList|списокот на блокови]].",
        "createaccountblock": "создавањето на кориснички сметки е блокирано",
        "emailblock": "блокирана е-пошта",
        "blocklist-nousertalk": "без можност за уредување на својата разговорна страница",
+       "blocklist-editing": "уредување",
+       "blocklist-editing-sitewide": "уредување (на цело вики)",
        "ipblocklist-empty": "Списокот на блокирања е празен.",
        "ipblocklist-no-results": "Бараната IP-адреса или корисничка сметка не е блокирана.",
        "blocklink": "блокирај",
        "logentry-block-block": "$1 {{GENDER:$2|го блокираше}} корисникот {{GENDER:$4|$3}} со истек $5 $6",
        "logentry-block-unblock": "$1 {{GENDER:$2|го блокираше}} корисникот {{GENDER:$4|$3}}",
        "logentry-block-reblock": "$1 {{GENDER:$2|го измени}} блокот на {{GENDER:$4|$3}} со истек $5 $6",
+       "logentry-partialblock-block": "$1 {{GENDER:$2|го блокираше}} {{GENDER:$4|$3}} од уредување на {{PLURAL:$8||страниците}} $7 со истек од $5 $6",
+       "logentry-partialblock-reblock": "$1 {{GENDER:$2|ги измени}} блоковските поставки за {{GENDER:$4|$3}} спречувајќи го уредувањето на {{PLURAL:$8||страниците}} $7 со истек од $5 $6",
+       "logentry-non-editing-block-block": "$1 {{GENDER:$2|го блокираше}} {{GENDER:$4|$3}} од неуредувачки дејства со истек од $5 $6",
+       "logentry-non-editing-block-reblock": "$1 {{GENDER:$2|ги измени}} блоковските поставки за {{GENDER:$4|$3}} за неуредувачки дејства со истек од $5 $6",
        "logentry-suppress-block": "$1 {{GENDER:$2|го блокираше}} {{GENDER:$4|$3}} со истек $5 $6",
        "logentry-suppress-reblock": "$1 {{GENDER:$2|го измени}} блокот на {{GENDER:$4|$3}} со истек $5 $6",
        "logentry-import-upload": "$1 {{GENDER:$2|ја увезе}} $3 со податотечно подигање",
        "mw-widgets-titleinput-description-redirect": "пренасочување кон $1",
        "mw-widgets-categoryselector-add-category-placeholder": "Додај категорија...",
        "mw-widgets-usersmultiselect-placeholder": "Додај уште...",
+       "mw-widgets-titlesmultiselect-placeholder": "Додај уште...",
        "date-range-from": "Од датумот:",
        "date-range-to": "До датумот:",
        "sessionmanager-tie": "Не можете истовремено да користите повеќе типови барања за заверка: $1.",
        "passwordpolicies-policy-passwordcannotmatchblacklist": "Лозинката не смее да биде од оние на црниот список",
        "passwordpolicies-policy-maximalpasswordlength": "Лозинката не треба да има повеќе од $1 {{PLURAL:$1|знак|знаци}}",
        "passwordpolicies-policy-passwordcannotbepopular": "Лозинката не треба да биде {{PLURAL:$1|најзастапената|од списокот на $1 најзастапени лозинки}}",
-       "easydeflate-invaliddeflate": "Содржината не е соодветно прочистена"
+       "easydeflate-invaliddeflate": "Содржината не е соодветно прочистена",
+       "unprotected-js": "JavaScript не може да се вчита од незаштитени страници од безбедносни причини. Создавајте JavaScript само во именскиот простор МедијаВики: или како корисничка потстраница"
 }
index 6db8de9..d8bf99b 100644 (file)
@@ -42,7 +42,6 @@
        "tog-extendwatchlist": "ഏറ്റവും പുതിയവ മാത്രമല്ല, എല്ലാ മാറ്റങ്ങളും ദൃശ്യമാകുന്ന വിധത്തിൽ ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടിക വികസിപ്പിക്കുക.",
        "tog-usenewrc": "സമീപകാല മാറ്റങ്ങൾ, ശ്രദ്ധിക്കുന്നവയുടെ പട്ടിക എന്നീ താളുകളിൽ മാറ്റങ്ങൾ ഗണംതിരിക്കുക",
        "tog-numberheadings": "ഉപവിഭാഗങ്ങൾക്ക് ക്രമസംഖ്യ കൊടുക്കുക",
-       "tog-showtoolbar": "തിരുത്തൽ റ്റൂൾബാർ  പ്രദർശിപ്പിക്കുക",
        "tog-editondblclick": "താളുകളിൽ ഇരട്ട ക്ലിക്ക് ചെയ്യുമ്പോൾ തിരുത്താനനുവദിക്കുക",
        "tog-editsectiononrightclick": "ഉപവിഭാഗങ്ങളുടെ തലക്കെട്ടിൽ റൈറ്റ് ക്ലിക്ക് ചെയ്യുന്നതു വഴി തിരുത്താനനുവദിക്കുക",
        "tog-watchcreations": "ഞാൻ സൃഷ്ടിക്കുന്ന താളുകളും ഞാൻ അപ്‌ലോഡ് ചെയ്യുന്ന പ്രമാണങ്ങളും ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടികയിൽ ചേർക്കുക",
index 84528b9..8edce23 100644 (file)
@@ -26,7 +26,6 @@
        "tog-extendwatchlist": "Хянах жагсаалтаа сүүлийн л засваруудыг бус бүх засварыг харуулахаар томруулах",
        "tog-usenewrc": "Сүүлийн үед хуудсанд хийсэн Грүп өөрчлөлтүүд (ЖаваСкрипт хэрэглэгдэнэ)",
        "tog-numberheadings": "Гарчигуудыг автоматаар дэс дугаарлах",
-       "tog-showtoolbar": "Засварлах түүлбарыг үзүүлэх (ЖаваСкрипт)",
        "tog-editondblclick": "Хоёр удаа дараад хуудсыг засварлах (ЖаваСкрипт)",
        "tog-editsectiononrightclick": "Хэсгийн гарчиг дээр баруун товчлуураар дарж засварладаг болгох (ЖаваСкрипт)",
        "tog-watchcreations": "Миний үүсгэсэн хуудсуудыг хянах жагсаалтанд оруулах",
index 7a80bc4..3c65f32 100644 (file)
@@ -4,7 +4,7 @@
                        "Awangba Mangang"
                ]
        },
-       "tog-underline": "ꯃꯔꯤꯂꯩꯅꯥꯍꯜꯂꯨ",
+       "tog-underline": "ꯃꯔꯤꯂꯩꯅꯥꯍꯜꯂꯨ:",
        "tog-hideminor": "ꯂꯣꯠꯂꯨ ꯈꯖꯤꯛꯇꯪ ꯁꯣꯏꯕꯗꯒꯤ",
        "tog-hidepatrolled": "ꯂꯣꯠꯂꯨ ꯈꯖꯤꯛꯇꯪ ꯁꯣꯏꯕꯗꯒꯤ ꯍꯧꯖꯤꯛꯀꯤ ꯑꯍꯣꯡꯕꯗꯒꯤ",
        "tog-newpageshidepatrolled": "Hide patrolled pages from new page list",
@@ -12,7 +12,6 @@
        "tog-extendwatchlist": "ꯌꯦꯡꯅꯕꯥ ꯄꯥꯔꯦꯡꯗꯨ ꯄꯥꯛꯊꯣꯛꯍꯟꯂꯨ ꯑꯍꯣꯡꯕꯥ ꯂꯣꯏꯅꯥ ꯎꯅꯕꯥ, ꯍꯧꯖꯤꯛꯀꯤ ꯈꯋꯥꯏꯗꯒꯤ ꯑꯅꯛꯄ ꯑꯍꯣꯡꯕꯗꯨ ꯅꯠꯇꯕꯥ",
        "tog-usenewrc": "Group changes by page in recent changes and watchlist",
        "tog-numberheadings": "ꯃꯁꯥ ꯃꯇꯣꯝꯇꯥ-ꯃꯁꯤꯡ-ꯃꯀꯣꯛꯁꯤꯡ",
-       "tog-showtoolbar": "ꯁꯦꯝꯒꯠꯅꯕ ꯇꯨꯜꯕꯥꯔ ꯎꯨꯠꯂꯨ",
        "tog-editondblclick": "꯲ ꯔꯛ ꯅꯝꯃꯒꯥ ꯂꯥꯃꯥꯏꯗꯨ ꯁꯦꯝꯒꯠꯂꯨ",
        "tog-editsectiononrightclick": "section titles ꯗ ꯌꯦꯠꯅ ꯅꯝꯗꯨꯅꯥ ꯁꯦꯝꯒꯠꯂꯛꯅꯕꯒꯤ ꯃꯐꯝꯗꯨ ꯌꯥꯍꯟꯂꯨ",
        "tog-watchcreations": "ꯍꯥꯞꯆꯤꯟꯂꯨ ꯑꯩꯅꯥ ꯁꯦꯝꯂꯛꯄꯥ ꯂꯥꯃꯥꯏꯗꯨ ꯑꯃꯗꯤ ꯑꯩꯅꯥ ꯊꯥꯒꯠꯂꯛꯄꯥ ꯐꯥꯏꯜ ꯗꯨ ꯑꯩꯒꯤ ꯌꯦꯡꯅꯕꯥ ꯄꯔꯦꯡꯗꯥ",
@@ -29,7 +28,7 @@
        "tog-enotifminoredits": "Email me also for minor edits of pages and files",
        "tog-enotifrevealaddr": "Reveal my email address in notification emails",
        "tog-shownumberswatching": " watching users ꯀꯤ ꯃꯁꯤꯡꯗꯨ ꯎꯨꯠꯂꯨ",
-       "tog-oldsig": "ꯅꯪꯒꯤ gi hanna leijariba khutyek",
+       "tog-oldsig": "ꯅꯪꯒꯤ gi hanna leijariba khutyek:",
        "tog-fancysig": "Khutyek tu wikitext oina khanlu(Mashamatomta Samnafam yaodaba)",
        "tog-uselivepreview": "Anouba ꯂꯥꯃꯥꯏ chingthadabida hannagido ootlu",
        "tog-forceeditsummary": "Ahangba semgatlakpa hapchinlak pa matamda hairak o eingonda",
        "may_long": "ꯃꯦ",
        "june": "ꯖꯨꯟ",
        "july": "ꯖꯨꯂꯥꯏ",
-       "august": "ê¯\91ê¯\92ꯥê¯\81ê¯\87",
-       "september": "ê¯\81ꯦê¯\84ꯇꯦꯝꯕꯔ",
+       "august": "ê¯\91ê¯\92ꯨê¯\81ꯠ",
+       "september": "ê¯\81ꯦê¯\9eꯇꯦꯝꯕꯔ",
        "october": "ꯑꯣꯛꯇꯣꯕꯔ",
-       "november": "ê¯\85ꯣê¯\95ꯦꯝꯕꯔ",
+       "november": "ê¯\85ꯣê¯\9aꯦꯝꯕꯔ",
        "december": "ꯗꯤꯁꯦꯝꯕꯔ",
        "january-gen": "ꯖꯥꯅꯨꯋꯥꯔꯤ",
-       "february-gen": "ꯐꯦꯕꯨꯋꯥꯔꯤ",
+       "february-gen": "ê¯\90ꯦê¯\95ê¯\94ꯨê¯\8bꯥê¯\94ꯤ",
        "march-gen": "ꯃꯥꯔꯆ",
        "april-gen": "ꯑꯦꯄꯔꯤꯜ",
        "may-gen": "ꯃꯦ",
@@ -91,7 +90,7 @@
        "august-gen": "ꯑꯒꯨꯁꯠ",
        "september-gen": "ꯁꯦꯞꯇꯦꯝꯕꯔ",
        "october-gen": "ꯑꯣꯛꯇꯣꯕꯔ",
-       "november-gen": "ê¯\85ꯣê¯\95ꯦꯝꯕꯔ",
+       "november-gen": "ê¯\85ꯣê¯\9aꯦꯝꯕꯔ",
        "december-gen": "ꯗꯤꯁꯦꯝꯕꯔ",
        "jan": "ꯖꯥꯟ",
        "feb": "ꯐꯦꯕ",
        "jul": "ꯖꯨꯜ",
        "aug": "ꯑꯥꯒ",
        "sep": "ꯁꯦꯞ",
-       "oct": "ê¯\91ꯣê¯\87",
-       "nov": "ê¯\85ꯣê¯\95",
+       "oct": "ê¯\91ꯣê¯\9b",
+       "nov": "ê¯\85ꯣê¯\9a",
        "dec": "ꯗꯦꯈ",
        "january-date": "$1 ꯖꯥꯅꯨꯋꯥꯔꯤ",
        "february-date": "$1 ꯄꯦꯕꯔꯨꯋꯥꯔꯤ",
        "subcategories": "ꯃꯆꯥꯈꯥꯏꯕꯥ ꯃꯆꯥ",
        "category-media-header": "$1 ꯗꯥ ꯂꯩꯕꯥ ꯃꯦꯗꯤꯌꯥꯒꯤ ꯃꯆꯥꯈꯥꯏꯕꯥ",
        "category-empty": "<em>This category currently contains no pages or media.</em>",
-       "hidden-categories": "{{PLURAL:$1|Hidden category|Hidden categories}}",
+       "hidden-categories": "{{PLURAL:$1|ꯑꯔꯣꯠꯄ ꯃꯆꯥꯈꯥꯏꯕ|ꯑꯔꯣꯠꯄ ꯃꯆꯥꯈꯥꯏꯕꯁꯤꯡ}}",
        "hidden-category-category": "ꯑꯔꯣꯠꯄꯥ ꯃꯊꯪ ꯃꯅꯥꯎ ꯅꯥꯏꯕꯥ",
        "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-subcat-count-limited": "This category has the following {{PLURAL:$1|subcategory|$1 subcategories}}.",
        "category-file-count-limited": "The following {{PLURAL:$1|file is|$1 files are}} in the current category.",
        "listingcontinuesabbrev": "ꯆꯠꯊꯕꯥ",
        "index-category": "Indexed ꯂꯥꯃꯥꯏꯁꯤꯡ",
-       "noindex-category": "Noindexed ê¯\82ꯥê¯\83ꯥê¯\8fê¯\81ꯤꯡ",
+       "noindex-category": "Noindexed ꯂꯃꯥꯏꯁꯤꯡ",
        "broken-file-category": " ꯀꯥꯏꯔꯕꯥ file links ꯒꯥ ꯂꯣꯏꯅꯕꯥ ꯂꯥꯃꯥꯏꯁꯤꯡ",
        "about": "ꯄꯣꯠꯇꯨꯗꯤ ꯃꯔꯝꯗꯥ",
        "article": "ꯂꯥꯃꯥꯏꯁꯤꯗꯥ ꯌꯥꯎꯕꯥ ꯄꯨꯝꯅꯃꯛ",
-       "newwindow": "ꯑꯅꯧꯕꯥ ꯊꯣꯡꯅꯥꯎꯗꯥ ꯍꯥꯡꯗꯣꯛ ꯎ",
-       "cancel": "ê¯\80ê¯\9bê¯\8aꯠê¯\84ꯥ",
+       "newwindow": "(ꯑꯅꯧꯕꯥ ꯊꯣꯡꯅꯥꯎꯗꯥ ꯍꯥꯡꯗꯣꯛ ꯎ)",
+       "cancel": "ê¯\87ꯣê¯\9bê¯\84",
        "moredotdotdot": "ꯋꯥꯠꯂꯤ",
        "morenotlisted": "ꯃꯁꯤꯒꯤ ꯄꯔꯦꯡꯁꯤ ꯃꯄꯨꯡ ꯐꯥꯗꯦ",
-       "mypage": "ê¯\82ꯥê¯\83ꯥê¯\8f",
+       "mypage": "ꯂꯃꯥꯏ",
        "mytalk": "ꯉꯥꯡꯐꯝ",
        "anontalk": "ꯉꯥꯡꯐꯝ",
        "navigation": "ꯆꯠꯄꯥ",
        "and": "ꯑꯃꯁꯨꯡ #꯳꯲; ꯑꯃꯁꯨꯪ",
        "faq": "FAQ",
        "actions": "Actions",
-       "namespaces": "ê¯\83ꯥê¯\83ꯤꯡê¯\92ꯤ ê¯\83ê¯\90ê¯\9d",
-       "variants": "ê¯\88ꯦê¯\87ꯅꯕꯥ",
+       "namespaces": "ꯃꯃꯤꯡꯒꯤ ꯃꯐꯝ",
+       "variants": "ê¯\88ꯦꯠꯅꯕꯥ",
        "navigation-heading": "ꯆꯠꯅꯕ ꯌꯦꯡꯐꯝ",
        "errorpagetitle": "ꯑꯔꯥꯟꯕꯥ",
        "returnto": "$1 ꯗꯥ ꯍꯟꯂꯨ",
-       "tagline": "ꯗꯒꯤ",
-       "help": "ê¯\83ꯥê¯\87ꯦꯡ",
+       "tagline": "{{SITENAME}} ꯗꯒꯤ",
+       "help": "ꯃꯇꯦꯡ",
        "search": "ꯊꯤꯕꯥ",
-       "search-ignored-headings": " #<!-- leave this line exactly as it is --> <pre>\n# Headings that will be ignored by search.\n# Changes to this take effect as soon as the page with the heading is indexed.\n# You can force page reindexing by doing a null edit.\n# The syntax is as follows:\n#   * Everything from a \"#\" character to the end of the line is a comment.\n#   * Every non-blank line is the exact title to ignore, case and everything.\nReferences\nExternal links\nSee also\n #</pre> <!-- leave this line exactly as it is -->",
+       "search-ignored-headings": " #<!-- leave this line exactly as it is --> <pre>\n# Headings that will be ignored by search.\n# Changes to this take effect as soon as the page with the heading is indexed.\n# You can force page reindexing by doing a null edit.\n# The syntax is as follows:\n#   * Everything from a \"#\" character to the end of the line is a comment.\n#   * Every non-blank line is the exact title to ignore, case and everything.\nꯂꯧꯔꯛꯐꯝꯁꯤꯡ\nꯃꯄꯥꯟꯒꯥ ꯁꯝꯅꯕꯁꯤꯡ\nꯁꯤꯖꯨ ꯌꯦꯡꯉꯨ\n #</pre> <!-- leave this line exactly as it is -->",
        "searchbutton": "ꯊꯤꯕꯥ",
        "go": "ꯆꯠꯂꯨ",
        "searcharticle": "ꯆꯠꯂꯨ",
-       "history": "ê¯\82ꯥê¯\83ꯥê¯\8fê¯\92ꯤ ê¯\84ꯨê¯\8bꯥê¯\94ꯤ",
+       "history": "ꯂꯃꯥꯏꯒꯤ ꯄꯨꯋꯥꯔꯤ",
        "history_short": "ꯄꯨꯋꯥꯔꯤ",
        "history_small": "ꯄꯨꯋꯥꯔꯤ",
        "updatedmarker": "updated since my last visit",
        "create": "ꯁꯥꯕꯥ",
        "create-local": "ꯁꯨꯋꯥꯏꯒꯤ ꯁꯟꯗꯣꯛꯅꯥ ꯇꯥꯛꯄꯗꯨ ꯍꯥꯞꯆꯤꯟꯂꯨ",
        "delete": "ꯀꯛꯊꯠꯄꯥ",
-       "undelete_short": "Undelete {{PLURAL:$1|one edit|$1 edits}}",
-       "viewdeleted_short": "View {{PLURAL:$1|one deleted edit|$1 deleted edits}}",
+       "undelete_short": "ꯀꯛꯊꯠꯀꯅꯨ {{PLURAL:$1|ꯁꯦꯝꯒꯠꯄ ꯑꯃꯥ|ꯁꯦꯝꯒꯠꯄꯁꯤꯡ $1}}",
+       "viewdeleted_short": "ꯌꯦꯡꯕ {{PLURAL:$1|one deleted edit|$1 deleted edits}}",
        "protect": "ꯉꯥꯛꯊꯣꯛꯂꯕꯥ",
        "protect_change": "ꯑꯍꯣꯡꯕꯥ",
        "unprotect": "ꯍꯥꯛꯊꯣꯛꯂꯕꯥ ꯗꯨ ꯍꯣꯡꯕꯥ",
        "newpage": "ꯑꯅꯧꯕꯥ ꯂꯥꯃꯥꯏ",
        "talkpagelinktext": "ꯉꯥꯡꯐꯝ",
-       "specialpage": "MediaWiki:Bs-wikiadmin-mediawiki-akhannaba-lamai-text/mni",
+       "specialpage": "ꯑꯈꯟꯅꯕ ꯂꯃꯥꯏ",
        "personaltools": "ꯏꯁꯥꯒꯥ ꯂꯣꯏꯅꯕꯥ ꯈꯨꯠꯂꯥꯏ",
        "talk": "ꯈꯟꯅ ꯅꯩꯅꯕ",
        "views": "ꯃꯤꯠꯌꯦꯡ",
        "toolbox": "ꯈꯨꯠꯂꯥꯏꯁꯤꯡ",
-       "tool-link-userrights": "Change {{GENDER:$1|user}} groups",
-       "tool-link-userrights-readonly": "View {{GENDER:$1|user}} groups",
-       "tool-link-emailuser": "Email this {{GENDER:$1|user}}",
-       "imagepage": "File lamai du ootlu",
+       "tool-link-userrights": "ꯑꯍꯣꯡꯕ {{GENDER:$1|ꯁꯤꯖꯤꯟꯅꯔꯤꯕ}} ꯀꯥꯡꯕꯨ",
+       "tool-link-userrights-readonly": "ꯌꯦꯡꯕ {{GENDER:$1|ꯁꯤꯖꯤꯟꯅꯔꯤꯕꯁꯤꯡ}} ꯀꯥꯡꯕꯨꯁꯤꯡ",
+       "tool-link-emailuser": "ꯏꯃꯦꯜ ꯊꯥꯈꯣ {{GENDER:$1|ꯁꯤꯖꯤꯟꯅꯔꯤꯕ}}",
+       "imagepage": "ꯐꯥꯏꯜ ꯂꯃꯥꯏꯗꯨ ꯎꯠꯂꯨ",
        "mediawikipage": "ꯄꯥꯎꯖꯦꯜꯒꯤ ꯂꯥꯃꯥꯏꯗꯨ ꯎꯨꯠꯂꯨ",
        "templatepage": "ꯇꯦꯝꯄꯂꯦꯠꯀꯤ ꯂꯃꯥꯏꯗꯨ ꯎꯨꯠꯂꯨ",
        "viewhelppage": "ꯃꯇꯦꯡ ꯄꯥꯡꯅꯕꯒꯤ ꯂꯥꯃꯥꯏꯗꯨ ꯎꯨꯠꯂꯨ",
        "categorypage": "ꯃꯆꯥꯈꯥꯏꯕ ꯂꯃꯥꯏꯗꯨ ꯎꯨꯠꯂꯨ",
        "viewtalkpage": "ꯈꯟꯅꯥ ꯅꯩꯅꯕꯗꯨ ꯎꯨꯠꯂꯨ",
        "otherlanguages": "ꯑꯇꯣꯞꯄꯥ ꯂꯣꯟꯁꯤꯡꯗꯥ",
-       "redirectedfrom": "(Redirected from $1)",
-       "redirectpagesub": "ê¯\91ê¯\83ꯨê¯\9b ê¯\8dê¯\9fê¯\82ê¯\9bê¯\84ꯥ ê¯\82ꯥê¯\83ꯥê¯\8f",
+       "redirectedfrom": "($1 ꯗꯒꯤ ꯔꯤꯗꯥꯏꯔꯦꯛ)",
+       "redirectpagesub": "ꯑꯃꯨꯛ ꯍꯟꯂꯛꯄꯥ ꯂꯃꯥꯏ",
        "redirectto": "Redirect to:",
-       "lastmodifiedat": "$2$1 ꯃꯁꯤꯒꯤ ꯂꯃꯥꯏꯁꯤ ꯑꯔꯣꯏꯕꯥ ꯁꯦꯝꯒꯠꯈꯤꯕꯥ",
+       "lastmodifiedat": "$1 ꯗꯥ ꯃꯁꯤꯒꯤ ꯂꯃꯥꯏꯁꯤ ꯑꯔꯣꯏꯕꯥ ꯁꯦꯝꯒꯠꯈꯤꯕꯥ, $2 ꯗꯥ",
        "viewcount": "This page has been accessed {{PLURAL:$1|once|$1 times}}?",
        "protectedpage": "ꯍꯥꯛꯊꯣꯛꯂꯕꯥ ꯂꯥꯃꯥꯏ",
        "jumpto": "ꯑꯗꯨꯗꯥ  ꯆꯣꯡꯈꯠꯄꯥ",
        "pool-errorunknown": "ꯁꯛꯈꯪꯗꯕꯥ ꯑꯔꯥꯟꯕꯥ",
        "pool-servererror": "$1 ꯄꯨꯜ ꯀꯥꯎꯟꯇꯔ ꯇꯧꯅꯕꯥ ꯂꯩꯇꯔꯦ",
        "poolcounter-usage-error": "$1:ꯁꯤꯖꯤꯟꯅꯔꯤꯕꯥ ꯑꯔꯥꯟꯕꯥ",
-       "aboutsite": "ꯃꯔꯝꯗꯥ",
+       "aboutsite": "{{SITENAME}} ꯃꯔꯝꯗꯥ",
        "aboutpage": "Project:ꯃꯔꯝꯗꯥ",
        "copyright": "$1 ꯒꯤ ꯃꯇꯦꯡꯅ ꯃꯅꯨꯡꯒꯤ ꯑꯌꯥꯑꯣꯕꯥ ꯐꯪꯒꯅꯤ ꯅꯠꯇꯔꯒꯥ ꯏꯁꯤꯟꯗꯔꯤꯒꯩ",
        "copyrightpage": "{{ns:project}}: ꯁꯤꯟꯗꯣꯔꯛꯄꯒꯤ ꯍꯛ",
        "versionrequiredtext": "ꯃꯦꯗꯤꯌꯥ ꯋꯤꯀꯤꯅ ꯋꯥꯠꯂꯤꯕꯥ $1ꯕꯔꯖꯟ ꯃꯁꯤꯒꯤ ꯂꯥꯃꯥꯏꯁꯤꯗꯥ ꯁꯤꯖꯤꯟꯅꯕꯥ [[Special:Version|version page]].",
        "ok": "ꯌꯥꯔꯦ",
        "retrievedfrom": "$1 ꯃꯐꯝꯗꯨꯗꯒꯤ ꯑꯣꯏꯔꯛꯄꯥ",
-       "youhavenewmessages": "{{PLURAL:$3|You have}} $1 ($2).",
+       "youhavenewmessages": "{{PLURAL:$3|ꯅꯪꯉꯣꯟꯗ ꯂꯩ}} $1 ($2).",
        "youhavenewmessagesfromusers": "{{PLURAL:$4|You have}} $1 from {{PLURAL:$3|another user|$3 users}} ($2).",
        "youhavenewmessagesmanyusers": "ꯅꯪ $1 ꯂꯩꯔꯦ $2 ꯁꯤꯖꯤꯟꯅꯔꯤꯕꯥ ꯃꯌꯥꯝꯗꯒꯤ",
-       "newmessageslinkplural": "{{PLURAL:$1|a new message|999=new messages}}",
-       "newmessagesdifflinkplural": "ꯑꯔꯣꯏꯕꯥ {{PLURAL:$1|change|999=changes}}",
+       "newmessageslinkplural": "{{PLURAL:$1|ꯑꯅꯧꯕ ꯄꯥꯎꯖꯦꯜ ꯱|꯹꯹꯹=ꯑꯅꯧꯕ ꯄꯥꯎꯖꯦꯜꯁꯤꯡ}}",
+       "newmessagesdifflinkplural": "ꯑꯔꯣꯏꯕꯥ {{PLURAL:$1|ꯑꯍꯣꯡꯕ|꯹꯹꯹=ꯑꯍꯣꯡꯕꯁꯤꯡ}}",
        "youhavenewmessagesmulti": "$1 ꯅꯪꯒꯤ ꯑꯅꯧꯕꯥ ꯃꯦꯁꯦꯁ",
        "editsection": "ꯁꯦꯝꯒꯠꯄ",
        "editold": "ꯁꯦꯝꯒꯠꯄ",
-       "viewsourceold": "ê¯\8dꯧê¯\94ê¯\9bê¯\90ê¯\9d ê¯\8eꯨê¯\87ê¯\82ꯨ",
+       "viewsourceold": "ê¯\8dꯧê¯\94ê¯\9bê¯\90ê¯\9d ê¯\8eꯨꯠê¯\84",
        "editlink": "ꯁꯦꯝꯒꯠꯄꯥ",
-       "viewsourcelink": "ê¯\8dꯧê¯\94ê¯\9bê¯\90ê¯\9d ê¯\8eꯨê¯\87ê¯\82ꯨ",
+       "viewsourcelink": "ê¯\8dꯧê¯\94ê¯\9bê¯\90ê¯\9d ê¯\8eꯨꯠê¯\84",
        "editsectionhint": "ꯁꯦꯝꯒꯠꯄꯒꯤ ꯁꯔꯨꯛ: $1",
        "toc": "ꯑꯌꯥꯎꯕꯥ",
        "showtoc": "ꯎꯨꯠꯂꯨ",
        "site-rss-feed": "$1 RSS feed",
        "site-atom-feed": "$1 ꯑꯦꯇꯣꯝ ꯇꯥꯛꯄꯥ",
        "page-rss-feed": "\"$1\" RSS feed",
-       "page-atom-feed": "\"$1\" Atom feed",
-       "red-link-title": "$1 ꯂꯃꯥꯏꯗꯨ ꯂꯩꯇꯔꯦ",
+       "page-atom-feed": "$1 ꯑꯦꯇꯣꯝ ꯐꯤꯗ",
+       "red-link-title": "$1 (ꯂꯃꯥꯏꯗꯨ ꯂꯩꯇꯔꯦ)",
        "sort-descending": "ꯑꯇꯦꯟꯕꯥ ꯍꯟꯊꯔꯛꯂꯤꯕꯥ",
        "sort-ascending": "ꯑꯇꯦꯟꯕꯥ ꯍꯦꯟꯒꯠꯂꯛꯂꯤꯕꯥ",
        "nstab-main": "ꯂꯃꯥꯏ",
        "nstab-mediawiki": "ꯄꯥꯎꯖꯦꯜ",
        "nstab-template": "ꯇꯦꯝꯄꯂꯦꯠ",
        "nstab-help": "ꯂꯥꯃꯥꯏꯒꯤ ꯃꯇꯦꯂꯧꯐꯝ",
-       "nstab-category": "ê¯\83ꯥê¯\86ꯥê¯\9bê¯\88ꯥê¯\8fê¯\95ꯥ",
+       "nstab-category": "ê¯\83ê¯\86ꯥê¯\88ꯥê¯\8fê¯\95",
        "mainpage-nstab": "ꯃꯔꯨꯑꯣꯏꯕ ꯂꯃꯥꯏ",
        "nosuchaction": "ꯃꯁꯤꯒꯨꯕꯥ ꯃꯥꯑꯣꯡꯁꯤ ꯅꯠꯇꯦ",
        "nosuchactiontext": "The action specified by the URL is invalid.\nYou might have mistyped the URL, or followed an incorrect link.\nThis might also indicate a bug in the software used by {{SITENAME}}.",
        "title-invalid-empty": "The requested page title is empty or contains only the name of a namespace.",
        "title-invalid-utf8": "The requested page title contains an invalid UTF-8 sequence.",
        "title-invalid-interwiki": "ꯍꯪꯒꯠꯆꯔꯤꯕꯥ ꯂꯥꯃꯥꯏꯁꯤꯒꯤ ꯃꯃꯤꯡ ꯁꯤ ꯋꯤꯀꯤ ꯒꯥ ꯃꯔꯤ ꯂꯩꯅꯕꯥ ꯁꯝꯅꯐꯝ ꯌꯥꯑꯣ ꯏ ꯃꯗꯨꯗꯤ ꯃꯃꯤꯡ ꯑꯣꯏꯅꯥ ꯁꯤꯖꯤꯟꯅꯕꯥ ꯌꯥꯗꯕꯥ",
-       "viewsource": "ê¯\8dꯧê¯\94ê¯\9bê¯\90ê¯\9d ê¯\8eꯨê¯\87ꯂꯨ",
+       "viewsource": "ê¯\8dꯧê¯\94ê¯\9bê¯\90ê¯\9d ê¯\8eꯨꯠꯂꯨ",
        "viewsource-title": "$1 ꯒꯤ ꯍꯧꯔꯛꯐꯝ ꯎꯨꯠꯂꯨ",
        "viewsourcetext": "ꯅꯪꯅꯥ ꯌꯦꯡꯕꯥ ꯌꯥꯒꯅꯤ ꯑꯃꯗꯤ ꯃꯁꯤꯒꯤ ꯂꯥꯃꯥꯏꯁꯤꯒꯤ ꯍꯧꯔꯛꯐꯝ ꯁꯤꯟꯇꯣꯛ ꯎ",
        "mycustomjsonprotected": "ꯅꯪꯅꯥ ꯃꯁꯤ json ꯂꯥꯃꯥꯏꯁꯤ ꯁꯦꯝꯒꯠꯅꯕꯥ ꯑꯌꯥꯕꯥ ꯄꯤꯗꯦ",
        "welcomeuser": "$1ꯂꯦꯡꯁꯤꯟꯕꯤꯔꯛꯁꯤ",
        "welcomecreation-msg": "ꯅꯪꯒꯤ ꯑꯦꯀꯥꯎꯟꯇ ꯁꯤ ꯁꯥꯈꯔꯦ\nꯅꯪꯒꯤ ꯑꯄꯥꯝꯕꯒꯤ ꯃꯇꯨꯡ ꯏꯟꯅꯥ ꯍꯣꯡꯗꯣꯛꯄꯥ ꯌꯥꯔꯦ ꯅꯪꯅꯥ {{SITENAME}} [[Special:Preferences|preferences]] ꯅꯪꯒꯤ ꯑꯄꯥꯝꯕꯒꯤ ꯃꯇꯨꯡꯏꯟꯅꯥ.",
        "yourname": "ꯁꯤꯖꯤꯟꯅꯔꯤꯕꯥ ꯃꯃꯤꯡ",
-       "userlogin-yourname": "ꯁꯤꯖꯤꯟꯅꯔꯤꯕ",
+       "userlogin-yourname": "ꯁꯤꯖꯤꯟꯅꯔꯤꯕ ꯃꯃꯤꯡ",
        "userlogin-yourname-ph": "ꯅꯪꯒꯤ ꯁꯤꯖꯤꯟꯅꯔꯤꯕ ꯃꯃꯤꯡ ꯏꯌꯨ",
        "createacct-another-username-ph": "ꯁꯤꯖꯤꯟꯅꯔꯤꯕꯥ ꯃꯃꯤꯡ ꯗꯨ ꯏꯁꯤꯟꯂꯣ",
        "yourpassword": "ꯆꯪꯁꯤꯟꯅꯕꯥ ꯋꯥꯍꯩ",
        "userlogin-yourpassword": "ꯆꯪꯁꯤꯟꯅꯕꯥ ꯋꯥꯍꯩ",
-       "userlogin-yourpassword-ph": "ê¯\84ꯥê¯\81ê¯\8b꯭ê¯\87 ꯏꯔꯛ ꯎ",
-       "createacct-yourpassword-ph": "ê¯\84ꯥê¯\81ê¯\8b꯭ê¯\87 ꯏꯔꯛ ꯎ",
-       "yourpasswordagain": "ê¯\91ê¯\83ꯨê¯\9bê¯\8dê¯\9fê¯\85ꯥ ê¯\84ꯥê¯\81ê¯\8bê¯\94ê¯\87 ꯅꯝꯃꯨ",
+       "userlogin-yourpassword-ph": "ê¯\84ꯥê¯\81ê¯\8b꯭ê¯\94ê¯\97 ꯏꯔꯛ ꯎ",
+       "createacct-yourpassword-ph": "ê¯\84ꯥê¯\81ê¯\8b꯭ê¯\94ê¯\97 ꯏꯔꯛ ꯎ",
+       "yourpasswordagain": "ê¯\91ê¯\83ꯨê¯\9bê¯\8dê¯\9fê¯\85ꯥ ê¯\84ꯥê¯\81ê¯\8b꯭ê¯\94ê¯\97 ꯅꯝꯃꯨ",
        "createacct-yourpasswordagain": "Confirm password",
        "createacct-yourpasswordagain-ph": "ꯑꯃꯨꯛ ꯍꯟꯅꯥ ꯄꯥꯁꯋ꯭ꯇ ꯏꯌꯨ",
        "userlogin-remembermypassword": "ꯑꯩꯕꯨ ꯑꯗꯨꯝ ꯂꯣꯒ ꯏꯟ ꯇꯧꯍꯟꯂꯨ",
        "cannotloginnow-text": "$1 ꯁꯤꯖꯤꯟꯅꯔꯤꯉꯩꯗꯥ ꯂꯣꯒꯒꯤꯡ ꯏꯟ ꯁꯤ ꯑꯣꯏꯊꯣꯛꯇꯦ",
        "cannotcreateaccount-title": "ꯑꯦꯀꯥꯎꯟ ꯁꯥꯕꯥ ꯌꯥꯗꯦ",
        "cannotcreateaccount-text": "ꯍꯦꯛꯇꯥ ꯑꯣꯀꯥꯎꯅ ꯁꯥꯕꯥ ꯁꯤ ꯃꯁꯤꯒꯤ ꯋꯤꯀꯤ ꯁꯤ ꯗ ꯌꯥꯍꯟꯗꯦ",
-       "yourdomainname": "ꯅꯪꯒꯤ ꯗꯣꯃꯦꯟ",
-       "password-change-forbidden": "ê¯\85ꯪê¯\85ꯥ ê¯\83ê¯\81ꯤê¯\92ꯤ ê¯\8bꯤê¯\80ꯤ ê¯\81ꯤê¯\97ꯥ ê¯\84ꯥê¯\81ê¯\8bê¯\94ê¯\87 ê¯\8dꯣꯡê¯\95ꯥ ê¯\8cꯥê¯\94ꯣê¯\8f",
+       "yourdomainname": "ꯅꯪꯒꯤ ꯗꯣꯃꯦꯟ:",
+       "password-change-forbidden": "ê¯\85ꯪê¯\85ꯥ ê¯\83ê¯\81ꯤê¯\92ꯤ ê¯\8bꯤê¯\80ꯤ ê¯\81ꯤê¯\97ꯥ ê¯\84ꯥê¯\81ê¯\8b꯭ê¯\94ê¯\97 ê¯\8dꯣꯡê¯\95ꯥ ê¯\8cꯥê¯\94ꯣê¯\8f ê¯«",
        "externaldberror": "There was either an authentication database error or you are not allowed to update your external account.",
        "login": "Chang Sinba",
        "login-security": "ꯅꯪꯒꯤ ꯁꯛꯑꯣꯡ ꯈꯟꯗꯣꯛꯄꯥ",
        "nav-login-createaccount": "ꯂꯣꯒ ꯏꯟ/ꯑꯦꯀꯥꯎꯟ ꯁꯥꯕꯥ",
-       "logout": "Log out",
-       "userlogout": "ê¯\82ꯣê¯\92 ê¯\91ꯧê¯\87",
+       "logout": "ꯊꯣꯛꯂꯛꯄꯥ",
+       "userlogout": "ê¯\8aꯣê¯\9bê¯\82ê¯\9bê¯\84ꯥ",
        "notloggedin": "ꯂꯦꯒ ꯏꯟ ꯇꯧꯗꯦ",
        "userlogin-noaccount": "ꯑꯦꯀꯥꯎꯟ ꯂꯩꯇꯕꯔꯥ?",
-       "userlogin-joinproject": "ꯌꯥꯎꯕꯥ {{ꯃꯃꯤꯡ ꯏꯐꯝ}}",
+       "userlogin-joinproject": "{{SITENAME}} ꯌꯥꯎꯕ",
        "createaccount": "ꯑꯩꯒꯤ ꯑꯣꯏꯕꯥ ꯑꯃꯥ ꯁꯦꯝꯕꯥ",
        "userlogin-resetpassword-link": "ꯄꯥꯁꯋꯔꯇ ꯀꯥꯎꯈꯔꯕꯥ",
        "userlogin-helplink2": "ꯂꯣꯒꯒꯤꯡ ꯇꯧꯗꯨꯅꯥ ꯃꯇꯦꯡ ꯄꯥꯡ ꯎ",
        "loginsuccesstitle": "ꯂꯣꯒ ꯏꯟ",
        "login-userblocked": "ꯃꯁꯤꯒꯤ ꯁꯤꯖꯤꯟꯅꯔꯤꯕꯥꯁꯤ ꯊꯤꯡꯖꯤꯟꯈꯔꯦ? ꯂꯣꯒ ꯏꯟ ꯌꯥꯔꯥꯔꯣꯏ",
        "passwordtooshort": "ꯄꯥꯁꯋꯔꯇ ꯁꯤ ꯌꯥꯝꯗꯔꯕꯗꯥ ꯃꯁꯤ ꯈꯔꯥꯁꯤ ꯌꯥꯎꯒꯗꯕꯅꯤ {{PLURAL:$1|1 character|$1 characters}}.",
-       "mailmypassword": "ê¯\84ꯥê¯\81ê¯\8b꯭ê¯\87 ꯁꯦꯝꯗꯣꯛꯄꯥ",
+       "mailmypassword": "ê¯\84ꯥê¯\81ê¯\8b꯭ê¯\94ê¯\97 ꯁꯦꯝꯗꯣꯛꯄꯥ",
        "passwordremindertitle": " {{SITENAME}} ꯁꯤꯒꯤ ꯑꯅꯧꯕꯥ ꯉꯥꯏꯍꯥꯛꯀꯤ ꯑꯣꯏꯕꯥ ꯄꯥꯁꯋꯔꯇ",
        "passwordremindertext": "Someone (from IP address $1) requested a new\npassword for {{SITENAME}} ($4). A temporary password for user\n\"$2\" has been created and was set to \"$3\". If this was your\nintent, you will need to log in and choose a new password now.\nYour temporary password will expire in {{PLURAL:$5|one day|$5 days}}.\n\nIf someone else made this request, or if you have remembered your password,\nand you no longer wish to change it, you may ignore this message and\ncontinue using your old password.",
        "emailconfirmlink": "ꯅꯪꯒꯤ ꯏꯃꯦꯜ ꯑꯦꯗꯔꯦꯁ ꯌꯥꯕꯔꯥ ꯌꯦꯡ ꯎ",
        "accountcreated": "ꯑꯦꯀꯥꯎꯟ ꯁꯥꯈꯔꯦ",
-       "loginlanguagelabel": "$1 ꯂꯣꯟ",
+       "loginlanguagelabel": "ꯂꯣꯟ:$1",
        "pt-login": "ꯆꯪꯁꯤꯟꯕ ꯃꯅꯨꯪꯗ",
        "pt-login-button": "Chang Sinba",
        "pt-login-continue-button": "ꯂꯣꯘ ꯏꯟ ꯃꯈꯥ ꯆꯠꯊꯧ",
        "pt-createaccount": "ꯑꯩꯒꯤ ꯑꯣꯏꯕꯥ ꯑꯃꯥ ꯁꯦꯝꯕꯥ",
        "pt-userlogout": "ꯊꯣꯛꯂꯛꯄꯥ",
        "changepassword": "ꯄꯥꯁꯋ꯭ꯔꯇ ꯍꯣꯡꯗꯣꯛꯄꯥ",
-       "oldpassword": "ê¯\91ê¯\94ꯤê¯\95ꯥ ê¯\84ꯥê¯\81ê¯\8bê¯\94ê¯\87",
-       "newpassword": "ê¯\91ê¯\85ꯧê¯\95ꯥ ê¯\84ꯥê¯\81ê¯\8bê¯\94ê¯\87",
-       "retypenew": "ê¯\91ê¯\83ꯨê¯\9bê¯\8dê¯\9fê¯\85ꯥ ê¯\91ê¯\85ꯧê¯\95ꯥ  ê¯\84ꯥê¯\81ê¯\8bê¯\94ê¯\87 ê¯\85ê¯\9dê¯\83ꯨ",
+       "oldpassword": "ê¯\91ê¯\94ꯤê¯\95ꯥ ê¯\84ꯥê¯\81ê¯\8b꯭ê¯\94ê¯\97:",
+       "newpassword": "ê¯\91ê¯\85ꯧê¯\95ꯥ ê¯\84ꯥê¯\81ê¯\8b꯭ê¯\94ê¯\97",
+       "retypenew": "ê¯\91ê¯\83ꯨê¯\9bê¯\8dê¯\9fê¯\85ꯥ ê¯\91ê¯\85ꯧê¯\95ꯥ  ê¯\84ꯥê¯\81ê¯\8b꯭ê¯\94ê¯\97ê¯\85ê¯\9dê¯\83ꯨ:",
        "resetpass_submit": "ꯄꯥꯁꯋꯔꯇ ꯁꯦꯝꯃꯨ ꯱ꯗꯤ ꯂꯣꯒ ꯏꯟ",
        "changepassword-success": "ꯅꯪꯒꯤ ꯄꯥꯁꯋꯔꯇ ꯁꯤ ꯍꯣꯡꯗꯣꯛꯈꯔꯦ",
        "changepassword-throttled": "You have made too many recent login attempts.\nPlease wait $1 before trying again.",
        "changeemail-oldemail": "ꯍꯧꯖꯤꯛꯀꯤ ꯏꯃꯦꯜ ꯑꯦꯗ꯭ꯔꯦꯁ:",
        "changeemail-newemail": "ꯑꯅꯧꯕ ꯏꯃꯦꯜ ꯑꯦꯗ꯭ꯔꯦꯁ:",
        "changeemail-none": "ꯑꯃꯥꯇꯥ ꯅꯠꯇꯦ",
-       "changeemail-password": "ê¯\85ꯪê¯\92ꯤ {{SITENAME}} ê¯\84ꯥê¯\81ê¯\8b꯭ê¯\94ê¯\87:",
+       "changeemail-password": "ê¯\85ꯪê¯\92ꯤ {{SITENAME}} ê¯\84ꯥê¯\81ê¯\8b꯭ê¯\94ê¯\97:",
        "changeemail-submit": "ꯏ-ꯃꯦꯜ ꯍꯣꯡꯕꯥ",
        "bold_sample": "ꯆꯥꯎꯅꯥ ꯏꯕꯥ",
        "bold_tip": "ꯆꯥꯎꯅꯥ ꯏꯕꯥ",
-       "italic_sample": "ê¯\8bꯥê¯\94ꯦꯡ ê¯\90ê¯\86ꯅꯥ ꯏꯕꯥ",
+       "italic_sample": "ê¯\8bꯥê¯\94ꯦꯡ ê¯\90ꯩꯅꯥ ꯏꯕꯥ",
        "italic_tip": "ꯋꯥꯔꯦꯡ ꯐꯩꯅꯥ ꯏꯕꯥ",
-       "link_sample": "ê¯\83ꯩê¯\83ꯤꯡê¯\83ꯤ ꯁꯝꯅꯐꯝ",
+       "link_sample": "ê¯\91ê¯\84ꯤê¯\95 ê¯\83ê¯\83ꯤꯡ ꯁꯝꯅꯐꯝ",
        "link_tip": "ꯃꯅꯨꯡꯒꯥ ꯁꯝꯅꯐꯝ",
        "extlink_sample": "http://www.example.com link title",
        "extlink_tip": "ꯑꯇꯣꯞꯄꯥꯒꯥ ꯁꯝꯅꯐꯝ",
        "media_tip": "ꯐꯥꯏꯜꯒꯤ ꯁꯝꯅꯐꯝ",
        "sig_tip": "ꯃꯇꯝꯒꯤ ꯏꯁꯇꯥꯝꯒꯥ ꯂꯣꯏꯟꯅꯥ ꯅꯪꯒꯤ ꯈꯨꯇꯌꯦꯛ",
        "hr_tip": "ꯐꯩꯅꯥ ꯆꯤꯡꯕꯥ ꯂꯥ ꯏ (ꯃꯔꯤꯛ ꯃꯔꯤꯛ ꯑꯣꯏꯅꯥ ꯁꯤꯖꯤꯟꯅꯧ)",
-       "summary": "ꯑꯇꯦꯟꯕꯥ ꯁꯟꯗꯣꯛꯅꯥ ꯇꯥꯛꯄꯥ",
-       "subject": "ꯍꯤꯔꯝ",
+       "summary": "ꯑꯇꯦꯟꯕꯥ ꯁꯟꯗꯣꯛꯅꯥ ꯇꯥꯛꯄꯥ:",
+       "subject": "ꯍꯤꯔꯝ:",
        "minoredit": "ꯃꯁꯤ ꯑꯄꯤꯛꯄꯥ ꯁꯦꯝꯒꯠꯄꯅꯤ",
        "watchthis": "ꯃꯁꯤꯒꯤ ꯂꯃꯥꯏꯁꯤ ꯌꯦꯡꯉꯨ",
        "savearticle": "ꯂꯃꯥꯏ ꯇꯨꯪꯁꯤꯟꯕꯥ",
        "savechanges-start": "ꯑꯍꯣꯡꯕꯁꯤꯡꯗꯨ ꯇꯨꯪꯁꯤꯟꯂꯨ",
        "publishpage-start": "ꯂꯥꯃꯥꯏ ꯐꯣꯡꯗꯣꯛ ꯎ",
        "publishchanges-start": "ꯑꯍꯣꯡꯕꯁꯤꯡꯗꯨ ꯐꯣꯡꯗꯣꯛ ꯎ",
-       "preview": "ê¯\83ꯥê¯\83ꯥꯡê¯\92ꯤ",
+       "preview": "ꯃꯃꯥꯡꯒꯤ",
        "showpreview": "ꯍꯥꯟꯅꯒꯤꯗꯨ ꯎꯨꯠꯂꯨ",
-       "showdiff": "ê¯\91ê¯\8dꯣꯡê¯\95ê¯\97ꯨ ê¯\8eꯨê¯\87ꯂꯨ",
+       "showdiff": "ê¯\91ê¯\8dꯣꯡê¯\95ê¯\97ꯨ ê¯\8eꯨꯠꯂꯨ",
        "blankarticle": "<strong>Warning:</strong> The page you are creating is blank.\nIf you click \"$1\" again, the page will be created without any content.",
-       "anoneditwarning": "<strong>Warning:</strong> You are not logged in. Your IP address will be publicly visible if you make any edits. If you <strong>[$1 log in]</strong> or <strong>[$2 create an account]</strong>, your edits will be attributed to your username, along with other benefits.",
+       "anoneditwarning": "<strong>Warning:</strong> ꯅꯪ ꯃꯅꯨꯡ ꯆꯪꯗꯔꯤ꯬꯬ ꯫ Your IP address will be publicly visible if you make any edits. If you <strong>[$1 log in]</strong> or <strong>[$2 create an account]</strong>, your edits will be attributed to your username, along with other benefits.",
        "loginreqlink": "Chang Sinba",
        "accmailtitle": "ꯄꯥꯁꯋ꯭ꯔꯇ ꯊꯥꯕ",
        "newarticle": "ꯑꯅꯧꯕꯥ",
-       "newarticletext": "You have followed a link to a page that does not exist yet.\nTo create the page, start typing in the box below (see the [$1 help page] for more info).\nIf you are here by mistake, click your browser's <strong>back</strong> button.",
+       "newarticletext": "You have followed a link to a page that does not exist yet.\nTo create the page, start typing in the box below (see the [$1 help page] for more info).\nIf you are here by mistake, click your browser's <strong>ꯍꯟꯕ</strong> button.",
        "anontalkpagetext": "----\n<em>This is the discussion page for an anonymous user who has not created an account yet, or who does not use it.</em>\nWe therefore have to use the numerical IP address to identify him/her.\nSuch an IP address can be shared by several users.\nIf you are an anonymous user and feel that irrelevant comments have been directed at you, please [[Special:CreateAccount|create an account]] or [[Special:UserLogin|log in]] to avoid future confusion with other anonymous users.",
        "noarticletext": "There is currently no text in this page.\nYou can [[Special:Search/{{PAGENAME}}|search for this page title]] in other pages,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} search the related logs],\nor [{{fullurl:{{FULLPAGENAME}}|action=edit}} create this page]</span>.",
        "noarticletext-nopermission": "There is currently no text in this page.\nYou 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>, but you do not have permission to create this page.",
        "continue-editing": "ꯁꯦꯝꯒꯠꯄꯒꯤ ꯃꯐꯝꯗꯨꯗꯥ ꯆꯠꯂꯨ",
        "editing": "$1 ꯁꯦꯝꯒꯠꯂꯤ",
        "creating": "ꯁꯥꯔꯤ $1",
-       "editingsection": "Editing $1 (section)",
+       "editingsection": "ꯏꯔꯤꯕ $1 (ꯁꯥꯔꯨꯛ)",
        "yourtext": "ꯅꯪꯒꯤ ꯇꯦꯀꯁ",
        "yourdiff": "ꯈꯦꯠꯅꯕꯥ ꯁꯤꯡ",
        "copyrightwarning": "Please note that all contributions to {{SITENAME}} are considered to be released under the $2 (see $1 for details).\nIf you do not want your writing to be edited mercilessly and redistributed at will, then do not submit it here.<br />\nYou are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource.\n<strong>Do not submit copyrighted work without permission!</strong>",
-       "templatesused": "{{PLURAL:$1|Template|Templates}} used on this page:",
+       "templatesused": "ꯃꯁꯤꯒꯤ ꯂꯃꯥꯏꯁꯤꯗ ꯁꯤꯖꯤꯟꯅꯕ {{PLURAL:$1|ꯇꯦꯝꯄꯂꯦꯠ|ꯇꯦꯝꯄꯂꯦꯠꯁꯤꯡ}}:",
        "templatesusedpreview": "{{PLURAL:$1|ꯇꯦꯝꯄꯂꯦꯠ|ꯇꯦꯝꯄꯂꯦꯠꯁꯤꯡ}} ꯄꯔꯤꯕꯤꯌꯨ ꯗ ꯁꯤꯖꯤꯟꯅꯕ:",
-       "template-protected": "ꯉꯥꯛꯊꯣꯛꯂꯕꯥ",
-       "template-semiprotected": "ꯇꯪꯈꯥꯏ ꯉꯥꯛꯊꯣꯛꯂꯕꯥ",
+       "template-protected": "(ꯉꯥꯛꯊꯣꯛꯂꯕꯥ)",
+       "template-semiprotected": "(ꯇꯪꯈꯥꯏ ꯉꯥꯛꯊꯣꯛꯂꯕꯥ)",
        "hiddencategories": "This page is a member of {{PLURAL:$1|1 hidden category|$1 hidden categories}}:",
        "permissionserrors": "ꯑꯌꯥꯕꯥꯗꯨ ꯁꯣꯏꯔꯦ",
        "permissionserrorstext-withaction": "$2 ꯗ ꯅꯪꯒꯤ ꯑꯌꯥꯕ ꯂꯩꯇꯦ, ꯃꯈꯥꯒꯤ {{PLURAL:$1|ꯃꯔꯝ|ꯃꯔꯝꯁꯤꯡ}} ꯃꯇꯨꯡ ꯏꯟꯅꯥ:",
        "currentrev-asof": "$1 ꯒꯤ ꯅꯧꯅꯥ ꯑꯃꯨꯛꯍꯟꯅꯥ ꯌꯦꯡꯕꯥ ꯃꯤꯠꯌꯦꯡ",
        "revisionasof": " $1 ꯒꯤ ꯑꯃꯨꯛ ꯍꯟꯅ ꯌꯦꯡꯕ",
        "revision-info": " $1 ꯒꯤ ꯑꯃꯨꯛꯌꯦꯡꯕ {{GENDER:$6|$2}}$7 ꯅꯥ",
-       "previousrevision": "ꯑꯔꯤꯕꯥ ꯑꯃꯨꯛ ꯍꯟꯅꯥ ꯌꯦꯡꯕꯥ",
-       "nextrevision": "ꯑꯅꯧꯕꯥ ꯑꯃꯨꯛꯍꯟꯅꯥ ꯌꯦꯡꯕꯥ",
+       "previousrevision": "← ꯑꯔꯤꯕꯥ ꯑꯃꯨꯛ ꯍꯟꯅꯥ ꯌꯦꯡꯕꯥ",
+       "nextrevision": "ꯑꯅꯧꯕꯥ ꯑꯃꯨꯛꯍꯟꯅꯥ ꯌꯦꯡꯕꯥ →",
        "currentrevisionlink": "ꯈꯋꯥꯏꯗꯒꯤ ꯅꯧꯅꯥ ꯑꯃꯨꯛ ꯌꯦꯡꯕꯥ",
        "cur": "ꯍꯧ",
        "next": "ꯃꯊꯪ",
        "last": "ꯃꯃꯥꯡꯒꯤ",
        "page_first": "ꯑꯍꯥꯟꯕ",
        "page_last": "ꯑꯔꯣꯏꯕ",
-       "histlegend": "Diff selection: Mark the radio boxes of the revisions to compare and hit enter or the button at the bottom.<br />\nLegend: <strong>({{int:cur}})</strong> = difference with latest revision, <strong>({{int:last}})</strong> = difference with preceding revision, <strong>{{int:minoreditletter}}</strong> = minor edit.",
+       "histlegend": "Diff selection: Mark the radio boxes of the revisions to compare and hit enter or the button at the bottom.<br />\nLegend: <strong>({{int:cur}})</strong> = difference with latest revision, <strong>({{int:last}})</strong> = difference with preceding revision, <strong>{{int:minoreditletter}}</strong> = ꯑꯄꯤꯛꯄ ꯁꯦꯝꯒꯠꯄ",
        "history-fieldset-title": "ꯊꯤꯋꯨ ꯑꯃꯨꯛ ꯍꯝꯁꯟꯅꯥ ꯌꯦꯡꯅꯕꯥ",
        "histfirst": "ꯈꯋꯥꯏꯗꯒꯤ ꯑꯔꯤꯕꯥ",
        "histlast": "ꯑꯅꯧꯕꯥ",
        "mergehistory-from": "ꯂꯃꯥꯏ ꯑꯣꯏꯔꯛꯐꯝ:",
        "mergehistory-into": "ꯂꯃꯥꯏꯒꯤ ꯄꯟꯊꯨꯪꯐꯝ:",
        "mergehistory-list": "ꯄꯎꯋꯥꯔꯤ ꯁꯦꯝꯒꯠꯄꯗꯨ ꯑꯃꯁꯨ ꯑꯃꯁꯨ ꯆꯪꯍꯟꯕ",
+       "mergehistory-reason": "ꯃꯔꯝ:",
        "mergelog": "ꯂꯣꯒ ꯄꯨꯟꯁꯤꯟꯕ",
        "history-title": "Revision history of \"$1\"",
        "difference-title": "$1 ꯒꯤ ꯑꯃꯨꯛꯍꯟꯕꯥ ꯈꯦꯠꯅꯕꯥꯒꯤ ꯃꯔꯛ",
-       "lineno": "ê¯\82ꯥ ꯏ $1",
+       "lineno": "ê¯\82ꯩ ꯏ $1",
        "compareselectedversions": "ꯈꯟꯒꯠꯂꯕ ꯁꯤꯡ ꯑꯃꯨꯛ ꯍꯟꯅ ꯌꯦꯡꯕꯗꯨ ꯆꯥꯡꯗꯝꯅꯧ",
        "editundo": "ꯇꯧꯒꯅꯨ",
-       "diff-empty": "ꯈꯩꯠꯅꯕ ꯂꯩꯇꯦ",
+       "diff-empty": "(ꯈꯩꯠꯅꯕ ꯂꯩꯇꯦ)",
        "diff-multi-sameuser": "({{PLURAL:$1|One intermediate revision|$1 intermediate revisions}} by the same user not shown)",
        "searchresults": "ꯊꯤꯕꯒꯤ ꯐꯣꯜ",
        "searchresults-title": "Search results for \"$1\"",
        "prevn": "ꯍꯥꯟꯅꯒꯤ {{PLURAL:$1|$1}}",
        "nextn": "ꯃꯥꯊꯪ{{PLURAL:$1|$1}}",
        "prevn-title": "ꯃꯃꯥꯡꯒꯤ $1 {{PLURAL:$1|result|results}}",
-       "nextn-title": "Next $1 {{PLURAL:$1|result|results}}",
-       "shown-title": "Show $1 {{PLURAL:$1|result|results}} per page",
+       "nextn-title": "ꯃꯊꯪ $1 {{PLURAL:$1|ꯐꯣꯜ|ꯐꯣꯜꯁꯤꯡ}}",
+       "shown-title": "ꯎꯠꯂꯨ $1 {{PLURAL:$1|result|results}} ꯂꯃꯥꯏ ꯑꯃꯝ ꯑꯃꯝꯒꯤ ꯑꯣꯏꯅꯥ",
        "viewprevnext": "ꯎꯨꯇꯂꯨ ($1 {{int:pipe-separator}} $2) ($3)",
-       "searchmenu-exists": "<strong>There is a page named \"[[:$1]]\" on this wiki.</strong> {{PLURAL:$2|0=|See also the other search results found.}}",
-       "searchmenu-new": "<strong>Create the page \"[[:$1]]\" on this wiki!</strong> {{PLURAL:$2|0=|See also the page found with your search.|See also the search results found.}}",
-       "searchprofile-articles": "ê¯\82ꯥê¯\83ꯥê¯\8fê¯\81ꯤꯡê¯\92ꯤ ê¯\91ê¯\8cꯥê¯\8eê¯\95",
+       "searchmenu-exists": "<strong>ꯃꯁꯤꯗ ꯂꯃꯥꯏ ꯑꯃꯥ ꯂꯩꯔꯦ ꯃꯃꯤꯡꯅꯥ \"[[:$1]]\" ꯁꯤꯒꯤ ꯋꯤꯀꯤꯁꯤꯗ </strong> {{PLURAL:$2|0=|ꯌꯦꯡꯉꯨ ꯁꯤꯖꯨ ꯑꯇꯩ ꯊꯤꯕꯒꯤ ꯐꯣꯜꯁꯤꯡꯗꯨ ꯫}}",
+       "searchmenu-new": "<strong>ꯂꯃꯥꯏ ꯁꯥꯔꯣ \"[[:$1]]\" on this wiki!</strong> {{PLURAL:$2|0=|See also the page found with your search.|See also the search results found.}}",
+       "searchprofile-articles": "ꯂꯃꯥꯏꯁꯤꯡꯒꯤ ꯑꯌꯥꯎꯕ",
        "searchprofile-images": "ꯃꯜꯇꯤꯃꯦꯗꯤꯌꯥ",
        "searchprofile-everything": "ꯄꯨꯝꯅꯃꯛ",
        "searchprofile-advanced": "ꯈꯨꯃꯥꯡꯆꯥꯎꯁꯤꯜꯂꯕ",
        "searchprofile-articles-tooltip": "$1ꯗ ꯊꯤꯌꯨ",
        "searchprofile-images-tooltip": "ꯐꯥꯏꯜꯁꯤꯡ ꯒꯤ ꯗꯃꯛ ꯊꯤꯕꯥ",
-       "searchprofile-everything-tooltip": "ꯃꯁꯤꯗ ꯌꯥꯎꯔꯤꯕꯁꯤ ꯂꯣꯏꯅ ꯊꯤꯌꯨ",
+       "searchprofile-everything-tooltip": "ꯃꯁꯤꯗ ꯌꯥꯎꯔꯤꯕꯁꯤ ꯂꯣꯏꯅ ꯊꯤꯌꯨ(ꯉꯥꯡꯐꯝ ꯂꯃꯥꯏꯁꯤꯡ ꯌꯥꯎꯅꯥ)",
        "searchprofile-advanced-tooltip": "ꯀꯁꯇꯝꯒꯤ ꯃꯤꯡ ꯏꯕꯝ ꯗꯒꯤ ꯊꯤꯌꯨ",
        "search-result-size": "$1 ({{PLURAL:$2|1 word|$2 words}})",
-       "search-redirect": "(redirect from $1)",
+       "search-redirect": "($1 ꯗꯒꯤ ꯔꯤꯗꯥꯏꯔꯦꯛ)",
        "search-section": "(section $1)",
        "search-file-match": "(ꯐꯥꯏꯜ ꯒꯤ ꯌꯥꯎꯕꯁꯤ ꯆꯥꯟꯅꯔꯦ)",
        "search-suggest": "$1 ꯁꯤꯔꯥ ꯅꯪꯅꯥ ꯍꯥꯏꯅꯤꯡꯂꯤꯕꯥꯁꯤ",
        "prefs-watchlist": "ꯌꯦꯡꯂꯤꯕ ꯄꯥꯥꯔꯦꯡ",
        "prefs-editwatchlist": "ꯌꯦꯡꯂꯤꯕ ꯄꯥꯔꯦꯡꯗꯨ ꯁꯦꯝꯒꯠꯂꯨ",
        "prefs-editwatchlist-label": "ꯅꯪꯅ ꯌꯦꯡꯉꯤꯕ ꯄꯔꯦꯡꯗꯨ ꯏꯁꯤꯟꯗꯨꯅ ꯁꯦꯝꯒꯠꯂꯨ:",
+       "prefs-watchlist-edits-max": "ꯁꯤꯒꯤ ꯃꯁꯤꯡꯗꯒꯤ ꯍꯦꯟꯕ ꯌꯥꯗꯕ:꯱꯰꯰꯰",
        "saveprefs": "ꯇꯨꯡꯁꯤꯟꯂꯕ",
        "prefs-editing": "ꯁꯦꯝꯒꯠꯂꯤ",
        "searchresultshead": "ꯊꯤꯕꯥ",
        "default": "ꯑꯃꯥ ꯍꯦꯛꯇꯥ",
        "prefs-files": "ꯐꯥꯏꯜꯁꯤꯡ",
        "youremail": "ꯏꯃꯦꯜ:",
+       "yourrealname": "ꯑꯁꯦꯡꯕ ꯃꯃꯤꯡ:",
+       "yourlanguage": "ꯂꯣꯟ:",
        "yournick": "ꯑꯅꯧꯕ ꯈꯨꯠꯌꯦꯛ:",
-       "group-bot": "ꯕꯣꯇꯁꯤꯡ",
+       "prefs-signature": "ꯈꯨꯠꯌꯦꯛ",
+       "group": "ꯀꯥꯡꯕꯨ:",
+       "group-user": "ꯁꯤꯖꯤꯟꯅꯔꯤꯕꯁꯤꯡ",
+       "group-bot": "ꯔꯣꯕꯣꯠꯁꯤꯡ",
        "group-sysop": "ꯆꯨꯞꯂꯤ ꯄꯥꯏꯔꯤꯕꯁꯤꯡ",
+       "group-user-member": "{{GENDER:$1|ꯁꯤꯖꯤꯟꯅꯔꯤꯕ}}",
+       "grouppage-user": "{{ns:project}}:ꯁꯤꯖꯤꯟꯅꯔꯤꯕꯁꯤꯡ",
        "grouppage-bot": "{{ns:project}}:ꯕꯣꯠꯁꯤꯡ",
        "grouppage-sysop": "{{ns:project}}:ꯆꯨꯞꯂꯤ ꯄꯥꯏꯔꯤꯕꯁꯤꯡ",
+       "right-edit": "ꯂꯃꯥꯏꯁꯤꯡ ꯁꯦꯝꯒꯠꯄ",
        "right-writeapi": "API sijinaduna eba",
-       "newuserlogpage": "User creation log",
+       "newuserlogpage": "ꯁꯤꯖꯤꯅꯅꯔꯤꯕ creation log",
        "action-edit": "ꯃꯁꯤꯒꯤ ꯂꯃꯥꯏꯁꯤ ꯁꯦꯝꯒꯠꯂꯨ",
        "action-createaccount": "ꯃꯁꯤ ꯁꯤꯖꯤꯟꯅꯔꯤꯕ ꯑꯦꯀꯥꯎꯟ ꯁꯤ ꯁꯦꯝꯃꯨ",
        "enhancedrc-history": "ꯄꯨꯋꯥꯔꯤ",
        "recentchanges-feed-description": "ꯋꯤꯀꯤꯄꯦꯗꯤꯌꯥ ꯂꯃꯥꯏꯒꯤ ꯍꯧꯖꯤꯛꯀꯤ ꯑꯣꯏꯕꯥ ꯑꯍꯣꯡꯕꯒꯤ ꯃꯐꯝ ꯇꯥꯛꯄꯥ ꯑꯃꯗꯤ ꯈꯪꯍꯟꯕ",
        "recentchanges-label-newpage": "ꯃꯁꯤꯒꯤ ꯁꯦꯝꯒꯠꯄꯁꯤꯅꯥ ꯑꯅꯧꯕꯥ ꯂꯥꯃꯥꯏ ꯱ ꯁꯥꯔꯦ",
        "recentchanges-label-minor": "ꯃꯁꯤ ꯑꯄꯤꯛꯄꯥ ꯁꯦꯝꯒꯠꯄꯅꯤ",
-       "recentchanges-label-bot": "ê¯\83ê¯\81ꯤê¯\92ꯤ ê¯\81ꯦê¯\9dê¯\92ꯠê¯\84ê¯\81ꯤ ê¯\95 ꯅꯥ ꯄꯥꯡꯊꯣꯛꯄꯅꯤ",
+       "recentchanges-label-bot": "ê¯\83ê¯\81ꯤê¯\92ꯤ ê¯\81ꯦê¯\9dê¯\92ꯠê¯\84ê¯\81ꯤ ê¯\94ꯣê¯\95ꯣꯠ ꯅꯥ ꯄꯥꯡꯊꯣꯛꯄꯅꯤ",
        "recentchanges-label-unpatrolled": "ꯃꯁꯤꯒꯤ ꯁꯦꯝꯒꯠꯄꯁꯤ ꯍꯧꯖꯤꯛꯐꯥꯎ ꯌꯦꯡꯁꯤꯟꯗ꯭ꯔꯤ",
        "recentchanges-label-plusminus": "ꯕꯥꯏꯠꯀꯤ ꯑꯍꯣꯡꯕꯒꯤ ꯃꯇꯪ ꯏꯟꯅꯥ ꯂꯥꯃꯥꯏꯁꯤꯒꯤ ꯑꯆꯧꯕꯥ ꯂꯦꯞꯄꯤ",
-       "recentchanges-legend-heading": "<ꯑꯀꯟꯕꯥ>ꯊꯥꯏꯅꯗꯒꯤ</ꯑꯀꯟꯕꯥ>",
-       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (also see [[Special:NewPages|list of new pages]])",
-       "rcnotefrom": "Below {{PLURAL:$5|is the change|are the changes}} since <strong>$3, $4</strong> (up to <strong>$1</strong> shown).",
+       "recentchanges-legend-heading": "<strong>ꯊꯥꯏꯅꯗꯒꯤ</strong>",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (also see [[Special:NewPages|ꯑꯅꯧꯕ ꯂꯃꯥꯏꯁꯤꯡ ꯄꯔꯤꯡ]])",
+       "rcnotefrom": "ꯃꯈꯥ {{PLURAL:$5|is the change|are the changes}} since <strong>$3, $4</strong> (up to <strong>$1</strong> shown).",
        "rclistfrom": "$2$3 ꯁꯤꯗꯒꯤ ꯍꯧꯔꯒꯥ ꯑꯅꯧꯕꯥ ꯑꯍꯣꯡꯕꯗꯨ ꯎꯨꯇꯂꯨ",
-       "rcshowhideminor": "$1 ê¯\84ꯤê¯\9bê¯\85ꯥ ê¯\81ꯦê¯\9dê¯\92ꯠê¯\84ꯥ",
+       "rcshowhideminor": "$1 ê¯\84ꯤê¯\9bê¯\85ꯥ ê¯\81ꯦê¯\9dê¯\92ꯠê¯\84ê¯\81ꯤꯡ",
        "rcshowhideminor-show": "ꯎꯨꯠꯄꯥ",
        "rcshowhideminor-hide": "ꯂꯣꯠꯄꯥ",
-       "rcshowhidebots": "$1 bots",
+       "rcshowhidebots": "$1 ꯕꯣꯠꯁꯤꯡ",
        "rcshowhidebots-show": "ꯎꯨꯠꯄꯥ",
        "rcshowhidebots-hide": "ꯂꯣꯠꯄꯥ",
        "rcshowhideliu": "ꯃꯃꯤꯡ ꯆꯟꯂꯕꯥ ꯄꯥꯏꯔꯤꯕꯥ $1",
        "rcshowhideliu-show": "ꯎꯨꯠꯄꯥ",
-       "rcshowhideliu-hide": "ê¯\82ꯣê¯\87ꯄꯥ",
+       "rcshowhideliu-hide": "ê¯\82ꯣꯠꯄꯥ",
        "rcshowhideanons": "$1 ꯃꯁꯛ ꯃꯥꯅꯥꯗꯕꯥ ꯄꯥꯏꯔꯤꯕꯥ ꯃꯤ",
        "rcshowhideanons-show": "ꯎꯨꯠꯄꯥ",
        "rcshowhideanons-hide": "ꯂꯣꯠꯄꯥ",
        "recentchangeslinked-toolbox": "ꯃꯔꯤꯂꯩꯅꯕꯥ ꯑꯍꯣꯡꯕꯁꯤꯡ",
        "recentchangeslinked-title": "$1 ꯂꯩꯅꯕꯥ ꯑꯍꯣꯡꯕꯁꯤꯡ",
        "recentchangeslinked-summary": "Enter a page name to see changes on pages linked to or from that page. (To see members of a category, enter {{ns:category}}:Name of category). Changes to pages on [[Special:Watchlist|your Watchlist]] are in <strong>bold</strong>.",
-       "recentchangeslinked-page": "ê¯\82ꯥê¯\83ꯥê¯\8f ê¯\83ꯥê¯\83ꯤꯡ",
+       "recentchangeslinked-page": "ê¯\82ê¯\83ꯥê¯\8f ê¯\83ê¯\83ꯤꯡ:",
        "recentchangeslinked-to": "ꯂꯥꯃꯥꯏꯁꯤꯒꯥ ꯁꯝꯅꯐꯝꯒꯤ ꯑꯍꯣꯡꯕꯗꯨ ꯎꯠꯂꯨ ꯄꯤꯔꯝꯂꯤꯕꯥ ꯂꯥꯃꯥꯏꯗꯨ ꯃꯍꯨꯠꯇꯥ",
        "upload": "ꯐꯥꯏꯜ ꯊꯥꯒꯠꯂꯨ",
        "uploadlogpage": "ꯂꯣꯒ ꯊꯥꯒꯠꯄ",
        "filehist-thumb": "ꯈꯨꯠꯄꯤꯈꯨꯖꯤꯟ",
        "filehist-thumbtext": "Thumbnail for version as of $1",
        "filehist-nothumb": "ꯊꯝꯅꯦꯜ ꯅꯠꯇꯦ",
-       "filehist-user": "ê¯\84ꯥê¯\8fê¯\94ꯤê¯\95ꯥ",
+       "filehist-user": "ê¯\81ꯤê¯\96ꯤê¯\9fê¯\85ê¯\94ꯤê¯\95",
        "filehist-dimensions": "ꯄꯥꯛ ꯆꯥꯎꯕꯥ",
        "filehist-comment": "ꯑꯄꯥꯝꯕꯥ ꯐꯣꯡꯗꯣꯛ ꯎ",
        "imagelinks": "ꯐꯥꯏꯜꯒꯤ ꯁꯤꯖꯤꯟꯅꯐꯝ",
-       "linkstoimage": "ê¯\83ê¯\87ꯨꯡ ê¯\8fê¯\9fê¯\95 {{PLURAL:$1|ê¯\82ꯥê¯\83ꯥê¯\8fê¯\81ꯤê¯\96ꯤê¯\9fê¯\85ê¯\95|$1ê¯\82ꯥꯃꯥꯏ ꯁꯤꯖꯤꯟꯅꯕ}} ꯃꯁꯤꯒꯤ ꯐꯥꯏꯜ:",
+       "linkstoimage": "ê¯\83ê¯\87ꯨꯡ ê¯\8fê¯\9fê¯\95 {{PLURAL:$1|ê¯\82ê¯\83ꯥê¯\8fê¯\81ꯤê¯\96ꯤê¯\9fê¯\85ê¯\95|$1ê¯\82ꯃꯥꯏ ꯁꯤꯖꯤꯟꯅꯕ}} ꯃꯁꯤꯒꯤ ꯐꯥꯏꯜ:",
        "linkstoimage-more": "$1 ꯗꯒꯤ ꯍꯦꯟꯅ {{PLURAL:$1|ꯂꯃꯥꯏ ꯁꯤꯖꯤꯟꯅꯐꯝ|page use}} ꯃꯁꯤ ꯐꯥꯏꯜ ꯫\nThe following list shows the {{PLURAL:$1|ꯑꯍꯥꯟꯕ ꯂꯃꯥꯏ|first $1 pages}} that use this file only.\nA [[Special:WhatLinksHere/$2|ꯄꯔꯤꯡ ꯄꯨꯂꯞ]] ꯁꯤ ꯐꯪꯉꯦ ꯫",
        "nolinkstoimage": "ꯃꯁꯤꯒꯤ ꯐꯥꯏꯜ ꯁꯤ ꯁꯤꯖꯤꯟꯅꯕ ꯂꯃꯥꯏꯁꯤꯡ ꯂꯩꯇꯦ ꯫",
        "linkstoimage-redirect": "$1 (ꯐꯥꯏꯜ ꯱ꯗꯒꯤ ꯱ ꯗ ꯂꯥꯛꯍꯟꯕ) $2",
-       "sharedupload-desc-here": "This file is from $1 and may be used by other projects.\nThe description on its [$2 file description page] there is shown below.",
-       "filepage-nofile": "ꯃꯁꯤꯒꯤ ꯐꯥꯏꯜ ꯃꯃꯤꯡ ꯁꯤ ꯒꯥ ꯃꯥꯟꯅꯕ ꯂꯩꯇꯦ",
+       "sharedupload-desc-here": "ꯃꯁꯤꯒꯤ ꯐꯥꯏꯜ ꯑꯁꯤ  $1 ꯗꯒꯤꯅꯤ ꯑꯃꯁꯨꯡ ꯑꯇꯩ ꯊꯧꯔꯥꯁꯁꯤꯡꯅꯥ ꯁꯤꯖꯤꯟꯅꯩ ꯫ ꯃꯁꯤꯗ ꯁꯟꯗꯣꯛꯅꯥ ꯇꯥꯛꯄ ꯑꯁꯤ  [$2 ꯐꯥꯏꯜ ꯁꯟꯗꯣꯛꯅꯥ ꯍꯥꯏꯕ ꯂꯃꯥꯏ] ꯃꯈꯥꯒꯤ ꯁꯤꯗ ꯎꯨꯠꯂꯦ ꯫",
+       "filepage-nofile": "ꯃꯁꯤꯒꯤ ꯐꯥꯏꯜ ꯃꯃꯤꯡ ꯁꯤ ꯒꯥ ꯃꯥꯟꯅꯕ ꯂꯩꯇꯦ ꯫",
        "upload-disallowed-here": "ꯃꯁꯤꯒꯤ ꯐꯥꯏꯜꯁꯤ ꯅꯪꯅꯥ ꯑꯃꯨꯛ ꯍꯟꯅꯥ ꯏꯕꯥ ꯌꯥꯔꯣꯏ",
        "randompage": "ꯆꯥꯡ ꯅꯥꯏꯗꯕꯥ ꯂꯥꯃꯥꯏ",
        "statistics": "ꯍꯦꯟꯒꯠꯂꯛꯄ ꯍꯥꯏꯊꯔꯧꯄ ꯌꯦꯡꯅꯕ",
        "nmembers": "$1 {{PLURAL:$1|member|members}}",
        "prefixindex": "ꯋꯥꯇꯞ ꯀꯥ ꯂꯣꯏꯅꯕ ꯂꯥꯃꯥꯏꯁꯤꯡ ꯄꯨꯝꯅꯃꯛ",
        "listusers": "ꯁꯤꯖꯤꯟꯅꯔꯤꯕ ꯁꯤꯡꯒꯤ ꯄꯥꯔꯦꯡ",
-       "newpages": "ê¯\91ê¯\85ꯧê¯\95ꯥ ê¯\82ꯥê¯\83ꯥê¯\8fê¯\81ꯤꯡ",
+       "newpages": "ꯑꯅꯧꯕꯥ ꯂꯃꯥꯏꯁꯤꯡ",
        "move": "ꯂꯦꯡꯍꯟꯕꯥ",
        "pager-newer-n": "{{PLURAL:$1|newer 1|newer $1}}",
        "pager-older-n": "{{PLURAL:$1|older 1|older $1}}",
        "specialloguserlabel": "ꯄꯥꯡꯊꯣꯛꯂꯤꯕ ꯃꯤ",
        "log": "ꯆꯪꯕꯥ",
        "allpages": "ꯂꯃꯥꯏꯁꯤꯡ ꯂꯣꯏꯅꯥ",
-       "allarticles": "ê¯\82ꯥê¯\83ꯥê¯\8f ꯂꯣꯏꯅꯥ",
+       "allarticles": "ê¯\82ê¯\83ꯥê¯\8fê¯\81ꯤꯡ ꯂꯣꯏꯅꯥ",
        "allpagessubmit": "ꯆꯠꯂꯨ",
        "allpages-hide-redirects": "ꯃꯥꯏꯀꯩ ꯄꯤꯔꯧꯄꯗꯨ ꯂꯣꯌꯂꯨ",
        "categories": "ꯃꯊꯪ ꯃꯅꯥꯎ ꯈꯥꯏꯗꯣꯛꯄꯥ",
        "protect-default": "ꯁꯤꯖꯤꯟꯅꯔꯤꯕꯁꯤꯡ ꯄꯨꯂꯞ ꯌꯥꯍꯟꯕ",
        "restriction-edit": "ꯁꯦꯝꯒꯠꯄꯥ",
        "restriction-move": "ꯂꯦꯡꯍꯟꯕꯥ",
-       "namespace": "ꯃꯥꯃꯤꯡꯒꯤ ꯃꯐꯝ",
+       "namespace": "ꯃꯥꯃꯤꯡꯒꯤ ꯃꯐꯝ:",
        "invert": "ꯈꯟꯂꯤꯕꯗꯨ ꯃꯀꯣꯛꯇꯒꯤ ꯂꯥꯛꯍꯟꯕ",
        "tooltip-invert": "Akhannaba maming gi manungda page tungi ahongba lotnaba oopu du yeng ngoo",
        "namespace_association": "Maming eefam ga marileinaba",
        "tooltip-namespace_association": "Oopu du yengoo maming eefam gi hiramga mari leinaba khangatlaba maming eefam amadi wa ngangfam manung channaba",
-       "blanknamespace": "ꯃꯔꯨꯑꯣꯏꯕ",
-       "contributions": "{{GENDER:$1|User}} ꯈꯣꯝꯒꯠꯂꯛꯄꯁꯤꯡ",
+       "blanknamespace": "(ꯃꯔꯨꯑꯣꯏꯕ)",
+       "contributions": "{{GENDER:$1|ꯁꯤꯖꯤꯟꯅꯔꯤꯕ}} ꯈꯣꯝꯒꯠꯂꯛꯄꯁꯤꯡ",
        "contributions-title": "$1 ꯁꯤꯖꯤꯟꯅꯔꯤꯕꯁꯤꯅ ꯈꯣꯝꯖꯤꯜꯂꯛꯄꯁꯤꯡ",
        "mycontris": "ꯈꯣꯝꯒꯠꯂꯛꯂꯤꯕꯁꯤꯡ",
        "anoncontribs": "ꯈꯣꯝꯒꯠꯂꯛꯂꯤꯕꯁꯤꯡ",
        "contribsub2": "{{GENDER:$3|$1}}$2 ꯒꯤ",
        "nocontribs": "ꯃꯁꯤꯗ ꯆꯪꯂꯤꯕꯁꯤꯒ ꯆꯥꯟꯅꯕ ꯑꯍꯣꯡꯕ ꯂꯩꯇꯦ ꯫",
-       "uctop": "ꯍꯧꯖꯤꯛ",
+       "uctop": "(ꯍꯧꯖꯤꯛ)",
        "month": "ꯃꯗꯨꯒꯤ ꯊꯥꯗꯒꯤ (ꯑꯃꯗꯤ ꯅꯧꯔꯤꯕꯥ)",
        "year": "ꯃꯗꯨꯒꯤ ꯆꯥꯍꯤꯗꯒꯤ (ꯑꯃꯗꯤ ꯅꯧꯔꯤꯕꯥ)",
        "sp-contributions-newbies": "ꯑꯅꯧꯕ ꯑꯦꯀꯥꯎꯟꯅꯥ ꯈꯣꯝꯒꯠꯂꯛꯄꯁꯤꯡꯗꯨ ꯈꯛꯇꯃꯛ ꯎꯨꯠꯂꯨ",
        "sp-contributions-blocklog": "ꯆꯪꯁꯤꯟꯕꯥ ꯊꯤꯡꯕꯥ",
-       "sp-contributions-uploads": "ꯊꯥꯒꯠꯄ",
+       "sp-contributions-uploads": "ꯊꯥꯒꯠꯄꯁꯤꯡ",
        "sp-contributions-logs": "ꯆꯪꯕꯁꯤꯟꯕ ꯃꯌꯥꯝ",
        "sp-contributions-talk": "ꯉꯥꯡꯐꯝ",
        "sp-contributions-search": "ꯈꯣꯝꯖꯤꯟꯂꯛꯂꯤꯕꯁꯤꯡꯗꯨ ꯊꯤꯌꯨ",
        "sp-contributions-newonly": "ꯂꯃꯥꯏ ꯁꯥꯒꯠꯄꯒꯤ ꯁꯦꯝꯒꯠꯄꯁꯤꯡ ꯗꯨ  ꯈꯛꯇꯃꯛ ꯎꯨꯠꯂꯨ",
        "sp-contributions-submit": "ꯊꯤꯕꯥ",
        "whatlinkshere": "ꯃꯁꯤꯗꯥ ꯀꯔꯤ ꯁꯝꯃꯤ",
-       "whatlinkshere-title": "$1 ꯒꯥ ꯃꯔꯤ ꯂꯩꯅꯕꯥ ꯁꯝꯅꯐꯝ",
-       "whatlinkshere-page": "ꯂꯃꯥꯏ",
-       "linkshere": "$2<strong> ꯒꯥ ꯁꯝꯅꯐꯝ ꯑꯣꯏꯕꯥ ꯂꯥꯃꯥꯏꯁꯤꯡ",
+       "whatlinkshere-title": "\"$1\" ꯒꯥ ꯃꯔꯤ ꯂꯩꯅꯕꯥ ꯁꯝꯅꯐꯝ",
+       "whatlinkshere-page": "ꯂꯃꯥꯏ:",
+       "linkshere": "<strong>$2</strong> ꯒꯥ ꯁꯝꯅꯐꯝ ꯑꯣꯏꯕꯥ ꯂꯃꯥꯏꯁꯤꯡ",
        "nolinkshere": " <strong>$2</strong> ꯃꯁꯤꯒ ꯁꯝꯅꯕ ꯂꯥꯃꯥꯏꯁꯤꯡ ꯂꯩꯇꯦ",
-       "isredirect": "ê¯\91ê¯\83ꯨê¯\9b ê¯\8dê¯\9fê¯\82ê¯\9bê¯\84ꯥ ê¯\82ꯥꯃꯥꯏ",
-       "istemplate": " transclusions",
+       "isredirect": "ê¯\94ꯤê¯\97ꯥê¯\8fê¯\94ꯦê¯\9b ê¯\82ꯃꯥꯏ",
+       "istemplate": "ꯇ꯭ꯔꯥꯟꯁꯀꯂꯨꯁꯟ",
        "isimage": "ꯐꯥꯏꯜꯒꯤ ꯁꯝꯅꯐꯝ",
-       "whatlinkshere-prev": "{{PLURAL:$1|previous|previous $1}}",
-       "whatlinkshere-next": "{{PLURAL:$1|next|next $1}}",
-       "whatlinkshere-links": " ꯁꯝꯅꯐꯝ",
-       "whatlinkshere-hideredirs": "$1 redirects",
+       "whatlinkshere-prev": "{{PLURAL:$1|ꯃꯃꯥꯡꯒꯤ|ꯃꯃꯥꯡꯒꯤ $1}}",
+       "whatlinkshere-next": "{{PLURAL:$1|ꯃꯊꯪ|ꯃꯊꯪ $1}}",
+       "whatlinkshere-links": " ꯁꯝꯅꯐꯝ",
+       "whatlinkshere-hideredirs": "$1 ꯔꯤꯗꯥꯏꯔꯦꯛꯁꯤꯡ",
        "whatlinkshere-hidetrans": "$1 ꯇ꯭ꯔꯥꯟꯁꯀꯂꯨꯁꯟ",
        "whatlinkshere-hidelinks": "$1 ꯁꯝꯅꯐꯝ",
        "whatlinkshere-hideimages": "$1 ꯒꯤ ꯐꯥꯏꯜ ꯁꯝꯅꯐꯝ",
        "block-log-flags-nocreate": "ꯑꯩꯀꯥꯎꯟ ꯁꯦꯝꯕ ꯕꯥꯍꯟꯗꯕ",
        "movelogpage": "ꯂꯣꯒ ꯁꯤ ꯂꯦꯡꯍꯟꯂꯨ",
        "export": "ꯂꯥꯃꯥꯏꯁꯤꯡ ꯄꯨꯊꯣꯛꯈꯣ",
-       "thumbnail-more": "ê¯\86ꯥê¯\91ꯣê¯\8dê¯\9fê¯\95ꯥ",
+       "thumbnail-more": "ê¯\86ꯥê¯\8eê¯\8dê¯\9fê¯\95",
        "importlogpage": "ꯂꯣꯒ ꯄꯨꯁꯤꯟꯂꯛꯄ",
        "tooltip-pt-userpage": "{{GENDER:|ꯅꯪꯒꯤ ꯁꯤꯖꯤꯟꯅꯔꯤꯕ}} ꯂꯃꯥꯏ",
        "tooltip-pt-mytalk": "{{GENDER:|ꯅꯪꯒꯤ}} ꯉꯥꯡꯐꯝ ꯂꯃꯥꯏ",
        "tooltip-pt-logout": "ꯊꯣꯛꯂꯛꯄꯥ",
        "tooltip-pt-createaccount": "ꯅꯪꯒꯤ ꯑꯣꯏꯕꯥ ꯱ ꯁꯦꯝꯕꯥ ꯑꯃꯥꯁꯨꯪ ꯃꯅꯨꯡ ꯆꯪꯁꯤꯟꯕꯥꯁꯤ ꯄꯨꯛꯅꯤꯡ ꯊꯧꯒꯠꯂꯤ, ꯇꯧꯕꯇꯕꯨ ꯃꯁꯤ ꯁꯪꯁꯣꯏ ꯁꯣꯏꯗꯅꯥ ꯆꯡꯕꯗꯤ ꯅꯠꯇꯦ",
        "tooltip-ca-talk": "ꯃꯅꯨꯡꯆꯟꯂꯤꯕꯥ ꯂꯥꯃꯥꯏꯁꯤꯒꯤ ꯃꯇꯥꯁꯗꯥ ꯈꯟꯅꯥ ꯅꯩꯅꯕꯥ",
-       "tooltip-ca-edit": "ê¯\83ê¯\81ꯤê¯\92ꯤ ê¯\82ꯥê¯\83ꯥê¯\8fê¯\81ꯤ ê¯\81ꯦê¯\9dê¯\92ꯠê¯\82ꯨ",
-       "tooltip-ca-addsection": "Anouba khaidokpadu houro",
+       "tooltip-ca-edit": "ꯃꯁꯤꯒꯤ ꯂꯃꯥꯏꯁꯤ ꯁꯦꯝꯒꯠꯂꯨ",
+       "tooltip-ca-addsection": "ꯑꯅꯧꯕ ꯈꯥꯏꯗꯣꯛꯄꯗꯨ ꯍꯧꯔꯣ",
        "tooltip-ca-viewsource": "ꯃꯁꯤꯒꯤ ꯂꯃꯥꯏꯁꯤ ꯉꯥꯛꯊꯣꯛꯂꯦ \nꯅꯪꯅꯥ ꯂꯃꯥꯏꯁꯤꯒꯤ ꯍꯧꯔꯛꯐꯝ ꯎꯒꯅꯤ",
-       "tooltip-ca-history": "ê¯\8dꯧê¯\88ê¯\94ê¯\95ꯥ ê¯\82ꯥê¯\83ꯥê¯\8f ê¯\91ê¯\83ꯨê¯\9b ê¯\8dê¯\9fê¯\85ꯥ ê¯\8cꯦꯡê¯\95ꯥ",
+       "tooltip-ca-history": "ꯍꯧꯈꯔꯕꯥ ꯂꯃꯥꯏ ꯑꯃꯨꯛ ꯍꯟꯅꯥ ꯌꯦꯡꯕꯥ",
        "tooltip-ca-protect": "ꯃꯁꯤꯒꯤ ꯂꯥꯃꯥꯏꯁꯤ ꯉꯥꯛ ꯎ",
-       "tooltip-ca-delete": "ê¯\83ê¯\81ꯤê¯\92ꯤ ê¯\82ꯥê¯\83ꯥê¯\8fê¯\81ꯤ ê¯\80ê¯\9bê¯\8aꯠê¯\82ꯨ",
-       "tooltip-ca-move": "ê¯\83ê¯\81ꯤê¯\92ꯤ ê¯\82ꯥê¯\83ꯥê¯\8fê¯\81ꯤ ê¯\82ꯦꯡê¯\8dê¯\9fê¯\82ꯨ",
+       "tooltip-ca-delete": "ꯃꯁꯤꯒꯤ ꯂꯃꯥꯏꯁꯤ ꯀꯛꯊꯠꯂꯨ",
+       "tooltip-ca-move": "ꯃꯁꯤꯒꯤ ꯂꯃꯥꯏꯁꯤ ꯂꯦꯡꯍꯟꯂꯨ",
        "tooltip-ca-watch": "ꯅꯪꯒꯤ ꯌꯦꯡꯅꯕꯥ ꯄꯥꯔꯦꯡꯗꯨꯗꯥ ꯍꯥꯞꯆꯏꯟꯂꯨ ꯃꯁꯤꯒꯤ ꯂꯥꯃꯥꯏꯁꯤ",
        "tooltip-ca-unwatch": "ꯅꯪꯒꯤ ꯌꯦꯡꯅꯕ ꯄꯥꯔꯦꯡ ꯗꯒꯤ ꯃꯁꯤꯒꯤ ꯂꯥꯃꯥꯏꯁꯤ ꯂꯧꯊꯣꯛ ꯎ",
        "tooltip-search": "ꯊꯤꯔꯣ",
-       "tooltip-search-go": "ê¯\82ꯩê¯\94ê¯\92ꯥ ê¯\86ꯠê¯\82ꯨ ê¯\83ê¯\97ꯨê¯\92ꯤ ê¯\86ê¯\9eê¯\86ê¯\95 ê¯\82ꯥꯃꯥꯏ ꯗꯨꯗ",
+       "tooltip-search-go": "ê¯\82ꯩê¯\94ꯥê¯\92ê¯\97ꯤ ê¯\86ꯠê¯\82ꯨ ê¯\83ê¯\97ꯨê¯\92ꯤ ê¯\86ê¯\9eê¯\86ê¯\95 ê¯\82ꯃꯥꯏ ꯗꯨꯗ",
        "tooltip-search-fulltext": "ꯏꯔꯤꯕꯥ ꯃꯇꯦꯛꯁꯤꯒꯤ ꯂꯃꯥꯏ ꯁꯤ ꯊꯤꯔꯣ",
        "tooltip-p-logo": "ꯃꯔꯨ ꯑꯣꯏꯕꯥ ꯂꯥꯃꯥꯏꯗꯨꯗꯥ ꯌꯧꯁꯤꯟꯂꯨ",
-       "tooltip-n-mainpage": "ꯃꯔꯨ ꯑꯣꯏꯕꯥ ꯂꯥꯃꯥꯏꯗꯨꯗꯥ ꯌꯧꯁꯤꯟꯂꯨ",
+       "tooltip-n-mainpage": "ꯃꯔꯨꯑꯣꯏꯕ ꯂꯃꯥꯏꯗꯨꯗꯥ ꯌꯧꯁꯤꯟꯂꯨ",
        "tooltip-n-mainpage-description": "ꯃꯔꯨ ꯑꯣꯏꯕꯥ ꯂꯥꯃꯥꯏꯗꯨꯗꯥ ꯌꯧꯁꯤꯟꯂꯨ",
        "tooltip-n-portal": "ꯊꯧꯑꯣꯡ ꯂꯥꯛꯄꯗꯨꯒꯤ ꯃꯔꯝꯗ꯬",
        "tooltip-n-currentevents": "ꯆꯠꯊꯔꯤꯕꯥ ꯊꯧꯔꯝꯁꯤꯒꯤ ꯃꯅꯨꯒꯤ ꯑꯣꯏꯕꯥ ꯋꯥꯔꯣꯟꯗꯨ ꯄꯨꯊꯣꯛ ꯎ",
        "tooltip-n-help": "ꯄꯨꯊꯣꯔꯛꯅꯕꯥ ꯃꯐꯝꯅꯤ",
        "tooltip-t-whatlinkshere": "ꯃꯁꯤꯗ ꯁꯝꯂꯤꯕ ꯑꯄꯨꯟꯕ ꯋꯤꯀꯤ ꯂꯥꯃꯥꯏꯁꯤꯡꯒꯤ ꯄꯥꯔꯦꯡ ꯱",
        "tooltip-t-recentchangeslinked": "ꯃꯁꯤꯒꯤ ꯂꯃꯥꯏꯁꯤꯒꯥ ꯃꯔꯤ ꯂꯩꯅꯕꯥ ꯍꯧꯖꯤꯛꯀꯤ ꯑꯍꯣꯡꯕꯥ ꯂꯥꯃꯥꯏꯁꯤꯡ",
-       "tooltip-feed-atom": "ê¯\82ꯥê¯\83ꯥê¯\8fê¯\81ꯤê¯\92ꯤ ê¯\83ê¯\81ꯥ ê¯\83ê¯\87ꯣê¯\9dê¯\87ꯥ ê¯\8cꯣê¯\9bê¯\88ꯠê¯\82ê¯\9bê¯\84ꯥ",
-       "tooltip-t-contributions": " {{GENDER:$1|this user}} ꯅꯥ ꯈꯣꯝꯖꯤꯟꯂꯛꯂꯤꯕꯥ ꯄꯥꯔꯦꯡ ꯱",
+       "tooltip-feed-atom": "ꯂꯃꯥꯏꯁꯤꯒꯤ ꯃꯁꯥ ꯃꯇꯣꯝꯇꯥ ꯌꯣꯛꯈꯠꯂꯛꯄꯥ",
+       "tooltip-t-contributions": " {{GENDER:$1|ꯃꯁꯤꯒꯤ ꯁꯤꯖꯤꯟꯅꯔꯤꯕ}} ꯑꯁꯤ ꯅꯥ ꯈꯣꯝꯖꯤꯟꯂꯛꯂꯤꯕꯥ ꯄꯥꯔꯦꯡ ꯱",
        "tooltip-t-upload": "ꯐꯥꯏꯜꯁꯤꯡ ꯊꯥꯒꯠꯂꯨ",
        "tooltip-t-specialpages": "ꯑꯈꯟꯅꯕ ꯂꯥꯃꯥꯏꯁꯤꯡꯒꯤ ꯄꯥꯔꯦꯡ ꯱",
        "tooltip-t-print": "Namba Yaba ma ong  gi Lamai",
        "tooltip-t-permalink": "Amuk han na yengba lamaisigi Lengdaba Samnafam",
        "tooltip-ca-nstab-main": "ꯂꯃꯥꯏꯁꯤꯒꯤ ꯑꯌꯥꯎꯕꯁꯤꯡꯗꯨ ꯎꯨꯇꯂꯨ",
        "tooltip-ca-nstab-user": "ꯁꯤꯖꯤꯟꯅꯔꯤꯕꯥ ꯂꯥꯃꯥꯏꯁꯤ ꯌꯦꯡꯕꯥ",
-       "tooltip-ca-nstab-special": "ê¯\83ê¯\81ꯤ ê¯\91ê¯\88ê¯\9fê¯\85ê¯\95ꯥ ê¯\82ꯥê¯\83ꯥê¯\8fê¯\85ꯤ, ê¯\81ꯦê¯\9dê¯\92ꯠê¯\84ꯥ ê¯\8cꯥê¯\94ꯣê¯\8f",
+       "tooltip-ca-nstab-special": "ꯃꯁꯤ ꯑꯈꯟꯅꯕꯥ ꯂꯃꯥꯏꯅꯤ, ꯁꯦꯝꯒꯠꯄꯥ ꯌꯥꯔꯣꯏ",
        "tooltip-ca-nstab-project": "ꯂꯃꯥꯏꯁꯤꯒꯤ ꯇꯧꯒꯗꯥ ꯊꯧꯔꯥꯡꯗꯨ ꯎꯨꯇꯂꯨ",
-       "tooltip-ca-nstab-image": "ê¯\90ꯥê¯\8fê¯\9c ê¯\82ꯥê¯\83ꯥê¯\8fê¯\97ꯨꯨꯨꯨꯨ ê¯\8eꯨꯠê¯\82ꯨ",
+       "tooltip-ca-nstab-image": "ꯐꯥꯏꯜ ꯂꯃꯥꯏꯗꯨꯨꯨꯨꯨ ꯎꯨꯠꯂꯨ",
        "tooltip-ca-nstab-mediawiki": "ꯊꯧꯁꯤꯜꯒꯤ ꯑꯣꯏꯕ ꯄꯥꯎꯖꯦꯜꯗꯨ ꯎꯨꯠꯂꯨ",
        "tooltip-ca-nstab-template": "ꯇꯦꯝꯄꯂꯦꯠ ꯇꯨ ꯎꯨꯠꯂꯨ",
-       "tooltip-ca-nstab-category": "Macahkhaiba lamai sure oootlooo",
+       "tooltip-ca-nstab-category": "ꯃꯆꯥꯈꯥꯏꯕ ꯂꯃꯥꯏꯗꯨ ꯎꯨꯠꯂꯨ",
        "tooltip-save": "ꯅꯪꯒꯤ ꯑꯍꯣꯡꯕꯗꯨ ꯇꯨꯡꯁꯤꯟꯂꯨ",
-       "tooltip-preview": "ꯅꯪꯒꯤ ꯑꯍꯣꯡꯕꯗꯨ ꯑꯃꯨꯛ ꯍꯟꯅꯥ ꯎꯠꯂꯨ. ꯆꯥꯟꯕꯤꯗꯨꯅꯥ ꯃꯁꯤ ꯍꯥꯟꯅꯥ ꯁꯤꯖꯤꯅꯧ ꯇꯪꯁꯤꯟꯗ꯭ꯔꯤꯉꯧꯗꯥ ꯫",
+       "tooltip-preview": "ê¯\85ꯪê¯\92ꯤ ê¯\91ê¯\8dꯣꯡê¯\95ê¯\97ꯨ ê¯\91ê¯\83ꯨê¯\9b ê¯\8dê¯\9fê¯\85ꯥ ê¯\8eꯠê¯\82ꯨ. ê¯\86ꯥê¯\9fê¯\95ꯤê¯\97ꯨê¯\85ꯥ ê¯\83ê¯\81ꯤ ê¯\8dꯥê¯\9fê¯\85ꯥ ê¯\81ꯤê¯\96ꯤê¯\85ꯧ ê¯\87ꯪꯨê¯\81ꯤê¯\9fê¯\97꯭ê¯\94ꯤê¯\89ꯧê¯\97ꯥ ê¯«",
        "tooltip-diff": "ꯅꯪꯅꯥ ꯏꯔꯤꯕꯥ ꯄꯥꯔꯦꯡꯗꯨꯗꯥ ꯑꯍꯣꯡꯕꯥ ꯎꯠꯂꯨ",
        "tooltip-compareselectedversions": "See the differences between the two selected revisions of this page",
        "tooltip-watch": "ꯍꯥꯞꯆꯤꯟꯂꯨ ꯃꯁꯤꯒꯤ ꯂꯥꯃꯥꯏꯁꯤ ꯅꯪꯅ ꯌꯦꯡꯂꯤꯕ ꯄꯔꯦꯡ ꯗ",
        "tooltip-rollback": "ꯑꯔꯣꯏꯕꯥ ꯈꯣꯝꯒꯠꯛꯂꯤꯕꯥꯁꯤꯡꯒꯤ ꯁꯦꯝꯒꯠꯄꯁꯤꯡ ꯗꯨꯒꯤ ꯂꯥꯃꯥꯏ ꯑꯃꯨꯛ ꯅꯝꯕꯗꯥ ꯂꯥꯛꯍꯟꯂꯨ ꯍꯥꯟꯅꯒꯤ ꯃꯐꯝꯗꯨꯗꯥ",
-       "tooltip-undo": "\"Undo\" reverts this edit and opens the edit form in preview mode. It allows adding a reason in the summary.",
+       "tooltip-undo": "\"ꯇꯧꯗꯕ\" reverts this edit and opens the edit form in preview mode. It allows adding a reason in the summary.",
        "tooltip-summary": "ꯑꯇꯦꯟꯕꯥ ꯀꯨꯞꯅꯥ ꯁꯟꯗꯣꯛꯅꯩ ꯇꯥꯛꯄꯥ ꯏꯌꯨ",
-       "simpleantispam-label": "Anti-spam check.\nDo <strong>not</strong> fill this in!",
+       "simpleantispam-label": "ꯑꯦꯟꯇꯤ ꯁ꯭ꯄꯥꯝ ꯌꯦꯡꯁꯤꯅꯕ.\nꯇꯧ <strong>not</strong> ꯃꯁꯤ ꯃꯦꯟꯁꯤꯟꯂꯨ!",
        "pageinfo-title": "$1 ꯒꯤ ꯑꯀꯨꯞꯄ ꯋꯥꯔꯣꯜ",
        "pageinfo-header-basic": "ꯆꯪꯗꯌꯥꯗ꯭ꯔꯕ ꯑꯀꯨꯞꯄ ꯋꯥꯔꯣꯜ",
        "pageinfo-header-edits": "ꯄꯨꯋꯥꯔꯤ ꯁꯦꯝꯒꯠꯄ",
-       "pageinfo-header-restrictions": "ê¯\89ꯥê¯\9bê¯\8aꯣê¯\9bê¯\82ê¯\95ꯥ ê¯\82ꯥê¯\83ꯥê¯\8f",
-       "pageinfo-header-properties": "ê¯\82ꯥê¯\83ꯥê¯\8fê¯\81ꯤ ê¯\92ꯤ ê¯\91ꯣê¯\8fê¯\92ê¯\97ê¯\95ê¯\81ꯤꯡ",
-       "pageinfo-display-title": "ê¯\82ꯥê¯\83ꯥꯤê¯\92ꯤ ê¯\83ê¯\83ꯤꯡ ê¯\8cꯦꯡê¯\8dê¯\9fê¯\95",
+       "pageinfo-header-restrictions": "ꯉꯥꯛꯊꯣꯛꯂꯕꯥ ꯂꯃꯥꯏ",
+       "pageinfo-header-properties": "ꯂꯃꯥꯏꯁꯤ ꯒꯤ ꯑꯣꯏꯒꯗꯕꯁꯤꯡ",
+       "pageinfo-display-title": "ê¯\82ê¯\83ꯥê¯\8fê¯\92ꯤ ê¯\91ê¯\84ꯤê¯\95 ê¯\83ê¯\83ꯤꯡ ê¯\8eꯠê¯\8aꯣê¯\9bê¯\84",
        "pageinfo-default-sort": "ꯑꯇꯦꯟꯕ-꯱ꯍꯦꯛ-ꯇ ꯌꯥꯕ ‌‌‌‌‌",
-       "pageinfo-length": "ê¯\82ꯥê¯\83ꯥê¯\8fê¯\92ꯤ ê¯\91ê¯\81ꯥꯡê¯\95(ê¯\95ꯥê¯\8fê¯\87 ê¯\87)",
-       "pageinfo-article-id": "ê¯\82ꯥê¯\83ꯥê¯\8fê¯\92ꯤ ê¯\81ê¯\9bê¯\87ꯥê¯\9b",
-       "pageinfo-language": "ê¯\82ꯥê¯\83ꯥê¯\8fê¯\81ꯤê¯\97 ê¯\8fê¯\94ꯤê¯\95 ê¯\82ꯣê¯\9f",
+       "pageinfo-length": "ꯂꯃꯥꯏꯒꯤ ꯑꯁꯥꯡꯕ(ꯕꯥꯏꯇ ꯇ)",
+       "pageinfo-article-id": "ꯂꯃꯥꯏꯒꯤ ꯁꯛꯇꯥꯛ",
+       "pageinfo-language": "ꯂꯃꯥꯏꯁꯤꯗ ꯏꯔꯤꯕ ꯂꯣꯟ",
        "pageinfo-content-model": "ꯂꯥꯃꯥꯏꯁꯤꯗ ꯌꯥꯎꯔꯤꯕ ꯃꯑꯣꯡ ꯃꯇꯧ",
+       "pageinfo-robot-policy": "ꯔꯣꯕꯣꯠꯁꯤꯡꯅꯥ ꯍꯥꯞꯆꯤꯟꯕ",
        "pageinfo-robot-index": "ꯌꯥꯍꯟꯕ",
        "pageinfo-robot-noindex": "ꯌꯥꯍꯟꯗꯕꯥ",
-       "pageinfo-watchers": "ê¯\82ꯥê¯\83ꯥê¯\8fê¯\81ꯤê¯\95ê¯\8e ê¯\8cꯦꯡê¯\82ꯤê¯\95 ê¯\83ꯤê¯\91ꯣꯤê¯\81ꯤꯡê¯\92ꯤ ê¯\83ê¯\81ꯤꯡ",
+       "pageinfo-watchers": "ꯂꯃꯥꯏꯁꯤꯕꯎ ꯌꯦꯡꯂꯤꯕ ꯃꯤꯑꯣꯤꯁꯤꯡꯒꯤ ꯃꯁꯤꯡ",
        "pageinfo-few-watchers": " $1 ꯁꯤꯗꯒꯤ ꯋꯥꯠꯅ {{PLURAL:$1|ꯌꯦꯡꯂꯤꯕ|ꯌꯦꯡꯂꯤꯕꯁꯤꯡ}}",
        "pageinfo-redirects-name": "ꯃꯁꯤꯒꯤ ꯂꯥꯃꯥꯏꯁꯤꯗ ꯃꯥꯏꯀꯩ ꯇꯥꯛꯂꯛꯄ ꯃꯁꯤꯡ",
        "pageinfo-subpages-name": "ꯂꯥꯃꯥꯏꯁꯤ ꯒꯤ ꯃꯅꯨꯡ ꯆꯟꯕꯥ ꯀꯨꯞꯊꯕꯥ ꯂꯥꯃꯥꯏꯁꯤꯡ",
        "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|redirect|redirects}}; $3 {{PLURAL:$3|non-redirect|non-redirects}})",
-       "pageinfo-firstuser": "ê¯\82ꯥê¯\83ꯥê¯\8f ê¯\81ꯥê¯\94ꯤê¯\95 ê¯\83ꯤê¯\91ꯣê¯\8fê¯\81ꯤꯡ",
-       "pageinfo-firsttime": "ê¯\82ꯥê¯\83ꯥê¯\8f ê¯\81ꯥê¯\88ꯤê¯\95ê¯\92ꯤ ê¯\86ꯩê¯\86ꯠ",
+       "pageinfo-firstuser": "ꯂꯃꯥꯏ ꯁꯥꯔꯤꯕ ꯃꯤꯑꯣꯏꯁꯤꯡ",
+       "pageinfo-firsttime": "ꯂꯃꯥꯏ ꯁꯥꯈꯤꯕꯒꯤ ꯆꯩꯆꯠ",
        "pageinfo-lastuser": "ꯈꯋꯥꯏꯗꯒꯤ ꯅꯧꯕ ꯁꯦꯝꯒꯠꯂꯛꯂꯤꯕꯁꯤꯡ",
        "pageinfo-lasttime": "ꯅꯧꯔꯤꯕ ꯁꯦꯝꯒꯠꯄꯒꯤ ꯆꯩꯆꯠ",
        "pageinfo-edits": "ꯑꯄꯨꯟꯕ ꯁꯦꯝꯒꯠꯄꯒꯤ ꯃꯁꯤꯡ",
        "pageinfo-authors": "ꯑꯄꯨꯟꯕ ꯑꯈꯟꯅꯕ ꯑꯌꯤꯕꯁꯤꯡꯒꯤ ꯃꯁꯤꯡ",
-       "pageinfo-magic-words": "Magic {{PLURAL:$1|ꯋꯥꯍꯩ|ꯋꯥꯍꯩꯁꯤꯡ}} ($1)",
+       "pageinfo-magic-words": "ꯃꯦꯖꯤꯛ {{PLURAL:$1|ꯋꯥꯍꯩ|ꯋꯥꯍꯩꯁꯤꯡ}} ($1)",
        "pageinfo-hidden-categories": "ꯂꯣꯠꯍꯟꯕ {{PLURAL:$1|category|ꯃꯆꯥꯛꯈꯥꯏꯕ}} ($1)",
+       "pageinfo-templates": "ꯇ꯭ꯔꯥꯟꯁꯀꯂꯨꯗꯦꯗ {{PLURAL:$1|ꯇꯦꯝꯄꯂꯦꯠ|ꯇꯦꯝꯄꯂꯦꯠꯁꯤꯡ}} ($1)",
        "pageinfo-toolboxlink": "ꯂꯥꯃꯥꯏꯒꯤ ꯃꯇꯥꯡꯗꯥ",
        "pageinfo-contentpage": "ꯂꯥꯃꯥꯏꯁꯤꯒꯤ ꯃꯅꯨꯪꯗ ꯌꯥꯎꯕ ꯑꯣꯏꯅꯥ ꯃꯁꯤꯡ ꯊꯤꯔꯦ",
        "pageinfo-contentpage-yes": "ꯍꯣꯏ",
-       "previousdiff": "ꯑꯔꯤꯕꯥ ꯁꯦꯝꯒꯠꯂꯛꯐꯝ",
+       "previousdiff": "← ꯑꯔꯤꯕꯥ ꯁꯦꯝꯒꯠꯂꯛꯐꯝ",
        "nextdiff": "ꯑꯅꯧꯕꯥ ꯁꯦꯝꯗꯠꯄ",
        "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|ꯂꯥꯃꯥꯏ|ꯂꯥꯃꯥꯏꯁꯤꯡ}}",
-       "file-info-size": "$1 × $2 pixels, file size: $3, MIME type: $4",
+       "file-info-size": "$1 × $2 ꯄꯤꯛꯆꯦꯜꯁ, ꯐꯥꯏꯜ ꯆꯥꯎꯕꯒꯤ ꯆꯥꯡ: $3, MIME ꯃꯈꯜ: $4",
        "file-info-size-pages": "$1 × $2 pixels, ꯐꯥꯏꯜ ꯆꯥꯎꯕꯒꯤ ꯆꯥꯡ: $3, MIME type: $4, $5 {{PLURAL:$5|ꯂꯥꯃꯥꯏ|ꯂꯥꯃꯥꯏꯁꯤꯡ}}",
        "file-nohires": "ꯃꯁꯤꯗꯒꯤ ꯍꯦꯟꯅꯥ ꯁꯦꯡꯕꯥ ꯂꯩꯇꯔꯦ",
        "svg-long-desc": "SVG file, nominally $1 × $2 pixels, file size: $3",
        "show-big-image": "ꯐꯥꯏꯜ ꯑꯁꯦꯡꯕ",
-       "show-big-image-preview": "Size of this preview: $1.",
-       "show-big-image-other": "ꯑꯇꯩ {{PLURAL:$2|resolution|ꯁꯦꯡꯅ ꯌꯦꯡꯕ ꯌꯥꯕ}}: $1.",
-       "show-big-image-size": "$1 × $2 pixels",
+       "show-big-image-preview": "ꯃꯁꯤꯒꯤ ꯄ꯭ꯔꯚꯤꯌꯨ ꯑꯁꯤꯒꯤ ꯁꯥꯏꯓ: $1.",
+       "show-big-image-other": "ꯑꯇꯩ {{PLURAL:$2|ꯔꯤꯁꯣꯂꯨꯁꯟ|ꯁꯦꯡꯅ ꯌꯦꯡꯕ ꯌꯥꯕ}}: $1.",
+       "show-big-image-size": "$1 × $2 ꯄꯤꯛꯆꯦꯜꯁ",
        "metadata": "ꯃꯦꯇꯥꯗꯥꯇꯥ",
        "metadata-help": "This file contains additional information, probably added from the digital camera or scanner used to create or digitize it.\nIf the file has been modified from its original state, some details may not fully reflect the modified file.",
        "metadata-fields": "ꯃꯥꯇꯥꯗꯥꯇꯥꯒꯤ ꯃꯥꯃꯤꯒꯤ ꯄꯥꯔꯦꯡ ꯑꯗꯨ ꯃꯥꯃꯤꯒꯤ ꯂꯥꯃꯥꯏꯗꯨꯒꯤ ꯄꯥꯎꯖꯦꯜꯗꯥ ꯎꯨꯇꯂꯦ ꯃꯦꯇꯥꯗꯥꯇꯥ ꯒꯤ\nꯎꯨꯇꯊꯣꯛꯐꯝꯗꯨ ꯀꯥꯏꯔꯥꯀꯥꯟꯗꯥ \nꯑꯇꯩꯗꯤ ꯂꯣꯠꯂꯅꯤ ꯎꯨꯇꯄꯥ ꯉꯝꯗꯕꯒꯤ\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
        "exif-datetime": "ꯐꯥꯏꯜ ꯍꯣꯡꯕꯒꯤ ꯆꯩꯆꯠ ꯑꯃꯗꯤ ꯃꯇꯝ",
        "exif-make": "Camera ꯁꯥꯔꯤꯕꯁꯤꯡ",
        "exif-model": "Camera model",
-       "exif-software": "Software ꯁꯤꯖꯤꯟꯅꯔꯤꯕꯥ",
-       "exif-exifversion": "Exif version",
+       "exif-software": "ꯁꯣꯐꯋꯌꯥꯏ ꯁꯤꯖꯤꯟꯅꯔꯤꯕ",
+       "exif-exifversion": "Exif ꯚꯔꯖꯟ",
        "exif-colorspace": "ꯉꯛꯁꯝꯒꯤ ꯑꯍꯥꯡꯕꯥ",
        "exif-datetimeoriginal": "data generationꯒꯤ ꯃꯇꯝ ꯑꯝꯗꯤ ꯆꯩꯆꯠ",
-       "exif-datetimedigitized": "ê¯\83ꯥê¯\83ꯤ ê¯\87ꯥê¯\8fê¯\95ꯪê¯\97ꯥ ê¯\8dꯥê¯\9eê¯\86ꯤê¯\9fê¯\95ê¯\92ꯤ ê¯\83ê¯\87ê¯\9d ê¯\91ê¯\83ꯥꯗꯤ ꯆꯩꯆꯠ",
+       "exif-datetimedigitized": "ê¯\83ê¯\83ꯤ ê¯\87ꯥê¯\8fê¯\95ꯪê¯\97ꯥ ê¯\8dꯥê¯\9eê¯\86ꯤê¯\9fê¯\95ê¯\92ꯤ ê¯\83ê¯\87ê¯\9d ê¯\91ê¯\83ꯗꯤ ꯆꯩꯆꯠ",
        "exif-orientation-1": "ꯆꯥꯡ ꯅꯥꯏꯅꯥ",
        "namespacesall": "ꯄꯨꯂꯞ",
        "monthsall": "ꯄꯨꯂꯞ",
-       "imgmultipagenext": "ê¯\83ê¯\8aꯪ ê¯\82ꯥê¯\83ꯥê¯\8f",
+       "imgmultipagenext": "ê¯\83ê¯\8aꯪ ê¯\82ê¯\83ꯥê¯\8f â\86\92",
        "imgmultigo": "ꯆꯠꯂꯨ",
-       "imgmultigoto": "$1 ê¯\82ꯥê¯\83ꯥê¯\8f ê¯\97 ê¯\86ꯠê¯\82ꯨ",
+       "imgmultigoto": "$1 ꯂꯃꯥꯏ ꯗ ꯆꯠꯂꯨ",
        "watchlisttools-clear": "ꯌꯦꯡꯂꯤꯕ ꯄꯥꯔꯦꯡꯗꯨ ꯁꯦꯡꯗꯣꯛ ꯨꯎ",
        "watchlisttools-view": "ꯃꯁꯤꯒ ꯆꯥꯟꯅꯕ ꯑꯍꯣꯡꯕꯗꯨ ꯎꯨꯠꯂꯨ",
        "watchlisttools-edit": "ꯌꯦꯡꯂꯤꯕ ꯄꯥꯔꯦꯡꯗꯨ ꯁꯦꯝꯒꯌꯂꯨ ꯱ꯁꯨꯡ ꯎꯨꯠꯂꯨ",
        "watchlisttools-raw": "ꯑꯍꯤꯡꯕ ꯌꯦꯡꯂꯤꯕ ꯄꯥꯔꯦꯡꯗꯨ ꯁꯦꯝꯒꯠꯂꯨ",
-       "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|talk]])",
+       "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|ꯉꯥꯡꯐꯃ]])",
+       "redirect": "ꯐꯥꯏꯜ,ꯁꯤꯖꯤꯟꯅꯔꯤꯕ ꯃꯤꯑꯣꯏ, ꯂꯃꯥꯏ, ꯑꯃꯨꯛꯍꯟꯅ ꯌꯦꯡꯕ, ꯅꯠꯇꯔꯒ ꯂꯣꯒ ID ꯅꯥ ꯄꯥꯡꯊꯣꯧꯄ ꯔꯤꯗꯥꯏꯔꯦꯛ",
        "redirect-submit": "ꯆꯠꯂꯨ",
-       "redirect-lookup": "ꯌꯦꯡꯈꯠꯂꯨ",
-       "redirect-value": "ê¯\83ê¯\94ꯨê¯\91ꯣê¯\8fê¯\95ꯥ",
+       "redirect-lookup": "ꯌꯦꯡꯈꯠꯂꯨ:",
+       "redirect-value": "ê¯\83ê¯\94ꯨê¯\91ꯣê¯\8fê¯\85ꯥ ê¯\82ꯧê¯\85ê¯\95:",
        "redirect-user": "ꯁꯤꯖꯤꯟꯅꯔꯤꯕ ꯁꯛꯇꯥꯛ",
-       "redirect-page": "ê¯\82ꯥê¯\83ꯥê¯\8fê¯\92ꯤ ê¯\81ê¯\9bê¯\87ê¯\9b",
-       "redirect-revision": "ê¯\82ꯥê¯\83ꯥê¯\8f ê¯\91ê¯\83ꯨꯧꯍꯟꯅ ꯌꯦꯡꯕ",
+       "redirect-page": "ꯂꯃꯥꯏꯒꯤ ꯁꯛꯇꯛ",
+       "redirect-revision": "ê¯\82ê¯\83ꯥê¯\8f ê¯\91ê¯\83ꯨê¯\9bꯍꯟꯅ ꯌꯦꯡꯕ",
        "redirect-file": "ꯐꯥꯏꯜ ꯃꯃꯤꯡ",
-       "specialpages": "ê¯\91ê¯\88ê¯\9fê¯\85ê¯\95 ê¯\82ꯥê¯\83ꯥê¯\8fê¯\81ꯤꯡ",
+       "specialpages": "ꯑꯈꯟꯅꯕ ꯂꯃꯥꯏꯁꯤꯡ",
        "tag-filter": "[[Special:Tags|ꯊꯦꯡꯕ]] ꯁꯦꯡꯇꯣꯛꯄ:",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tag|Tags}}]]: $2)",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|ꯊꯦꯕ|ꯊꯦꯕꯁꯤꯡ}}]]: $2)",
        "tags-active-yes": "ꯍꯣꯏ",
        "tags-active-no": "ꯅꯠꯇꯦ",
+       "tags-hitcount": "$1 {{PLURAL:$1|ꯑꯍꯣꯡꯕ|ꯑꯍꯣꯡꯕꯁꯤꯡ}}",
        "logentry-delete-delete": "$1 {{GENDER:$2|deleted}} page $3",
        "logentry-delete-restore": "$1 {{GENDER:$2|restored}} ꯂꯥꯃꯥꯏ $3 ($4)",
-       "revdelete-content-hid": "ê¯\91ê¯\8cꯥê¯\8eê¯\95ê¯\97ê¯\8e ê¯\82ꯣê¯\8cꯂꯒ ꯊꯝꯕ",
-       "logentry-move-move": "$1 {{GENDER:$2|moved}} page $3 to $4",
+       "revdelete-content-hid": "ê¯\91ê¯\8cꯥê¯\8eê¯\95ê¯\97ꯨ ê¯\82ꯣꯠꯂꯒ ꯊꯝꯕ",
+       "logentry-move-move": "$1 {{GENDER:$2|ꯂꯦꯡꯍꯟꯂꯦ}} ꯂꯃꯥꯏ $3 ꯗꯒꯤ $4 ꯗ",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|ꯂꯦꯍꯅꯂꯕ}} ꯂꯃꯥꯏ $3 ꯗꯒꯤ $4 ꯗ ꯔꯤꯗꯥꯏꯔꯦꯛ ꯊꯃꯝꯗꯅꯥ",
-       "logentry-newusers-create": "User account $1 was {{GENDER:$2|created}}",
+       "logentry-move-move_redir": "$1 {{GENDER:$2|ꯂꯦꯍꯅꯂꯕ}} ꯂꯃꯥꯏ $3 ꯗꯒꯤ $4 ꯗ ꯔꯤꯗꯥꯏꯔꯦꯛ ꯀꯤ ꯃꯊꯛꯇ",
+       "logentry-newusers-create": "ꯁꯤꯖꯤꯟꯅꯔꯤꯕ ꯑꯦꯀꯥꯎꯟ $1 ꯑꯁꯤ {{GENDER:$2|ꯁꯥꯈꯔꯦ}}",
+       "logentry-newusers-autocreate": "ꯁꯤꯖꯤꯟꯅꯔꯤꯕ ꯑꯩꯀꯥꯎꯟ $1 ꯑꯁꯤ {{GENDER:$2|ꯁꯥꯈꯔꯦ}} ꯃꯁꯥ ꯃꯇꯣꯝꯇꯥ",
        "logentry-upload-upload": "$1 {{GENDER:$2|ꯊꯥꯒꯠꯈꯔꯦ}} $3",
        "logentry-upload-overwrite": "$1 {{GENDER:$2|ꯊꯥꯒꯠꯂꯦ}} $3 ꯒꯤ ꯑꯅꯧꯕ ꯕꯔꯖꯟ",
        "searchsuggest-search": "ꯊꯤꯔꯣ",
index a48c9e1..5c6f336 100644 (file)
@@ -12,7 +12,6 @@
        "tog-newpageshidepatrolled": "ဗဒန် မုက်လိက်မဒဒှ်မဂေတ်ကၚ် နူ စရၚ် မုက်လိက် တၟိ",
        "tog-hidecategorization": "ပၞုက် အရာမဖျေဟ်ကဏ္ဍ ကုမုက်လိက်",
        "tog-extendwatchlist": "သၠဲ စရၚ်မမၚ်မဲ သ္ဂောံ ထ္ၜး အလုံ မုက်လိၚ်ဂမၠိုၚ်, ဆ မတုဲကၠုၚ်လၟုဟ် ဟွံသေၚ်",
-       "tog-showtoolbar": "ထ္ၜး တာန်ကြိယာမဒါန်",
        "tog-editondblclick": "ဒါန်မုက်လိက်ဂမၠိုၚ် ပွမပ္ဍဵုကေတ်ၜါလ္တန်",
        "tog-watchcreations": "စုတ်မုက်လိက် မအဲခၞံကၠောန်လဝ် ကေုာံ ဝှာၚ် မအဲပတိုန်လဝ် စရေၚ် စရၚ်မမၚ်မွဲအဲ.",
        "tog-watchdefault": "စုတ်မုက်လိက်ဂမၠိုၚ် ကေုာံ ဝှာၚ်ဂမၠိုၚ်မအဲပလေဝ်ဒါန်လဝ် စရေၚ်စရၚ်အဲမမၚ်မွဲ.",
index 3969a66..3c37899 100644 (file)
@@ -64,7 +64,6 @@
        "tog-extendwatchlist": "निरीक्षणसूचीत सगळे बदल दाखवा. फक्त अलीकडील नाही.",
        "tog-usenewrc": "अलीकडील बदल आणि पहाऱ्याची सूचीत मांडणी करा",
        "tog-numberheadings": "शीर्षके स्वयंक्रमांकित करा",
-       "tog-showtoolbar": "संपादन साधनपट्टी दाखवा",
        "tog-editondblclick": "दुबार-टिचकुन पान संपादित करा",
        "tog-editsectiononrightclick": "विभाग शीर्षकावर उजव्या क्लिकने टिचकुन संपादन करणे शक्य करा",
        "tog-watchcreations": "मी तयार केलेली पाने आणि चढविलेल्या संचिका माझ्या निरीक्षणसूचीत टाका",
        "ns-specialprotected": "विशेष पाने संपादित करता येत नाहीत.",
        "titleprotected": "या शीर्षकाचे पान सदस्य [[User:$1|$1]]ने निर्मितीपासून सुरक्षित केलेले आहे.त्याने याचे <em>$2</em> हे कारण नमूद केलेले आहे.",
        "filereadonlyerror": "\"$1\" संचिकेचा सुधार अशक्य आहे कारण संचिकाभांडार  \"$2\" हे 'फक्त वाचा'(रीड ओन्ली) या स्थितीतच आहे.\n\nज्या प्रशासकाने हे कुलुपबंद केले त्यांनी त्यांनी दिलेले स्पष्टीकरण आहे: \"$3\".",
+       "invalidtitle": "अग्राह्य शीर्षक",
        "invalidtitle-knownnamespace": "\"$2\" नामविश्वात \"$3\" मजकूराचे अयोग्य शीर्षक",
        "invalidtitle-unknownnamespace": "अनोळखी नामविश्वाच्या आकड्यासह अवैध मथळा $1 व मजकूर \"$2\"",
        "exception-nologin": "सनोंद-प्रवेशित नाही",
        "savechanges": "बदल जतन करा",
        "publishpage": "पानाचे प्रकाशन करा",
        "publishchanges": "बदल प्रकाशित करा",
+       "savearticle-start": "पान जतन करा...",
+       "savechanges-start": "बदल जतन करा...",
+       "publishpage-start": "पानाचे प्रकाशन करा...",
+       "publishchanges-start": "बदल प्रकाशित करा...",
        "preview": "झलक",
        "showpreview": "झलक दाखवा",
        "showdiff": "बदल दाखवा",
        "autoblockedtext": "तुमचा आंतरजालीय अंकपत्ता आपोआप स्थगित केला आहे कारण तो इतर अशा सदस्याने वापरला, ज्याला $1ने प्रतिबंधित केले.\nआणि दिलेले कारण खालील प्रमाणे आहे\n::<em>$2</em>\nब्लॉकची सुरूवात: $8\nब्लॉकचा शेवट: $6\nकुणाला ब्लॉक करायचे आहे: $7\n\nतुम्ही $1शी संपर्क करू शकता किंवा इतर [[{{MediaWiki:Grouppage-sysop}}|प्रबंधकां पैकी]] एकाशी स्थगनाबद्दल चर्चा करू शकता.\n\n[[Special:Preferences|सदस्य पसंतीत]]त शाबीत विपत्र पत्ता नमूद असल्या शिवाय आणि तुम्हाला  तो वापरण्या पासून प्रतिबंधित केले असल्यास तुम्ही  \"{{int:emailuser}}\"  सुविधा  वापरू शकणार नाही.\nतुमचा सध्याचा अंकपत्ता $3 हा आहे, व तुमचा ब्लॉक क्रमांक #$5 हा आहे. \nतुमचा स्थगन क्र $5 आहे. कृपया या संदर्भातील चर्चेमध्ये वरील सर्व तपशिल उद्घृत करा.",
        "blockednoreason": "कारण दिलेले नाही",
        "whitelistedittext": "लेखांचे संपादन करण्यासाठी आधी $1 करा.",
-       "confirmedittext": "तुम्ही संपादने करण्यापूर्वी तुमचा विपत्र पत्ता प्रमाणित करणे आवश्यक आहे.Please set and validate तुमचा विपत्र पत्ता तुमच्या [[Special:Preferences|सदस्य पसंती]]तून लिहा व सिद्ध करा.",
+       "confirmedittext": "तुम्ही संपादने करण्यापूर्वी तुमचा विपत्र पत्ता प्रमाणित करणे आवश्यक आहे. तुमचा विपत्र पत्ता तुमच्या [[Special:Preferences|सदस्य पसंती]]तून लिहा व सिद्ध करा.",
        "nosuchsectiontitle": "असा विभाग नाही.",
        "nosuchsectiontext": "तुम्ही अस्तिवात नसलेला विभाग संपादन करण्याचा प्रयत्न केला आहे.हे पान आपण बघत असतांना तो हलविल्या किंवा वगळल्या गेला आहे.",
        "loginreqtitle": "सनोंद-प्रवेश आवश्यक आहे",
        "postedit-confirmation-created": "पान निर्मित केल्या गेले आहे",
        "postedit-confirmation-restored": "हे पान पुनर्स्थापित केल्या गेले.",
        "postedit-confirmation-saved": "आपले संपादन जतन करण्यात आले आहे.",
+       "postedit-confirmation-published": "आपले संपादन प्रकाशित झाले आहे.",
        "edit-already-exists": "नवीन पान तयार करता येऊ शकले नाही.\nया नावाचे पान पूर्वीच अस्तित्वात आहे.",
        "defaultmessagetext": "अविचल संदेश मजकूर",
        "content-failed-to-parse": "$2 चा आशय(कंटेंट) $1 साठी पार्स करण्यात असफलता - नमुना: $3",
        "invalid-content-data": "अवैध माहिती",
        "content-not-allowed-here": "\"$1\" हा आशय [[$2]] लेखावर टाकण्याची अनुमती नाही.",
        "editwarning-warning": "या पानावरुन दुसर्‍या पानावर गेल्यास, तुम्ही येथे केलेले बदल जतन होणार नाहीत.\nजर आपण सनोंद-प्रवेशित असाल तर, ही सूचना घालवण्यासाठी ''{{int:prefs-editing}}'' मधील संपादनपसंतीत बदल करा.",
+       "editpage-invalidcontentmodel-title": "आशय प्रारुप सहाय्यीकृत नाही",
+       "editpage-invalidcontentmodel-text": "आशय प्रारुप \"$1\" हे सहाय्यीकृत नाही.",
        "editpage-notsupportedcontentformat-title": "आशय प्रारुप सहाय्यीकृत नाही",
        "content-model-wikitext": "विकिमजकूर",
        "content-model-text": "साधा मजकूर",
        "content-model-css": "सीएसएस",
        "content-json-empty-object": "रिक्त उद्दीष्ट",
        "content-json-empty-array": "रिकामा चतुष्कोन(array)",
+       "deprecated-self-close-category": "अवैध स्वयमावृत्त एचटीएमएल खूणपताका वापरणारी पाने",
        "duplicate-args-warning": "<strong>इशारा:</strong> [[:$1]] हा [[:$2]] ला \"$3\" प्राचलासाठी, एकाधिक किंमतींसमवेत हाक देत आहे.दिलेली शेवटची किंमतच वापरल्या जाईल.",
        "duplicate-args-category": "साचास हाक देण्यात पाने द्विरुक्त कारणमीमांसा(arguments) वापरत आहेत.",
        "duplicate-args-category-desc": "या पानात साच्याची ती हाक(calls) आहे ज्यात द्विरुक्त कारणमिमांसेचा (arguments)वापर करण्यात आला आहे,जसे<code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> किंवा <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "diff-multi-manyusers": "{{PLURAL:$2|सदस्याची|$2 सदस्यांच्या}} ({{PLURAL:$1|आवृत्ती|$1 आवृत्त्या}} दाखवल्या नाहीत)",
        "difference-missing-revision": "या लेखाचे/ची  ($1) हे {{PLURAL:$2|संस्करण|$2 संस्करणे}} {{PLURAL:$2|सापडले नाही|सापडली नाहीत}}.वगळल्या गेलेल्या लेखपानाच्या जुन्या इतिहास-दुव्याचे अनुसरण केल्यामुळे, शक्यतोवर,असे घडु शकते.याबाबत अधिक तपशील  [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} वगळलेल्या नोंदी] येथे बघता येईल.",
        "searchresults": "शोध निकाल",
+       "search-filter-title-prefix-reset": "सर्व पाने शोधा",
        "searchresults-title": "\"$1\" साठीचे शोध निकाल",
        "titlematches": "पानाचे शीर्षक जुळते",
        "textmatches": "पानातील मजकूर जुळतो",
        "grant-createeditmovepage": "पाने बनवा,संपादा व स्थानांतरण करा",
        "grant-delete": "पाने, आवृत्त्या व नोंदी वगळा",
        "grant-editinterface": "मिडियाविकि नामविश्व व संकेतस्थळावरची/सदस्यांचीJS संपादा",
-       "grant-editmycssjs": "आपली सदस्य CSS/JavaScript संपादित करा",
+       "grant-editmycssjs": "आपली सदस्य CSS/JSON/JavaScript संपादित करा",
        "grant-editmyoptions": "आपला सदस्य पसंतीक्रम संपादा",
        "grant-editmywatchlist": "आपली निरीक्षणयादी संपादित करा",
        "grant-editpage": "अस्तित्वात असलेली पाने संपादा",
        "rcfilters-other-review-tools": "पुनरावलोकनाची इतर साधने",
        "rcfilters-group-results-by-page": "पानानुसार गट निकाल",
        "rcfilters-activefilters": "सक्रिय गाळण्या",
+       "rcfilters-activefilters-hide": "लपवा",
+       "rcfilters-activefilters-show": "दाखवा",
        "rcfilters-advancedfilters": "प्रगत गाळण्या",
        "rcfilters-limit-title": "दाखविण्यासाठीचे निकाल",
        "rcfilters-limit-and-date-label": "$1 {{PLURAL:$1|बदल}},$2",
        "rcfilters-savedqueries-rename": "नाव बदला",
        "rcfilters-savedqueries-setdefault": "अविचल म्हणून स्थापा",
        "rcfilters-savedqueries-unsetdefault": "अविचल म्हणून हटवा",
-       "rcfilters-savedqueries-remove": "पà¥\81नà¥\8dहा à¤¸à¥\8dथानाà¤\82तरà¥\80त à¤\95रा",
+       "rcfilters-savedqueries-remove": "वà¤\97ळा",
        "rcfilters-savedqueries-new-name-label": "नाव",
        "rcfilters-savedqueries-new-name-placeholder": "या गाळणीच्या उद्देशाचे वर्णन करा",
        "rcfilters-savedqueries-apply-label": "गाळणी तयार करा",
        "rcfilters-empty-filter": "कोणत्याच गाळण्या सक्रिय नाहीत. सर्व योगदाने दाखविण्यात येत आहेत.",
        "rcfilters-filterlist-title": "गाळण्या",
        "rcfilters-filterlist-whatsthis": "हे कसे काम करते?",
-       "rcfilters-filterlist-feedbacklink": "या (नवीन) गाळणी साधनांबद्दल आपले काय म्हणणे/विचार आहेत ते आम्हास सांगा",
+       "rcfilters-filterlist-feedbacklink": "या गाळणी साधनांबद्दल आपले काय म्हणणे/विचार आहेत ते आम्हास सांगा",
        "rcfilters-highlightbutton-title": "निकालांवर झोत टाका",
        "rcfilters-highlightmenu-title": "एक रंग निवडा",
        "rcfilters-highlightmenu-help": "या गुणधर्मासाठी झोताचा रंग निवडा",
        "rcfilters-filter-lastrevision-description": "एखाद्या पानातील सर्वात अलीकडील बदल.",
        "rcfilters-filter-previousrevision-label": "अद्यतनीत आवृत्ती नाही",
        "rcfilters-filter-previousrevision-description": "\"अद्यतनीत आवृत्ती\" नसलेले सर्व बदल",
+       "rcfilters-tag-prefix-namespace-inverted": " :$1 <strong>नाही</strong>",
        "rcfilters-exclude-button-off": "निवडलेले वगळा",
        "rcfilters-view-tags": "खूण केलेली संपादने",
        "rcfilters-view-namespaces-tooltip": "नामविश्वांनुसार गाळण्यांचे निकाल",
        "apisandbox-intro": "<strong>मिडियाविकि वेब सर्व्हीस एपीआय</strong> वर प्रयोग करण्यासाठी या पानाचा वापर करा. एपीआय वापरण्याच्या अधिक तपशिलासाठी  [[mw:API:Main page| एपीआय दस्ताऐवजीकरण]] हे पान बघा. उदाहरणार्थ:[https://www.mediawiki.org/wiki/API#A_simple_example मुख्य पानाचा आशय मिळवा]. अधिक उदाहरणे बघण्यास एखादी क्रिया निवडा.\n\nयाची नोंद घ्या कि ही धूळपाटी असली तरी, या पानावर आपण केलेल्या क्रियांद्वारे विकिवर फेरफार होऊ शकतो.",
        "apisandbox-submit": "विनंती करा",
        "apisandbox-reset": "हटवा",
+       "apisandbox-helpurls": "सहाय्य दुवे",
        "apisandbox-examples": "उदाहरणे",
+       "apisandbox-dynamic-parameters": "अतिरिक्त प्राचले",
+       "apisandbox-dynamic-parameters-add-label": "प्राचल (पॅरामीटर) जोडा",
+       "apisandbox-dynamic-parameters-add-placeholder": "प्राचलाचे नाव",
+       "apisandbox-dynamic-error-exists": "\"$1\" नावाचा प्राचल पूर्वीच अस्तित्वात आहे.",
+       "apisandbox-deprecated-parameters": "जुनी प्राचले",
+       "apisandbox-add-multi": "जोडा",
+       "apisandbox-submit-invalid-fields-title": "काही क्षेत्रे अवैध आहेत",
        "apisandbox-results": "निकाल",
        "apisandbox-request-url-label": "'यूआरएल'ची विनंती करा:",
        "apisandbox-request-time": "विनंती वेळ:{{PLURAL:$1|$1 मिलीसेकंद}}",
        "booksources-search": "शोधा",
        "booksources-text": "खालील यादीत नवी आणिजुनी पुस्तके विकणाऱ्या संकेतस्थळाचे दुवे आहेत,आणि त्यात कदाचित आपण शोधू पहात असलेल्या पुस्तकाची अधिक माहिती असेल:",
        "booksources-invalid-isbn": "दिलेला आयएसबीएन वैध नाही; मूळ स्रोतातून उतरवताना झालेल्या चुकांचे निरसन करा.",
+       "magiclink-tracking-pmid": "पीएमआयडी जादुई दुवे वापरणारी पाने",
+       "magiclink-tracking-isbn": "आयएसबीएन जादुई दुवे वापरणारी पाने",
        "specialloguserlabel": "कार्यकर्ता:",
        "speciallogtitlelabel": "लक्ष (शिर्षक किंवा {{ns:user}}:सदस्याचे सदस्यनाव):",
        "log": "नोंदी",
        "proxyblockreason": "तुमचा अंकपत्ता प्रतिबंधित केला आहे कारण तो उघड-उघड प्रतिनिधी आहे.कृपया तुमच्या आंतरजाल सेवा दात्यास किंवा तंत्रज्ञास पाचारण संपर्क करा आणि त्यांचे या गंभीर सुरक्षाप्रश्नाकडे लक्ष वेधा.",
        "sorbsreason": "{{SITENAME}}ने वापरलेल्या DNSBL मध्ये तुमच्या अंकपत्त्याची नोंद उघड-उघड प्रतिनिधी म्हणून सूचित केली आहे.",
        "sorbs_create_account_reason": "{{SITENAME}}च्या DNSBLने तुमचा अंकपत्ता उघड-उघड प्रतिनिधी म्हणून सूचित केला आहे.तुम्ही खाते उघडू शकत नाही",
+       "softblockrangesreason": "($1) या आपल्या अंकपत्त्याकडून अनामिक योगदानास परवानगी नाही. कृपया सनोंद-प्रवेश करा.",
        "xffblockreason": "(X-Forwarded-For header) मधील अंकपत्ता,आपला किंवा आपण वापरत असलेल्या सर्व्हरचा,प्रतिबंधित केल्या गेला आहे.प्रतिबंधित करण्याचे मुळ कारण होते:$1",
        "cant-see-hidden-user": "तुम्ही प्रतिबंध करण्याचा प्रयत्न करत असलेले सदस्य खाते आधीपासूनच प्रतिबंधित आणि लपविले गेले आहे.\nतुमच्याकडे सदस्य लपविण्याचे अधिकार नसल्यामुळे , तुम्ही सदस्य प्रतिबंधन  पाहू अथवा संपादित करू शकत नाही.",
        "ipbblocked": "तुमचे स्वत:चेच खाते प्रतिबंधित असल्यामुळे तुम्ही इतर सदस्यांना प्रतिबंधित किंवा अप्रतिबंधीत करू शकत नाही",
        "confirm-unwatch-button": "ठिक आहे",
        "confirm-unwatch-top": "हे पान तुमच्या नित्य पहाण्याच्या सूचीतून काढायचे?",
        "confirm-rollback-button": "ठीक आहे",
+       "confirm-rollback-top": "या पानाची केलेली संपादने उलटवायची?",
+       "confirm-mcrrestore-title": "आवृत्ती पुनर्स्थापित करा",
+       "confirm-mcrundo-title": "बदल उलटवा",
+       "mcrundofailed": "पुनर्स्थापन अयशस्वी",
        "quotation-marks": "\"$1\"",
        "imgmultipageprev": "← मागील पान",
        "imgmultipagenext": "पुढील पान →",
        "version-specialpages": "विशेष पाने",
        "version-parserhooks": "पृथकक अंकुश (पार्सर हूक्स)",
        "version-variables": "चल",
+       "version-editors": "संपादक",
        "version-antispam": "उत्पात प्रतिबंधन",
        "version-api": "एपीआय (API)",
        "version-other": "इतर",
        "expand_templates_remove_nowiki": "निकालात <nowiki>खूणपतका दाखवू नका",
        "expand_templates_generate_xml": "XML चा पार्स (parse) वृक्ष दाखवा",
        "expand_templates_preview": "झलक",
-       "expand_templates_input_missing": "आपण काहीतरी आंतरदेय मजकूर पुरवावयास हवा.",
+       "expand_templates_input_missing": "à¤\86पण à¤\95ाहà¥\80तरà¥\80 à¤\86à¤\82तरदà¥\87य à¤µà¤¿à¤\95िमà¤\9cà¤\95à¥\82र à¤ªà¥\81रवावयास à¤¹à¤µà¤¾.",
        "pagelang-name": "पान",
        "pagelang-language": "भाषा",
        "pagelang-use-default": "अविचल भाषा वापरा",
        "log-action-filter-block": "रोधाचा प्रकार:",
        "log-action-filter-contentmodel": "आशय नमूना बदलाचा प्रकार",
        "log-action-filter-delete": "वगळण्याचा प्रकार:",
+       "log-action-filter-import": "आयातीचा प्रकार:",
        "log-action-filter-move": "स्थानांतरणाचा प्रकार:",
        "log-action-filter-rights": "अधिकार बदलाचा प्रकार",
        "log-action-filter-all": "सर्व",
+       "log-action-filter-import-interwiki": "आंतरविकि आयात",
        "log-action-filter-move-move": "उपरीलेखन (ओव्हररायटिंग) न-करता केलेली स्थानांतरणे",
        "log-action-filter-move-move_redir": "उपरीलेखनासह (ओव्हररायटिंग) असलेली स्थानांतरणे",
+       "log-action-filter-newusers-create": "अनामिक सदस्याद्वारे निर्मित",
+       "log-action-filter-newusers-create2": "नोंदणीकृत सदस्याद्वारे निर्मित",
+       "log-action-filter-newusers-autocreate": "स्वयंचलित निर्माण",
+       "log-action-filter-newusers-byemail": "विपत्राद्वारे पाठविलेल्या परवलीच्या शब्दाद्वारे निर्मित",
+       "log-action-filter-patrol-patrol": "मानवी गस्त",
+       "log-action-filter-patrol-autopatrol": "स्वयंचलित गस्त",
+       "log-action-filter-protect-protect": "संरक्षण",
+       "log-action-filter-protect-modify": "संरक्षण परिवर्तन",
+       "log-action-filter-protect-unprotect": "असुरक्षित",
+       "log-action-filter-protect-move_prot": "संरक्षण स्थानांतरीत केले",
        "log-action-filter-rights-rights": "मानवी बदल",
+       "log-action-filter-rights-autopromote": "स्वयंचलित बदल",
+       "log-action-filter-suppress-event": "नोंदी दडपणे",
+       "log-action-filter-suppress-revision": "आवृत्ती दडपणे",
+       "log-action-filter-suppress-delete": "पान दडपणे",
        "log-action-filter-suppress-block": "रोधामार्फत सदस्य दाबणे",
        "changecredentials": "अधिकारपत्रे (क्रेडेंटियल्स) बदला",
+       "changecredentials-submit": "अधिकारपत्रे (क्रेडेंटियल्स) बदला",
        "removecredentials": "अधिकारपत्रे (क्रेडेंटियल्स) हटवा",
+       "removecredentials-submit": "अधिकारपत्रे (क्रेडेंटियल्स) हटवा",
        "edit-error-short": "त्रुटी: $1",
-       "edit-error-long": "त्रुटी:$1",
+       "edit-error-long": "त्रुट्या:\n\n$1",
+       "revid": "आवृत्ती $1",
        "passwordpolicies": "परवलीच्या शब्दांची नीती",
        "passwordpolicies-summary": "ही, या विकिवरील व्याख्यिकृत सदस्य गटांसाठी असलेली व सध्या प्रभावात असलेल्या परवलीच्या शब्दांच्या नीतींची यादी आहे.",
        "passwordpolicies-group": "गट",
        "passwordpolicies-policies": "नीती",
+       "passwordpolicies-policy-minimalpasswordlength": "परवलीचा शब्द हा किमान $1 {{PLURAL:$1|अक्षरापेक्षा|अक्षरांपेक्षा}} जास्त लांबीचा हवा",
        "passwordpolicies-policy-minimumpasswordlengthtologin": "सनोंद-प्रवेशास,परवलीचा शब्द हा किमान $1 {{PLURAL:$1|अक्षर}} लांबीचा असावयास हवा",
        "passwordpolicies-policy-passwordcannotmatchusername": "परवलीचा शब्द हा सदस्यनाव असू शकत नाही",
-       "passwordpolicies-policy-maximalpasswordlength": "परवलीचा शब्द हा $1 {{PLURAL:$1|अक्षरापेक्षा|अक्षरांपेक्षा}} कमी लांबीचा हवा"
+       "passwordpolicies-policy-passwordcannotmatchblacklist": "परवलीच्या शब्दाचे,विशिष्ट काळ्या यादीत टाकलेल्या परवलीच्या शब्दाशी अनुरूपन (मॅच) असू शकत नाही.",
+       "passwordpolicies-policy-maximalpasswordlength": "परवलीचा शब्द हा $1 {{PLURAL:$1|अक्षरापेक्षा|अक्षरांपेक्षा}} कमी लांबीचा हवा",
+       "passwordpolicies-policy-passwordcannotbepopular": "परवलीचा शब्द हा {{PLURAL:$1|the popular password|$1 प्रसिद्ध शब्दांच्या यादीतील असू शकत नाही}}"
 }
index 8c25263..711c8fb 100644 (file)
@@ -38,7 +38,6 @@
        "tog-extendwatchlist": "Kembangkan senarai pantau untuk memaparkan semua perubahan, bukan hanya yang terkini",
        "tog-usenewrc": "Kumpulkan perubahan mengikut laman dalam perubahan terkini dan senarai pantau",
        "tog-numberheadings": "Nomborkan tajuk secara automatik",
-       "tog-showtoolbar": "Tunjukkan palang alat sunting",
        "tog-editondblclick": "Dwiklik untuk menyunting laman",
        "tog-editsectiononrightclick": "Bolehkan penyuntingan bahagian dengan mengklik kanan pada tajuk bahagian",
        "tog-watchcreations": "Tambahkan laman-laman yang saya cipta dan fail-fail yang saya muat naik ke dalam senarai pantau saya",
index 5ab6b4c..8f92a72 100644 (file)
@@ -24,7 +24,6 @@
        "tog-extendwatchlist": "Espandi l-lista ta' osservazzjoni biex turi t-tibdil kollu, u mhux biss dak riċenti",
        "tog-usenewrc": "Iġbor il-tibdil skont paġna fil-tibdil riċenti u lista' ta paġni osservati",
        "tog-numberheadings": "Numerazzjoni awtomatika tat-titli tas-sezzjonijiet",
-       "tog-showtoolbar": "Uri tal-għodda għall-modifikar il-paġni",
        "tog-editondblclick": "Immodifika l-paġni permezz ta' klikk doppju (bżonn tal-JavaScript)",
        "tog-editsectiononrightclick": "L-immodifikar ta' sezzjonijiet bi klikk lemini fuq it-titli tas-sezzjonijiet (bżonn tal-JavaScript)",
        "tog-watchcreations": "Żid il-paġni li noħloq u l-fajls li ntella' fil-lista ta' osservazzjoni tiegħi",
index 021ca92..2994c81 100644 (file)
@@ -20,7 +20,6 @@
        "tog-extendwatchlist": "Lhistaige spandida de todas las altaraçones a las páiginas begiadas, nun solo de las redadeiras",
        "tog-usenewrc": "Agrupar altaraçones por páigina nas altaraçones recentes i páiginas begiadas",
        "tog-numberheadings": "Outo-numerar cabeçalhos",
-       "tog-showtoolbar": "Amostrar la barra d'eidiçon",
        "tog-editondblclick": "Eiditar páiginas quando houbir un clique duplo",
        "tog-editsectiononrightclick": "Posseblitar l'eidiçon de cachos por clique cul boton dreito ne l títalo de la seçon",
        "tog-watchcreations": "Ajuntar las páiginas que you criar a las mies páiginas begiadas",
index 1632376..f493937 100644 (file)
@@ -36,7 +36,6 @@
        "tog-extendwatchlist": "စောင့်ကြည့်စာရင်းတွင် ပြောင်းလဲမှုအားလုံးအား  ပြရန်။",
        "tog-usenewrc": "လတ်တလောပြောင်းလဲမှုများနှင့် စောင့်ကြည့်စာရင်းရှိ စာမျက်နှာ အုပ်စုလိုက် ပြောင်းလဲချက်များ",
        "tog-numberheadings": "ခေါင်းစဉ်များအား အလိုအလျောက် နံပါတ်စဉ်ရန်",
-       "tog-showtoolbar": "ပြင်ဆင် ကိရိယာဘားကို ပြရန်",
        "tog-editondblclick": "ကလစ်နှစ်ခါနှိပ်ပြီး စာမျက်နှာများအား ပြင်ဆင်ရန်",
        "tog-editsectiononrightclick": "အပိုင်းလိုက်ခေါင်းစဉ်များကို ညာကလစ်နှိပ်ခြင်းဖြင့် အပိုင်းလိုက် တည်းဖြတ်ခြင်းကို အသုံးပြုရန်",
        "tog-watchcreations": "ကျွန်ုပ်စတင်ရေးသားခဲ့သည့်စာမျက်နှာများနှင့် အပ်လုပ်တင်ခဲ့သည့် ဖိုင်များကို စောင့်​ကြည့်​စာ​ရင်း​ထဲ ပေါင်းထည့်ရန်",
index 20ebd82..0b6e56e 100644 (file)
@@ -25,7 +25,6 @@
        "tog-extendwatchlist": "Келейгавтомс сёрмадовкс мельга ваномань керьксэнть невтевест весе полавтнематне, аволь ансяк чиеньсетне.",
        "tog-usenewrc": "Пурнамс лиякстомтомат лопань коряс куронь-куронь чиень полавтнематнестэ-ванома лемрисьметнестэ",
        "tog-numberheadings": "Сёрмадовксконяксос кадык сынсь ловома валтнэ путовить",
-       "tog-showtoolbar": "Невтемс кедьёнкслазнэнть сёрмадома шкасто",
        "tog-editondblclick": "Кавксть лепштязь совамс сёрмадовксонь витнеме-петнеме",
        "tog-editsectiononrightclick": "Витнемс секциятнень-пелькстнэнь, лепштямс сёрмадовксонть лемензэ лангс чеерень витьёнсе повнесэ",
        "tog-watchcreations": "Совавтомс ванома лемрисьмезэнь монь теевть лопатнень ды сень, мезе ёвкстан",
index 7636827..2b07eb0 100644 (file)
@@ -22,7 +22,6 @@
        "tog-extendwatchlist": "گت تر هکردن دمبال هکرده‌ئون فهرست تموم دگارسه‌ئون سر، و نا فقط آخرین  موردون",
        "tog-usenewrc": "استفاده از تازه دگاردسته‌ئون گت‌تر بَیی (نیازمند جاوااسکریپت)",
        "tog-numberheadings": "شماره بشتن خدکار عناوین",
-       "tog-showtoolbar": "دچی‌ین جعبه نوار ابزار ره سِراق هدائن",
        "tog-editondblclick": "دچی ین ولگون با دتا کلیک (نیازمند جاوااسکریپت)",
        "tog-editsectiononrightclick": "به کار دمبدائن دچی‌ین قسمت‌ئون با راست کیلیک<br />عناوین قسمت‌ئون ِرو (جاوااسکریپت)",
        "tog-watchcreations": "ایضافه بین صفحه‌ئونی که من دِرِس هاکردمه به پیگیری‌ئون ِرج.",
index f52fcb3..127f1a6 100644 (file)
@@ -21,7 +21,6 @@
        "tog-newpageshidepatrolled": "Mokintlàtis tlapîpialtlaìxtlapaltìn ìwikpa ìtlapòpòwaltekpànal in yâyankuik tlaìxtlapaltìn",
        "tog-extendwatchlist": "Mixmanaz in tlapopohualtecpantlachialli ica mottaz nochi in tlapatlaliztli, ahmo in zan ocachi yancuic.",
        "tog-usenewrc": "Molōloāzqueh in tlapatlaliztli in yancuīc tlapatlaliztli āmapan īhuān in tlachiyaliztli tlapōhualāmapan (monequi JavaScript)",
-       "tog-showtoolbar": "Motlaīxtlatīz in tlachihchīhualōni pāntli",
        "tog-editondblclick": "Tiquimpatlāz in zāzanilli intlā ōme tiquimpachoa",
        "tog-watchcreations": "Niquintlaliz in tlahcuilolamameh in oniquinchiuh ihuan in tlahcuilolpiyaliztin in oniquinquetz ipan notlachiyaliz",
        "tog-watchdefault": "Mahxiltiz tlahcuilolamatl ihuan tlahcuilolpiyalli in tlein niquinpatla ipan notlachiyaliz",
index 379fa5c..d80dcdf 100644 (file)
@@ -23,7 +23,6 @@
        "tog-extendwatchlist": "thián-khui kàm-sī-toaⁿ, khoàⁿ choân-pō͘  kái ê, m̄-nā choè-kīn niā.",
        "tog-usenewrc": "共文章最近有改的佮監視列表囥做伙",
        "tog-numberheadings": "Phiau-tê chū-tōng pian-hō",
-       "tog-showtoolbar": "Hián-sī pian-chi̍p ke-si-tiâu",
        "tog-editondblclick": "連揤兩个就通編輯",
        "tog-editsectiononrightclick": "Chiàⁿ ji̍h toāⁿ-lo̍h phiau-tê to̍h ē-tàng pian-chi̍p toāⁿ-lo̍h",
        "tog-watchcreations": "Kā goá khui ê ia̍h kah chiūⁿ-chái ê tóng-àn ka-ji̍p kàm-sī-toaⁿ lāi-té",
index 68cea82..227e8d9 100644 (file)
@@ -28,7 +28,6 @@
        "tog-extendwatchlist": "Spanne ll'asservate speciale pe fà vedé tutte 'e cagnàmiente, nun solo a ll'ùrdemo",
        "tog-usenewrc": "Urdeme càgnamiente avanzate (JavaScript)",
        "tog-numberheadings": "Annúmmera automatecamente 'e títule",
-       "tog-showtoolbar": "Aspone 'a barra d''e stromiente 'e cagno",
        "tog-editondblclick": "Cagna 'e pàggene cliccanno ddoje vote",
        "tog-editsectiononrightclick": "Permette 'e cagnà 'e sezzione cliccanno p' 'o tasto dritto ncopp' 'e titule 'e sezzione",
        "tog-watchcreations": "Azzecca 'e ppaggene criate e li files carrecate ncopp'â l'elenco 'e cuntrollo",
index e1623d9..16838cf 100644 (file)
@@ -63,7 +63,6 @@
        "tog-extendwatchlist": "Utvid overvåkningslisten til å vise alle endringer, ikke bare de siste",
        "tog-usenewrc": "Grupper endringer etter side i siste endringer og overvåkingslisten",
        "tog-numberheadings": "Autonummerer overskrifter",
-       "tog-showtoolbar": "Vis verktøylinje",
        "tog-editondblclick": "Rediger sider ved å dobbeltklikke",
        "tog-editsectiononrightclick": "Rediger avsnitt ved å høyreklikke på avsnittsoverskrift",
        "tog-watchcreations": "Legg til sider jeg oppretter og filer jeg laster opp i min overvåkingsliste",
        "badarticleerror": "Handlingen kan ikke utføres på denne siden.",
        "cannotdelete": "Siden eller fila «$1» kunne ikke slettes.\nDen kan ha blitt slettet av noen andre.",
        "cannotdelete-title": "Kan ikke slette siden «$1»",
+       "delete-scheduled": "Siden «$1» står i kø for å bli slettet.\nHa tålmodighet.",
        "delete-hook-aborted": "Sletting avbrutt av en funksjon.\nDen ga ingen forklaring.",
        "no-null-revision": "Det ble ikke laget en null-endring av side \"$1\"",
        "badtitle": "Ugyldig tittel",
        "subject-preview": "Forhåndsvisning av overskrift:",
        "previewerrortext": "En feil oppsto mens dine endringer skulle forhåndsvises.",
        "blockedtitle": "Brukeren er blokkert",
+       "blocked-email-user": "<strong>Brukernavnet ditt er blokkert fra å sende epost. Du kan fortsatt redigere andre sider på denne wikien.</strong> Du kan se blokkeringsdetaljene under [[Special:MyContributions|bidragslisten]].\n\nBlokkeringen ble gjort av $1.\n\nDen angitte årsaken er <em>$2</em>.\n\n* Blokkeringen startet: $8\n* Blokkeringen løper ut: $6\n* Blokkeringen er ment for: $7\n* Blokkerings-ID #$5",
+       "blockedtext-partial": "<strong>Brukernavnet ditt eller IP-adressen din er blokkert fra å endre denne siden. Du kan fortsatt redigere andre sider på denne wikien.</strong> Du kan se blokkeringsdetaljene under [[Special:MyContributions|bidragslisten]].\n\nBlokkeringen ble gjort av $1.\n\nDen angitte årsaken er <em>$2</em>.\n\n* Blokkeringen startet: $8\n* Blokkeringen løper ut: $6\n* Blokkeringen er ment for: $7\n* Blokkerings-ID #$5",
        "blockedtext": "<strong>Ditt brukernavn eller din IP-adresse har blitt blokkert.</strong>\n\nBlokkeringen ble utført av $1. Grunnen som ble oppgitt var <em>$2</em>.\n\n* Blokkeringen begynte:  $8\n* Blokkeringen opphører: $6\n* Blokkeringen ment for: $7\n\nDu kan kontakte $1 eller en annen [[{{MediaWiki:Grouppage-sysop}}|administrator]] for å diskutere blokkeringen.\nDu kan ikke bruke «{{int:emailuser}}»-funksjonen med mindre du har oppgitt en gyldig e-postadresse i [[Special:Preferences|innstillingene dine]] og du ikke har blitt blokkert fra å sende e-post.\nDin nåværende IP-adresse er $3, og blokkerings-ID-en er #$5.\nVennligst ta med all denne informasjonen ved henvendelser.",
        "autoblockedtext": "Din IP-adresse har blitt automatisk blokkert fordi den ble brukt av en annen bruker som ble blokkert av $1.\nDen oppgitte grunnen var:\n\n:'''$2'''\n\n* Blokkeringen begynte: $8\n* Blokkeringen utgår: $6\n* Blokkeringen er ment for: $7\n\nDu kan kontakte $1 eller en av de andre [[{{MediaWiki:Grouppage-sysop}}|administratorene]] for å diskutere blokkeringen.\n\nMerk at du ikke kan bruke «{{int:emailuser}}»-funksjonen med mindre du har registrert en gyldig e-postadresse i [[Special:Preferences|innstillingene dine]].\n\nDin IP-adresse er $3, og blokkerings-ID-en er #$5.\nVennligst ta med all denne informasjonen ved henvendelser.",
        "systemblockedtext": "Ditt brukernavn eller IP-adresse har blitt blokkert automatisk av MediaWiki.\n\nBlokkeringen grunnes:\n\n:<em>$2</em>\n\n* Blokkeringen startet: $8\n* Blokkeringen gjelder til: $6\n* Blokkeringen er ment for: $7\n\nDin nåværende IP-adresse er $3.\nVennligst inkluder informasjonen over i alle spørsmål du spør angående dette.",
        "prefixindex": "Alle sider med prefiks",
        "prefixindex-namespace": "All sider med prefiks ($1 navnerom)",
        "prefixindex-submit": "Vis",
-       "prefixindex-strip": "Fjern prefiks fra listen",
+       "prefixindex-strip": "Skjul prefikset i resultatene",
        "shortpages": "Korte sider",
        "longpages": "Lange sider",
        "deadendpages": "Blindveisider",
        "ipb-disableusertalk": "Hindre denne brukeren i å redigere sin egen diskusjonsside mens han/hun er blokkert",
        "ipb-change-block": "Blokker brukeren på nytt med disse innstillingene",
        "ipb-confirm": "Bekreft blokkering",
+       "ipb-sitewide": "Hele nettstedet",
+       "ipb-partial": "Delvis",
+       "ipb-type-label": "Type",
+       "ipb-pages-label": "Sider",
        "badipaddress": "Ugyldig IP-adresse.",
        "blockipsuccesssub": "Blokkering utført",
        "blockipsuccesstext": "­«[[Special:Contributions/$1|$1]]» har blitt blokkert.<br />\nSe [[Special:BlockList|blokkeringslisten]] for alle blokkeringer.",
        "createaccountblock": "kontooppretting blokkert",
        "emailblock": "e-post blokkert",
        "blocklist-nousertalk": "kan ikke redigere sin egen diskusjonsside",
+       "blocklist-editing": "redigering",
+       "blocklist-editing-sitewide": "redigering (hele nettstedetttttttttt)",
        "ipblocklist-empty": "Blokkeringslisten er tom.",
        "ipblocklist-no-results": "Den angitte IP-adressen eller brukeren er ikke blokkert.",
        "blocklink": "blokker",
        "movepage-moved": "'''«$1» ble flyttet til «$2»'''",
        "movepage-moved-redirect": "En omdirigering har blitt opprettet.",
        "movepage-moved-noredirect": "Det ble ikke opprettet en omdirigering.",
+       "movepage-delete-first": "Målsiden har for mange revisjoner til å slettes som del av en sideflytting. Slett siden manuelt først og prøv så igjen.",
        "articleexists": "En side med det navnet finnes allerede eller det valgte navn er ugyldig.\nVelg et annet navn.",
        "cantmove-titleprotected": "Du kan ikke flytte en side til dette navnet, fordi den nye tittelen er beskyttet fra opprettelse.",
        "movetalk": "Flytt tilhørende diskusjonsside.",
        "pageinfo-category-files": "Antall filer",
        "pageinfo-user-id": "Bruker-ID",
        "pageinfo-file-hash": "Hash-verdi",
+       "pageinfo-view-protect-log": "Vis beskyttelsesloggen for denne siden.",
        "markaspatrolleddiff": "Merk som patruljert",
        "markaspatrolledtext": "Merk denne siden som patruljert",
        "markaspatrolledtext-file": "Merk denne filversjonen som patruljert",
        "logentry-block-block": "$1 {{GENDER:$2|blokkerte}} {{GENDER:$4|$3}} med en utløpstid på $5 $6",
        "logentry-block-unblock": "$1 {{GENDER:$2|opphevet blokkeringen av}} {{GENDER:$4|$3}}",
        "logentry-block-reblock": "$1 {{GENDER:$2|endret}} blokkeringsinnstillingen av {{GENDER:$4|$3}} med en utløpstid på $5 $6",
+       "logentry-partialblock-block": "$1 {{GENDER:$2|blokkerte}} {{GENDER:$4|$3}} fra å redigere {{PLURAL:$8|siden|sidene}} $7 med en utløpstid på $5 $6",
+       "logentry-partialblock-reblock": "$1 {{GENDER:$2|endret}} blokkeringsinnstillingene for {{GENDER:$4|$3}} og forhindret redigeringen av {{PLURAL:$8|siden|sidene}} $7 med en utløpstid på $5 $6",
+       "logentry-non-editing-block-block": "$1 {{GENDER:$2|blokkerte}} {{GENDER:$4|$3}} fra handlinger som ikke er redigering med en utløpstid på $5 $6",
+       "logentry-non-editing-block-reblock": "$1 {{GENDER:$2|endret}} blokkeringsinnstillingene for {{GENDER:$4|$3}} for handlinger som ikke er redigering med en utløpstid på $5 $6",
        "logentry-suppress-block": "$1 {{GENDER:$2|blokkerte}} {{GENDER:$4|$3}} med en utløpstid på $5 $6",
        "logentry-suppress-reblock": "$1 {{GENDER:$2|endret}} blokkeringsinnstillingen for {{GENDER:$4|$3}} med en utløpstid på $5 $6",
        "logentry-import-upload": "$1 {{GENDER:$2|importert}} $3 gjennom filopplastning",
        "mw-widgets-titleinput-description-redirect": "omdiriger til $1",
        "mw-widgets-categoryselector-add-category-placeholder": "Legg til en kategori …",
        "mw-widgets-usersmultiselect-placeholder": "Legg til flere ...",
+       "mw-widgets-titlesmultiselect-placeholder": "Legg til flere …",
        "date-range-from": "Fra dato:",
        "date-range-to": "Til dato:",
        "sessionmanager-tie": "Kan ikke kombinere flere forespørselsautentiseringstyper: $1",
        "passwordpolicies-policy-passwordcannotmatchblacklist": "Passordet kan ikke matche spesifikt svartelistede passord",
        "passwordpolicies-policy-maximalpasswordlength": "Passordet kan maksimalt være på $1 {{PLURAL:$1|tegn}}",
        "passwordpolicies-policy-passwordcannotbepopular": "Passordet kan ikke være {{PLURAL:$1|det populære passordet|i lista over $1 populære passord}}",
-       "easydeflate-invaliddeflate": "Det gitte innholdet er ikke riktig komprimert"
+       "easydeflate-invaliddeflate": "Det gitte innholdet er ikke riktig komprimert",
+       "unprotected-js": "Av sikkerhetsårsaker kan ikke JavaScript lastes fra ubeskyttede sider. Bare skap JavaScript i MediaWiki-navnerommet eller som en brukerunderside"
 }
index aae8f3a..2eababd 100644 (file)
@@ -28,7 +28,6 @@
        "tog-extendwatchlist": "Volglieste uutbreien, zodat alle wiezigingen zichtbaor bin, en niet allinnig de leste wieziging",
        "tog-usenewrc": "Groepeer wiezigingen per zied in \"Leste wiezigingen\" en \"Mien volglieste\"",
        "tog-numberheadings": "Koppen vanzelf nummeren",
-       "tog-showtoolbar": "Laot de warkbalke zien",
        "tog-editondblclick": "Mit dubbelklik bewarken",
        "tog-editsectiononrightclick": "Bewarken van deelziejen meugelik maken mit n rechtermuusklik op n tussenkop",
        "tog-watchcreations": "Spul wa'k anmake op mien volglieste zetten",
index e704dee..703be26 100644 (file)
@@ -25,7 +25,6 @@
        "tog-extendwatchlist": "Oppasslist utwieden, dat se all, un nich blot de jüngsten, wiest",
        "tog-usenewrc": "Utwiedt letzte Ännern (bruukt JavaScript)",
        "tog-numberheadings": "Överschrieven automatsch nummereern",
-       "tog-showtoolbar": "Editeer-Warktüüchlist wiesen",
        "tog-editondblclick": "Sieden mit Dubbelklick ännern (JavaScript)",
        "tog-editsectiononrightclick": "En Afsatz mit en Rechtsklick ännern (Javascript)",
        "tog-watchcreations": "Nee schrevene Sieden op miene Oppasslist setten",
index 89db104..9ba4fee 100644 (file)
@@ -41,7 +41,6 @@
        "tog-extendwatchlist": "निगरानी सूचीलाई सबै परिवर्तनहरू देखाउने गरी बढाउने, हालैको परिवर्तनहरू बाहेक",
        "tog-usenewrc": "पृष्ठका भर्खरका परिवर्तन र अवलोकन सूचीको आधारमा सामूहिक परिवर्तनहरू",
        "tog-numberheadings": "शीर्षकहरूलाई स्वत:अङ्कित गर्नुहोस्",
-       "tog-showtoolbar": "सम्पादन औजारबट्टा देखाउने",
        "tog-editondblclick": "दोहोरो क्लिकमा पृष्ठ सम्पादन गर्ने",
        "tog-editsectiononrightclick": "शीर्षकमा दाहिने क्लिकद्वारा खण्ड सम्पादन सक्षम पार्ने",
        "tog-watchcreations": "मेरो निगरानी सूचीमा मैले सृजना गरेको पृष्ठ र अपलोड जोड्ने",
index f104bc5..a0df914 100644 (file)
@@ -92,7 +92,8 @@
                        "Optilete",
                        "Goefie",
                        "AHmed Khaled",
-                       "Jeroen N"
+                       "Jeroen N",
+                       "Bdijkstra"
                ]
        },
        "tog-underline": "Verwijzingen onderstrepen:",
        "tog-extendwatchlist": "Volglijst uitbreiden om alle wijzigingen te tonen, en niet alleen de recentste",
        "tog-usenewrc": "Wijzigingen per pagina groeperen in recente wijzigingen en op mijn volglijst",
        "tog-numberheadings": "Koppen automatisch nummeren",
-       "tog-showtoolbar": "Bewerkingswerkbalk weergeven",
        "tog-editondblclick": "Dubbelklikken voor bewerken",
        "tog-editsectiononrightclick": "Bewerken van deelpagina’s mogelijk maken met een rechtermuisklik op een tussenkop",
        "tog-watchcreations": "Pagina's die ik aanmaak en bestanden die ik upload aan mijn volglijst toevoegen",
        "badarticleerror": "Deze handeling kan niet op deze pagina worden uitgevoerd.",
        "cannotdelete": "De pagina of het bestand \"$1\" kon niet verwijderd worden.\nMogelijk is deze al door iemand anders verwijderd.",
        "cannotdelete-title": "Pagina \"$1\" kan niet verwijderd worden",
+       "delete-scheduled": "De pagina \"$1\" staat voor verwijdering ingepland.\nEen ogenblik geduld alstublieft.",
        "delete-hook-aborted": "Het verwijderen is afgebroken door een hook.\nEr is geen toelichting beschikbaar.",
        "no-null-revision": "Het was niet mogelijk een lege nieuwe versie te maken voor de pagina \"$1\"",
        "badtitle": "Ongeldige paginanaam",
        "subject-preview": "Voorvertoning van het onderwerp:",
        "previewerrortext": "Er is een fout opgetreden tijdens het weergeven van uw wijzigingen.",
        "blockedtitle": "Gebruiker is geblokkeerd",
+       "blocked-email-user": "<strong>Uw gebruikersnaam is geblokkeerd voor het versturen van e-mail. U kunt nog steeds andere pagina's op deze wiki bewerken.</strong> U kunt de volledige details van de blokkade bekijken op de pagina met uw [[Special:MyContributions|gebruikersbijdragen]].\n\nDe blokkade is opgelegd door $1.\n\nDe opgegeven reden is <em>$2</em>.\n\n* Aanvang blokkade: $8\n* Einde blokkade: $6\n* Bedoeld te blokkeren: $7\n* Blokkadenummer #$5",
+       "blockedtext-partial": "<strong>Uw gebruikersnaam of IP-adres is geblokkeerd voor het maken van veranderingen aan deze pgina. U kunt nog steeds andere pagina's op deze wiki bewerken.</strong> U kunt de volledige details van de blokkade bekijken op de pagina met uw [[Special:MyContributions|gebruikersbijdragen]].\n\nDe blokkade is opgelegd door $1.\n\nDe opgegeven reden is <em>$2</em>.\n\n* Aanvang blokkade: $8\n* Einde blokkade: $6\n* Bedoeld te blokkeren: $7\n* Blokkadenummer #$5",
        "blockedtext": "'''Uw gebruikersaccount of IP-adres is geblokkeerd.'''\n\nDe blokkade is uitgevoerd door $1.\nDe opgegeven reden is ''$2''.\n\n* Aanvang blokkade: $8\n* Einde blokkade: $6\n* Bedoeld te blokkeren: $7\n\nU kunt contact opnemen met $1 of een andere [[{{MediaWiki:Grouppage-sysop}}|beheerder]] om de blokkade te bespreken.\nU kunt geen gebruik maken van de functie \"{{int:emailuser}}\", tenzij u een geldig e-mailadres hebt opgegeven in uw [[Special:Preferences|voorkeuren]] en het gebruik van deze functie niet geblokkeerd is.\nUw huidige IP-adres is $3 en het blokkadenummer is #$5.\nVermeld alle bovenstaande gegevens als u ergens op deze blokkade reageert.",
        "autoblockedtext": "Uw IP-adres is automatisch geblokkeerd, omdat het gebruikt is door een andere gebruiker, die geblokkeerd is door $1.\nDe opgegeven reden is:\n\n:''$2''\n\n* Aanvang blokkade: $8\n* Einde blokkade: $6\n* Bedoeld te blokkeren: $7\n\nU kunt contact opnemen met $1 of een andere [[{{MediaWiki:Grouppage-sysop}}|beheerder]] om de blokkade te bespreken.\n\nU kunt geen gebruik maken van de functie \"{{int:emailuser}}\", tenzij u een geldig e-mailadres hebt opgegeven in uw [[Special:Preferences|voorkeuren]], en het gebruik van deze functie niet is geblokkeerd.\n\nUw huidige IP-adres is $3 en het blokkadenummer is #$5.\nVermeld alle bovenstaande gegevens als u ergens op deze blokkade reageert.",
        "systemblockedtext": "Uw gebruikersaccount of IP-adres is automatisch geblokkeerd door MediaWiki.\nDe opgegeven reden is:\n\n:<em>$2</em>\n\n* Aanvang blokkade: $8\n* Einde blokkade: $6\n* Bedoeld te blokkeren: $7\n\nUw huidige IP-adres is $3.\nVermeld alle bovenstaande gegevens als u ergens op deze blokkade reageert.",
        "prefixindex": "Alle pagina's op voorvoegsel",
        "prefixindex-namespace": "Alle pagina's met het voorvoegsel (naamruimte $1)",
        "prefixindex-submit": "Weergeven",
-       "prefixindex-strip": "Voorvoegsel in lijst verwijderen",
+       "prefixindex-strip": "Verberg het voorvoegsel in de resultaten",
        "shortpages": "Korte pagina's",
        "longpages": "Lange pagina's",
        "deadendpages": "Pagina's zonder koppelingen",
        "ipb-disableusertalk": "Deze gebruiker de mogelijkheid ontnemen om tijdens de blokkade de eigen overlegpagina te bewerken",
        "ipb-change-block": "De gebruiker opnieuw blokkeren met deze instellingen",
        "ipb-confirm": "Blokkade bevestigen",
+       "ipb-sitewide": "Sitebreed",
+       "ipb-partial": "Gedeeltelijk",
+       "ipb-type-label": "Type",
+       "ipb-pages-label": "Pagina's",
        "badipaddress": "Geen geldig IP-adres",
        "blockipsuccesssub": "De blokkering is ingesteld",
        "blockipsuccesstext": "[[Special:Contributions/$1|$1]] is geblokkeerd.<br />\nZie de [[Special:BlockList|blokkadelijst]] voor recente blokkades.",
        "createaccountblock": "aanmaken accounts uitgeschakeld",
        "emailblock": "e-mail uitgeschakeld",
        "blocklist-nousertalk": "kan eigen overlegpagina niet bewerken",
+       "blocklist-editing": "bewerken",
+       "blocklist-editing-sitewide": "bewerken (gehele wiki)",
        "ipblocklist-empty": "De blokkeerlijst is leeg.",
        "ipblocklist-no-results": "Dit IP-adres of deze gebruikersnaam is niet geblokkeerd.",
        "blocklink": "blokkeren",
        "confirm-mcrundo-title": "Een wijziging ongedaan maken",
        "mcrundofailed": "Ongedaan maken mislukt",
        "mcrundo-missingparam": "Er ontbreken nodige parameters in het verzoek.",
+       "mcrundo-changed": "De pagina is gewijzigd sinds u de veranderingen hebt bekeken. Beoordeel alstublieft de nieuwe wijziging.",
        "mcrundo-parse-failed": "Kon de nieuwe versie niet verwerken: $1",
        "quotation-marks": "\"$1\"",
        "imgmultipageprev": "← vorige pagina",
        "logentry-block-block": "$1 {{GENDER:$2|heeft}} {{GENDER:$4|$3}} geblokkeerd voor de duur van $5 $6",
        "logentry-block-unblock": "$1 {{GENDER:$2|heeft}} {{GENDER:$4|$3}} gedeblokkeerd",
        "logentry-block-reblock": "$1 {{GENDER:$2|heeft}} de blokkade voor {{GENDER:$4|$3}} aangepast. Deze vervalt nu op $5 $6",
+       "logentry-partialblock-block": "$1 heeft {{GENDER:$4|$3}} {{GENDER:$2|geblokkeerd}} van het bewerken van de {{PLURAL:$8|pagina|pagina's}} $7 met als vervaltijd $5 $6",
+       "logentry-partialblock-reblock": "$1 heeft de blokkade van {{GENDER:$4|$3}} voor het voorkomen van bewerkingen van de {{PLURAL:$8|pagina|pagina's}} $7 {{GENDER:$2|gewijzigd}} met als vervaltijd $5 $6",
+       "logentry-non-editing-block-block": "$1 heeft {{GENDER:$4|$3}} {{GENDER:$2|geblokkeerd}} van het uitvoeren van niet-bewerking gerelateerde handelingen met als vervaltijd $5 $6",
+       "logentry-non-editing-block-reblock": "$1 heeft de blokkade van {{GENDER:$4|$3}} voor het voorkomen van het uitvoeren van niet-bewerking gerelateerde handelingen {{GENDER:$2|gewijzigd}} met als vervaltijd $5 $6",
        "logentry-suppress-block": "$1 {{GENDER:$2|heeft}} {{GENDER:$4|$3}} geblokkeerd voor de duur van $5 $6",
        "logentry-suppress-reblock": "$1 {{GENDER:$2|heeft}} de blokkade voor {{GENDER:$4|$3}} aangepast. Deze vervalt nu op $5 $6",
        "logentry-import-upload": "$1 {{GENDER:$2|heeft}} $3 geïmporteerd via een bestandsupload",
        "mw-widgets-titleinput-description-redirect": "doorverwijzing naar $1",
        "mw-widgets-categoryselector-add-category-placeholder": "Voeg een categorie toe...",
        "mw-widgets-usersmultiselect-placeholder": "Meer toevoegen...",
+       "mw-widgets-titlesmultiselect-placeholder": "Meer toevoegen...",
        "date-range-from": "Vanaf datum:",
        "date-range-to": "Tot datum:",
        "sessionmanager-tie": "Het is niet mogelijk om meerdere authenticatietypen voor verzoeken te combineren: $1.",
        "passwordpolicies-policy-passwordcannotmatchusername": "Wachtwoord mag niet hetzelfde zijn als de gebruikersnaam",
        "passwordpolicies-policy-passwordcannotmatchblacklist": "Wachtwoord mag niet overeenkomen met wachtwoorden op de zwarte lijst",
        "passwordpolicies-policy-maximalpasswordlength": "Wachtwoord moet minder dan $1 {{PLURAL:$1|teken|tekens}} bevatten",
-       "passwordpolicies-policy-passwordcannotbepopular": "Watchwoord mag niet {{PLURAL:$1|overeenkomen met het bekende wachtwoord|voorkomen in de lijst met $1 bekende wachtwoorden}}"
+       "passwordpolicies-policy-passwordcannotbepopular": "Watchwoord mag niet {{PLURAL:$1|overeenkomen met het bekende wachtwoord|voorkomen in de lijst met $1 bekende wachtwoorden}}",
+       "unprotected-js": "Vanwege veiligheidsredenen kan er geen JavaScript geladen worden vanaf onbeveiligde pagina's. Gelieve alleen JavaScript pagina's aan te maken in de MediaWiki: naamruimte of als een subpagina van een gebruikerspagina."
 }
index 6959f88..10ff132 100644 (file)
@@ -38,7 +38,6 @@
        "tog-extendwatchlist": "Utvid overvakingslista til å vise alle endringane, ikkje berre dei siste",
        "tog-usenewrc": "Grupper endringar etter side i siste endringane og på overvakingslista",
        "tog-numberheadings": "Vis nummererte overskrifter",
-       "tog-showtoolbar": "Vis endringsverktøyline",
        "tog-editondblclick": "Endre sider med dobbeltklikk",
        "tog-editsectiononrightclick": "Endre avsnitt ved å høgreklikke på avsnittsoverskrifter",
        "tog-watchcreations": "Legg til sidene eg opprettar og filene eg lastar opp på overvakingslista mi",
        "search-redirect": "(omdirigering frå $1)",
        "search-section": "(bolken $1)",
        "search-category": "(kategorien $1)",
+       "search-file-match": "(passar med filinnhald)",
        "search-suggest": "Meinte du: «$1»",
        "search-rewritten": "Viser resultat for $1. Søk i staden etter $2.",
        "search-interwiki-caption": "Resultat frå systerprosjekt",
index 38e4253..751a098 100644 (file)
@@ -10,7 +10,6 @@
        },
        "tog-underline": "Tsenya mothalafase go dihlomaganyo:",
        "tog-hideminor": "Fihla diphetogo tše nnyenyane",
-       "tog-showtoolbar": "Bontšha ''toolbar'' yago fetola",
        "tog-editondblclick": "Fetola matlakala ka go thathapa gabedi",
        "tog-editsectiononrightclick": "Dumella go fetola sekgao ka thathapa ka lagoja thaetlele ya sekgao",
        "tog-watchcreations": "Tsenya matlaka a mafsa ao ke a ngwalago go lenano laka la ditlhapetšo",
index 6913368..bf08d5c 100644 (file)
@@ -32,7 +32,6 @@
        "tog-extendwatchlist": "Espandir la lista de seguiment per afichar totas las modificacions e non pas solament las mai recentas",
        "tog-usenewrc": "Agropar los cambiaments per pagina dins los darrièrs cambiaments e la lista de seguiment",
        "tog-numberheadings": "Numerotar automaticament los títols",
-       "tog-showtoolbar": "Far veire la barra d'aisinas de modificacion (necessita JavaScript)",
        "tog-editondblclick": "Modificar de paginas amb un clic doble (necessita JavaScript)",
        "tog-editsectiononrightclick": "Activar la modificacion de seccions en fasent un clic dreit suls títols (necessita JavaScript)",
        "tog-watchcreations": "Apondre las paginas que creï e los fichièrs qu'impòrti a ma lista de seguiment",
index c9dc411..8a54239 100644 (file)
@@ -18,7 +18,6 @@
        "tog-extendwatchlist": "Levitä valvonduluvettelo ku ozuttua kai muutokset, ei vaiku jälgimäzii",
        "tog-usenewrc": "Ryhmittele muutokset sivun mugah uuzien muutoksien listal da valvonduluvettelol",
        "tog-numberheadings": "Automuattizesti numeroija kirjutuksien nimet",
-       "tog-showtoolbar": "Ozuta ruadovälinehpalki",
        "tog-editondblclick": "Edituiče sivuloi kaksoispainalduksel",
        "tog-editsectiononrightclick": "Kohendele sektsielöi painamal sektsien nimie hiiren oigiel näppäimel",
        "tog-watchcreations": "Ližiä minun luajitut sivut da ližätyt failat minun valvonduluvetteloh",
index 340a33a..a1417bd 100644 (file)
@@ -27,7 +27,6 @@
        "tog-extendwatchlist": "କେବଳ ନଗଦ ହିଁ ନୁହେଁ, ସବୁଯାକ ବଦଳକୁ ଦେଖାଇବା ପାଇଁ ଦେଖଣାତାଲିକାକୁ ପୂରା ଦେଖାଇବେ",
        "tog-usenewrc": "ନଗଦ ବଦଳରେ ପୃଷ୍ଠା ଅନୁଯାୟୀ ଗୋଷ୍ଠୀ ବଦଳ ଏବଂ ଦେଖଣା",
        "tog-numberheadings": "ଆପେଆପେ-ସଂଖ୍ୟାର ନାମଗୁଡ଼ିକ",
-       "tog-showtoolbar": "ସମ୍ପାଦନା ଟୁଲବାର ଦେଖାଇବେ",
        "tog-editondblclick": "ଦୁଇଥର କ୍ଲିକରେ ପୃଷ୍ଠା ବଦଳାଇବେ",
        "tog-editsectiononrightclick": "ବିଭାଗ ନାମରେ ଡାହାଣ କ୍ଲିକ କରି ବିଭାଗ ସମ୍ପାଦନାକୁ ସଚଳ କରିବେ",
        "tog-watchcreations": "ମୋ ତିଆରି ପୃଷ୍ଠାସବୁକୁ ଏବଂ ମୋ ଅପଲୋଡ଼ଗୁଡ଼ିକୁ ମୋର ଦେଖଣାତାଲିକାରେ ଯୋଡ଼ନ୍ତୁ",
index 369e367..7be98b5 100644 (file)
@@ -18,7 +18,6 @@
        "tog-extendwatchlist": "Стырдæр цæстдард номхыгъд алы ивдимæ дæр, æрмæст фæстагимæ нал.",
        "tog-usenewrc": "Фæстаг æмæ цæстдард ивдтытæ фарсмæ гæсгæ иу кæнæт (домы JavaScript)",
        "tog-numberheadings": "Сæртæн хæдæвзæргæ номыр æвæрын",
-       "tog-showtoolbar": "Æвдисын ивыны панел (домы JavaScript)",
        "tog-editondblclick": "Фæрстæ дыкъæппæй ив (домы JavaScript)",
        "tog-editsectiononrightclick": "Хайы сæргондыл рахиз æркъæппæй ивыны фадат баиу кæнын",
        "tog-watchcreations": "Æз цы фæрстæ аразын æмæ цы файлтæ бавгæнын, уыдон мæ цæстдард уæнт.",
index e9ed794..f4874f7 100644 (file)
@@ -38,7 +38,6 @@
        "tog-extendwatchlist": "ਸਿਰਫ਼ ਤਾਜ਼ਾ ਹੀ ਨਹੀਂ, ਸਗੋਂ ਸਾਰੀਆਂ ਤਬਦੀਲੀਆਂ ਨੂੰ ਵਖਾਉਣ ਲਈ ਨਿਗਰਾਨੀ-ਲਿਸਟ ਨੂੰ ਵਧਾਓ",
        "tog-usenewrc": "ਹਾਲੀਆ ਤਬਦੀਲੀਆਂ ਅਤੇ ਨਿਗਰਾਨੀ-ਲਿਸਟ ਵਿੱਚ ਸਫ਼ੇ ਮੁਤਾਬਕ ਤਬਦੀਲੀਆਂ ਦੇ ਗਰੁੱਪ ਬਣਾਓ (ਜਾਵਾਸਕਰਿਪਟ ਲੋੜੀਂਦੀ ਹੈ)",
        "tog-numberheadings": "ਆਟੋ-ਨੰਬਰ ਸਿਰਨਾਵੇਂ",
-       "tog-showtoolbar": "ਸੋਧ ਸੰਦਬਕਸਾ ਵੇਖੋ",
        "tog-editondblclick": "ਦੋ ਵਾਰ ਕਲਿੱਕ ਕਰਨ 'ਤੇ ਸਫ਼ੇ ਸੋਧੋ",
        "tog-editsectiononrightclick": "ਸੈਕਸ਼ਨ ਸਿਰਲੇਖਾਂ ’ਤੇ ਸੱਜੀ ਕਲਿੱਕ ਨਾਲ਼ ਸੋਧ ਚਾਲੂ ਕਰੋ (ਜਾਵਾਸਕਰਿਪਟ ਲੋੜੀਂਦੀ ਹੈ)",
        "tog-watchcreations": "ਮੇਰੇ ਵਲੋਂ ਬਣਾਏ ਗਏ ਸਫ਼ੇ ਅਤੇ ਅੱਪਲੋਡ ਕੀਤੀਆਂ ਫ਼ਾਈਲਾਂ ਮੇਰੀ ਨਿਗਰਾਨੀ-ਲਿਸਟ ਵਿੱਚ ਪਾਓ",
index 679981d..bbfe052 100644 (file)
        "enhancedrc-history": "awaran",
        "recentchanges": "Sampot ran dinuma",
        "recentchanges-summary": "Tontonen so sankasampotan ran binalo ed ayan wiki diad panamegley to yan bolong.",
+       "recentchanges-feed-description": "Tontonen so sankasampotan ran binalo ed ayan wiki diad panamegley to yan feed.",
        "recentchanges-label-minor": "Melag yan dinuma",
        "recentchanges-submit": "Ipanengneng",
        "rcfilters-activefilters-hide": "Iyamot",
        "anoncontribs": "Saray entolong",
        "year": "Taon:",
        "sp-contributions-newbies-sub": "Para balo ran account",
+       "sp-contributions-blocklog": "log na aper",
        "sp-contributions-talk": "tongtongan",
        "sp-contributions-submit": "Anapen",
        "whatlinkshere": "Antoray akaturo dia",
        "ipbreason": "Katonongan",
        "ipbsubmit": "Isebel ed sayan manag-usar",
        "badipaddress": "Aga nayarin IP address",
+       "unblockip": "Ekalen so aper para ed manguusar",
        "ipusubmit": "Aga la isebel so ayan address",
+       "unblocked": "Inekal so aper para ed [[User:$1|$1]].",
        "autoblocklist-submit": "Anapen",
        "ipblocklist": "Listaan na saray sebel ran IP address san username",
        "blocklist-reason": "Katonongan",
        "ipblocklist-submit": "Anapen",
        "expiringblock": "nabalang no $1 $2",
        "blocklink": "aperen",
+       "unblocklink": "ekalen so aper",
        "contribslink": "saray entolong to",
+       "unblocklogentry": "nakal so aper na $1",
        "block-log-flags-noemail": "inaper so e-mail",
        "block-log-flags-nousertalk": "aga naduma so sarilin bolong para tongtongan",
        "move-page-legend": "Iyales so bolong",
index ade2ce4..449c63d 100644 (file)
@@ -20,7 +20,6 @@
        "tog-extendwatchlist": "Dagdagan la reng babanten ba lang palto deng anggang mialilan, aliwa mu deng pekabayu.",
        "tog-usenewrc": "↓mesanting la reng bayung mengayalili (JavaScript)",
        "tog-numberheadings": "Tambing lang dinan nomiru deng pamagat",
-       "tog-showtoolbar": "Ipakit ya panaliling toolbar",
        "tog-editondblclick": "Iyalilan la reng bulung king dobling klik",
        "tog-editsectiononrightclick": "Paganan ya ing pamag-edit seksiyon (section editing) kapamilatan ning pamag right click kareng pamagat da reng seksiyon",
        "tog-watchcreations": "Idagdag la deng bulung a lelengan ku kareng babanten",
index 9e3fddb..e6f3335 100644 (file)
@@ -13,7 +13,6 @@
        "tog-newpageshidepatrolled": "Muche ches paches pormenées del lisse ed ches nouvèles paches",
        "tog-extendwatchlist": "Étènne l'lisse pou vir tortous ches cangemints, poin seulemint ches nouvieus",
        "tog-numberheadings": "liméro automatique ed ches intétes",
-       "tog-showtoolbar": "Afiquer chés otis pou l'édichon (i feut JavaScript)",
        "tog-editondblclick": "Éditer ches paches aveuc un doube buke (i feut JavaScript)",
        "tog-editsectiononrightclick": "Pérmet l'édichion del sekchion par un droé buke su ch'tite del sekchion (i feut JavaScript)",
        "tog-watchcreations": "Ajouter chés paches qu'éj crée et pi chés fichiés qu'éj téléquertche édseur em lisse à suire",
index 3aa864a..4ee1f81 100644 (file)
@@ -15,7 +15,6 @@
        "tog-hideminor": "Vaschdeggl klääne Beawaidunge vunde „Ledschde Ännarunge“",
        "tog-hidepatrolled": "Vaschdeggl gsischdede Ännarunge inde „Ledschde Ännarunge“",
        "tog-extendwatchlist": "Zaisch alle Ännarunge unn nedd nua die ledschde",
-       "tog-showtoolbar": "Weagzaisch fas Schaffe zaische",
        "tog-previewontop": "VoAbligg owwahalwb vum Beawaidungsfenschda zaische",
        "tog-previewonfirst": "Zaischn Voabligg baim erschdemol Schaffe",
        "tog-oldsig": "Voahonneni Unnaschrifd",
index 72fe13b..f57e84b 100644 (file)
        "tog-extendwatchlist": "Pokazuj na liście obserwowanych wszystkie zmiany, nie tylko ostatnie",
        "tog-usenewrc": "Grupuj zmiany według stron na liście ostatnich zmian i obserwowanych",
        "tog-numberheadings": "Automatyczna numeracja nagłówków",
-       "tog-showtoolbar": "Pokaż pasek narzędzi",
        "tog-editondblclick": "Podwójne kliknięcie rozpoczyna edycję",
        "tog-editsectiononrightclick": "Kliknięcie prawym klawiszem myszy na tytule sekcji rozpoczyna jej edycję",
        "tog-watchcreations": "Dodawaj do obserwowanych tworzone przeze mnie strony oraz przesyłane przeze mnie pliki",
        "subject-preview": "Podgląd tematu:",
        "previewerrortext": "Wystąpił błąd podczas próby podglądu Twoich zmian.",
        "blockedtitle": "Użytkownik jest zablokowany",
+       "blocked-email-user": "<strong>Twoje konto zostało wyłączone z wysyłania wiadomości emaili innym użytkownikom. Wciąż możesz edytować inne strony na wiki.</strong> Więcej szczegółów na temat blokady znajdziesz na swojej [[Special:MyContributions|stroni wkładu]].\n\nBlokada została nałożona przez $1.\n\nPodany powód to: <em>$2</em>.\n\n* Początek blokady: $8\n* Wygaśnięcie blokady: $6\n* Zablokowany został: $7\n* Identyfikator blokady: #$5",
+       "blockedtext-partial": "<strong>Twoje konto lub adres IP zostało wyłączone z dokonywania zmian na tej stronie. Wciąż możesz edytować inne strony na wiki.</strong> Więcej szczegółów na temat blokady znajdziesz na swojej [[Special:MyContributions|stroni wkładu]].\n\nBlokada została nałożona przez $1.\n\nPodany powód to: <em>$2</em>.\n\n* Początek blokady: $8\n* Wygaśnięcie blokady: $6\n* Zablokowany został: $7\n* Identyfikator blokady: #$5",
        "blockedtext": "<strong>Twoje konto lub adres IP zostały zablokowane.</strong>\n\nBlokada została nałożona przez $1.\nPodany powód to: <em>$2</em>.\n\n* Początek blokady: $8\n* Wygaśnięcie blokady: $6\n* Zablokowany został: $7\n\nW celu wyjaśnienia przyczyny zablokowania możesz się skontaktować z $1 lub innym [[{{MediaWiki:Grouppage-sysop}}|administratorem]].\nNie możesz użyć funkcji „{{int:emailuser}}”, jeśli brak jest poprawnego adresu e‐mail w Twoich [[Special:Preferences|preferencjach]] lub jeśli taka możliwość została Ci zablokowana.\nTwój obecny adres IP to $3, a numer identyfikacyjny blokady to #$5.\nProsimy o podanie obu tych informacji przy wyjaśnianiu blokady.",
        "autoblockedtext": "Ten adres IP został zablokowany automatycznie, gdyż korzysta z niego inny użytkownik, zablokowany przez administratora $1.\nPowód blokady:\n\n:<em>$2</em>\n\n* Początek blokady: $8\n* Wygaśnięcie blokady: $6\n* Zablokowany został: $7\n\nMożesz skontaktować się z $1 lub jednym z pozostałych [[{{MediaWiki:Grouppage-sysop}}|administratorów]] w celu uzyskania informacji o blokadzie.\n\nNie możesz użyć funkcji „{{int:emailuser}}”, jeśli brak jest poprawnego adresu e‐mail w Twoich [[Special:Preferences|preferencjach]] lub jeśli taka możliwość została Ci zablokowana.\n\nTwój obecny adres IP to $3, a numer identyfikacyjny blokady to #$5.\nProsimy o podanie obu tych numerów przy wyjaśnianiu blokady.",
        "systemblockedtext": "Twoja nazwa użytkownika lub adres IP zostały automatycznie zablokowane przez MediaWiki.\nPodany powód to:\n\n:<em>$2</em>\n\n* Początek blokady: $8\n* Wygaśnięcie blokady: $6\n* Zamierzano zablokować: $7\n\nTwój obecny adres IP to $3.\nProsimy o dołączenie powyższych szczegółów w jakichkolwiek zadawanych pytaniach.",
        "prefixindex": "Wszystkie strony o prefiksie",
        "prefixindex-namespace": "Wszystkie strony z prefiksem (przestrzeń nazw $1)",
        "prefixindex-submit": "Pokaż",
-       "prefixindex-strip": "Ukryj prefiks na liście wyników",
+       "prefixindex-strip": "Ukryj prefiks w wynikach",
        "shortpages": "Najkrótsze strony",
        "longpages": "Najdłuższe strony",
        "deadendpages": "Strony bez linków wewnętrznych",
        "ipb-disableusertalk": "Zablokuj możliwość edytowania przez tego użytkownika własnej strony dyskusji w czasie trwania blokady.",
        "ipb-change-block": "Zmień ustawienia blokady",
        "ipb-confirm": "Potwierdzam blokadę",
+       "ipb-sitewide": "Globalna",
+       "ipb-partial": "Częściowa",
+       "ipb-type-label": "Rodzaj",
+       "ipb-pages-label": "Strony",
        "badipaddress": "Niepoprawny adres IP",
        "blockipsuccesssub": "Zablokowanie powiodło się",
        "blockipsuccesstext": "[[Special:Contributions/$1|$1]] {{GENDER:$1|został zablokowany|została zablokowana}}.<br />\nPrzejdź do [[Special:BlockList|listy blokad]], by przejrzeć blokady.",
        "tag-mw-rollback": "Wycofanie zmian",
        "tag-mw-rollback-description": "Edycja, która przywraca poprzednią wersję przy użyciu funkcji cofania zmian (rollback)",
        "tag-mw-undo": "Anulowanie edycji",
-       "tag-mw-undo-description": "Edycje, które są wycofaniem poprzednich edycji przy użyciu linku \"anuluj edycję\"",
+       "tag-mw-undo-description": "Edycje, które są wycofaniem poprzednich edycji przy użyciu linku „anuluj edycję”",
        "tags-title": "Znaczniki",
        "tags-intro": "Na tej stronie znajduje się lista znaczników, którymi oprogramowanie może oznaczyć edycje, oraz ich opisy.",
        "tags-tag": "Nazwa znacznika",
        "logentry-block-block": "$1 {{GENDER:$2|zablokował|zablokowała|zablokował(a)}} {{GENDER:$4|$3}}, czas blokady: $5 $6",
        "logentry-block-unblock": "$1 {{GENDER:$2|zdjął|zdjęła}} blokadę z {{GENDER:$4|$3}}",
        "logentry-block-reblock": "$1 {{GENDER:$2|zmienił|zmieniła}} ustawienia blokady dla {{GENDER:$4|$3}}, czas blokady: $5 $6",
+       "logentry-partialblock-block": "$1 {{GENDER:$2|wyłączył|wyłączyła}} {{GENDER:$4|$3}} z edytowania {{PLURAL:$8|strony|stron}} $7, czas blokady: $5 $6",
+       "logentry-partialblock-reblock": "$1 {{GENDER:$2|zmienił|zmieniła}} ustawienia wyłączenia {{GENDER:$4|$3}} z edytowania {{PLURAL:$8|strony|stron}} $7, czas blokady: $5 $6",
+       "logentry-non-editing-block-block": "$1 {{GENDER:$2|zablokował|zablokowała}} {{GENDER:$4|$3}} wykonywanie operacji nieedycyjnych, czas blokady: $5 $6",
+       "logentry-non-editing-block-reblock": "$1 {{PLURAL:$2|zmienił|zmieniła}} ustawienia blokady wykonywania operacji nieedycyjnych {{GENDER:$4|$3}}, czas blokady: $5 $6",
        "logentry-suppress-block": "$1 {{GENDER:$2|zablokował|zablokowała}} {{GENDER:$4|$3}}, czas blokady: $5 $6",
        "logentry-suppress-reblock": "$1 {{GENDER:$2|zmienił|zmieniła}} ustawienia blokady dla {{GENDER:$4|$3}}, czas blokady: $5 $6",
        "logentry-import-upload": "$1 {{GENDER:$2|zaimportował|zaimportowała}} $3 poprzez przesłanie pliku",
        "mw-widgets-titleinput-description-redirect": "przekierowanie do $1",
        "mw-widgets-categoryselector-add-category-placeholder": "Dodaj kategorię...",
        "mw-widgets-usersmultiselect-placeholder": "Dodaj więcej...",
+       "mw-widgets-titlesmultiselect-placeholder": "Dodaj więcej…",
        "date-range-from": "Od daty:",
        "date-range-to": "Do daty:",
        "sessionmanager-tie": "Nie można łączyć kilku rodzajów uwierzytelniania dla zapytania: $1.",
        "passwordpolicies-policy-minimumpasswordlengthtologin": "Aby się zalogować, hasło musi mieć co najmniej $1 {{PLURAL:$1|znak|znaki|znaków}}",
        "passwordpolicies-policy-passwordcannotmatchusername": "Hasło nie może być takie samo jak nazwa użytkownika",
        "passwordpolicies-policy-maximalpasswordlength": "Hasło musi mieć mniej niż $1 {{PLURAL:$1|znak|znaki|znaków}}",
-       "passwordpolicies-policy-passwordcannotbepopular": "Hasło nie może być {{PLURAL:$1|popularne|na liście $1 popularnych haseł}}"
+       "passwordpolicies-policy-passwordcannotbepopular": "Hasło nie może być {{PLURAL:$1|popularne|na liście $1 popularnych haseł}}",
+       "unprotected-js": "Ze względów bezpieczeństwa kod JavaScript nie może zostać załadowany z niezabezpieczonych stron. Prosimy dodawać JavaScript w przestrzeni MediaWiki lub jako podstronę strony użytkownika."
 }
index fcd5b19..78b9847 100644 (file)
@@ -31,7 +31,6 @@
        "tog-extendwatchlist": "Slarghé la lista ëd ròba che as ten sot-euj an manera che a la smon-a tute le modìfiche, nen mach j'ùltime",
        "tog-usenewrc": "Argropré le modìfiche për pàgina ant j'ùltime modìfiche e ant la lista dla ròba ch'as ten sot-euj",
        "tog-numberheadings": "Tìtoj ëd paràgraf<br />che as nùmero daspërlor",
-       "tog-showtoolbar": "Smon-e la bara dj'utiss ëd modìfica",
        "tog-editondblclick": "Dobia sgnacà për modifiché la pàgina",
        "tog-editsectiononrightclick": "Abilité la modìfica dle session ën sgnacand-je ansima ai tìtoj col tast drit dël rat",
        "tog-watchcreations": "Gionté le pàgine che i creo mi e j'archivi che i cario mi a la lista ëd lòn che im ten-o sot-euj",
index 449de37..249b0d1 100644 (file)
@@ -28,7 +28,6 @@
        "tog-extendwatchlist": "نظر تھلے رکھے صفحے نوں ودھاو, تاں جے اوہ تبدیلیاں جیڑیاں کم دے قابل نیں ویکھیاں جا سکن",
        "tog-usenewrc": "نویاں تبدیلیاں اتے میری اکھ تھلے لسٹ وچ صفحہ وار گروپ تبدیلیاں",
        "tog-numberheadings": "آپ نمبر دین والیاں سرخیاں",
-       "tog-showtoolbar": "ایڈٹ ٹولبار وکھاؤ",
        "tog-editondblclick": "صفیاں تے ڈبل کلک کرن تے تبدیلیاں لیاؤ",
        "tog-editsectiononrightclick": "سیکشن سرخی تے تبدیلی لیاؤ سجے کلک نال",
        "tog-watchcreations": "صفے جیہڑے میں بناندا واں تے جیہڑیاں فائیلاں میں چڑھائواں اوہ میری اکھ تھلے لسٹ چ کر دیو",
index 27f1641..14e9e04 100644 (file)
@@ -16,7 +16,6 @@
        "tog-extendwatchlist": "Waidinnais en listin stēisan nadirītan wissans, ni tēr panzdaumans kitawīdinsnans",
        "tog-usenewrc": "Tērpaus plattinsenin stēisan panzdauman kitawīdinsnan (izkīnina JavaScript)",
        "tog-numberheadings": "Autōmatiska galwasrīndan nummerinsna",
-       "tog-showtoolbar": "Waidinnais sawinzlin stēisan pagaptin (JavaScript)",
        "tog-editondblclick": "Redigīs pāusans pra dwigubban pellis gnesnan (JavaScript)",
        "tog-editsectiononrightclick": "Ermazīnginais redigīsnan stēisan pāusas sekciōnin pra tikrōman pellis knuppas gnesnan na tenesses tītelin",
        "tog-watchcreations": "Preidāis pāusans kawīdans as teīke prei majjan listin stēisan nadirītan",
index 69f317b..0440396 100644 (file)
@@ -21,7 +21,6 @@
        "tog-extendwatchlist": "يوازې د وروستني بدلونونو د ښکاره کولو لپاره نه بلکه د ټولو بدلونونو د ښکاره کولو لپاره کتنلړ غځول",
        "tog-usenewrc": "په کتنلړ او وروستي بدلونو مخ باندې ډله ايز بدلونونه",
        "tog-numberheadings": "د سرليکونو خپلکاره شمېرايښودنه",
-       "tog-showtoolbar": "د سمون اوزارپټه ښکاره کول",
        "tog-editondblclick": "په دوه کلېک سره د مخونو سمون",
        "tog-editsectiononrightclick": "د ليکنې د يوې برخې په سرليک ښي کلېک کول د هغې برخې سمون چارنوي",
        "tog-watchcreations": "زما کتنلړ کې دې هغه مخونه چې زه يې جوړوم او هغه دوتنې چې زه يې پورته کوم ورگډې شي",
index 1401c24..7feae69 100644 (file)
        "tog-extendwatchlist": "Expandir a lista de páginas vigiadas para mostrar todas as mudanças, não apenas as mais recentes",
        "tog-usenewrc": "Agrupar alterações por páginas nas mudanças recentes e nas páginas vigiadas",
        "tog-numberheadings": "Auto-numerar cabeçalhos",
-       "tog-showtoolbar": "Mostrar barra de ferramentas de edição",
        "tog-editondblclick": "Editar páginas no clique duplo",
        "tog-editsectiononrightclick": "Habilitar edição de seção por clique com o botão direito no título da seção (requer JavaScript)",
        "tog-watchcreations": "Adicionar as páginas e arquivos que \neu criar à minha lista de páginas vigiadas",
        "subject-preview": "Previsão do assunto/título:",
        "previewerrortext": "Ocorreu um erro ao tentar pré-visualizar suas alterações.",
        "blockedtitle": "O usuário está bloqueado",
+       "blocked-email-user": "<strong>O seu nome de usuário recebeu um bloqueio que impede o envio de e-mail. Pode, ainda assim, editar outras páginas desta wiki.</strong> Os detalhes completos do bloqueio podem ser vistos nas [[Special:MyContributions|contribuições da conta]].\n\nO bloqueio foi feito por $1.\n\nO motivo apresentado é <em>$2</em>.\n\n* Início do bloqueio: $8\n* Expiração do bloqueio: $6\n* Alvo especificado: $7\n* Identificador do bloqueio #$5",
+       "blockedtext-partial": "<strong>O seu nome de usuário ou endereço IP recebeu um bloqueio que o impede de fazer alterações a esta página. Pode, ainda assim, editar outras páginas desta wiki.</strong> Os detalhes completos do bloqueio podem ser vistos nas [[Special:MyContributions|contribuições da conta]].\n\nO bloqueio foi feito por $1.\n\nO motivo apresentado é <em>$2</em>.\n\n* Início do bloqueio: $8\n* Expiração do bloqueio: $6\n* Alvo especificado: $7\n* Identificador do bloqueio #$5",
        "blockedtext": "<strong>O seu nome de usuário ou endereço IP foram bloqueados.</strong>\n\nO bloqueio foi realizado por $1.\nO motivo apresentado foi <em>$2</em>.\n\n* Início do bloqueio: $8\n* Expiração do bloqueio: $6\n* Destinatário do bloqueio: $7\n\nPode contactar $1 ou outro [[{{MediaWiki:Grouppage-sysop}}|administrador]] para discutir o bloqueio.\nNote que para utilizar a funcionalidade \"{{int:emailuser}}\" precisa de ter um endereço de e-mail válido nas suas [[Special:Preferences|preferências]] e de não lhe ter sido bloqueado o uso desta funcionalidade.\nO seu endereço IP neste momento é $3 e a identificação (ID) do bloqueio é #$5.\nInclua todos os detalhes acima em quaisquer contatos relacionados com este bloqueio, por favor.",
        "autoblockedtext": "O seu endereço IP foi bloqueado de forma automática porque foi utilizado recentemente por outro usuário, o qual foi bloqueado por $1.\nO motivo apresentado foi:\n\n:<em>$2</em>\n\n* Início do bloqueio: $8\n* Expiração do bloqueio: $6\n* Destinatário do bloqueio: $7\n\nPode contactar $1 ou outro [[{{MediaWiki:Grouppage-sysop}}|administrador]] para discutir o bloqueio.\n\nNote que para utilizar a funcionalidade \"{{int:emailuser}}\" precisa de ter um endereço de e-mail válido nas suas [[Special:Preferences|preferências]] e de não lhe ter sido bloqueado o uso desta funcionalidade.\n\nO seu endereço IP neste momento é $3 e a identificação (ID) do bloqueio é #$5.\nInclua todos os detalhes acima em quaisquer contatos relacionados com este bloqueio, por favor.",
        "systemblockedtext": "O seu nome de usuário ou endereço IP foram bloqueados automaticamente pelo MediaWiki.\nO motivo fornecido é:\n\n:<em>$2</em>\n\n* Início do bloqueio: $8\n* Expiração do bloqueio: $6\n* Destinatário do bloqueio: $7\n\nO seu endereço IP atual é $3.\nInclua todos os detalhes acima em quaisquer contatos sobre este assunto, por favor.",
        "prefixindex": "Todas as páginas com prefixo",
        "prefixindex-namespace": "Todas as páginas com prefixo (espaço nominal $1)",
        "prefixindex-submit": "Exibir",
-       "prefixindex-strip": "Remover prefixo",
+       "prefixindex-strip": "Ocultar o prefixo nos resultados",
        "shortpages": "Páginas curtas",
        "longpages": "Páginas longas",
        "deadendpages": "Páginas sem saída",
        "ipb-disableusertalk": "Impedir que este(a) usuário(a) edite a sua página de discussão enquanto estiver bloqueado(a)",
        "ipb-change-block": "Bloquear o usuário novamente com estes parâmetros",
        "ipb-confirm": "Confirmar bloqueio",
+       "ipb-sitewide": "Em todo o site",
+       "ipb-partial": "Parcial",
+       "ipb-type-label": "Tipo",
+       "ipb-pages-label": "Páginas",
        "badipaddress": "Endereço de IP inválido",
        "blockipsuccesssub": "Bloqueio bem sucedido",
        "blockipsuccesstext": "[[Special:Contributions/$1|$1]] foi {{GENDER:$1|bloqueado|bloqueada}}.<br />\nConsulte a [[Special:BlockList|lista de bloqueios]].",
        "createaccountblock": "criação de conta bloqueada",
        "emailblock": "impedido de enviar e-mail",
        "blocklist-nousertalk": "impossibilitado de editar a própria página de discussão",
+       "blocklist-editing": "edição",
+       "blocklist-editing-sitewide": "edição (todo o site)",
        "ipblocklist-empty": "A lista de bloqueios encontra-se vazia.",
        "ipblocklist-no-results": "O endereço de IP ou nome de usuário procurado não se encontra bloqueado.",
        "blocklink": "bloquear",
        "logentry-block-block": "$1 {{GENDER:$2|bloqueou}} {{GENDER:$4|$3}} com um tempo de expiração de $5 $6",
        "logentry-block-unblock": "$1 {{GENDER:$2|desbloqueou}} {{GENDER:$4|$3}}",
        "logentry-block-reblock": "$1 {{GENDER:$2|modificou}} configurações de bloqueio para {{GENDER:$4|$3}} com um tempo de expiração de $5 $6",
+       "logentry-partialblock-block": "$1 {{GENDER:$2|aplicou a}} {{GENDER:$4|$3}} um bloqueio que impede a edição {{PLURAL:$8|da página|das páginas}} $7 com um prazo de expiração de $5 $6",
+       "logentry-partialblock-reblock": "$1 {{GENDER:$2|alterou}} as definições do bloqueio de {{GENDER:$4|$3}} para impedir a edição {{PLURAL:$8|da página|das páginas}} $7 com um prazo de expiração de $5 $6",
+       "logentry-non-editing-block-block": "$1 {{GENDER:$2|aplicou a}} {{GENDER:$4|$3}} um bloqueio que impede as operações que não sejam edições, com um prazo de expiração de $5 $6",
+       "logentry-non-editing-block-reblock": "$1 {{GENDER:$2|alterou}} as definições do bloqueio de {{GENDER:$4|$3}} para impedir as operações que não sejam edições, com um prazo de expiração de $5 $6",
        "logentry-suppress-block": "$1 {{GENDER:$2|bloqueou}} {{GENDER:$4|$3}} com um tempo de expiração de $5 $6",
        "logentry-suppress-reblock": "$1 {{GENDER:$2|modificou}} configurações de bloqueio de {{GENDER:$4|$3}} com um tempo de expiração de $5 $6",
        "logentry-import-upload": "$1 {{GENDER:$2|importado}} $3 por envio de arquivo",
        "mw-widgets-titleinput-description-redirect": "redirecionar para $1",
        "mw-widgets-categoryselector-add-category-placeholder": "Adicionar uma categoria...",
        "mw-widgets-usersmultiselect-placeholder": "Adicionar mais…",
+       "mw-widgets-titlesmultiselect-placeholder": "Adicionar mais…",
        "date-range-from": "Da data:",
        "date-range-to": "Para data:",
        "sessionmanager-tie": "Não é possível combinar vários tipos de autenticação de solicitação: $1.",
        "passwordpolicies-policy-passwordcannotmatchblacklist": "A senha não pode corresponder senhas especificamente na lista negra",
        "passwordpolicies-policy-maximalpasswordlength": "A senha deve ser menor que $1 {{PLURAL:$1|caráter|caracteres}}",
        "passwordpolicies-policy-passwordcannotbepopular": "A senha não pode {{PLURAL:$1|ser a mais popular|estar na lista das $1 palavras-passe mais populares}}",
-       "easydeflate-invaliddeflate": "O conteúdo fornecido não está devidamente comprimido"
+       "easydeflate-invaliddeflate": "O conteúdo fornecido não está devidamente comprimido",
+       "unprotected-js": "Por razões de segurança o JavaScript não pode ser carregado de páginas desprotegidas. Por favor, crie apenas javascript no MediaWiki: namespace ou como uma subpágina do usuário"
 }
index f3ee41d..1eceb9f 100644 (file)
@@ -89,7 +89,6 @@
        "tog-extendwatchlist": "Listagem expandida de todas as mudanças às páginas vigiadas, não apenas das mais recentes",
        "tog-usenewrc": "Agrupar alterações por página nas mudanças recentes e páginas vigiadas",
        "tog-numberheadings": "Numerar cabeçalhos automaticamente",
-       "tog-showtoolbar": "Mostrar barra de edição",
        "tog-editondblclick": "Editar páginas quando houver um clique duplo",
        "tog-editsectiononrightclick": "Possibilitar a edição de secções por clique com o botão direito no título da secção",
        "tog-watchcreations": "Adicionar as páginas e ficheiros que eu criar às minhas páginas vigiadas",
        "and": "&#32;e",
        "faq": "Perguntas frequentes",
        "actions": "Ações",
-       "namespaces": "Domínios",
+       "namespaces": "Espaços nominais",
        "variants": "Variantes",
        "navigation-heading": "Menu de navegação",
        "errorpagetitle": "Erro",
        "subject-preview": "Antevisão do assunto:",
        "previewerrortext": "Ocorreu um erro enquanto tentava antever as suas alterações.",
        "blockedtitle": "O utilizador está bloqueado",
+       "blocked-email-user": "<strong>O seu nome de utilizador recebeu um bloqueio que impede o envio de correio eletrónico. Pode, ainda assim, editar outras páginas desta wiki.</strong> Os detalhes completos do bloqueio podem ser vistos nas [[Special:MyContributions|contribuições da conta]].\n\nO bloqueio foi feito por $1.\n\nO motivo apresentado é <em>$2</em>.\n\n* Início do bloqueio: $8\n* Expiração do bloqueio: $6\n* Alvo especificado: $7\n* Identificador do bloqueio #$5",
+       "blockedtext-partial": "<strong>O seu nome de utilizador ou endereço IP recebeu um bloqueio que o impede de fazer alterações a esta página. Pode, ainda assim, editar outras páginas desta wiki.</strong> Os detalhes completos do bloqueio podem ser vistos nas [[Special:MyContributions|contribuições da conta]].\n\nO bloqueio foi feito por $1.\n\nO motivo apresentado é <em>$2</em>.\n\n* Início do bloqueio: $8\n* Expiração do bloqueio: $6\n* Alvo especificado: $7\n* Identificador do bloqueio #$5",
        "blockedtext": "<strong>O seu nome de utilizador ou endereço IP foram bloqueados.</strong>\n\nO bloqueio foi realizado por $1.\nO motivo apresentado foi <em>$2</em>.\n\n* Início do bloqueio: $8\n* Expiração do bloqueio: $6\n* Destinatário do bloqueio: $7\n\nPode contactar $1 ou outro [[{{MediaWiki:Grouppage-sysop}}|administrador]] para discutir o bloqueio.\nNote que para utilizar a funcionalidade \"{{int:emailuser}}\" precisa de ter um endereço de correio eletrónico válido nas suas [[Special:Preferences|preferências]] e de não lhe ter sido bloqueado o uso desta funcionalidade.\nO seu endereço IP neste momento é $3 e a identificação (ID) do bloqueio é #$5.\nInclua todos os detalhes acima em quaisquer contactos relacionados com este bloqueio, por favor.",
        "autoblockedtext": "O seu endereço IP foi bloqueado de forma automática porque foi utilizado recentemente por outro utilizador, o qual foi bloqueado por $1.\nO motivo apresentado foi:\n\n:<em>$2</em>\n\n* Início do bloqueio: $8\n* Expiração do bloqueio: $6\n* Destinatário do bloqueio: $7\n\nPode contactar $1 ou outro [[{{MediaWiki:Grouppage-sysop}}|administrador]] para discutir o bloqueio.\n\nNote que para utilizar a funcionalidade \"{{int:emailuser}}\" precisa de ter um endereço de correio eletrónico válido nas suas [[Special:Preferences|preferências]] e de não lhe ter sido bloqueado o uso desta funcionalidade.\n\nO seu endereço IP neste momento é $3 e a identificação (ID) do bloqueio é #$5.\nInclua todos os detalhes acima em quaisquer contactos relacionados com este bloqueio, por favor.",
        "systemblockedtext": "O seu nome de utilizador ou endereço IP foram bloqueados automaticamente pelo MediaWiki.\nO motivo fornecido é:\n\n:<em>$2</em>\n\n* Início do bloqueio: $8\n* Expiração do bloqueio: $6\n* Destinatário do bloqueio: $7\n\nO seu endereço IP atual é $3.\nInclua todos os detalhes acima em quaisquer contactos sobre este assunto, por favor.",
        "loginreqlink": "entrar",
        "loginreqpagetext": "Precisa de $1 para ver outras páginas.",
        "accmailtitle": "Palavra-passe enviada.",
-       "accmailtext": "Uma palavra-passe gerada aleatoriamente para [[User talk:$1|$1]] foi enviada para $2.\n\nEla pode ser alterada na página [[Special:ChangePassword|de alteração da palavra-passe]] após iniciar sessão.",
+       "accmailtext": "Uma palavra-passe gerada aleatoriamente para [[User talk:$1|$1]] foi enviada para $2.\n\nEla pode ser alterada na página [[Special:ChangePassword|de alteração da palavra-passe]] depois de iniciar sessão.",
        "newarticle": "(Nova)",
        "newarticletext": "Seguiu uma hiperligação para uma página que ainda não existe.\nPara criá-la, escreva o seu conteúdo na caixa abaixo (consulte a [$1 página de ajuda] para mais detalhes).\nSe chegou aqui por engano, clique o botão <strong>voltar</strong> do seu navegador.",
        "anontalkpagetext": "----\n<em>Esta é a página de discussão de um utilizador anónimo que ainda não criou uma conta ou não a utiliza.</em>\nPor isso, temos de utilizar o endereço IP numérico para identificá-lo(a).\nUm mesmo endereço IP pode ser partilhado por vários utilizadores.\nSe é um utilizador anónimo e sente que lhe foram direcionados comentários irrelevantes, [[Special:CreateAccount|crie uma conta]] ou [[Special:UserLogin|inicie sessão]] para evitar futuras confusões com outros utilizadores anónimos.",
        "userpage-userdoesnotexist": "A conta \"$1\" não se encontra registada.\nVerifique se deseja realmente criar ou editar esta página, por favor.",
        "userpage-userdoesnotexist-view": "A conta de utilizador \"$1\" não está registada.",
        "blocked-notice-logextract": "Este utilizador está bloqueado.\nPara referência, o último registo de bloqueio é apresentado abaixo:",
-       "clearyourcache": "<strong>Nota:</strong> Após gravar, terá de limpar a <em>cache</em> do seu navegador para ver as alterações.\n* <strong>Firefox / Safari:</strong> Pressione <em>Shift</em> enquanto clica <em>Recarregar</em>, ou pressione <em>Ctrl-F5</em> ou <em>Ctrl-R</em> (<em>⌘-R</em> no Mac)\n* <strong>Google Chrome:</strong> Pressione <em>Ctrl-Shift-R</em> (<em>⌘-Shift-R</em> no Mac)\n* <strong>Internet Explorer:</strong> Pressione <em>Ctrl</em> enquanto clica <em>Recarregar</em>, ou pressione <em>Ctrl-F5</em>\n* <strong>Opera:</strong> Ir para <em>Menu → Configurações</em> (<em>Opera → Preferências</em> no Mac) e, em seguida, <em>Privacidade e segurança → Limpar dados de navegação → Imagens e ficheiros em cache</em>.",
+       "clearyourcache": "<strong>Nota:</strong> Depois de gravar, terá de limpar a <em>cache</em> do seu navegador para ver as alterações.\n* <strong>Firefox / Safari:</strong> Pressione <em>Shift</em> enquanto clica <em>Recarregar</em>, ou pressione <em>Ctrl-F5</em> ou <em>Ctrl-R</em> (<em>⌘-R</em> no Mac)\n* <strong>Google Chrome:</strong> Pressione <em>Ctrl-Shift-R</em> (<em>⌘-Shift-R</em> no Mac)\n* <strong>Internet Explorer:</strong> Pressione <em>Ctrl</em> enquanto clica <em>Recarregar</em>, ou pressione <em>Ctrl-F5</em>\n* <strong>Opera:</strong> Ir para <em>Menu → Configurações</em> (<em>Opera → Preferências</em> no Mac) e, em seguida, <em>Privacidade e segurança → Limpar dados de navegação → Imagens e ficheiros em cache</em>.",
        "usercssyoucanpreview": "<strong>Dica:</strong> Use o botão \"{{int:showpreview}}\" para testar o seu novo CSS antes de gravar.",
        "userjsonyoucanpreview": "<strong>Dica:</strong> Use o botão \"{{int:showpreview}}\" para testar o seu novo JSON antes de gravar.",
        "userjsyoucanpreview": "<strong>Dica:</strong> Use o botão \"{{int:showpreview}}\" para testar o seu novo JavaScript antes de gravar.",
        "content-model-json": "JSON",
        "content-json-empty-object": "Objeto vazio",
        "content-json-empty-array": "Matriz vazia",
-       "deprecated-self-close-category": "Páginas com etiquetas HTML auto-fechadas inválidas",
-       "deprecated-self-close-category-desc": "Esta página contém etiquetas HTML auto-fechadas, que são inválidas, tais como <code>&lt;b/></code> ou <code>&lt;span/></code>. O comportamento destas etiquetas será alterado em breve, para ser consistente com a especificação HTML5, pelo que o seu uso no texto wiki foi descontinuado.",
+       "deprecated-self-close-category": "Páginas com etiquetas HTML autofechadas inválidas",
+       "deprecated-self-close-category-desc": "Esta página contém etiquetas HTML autofechadas, que são inválidas, tais como <code>&lt;b/></code> e <code>&lt;span/></code>. O comportamento destas etiquetas será alterado em breve, para ser consistente com a especificação HTML5, pelo que o seu uso no texto wiki foi descontinuado.",
        "duplicate-args-warning": "<strong>Aviso:</strong> [[:$1]] chama [[:$2]] com mais de um valor para o parâmetro \"$3\". Somente o último valor fornecido será utilizado.",
        "duplicate-args-category": "Páginas com argumentos de predefinições duplicados",
        "duplicate-args-category-desc": "A página contém chamadas de predefinições que passam à predefinição argumentos duplicados, tais como <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> ou <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "email-allow-new-users-label": "Permitir mensagens de correio de utilizadores novos",
        "email-blacklist-label": "Proibir estes utilizadores de me enviarem correio eletrónico:",
        "prefs-searchoptions": "Pesquisa",
-       "prefs-namespaces": "Domínios",
+       "prefs-namespaces": "Espaços nominais",
        "default": "padrão",
        "prefs-files": "Ficheiros",
        "prefs-custom-css": "CSS personalizado",
        "prefixindex": "Todas as páginas iniciadas por",
        "prefixindex-namespace": "Todas as páginas com prefixo (espaço nominal $1)",
        "prefixindex-submit": "Mostrar",
-       "prefixindex-strip": "Remover prefixo",
+       "prefixindex-strip": "Esconder o prefixo nos resultados",
        "shortpages": "Páginas curtas",
        "longpages": "Páginas longas",
        "deadendpages": "Páginas sem saída",
        "apisandbox-dynamic-error-exists": "Um parâmetro com o nome \"$1\" já existe.",
        "apisandbox-templated-parameter-reason": "Este [[Special:ApiHelp/main#main/templatedparams|parâmetro modelado]] é oferecido com base {{PLURAL:$1|no valor|nos valores}} de $2.",
        "apisandbox-deprecated-parameters": "Parâmetros obsoletos",
-       "apisandbox-fetch-token": "Auto-preencher o token",
+       "apisandbox-fetch-token": "Preencher automaticamente a chave",
        "apisandbox-add-multi": "Adicionar",
        "apisandbox-submit-invalid-fields-title": "Alguns campos são inválidos",
        "apisandbox-submit-invalid-fields-message": "Por favor, corrija os campos marcados e tente novamente.",
        "trackingcategories-desc": "Critérios de inclusão",
        "restricted-displaytitle-ignored": "Páginas com títulos de apresentação ignorados",
        "restricted-displaytitle-ignored-desc": "Esta página tem um <code><nowiki>{{DISPLAYTITLE}}</nowiki></code> ignorado porque não é equivalente ao título verdadeiro da página.",
-       "noindex-category-desc": "A página não é indexada por robôs porque contém a palavra mágica <code><nowiki>__NOINDEX__</nowiki></code> e está num domínio onde esta palavra mágica é permitida.",
-       "index-category-desc": "A página contém a palavra mágica <code><nowiki>__INDEX__</nowiki></code> (e está num domínio em que essa marca é permitida) e, portanto, será indexada pelos robôs mesmo quando normalmente não o seria.",
+       "noindex-category-desc": "A página não é indexada por robôs porque contém a palavra mágica <code><nowiki>__NOINDEX__</nowiki></code> e está num espaço nominal onde esta palavra mágica é permitida.",
+       "index-category-desc": "A página contém a palavra mágica <code><nowiki>__INDEX__</nowiki></code> (e está num espaço nominal em que esta palavra é permitida) e, portanto, será indexada por robôs mesmo quando normalmente não o seria.",
        "post-expand-template-inclusion-category-desc": "O tamanho da página é superior a <code>$wgMaxArticleSize</code>, após a expansão de todas as predefinições, pelo que algumas predefinições não foram expandidas.",
-       "post-expand-template-argument-category-desc": "O tamanho da página é superior a <code>$wgMaxArticleSize</code>, após a expansão de um argumento de predefinição (algo em chavetas triplas, como <code>{{{Foo}}}</code>).",
-       "expensive-parserfunction-category-desc": "A página tem demasiadas funções do analisador custosas (como <code>#ifexist</code>) incluídas. Consulte [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
+       "post-expand-template-argument-category-desc": "O tamanho da página é superior a <code>$wgMaxArticleSize</code>, após a expansão de um argumento de predefinição (algo entre chavetas triplas, como <code>{{{Foo}}}</code>).",
+       "expensive-parserfunction-category-desc": "A página inclui demasiadas funções exigentes do analisador sintático (como <code>#ifexist</code>). Consulte [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
        "broken-file-category-desc": "A página contém uma hiperligação quebrada para um ficheiro (uma hiperligação para incorporar um ficheiro que não existe).",
-       "hidden-category-category-desc": "Esta é uma categoria com a marca <code><nowiki>__HIDDENCAT__</nowiki></code>, que faz com que ela não apareça na caixa de hiperligações de categoria nas páginas, por omissão.",
+       "hidden-category-category-desc": "Esta categoria contém <code><nowiki>__HIDDENCAT__</nowiki></code>, que faz com que ela não apareça na caixa de hiperligações de categoria das páginas, por omissão.",
        "trackingcategories-nodesc": "Sem descrição disponível.",
        "trackingcategories-disabled": "A categoria está desativada.",
        "mailnologin": "Não existe endereço de envio",
        "ipb-disableusertalk": "Impedir que este utilizador edite a sua página de discussão enquanto estiver bloqueado",
        "ipb-change-block": "Voltar a bloquear o utilizador com estes parâmetros",
        "ipb-confirm": "Confirmar o bloqueio",
+       "ipb-sitewide": "Em todo o site",
+       "ipb-partial": "Parcial",
+       "ipb-type-label": "Tipo",
+       "ipb-pages-label": "Páginas",
        "badipaddress": "Endereço IP inválido",
        "blockipsuccesssub": "Bloqueio efetuado",
        "blockipsuccesstext": "[[Special:Contributions/$1|$1]] foi {{GENDER:$1|bloqueado|bloqueada}}.<br />\nConsulte a [[Special:BlockList|lista de bloqueios]] para rever os bloqueios.",
        "ipblocklist-legend": "Procurar um utilizador bloqueado",
        "blocklist-userblocks": "Ocultar bloqueios de contas",
        "blocklist-tempblocks": "Ocultar bloqueios temporários",
-       "blocklist-addressblocks": "Ocultar bloqueios de IP único",
+       "blocklist-addressblocks": "Ocultar bloqueios de um IP individual",
        "blocklist-rangeblocks": "Ocultar bloqueios de gamas",
        "blocklist-timestamp": "Data e hora",
        "blocklist-target": "Destinatário",
        "createaccountblock": "criação de conta bloqueada",
        "emailblock": "correio eletrónico desativado",
        "blocklist-nousertalk": "impedido de editar a própria página de discussão",
+       "blocklist-editing": "edição",
+       "blocklist-editing-sitewide": "edição (todo o ''site'')",
        "ipblocklist-empty": "A lista de bloqueios encontra-se vazia.",
        "ipblocklist-no-results": "O endereço IP ou nome de utilizador procurado não se encontra bloqueado.",
        "blocklink": "bloquear",
        "specialpages-group-pagetools": "Ferramentas de página",
        "specialpages-group-wiki": "Dados e ferramentas",
        "specialpages-group-redirects": "Páginas especiais de redirecionamento",
-       "specialpages-group-spam": "Ferramentas anti-spam",
+       "specialpages-group-spam": "Ferramentas antispam",
        "specialpages-group-developer": "Ferramentas de desenvolvimento",
        "blankpage": "Página em branco",
        "intentionallyblankpage": "Esta página foi intencionalmente deixada em branco",
        "logentry-block-block": "$1 {{GENDER:$2|bloqueou}} {{GENDER:$4|$3}} com expiração a $5 $6",
        "logentry-block-unblock": "$1 {{GENDER:$2|desbloqueou}} {{GENDER:$4|$3}}",
        "logentry-block-reblock": "$1 {{GENDER:$2|modificou}} parâmetros de bloqueio de {{GENDER:$4|$3}} com expiração a $5 $6",
+       "logentry-partialblock-block": "$1 {{GENDER:$2|aplicou a}} {{GENDER:$4|$3}} um bloqueio que impede a edição {{PLURAL:$8|da página|das páginas}} $7 com um prazo de expiração de $5 $6",
+       "logentry-partialblock-reblock": "$1 {{GENDER:$2|alterou}} as definições do bloqueio de {{GENDER:$4|$3}} para impedir a edição {{PLURAL:$8|da página|das páginas}} $7 com um prazo de expiração de $5 $6",
+       "logentry-non-editing-block-block": "$1 {{GENDER:$2|aplicou a}} {{GENDER:$4|$3}} um bloqueio que impede as operações que não sejam edições, com um prazo de expiração de $5 $6",
+       "logentry-non-editing-block-reblock": "$1 {{GENDER:$2|alterou}} as definições do bloqueio de {{GENDER:$4|$3}} para impedir as operações que não sejam edições, com um prazo de expiração de $5 $6",
        "logentry-suppress-block": "$1 {{GENDER:$2|bloqueou}} {{GENDER:$4|$3}} com expiração a $5 $6",
        "logentry-suppress-reblock": "$1 {{GENDER:$2|modificou}} parâmetros de bloqueio de {{GENDER:$4|$3}} com expiração a $5 $6",
        "logentry-import-upload": "$1 {{GENDER:$2|importou}} $3 através de carregamento de ficheiro",
        "mw-widgets-titleinput-description-redirect": "redirecionar para $1",
        "mw-widgets-categoryselector-add-category-placeholder": "Adicionar uma categoria...",
        "mw-widgets-usersmultiselect-placeholder": "Adicionar mais...",
+       "mw-widgets-titlesmultiselect-placeholder": "Adicionar mais...",
        "date-range-from": "Da data:",
        "date-range-to": "Até à data:",
        "sessionmanager-tie": "Não se pode combinar mais de um tipo de autenticação de pedidos: $1.",
        "passwordpolicies-policy-passwordcannotmatchblacklist": "A palavra-passe não pode corresponder às especificamente bloqueadas pela lista negra",
        "passwordpolicies-policy-maximalpasswordlength": "A palavra-passe tem de ter menos de $1 {{PLURAL:$1|carácter|caracteres}}",
        "passwordpolicies-policy-passwordcannotbepopular": "A palavra-passe não pode {{PLURAL:$1|ser a mais popular|estar na lista das $1 palavras-passe mais populares}}",
-       "easydeflate-invaliddeflate": "O conteúdo fornecido não está devidamente comprimido"
+       "easydeflate-invaliddeflate": "O conteúdo fornecido não está devidamente comprimido",
+       "unprotected-js": "Por motivos de segurança o JavaScript de páginas desprotegidas não pode ser carregado. Crie javascript só no espaço nominal/domínio MediaWiki: ou numa subpágina do utilizador"
 }
index a17cfca..3f53707 100644 (file)
        "tog-extendwatchlist": "[[Special:Preferences]], tab 'Watchlist'. Offers user to show all applicable changes in watchlist (by default only the last change to a page on the watchlist is shown). {{Gender}}",
        "tog-usenewrc": "{{Gender}}\nUsed as label for the checkbox in [[Special:Preferences]], tab \"Recent changes\".\n\nOffers user to use alternative representation of [[Special:RecentChanges]] and watchlist.",
        "tog-numberheadings": "[[Special:Preferences]], tab 'Misc'. Offers numbered headings on content pages to user. {{Gender}}",
-       "tog-showtoolbar": "{{Gender}}\n[[Special:Preferences]], tab 'Edit'. Offers user to show edit toolbar in page edit screen.\n\nThis is the toolbar: [[Image:Toolbar.png]]",
        "tog-editondblclick": "{{Gender}}\n[[Special:Preferences]], tab 'Edit'. Offers user to open edit page on double click.",
        "tog-editsectiononrightclick": "{{Gender}}\n[[Special:Preferences]], tab 'Edit'. Offers user to edit a section by clicking on a section title.",
        "tog-watchcreations": "[[Special:Preferences]], tab 'Watchlist'. Offers user to add created pages to watchlist. {{Gender}}",
        "subject-preview": "Used as label for preview of the section title when adding a new section on a talk page.\n\nShould match {{msg-mw|subject}}.\n\nSee also:\n* {{msg-mw|Summary-preview}}\n\n{{Identical|Subject}}",
        "previewerrortext": "When a user has the editing preference LivePreview enabled, clicked the Preview or Show Changes button in the edit page and the action did not succeed.",
        "blockedtitle": "Used as title displayed for blocked users. The corresponding message body is one of the following messages:\n* {{msg-mw|Blockedtext|notext=1}}\n* {{msg-mw|Autoblockedtext|notext=1}}\n* {{msg-mw|Systemblockedtext}}",
+       "blocked-email-user": "Text displayed to partially blocked users that are blocked from sending email.\n\n\"email this user\" should be consistent with {{msg-mw|Emailuser}}.\n\nParameters:\n* $1 - the blocking sysop (with a link to his/her userpage)\n* $2 - the reason for the block\n* $3 - the current IP address of the blocked user\n* $4 - (Unused) the blocking sysop's username (plain text, without the link)\n* $5 - the unique numeric identifier of the applied autoblock\n* $6 - the expiry of the block\n* $7 - the intended target of the block (what the blocking user specified in the blocking form)\n* $8 - the timestamp when the block started\nSee also:\n* {{msg-mw|Grouppage-sysop}}\n* {{msg-mw|Autoblockedtext}}\n* {{msg-mw|Systemblockedtext}}",
+       "blockedtext-partial": "Text displayed to partially blocked users.\n\n\"email this user\" should be consistent with {{msg-mw|Emailuser}}.\n\nParameters:\n* $1 - the blocking sysop (with a link to his/her userpage)\n* $2 - the reason for the block\n* $3 - the current IP address of the blocked user\n* $4 - (Unused) the blocking sysop's username (plain text, without the link)\n* $5 - the unique numeric identifier of the applied autoblock\n* $6 - the expiry of the block\n* $7 - the intended target of the block (what the blocking user specified in the blocking form)\n* $8 - the timestamp when the block started\nSee also:\n* {{msg-mw|Grouppage-sysop}}\n* {{msg-mw|Autoblockedtext}}\n* {{msg-mw|Systemblockedtext}}",
        "blockedtext": "Text displayed to blocked users.\n\n\"email this user\" should be consistent with {{msg-mw|Emailuser}}.\n\nParameters:\n* $1 - the blocking sysop (with a link to his/her userpage)\n* $2 - the reason for the block\n* $3 - the current IP address of the blocked user\n* $4 - (Unused) the blocking sysop's username (plain text, without the link)\n* $5 - the unique numeric identifier of the applied autoblock\n* $6 - the expiry of the block\n* $7 - the intended target of the block (what the blocking user specified in the blocking form)\n* $8 - the timestamp when the block started\nSee also:\n* {{msg-mw|Grouppage-sysop}}\n* {{msg-mw|Autoblockedtext}}\n* {{msg-mw|Systemblockedtext}}",
        "autoblockedtext": "Text displayed to automatically blocked users.\n\n\"email this user\" should be consistent with {{msg-mw|Emailuser}}.\n\nParameters:\n* $1 - the blocking sysop (with a link to his/her userpage)\n* $2 - the reason for the block (in case of autoblocks: {{msg-mw|autoblocker}})\n* $3 - the current IP address of the blocked user\n* $4 - (Unused) the blocking sysop's username (plain text, without the link). Use it for GENDER.\n* $5 - the unique numeric identifier of the applied autoblock\n* $6 - the expiry of the block\n* $7 - the intended target of the block (what the blocking user specified in the blocking form)\n* $8 - the timestamp when the block started\nSee also:\n* {{msg-mw|Grouppage-sysop}}\n* {{msg-mw|Blockedtext}}\n* {{msg-mw|Systemblockedtext}}",
        "systemblockedtext": "Text displayed to requests blocked by MediaWiki configuration.\n\n\"email this user\" should be consistent with {{msg-mw|Emailuser}}.\n\nParameters:\n* $1 - (Unused) A dummy user attributed as the blocker, possibly as a link to a user page.\n* $2 - the reason for the block\n* $3 - the current IP address of the blocked user\n* $4 - (Unused) the dummy blocking user's username (plain text, without the link).\n* $5 - A short string indicating the type of system block.\n* $6 - the expiry of the block\n* $7 - the intended target of the block\n* $8 - the timestamp when the block started\nSee also:\n* {{msg-mw|Grouppage-sysop}}\n* {{msg-mw|Blockedtext}}\n* {{msg-mw|Autoblockedtext}}",
        "ipb-disableusertalk": "{{doc-singularthey}}\nUsed as label for checkbox in [[Special:Block]].\n\nSee also:\n* {{msg-mw|ipbemailban}}\n* {{msg-mw|ipbenableautoblock}}\n* {{msg-mw|ipbhidename}}\n* {{msg-mw|ipbwatchuser}}\n* {{msg-mw|ipb-hardblock}}",
        "ipb-change-block": "Confirmation checkbox required for blocks that would override an earlier block. Appears together with {{msg-mw|ipb-needreblock}}.",
        "ipb-confirm": "Used as hidden field in the form on [[Special:Block]].",
+       "ipb-sitewide": "A type of block the user can select from on [[Special:Block]].",
+       "ipb-partial": "A type of block the user can select from on [[Special:Block]].",
+       "ipb-type-label": "The label of the type of editing restriction the admin would like to impose on [[Special:Block]].",
+       "ipb-pages-label": "The label for a autocomplete text field to specify pages to block a user from editing on [[Special:Block]].",
        "badipaddress": "An error message shown when one entered an invalid IP address in blocking page.",
        "blockipsuccesssub": "Used as page title in [[Special:Block]].\n\nThis message is the subject for the following message:\n* {{msg-mw|Blockipsuccesstext}}",
        "blockipsuccesstext": "Used in [[Special:Block]].\nThe title (subject) for this message is {{msg-mw|Blockipsuccesssub}}.\n\nParameters:\n* $1 - username, can be used for GENDER",
        "createaccountblock": "Part of the log entry of user block in [[Special:BlockList]].\n\nSee also:\n* {{msg-mw|Block-log-flags-nocreate}}\n{{Related|Blocklist}}",
        "emailblock": "Part of the log entry of user block in [[Special:BlockList]].\n{{Related|Blocklist}}\n{{Identical|E-mail blocked}}",
        "blocklist-nousertalk": "Used in [[Special:IPBlockList]] when \"Allow this user to edit own talk page while blocked\" option hasn't been flagged.\n\nSee also {{msg-mw|Block-log-flags-nousertalk}}.\n\nPart of the log entry of user block in [[Special:BlockList]].\n\n{{Related|Blocklist}}",
+       "blocklist-editing": "Used in [[Special:IPBlockList]] when a block is not a sitewide block.",
+       "blocklist-editing-sitewide": "Used in [[Special:IPBlockList]] when a block is a sitewide block.",
        "ipblocklist-empty": "Used in [[Special:BlockList]], if the target is not specified.\n\nSee also:\n* {{msg-mw|Ipblocklist-no-results}}",
        "ipblocklist-no-results": "Used in [[Special:BlockList]], if the target is specified.\n\nSee also:\n* {{msg-mw|Ipblocklist-empty}}",
        "blocklink": "Display name for a link that, when selected, leads to a form where a user can be blocked. Used in page history and recent changes pages. Example: \"''UserName (Talk | contribs | '''block''')''\".\n\nUsed as link title in [[Special:Contributions]] and in [[Special:DeletedContributions]].\n\nSee also:\n* {{msg-mw|Sp-contributions-talk}}\n* {{msg-mw|Change-blocklink}}\n* {{msg-mw|Unblocklink}}\n* {{msg-mw|Sp-contributions-blocklog}}\n* {{msg-mw|Sp-contributions-uploads}}\n* {{msg-mw|Sp-contributions-logs}}\n* {{msg-mw|Sp-contributions-deleted}}\n* {{msg-mw|Sp-contributions-userrights}}\n{{Identical|Block}}",
        "logentry-block-block": "{{Logentry|[[Special:Log/block]]}}\n* $4 - user name for gender or empty string for autoblocks\n* $5 - the block duration, localized and formatted with the english tooltip\n* $6 - block detail flags or empty string\n\nCf. {{msg-mw|Blocklogentry}}",
        "logentry-block-unblock": "{{Logentry|[[Special:Log/block]]}}\n* $4 - user name for gender or empty string for autoblocks\n\nCf. {{msg-mw|Unblocklogentry}}",
        "logentry-block-reblock": "{{Logentry|[[Special:Log/block]]}}\n* $4 - user name for gender or empty string for autoblocks\n* $5 - the block duration, localized and formatted with the english tooltip\n* $6 - block detail flags or empty string\n\nCf. {{msg-mw|Reblock-logentry}}",
+       "logentry-partialblock-block": "{{Logentry|[[Special:Log/block]]}}\n* $4 - user name for gender or empty string for autoblocks\n* $5 - the block duration, localized and formatted with the english tooltip\n* $6 - block detail flags or empty string\n* $7 - list of pages separated by a comma\n* $8 - total number of pages\n\nCf. {{msg-mw|Blocklogentry}}",
+       "logentry-partialblock-reblock": "{{Logentry|[[Special:Log/block]]}}\n* $4 - user name for gender or empty string for autoblocks\n* $5 - the block duration, localized and formatted with the english tooltip\n* $6 - block detail flags or empty string\n* $7 - list of pages separated by a comma\n* $8 - total number of pages\n\nCf. {{msg-mw|Reblock-logentry}}",
+       "logentry-non-editing-block-block": "{{Logentry|[[Special:Log/block]]}}\n* $4 - user name for gender or empty string for autoblocks\n* $5 - the block duration, localized and formatted with the english tooltip\n* $6 - block detail flags or empty string\n\nCf. {{msg-mw|Blocklogentry}}",
+       "logentry-non-editing-block-reblock": "{{Logentry|[[Special:Log/block]]}}\n* $4 - user name for gender or empty string for autoblocks\n* $5 - the block duration, localized and formatted with the english tooltip\n* $6 - block detail flags or empty string\n\nCf. {{msg-mw|Reblock-logentry}}",
        "logentry-suppress-block": "{{Logentry}}\n* $4 - user name for gender or empty string for autoblocks\n* $5 - the block duration, localized and formatted with the english tooltip\n* $6 - block detail flags or empty string",
        "logentry-suppress-reblock": "{{Logentry}}\n* $4 - user name for gender or empty string for autoblocks\n* $5 - the block duration, localized and formatted with the english tooltip\n* $6 - block detail flags or empty string",
        "logentry-import-upload": "{{Logentry|[[Special:Log/import]]}}",
        "mw-widgets-titleinput-description-redirect": "Description label for a redirect in the title input widget.",
        "mw-widgets-categoryselector-add-category-placeholder": "Placeholder displayed in the category selector widget after the capsules of already added categories.",
        "mw-widgets-usersmultiselect-placeholder": "Placeholder displayed in the input field, where new usernames are entered",
+       "mw-widgets-titlesmultiselect-placeholder": "Placeholder displayed in the input field, where new titles are entered",
        "date-range-from": "Label for an input field that specifies the start date of a date range filter.",
        "date-range-to": "Label for an input field that specifies the end date of a date range filter.",
        "sessionmanager-tie": "Used as an error message when multiple session sources are tied in priority.\n\nParameters:\n* $1 - List of dession type descriptions, from messages like {{msg-mw|sessionprovider-mediawiki-session-cookiesessionprovider}}.",
        "passwordpolicies-policy-passwordcannotmatchblacklist": "Password policy that enforces that passwords are not on a list of blacklisted passwords (often previously used during MediaWiki automated testing)",
        "passwordpolicies-policy-maximalpasswordlength": "Password policy that enforces a maximum number of characters a password must be. $1 - maximum number of characters that a password can be",
        "passwordpolicies-policy-passwordcannotbepopular": "Password policy that enforces that a password is not in a list of $1 number of \"popular\" passwords. $1 - number of popular passwords the password will be checked against",
-       "easydeflate-invaliddeflate": "Error message if the content passed to easydeflate was not deflated (compressed) properly"
+       "easydeflate-invaliddeflate": "Error message if the content passed to easydeflate was not deflated (compressed) properly",
+       "unprotected-js": "Error message shown when trying to load javascript via action=raw that is not protected"
 }
index 9bc8be5..3ed8f93 100644 (file)
@@ -21,7 +21,6 @@
        "tog-extendwatchlist": "Watiqana sutisuyuta tukuy rurachinalla hukchaykunaman mast'ay, ama lliwmanta aswan ñaqhallachu",
        "tog-usenewrc": "Huñu hukchasqakuna p'anqallakama ñaqha hukchasqakunapi watiqasqakunapipas",
        "tog-numberheadings": "Uma siq'ikunata kikinmanta yupay",
-       "tog-showtoolbar": "Llamk'apuna sillwita rikuchiy",
        "tog-editondblclick": "P'anqakunata llamk'apuy iskaylla ñit'iywan",
        "tog-editsectiononrightclick": "Rakirilla llamk'apuyta saqillay paña butunta rakirip sutinpi ñit'ispa",
        "tog-watchcreations": "Qallarisqay p'anqakunata churkusqay willañiqikunatapas watiqay",
index fbfc9e5..b176743 100644 (file)
@@ -14,7 +14,6 @@
        "tog-extendwatchlist": "Rikushka pankakunapak mushuk killkaykunapak kamupi, ama yallik mushuk killkaykunatalla rikuchina, tukuykunatami rikuchina",
        "tog-usenewrc": "Mushuk killkaykunata chapashka pankakunapak killkaykunatapash ashtawan alli rikuchina (Javascriptwanlla)",
        "tog-numberheadings": "Uma killkaykunata yupayta churak antawata llankachina",
-       "tog-showtoolbar": "Llamkana antakunata rikuchina (Javascriptwanlla)",
        "tog-editondblclick": "Ishkayta klik rurashpa pankapi killkanata kallarina (JavaScriptwanlla)",
        "tog-watchcreations": "Ñukapak wacharishka pankakunata rikuna",
        "tog-watchdefault": "Ñukapak shukchishka pankakunata rikuna",
index c673979..631ca50 100644 (file)
@@ -25,7 +25,6 @@
        "tog-extendwatchlist": "Extender la glista d'observaziun per mussar tut las midadas e betg be las ultimas",
        "tog-usenewrc": "Gruppar las midadas tenor pagina en las ''ultimas midadas'' e la ''glista d'observaziun''",
        "tog-numberheadings": "Numerar automaticamain ils titels",
-       "tog-showtoolbar": "Mussar la trav d'utensils per modifitgar",
        "tog-editondblclick": "Modifitgar paginas cun in clic dubel",
        "tog-editsectiononrightclick": "Activar la pussaivladad da modifitgar secziuns cun in clic dretg sin il titel",
        "tog-watchcreations": "Agiuntar paginas ch'jeu creesch e datotecas ch'jau transferesch a la glista d'observaziun",
index 8679c61..e278000 100644 (file)
@@ -46,7 +46,6 @@
        "tog-extendwatchlist": "Extinde lista de articole urmărite pentru a arăta toate schimbările efectuate, nu doar pe cele mai recente",
        "tog-usenewrc": "Grupează modificările după pagină în cadrul schimbărilor recente și listei paginilor urmărite",
        "tog-numberheadings": "Numerotează automat secțiunile",
-       "tog-showtoolbar": "Afișează bara de unelte pentru modificare",
        "tog-editondblclick": "Modifică paginile prin dublu clic",
        "tog-editsectiononrightclick": "Activează modificarea secțiunilor prin clic dreapta pe titlul secțiunii",
        "tog-watchcreations": "Adaugă paginile pe care le creez și fișierele pe care le încarc la lista mea de pagini urmărite",
index 8b7585a..579b3e5 100644 (file)
@@ -23,7 +23,6 @@
        "tog-extendwatchlist": "Spanne l'elenghe de le pàggene condrollate pe fa vedè tutte le cangiaminde fatte, none sulamende l'urteme",
        "tog-usenewrc": "Cangiaminde d'u gruppe pe pàgene jndr'à le urteme cangiaminde e elenghe de le pàggene condrollate",
        "tog-numberheadings": "Testate auto-numerate",
-       "tog-showtoolbar": "Fà vedè 'a barra de le cangiaminde",
        "tog-editondblclick": "Cange le pàggene cu 'nu doppie clic",
        "tog-editsectiononrightclick": "Abbilite le cangiaminde d'a sezione ausanne 'u pulsande destre d'u sciorge cazzanne sus a 'u titole",
        "tog-watchcreations": "Mitte le pàggene ca je agghie ccrejate jndr'à le pàggene condrollate",
        "prefixindex": "Tutte le pàggene cu 'u prefisse",
        "prefixindex-namespace": "Tutte le pàggene cu 'u prefisse ($1 namespace)",
        "prefixindex-submit": "Fà 'ndrucà",
-       "prefixindex-strip": "Strisce d'u prefisse jndr'à l'elenghe",
+       "prefixindex-strip": "Scunne 'u prefisse jndr'à le resultate",
        "shortpages": "Pàggene corte",
        "longpages": "Pàggene longhe",
        "deadendpages": "Pàggene senza collegamende",
        "ipb-disableusertalk": "Non ge face cangià a stu utende 'a pàgena de le 'ngazzaminde sue fine ca jè bloccate",
        "ipb-change-block": "Blocche 'n'otra vote l'utende cu ste 'mbostaziune",
        "ipb-confirm": "Conferme 'u blocche",
+       "ipb-sitewide": "Tutte 'u site",
+       "ipb-partial": "Parziale",
+       "ipb-type-label": "Tipe",
+       "ipb-pages-label": "Pàggene",
        "badipaddress": "Indirizze IP invalide",
        "blockipsuccesssub": "Blocche effettuate",
        "blockipsuccesstext": "[[Special:Contributions/$1|$1]] ha state bloccate.<br />\nVide [[Special:BlockList|'a liste de le IP bloccate]] pe revedè le blocche.",
        "createaccountblock": "sulamende l'utinde anonime",
        "emailblock": "e-mail blocchete",
        "blocklist-nousertalk": "Non ge puè cangià 'a pàgene de le 'ngazzaminde toje",
+       "blocklist-editing": "stoche a cange",
+       "blocklist-editing-sitewide": "stoche a cange (tutte 'u site)",
        "ipblocklist-empty": "'A liste de le blocche jè vacande.",
        "ipblocklist-no-results": "L'indirizze IP ca è cerchete o 'u nome utende non ge sonde blocchete.",
        "blocklink": "blocche",
        "mw-widgets-titleinput-description-redirect": "redirezionate sus a $1",
        "mw-widgets-categoryselector-add-category-placeholder": "Aggiunge 'na categorije...",
        "mw-widgets-usersmultiselect-placeholder": "Aggiunge de cchiù...",
+       "mw-widgets-titlesmultiselect-placeholder": "Aggiunge de cchiù...",
        "date-range-from": "Da 'a date:",
        "date-range-to": "'Mbonde 'a date:",
        "sessionprovider-generic": "$1 sessiune",
index 0155b22..e4c3719 100644 (file)
        "tog-extendwatchlist": "Расширить список наблюдения, включая все изменения, а не только последние <small>(они могут быть сгруппированы настройкой на вкладке «[[Служебная:Настройки#mw-prefsection-rc|Свежие правки]]»)</small>",
        "tog-usenewrc": "Группировать изменения в свежих правках и списке наблюдения",
        "tog-numberheadings": "Автоматически нумеровать заголовки",
-       "tog-showtoolbar": "Показывать панель инструментов при редактировании",
        "tog-editondblclick": "Править страницы по двойному щелчку",
        "tog-editsectiononrightclick": "Править секции при правом щелчке мышью на заголовке",
        "tog-watchcreations": "Добавлять в список наблюдения созданные мной страницы и загруженные мной файлы",
        "subject-preview": "Предпросмотр темы/заголовка:",
        "previewerrortext": "При попытке отобразить предварительный просмотр ваших изменений произошла ошибка.",
        "blockedtitle": "Участник заблокирован",
+       "blocked-email-user": "<strong>Для вашей учётной записи заблокирована отправка электронной почты. Но вы по-прежнему можете редактировать страницы в этом вики-проекте.</strong> Вы можете увидеть все подробности блокировки на странице [[Special:MyContributions|вклада учётной записи]].\n\nБлокировка произведена администратором $1.\n\nУказана следующая причина: <em>$2</em>.\n\n* Начало блокировки: $8\n* Окончание блокировки: $6\n* Цель блокировки: $7\n* Идентификатор блокировки: #$5",
+       "blockedtext-partial": "<strong>Для вашей учётной записи заблокирована возможность изменения этой страницы. Но вы по-прежнему можете редактировать другие страницы в этом вики-проекте.</strong> Вы можете увидеть все подробности блокировки на странице [[Special:MyContributions|вклада учётной записи]].\n\nБлокировка произведена администратором $1.\n\nУказана следующая причина: <em>$2</em>.\n\n* Начало блокировки: $8\n* Окончание блокировки: $6\n* Цель блокировки: $7\n* Идентификатор блокировки: #$5",
        "blockedtext": "<strong>Ваша учётная запись или IP-адрес заблокированы.</strong>\n\nБлокировка произведена администратором $1.\nУказана следующая причина: <em>$2</em>.\n\n* Начало блокировки: $8\n* Окончание блокировки: $6\n* Цель блокировки: $7\n\nВы можете связаться с $1 или любым другим [[{{MediaWiki:Grouppage-sysop}}|администратором]], чтобы обсудить блокировку.\nОбратите внимание, что вы не сможете использовать функцию «{{int:emailuser}}», если в своих [[Special:Preferences|персональных настройках]] не задали или не подтвердили корректный адрес электронной почты, или если ваша блокировка включает запрет отправки писем подобным образом.\nВаш IP-адрес — $3, идентификатор блокировки — $5.\nПожалуйста, указывайте эти сведения в любых своих обращениях.",
        "autoblockedtext": "Ваш IP-адрес автоматически заблокирован в связи с тем, что он ранее использовался кем-то из участников, заблокированных администратором $1. \nБыла указана следующая причина блокировки:\n\n: «$2».\n\n* Начало блокировки: $8\n* Окончание блокировки: $6\n* Цель блокировки: $7\n\nВы можете связаться с $1 или любым другим [[{{MediaWiki:Grouppage-sysop}}|администратором]], чтобы обсудить блокировку.\n\nОбратите внимание, что вы не сможете использовать функцию «{{int:emailuser}}», если в своих [[Special:Preferences|персональных настройках]] не задали или не подтвердили корректный адрес электронной почты, или если ваша блокировка включает запрет отправки писем подобным образом.\n\nВаш IP-адрес — $3, идентификатор блокировки — #$5.\nПожалуйста, указывайте эти сведения в любых своих обращениях.",
        "systemblockedtext": "Ваше имя участника или IP-адрес были автоматически заблокированы MediaWiki.\nУказана следующая причина:\n\n:<em>$2</em>\n\n* Начало блокировки: $8\n* Окончание блокировки: $6\n* Цель блокировки: $7\n\nВаш текущий IP-адрес $3.\nПожалуйста, указывайте все эти сведения в любых своих обращениях.",
        "prefixindex": "Указатель по началу названий страниц",
        "prefixindex-namespace": "Указатель по началу страниц (пространство имён «{{ns:$1}}»)",
        "prefixindex-submit": "Показать",
-       "prefixindex-strip": "СкÑ\80Ñ\8bÑ\82Ñ\8c Ð¿Ñ\80еÑ\84икÑ\81 Ð² Ñ\81пиÑ\81ке Ñ\80езÑ\83лÑ\8cÑ\82аÑ\82ов",
+       "prefixindex-strip": "СкÑ\80Ñ\8bÑ\82Ñ\8c Ð¿Ñ\80еÑ\84икÑ\81 Ð² Ñ\80езÑ\83лÑ\8cÑ\82аÑ\82аÑ\85",
        "shortpages": "Короткие страницы",
        "longpages": "Длинные страницы",
        "deadendpages": "Тупиковые страницы",
        "ipb-disableusertalk": "Запретить этому участнику редактировать свою страницу обсуждения",
        "ipb-change-block": "Переблокировать участника с этими настройками",
        "ipb-confirm": "Подтвердить блокировку",
+       "ipb-sitewide": "Во всём проекте",
+       "ipb-partial": "Частичная",
+       "ipb-type-label": "Тип",
+       "ipb-pages-label": "Страницы",
        "badipaddress": "IP-адрес записан в неправильном формате, или участника с таким именем не существует.",
        "blockipsuccesssub": "Блокировка произведена",
        "blockipsuccesstext": "[[Special:Contributions/$1|«$1»]] {{GENDER:$1|заблокирован|заблокирована}}.<br />\nСм. [[Special:BlockList|список заблокированных IP-адресов]] для просмотра блокировок.",
        "createaccountblock": "создание учётных записей запрещено",
        "emailblock": "отправка писем запрещена",
        "blocklist-nousertalk": "не может править свою страницу обсуждения",
+       "blocklist-editing": "редактирование",
+       "blocklist-editing-sitewide": "редактирование (во всём проекте)",
        "ipblocklist-empty": "Список блокировок пуст.",
        "ipblocklist-no-results": "Заданный IP-адрес или имя участника не заблокированы.",
        "blocklink": "заблокировать",
        "logentry-block-block": "$1 заблокировал{{GENDER:$2||а}} {{GENDER:$4|$3}} на период $5 $6",
        "logentry-block-unblock": "$1 разблокировал{{GENDER:$2||а}} {{GENDER:$4|$3}}",
        "logentry-block-reblock": "$1 {{GENDER:$2|изменил|изменила}} срок блокировки {{GENDER:$4|$3}} на период $5 $6",
+       "logentry-partialblock-block": "$1 {{GENDER:$2|заблокировал|заблокировала}} {{GENDER:$4|$3}} на редактирование {{PLURAL:$8|страницу|страницы}} $7 на период $5 $6",
+       "logentry-partialblock-reblock": "$1 {{GENDER:$2|изменил|изменила}} настройки блокировки {{GENDER:$4|$3}}, предотвращающий правки {{PLURAL:$8|страницы|страниц}} $7 на период $5 $6",
+       "logentry-non-editing-block-block": "$1 {{GENDER:$2|заблокировал|заблокировала}} {{GENDER:$4|$3}} от действий, не связанных с редактированием, на период $5 $6",
+       "logentry-non-editing-block-reblock": "$1 {{GENDER:$2|изменил|изменила}} настройки блокировки {{GENDER:$4|$3}} для действий, не связанных с редактированием, на период $5 $6",
        "logentry-suppress-block": "$1 {{GENDER:$2|заблокировал}} {{GENDER:$4|$3}} сроком на $5 $6",
        "logentry-suppress-reblock": "$1 {{GENDER:$2|изменил|изменила}} срок блокировки {{GENDER:$4|$3}} на период $5 $6",
        "logentry-import-upload": "$1 импортировал{{GENDER:$2||а}} $3 путём файловой загрузки",
        "mw-widgets-titleinput-description-redirect": "перенаправление на $1",
        "mw-widgets-categoryselector-add-category-placeholder": "Добавить категорию…",
        "mw-widgets-usersmultiselect-placeholder": "Добавить ещё…",
+       "mw-widgets-titlesmultiselect-placeholder": "Добавить ещё…",
        "date-range-from": "С даты:",
        "date-range-to": "По дату:",
        "sessionmanager-tie": "Невозможно использовать одновременно несколько типов проверки подлинности запроса: $1.",
        "passwordpolicies-policy-passwordcannotmatchblacklist": "Пароль не может совпадать ни с одним паролем, внесённым в чёрный список",
        "passwordpolicies-policy-maximalpasswordlength": "Пароль должен быть короче $1 {{PLURAL:$1|символа|символов}}",
        "passwordpolicies-policy-passwordcannotbepopular": "Пароль не может соответствовать {{PLURAL:$1|самому часто используемому паролю|какому-либо из $1 самых часто используемых паролей}}",
-       "easydeflate-invaliddeflate": "Предоставленное содержимое не спущено надлежащим образом"
+       "easydeflate-invaliddeflate": "Предоставленное содержимое не спущено надлежащим образом",
+       "unprotected-js": "По соображениям безопасности JavaScript нельзя загружать с незащищенных страниц. Пожалуйста, создавайте скрипты только в пространстве имён MediaWiki: или как подстраницы участника."
 }
index 97fc212..eb7b144 100644 (file)
@@ -25,7 +25,6 @@
        "tog-extendwatchlist": "Росшыреный список слїдованых сторінок, обсягує вшыткы зміны, не лем послїднї",
        "tog-usenewrc": "В послїднїх змінах і слїдованых сторінках зґруповати зміны по сторінках",
        "tog-numberheadings": "Автоматічно чісловати надписы",
-       "tog-showtoolbar": "Вказати панел інштрументів",
        "tog-editondblclick": "Едітовати двоїтым кликом",
        "tog-editsectiononrightclick": "Дозволити едітованя секції сторінкы через кликаня правов клапков мышкы на надписы сторінок",
        "tog-watchcreations": "Придавати сторінкы створены мнов тай файлы мнов наладованы до мого списку слїдованых",
index 6ce1512..3425db2 100644 (file)
@@ -36,7 +36,6 @@
        "tog-extendwatchlist": "न केवलं सद्योजातानि अपि तु निरीक्षासूचेः सर्वाणि परिवर्तनानि दृश्यन्ताम्",
        "tog-usenewrc": "सद्यः परिवर्तनावल्यां, निरीक्षासूचौ च पृष्ठानि विभागानुसारं प्रदर्श्यन्ताम् (जावा-लिपिः अपेक्ष्यते)",
        "tog-numberheadings": "शीर्षकाणि स्वयमेव यथाक्रमं करोतु",
-       "tog-showtoolbar": "उपकरण-पट्टिका दर्श्यताम्",
        "tog-editondblclick": "वारद्वयं टक्टकायनेन (Click) पृष्ठानि सम्पाद्यन्ताम् (जावा-लिपिः अपेक्ष्यते)",
        "tog-editsectiononrightclick": "विभागशीर्षकाणामुपरि दक्षिणक्लिक्-करणेन विभागः सम्पाद्यताम् ।",
        "tog-watchcreations": "मया रचितानि पृष्ठानि मम निरीक्षासूचौ योज्यन्ताम् ।",
index b7218fa..a566792 100644 (file)
@@ -28,7 +28,6 @@
        "tog-extendwatchlist": "Кэтээһин тупсарыллыбыт тиһигэ. Бары уларытыылар көстөллөр (бүтэһиктэр эрэ буолбатах)",
        "tog-usenewrc": "Саҥа уларытыы уонна кэтэбил тиһиктэригэр уларыйыылары бөлөхтүүргэ",
        "tog-numberheadings": "Түһүмэхтэр ааттарын нүөмэрдээ",
-       "tog-showtoolbar": "Көннөрүү хапталын көрдөр",
        "tog-editondblclick": "Хоһулатан баттаан сирэйи уларытыы",
        "tog-editsectiononrightclick": "Түһүмэх баһын уҥа тимэҕинэн баттаан түһүмэҕи уларытыы",
        "tog-watchcreations": "Суруйбут ыстатыйаларбын уонна укпут билэлэрбин кэтээн көрүүгэ киллэрэн ис",
index b3d4986..525f31d 100644 (file)
@@ -31,7 +31,6 @@
        "tog-extendwatchlist": "ᱠᱷᱟᱹᱞᱤ ᱱᱮᱛᱚᱜ ᱵᱚᱫᱚᱞᱟᱜ ᱫᱚ ᱵᱟᱝ, ᱡᱚᱛᱚ ᱵᱟᱫᱚᱞᱟᱜ ᱜᱮ ᱧᱮᱞᱚᱜ ᱛᱟᱹᱞᱠᱟᱹᱨᱮ ᱯᱷᱟᱭᱞᱟᱣᱢᱮ",
        "tog-usenewrc": "ᱱᱟᱣᱟᱱᱟᱜ ᱵᱚᱫᱚᱞ ᱟᱠᱟᱱᱠᱩ ᱟᱨ ᱨᱚᱠᱟ ᱵᱚᱫᱚᱞᱟᱠᱟᱱ ᱯᱟᱸᱦᱴᱟᱨᱮ ᱵᱚᱫᱚᱞᱟᱠᱠᱳ ᱢᱤᱛᱥᱟᱶ ᱧᱮᱞᱢᱮ",
        "tog-numberheadings": "ᱢᱩᱬᱩᱛ ᱠᱟᱛᱷᱟᱠᱩ ᱫᱚ ᱟᱪᱛᱮᱜᱮ ᱯᱤᱲᱦᱤ ᱯᱤᱲᱦᱤᱛᱮ ᱥᱟᱡᱟᱜᱢᱟ",
-       "tog-showtoolbar": "ᱦᱟᱹᱛᱤᱭᱟᱹᱨ ᱠᱟᱸᱛ ᱩᱫᱩᱜᱽ ᱢᱮ",
        "tog-editondblclick": "ᱵᱟᱨ ᱫᱷᱟᱣ ᱞᱤᱱ ᱠᱟᱛᱮ ᱥᱟᱦᱴᱟᱠᱩ ᱵᱚᱫᱚᱞᱢᱮ",
        "tog-editsectiononrightclick": "ᱯᱟᱦᱴᱟ ᱨᱮᱭᱟᱜ ᱜᱩᱴ ᱠᱟᱛᱷᱟᱨᱮ ᱡᱚᱡᱚᱢ ᱥᱮᱡ ᱞᱤᱱ ᱦᱚᱛᱮᱛᱮ <br /> ᱯᱟᱸᱦᱴᱟ ᱥᱟᱯᱲᱟᱣ ᱞᱟᱜᱤᱛᱛᱮ ᱟᱹᱭᱫᱟᱹᱨᱤ ᱮᱢ ᱦᱩᱭᱩᱜ ᱢᱟ (JavaScript)",
        "tog-watchcreations": "ᱥᱟᱦᱴᱟᱠᱩ ᱥᱮᱞᱮᱫᱢᱮ ᱤᱧᱟᱜ ᱛᱮᱭᱟᱨ ᱟᱨ ᱨᱮᱫᱠᱩ ᱤᱧᱟᱜ ᱧᱮᱞᱚᱜ ᱛᱟᱹᱞᱠᱟᱹᱨᱮ ᱨᱟᱠᱟᱵ ᱢᱮ",
index 6297db0..2601aa3 100644 (file)
@@ -20,7 +20,6 @@
        "tog-extendwatchlist": "Ammània sa watchlist pro ammustrare totu sos càmbios, non sos prus reghentes ebbia",
        "tog-usenewrc": "Pone in pare sos càmbios de cada pàgina in sos ùrtimos càmbios e in sa watchlist",
        "tog-numberheadings": "Auto-numeratzione de sos tìtulos",
-       "tog-showtoolbar": "Ammustra sa mustra de sa barra de sas ainas",
        "tog-editondblclick": "Càmbia pàginas cun duos click",
        "tog-editsectiononrightclick": "Abìlita su càmbiu de sas setziones cun click de dereta in sos tìtulos de sas setziones",
        "tog-watchcreations": "Annanghe is pàginas chi apo creadu e is documentos chi apo carrigadu in sa lista mea de pàginas annotadas",
index 77524a4..317824d 100644 (file)
@@ -27,7 +27,6 @@
        "tog-extendwatchlist": "Ammustra tutti li canciamenti ntâ lista taliata, nun sulu lu cchiù ricenti",
        "tog-usenewrc": "Raggruppa li canciamenti pi pàggina ntâ lista dî canciamenti ricenti e ntâ lista taliata",
        "tog-numberheadings": "Nummirazzioni autumàtica dî tìtuli di paràgrafu",
-       "tog-showtoolbar": "Ammustra la barra dî strummenta pû canciamentu",
        "tog-editondblclick": "Duppiu click pi canciari l'artìculu",
        "tog-editsectiononrightclick": "Attiva lu canciamentu di na sizzioni quannu si clicca cu buttuni drittu supra a lu sò tìtulu",
        "tog-watchcreations": "Agghiunci li pàggini chi creu e li file chi càrricu â mè lista taliata",
index d58c150..968713c 100644 (file)
@@ -38,7 +38,6 @@
        "tog-extendwatchlist": "Mak watchleet bigger tae shaw aw chynges, no just the maist recent",
        "tog-usenewrc": "Groop chynges bi page in recent chynges n watchleet",
        "tog-numberheadings": "Autæ-nummer heidins",
-       "tog-showtoolbar": "Shaw eidit tuilbaur",
        "tog-editondblclick": "Eidit pages oan dooble-clap (JavaScript)",
        "tog-editsectiononrightclick": "Enable section editin bi richt-clapin on section teitles",
        "tog-watchcreations": "Eik pages that Ah cræft n files that Ah uplaid til ma watchleet",
index b82e2b8..0ed5e69 100644 (file)
@@ -20,7 +20,6 @@
        "tog-hidecategorization": "صفحن جا زمرا لڪايو",
        "tog-extendwatchlist": "تازه ترين بدران سموريون تبديليون ڏيکارڻ لاءِ زير نظر فهرست کي وسيع ڪريو.",
        "tog-numberheadings": "سُرخين کي خودڪاراً نمبر ڏيو",
-       "tog-showtoolbar": "سنوار اوزار ڏيکاريو",
        "tog-editondblclick": "ٻٽي ڪلڪ تي صفحا سنواريو",
        "tog-watchcreations": "منھنجا سرجيل صفحا ۽ منھنجا چاڙھيل فائيل منھنجي نظر ۾ فھرست تي رکو",
        "tog-watchdefault": "منھنجا ترميميل صفحا ۽ فائيل  منھنجي نظر ۾ فھرست ۾ رکو",
        "right-editinterface": "واپرائيندڙ باهمرُو کي سنواريو",
        "right-viewmywatchlist": "پنهنجي نظر ۾ فھرست ڏسو",
        "right-editmywatchlist": "پنهنجي نگھداشت واري فهرست کي سنواريو. ياد رکو ڪجهه ڪم هن اختيار کان سواءِ پڻ ممڪن آهن.",
+       "right-viewmyprivateinfo": "پنهنجي ذاتي معلومات ڏسو (جيئن: برق ٽپال پتو، اصل نالو وغيره)",
        "right-editmyprivateinfo": "پنهنجي ذاتي معلومات سنواريو (جيئن برق ٽپال، اصل نالو)",
        "right-editmyoptions": "پنهنجون ترجيحون سنواريو",
        "right-import": "ٻين وڪيز کان صفحا درآمديو",
        "right-importupload": "ڪو فائيل چاڙهي صفحا درآمديو",
        "right-patrol": "ٻين جي ترميمن کي گشت-ڪيل طور نشان لڳايو",
+       "right-autopatrol": "سندس تخليق ڪيل مضمون پاڻمرادو گشت ڪيل ڄاڻايا ويندا آهن.",
        "right-mergehistory": "صفحن جي سوانح سنواريو",
        "right-userrights": "واپرائيندڙ جا سڀ حق سنواريو",
        "right-userrights-interwiki": "ٻين وڪين تي واپرائيندڙن جا حق سنواريو",
index 69434b2..7688f2a 100644 (file)
@@ -16,7 +16,6 @@
        "tog-extendwatchlist": "Musthra tutti li mudìfigghi a li abbaidaddi ippiziari, nò soru l'ulthimi.",
        "tog-usenewrc": "Utirizza l'ulthimi mudìfigghi abanzaddi (dumanda JavaScript)",
        "tog-numberheadings": "Numarazioni otomàtigga di li tìturi di sezzioni",
-       "tog-showtoolbar": "Musthra barra di l'isthrumenti di mudìfigga",
        "tog-editondblclick": "Mudìfigga di li pàgini attrabessu dóppiu clic",
        "tog-editsectiononrightclick": "Mudìfigga di li sezzioni attrabessu lu clic dresthu i' lu tìturu",
        "tog-watchcreations": "Aggiungi li pàgini criaddi a l'abbaidaddi ippiziari",
index c7b403e..088cf35 100644 (file)
@@ -22,7 +22,6 @@
        "tog-extendwatchlist": "Viiddit čuovvunlisttu, nu ahte čájeha buot dahkon rievdadusaid, iige dušše ođđaseamos",
        "tog-usenewrc": "Viiddiduvvon varas rievdadusat -listu (gáibida JavaScript)",
        "tog-numberheadings": "Nummaraste bajilčállagiid",
-       "tog-showtoolbar": "Čájet rievdadangaskaomiid",
        "tog-editondblclick": "Rievdat siidduid duppaldeaddilemiin (JavaScript)",
        "tog-editsectiononrightclick": "Rievdat osiid nu ahte deaddilat bajilčállaga sáhpána olgeš boaluin (JavaScript)",
        "tog-watchcreations": "Lasit siidduid maid lean álggahan mu čuovvunlistui",
index 64faa2e..3b834eb 100644 (file)
@@ -15,7 +15,6 @@
        "tog-extendwatchlist": "Expand listade cáminot zo cohuatlöx jömde quíix applicablix",
        "tog-usenewrc": "Camjöx cmaa enhancöx (JavaScript)",
        "tog-numberheadings": "Auto-numberom text corridór",
-       "tog-showtoolbar": "Cohuatlöx ticpatlöx toolbar (JavaScript)",
        "tog-editondblclick": "Ticpatlöx páhinám 2 clickám mii (JavaScript)",
        "tog-editsectiononrightclick": "Ton ticpatlöx seccion pok clickám mii<br /> seccion titelám iti (JavaScript)",
        "tog-watchcreations": "Plusöx páhinám he hun he listade cáminot",
index 9a26fdc..6474f00 100644 (file)
@@ -15,7 +15,6 @@
        "tog-extendwatchlist": "Hawgay maašeedaa hayandi ka barmawey kul cebe, manti ikokorantaa hinne",
        "tog-usenewrc": "Barmawey marga moo bande barmay korawey nda hawgayhayey ra",
        "tog-numberheadings": "Boŋdekerey boŋkabuyan",
-       "tog-showtoolbar": "Goyjinay žeeri fasalyan cebe",
        "tog-editondblclick": "Naagu cee hinka ka moɲey fasal",
        "tog-editsectiononrightclick": "Kanbe guma dunbu maaɲey naagu ka dunbu fasalyan tunandi",
        "tog-watchcreations": "Moɲey kaŋ ay k'i tee nda tukey kaŋ ay g'i zumandi tonton ay hawgayhayey ga",
index be33940..dee485f 100644 (file)
@@ -17,7 +17,6 @@
        "tog-extendwatchlist": "Ėšpliestė keravuojamu sāroša, ka ruodītu ne tėktās vielībūsius pakeitėmus",
        "tog-usenewrc": "Skėrstītė keitėmus vielībūsiūs pakeitėmūs ė keravuojamu poslapiu sārašė",
        "tog-numberheadings": "Autuomatėškā numeroutė skėrsnelius",
-       "tog-showtoolbar": "Ruodītė keitėmu rakondėnė",
        "tog-editondblclick": "Poslapiu keitėms kāp dosīk spaudi ont poslapė",
        "tog-editsectiononrightclick": "Ijongtė skėrsneliu keitėma kāp paspaudi skėrsnelė pavadėnėma so dešėnio pelies mīgtoko",
        "tog-watchcreations": "Pridietė poslapius, katrūs padėrbo, keravuojamu sārošap",
index 3e75864..4140377 100644 (file)
@@ -28,7 +28,6 @@
        "tog-extendwatchlist": "Proširi spisak praćenja za pogled svih izmjena, ne samo nedavnih",
        "tog-usenewrc": "Promene u grupi po stranici u spisku nedavnih izmhena i nadgledanih stranica (zahtijeva JavaScript)",
        "tog-numberheadings": "Automatski numeriši podnaslove",
-       "tog-showtoolbar": "Pokaži alatnu traku (potreban JavaScript)",
        "tog-editondblclick": "Izmijeni stranice dvostrukim klikom (potreban JavaScript)",
        "tog-editsectiononrightclick": "Uključite uređivanje odjeljka sa pritiskom na desno dugme miša u naslovu odjeljka (JavaScript)",
        "tog-watchcreations": "Dodaj stranice koje sam stvorio i dadtoteke koje sam poslao u moj spisak praćenih stranica",
        "login": "Prijava / Пријава",
        "nav-login-createaccount": "Prijavi se / Registruj se",
        "logout": "Odjava",
-       "userlogout": "Odjavi se / Одјави се",
+       "userlogout": "Odjava / Одјава",
        "notloggedin": "Niste prijavljeni",
        "userlogin-noaccount": "Nemate račun?",
        "userlogin-joinproject": "Pridružite se {{SITENAME}}",
        "tooltip-pt-mycontris": "Lista {{GENDER:|vaših}} doprinosa",
        "tooltip-pt-anoncontribs": "Lista uređenja napravljenih s ove IP adrese",
        "tooltip-pt-login": "Predlažem da se prijavite; međutim, to nije obavezno",
-       "tooltip-pt-logout": "Odjava sa projekta {{SITENAME}}",
+       "tooltip-pt-logout": "Odjavite se",
        "tooltip-pt-createaccount": "Predlažemo vam da izradite račun i prijavite se, iako to nije obavezno",
        "tooltip-ca-talk": "Diskusija o stranici sadržaja",
-       "tooltip-ca-edit": "Uredi ovu stranicu",
+       "tooltip-ca-edit": "Uredite ovu stranicu",
        "tooltip-ca-addsection": "Započnite novu sekciju.",
        "tooltip-ca-viewsource": "Ova stranica je zaštićena.\nMožete vidjeti njen izvor",
-       "tooltip-ca-history": "Prethodne verzije ove stranice",
+       "tooltip-ca-history": "Prethodne izmjene ove stranice",
        "tooltip-ca-protect": "Zaštiti ovu stranicu",
        "tooltip-ca-unprotect": "Promijeni zaštitu za ovu stranicu",
        "tooltip-ca-delete": "Izbriši ovu stranicu",
        "tooltip-ca-undelete": "Vratite izmjene koje su načinjene prije brisanja stranice",
-       "tooltip-ca-move": "Premjesti ovu stranicu",
+       "tooltip-ca-move": "Premjestite ovu stranicu",
        "tooltip-ca-watch": "Dodaj ovu stranicu na svoju listu praćenja",
        "tooltip-ca-unwatch": "Izbrišite ovu stranicu sa spiska praćenja",
        "tooltip-search": "Traži ovaj Wiki / Тражи овај Вики [alt-f]",
index 9f69585..3a290b5 100644 (file)
@@ -15,7 +15,6 @@
        "tog-extendwatchlist": "Ssaɣḍ umuɣ n tisniwin lli n ttfur bac ad n ẓṛṛa imbddln maci ɣir imaynutn",
        "tog-usenewrc": "Skr s imbddln imaynutn lli n sastwa (ira mayad JavaScript)",
        "tog-numberheadings": "nmra n nsmiat wahdot",
-       "tog-showtoolbar": "ⵙⴱⴰⵢⵏ ⴷ ⵜⵉⵏⵉⵎⴰⵙⵙⵏ ⵏ ⵓⵙⵏⴼⵍ",
        "tog-editondblclick": "ⵙⵏⴼⵍ ⵜⴰⵙⵏⵉⵡⵉⵏ ⵙ ⵓⵙⵉⵏⴽⵍⵉⴽ",
        "tog-editsectiononrightclick": "Yan uklik s tsga tafasi f uzwl n w-ayyaw bac ad tsbadlt ɣtad (ira JavaScript)",
        "tog-watchcreations": "Zaydn tasniwin lli skrɣ i umuɣ n tilli ssuġiɣ.",
index 4c86ecb..1960002 100644 (file)
@@ -19,7 +19,6 @@
        "tog-extendwatchlist": "မႄႇၼႄ သဵၼ်ႈၸိုဝ်ႈ တႃႇၼႄလွင်ႈလႅၵ်ႈလၢႆႊတင်းသဵင်ႈ၊ ဢၼ်ဢမ်ႇၵႃး ၸိူဝ်းလႅၵ်ႈလၢႆႈပႆႇပေႃးႁိုင်",
        "tog-usenewrc": "လွင်ႈလႅၵ်ႈလၢႆႊၼႃႈလိၵ်ႈၸုမ်း ၼႂ်းလွင်ႈလႅၵ်ႈလၢႆႊလႄႈသဵၼ်ႈၸိုဝ်ႈ ဢၼ်ပူၼ်ႉမႃးပႆႇႁိုင်",
        "tog-numberheadings": "ႁူဝ်ၶေႃႈၶပ်ႉတူဝ်ၼပ်ႉဝႅၼ်ႊဝႅၼ်ႊ",
-       "tog-showtoolbar": "ၼႄပၼ် ႁၢဝ်းၶိူင်ႈထတ်းမႄး",
        "tog-editondblclick": "ၼဵၵ်းၵူပ်ႉသေ ထတ်းမႄးၼႃႈလိၵ်ႈ",
        "tog-editsectiononrightclick": "ၼဵၵ်းၼိူဝ်ႁူဝ်ၶေႃႈၵၼ်ႊသေ ၽုၺ်ႇၵၢၼ်ထတ်းမႄးၵၼ်ႊ",
        "tog-watchcreations": "ထႅမ်ၼႃႈလိၵ်ႈ​ လႄႈ ၾၢႆႇ ဢၼ်ၵဝ်ၶႃႈသၢင်ႈၼၼ်ႉ သႂ်ႇတီႈသဵၼ်ႈမၢႆၵဝ်ၶႃႈ",
@@ -56,7 +55,7 @@
        "tog-prefershttps": "ၽွင်းၶဝ်ႈၸႂ်ႉတိုဝ်းၼၼ်ႉ ၸႂ်ႉတိုဝ်းၶွၼ်ႇၼႅၵ်ႉသျိၼ်ႇ ဢၼ်ႁူမ်ႇလူမ်ႈ",
        "underline-always": "ၵူႊယၢမ်း",
        "underline-never": "ဢမ်ႇႁဵတ်းသေပွၵ်ႈ",
-       "underline-default": "á\80\95á\80­á\80°á\80\84á\80ºá\81µá\82\85á\80\9dá\80ºá\82\88á\81¾á\81¢á\80\84á\80ºá\82\81á\81¢á\80\84á\80ºá\82\8aတၢင်းၼွၵ်ႈ ဢမ်ႇၼၼ် ပြၢဝ်းသိူဝ်ႇ",
+       "underline-default": "á\80\95á\80­á\80°á\80\84á\80ºá\81µá\82\85á\80\9dá\80ºá\82\88á\81¾á\81¢á\80\84á\80ºá\82\81á\81¢á\80\84á\80ºá\82\88တၢင်းၼွၵ်ႈ ဢမ်ႇၼၼ် ပြၢဝ်းသိူဝ်ႇ",
        "editfont-style": "ဢွင်ႈတီႈဢၼ်ထတ်းမႄး ဝႅပ်ႇယၢင်ႇၾွၼ်ႉ",
        "editfont-monospace": "ၾွၼ်ႉ မူဝ်ႇၼူဝ်သပဵတ်ႉ",
        "editfont-sansserif": "ၾွၼ်ႉ San-serif",
        "speciallogtitlelabel": "တီႈယိူင်း (ႁူဝ်ၶေႃႈ ဢမ်ႇၼၼ် {{ns:user}}: ၸိုဝ်ႈၽူႈၸႂ်ႉတိုဝ်း တႃႇ ၽူႈၸႂ်ႉတိုဝ်း):",
        "log": "သၢႆမၢႆ",
        "logeventslist-submit": "ၼႄ",
+       "logeventslist-more-filters": "ၼႄပၼ်သဵၼ်ႈသၢႆမၢႆတၢင်ႇၸိူဝ်း",
        "all-logs-page": "သဵၼ်ႈမၢႆၵူၼ်းတင်းၼမ် တင်းမူတ်း",
        "alllogstext": "ႁူမ်ႈၵၼ်ၼႄဝႆႉပၼ် သဵၼ်ႈမၢႆတွင်း ၶွင် {{SITENAME}} ဢၼ်ၸၢင်ႈဢဝ်လႆႈၼၼ်ႉ။\nၸဝ်ႈၵဝ်ႇ ၸၢင်ႈ လိူၵ်ႈ ပိူင်ထၢၼ်ႈသဵၼ်ႈမၢႆတွင်း၊ ၽူႈၸႂ်ႉတိုဝ်း(ၼင်ႇတူဝ်လိၵ်ႈလဵၵ်ႉယႂ်ႇ)၊ ဢမ်ႇၼၼ် ၼႃႈလိၵ်ႈဢၼ်ၵပ်းၵၢႆႇ (ၼင်ႇတူဝ်လိၵ်ႈလဵၵ်ႉယႂ်ႇ) သေၵေႃႈ တူၺ်းလႆႈယူႇ။",
        "logempty": "ဢမ်ႇငမ်ႇၵၼ်တင်း တီႈၼႂ်းသဵၼ်ႈမၢႆ",
        "uctop": "(ယၢမ်းလဵဝ်)",
        "month": "တႄႇဢဝ်လိူၼ် (လႄႈ ဢၼ်ပူၼ်ႉမႃး):",
        "year": "တႄႇဢဝ်ပီ (လႄႈ ဢၼ်ပူၼ်ႉမႃး):",
+       "date": "ၸႄႇဢဝ်ဝၼ်းထီႉ (လႄႈ ၸဝ်ႉသေၼၼ်ႉ):",
        "sp-contributions-newbies": "ၼႄပၼ်လွင်ႈၶဝ်ႈႁူမ်ႈ ၶွင် ဢၶွင်ႉဢၼ်မႂ်ႇလၢႆလၢႆၵူၺ်းလႄႈ",
        "sp-contributions-newbies-sub": "တွၼ်ႈတႃႇဢၶွင်ႉ ဢၼ်မႂ်ႇ",
        "sp-contributions-blocklog": "မၢႆတမ်းၵၢၼ်​ႁေႉတတ်း",
index a1493ae..05a4d49 100644 (file)
@@ -12,7 +12,6 @@
        "tog-extendwatchlist": "Ssemɣer umuɣ n uɛessi iwakken ad muqleɣ akk n wayen zemreɣ ad beddleɣ",
        "tog-usenewrc": "Ssegrew ibeddlen s usebtar deg ibeddilen imaynuten d umuɣ n uḍfar",
        "tog-numberheadings": "Izwal ɣur-sen imḍanen mebla ma serseɣ-iten",
-       "tog-showtoolbar": "Ssken tafeggagt n ifecka n ubeddel",
        "tog-editondblclick": "Beddel isebtar mi wekkiɣ snat n tikwal",
        "tog-editsectiononrightclick": "Ssermed abeddel n tigezmi s ukliki ayeffus ɣef izwal",
        "tog-watchcreations": "Rnu isebtar i xelqeɣ deg wumuɣ n uɛessi inu",
index a35c06a..3af2a71 100644 (file)
@@ -45,7 +45,6 @@
        "tog-extendwatchlist": "මෑත වෙනස්වීම් පමණක් නොව, අදාළ සියළු වෙනස්වීම් දක්වා පෙන්වන අයුරින් මුර-ලැයිස්තුව පුළුල් කරන්න",
        "tog-usenewrc": "මෑත වෙනස්වීම් සහ මුර ලැයිස්තුව හී පිටුව අනුව සමූහ වෙනස්වීම්",
        "tog-numberheadings": "ශීර්ෂ-නාම ස්වයංක්‍රීයව අංකනය කරන්න",
-       "tog-showtoolbar": "සංස්කරණ මෙවලම්තීරුව පෙන්වන්න",
        "tog-editondblclick": "ද්විත්ව-ක්ලික් කිරීම මගින් පිටු සංස්කරණය අරඹන්න",
        "tog-editsectiononrightclick": "ඡේද ශීර්ෂ මත දකුණු-ක්ලික් කිරීමෙන් ඡේද සංස්කරණය සක්‍රීය කරන්න",
        "tog-watchcreations": "මම තනන පිටු හා මම උඩුගත කරන ගොනු මාගේ මුරලැයිස්තුවට එක් කරන්න",
index cd490af..bbd8d5f 100644 (file)
@@ -50,7 +50,6 @@
        "tog-extendwatchlist": "Rozšíriť zoznam sledovaných stránok, aby zobrazoval všetky úpravy, nie len posledné",
        "tog-usenewrc": "Zoskupiť zmeny v posledných úpravách a na zozname sledovaných stránok podľa stránky",
        "tog-numberheadings": "Automaticky číslovať nadpisy",
-       "tog-showtoolbar": "Zobraziť panel nástrojov úprav",
        "tog-editondblclick": "Upravovať stránky po dvojitom kliknutí",
        "tog-editsectiononrightclick": "Umožniť upravovanie sekcie kliknutím pravým tlačidlom myši na nadpisy sekcií",
        "tog-watchcreations": "Pridávať stránky, ktoré vytvorím a súbory, ktoré nahrám medzi sledované",
index 80a0620..f77ecb9 100644 (file)
@@ -11,7 +11,6 @@
        "tog-newpageshidepatrolled": "نویں ورقیاں دی فہرست وچوں نگرانی ہیٹھ ورقے لُکاؤ",
        "tog-hidecategorization": "ورقیاں دیاں ونکی بندی لُکاؤ",
        "tog-numberheadings": "سرخیاں کوں خود کار نمبر ݙیوو",
-       "tog-showtoolbar": "آلات ترمیم ݙکھاؤ",
        "tog-editondblclick": "ڈبل کلک نال ورقے وچ تبدیلیاں کرو",
        "tog-previewontop": "تبدیلی آلے خانے کنوں پہلے پریویو ݙکھاؤ",
        "tog-previewonfirst": "پہلی تبدیلی تے پری ویویو ݙکھاؤ",
        "whatlinkshere-filters": "چھاݨے",
        "whatlinkshere-submit": "ڄلو",
        "ipbreason": "سبب:",
+       "ipb-partial": "جزوی",
+       "ipb-type-label": "قسم",
+       "ipb-pages-label": "ورقے",
        "autoblocklist-submit": "ڳولو",
        "blocklist-reason": "سبب:",
        "infiniteblock": "بے انت",
+       "blocklist-editing": "زیر ترمیم",
        "blocklink": "پابندی لاؤ",
        "contribslink": "حصے داری",
        "blocklogpage": "پابندی دی لاگ",
        "logentry-upload-overwrite": "$1 نے $3 دا نواں نسخہ {{GENDER:$2|اپلوڈ کیتا}}",
        "searchsuggest-search": "ڳولو",
        "duration-days": "$1 {{PLURAL:$1|ݙینہ}}",
+       "mw-widgets-titlesmultiselect-placeholder": "ٻیا شامل کرو۔۔۔",
        "randomrootpage": "بے ترتيب بنیادی ورقہ"
 }
index b4049af..70809a9 100644 (file)
@@ -28,7 +28,6 @@
        "tog-extendwatchlist": "Razširi spisek nadzorov, da bo prikazoval vse spremembe, ne le najnovejše",
        "tog-usenewrc": "Združi spremembe posamezne strani na zadnjih spremembah in spisku nadzorov",
        "tog-numberheadings": "Samodejno številči poglavja",
-       "tog-showtoolbar": "Prikaži urejevalno orodno vrstico",
        "tog-editondblclick": "Omogoči urejanje strani z dvojnim klikom",
        "tog-editsectiononrightclick": "Omogoči urejanje razdelkov z desnim klikanjem njihovih naslovov",
        "tog-watchcreations": "Na spisek nadzorov dodaj vse ustvarjene strani in moje naložene datoteke",
        "subject-preview": "Predogled zadeve:",
        "previewerrortext": "Med poskusom prikaza predogleda vaših sprememb je prišlo do napake.",
        "blockedtitle": "Uporabnik je blokiran",
+       "blocked-email-user": "<strong>Vaše uporabniško ime je bilo blokirano pred pošiljanjem e-pošte. Še vedno lahko urejate druge strani na tem wikiju.</strong> Polne podrobnosti blokade si lahko ogledate na [[Special:MyContributions|prispevkih računa]].\n\nBlokado je opravil(-a) $1.\n\nPodani razlog je <em>$2</em>.\n\n* Začetek blokade: $8\n* Potek blokade: $6\n* Blokirani uporabnik: $7\n* ID blokade #$5",
+       "blockedtext-partial": "<strong>Vaše uporabniško ime ali IP-naslov je bil blokiran pred spreminjanjem te strani. Še vedno lahko urejate druge strani na tem wikiju.</strong> Polne podrobnosti blokade si lahko ogledate na [[Special:MyContributions|prispevkih računa]].\n\nBlokado je opravil(-a) $1.\n\nPodani razlog je <em>$2</em>.\n\n* Začetek blokade: $8\n* Potek blokade: $6\n* Blokirani uporabnik: $7\n* ID blokade #$5",
        "blockedtext": "<strong>Urejanje z vašim uporabniškim imenom oziroma IP-naslovom je onemogočeno.</strong>\n\nBlokiral vas je $1.\nPodani razlog je <em>$2</em>.\n\n* Začetek blokade: $8\n* Potek blokade: $6\n* Blokirani uporabnik: $7\n\nO blokiranju se lahko pogovorite z uporabnikom/-co $1 ali katerim drugim [[{{MediaWiki:Grouppage-sysop}}|administratorjem]].\nVedite, da lahko ukaz »{{int:emailuser}}« uporabite le, če ste v [[Special:Preferences|nastavitvah]] vpisali in potrdili svoj elektronski naslov in ta ni blokiran.\nVaš IP-naslov je $3, številka blokade pa #$5.\nProsimo, vključite ju v vse morebitne poizvedbe.",
        "autoblockedtext": "Vaš IP-naslov je bil samodejno blokiran, saj je bil uporabljen s strani drugega uporabnika, ki ga je blokiral $1.\nRazlog za to je bil naslednji:\n\n:<em>$2</em>\n\n* Začetek blokade: $8\n* Konec blokade: $6\n* Blokirani uporabnik: $7\n\nKontaktirate lahko $1 ali katerega od drugih [[{{MediaWiki:Grouppage-sysop}}|administratorjev]], da razpravljate o blokadi.\n\nVedite, da lahko funkcijo »{{int:emailuser}}« uporabljate le, če ste v svoje [[Special:Preferences|uporabniške nastavitve]] vnesli veljaven e-poštni naslov, in vam njena uporaba ni bila preprečena.\n\nVaš trenutni IP-naslov je $3, ID blokiranja pa #$5. Prosimo, vključite ta ID v vsako zastavljeno vprašanje.",
        "systemblockedtext": "Vaše uporabniško ime ali IP-naslov je MediaWiki samodejn blokiral.\nPodani razlog je:\n\n:<em>$2</em>\n\n* Začetek blokade: $8\n* Potek blokade: $6\n* Blokirani uporabnik: $7\n\nVaš trenutni IP-naslov je $3.\nProsimo, da v svoje poizvedbe vključite vse zgornje podatke.",
        "prefs-email": "Možnosti e-pošte",
        "prefs-rendering": "Videz",
        "saveprefs": "Shrani",
-       "restoreprefs": "obnova vseh privzetih nastavitev (v vseh razdelkih)",
+       "restoreprefs": "Obnovi vse privzete nastavitve (v vseh razdelkih)",
        "prefs-editing": "Urejanje",
        "searchresultshead": "Nastavitve poizvedovanja",
        "stub-threshold": "Prag označevanja škrbin ($1):",
        "prefixindex": "Vse strani s predpono",
        "prefixindex-namespace": "Vse strani s predpono (imenski prostor $1)",
        "prefixindex-submit": "Prikaži",
-       "prefixindex-strip": "Na seznamu odreži predpono",
+       "prefixindex-strip": "V rezultatih skrij predpono",
        "shortpages": "Kratke strani",
        "longpages": "Dolge strani",
        "deadendpages": "Članki brez delujočih povezav",
        "ipb-disableusertalk": "Med blokado prepreči temu uporabniku urejati lastno pogovorno stran",
        "ipb-change-block": "Ponovno blokiraj uporabnika s temi nastavitvami",
        "ipb-confirm": "Potrdi blokado",
+       "ipb-sitewide": "Po celotni strani",
+       "ipb-partial": "Delno",
+       "ipb-type-label": "Vrsta",
+       "ipb-pages-label": "Strani",
        "badipaddress": "Neveljaven IP-naslov ali uporabniško ime.",
        "blockipsuccesssub": "Blokiranje je uspelo",
        "blockipsuccesstext": "[[Special:Contributions/$1|$1]] je {{GENDER:$1|blokiran|blokirana|blokiran(-a)}}.<br />\nOglejte si [[Special:BlockList|seznam blokad]] za pregled blokad.",
        "createaccountblock": "onemogočeno ustvarjanje računov",
        "emailblock": "e-pošta blokirana",
        "blocklist-nousertalk": "preprečeno urejanje lastne pogovorne strani",
+       "blocklist-editing": "urejanje",
+       "blocklist-editing-sitewide": "urejanje (po celotni strani)",
        "ipblocklist-empty": "Seznam blokad je prazen.",
        "ipblocklist-no-results": "Zahtevan IP-naslov ali uporabniško ime ni blokirano.",
        "blocklink": "blokiraj",
        "blocklog-showlog": "Ta uporabnik je že bil blokiran.\nZa sklicevanje so tule navedeni vnosi v dnevniku blokiranja:",
        "blocklog-showsuppresslog": "Ta uporabnik je že bil blokiran in skrit.\nDnevnik skrivanja je na voljo spodaj:",
        "blocklogentry": "[[$1]] blokiran s časom poteka blokade $2 $3",
-       "reblock-logentry": "je spremenil(a) nastavitve blokade za [[$1]] na čas $2 $3",
+       "reblock-logentry": "je spremenil(-a) nastavitve blokade za [[$1]] na čas $2 $3",
        "blocklogtext": "Prikazan je dnevnik blokiranja in deblokiranja uporabnikov. Samodejno blokirani IP-naslovi niso navedeni. Trenutno veljavna blokiranja so navedena na [[Special:BlockList|seznamu blokad]].",
        "unblocklogentry": "je deblokiral(-a) »$1«",
        "block-log-flags-anononly": "samo za brezimne uporabnike",
        "logentry-block-block": "$1 je {{GENDER:$2|blokiral|blokirala|blokiral(-a)}} {{GENDER:$4|$3}} s časom poteka $5 $6",
        "logentry-block-unblock": "$1 je {{GENDER:$2|odblokiral|odblokirala|odblokiral(-a)}} {{GENDER:$4|$3}}",
        "logentry-block-reblock": "$1 je {{GENDER:$2|spremenil|spremenila|spremenil(-a)}} nastavitve blokade za {{GENDER:$4|$3}} s časomspremenil poteka $5 $6",
+       "logentry-partialblock-block": "$1 je {{GENDER:$2|blokiral|blokirala|blokiral(-a)}} {{GENDER:$4|$3}} pred urejanjem {{PLURAL:$8||strani}} $7 s časom poteka $5 $6",
+       "logentry-partialblock-reblock": "$1 je {{GENDER:$2|spremenil|spremenil|spremenil(-a)}} nastavitve blokade {{GENDER:$4|$3}} za preprečitev urejanj {{PLURAL:$8||strani}} $7 s časom poteka $5 $6",
+       "logentry-non-editing-block-block": "$1 je {{GENDER:$2|blokiral|blokirala|blokiral(-a)}} {{GENDER:$4|$3}} pred neurejevalnimi dejanji s časom poteka $5 $6",
+       "logentry-non-editing-block-reblock": "$1 je {{GENDER:$2|spremenil|spremenil|spremenil(-a)}} nastavitve blokade {{GENDER:$4|$3}} za neurejevalna dejanja s časom poteka $5 $6",
        "logentry-suppress-block": "$1 je {{GENDER:$2|blokiral|blokirala|blokiral(-a)}} {{GENDER:$4|$3}} s časom poteka $5 $6",
        "logentry-suppress-reblock": "$1 je {{GENDER:$2|spremenil|spremenila|spremenil(-a)}} nastavitve blokade za {{GENDER:$4|$3}} s časom poteka $5 $6",
        "logentry-import-upload": "$1 je {{GENDER:$2|uvozil|uvozila|uvozil(-a)}} $3 z nalaganjem datoteke",
        "mw-widgets-titleinput-description-redirect": "preusmeritev na $1",
        "mw-widgets-categoryselector-add-category-placeholder": "Dodaj kategorijo ...",
        "mw-widgets-usersmultiselect-placeholder": "Dodaj več ...",
+       "mw-widgets-titlesmultiselect-placeholder": "Dodaj več ...",
        "date-range-from": "Od datuma:",
        "date-range-to": "Do datuma:",
        "sessionmanager-tie": "Ne morem združiti več vrst overitvenih zahtev: $1.",
        "passwordpolicies-policy-passwordcannotmatchblacklist": "Geslo se ne sme ujemati s posebej prepovedanimi gesli",
        "passwordpolicies-policy-maximalpasswordlength": "Geslo ne sme biti daljše od $1 {{PLURAL:$1|znak|znaka|znake|znakov}}",
        "passwordpolicies-policy-passwordcannotbepopular": "Geslo ne sme biti {{PLURAL:$1|1=popularno geslo|na seznamu $1 popularnih gesel}}",
-       "easydeflate-invaliddeflate": "Dana vsebina ni pravilno stisnjena"
+       "easydeflate-invaliddeflate": "Dana vsebina ni pravilno stisnjena",
+       "unprotected-js": "Iz varnostnih razlogov JavaScripta ni možno naložiti z nezaščitenih strani. Prosimo, da JavaScript ustvarite samo v imenskem prostoru MediaWiki ali kot uporabniško podstran."
 }
index 21fa4f4..caa94b9 100644 (file)
@@ -27,7 +27,6 @@
        "tog-extendwatchlist": "Erweiterte Beobachtungsliste zur Oazeige oller Änderunga",
        "tog-usenewrc": "Erweiterte Darstellung dar „Letzta Änderunga“ (benetigt JavaScript)",
        "tog-numberheadings": "Ieberschrifta automatisch nummeriern",
-       "tog-showtoolbar": "Bearbta Werkzichleiste aozäan (beneeticht JavaScript)",
        "tog-editondblclick": "Seita mit Doppelklick bearbta (JavaScript)",
        "tog-editsectiononrightclick": "Eenzelne Obschniete per Rechtsklick bearbta (JavaScript)",
        "tog-watchcreations": "Salber derstallte Seyta automatisch beobachta",
index 726c5d4..1ac0131 100644 (file)
@@ -17,7 +17,6 @@
        "tog-extendwatchlist": "Balaari liiska waardiyaha si loo arko dhamaan isbedelada, ma ahan oo kaliya kuwa dhow",
        "tog-usenewrc": "Isticmaal isbdelada dhowdhow oo la'horumariyey (waxaa loo baahanyahay JavaScript)",
        "tog-numberheadings": "Lambarada automaatik ahaan u tirinaayo Cinwaanada",
-       "tog-showtoolbar": "Itus bedelka qalabka shaqada (waxaa loo baahanyahay JavaScript)",
        "tog-editondblclick": "wax ka bedel maqaalada labo jeer la riixay (waxaa loo baahanyahay JavaScript)",
        "tog-editsectiononrightclick": "Fasax cutub wax ka bedelida hadii batoonka midig ee dooliga <br /> dhag lagu siiyo cinwaanka korkiisa (JavaScript)",
        "tog-watchcreations": "Ku dar boggaga aan aniga sameeyay liiskayga waardiyaha",
index d6b68a7..9e938b5 100644 (file)
@@ -49,7 +49,6 @@
        "tog-extendwatchlist": "Zgjero listën e të gjitha faqeve të vëzhguara në mënyrë që t'i tregojë të gjitha ndryshimet, jo vetëm më të fundit.",
        "tog-usenewrc": "Grupo ndryshimet sipas faqes në ndryshimet më të fundit dhe listën e vëzhgimit (kërkon JavaScript)",
        "tog-numberheadings": "Numërim automatik i titujve",
-       "tog-showtoolbar": "Shfaq shiritin e veglave të redaktorit",
        "tog-editondblclick": "Redakto faqe në klikim të dyfishtë",
        "tog-editsectiononrightclick": "Aktivizo redaktimin e seksioneve duke klikuar me të djathtën mbi titullin e seksionit",
        "tog-watchcreations": "Shto faqet e krijuara dhe skedarët e ngarkuar nga unë në listën time të mbikqyrjes",
index 635bd3c..a4e5b1c 100644 (file)
@@ -50,7 +50,6 @@
        "tog-extendwatchlist": "Прошири списак надгледања за приказ свих промена, не само недавних",
        "tog-usenewrc": "Групиши промене по страници у скорашњим изменама и списку надгледања",
        "tog-numberheadings": "Аутоматски нумериши наслове",
-       "tog-showtoolbar": "Прикажи траку са алаткама за уређивање",
        "tog-editondblclick": "Омогући уређивање страница двоструким кликом",
        "tog-editsectiononrightclick": "Омогући уређивање одељака десним кликом на њихове наслове",
        "tog-watchcreations": "Додај странице које направим и датотеке које отпремим на мој списак надгледања",
        "talk": "Разговор",
        "views": "Погледи",
        "toolbox": "Алатке",
-       "tool-link-userrights": "Ð\9fÑ\80омена {{GENDER:$1|коÑ\80иÑ\81ниÑ\87киÑ\85}} Ð³Ñ\80Ñ\83пе",
+       "tool-link-userrights": "Ð\9fÑ\80омена {{GENDER:$1|коÑ\80иÑ\81ниÑ\87киÑ\85}} Ð³Ñ\80Ñ\83па",
        "tool-link-userrights-readonly": "Приказ {{GENDER:$1|корисничких}} група",
        "tool-link-emailuser": "Слање имејла {{GENDER:$1|кориснику|корисници}}",
-       "imagepage": "Погледај страницу датотеке",
-       "mediawikipage": "Погледај страницу поруке",
-       "templatepage": "Погледај страницу шаблона",
-       "viewhelppage": "Погледај страницу помоћи",
-       "categorypage": "Погледај страницу категорије",
+       "imagepage": "Прикажи страницу датотеке",
+       "mediawikipage": "Прикажи страницу поруке",
+       "templatepage": "Прикажи страницу шаблона",
+       "viewhelppage": "Прикажи страницу помоћи",
+       "categorypage": "Прикажи страницу категорије",
        "viewtalkpage": "Прикажи дискусију",
        "otherlanguages": "На другим језицима",
        "redirectedfrom": "(преусмерено са $1)",
        "privacypage": "Project:Политика приватности",
        "badaccess": "Грешка у дозволама",
        "badaccess-group0": "Није вам дозвољено да извршите радњу коју сте захтевали.",
-       "badaccess-groups": "Радња коју сте захтевали је ограничена само корисницима у {{PLURAL:$2|следећој групи|следећим групама}}: $1.",
+       "badaccess-groups": "Радња коју сте захтевали је ограничена на кориснике из {{PLURAL:$2|следеће групе|једне од следећих група}}: $1.",
        "versionrequired": "Потребна је верзија $1 Медијавикија",
        "versionrequiredtext": "Потребна је верзија $1 Медијавикија да бисте користили ову страницу.\nПогледајте страницу [[Special:Version|верзије]].",
        "ok": "У реду",
        "hidetoc": "сакриј",
        "collapsible-collapse": "сакриј",
        "collapsible-expand": "прикажи",
-       "confirmable-confirm": "Ð\94а Ð»Ð¸ {{GENDER:$1|Ñ\81Ñ\82е}} сигурни?",
+       "confirmable-confirm": "Ð\88еÑ\81Ñ\82е {{GENDER:$1|ли}} сигурни?",
        "confirmable-yes": "Да",
        "confirmable-no": "Не",
        "thisisdeleted": "Приказати или вратити $1?",
        "createacct-another-username-ph": "Унесите корисничко име",
        "yourpassword": "Лозинка:",
        "userlogin-yourpassword": "Лозинка",
-       "userlogin-yourpassword-ph": "Унесите своју лозинку",
+       "userlogin-yourpassword-ph": "Унесите лозинку",
        "createacct-yourpassword-ph": "Унесите лозинку",
        "yourpasswordagain": "Поново унеси лозинку:",
        "createacct-yourpasswordagain": "Потврдите лозинку",
        "externaldberror": "Дошло је до грешке при потврди идентитета базе података или вам није дозвољено да ажурирате свој спољни налог.",
        "login": "Пријава",
        "login-security": "Потврда вашег индентитета",
-       "nav-login-createaccount": "Ð\9fÑ\80иÑ\98ава / Ñ\80егиÑ\81Ñ\82Ñ\80аÑ\86иÑ\98а",
+       "nav-login-createaccount": "Ð\9fÑ\80иÑ\98авиÑ\82е Ñ\81е / Ð¾Ñ\82воÑ\80иÑ\82е Ð½Ð°Ð»Ð¾Ð³",
        "logout": "Одјава",
        "userlogout": "Одјава",
        "notloggedin": "Нисте пријављени",
        "createacct-benefit-body1": "{{PLURAL:$1|измена|измене|измена}}",
        "createacct-benefit-body2": "{{PLURAL:$1|страница|странице|страница}}",
        "createacct-benefit-body3": "недавно {{PLURAL:$1|активни корисник|активна корисника|активних корисника}}",
-       "badretype": "УнеÑ\82е Ð»Ð¾Ð·Ð¸Ð½ÐºÐµ се не поклапају.",
+       "badretype": "Ð\9bозинке ÐºÐ¾Ñ\98е Ñ\81Ñ\82е Ñ\83нели се не поклапају.",
        "usernameinprogress": "Налог за ово корисничко име се већ прави, сачекајте.",
        "userexists": "Унесено корисничко име је већ у употреби.\nОдаберите друго.",
        "loginerror": "Грешка при пријављивању",
        "loginlanguagelabel": "Језик: $1",
        "suspicious-userlogout": "Ваш захтев за одјаву је одбијен јер изгледа да га је послао покварени прегледач или кеширани прокси.",
        "createacct-another-realname-tip": "Право име је опционално.\nАко одаберете да га наведете, биће коришћено за приписивање вашег рада.",
-       "pt-login": "Ð\9fÑ\80иÑ\98ава",
+       "pt-login": "Ð\9fÑ\80иÑ\98авиÑ\82е Ñ\81е",
        "pt-login-button": "Пријави ме",
        "pt-login-continue-button": "Настави пријављивање",
-       "pt-createaccount": "Ð\9eÑ\82ваÑ\80аÑ\9aе Ð½Ð°Ð»Ð¾Ð³Ð°",
+       "pt-createaccount": "Ð\9eÑ\82воÑ\80иÑ\82е Ð½Ð°Ð»Ð¾Ð³",
        "pt-userlogout": "Одјави ме",
        "php-mail-error-unknown": "Непозната грешка у функцији PHP mail().",
        "user-mail-no-addy": "Покушали сте да пошаљете имејл без имејл-адресе.",
        "resetpass-validity-soft": "Ваша лозинка није важећа: $1\n\nИзаберите нову одмах или кликните на „{{int:authprovider-resetpass-skip-label}}“ да је промените касније.",
        "passwordreset": "Ресетовање лозинке",
        "passwordreset-text-one": "Попуните овај образац да бисте добили привремену лозинку на имејл.",
-       "passwordreset-text-many": "{{PLURAL:$1|Ð\98Ñ\81пÑ\83ниÑ\82е Ñ\98едно Ð¾Ð´ Ð¿Ð¾Ñ\99а ÐºÐ°ÐºÐ¾ Ð±Ð¸Ñ\81Ñ\82е Ð´Ð¾Ð±Ð¸Ð»Ð¸ Ð¿Ñ\80ивÑ\80еменÑ\83 Ð»Ð¾Ð·Ð¸Ð½ÐºÑ\83 Ð½Ð° Ð¸Ð¼ÐµÑ\98л.}}",
+       "passwordreset-text-many": "{{PLURAL:$1|Ð\98Ñ\81пÑ\83ниÑ\82е Ñ\98едно Ð¾Ð´ Ð¿Ð¾Ñ\99а ÐºÐ°ÐºÐ¾ Ð±Ð¸Ñ\81Ñ\82е Ð´Ð¾Ð±Ð¸Ð»Ð¸ Ð¿Ñ\80ивÑ\80еменÑ\83 Ð»Ð¾Ð·Ð¸Ð½ÐºÑ\83 Ð¿Ñ\83Ñ\82ем Ð¸Ð¼ÐµÑ\98ла.}}",
        "passwordreset-disabled": "Ресетовање лозинке је онемогућено на овом викију.",
        "passwordreset-emaildisabled": "Имејл је онемогућен на овом викију.",
        "passwordreset-username": "Корисничко име:",
        "subject-preview": "Преглед теме:",
        "previewerrortext": "Дошло је до грешке при покушају прегледа промена.",
        "blockedtitle": "Корисник је блокиран",
+       "blocked-email-user": "<strong>Вашем корисничком имену је блокирано слање имејлова. Још увек можете да уређујете друге странице на овом викију.</strong> Можете да видите потпуне детаље блокаде на [[Special:MyContributions|доприносима налога]].\n\nБлокаду је извршио/ла $1.\n\nНаведен је следећи разлог: <em>$2</em>.\n\n* Почетак блокаде: $8\n* Истек блокаде: $6\n* Намењена кориснику/ци или IP адреси: $7\n* ID блокаде #$5",
+       "blockedtext-partial": "<strong>Вашем корисничком имену или IP адреси је блокирано прављење промена на овој страници. Још увек можете да уређујете друге странице на овом викију.</strong> Можете да видите потпуне детаље блокаде на [[Special:MyContributions|доприносима налога]].\n\nБлокаду је извршио/ла $1.\n\nНаведен је следећи разлог: <em>$2</em>.\n\n* Почетак блокаде: $8\n* Истек блокаде: $6\n* Намењена кориснику/ци или IP адреси: $7\n* ID блокаде #$5",
        "blockedtext": "<strong>Ваше корисничко име или IP адреса је блокирана.</strong>\n\nБлокаду је {{GENDER:$4|извршио|извршила}} $1.\nРазлог је <em>$2</em>.\n\n* Почетак блокаде: $8\n* Истек блокаде: $6\n* Блокирани: $7\n\nМожете да контактирате {{GENDER:$4|корисника|корисницу}} $1 или другог [[{{MediaWiki:Grouppage-sysop}}|администратора]] да бисте дискутовали о блокади.\nНе можете да користите функцију „{{int:emailuser}}” осим ако сте навели валидну имејл-адресу у својим [[Special:Preferences|подешавањима налога]] и нисте блокирани од коришћења исте.\nВаша тренутна IP адреса је $3, а ID блокаде #$5.\nНаведите све горње детаље при прављењу било каквих упита.",
        "autoblockedtext": "Ваша IP адреса је аутоматски блокирана јер ју је користио други корисник, кога је {{GENDER:$4|блокирао|блокирала}} $1.\nРазлог:\n\n:<em>$2</em>\n\n* Почетак блокаде: $8\n* Крај блокаде: $6\n* Име корисника: $7\n\nМожете да контактирате {{GENDER:$4|корисника|корисницу}} $1 или другог [[{{MediaWiki:Grouppage-sysop}}|администратора]] да бисте расправљали о блокади.\n\nЗапамтите да не можете да користите функцију „{{int:emailuser}}“ осим ако сте навели важећу имејл-адресу у својим [[Special:Preferences|подешавањима]].\n\nВаша тренутна IP адреса је $3, а ID блокаде $5.\nУкључите све горње детаље при прављењу било каквих упита.",
        "blockednoreason": "разлог није наведен",
        "recreate-moveddeleted-warn": "<strong>Упозорење: Поново правите страницу која је претходно избрисана.</strong>\n\nРазмотрите да ли је прикладно да наставите са уређивањем ове странице.\nОвде је наведен дневник брисања и премештања са образложењем:",
        "moveddeleted-notice": "Ова страница је избрисана.\nДневник брисања, заштите и премештања странице је наведен испод као референца.",
        "moveddeleted-notice-recent": "Ова страница је недавно избрисана (у последњих 24 сата).\nДневник брисања, заштите и премештања странице наведен је испод као референца:",
-       "log-fulllog": "Цео дневник",
+       "log-fulllog": "Ð\9fÑ\80икажи Ñ\86ео дневник",
        "edit-hook-aborted": "Измену је прекинула кука.\nНије дато никакво образложење.",
        "edit-gone-missing": "Није могуће ажурирати страницу.\nИзгледа да је избрисана.",
        "edit-conflict": "Сукоб измена.",
        "prevn-title": "$1 {{PLURAL:$1|претходни  резултат|претходна резултата|претходних резултата}}",
        "nextn-title": "$1 {{PLURAL:$1|следећи резултат|следећа резултата|следећих резултата}}",
        "shown-title": "Прикажи $1 {{PLURAL:$1|резултат|резултата}} по страници",
-       "viewprevnext": "Погледај ($1 {{int:pipe-separator}} $2) ($3).",
+       "viewprevnext": "Погледајте ($1 {{int:pipe-separator}} $2) ($3).",
        "searchmenu-exists": "<strong>Постоји страница под називом „[[:$1]]”!</strong> {{PLURAL:$2|0=|Такође погледајте друге пронађене резултате претраге.}}",
        "searchmenu-new": "<strong>Направите страницу „[[:$1]]” на овом викију!</strong> {{PLURAL:$2|0=|Такође погледајте резултат претраге.|Такође погледајте резултате претраге.}}",
        "searchprofile-articles": "Странице са садржајем",
        "search-section": "(одељак $1)",
        "search-category": "(категорија $1)",
        "search-file-match": "(подудара се садржај датотеке)",
-       "search-suggest": "Ð\94а Ð»Ð¸ Ñ\81Ñ\82е Ð¼Ð¸Ñ\81лили: $1",
-       "search-rewritten": "Приказани резултати за $1. Ипак претражи $2.",
+       "search-suggest": "Ð\88еÑ\81Ñ\82е Ð»Ð¸ Ð¼Ð¸Ñ\81лили Ð½Ð° â\80\9e$1â\80\9d",
+       "search-rewritten": "Приказују се резултати за „$1”. Ипак претражи „$2”.",
        "search-interwiki-caption": "Резултати са сестринских пројеката",
        "search-interwiki-default": "Резултати са $1:",
        "search-interwiki-more": "(више)",
        "prefs-watchlist": "Списак надгледања",
        "prefs-editwatchlist": "Уређивање списка надгледања",
        "prefs-editwatchlist-label": "Уреди уносе на списку надгледања:",
-       "prefs-editwatchlist-edit": "погледај и уклони наслове са списка надгледања",
+       "prefs-editwatchlist-edit": "прикажи и уклони наслове са списка надгледања",
        "prefs-editwatchlist-raw": "уреди необрађени списак надгледања",
        "prefs-editwatchlist-clear": "очисти списак надгледања",
        "prefs-watchlist-days": "Број дана у списку надгледања:",
        "recentchanges-network": "Због техничког проблема, није могуће учитати резултате. Покушајте да освежите страницу.",
        "recentchanges-notargetpage": "Унесите име странице изнад да бисте видели промене сродне с овом страницом",
        "recentchanges-feed-description": "Пратите најскорије промене на викију у овом фиду.",
-       "recentchanges-label-newpage": "Ð\9eвом Ð¸Ð·Ð¼ÐµÐ½Ð¾Ð¼ Ñ\98е Ð½Ð°Ð¿Ñ\80авÑ\99ена Ð½ова страница",
+       "recentchanges-label-newpage": "Ð\9dова страница",
        "recentchanges-label-minor": "Мања измена",
        "recentchanges-label-bot": "Ботовска измена",
        "recentchanges-label-unpatrolled": "Непатролирана измена",
        "recentchanges-label-plusminus": "Промена величине странице у бајтовима",
        "recentchanges-legend-heading": "<strong>Легенда:</strong>",
-       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (такође погледајте [[Special:NewPages|списак нових страница]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|списак нових страница]])",
        "recentchanges-legend-plusminus": "(<em>±123</em>)",
        "recentchanges-submit": "Прикажи",
        "rcfilters-tag-remove": "Уклоните филтер „$1“",
        "prefixindex": "Све странице са префиксом",
        "prefixindex-namespace": "Све странице с предметком (именски простор $1)",
        "prefixindex-submit": "Прикажи",
-       "prefixindex-strip": "СакÑ\80иÑ\98 Ð¿Ñ\80еÑ\84икÑ\81 Ñ\83 Ñ\81пиÑ\81кÑ\83",
+       "prefixindex-strip": "СакÑ\80иÑ\98 Ð¿Ñ\80еÑ\84икÑ\81 Ñ\83 Ñ\80езÑ\83лÑ\82аÑ\82има",
        "shortpages": "Кратке странице",
        "longpages": "Дугачке странице",
        "deadendpages": "Ћорсокаци",
        "allpages-hide-redirects": "Сакриј преусмерења",
        "cachedspecial-viewing-cached-ttl": "Гледате кеширану верзију ове странице, која може бити стара и до $1.",
        "cachedspecial-viewing-cached-ts": "Гледате кеширану верзију ове странице, која можда није потпуно тренутна.",
-       "cachedspecial-refresh-now": "Погледај најновију.",
+       "cachedspecial-refresh-now": "Прикажи најновију.",
        "categories": "Категоријe",
        "categories-submit": "Прикажи",
        "categoriespagetext": "{{PLURAL:$1|1=Следећа категорија постоји на викију и можда је/није неискоришћена.|Следеће категорије постоје на викију и можда су/нису неискоришћене.}}\nТакође погледајте [[Special:WantedCategories|тражене категорије]].",
        "namespace_association": "Повезани именски простор",
        "tooltip-namespace_association": "Означите ову кутијицу да бисте укључили и разговор или именски простор теме која је повезана са изабраним именским простором",
        "blanknamespace": "(главни)",
-       "contributions": "Доприноси {{GENDER:$1|корисника|кориснице}}",
+       "contributions": "{{GENDER:$1|Доприноси корисника|Доприноси кориснице|Кориснички доприноси}}",
        "contributions-title": "Доприноси {{GENDER:$1|корисника|кориснице}} $1",
        "mycontris": "Доприноси",
        "anoncontribs": "Доприноси",
        "ipb-disableusertalk": "Онемогући кориснику да уређује своју страницу за разговор",
        "ipb-change-block": "Поновно блокирај корисника с овим подешавањима",
        "ipb-confirm": "Потврди блокирање",
+       "ipb-sitewide": "На целом сајту",
+       "ipb-partial": "Делимично",
+       "ipb-type-label": "Врста",
+       "ipb-pages-label": "Странице",
        "badipaddress": "Неважећа IP адреса",
        "blockipsuccesssub": "Блокирање је успело",
        "blockipsuccesstext": "[[Special:Contributions/$1|$1]] је {{GENDER:$1|блокиран|блокирана}}.<br />\nПогледајте [[Special:BlockList|списак]] за преглед блокада.",
        "ipb-edit-dropdown": "Уреди разлоге блокирања",
        "ipb-unblock-addr": "Деблокирај $1",
        "ipb-unblock": "Деблокирај корисничко име или IP адресу",
-       "ipb-blocklist": "Погледај постојеће блокаде",
+       "ipb-blocklist": "Прикажи постојеће блокаде",
        "ipb-blocklist-contribs": "Доприноси за {{GENDER:$1|$1}}",
        "ipb-blocklist-duration-left": "преостало: $1",
        "unblockip": "Деблокирање корисника",
        "createaccountblock": "отварање налога је онемогућено",
        "emailblock": "имејл је онемогућен",
        "blocklist-nousertalk": "забрањено уређивање сопствене странице за разговор",
+       "blocklist-editing": "уређивање",
+       "blocklist-editing-sitewide": "уређивање (на целом сајту)",
        "ipblocklist-empty": "Списак блокирања је празан.",
        "ipblocklist-no-results": "Тражена IP адреса или корисничко име није блокирано.",
        "blocklink": "блокирај",
        "databaselocked": "База података је већ закључана.",
        "databasenotlocked": "База није закључана.",
        "lockedbyandtime": "(од $1 дана $2 у $3)",
-       "move-page": "Премештање „$1”",
+       "move-page": "Премештање странице „$1”",
        "move-page-legend": "Премештање странице",
        "movepagetext": "Доњи образац ће преименовати страницу, премештајући целу историју на ново име.\nСтари наслов постаће преусмерење на нови.\nМожете ажурирати преусмерења која воде до изворног наслова;\nпогледајте [[Special:DoubleRedirects|двострука]] или [[Special:BrokenRedirects|покварена]] преусмерења.\nНа вама је одговорност да везе и даље иду тамо где треба.\n\nСтраница <strong>неће</strong> бити премештена ако већ постоји страница с тим именом (осим ако је празна, садржи преусмерење или нема историју измена).\nТо значи да можете вратити страницу на претходно име ако погрешите, али не можете ''преписати'' постојећу.\n\n<strong>Напомена:</strong>\nОво може представљати драстичну и неочекивану измену за популарну страницу;\nдобро размислите о последицама пре него што наставите.",
        "movepagetext-noredirectfixer": "Доњи образац ће преименовати страницу, премештајући целу историју на ново име.\nСтари наслов постаће преусмерење на нови.\nПогледајте [[Special:DoubleRedirects|двострука]] или [[Special:BrokenRedirects|покварена]] преусмерења.\nНа вама је одговорност да везе и даље иду тамо где треба.\n\nСтраница <strong>неће</strong> бити премештена ако већ постоји страница с тим именом (осим ако је празна, садржи преусмерење или нема историју измена).\nТо значи да можете вратити страницу на претходно име ако погрешите, али не можете ''преписати'' постојећу.\n\n<strong>Напомена:</strong>\nОво може представљати драстичну и неочекивану измену за популарну страницу;\nдобро размислите о последицама пре него што наставите.",
        "allmessages-prefix": "Филтрирај по префиксу:",
        "allmessages-language": "Језик:",
        "allmessages-filter-submit": "Иди",
-       "allmessages-filter-translate": "Преведи",
+       "allmessages-filter-translate": "Преведите",
        "thumbnail-more": "Повећајте",
        "filemissing": "Недостаје датотека",
        "thumbnail_error": "Грешка при прављењу сличице: $1",
        "tooltip-pt-userpage": "{{GENDER:|Ваша}} корисничка страница",
        "tooltip-pt-anonuserpage": "Корисничка страница за IP адресу с које уређујете",
        "tooltip-pt-mytalk": "{{GENDER:|Ваша}} страница за разговор",
-       "tooltip-pt-anontalk": "Дискусија о уређивањима са ове IP адресе",
+       "tooltip-pt-anontalk": "Дискусија о изменама са ове IP адресе",
        "tooltip-pt-preferences": "{{GENDER:|Ваша}} подешавања",
-       "tooltip-pt-watchlist": "Списак страница које надгледате",
+       "tooltip-pt-watchlist": "Списак страница чије промене надгледате",
        "tooltip-pt-mycontris": "Списак {{GENDER:|ваших}} доприноса",
-       "tooltip-pt-anoncontribs": "Ð\9bиÑ\81Ñ\82а измена направљених са ове IP адресе",
+       "tooltip-pt-anoncontribs": "СпиÑ\81ак измена направљених са ове IP адресе",
        "tooltip-pt-login": "Предлажемо вам да се пријавите, иако то није обавезно",
        "tooltip-pt-login-private": "Морате да се пријавите да бисте користили овај Вики",
        "tooltip-pt-logout": "Одјавите се",
        "tooltip-ca-unprotect": "Промени заштиту ове странице",
        "tooltip-ca-delete": "Избришите ову страницу",
        "tooltip-ca-undelete": "Врати измене које су начињене на овој страници пре брисања странице",
-       "tooltip-ca-move": "Премести ову страницу",
+       "tooltip-ca-move": "Преместите ову страницу",
        "tooltip-ca-watch": "Додајте ову страницу на свој списак надгледања",
        "tooltip-ca-unwatch": "Уклоните ову страницу са списка надгледања",
        "tooltip-search": "Претражите пројекат {{SITENAME}}",
        "dberr-usegoogle": "У међувремену, покушајте да претражите помоћу Гугла.",
        "dberr-outofdate": "Имајте на уму да њихови примерци нашег садржаја могу бити застарели.",
        "dberr-cachederror": "Ово је привремено меморисан примерак стране који можда није ажуран.",
-       "htmlform-invalid-input": "Ð\9fоÑ\81Ñ\82оÑ\98е Ð¿Ñ\80облеми Ñ\81а Ð²Ð°Ñ\88им Ñ\83ноÑ\81ом.",
+       "htmlform-invalid-input": "Ð\9fоÑ\81Ñ\82оÑ\98е Ð¿Ñ\80облеми Ñ\81а Ð½ÐµÐºÐ¸Ð¼ Ð¾Ð´ Ð²Ð°Ñ\88иÑ\85 Ñ\83ноÑ\81а.",
        "htmlform-select-badoption": "Вредност коју сте навели није валидна опција.",
        "htmlform-int-invalid": "Наведена вредност није цели број.",
        "htmlform-float-invalid": "Наведена вредност није број.",
        "logentry-block-block": "$1 је {{GENDER:$2|блокирао|блокирала}} {{GENDER:$4|$3}} у трајању од $5 $6",
        "logentry-block-unblock": "$1 је {{GENDER:$2|деблокирао|деблокирала}} {{GENDER:$4|$3}}",
        "logentry-block-reblock": "$1 је {{GENDER:$2|променио|променила}} подешавања за блокирање {{GENDER:$4|корисника|кориснице}} {{GENDER:$4|$3}} у трајању од $5 $6",
+       "logentry-partialblock-block": "$1 је {{GENDER:$2|блокирао|блокирала}} уређивање {{PLURAL:$8|странице|страница}} $7 {{GENDER:$4|кориснику|корисници|кориснику/ци}} $3 са временом истека од $5 $6",
+       "logentry-non-editing-block-block": "$1 је {{GENDER:$2|блокирао|блокирала}} неуређивачке радње {{GENDER:$4|кориснику|корисници|кориснику/ци}} $3 са временом истека од $5 $6",
+       "logentry-non-editing-block-reblock": "$1 је {{GENDER:$2|променио|променила}} подешавања блокаде неуређивачких радњи {{GENDER:$4|кориснику|корисници|кориснику/ци}} $3 са временом истека од $5 $6",
        "logentry-suppress-block": "$1 је {{GENDER:$2|блокирао|блокирала}} {{GENDER:$4|$3}} у трајању од $5 $6",
        "logentry-suppress-reblock": "$1 је {{GENDER:$2|променио|променила}} подешавања за блокирање {{GENDER:$4|корисника|кориснице}} {{GENDER:$4|$3}} у трајању од $5 $6",
        "logentry-import-upload": "$1 је {{GENDER:$2|увезао|увезла}} $3 отпремањем датотеке",
        "mw-widgets-titleinput-description-redirect": "преусмерава на $1",
        "mw-widgets-categoryselector-add-category-placeholder": "Додајте категорију…",
        "mw-widgets-usersmultiselect-placeholder": "Додајте још…",
+       "mw-widgets-titlesmultiselect-placeholder": "Додајте још…",
        "date-range-from": "Од датума:",
        "date-range-to": "До датума:",
        "sessionmanager-tie": "Не можете да комбинујете више типова потврде идентитета: $1.",
        "authmanager-authn-no-primary": "Није могуће потврдити пружене акредитиве.",
        "authmanager-authn-no-local-user": "Пружени акредитиви нису повезани ни са једним корисником на овом викију.",
        "authmanager-authn-no-local-user-link": "Пружени акредитиви су важећи, али нису повезани ни са једним корисником на овом викију. Пријавите се на неки други начин или отворите нови кориснички налог, што ће вам дати опцију да повежете претходне акредитиве на нови налог.",
-       "authmanager-authn-autocreate-failed": "Ð\9dе Ð¼Ð¾Ð³Ñ\83 Ð´Ð° Ð°Ñ\83Ñ\82омаÑ\82Ñ\81ки Ð½Ð°Ð¿Ñ\80авим Ð»Ð¾ÐºÐ°Ð»Ð½Ð¸ Ð½Ð°Ð»Ð¾Ð³: $1",
+       "authmanager-authn-autocreate-failed": "Ð\90Ñ\83Ñ\82омаÑ\82Ñ\81ко Ð¾Ñ\82ваÑ\80аÑ\9aе Ð»Ð¾ÐºÐ°Ð»Ð½Ð¾Ð³ Ð½Ð°Ð»Ð¾Ð³Ð° Ð½Ð¸Ñ\98е Ñ\83Ñ\81пело: $1",
        "authmanager-change-not-supported": "Не могу да променим пружене акредитиве јер их ништа не би користило.",
        "authmanager-create-disabled": "Отварање налога је онемогућено.",
        "authmanager-create-from-login": "Попуните поља да бисте направили налог.",
        "passwordpolicies-policy-passwordcannotmatchusername": "Лозинка не може да буде иста као корисничко име",
        "passwordpolicies-policy-passwordcannotmatchblacklist": "Лозинка се не може подударати са лозинкама на црној листи",
        "passwordpolicies-policy-maximalpasswordlength": "Лозинка мора да буде краћа од $1 {{PLURAL:$1|знака|знакова}}",
-       "passwordpolicies-policy-passwordcannotbepopular": "Лозинка не може да буде {{PLURAL:$1|популарна лозинка|на списку $1 популарних лозинки}}"
+       "passwordpolicies-policy-passwordcannotbepopular": "Лозинка не може да буде {{PLURAL:$1|популарна лозинка|на списку $1 популарних лозинки}}",
+       "unprotected-js": "Из безбедносних разлога, JavaScript не може да се учита са незаштићене странице. Само направите JavaScript у именском простору „Медијавики:” или као корисничку подстраницу"
 }
index 57b246f..78040ab 100644 (file)
                        "Vlad5250"
                ]
        },
-       "tog-underline": "Podvlačenje linkova:",
+       "tog-underline": "Podvlačenje veza:",
        "tog-hideminor": "Sakrij manje izmene sa spiska skorašnjih izmena",
        "tog-hidepatrolled": "Sakrij patrolirane izmene sa spiska skorašnjih izmena",
-       "tog-newpageshidepatrolled": "Sakrij patrolirane stranice sa spiska novih stranica",
+       "tog-newpageshidepatrolled": "Sakrij patrolirane stranice sa liste novih stranica",
        "tog-hidecategorization": "Sakrij kategorizaciju stranica",
-       "tog-extendwatchlist": "Proširi spisak nadgledanja za pogled svih promena, ne samo skorašnjih",
-       "tog-usenewrc": "Grupiši izmene po stranici u skorašnjim izmenama i spisku nadgledanja",
+       "tog-extendwatchlist": "Proširi spisak nadgledanja za prikaz svih promena, ne samo nedavnih",
+       "tog-usenewrc": "Grupiši promene po stranici u skorašnjim izmenama i spisku nadgledanja",
        "tog-numberheadings": "Automatski numeriši naslove",
-       "tog-showtoolbar": "Prikaži traku sa alatkama za uređivanje",
-       "tog-editondblclick": "Uredi stranice dvostrukim klikom",
+       "tog-editondblclick": "Omogući uređivanje stranica dvostrukim klikom",
        "tog-editsectiononrightclick": "Omogući uređivanje odeljaka desnim klikom na njihove naslove",
        "tog-watchcreations": "Dodaj stranice koje napravim i datoteke koje otpremim na moj spisak nadgledanja",
        "tog-watchdefault": "Dodaj stranice i datoteke koje uredim na moj spisak nadgledanja",
        "tog-watchmoves": "Dodaj stranice i datoteke koje premestim na moj spisak nadgledanja",
        "tog-watchdeletion": "Dodaj stranice i datoteke koje izbrišem na moj spisak nadgledanja",
-       "tog-watchuploads": "Dodaj datoteke koje otpremim na moj spisak nadgledanja",
+       "tog-watchuploads": "Dodaj nove datoteke koje otpremim na moj spisak nadgledanja",
        "tog-watchrollback": "Dodaj stranice na kojima sam izvršio vraćanje izmena na moj spisak nadgledanja",
-       "tog-minordefault": "Označavaj sve izmene kao manje",
+       "tog-minordefault": "Podrazumevano označavaj sve izmene kao manje",
        "tog-previewontop": "Prikaži pretpregled pre okvira za uređivanje",
        "tog-previewonfirst": "Prikaži pretpregled pri prvoj izmeni",
        "tog-enotifwatchlistpages": "Pošalji mi imejl kada se promeni stranica ili datoteka sa mog spiska nadgledanja",
        "tog-enotifusertalkpages": "Pošalji mi imejl kad se promeni moja korisnička stranica za razgovor",
-       "tog-enotifminoredits": "Pošalji mi imejl i kod manjih izmena stranica i datoteka",
-       "tog-enotifrevealaddr": "Otkrij moju imejl-adresu u porukama obaveštenja",
+       "tog-enotifminoredits": "Takođe mi pošalji imejl kod manjih izmena stranica i datoteka",
+       "tog-enotifrevealaddr": "Otkrij moju imejl-adresu u imejlovima obaveštenja",
        "tog-shownumberswatching": "Prikaži broj korisnika koji nadgledaju",
        "tog-oldsig": "Vaš postojeći potpis:",
-       "tog-fancysig": "Smatraj potpis kao vikitekst (bez automatskog linka)",
+       "tog-fancysig": "Smatraj potpis kao vikitekst (bez automatskog povezivanja)",
        "tog-uselivepreview": "Prikaži pretpregled bez ponovnog učitavanja stranice",
        "tog-forceeditsummary": "Upozori me kada ne unesem opis izmene",
        "tog-watchlisthideown": "Sakrij moje izmene sa spiska nadgledanja",
        "tog-watchlisthidebots": "Sakrij izmene botova sa spiska nadgledanja",
        "tog-watchlisthideminor": "Sakrij manje izmene sa spiska nadgledanja",
        "tog-watchlisthideliu": "Sakrij izmene prijavljenih korisnika sa spiska nadgledanja",
-       "tog-watchlistreloadautomatically": "Automatski osveži spisak nadgledanja kad god se filter promeni (potreban JavaScript)",
-       "tog-watchlistunwatchlinks": "Dodaj označivače za prekid nadgledanja/nagledanje ({{int:Watchlist-unwatch}}/{{int:Watchlist-unwatch-undo}}) na nadgledane stranice sa promenama (Javaskript je neophodan za funkcionalnost prebacivanja)",
+       "tog-watchlistreloadautomatically": "Automatski ponovo učitaj spisak nadgledanja kad god se filter promeni (potreban JavaScript)",
+       "tog-watchlistunwatchlinks": "Dodaj označivače za prekid nadgledanja/nagledanje ({{int:Watchlist-unwatch}}/{{int:Watchlist-unwatch-undo}}) na nadgledane stranice sa promenama (za funkcionalnost prebacivanja je potreban JavaScript)",
        "tog-watchlisthideanons": "Sakrij izmene anonimnih korisnika sa spiska nadgledanja",
        "tog-watchlisthidepatrolled": "Sakrij patrolirane izmene sa spiska nadgledanja",
        "tog-watchlisthidecategorization": "Sakrij kategorizaciju stranica",
        "tog-showhiddencats": "Prikaži skrivene kategorije",
        "tog-norollbackdiff": "Ne prikazuj razliku nakon izvršenog vraćanja",
        "tog-useeditwarning": "Upozori me kada napuštam stranicu za uređivanje sa nesačuvanim promenama",
-       "tog-prefershttps": "Uvek koristi sigurnu vezu dok sam prijavljen/na.",
-       "underline-always": "uvek",
-       "underline-never": "nikad",
-       "underline-default": "prema temi ili pregledaču",
+       "tog-prefershttps": "Uvek koristi bezbednu vezu dok sam prijavljen/a.",
+       "underline-always": "Uvek",
+       "underline-never": "Nikad",
+       "underline-default": "Prema temi ili pregledaču",
        "editfont-style": "Stil fonta u okviru za uređivanje:",
-       "editfont-monospace": "srazmerno širok font",
-       "editfont-sansserif": "beserifni font",
-       "editfont-serif": "serifni font",
+       "editfont-monospace": "Srazmerno širok font",
+       "editfont-sansserif": "Beserifni font",
+       "editfont-serif": "Serifni font",
        "sunday": "nedelja",
        "monday": "ponedeljak",
        "tuesday": "utorak",
        "period-am": "prepodne",
        "period-pm": "popodne",
        "pagecategories": "{{PLURAL:$1|Kategorija|Kategorije}}",
-       "category_header": "Stranice u kategoriji â\80\9e$1â\80\9c",
+       "category_header": "Stranice u kategoriji â\80\9e$1â\80\9d",
        "subcategories": "Potkategorije",
-       "category-media-header": "Datoteke u kategoriji „$1“",
-       "category-empty": "<em>Ova kategorija trenutno ne sadrži stranice ili datoteke.</em>",
+       "category-media-header": "Mediji u kategoriji „$1”",
+       "category-empty": "<em>Ova kategorija trenutno ne sadrži stranice ili medije.</em>",
        "hidden-categories": "{{PLURAL:$1|Sakrivena kategorija|Sakrivene kategorije}}",
        "hidden-category-category": "Skrivene kategorije",
        "category-subcat-count": "{{PLURAL:$2|1=Ova kategorija sadrži samo sledeću potkategoriju.|Ova kategorija ima {{PLURAL:$1|1=sledeću potkategoriju|sledeće $1 potkategorije|sledećih $1 potkategorija}}, od ukupno $2.}}",
        "category-file-count": "{{PLURAL:$2|1=Ova kategorija sadrži samo sledeću datoteku.|{{PLURAL:$1|1=Sledeća datoteka je|Sledeće $1 datoteke su|Sledećih $1 datoteka je}} u ovoj kategoriji, od ukupno $2.}}",
        "category-file-count-limited": "{{PLURAL:$1|1=Sledeća datoteka je|Sledeće $1 datoteke su|Sledećih $1 datoteka je}} u ovoj kategoriji.",
        "listingcontinuesabbrev": "nast.",
-       "index-category": "Popisane stranice",
-       "noindex-category": "Nepopisane stranice",
-       "broken-file-category": "Stranice sa neispravnim linkovima do datoteka",
+       "index-category": "Indeksirane stranice",
+       "noindex-category": "Neindeksirane stranice",
+       "broken-file-category": "Stranice sa neispravnim vezama do datoteka",
        "categoryviewer-pagedlinks": "$1 ($2)",
        "category-header-numerals": "$1–$2",
        "about": "O nama",
        "newwindow": "(otvara se u novom prozoru)",
        "cancel": "Otkaži",
        "moredotdotdot": "Više…",
-       "morenotlisted": "Ovaj spisak možda nije potpun.",
+       "morenotlisted": "Ova lista možda nije potpuna.",
        "mypage": "Stranica",
        "mytalk": "Razgovor",
        "anontalk": "Razgovor",
        "variants": "Varijante",
        "navigation-heading": "Meni za navigaciju",
        "errorpagetitle": "Greška",
-       "returnto": "Nazad na stranicu â\80\9e$1â\80\9c.",
+       "returnto": "Nazad na stranicu â\80\9e$1â\80\9d.",
        "tagline": "Izvor: {{SITENAME}}",
        "help": "Pomoć",
        "search": "Pretraga",
-       "search-ignored-headings": " #<!-- ne menjajte ništa u ovom redu --> <pre>\n# Naslovi koji će biti zanemareni pri pretrazi.\n# Promene su vidljive odmah nakon što se stranica sa naslovom popiše.\n# Možete iznuditi ponovno popisivanje „nultom” izmenom.\n# Sintaksa je sledeća:\n#  * Svaki red koji započinje znakom „#” je komentar.\n#  * Svaki ne prazni red je tačan naslov koji će biti zanemaren, s tim da se razlikuju mala i velika slova i sve ostalo\nReference\nSpoljašnji linkovi\nTakođe pogledajte\n #</pre> <!-- ne menjajte ništa u ovom redu -->",
+       "search-ignored-headings": " #<!-- ne menjajte ništa u ovom redu --> <pre>\n# Naslovi koji će biti zanemareni pri pretrazi.\n# Promene su vidljive odmah nakon što se stranica sa naslovom indeksira.\n# Možete iznuditi ponovno indeksiranje „nultom” izmenom.\n# Sintaksa je sledeća:\n#  * Svaki red koji započinje znakom „#” je komentar.\n#  * Svaki ne prazni red je tačan naslov koji će biti zanemaren, s tim da se razlikuju mala i velika slova i sve ostalo\nReference\nSpoljašnje veze\nTakođe pogledajte\n #</pre> <!-- ne menjajte ništa u ovom redu -->",
        "searchbutton": "Pretraži",
        "go": "Idi",
        "searcharticle": "Idi",
        "history_short": "Istorija",
        "history_small": "istorija",
        "updatedmarker": "ažurirano od moje poslednje posete",
-       "printableversion": "Za štampanje",
-       "permalink": "Trajni link",
+       "printableversion": "Verzija za štampanje",
+       "permalink": "Trajna veza",
        "print": "Štampaj",
-       "view": "Pogledaj",
-       "view-foreign": "Pogledaj na projektu $1",
+       "view": "Prikaži",
+       "view-foreign": "Prikaži na projektu $1",
        "edit": "Uredi",
        "edit-local": "Uredi lokalni opis",
        "create": "Napravi",
        "create-local": "Dodaj lokalni opis",
        "delete": "Izbriši",
        "undelete_short": "Vrati {{PLURAL:$1|izbrisanu izmenu|$1 izbrisane izmene|$1 izbrisanih izmena}}",
-       "viewdeleted_short": "Pogledaj {{PLURAL:$1|jednu izbrisanu izmenu|$1 izbrisane izmene|$1 izbrisanih izmena}}",
+       "viewdeleted_short": "Prikaži {{PLURAL:$1|jednu izbrisanu izmenu|$1 izbrisane izmene|$1 izbrisanih izmena}}",
        "protect": "Zaštiti",
        "protect_change": "promeni",
        "unprotect": "Promeni zaštitu",
        "specialpage": "Posebna stranica",
        "personaltools": "Lične alatke",
        "talk": "Razgovor",
-       "views": "Pregledi",
+       "views": "Pogledi",
        "toolbox": "Alatke",
-       "tool-link-userrights": "Promeni {{GENDER:$1|korisničke}} grupe",
+       "tool-link-userrights": "Promena {{GENDER:$1|korisničkih}} grupe",
        "tool-link-userrights-readonly": "Prikaz {{GENDER:$1|korisničkih}} grupa",
        "tool-link-emailuser": "Slanje imejla {{GENDER:$1|korisniku|korisnici}}",
-       "imagepage": "Pogledaj stranicu datoteke",
-       "mediawikipage": "Pogledaj stranicu poruke",
-       "templatepage": "Pogledaj stranicu šablona",
-       "viewhelppage": "Pogledaj stranicu pomoći",
-       "categorypage": "Pogledaj stranicu kategorije",
-       "viewtalkpage": "Pogledaj razgovor",
+       "imagepage": "Prikaži stranicu datoteke",
+       "mediawikipage": "Prikaži stranicu poruke",
+       "templatepage": "Prikaži stranicu šablona",
+       "viewhelppage": "Prikaži stranicu pomoći",
+       "categorypage": "Prikaži stranicu kategorije",
+       "viewtalkpage": "Prikaži diskusiju",
        "otherlanguages": "Na drugim jezicima",
        "redirectedfrom": "(preusmereno sa $1)",
        "redirectpagesub": "Preusmerenje",
        "jumpto": "Idi na:",
        "jumptonavigation": "navigaciju",
        "jumptosearch": "pretragu",
-       "view-pool-error": "Nažalost, serveri su trenutno preopterećeni.\nPreviše korisnika pokušava da pregleda ovu stranicu.\nSačekajte neko vreme pre nego što ponovo pokušate da joj pristupite.\n\n$1",
-       "generic-pool-error": "Nažalost, serveri su trenutno preopterećeni.\nPreviše korisnika pokušava da pogleda ovaj resurs.\nSačekajte neko vreme pre nego što ponovo pokušate da mu pristupite.",
+       "view-pool-error": "Serveri su trenutno preopterećeni.\nPreviše korisnika pokušava da vidi ovu stranicu.\nSačekajte neko vreme pre nego što ponovo pokušate da joj pristupite.\n\n$1",
+       "generic-pool-error": "Serveri su trenutno preopterećeni.\nPreviše korisnika pokušava da vidi ovaj resurs.\nSačekajte neko vreme pre nego što ponovo pokušate da mu pristupite.",
        "pool-timeout": "Istek vremena čeka na zaključavanje",
        "pool-queuefull": "Red je pun zahteva",
        "pool-errorunknown": "Nepoznata greška",
        "privacypage": "Project:Politika privatnosti",
        "badaccess": "Greška u dozvolama",
        "badaccess-group0": "Nije vam dozvoljeno da izvršite radnju koju ste zahtevali.",
-       "badaccess-groups": "Radnja koju ste zahtevali je ograničena samo korisnicima u {{PLURAL:$2|sledećoj grupi|sledećim grupama}}: $1.",
+       "badaccess-groups": "Radnja koju ste zahtevali je ograničena na korisnike iz {{PLURAL:$2|sledeće grupe|jedne od sledećih grupa}}: $1.",
        "versionrequired": "Potrebna je verzija $1 Medijavikija",
        "versionrequiredtext": "Potrebna je verzija $1 Medijavikija da biste koristili ovu stranicu.\nPogledajte stranicu [[Special:Version|verzije]].",
        "ok": "U redu",
        "pagetitle": "$1 — {{SITENAME}}",
        "pagetitle-view-mainpage": "{{SITENAME}}",
        "backlinksubtitle": "← $1",
-       "retrievedfrom": "Preuzeto iz â\80\9e$1â\80\9c",
+       "retrievedfrom": "Preuzeto iz â\80\9e$1â\80\9d",
        "youhavenewmessages": "{{PLURAL:$3|Imate}} $1 ($2).",
        "youhavenewmessagesfromusers": "{{PLURAL:$4|Imate}} $1 od {{PLURAL:$3|drugog korisnika|$3 korisnika}} ($2).",
        "youhavenewmessagesmanyusers": "Imate $1 od mnogo korisnika ($2).",
        "youhavenewmessagesmulti": "Imate nove poruke na $1",
        "editsection": "uredi",
        "editold": "uredi",
-       "viewsourceold": "izvornik",
+       "viewsourceold": "izvor",
        "editlink": "uredi",
-       "viewsourcelink": "izvornik",
-       "editsectionhint": "Uredite odeljak â\80\9e$1â\80\9c",
+       "viewsourcelink": "izvor",
+       "editsectionhint": "Uredite odeljak â\80\9e$1â\80\9d",
        "toc": "Sadržaj",
        "showtoc": "prikaži",
        "hidetoc": "sakrij",
        "collapsible-collapse": "sakrij",
        "collapsible-expand": "prikaži",
-       "confirmable-confirm": "Da li {{GENDER:$1|ste}} sigurni?",
+       "confirmable-confirm": "Jeste {{GENDER:$1|li}} sigurni?",
        "confirmable-yes": "Da",
        "confirmable-no": "Ne",
-       "thisisdeleted": "Pogledaj ili vrati $1?",
-       "viewdeleted": "Pogledaj $1?",
+       "thisisdeleted": "Prikazati ili vratiti $1?",
+       "viewdeleted": "Prikazati $1?",
        "restorelink": "{{PLURAL:$1|jednu izbrisanu izmenu|$1 izbrisane izmene|$1 izbrisanih izmena}}",
        "feedlinks": "Fid:",
        "feed-invalid": "Nevažeći tip prijave na fid.",
        "feed-unavailable": "Fidovi sindikacije nisu dostupni",
        "site-rss-feed": "$1 – RSS fid",
        "site-atom-feed": "$1 – Atom fid",
-       "page-rss-feed": "â\80\9e$1â\80\9c – RSS fid",
-       "page-atom-feed": "â\80\9e$1â\80\9c – Atom fid",
+       "page-rss-feed": "â\80\9e$1â\80\9d – RSS fid",
+       "page-atom-feed": "â\80\9e$1â\80\9d – Atom fid",
        "feed-atom": "Atom",
        "feed-rss": "RSS",
        "red-link-title": "$1 (stranica ne postoji)",
-       "sort-descending": "Poređaj opadajuće",
-       "sort-ascending": "Poređaj rastuće",
+       "sort-descending": "Sortiraj opadajuće",
+       "sort-ascending": "Sortiraj rastuće",
        "nstab-main": "Stranica",
        "nstab-user": "{{GENDER:{{BASEPAGENAME}}|Korisnik|Korisnica}}",
        "nstab-media": "Mediji",
        "nstab-category": "Kategorija",
        "mainpage-nstab": "Glavna strana",
        "nosuchaction": "Nema takve radnje",
-       "nosuchactiontext": "Radnja koja je navedena u URL-u nije važeća.\nMožda ste otkucali pogrešan URL-a ili ste pratili pokvaren link.\nOvo takođe može da ukazuje na grešku u softveru koji koristi {{SITENAME}}.",
+       "nosuchactiontext": "Radnja koja je navedena u URL-u nije važeća.\nMožda ste otkucali pogrešan URL-a ili ste pratili pokvarenu vezu.\nOvo takođe može da ukazuje na grešku u softveru koji koristi {{SITENAME}}.",
        "nosuchspecialpage": "Nema takve posebne stranice",
        "nospecialpagetext": "<strong>Zahtevali ste nevalidnu posebnu stranicu.</strong>\n\nSpisak validnih posebnih stranica može da se pronađe na „[[Special:SpecialPages|{{int:specialpages}}]]”.",
        "error": "Greška",
        "readonly": "Baza podataka je zaključana",
        "enterlockreason": "Unesite razlog za zaključavanje, uključujući i vreme otključavanja",
        "readonlytext": "Baza podataka je trenutno zaključana, što znači da je nije moguće menjati.\n\nSistemski administrator je naveo sledeće objašnjenje: $1",
-       "missing-article": "Tekst stranice pod nazivom „$1“ ($2) nije pronađen.\n\nUzrok ove greške je obično zastarela izmena ili link do izbrisane stranice.\n\nAko se ne radi o tome, onda ste verovatno pronašli grešku u softveru.\nPrijavite je [[Special:ListUsers/sysop|administratoru]] uz odgovarajući link.",
+       "missing-article": "Tekst stranice pod nazivom „$1“ ($2) nije pronađen.\n\nUzrok ove greške je obično zastarela izmena ili veza do izbrisane stranice.\n\nAko se ne radi o tome, onda ste verovatno pronašli grešku u softveru.\nPrijavite je [[Special:ListUsers/sysop|administratoru]] uz odgovarajuću vezu.",
        "missingarticle-rev": "(izmena#: $1)",
        "missingarticle-diff": "(razlika: $1, $2)",
        "readonly_lag": "Baza podataka je automatski zaključana da bi se sekundarni serveri baze podataka uskladili s glavnim.",
        "internalerror": "Unutrašnja greška",
        "internalerror_info": "Unutrašnja greška: $1",
        "internalerror-fatal-exception": "Greška neobrađenog izuzetka tipa „$1“",
-       "filecopyerror": "Ne mogu da kopiram datoteku „$1“ u „$2“.",
-       "filerenameerror": "Ne mogu da preimenujem datoteku „$1“ u „$2“.",
-       "filedeleteerror": "Ne mogu da izbrišem datoteku „$1“.",
-       "directorycreateerror": "Ne mogu da napravim direktorijum „$1“.",
+       "filecopyerror": "Nije moguće kopirati datoteku „$1” u „$2”.",
+       "filerenameerror": "Nije moguće preimenovati datoteku „$1” u „$2”.",
+       "filedeleteerror": "Nije moguće izbrisati datoteku „$1”.",
+       "directorycreateerror": "Nije moguće napraviti direktorijum „$1”.",
        "directoryreadonlyerror": "Direktorijum „$1“ je samo za čitanje.",
        "directorynotreadableerror": "Direktorijum „$1“ nije čitljiv.",
-       "filenotfound": "Ne mogu da pronađem datoteku „$1“.",
+       "filenotfound": "Nije moguće pronaći datoteku „$1”.",
        "unexpected": "Neočekivana vrednost: „$1“=„$2“.",
-       "formerror": "Greška: ne mogu da pošaljem obrazac.",
+       "formerror": "Greška: Nije moguće poslati obrazac.",
        "badarticleerror": "Ova radnja se ne može izvršiti na ovoj stranici.",
-       "cannotdelete": "Ne mogu da izbrišem stranicu ili datoteku „$1“.\nMoguće je da ju je neko već izbrisao.",
-       "cannotdelete-title": "Ne mogu da izbrišem stranicu „$1“",
+       "cannotdelete": "Nije moguće izbrisati stranicu ili datoteku „$1”.\nMoguće je da ju je neko već izbrisao.",
+       "cannotdelete-title": "Nije moguće izbrisati stranicu „$1”",
+       "delete-scheduled": "Stranica „$1” je zakazana za brisanje.\nBudite strpljivi.",
        "delete-hook-aborted": "Brisanje je prekinula kuka.\nNije dato nikakvo obrazloženje.",
-       "no-null-revision": "Ne mogu da napravim novu ništavnu izmenu stranice „$1“",
+       "no-null-revision": "Nije moguće napraviti novu ništavnu izmenu stranice „$1”",
        "badtitle": "Loš naslov",
        "badtitletext": "Traženi naslov stranice je nevažeći, prazan ili je pogrešno povezan međujezički ili međuviki naslov.\nMožda sadrži jedan ili više znakova koji se ne mogu koristiti u naslovima.",
        "title-invalid-empty": "Traženo ime stranice je prazno ili sadrži samo naziv imenskog prostora.",
        "title-invalid-utf8": "Traženi naziv stranice sadrži nevažeći UTF-8 znak.",
-       "title-invalid-interwiki": "Traženi naslov stranice sadrži unutrašnji viki link koji ne može da se koristi u naslovima.",
+       "title-invalid-interwiki": "Traženi naslov stranice sadrži međuviki vezu koji ne može da se koristi u naslovima.",
        "title-invalid-talk-namespace": "Traženi naslov stranice se odnosi na stranicu za razgovor koja ne može postojati.",
        "title-invalid-characters": "Traženi naslov ima nevažeće znakove: „$1“.",
        "title-invalid-relative": "Naslov ima relativnu putanju. Relativni naslovi stranica (./, ../) nisu važeći jer će često biti nedostupni u korisničkom pregledaču.",
        "title-invalid-magic-tilde": "Traženi naslov stranice sadrži nevažeći sled magičnog znaka tilda (<nowiki>~~~</nowiki>).",
        "title-invalid-too-long": "Traženi naziv stranice je predugačak. Ne sme biti duži od $1 {{PLURAL:$1|bajta|bajtova}} u UTF-8 kodiranju.",
        "title-invalid-leading-colon": "Traženi naslov stranice sadrži nevažeću dvotačku na početku.",
-       "perfcached": "Sledeći podaci su keširani i možda nisu ažurirani. U kešu {{PLURAL:$1|je dostupan najviše jedan rezultat|su dostupna najviše $1 rezultata|je dostupno najviše $1 rezultata}}.",
-       "perfcachedts": "Sledeći podaci su keširani i poslednji put ažurirani na datum $2 u $3 č. U kešu {{PLURAL:$4|je dostupan najviše jedan rezultat|su dostupna najviše $4 rezultata|je dostupno najviše $4 rezultata}}.",
+       "perfcached": "Sledeći podaci su keširani i možda nisu ažurirani. U keš memoriji {{PLURAL:$1|je dostupan najviše jedan rezultat|su dostupna najviše $1 rezultata|je dostupno najviše $1 rezultata}}.",
+       "perfcachedts": "Sledeći podaci su keširani i poslednji put ažurirani na datum $2 u $3 č. U keš memoriji {{PLURAL:$4|je dostupan najviše jedan rezultat|su dostupna najviše $4 rezultata|je dostupno najviše $4 rezultata}}.",
        "querypage-no-updates": "Ažuriranje ove stranice je trenutno onemogućeno.\nPodaci koji se ovde nalaze mogu biti zastareli.",
-       "viewsource": "Izvornik",
-       "viewsource-title": "Izvornik stranice $1",
+       "viewsource": "Izvor",
+       "viewsource-title": "Prikaz izvora stranice $1",
        "actionthrottled": "Radnja je usporena",
        "actionthrottledtext": "U cilju borbe protiv nepoželjnih poruka, ograničene su vam izmene u određenom vremenu, a upravo ste prešli to ograničenje. Pokušajte ponovo za nekoliko minuta.",
        "protectedpagetext": "Ova stranica je zaključana za izmene i druge radnje.",
-       "viewsourcetext": "Možete da čitate i kopirate izvornik ove stranice.",
-       "viewyourtext": "Možete da pogledate i kopirate izvornik <strong>Vaših izmena</strong> na ovoj stranici.",
+       "viewsourcetext": "Možete da vidite i kopirate izvor ove stranice.",
+       "viewyourtext": "Možete da vidite i kopirate izvor <strong>vaših izmena</strong> na ovoj stranici.",
        "protectedinterface": "Ova stranica sadrži tekst interfejsa za softver na ovom vikiju i zaštićena je radi sprečavanja zloupotrebe.\nDa biste dodali ili promenili prevode bilo kojeg vikija, posetite [https://translatewiki.net/ translatewiki.net], projekat za lokalizaciju Medijavikija.",
        "editinginterface": "<strong>Upozorenje:</strong> uređujete stranicu koja se koristi za prikazivanje teksta korisničkog okruženja.\nIzmene na ovoj stranici će uticati na sve korisnike ovog vikija.",
        "translateinterface": "Da biste dodali ili promenili prevode za sve vikije, posetite [https://translatewiki.net/ translatewiki.net], projekat za lokalizaciju Medijavikija.",
        "mycustomjsprotected": "Nemate dozvolu da uređujete ovu stranicu s javaskriptom.",
        "myprivateinfoprotected": "Nemate dozvolu da uređujete svoje privatne informacije.",
        "mypreferencesprotected": "Nemate dozvolu da uređujete svoja podešavanja.",
-       "ns-specialprotected": "Posebne stranice se ne mogu uređivati.",
+       "ns-specialprotected": "Nije moguće uređivati posebne stranice.",
        "titleprotected": "Ovaj naziv je [[User:$1|$1]] zaštitio od pravljenja. Razlog: <em>$2</em>.",
        "filereadonlyerror": "Ne mogu da izmenim datoteku „$1“ jer je riznica „$2“ u režimu za čitanje.\n\nSistemski administrator je naveo sledeće objašnjenje: „$3“.",
        "invalidtitle": "Nevažeći naslov",
        "invalidtitle-unknownnamespace": "Nevažeći naslov sa nepoznatim imenskim prostorom br. $1 i tekstom „$2“",
        "exception-nologin": "Niste prijavljeni",
        "exception-nologin-text": "Prijavite se da biste pristupili ovoj stranici ili radnji.",
-       "exception-nologin-text-manual": "Morate biti $1 da biste pristupili ovoj stranici ili radnji.",
+       "exception-nologin-text-manual": "$1 da biste pristupili ovoj stranici ili radnji.",
        "virus-badscanner": "Loša konfiguracija: nepoznati skener za viruse: <em>$1</em>",
        "virus-scanfailed": "skeniranje nije uspelo (kod $1)",
        "virus-unknownscanner": "nepoznati antivirus:",
-       "logouttext": "<strong>Sada ste odjavljeni.</strong>\n\nZapamtite da neke stranice mogu nastaviti da se prikazuju kao da ste još uvek prijavljeni, sve dok ne očistite keš svog pregledača.",
+       "logouttext": "<strong>Sada ste odjavljeni.</strong>\n\nZapamtite da neke stranice mogu nastaviti da se prikazuju kao da ste još uvek prijavljeni, sve dok ne obrišete keš svog pregledača.",
        "cannotlogoutnow-title": "Odjava trenutno nije moguća",
        "cannotlogoutnow-text": "Odjava nije moguća tokom upotrebe $1.",
        "welcomeuser": "Dobro došli, $1!",
        "welcomecreation-msg": "Vaš nalog je otvoren.\nMožete da promenite svoja [[Special:Preferences|podešavanja]] na projektu {{SITENAME}} ako želite.",
        "yourname": "Korisničko ime:",
        "userlogin-yourname": "Korisničko ime",
-       "userlogin-yourname-ph": "Unesite svoje korisničko ime",
+       "userlogin-yourname-ph": "Unesite korisničko ime",
        "createacct-another-username-ph": "Unesite korisničko ime",
        "yourpassword": "Lozinka:",
        "userlogin-yourpassword": "Lozinka",
        "createacct-yourpassword-ph": "Unesite lozinku",
        "yourpasswordagain": "Ponovo unesi lozinku:",
        "createacct-yourpasswordagain": "Potvrdite lozinku",
-       "createacct-yourpasswordagain-ph": "Unesite lozinku ponovo",
+       "createacct-yourpasswordagain-ph": "Ponovo unesite lozinku",
        "userlogin-remembermypassword": "Ostavi me prijavljenog/u",
        "userlogin-signwithsecure": "Koristite sigurnu konekciju",
        "cannotlogin-title": "Prijava nije moguća",
        "cannotlogin-text": "Prijava nije moguća",
        "cannotloginnow-title": "Prijava trenutno nije moguća",
        "cannotloginnow-text": "Prijava nije moguća kada se koristi $1.",
-       "cannotcreateaccount-title": "Ne mogu da otvorim naloge",
+       "cannotcreateaccount-title": "Nije moguće otvoriti naloge",
        "cannotcreateaccount-text": "Direktno otvaranje naloga nije omogućeno na ovom vikiju.",
        "yourdomainname": "Domen:",
        "password-change-forbidden": "Ne možete da promenite lozinku na ovom vikiju.",
        "externaldberror": "Došlo je do greške pri potvrdi identiteta baze podataka ili vam nije dozvoljeno da ažurirate svoj spoljni nalog.",
        "login": "Prijava",
        "login-security": "Potvrda vašeg indentiteta",
-       "nav-login-createaccount": "Prijava/registracija",
+       "nav-login-createaccount": "Prijavite se / otvorite nalog",
        "logout": "Odjava",
        "userlogout": "Odjava",
        "notloggedin": "Niste prijavljeni",
        "userlogin-createanother": "Otvori još jedan nalog",
        "createacct-emailrequired": "Imejl-adresa",
        "createacct-emailoptional": "Imejl-adresa (opcionalno)",
-       "createacct-email-ph": "Unesite svoju imejl-adresu",
+       "createacct-email-ph": "Unesite imejl-adresu",
        "createacct-another-email-ph": "Unesite imejl-adresu",
        "createaccountmail": "Koristite privremenu, slučajnu lozinku i pošaljite je na navedenu imejl-adresu",
        "createaccountmail-help": "Može se koristiti da se nekome otvori nalog bez saznanja lozinke.",
        "createacct-realname": "Pravo ime (opcionalno)",
        "createacct-reason": "Razlog",
        "createacct-reason-ph": "Zašto pravite još jedan nalog?",
-       "createacct-reason-help": "Poruka koja se prikazuje u evidenciji pravljenja korisničkih naloga",
-       "createacct-submit": "Otvori svoj nalog",
+       "createacct-reason-help": "Poruka koja se prikazuje u dnevniku otvaranja naloga",
+       "createacct-submit": "Otvori nalog",
        "createacct-another-submit": "Otvori nalog",
        "createacct-continue-submit": "Nastavite otvaranje naloga",
        "createacct-another-continue-submit": "Nastavite otvaranje naloga",
        "userexists": "Uneseno korisničko ime je već u upotrebi.\nOdaberite drugo.",
        "loginerror": "Greška pri prijavljivanju",
        "createacct-error": "Došlo je do greške pri otvaranju naloga",
-       "createaccounterror": "Ne mogu da otvorim nalog: $1.",
+       "createaccounterror": "Nije moguće otvoriti nalog: $1",
        "nocookiesnew": "Korisnički nalog je otvoren, ali niste prijavljeni.\n{{SITENAME}} koristi kolačiće za prijavu. Vama su kolačići onemogućeni.\nOmogućite ih, pa se onda prijavite sa svojim korisničkim imenom i lozinkom.",
        "nocookieslogin": "{{SITENAME}} koristi kolačiće za prijavljivanje korisnika.\nVama su kolačići onemogućeni. Omogućite ih i pokušajte ponovo.",
        "nocookiesfornew": "Korisnički nalog nije otvoren jer njegov izvor nije potvrđen.\nOmogućite kolačiće na pregledaču i ponovo učitajte stranicu.",
        "nosuchuser": "Ne postoji korisnik s imenom „$1“.\nKorisnička imena su osetljiva na mala i velika slova.\nProverite da li ste ga dobro uneli ili [[Special:CreateAccount|otvorite novi nalog]].",
        "nosuchusershort": "Korisnik s imenom „$1“ ne postoji.\nProverite da li ste pravilno napisali.",
        "nouserspecified": "Morate navesti korisničko ime.",
-       "login-userblocked": "{{GENDER:$1|Ovaj korisnik je blokiran|Ova korisnica je blokirana|Ovaj korisnik je blokiran}}. Prijava nije dozvoljena.",
+       "login-userblocked": "{{GENDER:$1|Ovaj korisnik je blokiran|Ova korisnica je blokirana}}. Prijava nije dozvoljena.",
        "wrongpassword": "Uneli ste neispravno korisničko ime ili lozinku.\nPokušajte ponovo.",
        "wrongpasswordempty": "Niste uneli lozinku. Pokušajte ponovo.",
        "passwordtooshort": "Lozinka mora imati najmanje {{PLURAL:$1|jedan znak|$1 znaka|$1 znakova}}.",
        "passwordtoolong": "Lozinke ne mogu biti duže od {{PLURAL:$1|$1 znaka|$1 znakova}}.",
-       "passwordtoopopular": "Često odabrane lozinke ne mogu da se koriste. Odaberite lozinku koju je teže pogoditi.",
+       "passwordtoopopular": "Nije moguće koristiti često odabrane lozinke. Odaberite lozinku koju je teže pogoditi.",
        "password-name-match": "Lozinka se mora razlikovati od korisničkog imena.",
        "password-login-forbidden": "Korišćenje ovog korisničkog imena i lozinke je zabranjeno.",
        "mailmypassword": "Resetuj lozinku",
        "acct_creation_throttle_hit": "Posetioci ovog vikija koji koriste vašu IP adresu su već otvorili {{PLURAL:$1|1=jedan nalog|$1 naloga}} prethodni $2, što je najveći dozvoljeni broj u tom vremenskom periodu.\nZbog toga posetioci s ove IP adrese trenutno ne mogu otvoriti više naloga.",
        "emailauthenticated": "Vaša imejl-adresa je potvrđena na dan $2 u $3 č.",
        "emailnotauthenticated": "Vaša imejl-adresa još nije potvrđena.\nNijedan imejl neće da bude poslat ni u jednom od sledećih slučajeva.",
-       "noemailprefs": "Navedite imejl-adresu u svojim podešavanjima za osposobljavanje ovih mogućnosti.",
+       "noemailprefs": "Navedite imejl-adresu u podešavanjima za osposobljavanje ovih funkcija.",
        "emailconfirmlink": "Potvrdite svoju imejl-adresu",
        "invalidemailaddress": "Imejl-adresa ne može da bude prihvaćena jer je u nevažećem obliku.\nUnesite ispravnu adresu ili ostavite prazno polje.",
-       "cannotchangeemail": "Imejl-adrese naloga ne mogu da se promene na ovom vikiju.",
+       "cannotchangeemail": "Na ovom vikiju nije moguće promeniti imejl-adrese naloga.",
        "emaildisabled": "Ovaj sajt ne može da šalje imejlove.",
        "accountcreated": "Nalog je otvoren",
        "accountcreatedtext": "Korisnički nalog [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|talk]]) je otvoren.",
        "login-abort-generic": "Neuspešna prijava – prekinuto",
        "login-migrated-generic": "Vaš nalog je migriran i vaše korisničko više ne postoji na ovom vikiju.",
        "loginlanguagelabel": "Jezik: $1",
-       "suspicious-userlogout": "Vaš zahtev za odjavu je odbijen jer izgleda da ga je poslao pokvareni pregledač ili keširani posrednik.",
+       "suspicious-userlogout": "Vaš zahtev za odjavu je odbijen jer izgleda da ga je poslao pokvareni pregledač ili keširani proksi.",
        "createacct-another-realname-tip": "Pravo ime je opcionalno.\nAko odaberete da ga navedete, biće korišćeno za pripisivanje vašeg rada.",
-       "pt-login": "Prijavi me",
+       "pt-login": "Prijavite se",
        "pt-login-button": "Prijavi me",
        "pt-login-continue-button": "Nastavi prijavljivanje",
-       "pt-createaccount": "Otvori nalog",
+       "pt-createaccount": "Otvorite nalog",
        "pt-userlogout": "Odjavi me",
        "php-mail-error-unknown": "Nepoznata greška u funkciji PHP mail().",
        "user-mail-no-addy": "Pokušali ste da pošaljete imejl bez imejl-adrese.",
        "botpasswords-no-provider": "BotPasswordsSessionProvider nije dostupan.",
        "botpasswords-restriction-failed": "Ne možete se prijaviti zbog ograničenja lozinki za botove.",
        "botpasswords-not-exist": "Korisnik „$1“ nema lozinku bota „$2“.",
-       "resetpass_forbidden": "Ne mogu da promenim lozinke",
-       "resetpass_forbidden-reason": "Ne mogu da promenim lozinke: $1",
+       "botpasswords-locked": "Ne možete da se prijavite sa lozinkom bota pošto je vaš nalog zaključan.",
+       "resetpass_forbidden": "Nije moguće promeniti lozinke",
+       "resetpass_forbidden-reason": "Nije moguće promeniti lozinke: $1",
        "resetpass-no-info": "Morate biti prijavljeni da biste pristupili ovoj stranici.",
        "resetpass-submit-loggedin": "Promeni lozinku",
        "resetpass-submit-cancel": "Otkaži",
        "changeemail-no-info": "Morate biti prijavljeni da biste pristupili ovoj stranici.",
        "changeemail-oldemail": "Aktuelna imejl-adresa:",
        "changeemail-newemail": "Nova imejl-adresa:",
-       "changeemail-newemail-help": "Ovo polje bi trebalo da ostavite prazno ako želite da uklonite vašu imejl adresu. Nećete biti u mogućnosti da resetujete zaboravljenu lozinku i nećete primati mejlove od ovog vikija ako je imejl adresa uklonjena.",
+       "changeemail-newemail-help": "Ovo polje treba da ostavite prazno ako želite da uklonite svoju imejl-adresu. Nećete biti u mogućnosti da resetujete zaboravljenu lozinku i nećete primati imejlove sa ovog vikija ako je imejl-adresa uklonjena.",
        "changeemail-none": "(ništa)",
        "changeemail-password": "Vaša lozinka za projekat {{SITENAME}}:",
        "changeemail-submit": "Promeni imejl",
        "changeemail-throttled": "Previše puta ste pokušali da se prijavite.\nMolimo vas da sačekate $1 pre nego što pokušate ponovo.",
        "changeemail-nochange": "Unesite drugu imejl-adresu.",
        "resettokens": "Resetovanje tokena",
-       "resettokens-text": "Možete ponovo postaviti žetone koji će vam omogućiti pristup određenim privatnim podacima povezanim sa vašim nalogom ovde.\n\nTrebali biste to da uradite ako ih mimo volje podelite sa nekim ili ako je vaš nalog ugrožen.",
+       "resettokens-text": "Ovde možete da resetujete tokene koji omogućavaju pristup određenim privatnim podacima povezanim sa vašim nalogom.\n\nTrebali biste to uraditi ako ih slučajno podelite sa nekim ili ako je vaš nalog ugrožen.",
        "resettokens-no-tokens": "Nema žetona za resetovanje.",
-       "resettokens-tokens": "Žetoni:",
+       "resettokens-tokens": "Tokeni:",
        "resettokens-token-label": "$1 (trenutna vrednost: $2)",
        "resettokens-watchlist-token": "Token za veb-fid (Atom/RSS) [[Special:Watchlist|promena na stranicama u vašem spisku nadgledanja]]",
-       "resettokens-done": "Žetoni su resetovani",
-       "resettokens-resetbutton": "Resetuj izabrane žetone",
+       "resettokens-done": "Tokeni su resetovani.",
+       "resettokens-resetbutton": "Resetuj izabrane tokene",
        "bold_sample": "Podebljan tekst",
        "bold_tip": "Podebljan tekst",
        "italic_sample": "Iskošen tekst",
        "italic_tip": "Iskošen tekst",
-       "link_sample": "Naslov linka",
-       "link_tip": "Unutrašnji link",
-       "extlink_sample": "http://www.example.com/ naslov linka",
-       "extlink_tip": "Spoljašnji link (sa prefiksom http://)",
+       "link_sample": "Naslov veze",
+       "link_tip": "Unutrašnja veza",
+       "extlink_sample": "http://www.example.com/ naslov veze",
+       "extlink_tip": "Spoljašnja veza (sa prefiksom http://)",
        "headline_sample": "Tekst naslova",
        "headline_tip": "Podnaslov (nivo 2)",
        "nowiki_sample": "Ovde umetnite neoblikovan tekst",
        "image_sample": "Primer.jpg",
        "image_tip": "Ugrađivanje datoteke",
        "media_sample": "Primer.ogg",
-       "media_tip": "Link do datoteke",
+       "media_tip": "Veza do datoteke",
        "sig_tip": "Vaš potpis sa vremenskom oznakom",
        "hr_tip": "Vodoravna linija (koristite retko)",
        "summary": "Opis izmene:",
        "savechanges": "Sačuvaj promene",
        "publishpage": "Objavi stranicu",
        "publishchanges": "Objavi promene",
-       "savearticle-start": "Sačuvaj stranicu...",
-       "savechanges-start": "Sačuvaj promene...",
+       "savearticle-start": "Sačuvaj stranicu",
+       "savechanges-start": "Sačuvaj promene",
        "publishpage-start": "Objavi stranicu...",
-       "publishchanges-start": "Objavi promene...",
+       "publishchanges-start": "Objavi promene",
        "preview": "Pretpregled",
        "showpreview": "Prikaži pretpregled",
        "showdiff": "Prikaži promene",
        "subject-preview": "Pregled teme:",
        "previewerrortext": "Došlo je do greške pri pokušaju pregleda promena.",
        "blockedtitle": "Korisnik je blokiran",
-       "blockedtext": "<strong>Vaše korisničko ime ili IP adresa je blokirana.</strong>\n\nBlokiranje je {{GENDER:$4|izvršio|izvršila}} $1.\nRazlog je <em>$2</em>.\n\n* Početak blokiranja: $8\n* Istek blokiranja: $6\n* Blokirani: $7\n\nMožete da kontaktirate {{GENDER:$4|korisnika|korisnicu}} $1 ili drugog [[{{MediaWiki:Grouppage-sysop}}|administratora]] da biste razgovarali o blokiranju.\nNe možete da koristite mogućnost „{{int:emailuser}}” osim ako ste naveli validnu imejl adresu u svojim [[Special:Preferences|podešavanjima naloga]] i niste blokirani od korišćenja iste.\nVaša trenutna IP adresa je $3, a ID blokade #$5.\nNavedite sve gornje detalje pri pravljenju bilo kakvih upita.",
-       "autoblockedtext": "Vaša IP adresa je automatski blokirana jer ju je koristio drugi korisnik, koga je {{GENDER:$4|blokirao|blokirala}} $1.\nRazlog:\n\n:<em>$2</em>\n\n* Početak blokade: $8\n* Kraj blokade: $6\n* Ime korisnika: $7\n\nMožete da kontaktirate {{GENDER:$4|korisnika|korisnicu}} $1 ili drugog [[{{MediaWiki:Grouppage-sysop}}|administratora]] da biste raspravljali o blokadi.\n\nZapamtite da ne možete da koristite mogućnost „{{int:emailuser}}“ osim ako ste naveli valjanu imejl adresu u svojim [[Special:Preferences|podešavanjima]].\n\nVaša trenutna IP adresa je $3, a ID blokade $5.\nUključite sve gornje detalje pri pravljenju bilo kakvih upita.",
-       "blockednoreason": "nije naveden razlog",
-       "whitelistedittext": "Za uređivanje stranice je potrebno da budete $1.",
+       "blockedtext": "<strong>Vaše korisničko ime ili IP adresa je blokirana.</strong>\n\nBlokadu je {{GENDER:$4|izvršio|izvršila}} $1.\nRazlog je <em>$2</em>.\n\n* Početak blokade: $8\n* Istek blokade: $6\n* Blokirani: $7\n\nMožete da kontaktirate {{GENDER:$4|korisnika|korisnicu}} $1 ili drugog [[{{MediaWiki:Grouppage-sysop}}|administratora]] da biste diskutovali o blokadi.\nNe možete da koristite funkciju „{{int:emailuser}}” osim ako ste naveli validnu imejl-adresu u svojim [[Special:Preferences|podešavanjima naloga]] i niste blokirani od korišćenja iste.\nVaša trenutna IP adresa je $3, a ID blokade #$5.\nNavedite sve gornje detalje pri pravljenju bilo kakvih upita.",
+       "autoblockedtext": "Vaša IP adresa je automatski blokirana jer ju je koristio drugi korisnik, koga je {{GENDER:$4|blokirao|blokirala}} $1.\nRazlog:\n\n:<em>$2</em>\n\n* Početak blokade: $8\n* Kraj blokade: $6\n* Ime korisnika: $7\n\nMožete da kontaktirate {{GENDER:$4|korisnika|korisnicu}} $1 ili drugog [[{{MediaWiki:Grouppage-sysop}}|administratora]] da biste raspravljali o blokadi.\n\nZapamtite da ne možete da koristite funkciju „{{int:emailuser}}“ osim ako ste naveli važeću imejl-adresu u svojim [[Special:Preferences|podešavanjima]].\n\nVaša trenutna IP adresa je $3, a ID blokade $5.\nUključite sve gornje detalje pri pravljenju bilo kakvih upita.",
+       "blockednoreason": "razlog nije naveden",
+       "whitelistedittext": "$1 da biste uređivali stranice.",
        "confirmedittext": "Morate da potvrdite svoju imejl adresu pre uređivanja stranica.\nPostavite i potvrdite imejl adresu preko [[Special:Preferences|podešavanja]].",
-       "nosuchsectiontitle": "Ne mogu da pronađem odeljak.",
+       "nosuchsectiontitle": "Nije moguće pronaći odeljak",
        "nosuchsectiontext": "Pokušali ste da uredite odeljak koji ne postoji.\nMožda je premešten ili izbrisan dok ste pregledali stranicu.",
        "loginreqtitle": "Potrebna je prijava",
-       "loginreqlink": "prijavljeni",
-       "loginreqpagetext": "Morate biti $1 da biste videli druge stranice.",
+       "loginreqlink": "Prijavite se",
+       "loginreqpagetext": "$1 da biste videli druge stranice.",
        "accmailtitle": "Lozinka je poslata.",
-       "accmailtext": "Lozinka za {{GENDER:$1|korisnika|korisnicu}} [[User talk:$1|$1]] je poslata na $2. Nakon prijave, lozinka se može promeniti [[Special:ChangePassword|ovde]].",
+       "accmailtext": "Nasumično generisana lozinka za korisnika [[User talk:$1|$1]] poslata je na $2. Nakon prijave, lozinka može da se promeni na stranici <em>[[Special:ChangePassword|Promena lozinke]]</em>.",
        "newarticle": "(novi)",
        "newarticletext": "Došli ste na stranicu koja još ne postoji.\nDa biste je napravili, počnite da kucate u prozor ispod ovog teksta (pogledajte [$1 stranicu za pomoć]).\nAko ste ovde došli greškom, vratite se na prethodnu stranicu.",
        "anontalkpagetext": "----\n<em>Ovo je stranica za razgovor s anonimnim korisnikom koji još nema nalog ili ga ne koristi.</em>\nZbog toga moramo da koristimo brojčanu IP adresu kako bismo ga prepoznali.\nTakvu adresu može deliti više korisnika.\nAko ste anonimni korisnik i mislite da su vam upućene primedbe, [[Special:CreateAccount|otvorite nalog]] ili se [[Special:UserLogin|prijavite]] da biste izbegli buduću zabunu s ostalim anonimnim korisnicima.",
        "noarticletext": "Na ovoj stranici trenutno nema teksta.\nMožete [[Special:Search/{{PAGENAME}}|potražiti ovaj naslov]] na drugim stranicama,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} pretražiti srodne izveštaje] ili [{{fullurl:{{FULLPAGENAME}}|action=edit}} napraviti ovu stranicu]</span>.",
        "noarticletext-nopermission": "Trenutno nema teksta na ovoj stranici.\nMožete da [[Special:Search/{{PAGENAME}}|potražite ovaj naslov stranice]] na drugim stranicama ili <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} pretražite srodne dnevnike]</span>, ali nemate dozvolu da napravite ovu stranicu.",
-       "missing-revision": "Izmena br. $1 na stranici pod imenom „{{FULLPAGENAME}}“ ne postoji.\n\nOvo se obično dešava kada pratite zastareli link do stranice koja je izbrisana.\nViše informacija možete da pronađete u [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} evidenciji brisanja].",
-       "userpage-userdoesnotexist": "KorisniÄ\8dki nalog â\80\9e<nowiki>$1</nowiki>â\80\9c nije otvoren.\nRazmislite da li zaista Å¾elite da napravite/uredite ovu stranicu.",
+       "missing-revision": "Izmena br. $1 na stranici pod imenom „{{FULLPAGENAME}}“ ne postoji.\n\nOvo se obično dešava kada pratite zastarelu vezu do stranice koja je izbrisana.\nViše informacija možete da pronađete u [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} dnevniku brisanja].",
+       "userpage-userdoesnotexist": "KorisniÄ\8dki nalog â\80\9e<nowiki>$1</nowiki>â\80\9d nije registrovan.\nRazmislite Å¾elite li zaista da napravite/uredite ovu stranicu.",
        "userpage-userdoesnotexist-view": "Korisnički nalog „$1“ nije otvoren.",
-       "blocked-notice-logextract": "Ovaj korisnik je trenutno blokiran.\nPoslednji unos u evidenciji blokiranja je naveden ispod kao referenca:",
-       "clearyourcache": "<strong>Napomena:</strong> Nakon čuvanja, možda ćete morati da očistite keš pregledača kako biste videli promene.\n* <strong>Fajerfoks / Safari:</strong> Držite <em>Shift</em> i kliknite na <em>Osveži</em> ili pritisnite <em>Ctrl-F5</em> ili <em>Ctrl-R</em> (<em>⌘-R</em> na Meku)\n* <strong>Gugl kroum:</strong> Pritisnite <em>Ctrl-Shift-R</em> (<em>⌘-Shift-R</em> na Meku)\n* <strong>Internet eksplorer:</strong> Držite <em>Ctrl</em> i kliknite na <em>Osveži</em> ili pritisnite <em>Ctrl-F5</em>\n* <strong>Opera:</strong> Idite na <em>Alatke → Podešavanja</em> (<em>Opera → Podešavanja</em> na Meku) i zatim <em>Privatnost i bezbednost → Očistite podatke o pregledima → Keširane slike i datoteke</em>.",
+       "blocked-notice-logextract": "Ovaj korisnik je trenutno blokiran.\nNajnoviji unos u dnevniku blokiranja je naveden ispod kao referenca:",
+       "clearyourcache": "<strong>Napomena:</strong> Nakon čuvanja, možda ćete morati da obrišete keš pregledača kako biste videli promene.\n* <strong>Fajerfoks / Safari:</strong> Držite <em>Shift</em> i kliknite na <em>Osveži</em> ili pritisnite <em>Ctrl-F5</em> ili <em>Ctrl-R</em> (<em>⌘-R</em> na Meku)\n* <strong>Gugl kroum:</strong> Pritisnite <em>Ctrl-Shift-R</em> (<em>⌘-Shift-R</em> na Meku)\n* <strong>Internet eksplorer:</strong> Držite <em>Ctrl</em> i kliknite na <em>Osveži</em> ili pritisnite <em>Ctrl-F5</em>\n* <strong>Opera:</strong> Idite na <em>Alatke → Podešavanja</em> (<em>Opera → Podešavanja</em> na Meku) i zatim <em>Privatnost i bezbednost → Očistite podatke o pregledima → Keširane slike i datoteke</em>.",
        "usercssyoucanpreview": "<strong>Savet:<strong> Korisitite dugme „{{int:showpreview}}“ da isprobate svoj novi CSS pre nego što ga sačuvate.",
        "userjsonyoucanpreview": "<strong>Savet:</strong> Koristite dugme \"{{int:showpreview}}\" da isprobate svoj novi JSON pre nego što ga sačuvate.",
        "userjsyoucanpreview": "<strong>Savet:</strong> Korisitite dugme „{{int:showpreview}}“ da isprobate svoj novi javaskript pre nego što ga sačuvate.",
        "editpage-cannot-use-custom-model": "Model sadržaja ove stranice se ne može promeniti.",
        "longpageerror": "<strong>Greška: tekst koji ste uneli je veličine {{PLURAL:$1|jedan kilobajt|$1 kilobajta}}, što je veće od {{PLURAL:$2|dozvoljenog jednog kilobajta|dozvoljena $2 kilobajta|dozvoljenih $2 kilobajta}}.</strong>\nStranica ne može biti sačuvana.",
        "readonlywarning": "<strong>Upozorenje: baza podataka je zaključana radi održavanja, tako da trenutno nećete moći da sačuvate izmene.</strong>\nMožda biste želeli sačuvati tekst za kasnije u nekoj tekstualnoj datoteci.\n\nSistemski administrator je naveo sledeće objašnjenje: $1",
-       "protectedpagewarning": "<strong>Upozorenje: Ova stranica je zaštićena, tako da samo korisnici sa administratorskim ovlašćenjima mogu da je uređuju.</strong>\nNajnoviji unos u evidenciji je naveden ispod kao referenca:",
-       "semiprotectedpagewarning": "<strong>Napomena:</strong> Ova stranica je zaštićena, tako da samo automatski potvrđeni korisnici mogu da je uređuju.\nNajnoviji unos u evidenciji je naveden ispod kao referenca:",
+       "protectedpagewarning": "<strong>Upozorenje: Ova stranica je zaštićena, tako da samo korisnici sa administratorskim ovlašćenjima mogu da je uređuju.</strong>\nNajnoviji unos u dnevniku je naveden ispod kao referenca:",
+       "semiprotectedpagewarning": "<strong>Napomena:</strong> Ova stranica je zaštićena, tako da samo automatski potvrđeni korisnici mogu da je uređuju.\nNajnoviji unos u dnevniku je naveden ispod kao referenca:",
        "cascadeprotectedwarning": "<strong>Upozorenje:</strong> Ova stranica je zaštićena tako da samo korisnici sa [[Special:ListGroupRights|određenim pravima]] mogu da je uređuju, jer je uključena u {{PLURAL:$1|sledeću stranicu koja je zaštićena|sledeće stranice koje su zaštićene}} prenosivom zaštitom:",
-       "titleprotectedwarning": "<strong>Upozorenje: Ova stranica je zaštićena, tako da su potrebna [[Special:ListGroupRights|posebna prava]] da se ona napravi.</strong>\nNajnoviji unos u evidenciji je naveden ispod kao referenca:",
+       "titleprotectedwarning": "<strong>Upozorenje: Ova stranica je zaštićena, tako da su potrebna [[Special:ListGroupRights|posebna prava]] da se ona napravi.</strong>\nNajnoviji unos u dnevniku je naveden ispod kao referenca:",
        "templatesused": "{{PLURAL:$1|Šablon koji se koristi|Šabloni koji se koriste}} na ovoj stranici:",
        "templatesusedpreview": "{{PLURAL:$1|Šablon|Šabloni}} u ovom pretpregledu:",
        "templatesusedsection": "{{PLURAL:$1|Šablon|Šabloni}} u ovom odeljku:",
        "hiddencategories": "Ova stranica je član {{PLURAL:$1|jedne skrivene kategorije|$1 skrivene kategorije|$1 skrivenih kategorija}}:",
        "edittools": "<!-- Ovaj tekst će biti prikazan ispod obrasca za uređivanje i otpremanje. -->",
        "edittools-upload": "-",
-       "nocreatetext": "Na ovom vikiju je ograničeno pravljenje novih stranica.\nMožete se vratiti i urediti postojeću stranicu, ili se [[Special:UserLogin|prijavite ili otvorite nalog]].",
+       "nocreatetext": "Na projektu {{SITENAME}} je ograničena mogućnost pravljenja novih stranica.\nMožete se vratiti i urediti postojeću stranicu ili se [[Special:UserLogin|prijavite ili otvorite nalog]].",
        "nocreate-loggedin": "Nemate dozvolu da pravite nove stranice.",
        "sectioneditnotsupported-title": "Uređivanje odeljka nije podržano",
        "sectioneditnotsupported-text": "Uređivanje odeljka nije podržano na ovoj stranici.",
        "permissionserrorstext-withaction": "Nemate dozvolu da $2 iz {{PLURAL:$1|sledećeg|sledećih}} razloga:",
        "contentmodelediterror": "Ne možete urediti ovu izmenu jer je njen model sadržaja <code>$1</code>, što se razlikuje od aktuelnog modela sadržaja stranice <code>$2</code>.",
        "recreate-moveddeleted-warn": "<strong>Upozorenje: Ponovo pravite stranicu koja je prethodno izbrisana.</strong>\n\nRazmotrite da li je prikladno da nastavite sa uređivanjem ove stranice.\nOvde je naveden dnevnik brisanja i premeštanja sa obrazloženjem:",
-       "moveddeleted-notice": "Ova stranica je izbrisana.\nEvidencija brisanja, zaštite i premeštanja stranice je navedena ispod kao referenca.",
-       "moveddeleted-notice-recent": "Nažalost, ova stranica je nedavno izbrisana (u poslednjih 24 sata).\nEvidencija brisanja, zaštite i premeštanja stranice navedena je ispod kao referenca:",
-       "log-fulllog": "Pogledaj celu evidenciju",
+       "moveddeleted-notice": "Ova stranica je izbrisana.\nDnevnik brisanja, zaštite i premeštanja stranice je naveden ispod kao referenca.",
+       "moveddeleted-notice-recent": "Ova stranica je nedavno izbrisana (u poslednjih 24 sata).\nDnevnik brisanja, zaštite i premeštanja stranice naveden je ispod kao referenca:",
+       "log-fulllog": "Prikaži ceo dnevnik",
        "edit-hook-aborted": "Izmenu je prekinula kuka.\nNije dato nikakvo obrazloženje.",
-       "edit-gone-missing": "Ne mogu da ažuriram stranicu.\nIzgleda da je izbrisana.",
+       "edit-gone-missing": "Nije moguće ažurirati stranicu.\nIzgleda da je izbrisana.",
        "edit-conflict": "Sukob izmena.",
        "edit-no-change": "Vaša izmena je zanemarena jer nije bilo nikakvih promena u tekstu.",
        "postedit-confirmation-created": "Stranica je napravljena.",
        "postedit-confirmation-restored": "Stranica je vraćena.",
        "postedit-confirmation-saved": "Vaša izmena je sačuvana.",
        "postedit-confirmation-published": "Vaša izmena je objavljena.",
-       "edit-already-exists": "Ne mogu da napravim stranicu.\nIzgleda da ona već postoji.",
+       "edit-already-exists": "Nije moguće napraviti novu stranicu.\nIzgleda da ona već postoji.",
        "defaultmessagetext": "Podrazumevani tekst poruke",
-       "content-failed-to-parse": "Ne mogu da raščlanim sadržaj tipa $2 za model $1: $3",
+       "content-failed-to-parse": "Raščlanjivanje sadržaja tipa $2 za model $1 nije uspelo: $3",
        "invalid-content-data": "Nevažeći podaci sadržaja",
        "content-not-allowed-here": "Sadržaj modela „$1“ nije dozvoljen na stranici [[$2]]",
        "editwarning-warning": "Ako napustite ovu stranicu, izgubićete sve izmene koje ste napravili. Ako ste prijavljeni, možete onemogućiti ovo upozorenje u svojim podešavanjima, u odeljku „{{int:prefs-editing}}“.",
        "converter-manual-rule-error": "Pronađena je greška u pravilu za ručno pretvaranje jezika",
        "undo-success": "Izmena se može poništiti.\nProverite razlike ispod, pa sačuvajte izmene.",
        "undo-failure": "Ova izmena se ne može poništiti zbog sukoba izmena.",
-       "undo-norev": "Ne mogu da vratim izmenu jer ne postoji ili je izbrisana.",
+       "undo-norev": "Nije moguće vratiti izmenu jer ne postoji ili je izbrisana.",
        "undo-nochange": "Izgleda da je izmena već poništena.",
        "undo-summary": "Poništena izmena $1 {{GENDER:$2|korisnika|korisnice}} [[Special:Contributions/$2|$2]] ([[User talk:$2|razgovor]])",
        "undo-summary-username-hidden": "Poništi izmenu $1 skrivenog korisnika",
        "cantcreateaccount-text": "Otvaranje naloga s ove IP adrese (<strong>$1</strong>) je blokirao/la [[User:$3|$3]].\n\nRazlog koji je naveo/la $3 je <em>$2</em>",
        "cantcreateaccount-range-text": "Otvaranje naloga sa IP adresa u rasponu <strong>$1</strong>, koji uključuje i vašu IP adresu (<strong>$4</strong>) je blokirao/la [[User:$3|$3]].\n\nRazlog koji je naveo/la $3 je <em>$2</em>",
-       "viewpagelogs": "Evidencije ove stranice",
+       "viewpagelogs": "Prikaži dnevnike ove stranice",
        "nohistory": "Ne postoji istorija izmena ove stranice.",
        "currentrev": "Najnovija izmena",
        "currentrev-asof": "Najnovija izmena na datum $2 u $3",
        "last": "razl",
        "page_first": "prva",
        "page_last": "poslednja",
-       "histlegend": "Izbor razlika: označite kutijice izmena za upoređivanje i pritisnite enter ili dugme na dnu.<br />\nObjašnjenje: <strong>({{int:cur}})</strong> = razlika sa najnovijom izmenom, <strong>({{int:last}})</strong> = razlika sa prethodnom izmenom, <strong>{{int:minoreditletter}}</strong> = manja izmena",
+       "histlegend": "Izbor razlika: označite kutijice izmena za upoređivanje i pritisnite enter ili dugme na dnu.<br />\nObjašnjenje: <strong>({{int:cur}})</strong> = razlika sa najnovijom izmenom, <strong>({{int:last}})</strong> = razlika sa prethodnom izmenom, <strong>{{int:minoreditletter}}</strong> = manja izmena.",
        "history-fieldset-title": "Pretraga izmena",
        "history-show-deleted": "Samo izbrisane izmene",
        "histfirst": "najstarije",
        "rev-deleted-user": "(korisničko ime uklonjeno)",
        "rev-deleted-event": "(detalji unosa uklonjeni)",
        "rev-deleted-user-contribs": "[korisničko ime ili IP adresa je uklonjena – izmena je sakrivena sa spiska doprinosa]",
-       "rev-deleted-text-permission": "Izmena ove stranice je <strong>izbrisana</strong>.\nDetalje možete da pronađete u [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} evidenciji brisanja].",
+       "rev-deleted-text-permission": "Izmena ove stranice je <strong>izbrisana</strong>.\nDetalje možete da pronađete u [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} dnevniku brisanja].",
        "rev-suppressed-text-permission": "Izmena ove stranice je <strong>sakrivena</strong>. Više detalja možete naći u [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} istoriji sakrivanja].",
-       "rev-deleted-text-unhide": "Izmena ove stranice je <strong>izbrisana</strong>.\nDetalje možete da pronađete u [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} evidenciji brisanja].\nIpak možete da [$1 pogledate ovu izmenu] ako želite da nastavite.",
-       "rev-suppressed-text-unhide": "Izmena ove stranice je <strong>sakrivena</strong>.\nDetalje možete da pronađete u [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} evidenciji sakrivanja].\nIpak možete da [$1 pogledate ovu izmenu] ako želite da nastavite.",
+       "rev-deleted-text-unhide": "Izmena ove stranice je <strong>izbrisana</strong>.\nDetalje možete da pronađete u [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} dnevniku brisanja].\nIpak možete da [$1 pogledate ovu izmenu] ako želite da nastavite.",
+       "rev-suppressed-text-unhide": "Izmena ove stranice je <strong>sakrivena</strong>.\nDetalje možete da pronađete u [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} dnevniku sakrivanja].\nIpak možete da [$1 pogledate ovu izmenu] ako želite da nastavite.",
        "rev-deleted-text-view": "Izmena ove stranice je '''obrisana'''.\nMožete je pogledati; više detalja možete naći u [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} istoriji brisanja].",
-       "rev-suppressed-text-view": "Izmena ove stranice je <strong>sakrivena</strong>.\nMožete je pogledati; detalje možete da pronađete u [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} evidenciji sakrivanja].",
-       "rev-deleted-no-diff": "Ne možete da videte ovu razliku jer je jedna od izmena <strong>izbrisana</strong>.\nDetalji možete da pronađete u [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} evidenciji brisanja].",
+       "rev-suppressed-text-view": "Izmena ove stranice je <strong>sakrivena</strong>.\nMožete je pogledati; detalje možete da pronađete u [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} dnevniku sakrivanja].",
+       "rev-deleted-no-diff": "Ne možete da videte ovu razliku jer je jedna od izmena <strong>izbrisana</strong>.\nDetalji možete da pronađete u [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} dnevniku brisanja].",
        "rev-suppressed-no-diff": "Ne možete videti ovu razliku jer je jedna od izmena '''obrisana'''.",
-       "rev-deleted-unhide-diff": "Jedna od izmena u ovoj razlici je <strong>obrisana</strong>.\nDetalje možete da pronađete u [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} evidenciji brisanja].\nIpak možete da [$1 pogledate ovu razliku] ako želite da nastavite.",
-       "rev-suppressed-unhide-diff": "Jedna od izmena u ovoj razlici je <strong>sakrivena</strong>.\nViše informacija možete da pronađete u [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} evidenciji sakrivanja].\nIpak možete da [$1 pogledate ovu razliku] ako želite da nastavite.",
-       "rev-deleted-diff-view": "Jedna od izmena u ovoj razlici je <strong>izbrisana</strong>.\nIpak možete da pogledate ovu razliku; detalje možete da pronađete u [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} evidenciji brisanja].",
-       "rev-suppressed-diff-view": "Jedna od izmena u ovoj razlici je <strong>sakrivena</strong>.\nIpak možete da pogledate ovu razliku; više informacija možete da pronađete u [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} evidenciji sakrivanja].",
+       "rev-deleted-unhide-diff": "Jedna od izmena u ovoj razlici je <strong>obrisana</strong>.\nDetalje možete da pronađete u [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} dnevniku brisanja].\nIpak možete da [$1 pogledate ovu razliku] ako želite da nastavite.",
+       "rev-suppressed-unhide-diff": "Jedna od izmena u ovoj razlici je <strong>sakrivena</strong>.\nViše informacija možete da pronađete u [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} dnevniku sakrivanja].\nIpak možete da [$1 pogledate ovu razliku] ako želite da nastavite.",
+       "rev-deleted-diff-view": "Jedna od izmena u ovoj razlici je <strong>izbrisana</strong>.\nIpak možete da pogledate ovu razliku; detalje možete da pronađete u [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} dnevniku brisanja].",
+       "rev-suppressed-diff-view": "Jedna od izmena u ovoj razlici je <strong>sakrivena</strong>.\nIpak možete da pogledate ovu razliku; više informacija možete da pronađete u [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} dnevniku sakrivanja].",
        "rev-delundel": "promeni vidljivost",
        "rev-showdeleted": "prikaži",
        "revisiondelete": "Brisanje/vraćanje izmena",
        "logdelete-selected": "{{PLURAL:$1|Izabrana stavka u istoriji|Izabrane stavke u istoriji}}:",
        "revdelete-text-text": "Izbrisane izmene će i dalje biti vidljive u istoriji stranice, ali delovi njihovog sadržaja neće biti javno dostupni.",
        "revdelete-text-file": "Izbrisane verzije datoteke će i dalje biti vidljive u istoriji datoteke, ali delovi njihovog sadržaja neće biti javno dostupni.",
-       "logdelete-text": "Izbrisani događaji u dnevnicima će se i dalje pojavljivati u evidenciji, ali će delovi njihovog sadržaja biti nedostupni javnosti.",
+       "logdelete-text": "Izbrisani događaji u dnevnicima će se idalje pojavljivati u dnevniku, ali će delovi njihovog sadržaja biti nedostupni javnosti.",
        "revdelete-text-others": "Ostali administratori će i dalje moći da pristupe skrivenom sadržaju i vrate ga, osim ako se postave dodatna ograničenja.",
        "revdelete-confirm": "Potvrdite da nameravate ovo uraditi, da razumete posledice i da to činite u skladu sa [[{{MediaWiki:Policy-url}}|pravilima]].",
        "revdelete-suppress-text": "Sakrivanje izmena bi trebalo koristiti <strong>samo</strong> u sledećim slučajevima:\n* zlonamerni ili pogrdni podaci\n* neprikladni lični podaci\n*: <em>kućna adresa i broj telefona, broj kreditne kartice, JMBG itd.</em>",
        "revdelete-log": "Razlog:",
        "revdelete-submit": "Primeni na {{PLURAL:$1|izabranu izmenu|izabrane izmene}}",
        "revdelete-success": "Vidljivost izmene je ažurirana.",
-       "revdelete-failure": "Ne mogu da ažuriram vidljivost izmene:\n$1",
-       "logdelete-success": "Postavljena je vidljivost unosa u evidenciji.",
+       "revdelete-failure": "Nije moguće ažurirati vidljivost izmene:\n$1",
+       "logdelete-success": "Postavljena je vidljivost unosa u dnevniku.",
        "logdelete-failure": "'''Ne mogu da postavim vidljivost istorije:'''\n$1",
        "revdel-restore": "promeni vidljivost",
        "pagehist": "Istorija stranice",
        "revdelete-modify-no-access": "Greška pri menjanju stavke od $1, $2: označena je kao „ograničena“.\nNemate pristup do nje.",
        "revdelete-modify-missing": "Greška pri menjanju IB stavke $1: ona ne postoji u bazi podataka.",
        "revdelete-no-change": "<strong>Upozorenje:</strong> stavka od $1, $2 već poseduje zatražena podešavanja vidljivosti.",
-       "revdelete-concurrent-change": "Greška pri menjanju stavke od $1, $2: njen status je u međuvremenu promenio drugi korisnik.\nProverite evidenciju.",
-       "revdelete-only-restricted": "Greška pri sakrivanju stavke od $1, $2: ne možete sakriti stavke od administratora bez izbora drugih mogućnosti vidljivosti.",
+       "revdelete-concurrent-change": "Greška pri menjanju stavke od $1, $2: njen status je u međuvremenu promenio drugi korisnik.\nProverite dnevnik.",
+       "revdelete-only-restricted": "Greška pri sakrivanju stavke od dana $1, $2: Ne možete sakriti stavke od prikaza administratorima bez izbora jedne od drugih opcija vidljivosti.",
        "revdelete-reason-dropdown": "*Uobičajeni razlozi za brisanje\n** Kršenje autorskog prava\n** Neprikladan komentar ili lični podaci\n** Neprikladno korisničko ime\n** Uvredljivi podaci",
        "revdelete-otherreason": "Drugi/dodatni razlog:",
        "revdelete-reasonotherlist": "Drugi razlog",
        "revdelete-edit-reasonlist": "Uredi razloge za brisanje",
        "revdelete-offender": "Autor izmene:",
-       "suppressionlog": "Evidencija sakrivanja",
+       "suppressionlog": "Dnevnik sakrivanja",
        "suppressionlogtext": "Ispod se nalazi spisak brisanja i blokiranja koji uključuje sadržaj sakriven od administratora. Pogledajte [[Special:BlockList|spisak blokiranja]] za spisak trenutnih operacija zabrana i blokiranja.",
        "mergehistory": "Spajanje istorija stranice",
        "mergehistory-header": "Ova stranica vam omogućava da spojite izmene neke izvorne stranice u novu stranicu.\nZapamtite da će ova promena ostaviti nepromenjen sadržaj istorije stranice.",
        "mergehistory-from": "Izvorna stranica:",
        "mergehistory-into": "Odredišna stranica:",
        "mergehistory-list": "Spojiva istorija izmena",
-       "mergehistory-merge": "Sledeće izmene stranice [[:$1]] mogu se spojiti sa [[:$2]].\nKoristite dugmiće u koloni da biste spojili izmene koje su napravljene pre navedenog vremena.\nKorišćenje navigacionih linkova će poništiti ovu kolonu.",
+       "mergehistory-merge": "Sledeće izmene stranice [[:$1]] mogu se spojiti sa [[:$2]].\nKoristite dugmiće u koloni da biste spojili izmene koje su napravljene pre navedenog vremena.\nKorišćenje navigacionih veza će poništiti ovu kolonu.",
        "mergehistory-go": "Prikaži izmene koje se mogu spojiti",
        "mergehistory-submit": "Spoji izmene",
        "mergehistory-empty": "Nema izmena za spajanje.",
        "mergehistory-done": "$3 {{PLURAL:$3|izmena stranice $1 je spojena|izmene stranice $1 su spojene|izmena stranice $1 je spojeno}} u [[:$2]].",
-       "mergehistory-fail": "Ne mogu da spojim istorije. Proverite stranicu i vremenske parametre.",
+       "mergehistory-fail": "Nije moguće izvršiti spajanje istorije. Proverite stranicu i vremenske parametre.",
        "mergehistory-fail-bad-timestamp": "Vremenska oznaka je nevažeća.",
-       "mergehistory-fail-invalid-source": "Izvorna stranica nije validna.",
+       "mergehistory-fail-invalid-source": "Izvorna stranica nije važeća.",
        "mergehistory-fail-invalid-dest": "Odredišna stranica je nevažeća.",
        "mergehistory-fail-no-change": "Spajanje istorije nije spojilo nijednu izmenu. Proverite parametre stranice i vremena.",
        "mergehistory-fail-permission": "Nemate ovlašćenje za spajanje istorije.",
-       "mergehistory-fail-self-merge": "Izvorna i odredišna stranica ne mogu biti iste.",
+       "mergehistory-fail-self-merge": "Izvorna i odredišna stranica su iste.",
        "mergehistory-fail-timestamps-overlap": "Izvorne izmene se preklapaju ili dolaze nakon odredišnih izmena.",
-       "mergehistory-fail-toobig": "Ne mogu da izvršim spajanje istorije jer će više od $1 {{PLURAL:$1|izmene biti premeštene|izmena biti premešteno}}.",
+       "mergehistory-fail-toobig": "Nije moguće izvršiti spajanje istorije jer će više od $1 {{PLURAL:$1|izmene biti premeštene|izmena biti premešteno}}.",
        "mergehistory-no-source": "Izvorna stranica $1 ne postoji.",
        "mergehistory-no-destination": "Odredišna stranica $1 ne postoji.",
        "mergehistory-invalid-source": "Izvorna stranica mora imati validan naslov.",
        "mergehistory-same-destination": "Izvorna i odredišna stranica ne mogu biti iste",
        "mergehistory-reason": "Razlog:",
        "mergehistory-revisionrow": "$1 ($2) $3 . . $4 $5 $6",
-       "mergelog": "Evidencija spajanja",
+       "mergelog": "Dnevnik spajanja",
        "revertmerge": "rastavi",
        "mergelogpagetext": "Ispod je spisak najskorijih spajanja istorija dveju stranica.",
-       "history-title": "Istorija izmena stranice â\80\9e$1â\80\9c",
+       "history-title": "Istorija izmena stranice â\80\9e$1â\80\9d",
        "difference-title": "Razlika između izmena na stranici „$1”",
        "difference-title-multipage": "Razlika između stranica „$1“ i „$2“",
        "difference-multipage": "(razlike između stranica)",
        "diff-multi-manyusers": "({{PLURAL:$1|Nije prikazana međuizmena|Nisu prikazane $1 međuizmene|Nije prikazano $1 međuizmena}} od više od $2 korisnika)",
        "diff-paragraph-moved-tonew": "Pasus je premešten. Kliknite da pređete na novu lokaciju.",
        "diff-paragraph-moved-toold": "Pasus je premešten. Kliknite da pređete na staru lokaciju.",
-       "difference-missing-revision": "{{PLURAL:$2|Jedna izmena|$2 izmene}} ove razlike ($1) ne {{PLURAL:$2|postoji|postoje}}.\n\nOvo se obično dešava kada pratite zastareli link do stranice koja je izbrisana.\nDetalje možete da pronađete u [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} evidenciji brisanja].",
+       "difference-missing-revision": "{{PLURAL:$2|Jedna izmena|$2 izmene}} ove razlike ($1) ne {{PLURAL:$2|postoji|postoje}}.\n\nOvo se obično dešava kada pratite zastarelu vezu do stranice koja je izbrisana.\nDetalje možete da pronađete u [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} dnevniku brisanja].",
        "searchresults": "Rezultati pretrage",
        "search-filter-title-prefix-reset": "Pretraži sve stranice",
        "searchresults-title": "Rezultati pretrage za „$1“",
        "prevn-title": "$1 {{PLURAL:$1|prethodni  rezultat|prethodna rezultata|prethodnih rezultata}}",
        "nextn-title": "$1 {{PLURAL:$1|sledeći rezultat|sledeća rezultata|sledećih rezultata}}",
        "shown-title": "Prikaži $1 {{PLURAL:$1|rezultat|rezultata}} po stranici",
-       "viewprevnext": "Pogledaj ($1 {{int:pipe-separator}} $2) ($3).",
+       "viewprevnext": "Pogledajte ($1 {{int:pipe-separator}} $2) ($3).",
        "searchmenu-exists": "<strong>Postoji stranica pod nazivom „[[:$1]]”!</strong> {{PLURAL:$2|0=|Takođe pogledajte druge pronađene rezultate pretrage.}}",
        "searchmenu-new": "<strong>Napravite stranicu „[[:$1]]” na ovom vikiju!</strong> {{PLURAL:$2|0=|Takođe pogledajte rezultat pretrage.|Takođe pogledajte rezultate pretrage.}}",
        "searchprofile-articles": "Stranice sa sadržajem",
-       "searchprofile-images": "Datoteke",
+       "searchprofile-images": "Multimedija",
        "searchprofile-everything": "Sve",
        "searchprofile-advanced": "Napredno",
        "searchprofile-articles-tooltip": "Pretražite: $1",
        "search-section": "(odeljak $1)",
        "search-category": "(kategorija $1)",
        "search-file-match": "(podudara se sadržaj datoteke)",
-       "search-suggest": "Da li ste mislili: $1",
-       "search-rewritten": "Prikazani rezultati za $1. Ipak pretraži $2.",
+       "search-suggest": "Jeste li mislili na „$1”",
+       "search-rewritten": "Prikazuju se rezultati za „$1”. Ipak pretraži „$2”.",
        "search-interwiki-caption": "Rezultati sa sestrinskih projekata",
        "search-interwiki-default": "Rezultati sa $1:",
        "search-interwiki-more": "(više)",
        "powersearch-togglenone": "Ništa",
        "powersearch-remember": "Zapamti izbor za buduće pretrage",
        "search-external": "Spoljašnja pretraga",
-       "searchdisabled": "Pretraga je onemogućena.\nU međuvremenu možete tražiti preko Gugla.\nUpamtite da njegovi popisi ovog vikija mogu biti zastareli.",
+       "searchdisabled": "Pretraga je onemogućena.\nU međuvremenu možete tražiti preko Gugla.\nUpamtite da njegovi indeksi ovog vikija mogu biti zastareli.",
        "search-error": "Došlo je do greške prilikom pretrage: $1",
        "search-warning": "Upozorenje prilikom pretrage: $1",
        "preferences": "Podešavanja",
        "prefs-skin": "Tema",
        "skin-preview": "pregledaj",
        "datedefault": "Svejedno",
-       "prefs-labs": "Probne mogućnosti",
+       "prefs-labs": "Eksperimentalne funkcije",
        "prefs-user-pages": "Korisničke stranice",
-       "prefs-personal": "Korisnički profil",
+       "prefs-personal": "Profil",
        "prefs-rc": "Skorašnje izmene",
        "prefs-watchlist": "Spisak nadgledanja",
        "prefs-editwatchlist": "Uređivanje spiska nadgledanja",
        "prefs-editwatchlist-label": "Uredi unose na spisku nadgledanja:",
-       "prefs-editwatchlist-edit": "pogledaj i ukloni naslove sa spiska nadgledanja",
-       "prefs-editwatchlist-raw": "uredi sirov spisak nadgledanja",
+       "prefs-editwatchlist-edit": "prikaži i ukloni naslove sa spiska nadgledanja",
+       "prefs-editwatchlist-raw": "uredi neobrađeni spisak nadgledanja",
        "prefs-editwatchlist-clear": "očisti spisak nadgledanja",
        "prefs-watchlist-days": "Broj dana u spisku nadgledanja:",
        "prefs-watchlist-days-max": "Najviše $1 {{PLURAL:$1|dan|dana|dana}}",
        "prefs-watchlist-edits": "Najveći broj promena prikazanih na spisku nadgledanja:",
        "prefs-watchlist-edits-max": "Najveći broj: 1000",
        "prefs-watchlist-token": "Token spiska nadgledanja:",
-       "prefs-watchlist-managetokens": "Upravljaj žetonima",
+       "prefs-watchlist-managetokens": "Upravljaj tokenima",
        "prefs-misc": "Razno",
        "prefs-resetpass": "promeni lozinku",
-       "prefs-changeemail": "promeni ili ukloni imejl-adresu",
-       "prefs-setemail": "postavi imejl-adresu",
+       "prefs-changeemail": "Promeni ili ukloni imejl-adresu",
+       "prefs-setemail": "Postavi imejl-adresu",
        "prefs-email": "Opcije imejla",
        "prefs-rendering": "Izgled",
        "saveprefs": "Sačuvaj",
        "restoreprefs": "Vrati sva podešavanja na podrazumevane vrednosti (u svim odeljcima)",
        "prefs-editing": "Uređivanje",
        "searchresultshead": "Pretraga",
-       "stub-threshold": "Prag za oblikovanje linkova kao klice ($1):",
+       "stub-threshold": "Prag za formatiranje veza kao klice ($1):",
        "stub-threshold-sample-link": "primer",
        "stub-threshold-disabled": "onemogućeno",
        "recentchangesdays": "Broj dana u skorašnjim izmenama:",
        "recentchangescount": "Podrazumevani broj izmena za prikaz u skorašnjim izmenama, istorijama stranica i dnevnicima:",
        "prefs-help-recentchangescount": "Najveći broj: 1000",
        "prefs-help-watchlist-token2": "Ovo je tajni ključ za veb-fid vašeg spiska nadgledanja. \nSvako ko zna ovaj ključ biće u mogućnosti da čita vaš spisak nadgledanja, zato ga nemojte deliti. \nAko je potrebno, [[Special:ResetTokens|možete da ga resetujete]].",
+       "prefs-help-tokenmanagement": "Možete videti i resetovati tajni ključ za svoj nalog koji može da pristupi veb-fidu vašeg spiska nadgledanja. Svako ko zna ključ moći će da čita vaš spisak nadgledanja, stoga ga ne delite.",
        "savedprefs": "Vaša podešavanja su sačuvana.",
        "savedrights": "Korisničke grupe {{GENDER:$1|korisnika|korisnice}} $1 su sačuvane.",
        "timezonelegend": "Vremenska zona:",
        "yourvariant": "Varijanta jezika:",
        "prefs-help-variant": "Željena varijanta ili pravopis za prikaz stranica sa sadržajem ovog vikija.",
        "yournick": "Novi potpis:",
-       "prefs-help-signature": "Komentari na stranicama za razgovor treba da budu potpisani sa „<nowiki>~~~~</nowiki>“ koje će biti pretvoreno u vaš potpis i vremensku oznaku.",
-       "badsig": "Nevažeći sirov potpis.\nProverite HTML tagove.",
+       "prefs-help-signature": "Komentari na stranicama za razgovor trebaju biti potpisani sa „<nowiki>~~~~</nowiki>” koje će biti konvertovano u vaš potpis i vremensku oznaku.",
+       "badsig": "Nevažeći neobrađeni potpis.\nProverite HTML tagove.",
        "badsiglength": "Vaš potpis je predugačak.\nNe sme biti duži od $1 {{PLURAL:$1|znaka|znaka|znakova}}.",
        "yourgender": "Kako želite da se predstavite?",
        "gender-unknown": "Kad vas spominje, softver će koristiti rodno neutralne reči kad god je to moguće",
        "email": "Imejl",
        "prefs-help-realname": "Pravo ime je opcionalno.\nAko je navedeno, biće korišćeno za pripisivanje vašeg rada.",
        "prefs-help-email": "Imejl adresa je opcionalna, ali je potrebna za resetovanje lozinke, ako je zaboravite.",
-       "prefs-help-email-others": "Takođe možete izabrati da dopustite drugima da vas kontaktiraju preko imejla putem linka na vašoj korisničkoj stranici ili stranici za razgovor.\nVaša imejl adresa neće biti prikazana drugim korisnicima koji vas kontaktiraju.",
+       "prefs-help-email-others": "Takođe možete izabrati da dopustite drugima da vas kontaktiraju preko imejla putem veze na vašoj korisničkoj stranici ili stranici za razgovor.\nVaša imejl adresa neće biti prikazana drugim korisnicima koji vas kontaktiraju.",
        "prefs-help-email-required": "Imejl-adresa je neophodna.",
        "prefs-info": "Osnovne informacije",
        "prefs-i18n": "Internacionalizacija",
        "prefs-signature": "Potpis",
        "prefs-dateformat": "Format datuma",
        "prefs-timeoffset": "Vremenska razlika",
-       "prefs-advancedediting": "Glavna podešavanja",
+       "prefs-advancedediting": "Opšte opcije",
        "prefs-developertools": "Programerske alatke",
        "prefs-editor": "Uređivač",
        "prefs-preview": "Pretpregled",
        "prefs-advancedsearchoptions": "Napredne opcije",
        "prefs-advancedwatchlist": "Napredne opcije",
        "prefs-displayrc": "Podešavanja prikaza",
-       "prefs-displaywatchlist": "Podešavanja prikaza",
+       "prefs-displaywatchlist": "Opcije prikaza",
        "prefs-tokenwatchlist": "Token",
        "prefs-diffs": "Razlike",
        "prefs-help-prefershttps": "Ova podešavanja će stupiti na snagu pri sledećoj prijavi.",
        "right-upload": "otpremanje datoteka",
        "right-reupload": "zamenjivanje postojećih datoteka",
        "right-reupload-own": "zamenjivanje sopstvenih datoteka",
-       "right-reupload-shared": "menjanje datoteka na deljenom skladištu multimedije",
+       "right-reupload-shared": "lokalno zamenjivanje datoteka na deljenom spremištu medija",
        "right-upload_by_url": "Otpremanje datoteka sa veb-adrese",
        "right-purge": "čišćenje keš memorije stranice bez potvrde",
        "right-autoconfirmed": "bez ograničavanja stavki za IP adrese",
        "right-writeapi": "korišćenje API-ja za pisanje",
        "right-delete": "brisanje stranica",
        "right-bigdelete": "brisanje stranica sa velikom istorijom",
-       "right-deletelogentry": "brisanje i vraćanje određenih unosa u evidenciji",
+       "right-deletelogentry": "brisanje i vraćanje određenih unosa u dnevniku",
        "right-deleterevision": "brisanje i vraćanje određenih izmena stranica",
        "right-deletedhistory": "pregledanje izbrisanih stavki istorije bez povezanog teksta",
        "right-deletedtext": "pregledanje izbrisanog teksta i promena između izbrisanih izmena",
        "right-userrights": "uređivanje svih korisničkih prava",
        "right-userrights-interwiki": "uređivanje korisničkih prava na drugim vikijima",
        "right-siteadmin": "zaključavanje i otključavanje baze podataka",
-       "right-override-export-depth": "izvoz stranica uključujući i povazene stranice do dubine od pet linkova",
+       "right-override-export-depth": "izvoz stranica uključujući i povazene stranice do dubine od pet veza",
        "right-sendemail": "slanje imejla drugim korisnicima",
        "right-managechangetags": "pravljenje i (de)aktiviranje [[Special:Tags|oznaka]]",
        "right-applychangetags": "primenjivanje [[Special:Tags|oznaka]] na nečije promene",
        "right-deletechangetags": "brisanje [[Special:Tags|oznaka]] iz baze podataka",
        "grant-generic": "Skup prava „$1“",
        "grant-group-page-interaction": "Uređivanje stranica",
-       "grant-group-file-interaction": "Uređivanje datoteka",
+       "grant-group-file-interaction": "Interakcija sa medijima",
        "grant-group-watchlist-interaction": "Uređivanje vašeg spiska nadgledanja",
        "grant-group-email": "Pošalji imejl",
        "grant-group-high-volume": "Izvršavanje velikog broja radnji",
        "grant-basic": "Osnovna prava",
        "grant-viewdeleted": "Pregled izbrisanih stranica i datoteka",
        "grant-viewmywatchlist": "Pregled vašeg spisak nadgledanja",
-       "grant-viewrestrictedlogs": "Pregledanje ograničenih unosa u evidenciji",
-       "newuserlogpage": "Evidencija novih korisnika",
+       "grant-viewrestrictedlogs": "Pregledanje ograničenih unosa u dnevniku",
+       "newuserlogpage": "Dnevnik novih korisnika",
        "newuserlogpagetext": "Ovo je dnevnik o registraciji novih korisnika.",
-       "rightslog": "Evidencija korisničkih prava",
+       "rightslog": "Dnevnik korisničkih prava",
        "rightslogtext": "Ovo je dnevnik promena korisničkih prava.",
        "action-read": "čitate ovu stranicu",
        "action-edit": "uređujete ovu stranicu",
        "recentchanges-summary": "Pratite nedavne promene na ovoj stranici.",
        "recentchanges-noresult": "Nema promena tokom datog perioda a koje odgovaraju ovim kriterijumima.",
        "recentchanges-timeout": "Ova pretraga je istekla. Možda želite da pokušate drugačije parametre pretrage.",
-       "recentchanges-network": "Zbog tehničkog problema ne mogu da učitam rezultate. Pokušajte da osvežite stranicu.",
+       "recentchanges-network": "Zbog tehničkog problema, nije moguće učitati rezultate. Pokušajte da osvežite stranicu.",
        "recentchanges-notargetpage": "Unesite ime stranice iznad da biste videli promene srodne s ovom stranicom",
        "recentchanges-feed-description": "Pratite najskorije promene na vikiju u ovom fidu.",
        "recentchanges-label-newpage": "Ovom izmenom je napravljena nova stranica",
-       "recentchanges-label-minor": "Ovo je manja izmena",
-       "recentchanges-label-bot": "Ovu izmenu je napravio bot",
-       "recentchanges-label-unpatrolled": "Ova izmena još nije patrolirana",
+       "recentchanges-label-minor": "Manja izmena",
+       "recentchanges-label-bot": "Botovska izmena",
+       "recentchanges-label-unpatrolled": "Nepatrolirana izmena",
        "recentchanges-label-plusminus": "Promena veličine stranice u bajtovima",
        "recentchanges-legend-heading": "<strong>Legenda:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (takođe pogledajte [[Special:NewPages|spisak novih stranica]])",
        "rcfilters-limit-and-date-label": "$1 {{PLURAL:$1|promena|promene|promena}}, $2",
        "rcfilters-date-popup-title": "Vremenski period za pretragu",
        "rcfilters-days-title": "Nedavni dani",
-       "rcfilters-hours-title": "Skorašnji sati",
+       "rcfilters-hours-title": "Nedavni sati",
        "rcfilters-days-show-days": "$1 {{PLURAL:$1|dan|dana}}",
        "rcfilters-days-show-hours": "$1 {{PLURAL:$1|sat|sata}}",
        "rcfilters-highlighted-filters-list": "Istaknuto: $1",
        "rcfilters-savedqueries-add-new-title": "Sačuvajte trenutna podešavanja filtera",
        "rcfilters-savedqueries-already-saved": "Ovi filteri su već sačuvani. Promenite svoja podešavanja da biste napravili nove sačuvane filtere.",
        "rcfilters-restore-default-filters": "Vrati podrazumevane filtere",
-       "rcfilters-clear-all-filters": "Uklonite sve filtere",
-       "rcfilters-show-new-changes": "Najnovije promene",
+       "rcfilters-clear-all-filters": "Obrišite sve filtere",
+       "rcfilters-show-new-changes": "Prikaži najnovije promene",
        "rcfilters-search-placeholder": "Filtrirajte promene (koristite meni ili pretragu za ime filtera)",
        "rcfilters-invalid-filter": "Nevažeći filter",
        "rcfilters-empty-filter": "Nema aktivnih filtera. Svi doprinosi su prikazani.",
        "rcfilters-filterlist-whatsthis": "Kako ovo funkcioniše?",
        "rcfilters-filterlist-feedbacklink": "Recite nam šta mislite o ovim alatkama za filtriranje",
        "rcfilters-highlightbutton-title": "Istakni rezultate",
-       "rcfilters-highlightmenu-title": "Izbor boje",
+       "rcfilters-highlightmenu-title": "Izaberite boju",
        "rcfilters-highlightmenu-help": "Izaberite boju da biste istaknuli ovo svojstvo",
        "rcfilters-filterlist-noresults": "Nema pronađenih filtera",
        "rcfilters-noresults-conflict": "Nije pronađen nijedan rezultat jer su kriterijumi pretrage sukobljeni",
        "rcfilters-filter-watchlist-notwatched-label": "Nije na spisku nadgledanja",
        "rcfilters-filter-watchlist-notwatched-description": "Sve osim promena stranica na vašem spisku nadgledanja.",
        "rcfilters-filtergroup-watchlistactivity": "Stanje na spisku nadgledanja",
-       "rcfilters-filter-watchlistactivity-unseen-label": "Nepogledane promene",
+       "rcfilters-filter-watchlistactivity-unseen-label": "Nepregledane promene",
        "rcfilters-filter-watchlistactivity-unseen-description": "Promene na stranicama koje niste posetili od kada su promene napravljene.",
-       "rcfilters-filter-watchlistactivity-seen-label": "Pogledane promene",
+       "rcfilters-filter-watchlistactivity-seen-label": "Pregledane promene",
        "rcfilters-filter-watchlistactivity-seen-description": "Promene na stranicama koje ste posetili od kada su promene napravljene.",
        "rcfilters-filtergroup-changetype": "Tip promene",
        "rcfilters-filter-pageedits-label": "Izmene stranica",
-       "rcfilters-filter-pageedits-description": "Izmene viki sadržaja, rasprava, opisa kategorija…",
+       "rcfilters-filter-pageedits-description": "Izmene viki sadržaja, diskusija, opisa kategorija…",
        "rcfilters-filter-newpages-label": "Pravljenje stranica",
        "rcfilters-filter-newpages-description": "Izmene kojima se prave nove stranice.",
        "rcfilters-filter-categorization-label": "Promene kategorija",
        "rcfilters-liveupdates-button": "Ažuriraj uživo",
        "rcfilters-liveupdates-button-title-on": "Isključite ažuriranja uživo",
        "rcfilters-liveupdates-button-title-off": "Prikažite nove promene uživo",
-       "rcfilters-watchlist-markseen-button": "Označi sve promene kao pogledane",
-       "rcfilters-watchlist-edit-watchlist-button": "Promeni spisak nadgledanih stranica",
+       "rcfilters-watchlist-markseen-button": "Označi sve promene kao viđene",
+       "rcfilters-watchlist-edit-watchlist-button": "Uredi spisak nadgledanih stranica",
        "rcfilters-watchlist-showupdated": "Promene na stranicama koje niste posetili od kada je izmena izvršena su <strong>podebljane</strong>, s ispunjenim oznakama.",
        "rcfilters-preference-label": "Sakrij poboljšanu verziju skorašnjih izmena",
        "rcfilters-preference-help": "Poništava redizajn interfejsa iz 2017. i sve alatke dodate tada i posle.",
        "upload-tryagain": "Pošalji izmenjeni opis datoteke",
        "upload-tryagain-nostash": "Pošaljite re-otpremljenu datoteku i izmenjen opis",
        "uploadnologin": "Niste prijavljeni",
-       "uploadnologintext": "Morate biti $1 da biste otpremali datoteke.",
+       "uploadnologintext": "$1 da biste otpremali datoteke.",
        "upload_directory_missing": "Fascikla za slanje ($1) nedostaje i server je ne može napraviti.",
        "upload_directory_read_only": "Server ne može da piše po fascikli za slanje ($1).",
        "uploaderror": "Greška pri otpremanju",
-       "upload-recreate-warning": "<strong>Upozorenje: Datoteka sa tim imenom je izbrisana ili premeštena.</strong>\n\nEvidencija brisanja i premeštanja stranice navedena je ispod sa obrazloženjem:",
+       "upload-recreate-warning": "<strong>Upozorenje: Datoteka sa tim imenom je izbrisana ili premeštena.</strong>\n\nDnevnik brisanja i premeštanja stranice naveden je ispod sa obrazloženjem:",
        "uploadtext": "Koristite obrazac ispod da biste otpremili datoteke.\nZa pregled ili pretragu postojećih datoteka, pogledajte [[Special:FileList|spisak otpremljenih datoteka]], ponovna otpremanja su navedena u [[Special:Log/upload|evidenciji otpremanja]], a brisanja u [[Special:Log/delete|evidenciji brisanja]].\n\nDatoteku dodajete na željenu stranicu koristeći sledeće obrasce:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Slika.jpg]]</nowiki></code>''' za verziju slike u punoj veličini\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Slika.png|200p|mini|levo|opis]]</nowiki></code>''' za verziju slike s veličinom od 200 piksela koja je prikazana u zasebnom okviru, zajedno s opisom.\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Datoteka.ogg]]</nowiki></code>''' za direktno povezivanje s datotekom bez njenog prikazivanja",
        "upload-permitted": "Dozvoljeni {{PLURAL:$2|tip|tipovi}} datoteka: $1.",
        "upload-preferred": "Preporučeni {{PLURAL:$2|tip|tipovi}} datoteka: $1.",
        "upload-prohibited": "Zabranjeni {{PLURAL:$2|tip|tipovi}} datoteka: $1.",
-       "uploadlogpage": "Evidencija otpremanja",
+       "uploadlogpage": "Dnevnik otpremanja",
        "uploadlogpagetext": "Ispod je spisak nedavnih otpremanja.\nPogledajte [[Special:NewFiles|galeriju novih datoteka]] za lepši pregled.",
        "filename": "Naziv datoteke",
        "filedesc": "Opis izmene",
        "illegal-filename": "Naziv datoteke je zabranjen.",
        "overwrite": "Zamenjivanje postojeće datoteke je zabranjeno.",
        "unknown-error": "Došlo je do nepoznate greške.",
-       "tmp-create-error": "Ne mogu da napravim privremenu datoteku.",
+       "tmp-create-error": "Nije moguće napraviti privremenu datoteku.",
        "tmp-write-error": "Greška pri pisanju privremene datoteke.",
        "large-file": "Preporučljivo je da datoteke ne budu veće od $1; ova datoteka je $2.",
        "largefileserver": "Ova datoteka prelazi ograničenje veličine.",
-       "emptyfile": "Datoteka koju ste poslali je prazna.\nUzrok može biti greška u nazivu datoteke.\nProverite da li zaista želite da je pošaljete.",
+       "emptyfile": "Datoteka koju ste otpremili je prazna.\nUzrok može da bude greška u imenu datoteke.\nProverite želite li zaista da je otpremite.",
        "windows-nonascii-filename": "Ovaj viki ne podržava imena datoteka sa posebnim znacima.",
        "fileexists": "Datoteka s ovim imenom već postoji. Pogledajte <strong>[[:$1]]</strong> ako niste sigurni da li želite da je promenite.\n[[$1|thumb]]",
        "filepageexists": "Stranica s opisom ove datoteke je već napravljena ovde <strong>[[:$1]]</strong>, iako datoteka ne postoji.\nOpis koji ste naveli se neće pojaviti na stranici s opisom.\nDa bi se vaš opis ovde našao, potrebno je da ga ručno izmenite.\n[[$1|thumb]]",
        "php-uploaddisabledtext": "Otpremanje datoteka je onemogućeno u PHP-u.\nProverite podešavanja file_uploads.",
        "uploadscripted": "Datoteka sadrži HTML ili skriptni kod koji može biti pogrešno protumačen od strane pregledača.",
        "upload-scripted-pi-callback": "Datoteka koja sadrži instrukcije za obradu XML stilskog oblika se ne može otpremiti.",
-       "upload-scripted-dtd": "Nije moguće otpremanje SVG datoteka koje sadrže nestandardnu DTD deklaraciju.",
+       "upload-scripted-dtd": "Nije moguće otpremiti SVG datoteke koje sadrže nestandardnu DTD deklaraciju.",
        "uploaded-script-svg": "Pronađen skriptni elemenat „$1“ u postavljenoj SVG datoteci.",
        "uploaded-hostile-svg": "Pronađen nebezbedan CSS u stilskom elementu postavljene SVG datoteke.",
        "uploaded-event-handler-on-svg": "Nije dozvoljeno postavljanje atributa koji kontrolišu događaje <code>$1=\"$2\"</code> u SVG datotekama.",
        "uploaded-href-unsafe-target-svg": "Pronađen href sa nesigurnim podacima: URI odredište <code>&lt;$1 $2=\"$3\"&gt;</code> u postavljenoj SVG datoteci.",
        "uploaded-animate-svg": "Pronađena „animate“ oznaka koja možda menja href koristeći se „from“ atributom <code>&lt;$1 $2=\"$3\"&gt;</code> u postavljenoj SVG datoteci.",
        "uploadscriptednamespace": "Ova SVG datoteka sadrži pogrešan imenski prostor „<nowiki>$1</nowiki>“",
-       "uploadinvalidxml": "Ne mogu da raščlanim XML u otpremljenoj datoteci.",
+       "uploadinvalidxml": "Nije moguće raščlaniti XML u otpremljenoj datoteci.",
        "uploadvirus": "Datoteka sadrži virus!\nDetalji: $1",
        "uploadjava": "Datoteka je formata ZIP koji sadrži java .class element.\nSlanje java datoteka nije dozvoljeno jer one mogu izazvati zaobilaženje sigurnosnih ograničenja.",
        "upload-source": "Izvorna datoteka",
        "upload-form-label-infoform-categories": "Kategorije",
        "upload-form-label-infoform-date": "Datum",
        "upload-form-label-own-work-message-generic-local": "Ja potvrđujem da otpremam ovu datoteku poštujući uslove korišćenja usluge i licenciranje na {{SITENAME}}.",
-       "upload-form-label-not-own-work-message-generic-local": "Ako niste u mogućnosti da otpremite ovu datoteku pod uslovima {{SITENAME}}, molimo vas da zatvorite ovaj dijalog i pokušate drugom metodom.",
+       "upload-form-label-not-own-work-message-generic-local": "Ako niste u mogućnosti da otpremite ovu datoteku pod pravilima projekta {{SITENAME}}, zatvorite ovaj dijalog i pokušate drugom metodom.",
        "upload-form-label-not-own-work-local-generic-local": "Takođe možete pokušati [[Special:Upload|podrazumevanu stranicu za otpremanje]].",
-       "backend-fail-stream": "Ne mogu da emitujem datoteku $1.",
-       "backend-fail-backup": "Ne mogu da napravim rezervu datoteke $1.",
+       "backend-fail-stream": "Nije moguće emitovati datoteku „$1”.",
+       "backend-fail-backup": "Nije moguće napraviti rezervnu kopiju datoteke „$1”.",
        "backend-fail-notexists": "Datoteka $1 ne postoji.",
-       "backend-fail-hashes": "Ne mogu da dobijem disperzije datoteke za upoređivanje.",
+       "backend-fail-hashes": "Nije moguće dobiti disperzije datoteke za upoređivanje.",
        "backend-fail-notsame": "Već postoji neistovetna datoteka – $1.",
        "backend-fail-invalidpath": "$1 nije važeća putanja za skladištenje.",
-       "backend-fail-delete": "Ne mogu da izbrišem datoteku „$1”.",
-       "backend-fail-describe": "Ne mogu da promenim metapodatke za datoteku „$1“.",
+       "backend-fail-delete": "Nije moguće izbrisati datoteku „$1”.",
+       "backend-fail-describe": "Nije moguće promeniti metapodatke za datoteku „$1”.",
        "backend-fail-alreadyexists": "Datoteka $1 već postoji.",
-       "backend-fail-store": "Ne mogu da smestim datoteku $1 u $2.",
-       "backend-fail-copy": "Ne mogu da umnožim datoteku $1 u $2.",
-       "backend-fail-move": "Ne mogu da premestim datoteku $1 u $2.",
-       "backend-fail-opentemp": "Ne mogu da otvorim privremenu datoteku.",
-       "backend-fail-writetemp": "Ne mogu da pišem u privremenoj datoteci.",
-       "backend-fail-closetemp": "Ne mogu da zatvorim privremenu datoteku.",
-       "backend-fail-read": "Ne mogu da pročitam datoteku $1.",
-       "backend-fail-create": "Ne mogu da zapišem datoteku $1.",
+       "backend-fail-store": "Nije moguće skladištiti datoteku „$1” u „$2”.",
+       "backend-fail-copy": "Nije moguće kopirati datoteku „$1” u „$2”.",
+       "backend-fail-move": "Nije moguće premestiti datoteku „$1” u „$2”.",
+       "backend-fail-opentemp": "Nije moguće otvoriti privremenu datoteku.",
+       "backend-fail-writetemp": "Nije moguće upisivati u privremenu datoteku.",
+       "backend-fail-closetemp": "Nije moguće zatvoriti privremenu datoteku.",
+       "backend-fail-read": "Nije moguće čitati datoteku „$1”.",
+       "backend-fail-create": "Nije moguće napisati datoteku „$1”.",
        "backend-fail-maxsize": "Ne mogu da zapišem datoteku $1 jer je veća od {{PLURAL:$2|$2 bajta|$2 bajta|$2 bajtova}}.",
        "backend-fail-readonly": "Skladišna osnova „$1“ je trenutno samo za čitanje. Navedeni razlog je: <em>$2</em>",
        "backend-fail-synced": "Datoteka „$1“ je nedosledna između unutrašnjih skladišnih osnova",
-       "backend-fail-connect": "Ne mogu da se povežem sa skladišnom osnovom „$1“.",
+       "backend-fail-connect": "Nije moguće povezati se sa pozadinskim skladištem „$1”.",
        "backend-fail-internal": "Došlo je do nepoznate greške u skladišnoj osnovi „$1“.",
-       "backend-fail-contenttype": "Ne mogu da utvrdim kakav sadržaj ima datoteka koju treba da smestim u „$1“.",
+       "backend-fail-contenttype": "Nije moguće odrediti tip sadržaja datoteke za skladištenje u „$1”.",
        "backend-fail-batchsize": "Skladišna osnova je dobila blokadu od $1 {{PLURAL:$1|operacije|operacije|operacija}}; ograničenje je $2 {{PLURAL:$2|operacija|operacije|operacija}}.",
        "backend-fail-usable": "Ne mogu da pročitam ili zapišem datoteku „$1“ jer nemate dovoljno dozvola ili vam nedostaju fascikle/sadržaoci.",
-       "filejournal-fail-dbconnect": "Ne mogu da se povežem s novinarskom bazom za skladišnu osnovu „$1“.",
-       "filejournal-fail-dbquery": "Ne mogu da ažuriram novinarsku bazu za skladišnu osnovu „$1“.",
-       "lockmanager-notlocked": "Ne mogu da otključam „$1“ jer nije zaključan.",
-       "lockmanager-fail-closelock": "Ne mogu da zatvorim katanac za „$1“.",
-       "lockmanager-fail-deletelock": "Ne mogu da izbrišem katanac za „$1“.",
-       "lockmanager-fail-acquirelock": "Ne mogu da se zaključam za „$1“.",
+       "filejournal-fail-dbconnect": "Nije moguće povezati se sa novinarskom bazom podataka za pozadinsko skladište „$1”.",
+       "filejournal-fail-dbquery": "Nije moguće ažurirati novinarsku bazu podataka za pozadinsko skladište „$1”.",
+       "lockmanager-notlocked": "Nije moguće otključati „$1” jer nije zaključan.",
+       "lockmanager-fail-closelock": "Nije moguće zatvoriti katanac za „$1”.",
+       "lockmanager-fail-deletelock": "Nije moguće izbrisati katanac za „$1”.",
+       "lockmanager-fail-acquirelock": "Nije moguće steći katanac za „$1”.",
        "lockmanager-fail-openlock": "Ne mogu da otvorim katanac za „$1“. Uverite se da je vaš direktorijum za otpremanje ispravno konfigurisan i da vaš veb-server ima dozvolu da piše u tom direktorijumu. Pogledajte https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgUploadDirectory za više informacija.",
-       "lockmanager-fail-releaselock": "Ne mogu da oslobodim katanac za „$1“.",
-       "lockmanager-fail-db-bucket": "Ne mogu da kontaktiram s dovoljno katanaca u kanti $1.",
-       "lockmanager-fail-db-release": "Ne mogu da oslobodim katance u bazi $1.",
-       "lockmanager-fail-svr-acquire": "Ne mogu da dobijem katance na serveru $1.",
-       "lockmanager-fail-svr-release": "Ne mogu da oslobodim katance na serveru $1.",
+       "lockmanager-fail-releaselock": "Nije moguće osloboditi katanac za „$1”.",
+       "lockmanager-fail-db-bucket": "Nije moguće kontaktirati sa dovoljno katanaca u kanti $1.",
+       "lockmanager-fail-db-release": "Nije moguće osloboditi katance u bazi podataka $1.",
+       "lockmanager-fail-svr-acquire": "Nije moguće steći katance na serveru $1.",
+       "lockmanager-fail-svr-release": "Nije moguće osloboditi katance na serveru $1.",
        "zip-file-open-error": "Došlo je do greške pri otvaranju datoteke za proveru ZIP arhive.",
        "zip-wrong-format": "Navedena datoteka nije formata ZIP.",
        "zip-bad": "Datoteka je oštećena ili je nečitljiva ZIP datoteka.\nBezbednosna provera ne može da se izvrši kako treba.",
-       "zip-unsupported": "Datoteka je formata ZIP koji koristi mogućnosti koje ne podržava Medijaviki.\nBezbednosna provera ne može da se izvrši kako treba.",
+       "zip-unsupported": "Datoteka je formata ZIP koji koristi funkcije ZIP koje Medijaviki ne podržava.\nNe može se pravilno proveriti u vezi bezbednosti.",
        "uploadstash": "Otpremanje niza datoteka",
        "uploadstash-summary": "Ova stranica pruža pristup datotekama koje su otpremljene ili se otpremaju, ali još nisu objavljene. Ove datoteke nisu vidljive nikome, osim korisniku koji ih je otpremio.",
-       "uploadstash-clear": "Očisti sakrivene datoteke",
+       "uploadstash-clear": "Obriši niz datoteka",
        "uploadstash-nofiles": "Nemate sakrivene datoteke.",
        "uploadstash-badtoken": "Izvršavanje ove radnje nije uspelo, razlog tome može biti istek vremena za uređivanje. Pokušajte ponovo.",
-       "uploadstash-errclear": "Čišćenje datoteka nije uspelo.",
+       "uploadstash-errclear": "Brisanje datoteka nije uspelo.",
        "uploadstash-refresh": "Osveži spisak datoteka",
-       "uploadstash-thumbnail": "pogledaj sličicu",
+       "uploadstash-thumbnail": "prikaži sličicu",
        "uploadstash-exception": "Ne mogu sačuvati datoteku u skladište ($1): „$2“.",
        "uploadstash-bad-path": "Putanja ne postoji.",
        "uploadstash-bad-path-invalid": "Putanja nije validna.",
        "uploadstash-bad-path-unrecognized-thumb-name": "Neprepoznato ime minijature.",
        "uploadstash-bad-path-bad-format": "Ključ „$1“ nije u odgovarajućem obliku.",
        "uploadstash-file-not-found": "Ključ „$1” nije pronađen u skladištu.",
-       "uploadstash-file-not-found-no-thumb": "Ne mogu da pribavim sličicu.",
+       "uploadstash-file-not-found-no-thumb": "Nije moguće pribaviti sličicu.",
        "uploadstash-file-not-found-no-local-path": "Nema lokalne putanje za umanjenu stavku.",
-       "uploadstash-file-not-found-no-object": "Ne mogu da napravim lokalni datotečni objekat za sličicu.",
+       "uploadstash-file-not-found-no-object": "Nije moguće napraviti lokalni datotečni objekat za sličicu.",
        "uploadstash-file-not-found-no-remote-thumb": "Dobavljanje minijature nije uspelo: $1\nAdresa = $2",
        "uploadstash-file-not-found-missing-content-type": "Nedostaje zaglavlje za tip sadržaja.",
        "uploadstash-file-not-found-not-exists": "Ne mogu naći putanju ili ovo nije obična datoteka.",
        "img-auth-accessdenied": "Pristup je odbijen",
        "img-auth-nopathinfo": "Nedostaje PATH_INFO.\nVaš server nije podešen da prosleđuje ovakve podatke.\nMožda je zasnovan na CGI-ju koji ne podržava img_auth.\nPogledajte https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization?uselang=sr-ec.",
        "img-auth-notindir": "Tražena putanja nije u podešenom direktorijumu za otpremanje.",
-       "img-auth-badtitle": "Ne mogu da sastavim važeći naslov iz „$1“.",
+       "img-auth-badtitle": "Nije moguće sastaviti važeći naslov iz „$1”.",
        "img-auth-nologinnWL": "Niste prijavljeni i „$1” nije na spisku dozvoljenih.",
        "img-auth-nofile": "Datoteka „$1“ ne postoji.",
        "img-auth-isdir": "Pokušavate da pristupite fascikli „$1“.\nDozvoljen je samo pristup datotekama.",
        "http-curl-error": "Greška pri otvaranju adrese: $1",
        "http-bad-status": "Došlo je do problema tokom zahteva HTTP: $1 $2",
        "http-internal-error": "HTTP interna greška.",
-       "upload-curl-error6": "Ne mogu da pristupim adresi",
-       "upload-curl-error6-text": "Ne mogu da pristupim navedenom URL-u.\nProverite da li je URL ispravan i dostupan.",
+       "upload-curl-error6": "Nije moguće pristupiti URL adresi",
+       "upload-curl-error6-text": "Nije moguće pristupiti navedenoj URL adresi.\nPonovo proverite da li je ispravna i da li sajt radi.",
        "upload-curl-error28": "Otpremanje je isteklo",
        "upload-curl-error28-text": "Server ne odgovara na upit.\nProverite da li sajt radi, malo osačekajte i pokušajte ponovo.\nProbajte kasnije kada bude manje opterećenje.",
        "license": "Licenca:",
        "upload_source_file": "(vaša odabrana datoteka sa računara)",
        "listfiles-delete": "izbriši",
        "listfiles-summary": "Ova posebna stranica prikazuje sve otpremljene datoteke.",
-       "listfiles_search_for": "Naziv datoteke:",
+       "listfiles_search_for": "Pretraži ime medija:",
        "listfiles-userdoesnotexist": "Korisnički nalog „$1“ nije otvoren.",
        "imgfile": "datoteka",
        "listfiles": "Spisak datoteka",
        "linkstoimage": "{{PLURAL:$1|Sledeća stranica koristi|$1 sledeće stranice koriste|$1 sledećih stranica koristi}} ovu datoteku:",
        "linkstoimage-more": "Više od $1 {{PLURAL:$1|stranica koristi|stranice koriste|stranica koristi}} ovu datoteku.\nSledeći spisak prikazuje {{PLURAL:$1|prvu stranicu koja koristi|prve $1 stranice koje koriste|prvih $1 stranica koje koriste}} samo ovu datoteku.\nDostupan je i [[Special:WhatLinksHere/$2|potpuni spisak]].",
        "nolinkstoimage": "Nema stranica koje koriste ovu datoteku.",
-       "morelinkstoimage": "Pogledajte [[Special:WhatLinksHere/$1|više linkova]] do ove datoteke.",
+       "morelinkstoimage": "Pogledajte [[Special:WhatLinksHere/$1|više veza]] do ove datoteke.",
        "linkstoimage-redirect": "$1 (preusmerenje datoteke) $2",
        "duplicatesoffile": "{{PLURAL:$1|Sledeća datoteka je duplikat|Sledeće $1 datoteke su duplikati|Sledećih $1 datoteka su duplikati}} ove datoteke ([[Special:FileDuplicateSearch/$2|detaljnije]]):",
        "sharedupload": "Ova datoteka se nalazi na $1 i može se koristiti i na drugim projektima.",
        "filedelete-reason-dropdown": "*Najčešći razlozi brisanja\n** Kršenje autorskih prava\n** Duplikati datoteka",
        "filedelete-edit-reasonlist": "Uredi razloge brisanja",
        "filedelete-maintenance": "Brisanje i vraćanje datoteka je privremeno onemogućeno zbog održavanja.",
-       "filedelete-maintenance-title": "Ne mogu da izbrišem datoteku",
+       "filedelete-maintenance-title": "Nije moguće izbrisati datoteku",
        "mimesearch": "MIME pretraga",
        "mimesearch-summary": "Ova stranica omogućava filtriranje datoteka prema njihovim MIME tipovima.\nUlazni podaci: contenttype/subtype ili contenttype/*, npr. <code>image/jpeg</code>.",
        "mimetype": "MIME tip:",
        "listduplicatedfiles-entry": "[[:File:$1|$1]] ima [[$3|{{PLURAL:$2|jedan duplikat|$2 duplikata}}]].",
        "unusedtemplates": "Nekorišćeni šabloni",
        "unusedtemplatestext": "Ova stranica navodi sve stranice u imenskom prostoru {{ns:template}} koje nisu uključene ni na jednoj drugoj stranici.\nPre brisanja proverite da li druge stranice vode do tih šablona.",
-       "unusedtemplateswlh": "ostali linkovi",
+       "unusedtemplateswlh": "ostale veze",
        "randompage": "Slučajna stranica",
        "randompage-nopages": "Nema stranica u {{PLURAL:$2|sledećem imenskom prostoru|sledećim imenskim prostorima}}: $1.",
        "randomincategory": "Slučajna stranica u kategoriji",
        "pageswithprop-text": "Ova strana izlistava strane koje imaju određenu osobinu",
        "pageswithprop-prop": "Ime osobine:",
        "pageswithprop-reverse": "Poređaj u suprotnom redosledu",
-       "pageswithprop-sortbyvalue": "Poređaj prema svojstvima",
+       "pageswithprop-sortbyvalue": "Sortiraj po vrednosti svojstva",
        "pageswithprop-submit": "Idi",
        "pageswithprop-prophidden-long": "sakriveno dugo tekstualno svojstvo ($1)",
        "pageswithprop-prophidden-binary": "sakriveno dugo binarno svojstvo ($1)",
        "doubleredirects": "Dvostruka preusmerenja",
-       "doubleredirectstext": "Ova stranica prikazuje stranice koje preusmeravaju na druga preusmerenja.\nSvaki red sadrži linkove prema prvom i drugom preusmerenju, kao i odredišnu stranicu drugog preusmerenja koja je obično „pravi“ članak na koga prvo preusmerenje treba da upućuje.\n<del>Precrtani</del> unosi su već rešeni.",
+       "doubleredirectstext": "Ova stranica prikazuje stranice koje preusmeravaju na druga preusmerenja.\nSvaki red sadrži veze prema prvom i drugom preusmerenju, kao i odredišnu stranicu drugog preusmerenja koja je obično „pravi“ članak na koga prvo preusmerenje treba da upućuje.\n<del>Precrtani</del> unosi su već rešeni.",
        "double-redirect-fixed-move": "[[$1]] je premešten.\nAutomatski je ažurirano i sada preusmerava na [[$2]].",
        "double-redirect-fixed-maintenance": "Automatski ispravlja dvostruka preusmerenja iz [[$1]] u [[$2]] kao deo održavanja",
        "double-redirect-fixer": "Ispravljač preusmerenja",
        "brokenredirectstext": "Sledeća preusmerenja vode na nepostojeće stranice:",
        "brokenredirects-edit": "uredi",
        "brokenredirects-delete": "izbriši",
-       "withoutinterwiki": "Stranice bez jezičkih linkova",
-       "withoutinterwiki-summary": "Sledeće stranice nemaju linkove prema verzijama na drugim jezicima.",
+       "withoutinterwiki": "Stranice bez jezičkih veza",
+       "withoutinterwiki-summary": "Sledeće stranice nemaju veze prema verzijama na drugim jezicima.",
        "withoutinterwiki-legend": "Prefiks",
        "withoutinterwiki-submit": "Prikaži",
        "fewestrevisions": "Stranice sa najmanje izmena",
        "unusedimages": "Nekorišćene datoteke",
        "wantedcategories": "Tražene kategorije",
        "wantedpages": "Tražene stranice",
-       "wantedpages-summary": "Spisak nepostojećih stranica sa najviše linkova do njih, na ovom spisku se ne nalaze stranice do kojih vode preusmerenja. Za spisak pokvarenih preusmerenja pogledajte [[{{#special:BrokenRedirects}}|spisak pokvarenih preusmerenja]].",
+       "wantedpages-summary": "Spisak nepostojećih stranica sa najviše veza do njih, na ovom spisku se ne nalaze stranice do kojih vode preusmerenja. Za spisak pokvarenih preusmerenja pogledajte [[{{#special:BrokenRedirects}}|spisak pokvarenih preusmerenja]].",
        "wantedpages-badtitle": "Nevalidan naslov u skupu rezultata: $1",
        "wantedfiles": "Tražene datoteke",
        "wantedfiletext-cat": "Sledeće datoteke se koriste, ali ne postoje. Datoteke iz drugih riznica mogu biti navedene iako ne postoje. Takve datoteke će biti <del>poništene</del> sa spiska. Pored toga, stranice koje sadrže nepostojeće datoteke se nalaze [[:$1|ovde]].",
        "wantedfiletext-nocat": "Sledeće datoteke se koriste, ali ne postoje. Datoteke iz drugih riznica mogu biti navedene iako ne postoje. Takve datoteke će biti <del>poništene</del> sa spiska.",
        "wantedfiletext-nocat-noforeign": "Sledeće datoteke se koriste, ali ne postoje.",
        "wantedtemplates": "Traženi šabloni",
-       "mostlinked": "Stranice sa najviše linkova",
-       "mostlinkedcategories": "Kategorije sa najviše linkova",
-       "mostlinkedtemplates": "Stranice sa najviše linkova",
+       "mostlinked": "Stranice sa najviše veza",
+       "mostlinkedcategories": "Kategorije sa najviše veza",
+       "mostlinkedtemplates": "Stranice sa najviše veza",
        "mostcategories": "Stranice sa najviše kategorija",
-       "mostimages": "Datoteke sa najviše linkova",
+       "mostimages": "Datoteke sa najviše veza",
        "mostinterwikis": "Stranice sa najviše međuvikija",
        "mostrevisions": "Stranice sa najviše izmena",
        "prefixindex": "Sve stranice sa prefiksom",
        "prefixindex-namespace": "Sve stranice s predmetkom (imenski prostor $1)",
        "prefixindex-submit": "Prikaži",
-       "prefixindex-strip": "Sakrij prefiks u spisku",
+       "prefixindex-strip": "Sakrij prefiks u rezultatima",
        "shortpages": "Kratke stranice",
        "longpages": "Dugačke stranice",
        "deadendpages": "Ćorsokaci",
-       "deadendpagestext": "Sledeće stranice nemaju linkove do drugih stranica na ovom vikiju.",
+       "deadendpagestext": "Sledeće stranice nemaju veze do drugih stranica na ovom vikiju.",
        "protectedpages": "Zaštićene stranice",
        "protectedpages-filters": "Filteri:",
        "protectedpages-indef": "Samo neograničene zaštite",
        "listusers": "Spisak korisnika",
        "listusers-editsonly": "Prikaži samo korisnike koji su uređivali",
        "listusers-temporarygroupsonly": "Prikaži samo korisnike u privremenim korisničkim grupama",
-       "listusers-creationsort": "Poređaj po datumu stvaranja",
+       "listusers-creationsort": "Sortiraj po datumu pravljenja",
        "listusers-desc": "Poređaj u opadajućem redosledu",
        "usereditcount": "$1 {{PLURAL:$1|izmena|izmene|izmena}}",
        "usercreated": "{{GENDER:$3|je napravio|je napravila|je napravio}} dana $1 u $2",
        "apisandbox-jsonly": "JavaScript je neophodan za korišćenje API peska.",
        "apisandbox-api-disabled": "API je onemogućen na ovom sajtu.",
        "apisandbox-submit": "Pošalji zahtev",
-       "apisandbox-reset": "Očisti",
+       "apisandbox-reset": "Obriši",
        "apisandbox-retry": "Pokušaj ponovo",
        "apisandbox-loading": "Učitavam informacije za API modul „$1”...",
        "apisandbox-load-error": "Došlo je do greške prilikom učitavanja informacija za API modul \"$1\": $2",
        "apisandbox-no-parameters": "Ovaj API modul nema parametre.",
-       "apisandbox-helpurls": "Linkovi za pomoć",
+       "apisandbox-helpurls": "Veze za pomoć",
        "apisandbox-examples": "Primeri",
        "apisandbox-dynamic-parameters": "Dodatni parametri",
        "apisandbox-dynamic-parameters-add-label": "Dodaj parametar:",
        "apisandbox-alert-page": "Polja na stranici nisu važeća.",
        "apisandbox-alert-field": "Vrednost ovog polja nije važeća.",
        "apisandbox-continue": "Nastavi",
-       "apisandbox-continue-clear": "Očisti",
+       "apisandbox-continue-clear": "Obriši",
        "apisandbox-param-limit": "Unesite <kbd>max</kbd> da bi ste koristili najveće ograničenje.",
        "apisandbox-multivalue-all-namespaces": "$1 (svi imenski prostori)",
        "apisandbox-multivalue-all-values": "$1 (sve vrednosti)",
        "booksources-search-legend": "Pretraži štampane izvore",
        "booksources-isbn": "ISBN:",
        "booksources-search": "Pretraži",
-       "booksources-text": "Ispod se nalazi spisak linkova ka sajtovima koji se bave prodajom novih i polovnih knjiga, a koji bi mogli imati dodatne podatke o knjigama koje tražite:",
+       "booksources-text": "Ispod se nalazi spisak veza ka sajtovima koji se bave prodajom novih i polovnih knjiga, a koji bi mogli imati dodatne podatke o knjigama koje tražite:",
        "booksources-invalid-isbn": "Navedeni ISBN broj nije validan. Proverite da nije došlo do greške pri kopiranju iz prvobitnog izvora.",
-       "magiclink-tracking-rfc": "Stranice sa magičnim RFC linkovima",
-       "magiclink-tracking-pmid": "Stranice sa magičnim PMID linkovima",
-       "magiclink-tracking-isbn": "Stranice sa ISBN magičnim linkovima",
+       "magiclink-tracking-rfc": "Stranice sa čarobnim RFC vezama",
+       "magiclink-tracking-pmid": "Stranice sa čarobnim PMID vezama",
+       "magiclink-tracking-isbn": "Stranice sa čarobnim ISBN vezama",
        "specialloguserlabel": "Izvršilac:",
        "speciallogtitlelabel": "Cilj (naslov ili {{ns:user}}:korisničko ime):",
-       "log": "Evidencije",
+       "log": "Dnevnici",
        "logeventslist-submit": "Prikaži",
        "logeventslist-more-filters": "Prikaz dodatnih dnevnika:",
-       "logeventslist-patrol-log": "Evidencija patroliranja",
-       "logeventslist-tag-log": "Evidencija oznaka",
+       "logeventslist-patrol-log": "Dnevnik patroliranja",
+       "logeventslist-tag-log": "Dnevnik oznaka",
        "all-logs-page": "Svi javni dnevnici",
        "alllogstext": "Skupni prikaz svih dostupnih dnevnika sa ovog vikija.\nMožete suziti prikaz izabiranjem tipa dnevnika, korisničkog imena (osetljivo na mala i velika slova) ili tražene stranice (takođe osetljivo na mala i velika slova).",
-       "logempty": "Nema pronađenih unosa u evidenciji.",
+       "logempty": "Nema pronađenih stavki u dnevniku.",
        "log-title-wildcard": "Pretraži naslove koji počinju sa ovim tekstom",
-       "showhideselectedlogentries": "Promeni vidljivost izabranih unosa u evidenciji",
-       "log-edit-tags": "Uredi oznake izabranih unosa u dnevnicima",
+       "showhideselectedlogentries": "Promeni vidljivost izabranih unosa u dnevniku",
+       "log-edit-tags": "Uredi oznake izabranih unosa u dnevniku",
        "checkbox-select": "Izaberi: $1",
        "checkbox-all": "Sve",
        "checkbox-none": "Ništa",
        "allpages-bad-ns": "{{SITENAME}} nema imenski prostor „$1“.",
        "allpages-hide-redirects": "Sakrij preusmerenja",
        "cachedspecial-viewing-cached-ttl": "Gledate keširanu verziju ove stranice, koja može biti stara i do $1.",
-       "cachedspecial-viewing-cached-ts": "Gledate keširanu verziju ove stranice, koja možda nije potpuno aktuelna.",
-       "cachedspecial-refresh-now": "Pogledaj najnoviju.",
+       "cachedspecial-viewing-cached-ts": "Gledate keširanu verziju ove stranice, koja možda nije potpuno trenutna.",
+       "cachedspecial-refresh-now": "Prikaži najnoviju.",
        "categories": "Kategorije",
        "categories-submit": "Prikaži",
-       "categoriespagetext": "{{PLURAL:$1|1=Sledeća kategorija sadrži|Sledeće kategorije sadrže}} stranice ili datoteke.\n[[Special:UnusedCategories|Nekorišćene kategorije]] nisu prikazane ovde.\nPogledajte i [[Special:WantedCategories|tražene kategorije]].",
+       "categoriespagetext": "{{PLURAL:$1|1=Sledeća kategorija postoji na vikiju i možda je/nije neiskorišćena.|Sledeće kategorije postoje na vikiju i možda su/nisu neiskorišćene.}}\nTakođe pogledajte [[Special:WantedCategories|tražene kategorije]].",
        "categoriesfrom": "Prikaži kategorije počev od:",
        "deletedcontributions": "Izbrisani korisnički doprinosi",
        "deletedcontributions-title": "Izbrisani korisnički doprinosi",
        "sp-deletedcontributions-contribs": "doprinosi",
-       "linksearch": "Pretraga spoljašnjih linkova",
+       "linksearch": "Pretraga spoljašnjih veza",
        "linksearch-pat": "Obrazac pretrage:",
        "linksearch-ns": "Imenski prostor:",
        "linksearch-ok": "Pretraži",
        "restricted-displaytitle-ignored": "Stranice sa zanemarenim naslovima za prikaz",
        "noindex-category-desc": "Stranice koje u sebi imaju magičnu reč <code><nowiki>__NOINDEX__</nowiki></code>.",
        "index-category-desc": "Stranice koje u sebi imaju magičnu reč <code><nowiki>__INDEX__</nowiki></code> i samim tim su indeksirane od strane robota.",
-       "broken-file-category-desc": "Stranica sadrži pokvareni link do datoteke (link za ugrađivanje datoteke kada ona ne postoji).",
+       "broken-file-category-desc": "Stranica sadrži pokvarenu vezu do datoteke (veza za ugrađivanje datoteke kada ona ne postoji).",
        "hidden-category-category-desc": "Kategorije koje u sebi imaju magičnu reč <code><nowiki>__HIDDENCAT__</nowiki></code> i samim tim se ne prikazuju u odeljku za kategorije na stranicama.",
        "trackingcategories-nodesc": "Opis nije dostupan.",
        "trackingcategories-disabled": "Kategorija je onemogućena",
        "email-legend": "Slanje imejla drugom korisniku projekta {{SITENAME}}",
        "emailfrom": "Od:",
        "emailto": "Za:",
-       "emailsubject": "Naslov:",
+       "emailsubject": "Tema:",
        "emailmessage": "Poruka:",
        "emailsend": "Pošalji",
        "emailccme": "Pošalji mi kopiju poruke na moj imejl.",
        "mywatchlist": "Spisak nadgledanja",
        "watchlistfor2": "Za $1 $2",
        "nowatchlist": "Nemate ništa na svom spisku nadgledanja.",
-       "watchlistanontext": "Morate biti prijavljeni da biste gledali i uređivali stavke na vašem spisku nadgledanja.",
+       "watchlistanontext": "Prijavite se da biste videli ili uređivali stavke na svom spisku nadgledanja.",
        "watchnologin": "Niste prijavljeni",
        "addwatch": "Dodaj na spisak nadgledanja",
        "addedwatchtext": "Stranica „[[:$1]]“ i njena stranica za razgovor je dodata na vaš [[Special:Watchlist|spisak nadgledanja]].",
        "actioncomplete": "Radnja je završena",
        "actionfailed": "Radnja nije uspela",
        "deletedtext": "Stranica „$1“ je izbrisana.\nPogledajte $2 za zapis nedavnih brisanja.",
-       "dellogpage": "Evidencija brisanja",
+       "dellogpage": "Dnevnik brisanja",
        "dellogpagetext": "Ispod je spisak nedavnih brisanja.",
        "deletionlog": "dnevnik brisanja",
-       "log-name-create": "Evidencija pravljenja stranica",
+       "log-name-create": "Dnevnik pravljenja stranica",
        "log-description-create": "Ispod je spisak nedavnih pravljenja stranica.",
        "logentry-create-create": "$1 je {{GENDER:$2|napravio|napravila}} stranicu $3",
        "reverted": "Vraćeno na raniju izmenu",
        "rollbacklinkcount-morethan": "vrati više od $1 {{PLURAL:$1|izmene|izmene|izmena}}",
        "rollbackfailed": "Vraćanje nije uspelo",
        "rollback-missingparam": "Nedostaje potreban parametar na zahtevu.",
-       "rollback-missingrevision": "Ne mogu da učitam podatke o izmeni.",
-       "cantrollback": "Ne mogu da vratim izmenu.\nPoslednji autor je ujedno i jedini.",
+       "rollback-missingrevision": "Nije moguće učitati podatke o izmeni.",
+       "cantrollback": "Nije moguće vratiti izmenu.\nPoslednji doprinosilac je ujedno i jedini.",
        "alreadyrolled": "Vraćanje poslednje izmene stranice [[:$1]] od strane {{GENDER:$2|korisnika|korisnice|korisnika}} [[User:$2|$2]] ([[User talk:$2|razgovor]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) nije uspelo; neko drugi je u međuvremenu izmenio ili vratio stranicu.\n\nPoslednju izmenu je {{GENDER:$3|napravio|napravila|napravio}} [[User:$3|$3]] ([[User talk:$3|razgovor]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
        "editcomment": "Rezime izmene je bio: <em>$1</em>.",
        "revertpage": "Vraćene izmene {{GENDER:$2|korisnika|korisnice}} [[Special:Contributions/$2|$2]] ([[User talk:$2|razgovor]]) na poslednju izmenu {{GENDER:$1|korisnika|korisnice}} [[User:$1|$1]]",
        "changecontentmodel-nodirectediting": "Model sadržaja $1 ne podržava izravno uređivanje",
        "changecontentmodel-emptymodels-title": "Nema dostupnih modela sadržaja",
        "changecontentmodel-emptymodels-text": "Model sadržaja stranice [[:$1]] se ne može konvertovati ni u jedan drugi tip.",
-       "log-name-contentmodel": "Evidencija promene modela sadržaja",
+       "log-name-contentmodel": "Dnevnik promene modela sadržaja",
        "log-description-contentmodel": "Ova stranica prikazuje izmene u modelima sadržaja stranica i stranice koje su napravljene sa modelom sadržaja koji se razlikuje od podrazumevanog.",
        "logentry-contentmodel-new": "$1 je {{GENDER:$2|napravio|napravila}} stranicu $3 s nestandardnim modelom sadržaja „$5“",
        "logentry-contentmodel-change": "$1 je {{GENDER:$2|promenio|promenila}} model sadržaja stranice $3 iz „$4“ u „$5“",
        "logentry-contentmodel-change-revertlink": "vrati",
        "logentry-contentmodel-change-revert": "vrati",
-       "protectlogpage": "Evidencija zaštite",
+       "protectlogpage": "Dnevnik zaštite",
        "protectlogtext": "Ispod je spisak zaštićenih stranica.\nPogledajte [[Special:ProtectedPages|spisak zaštićenih stranica]] za više detalja.",
        "protectedarticle": "je {{GENDER:|zaštitio|zaštitila}} stranicu „[[$1]]“",
        "modifiedarticleprotection": "je {{GENDER:|promenio|promenila}} nivo zaštite stranice „[[$1]]“",
        "unprotectedarticle": "je skinuo zaštitu sa stranice „[[$1]]“",
-       "movedarticleprotection": "je premestio podešavanja zaštite sa „[[$2]]“ na „[[$1]]“",
+       "movedarticleprotection": "je premestio podešavanja zaštite sa stranice „[[$2]]“ na „[[$1]]“",
        "protectedarticle-comment": "{{GENDER:$2|Zaštićena}} stranica [[$1]]",
        "modifiedarticleprotection-comment": "je {{GENDER:$2|promenio|promenila}} nivo zaštite stranice „[[$1]]”",
        "unprotectedarticle-comment": "{{GENDER:$2|Skinuta}} zaštita sa [[$1]]",
        "protect-title": "Promena nivoa zaštite stranice „$1“",
        "protect-title-notallowed": "Pregled nivoa zaštite stranice „$1“",
-       "prot_1movedto2": "je premestio [[$1]] na [[$2]]",
+       "prot_1movedto2": "je premestio stranicu [[$1]] na [[$2]]",
        "protect-badnamespace-title": "Nezaštitljiv imenski prostor",
        "protect-badnamespace-text": "Stranice u ovom imenskom prostoru se ne mogu zaštititi.",
        "protect-norestrictiontypes-text": "Ova stranica se ne može zaštititi jer nema dostupnih tipova ograničenja.",
        "protect_expiry_old": "Vreme isteka je u prošlosti.",
        "protect-unchain-permissions": "Otključaj daljnja podešavanja zaštite",
        "protect-text": "Ovde možete da pogledate i promenite nivo zaštite stranice <strong>$1</strong>.",
-       "protect-locked-blocked": "Ne možete da menjate nivoe zaštite dok ste blokirani.\nOvo su trenutna podešavanja stranice '''$1''':",
-       "protect-locked-dblock": "Nivoi zaštite se ne mogu menjati jer je aktivna baza podataka zaključana.\nOvo su trenutna podešavanja stranice '''$1''':",
-       "protect-locked-access": "Vaš nalog nema dozvolu da menja nivoe zaštite stranice.\nOvo su trenutna podešavanja stranice '''$1''':",
+       "protect-locked-blocked": "Ne možete da menjate nivoe zaštite dok ste blokirani.\nOvo su trenutna podešavanja stranice <strong>$1</strong>:",
+       "protect-locked-dblock": "Nivoi zaštite se ne mogu menjati jer je aktivna baza podataka zaključana.\nOvo su trenutna podešavanja stranice <strong>$1</strong>:",
+       "protect-locked-access": "Vaš nalog nema dozvolu da menja nivoe zaštite stranice.\nOvo su trenutna podešavanja stranice <strong>$1</strong>:",
        "protect-cascadeon": "Ova stranica je trenutno zaštićena jer je uključena u {{PLURAL:$1|sledeću stranicu koja ima|sledeće stranice koje imaju}} uključenu prenosivu zaštitu.\nPromene nivoa zaštite ove stranice neće da utiču na prenosivu zaštitu.",
        "protect-default": "Dopušteno svim korisnicima",
        "protect-fallback": "Dozvoljeno samo korisnicima sa dozvolom „$1“",
        "undeleterevdel": "Vraćanje neće biti izvršeno ako je rezultat toga delimično brisanje poslednje izmene.\nU takvim slučajevima morate isključiti ili otkriti najnovije izbrisane izmene.",
        "undeletehistorynoadmin": "Ova stranica je izbrisana.\nRazlog za brisanje se nalazi ispod, zajedno sa detaljima o korisniku koji je uredio ovu stranicu pre brisanja.\nTekst izbrisanih izmena je dostupan samo administratorima.",
        "undelete-revision": "Izbrisana izmena stranice $1 (dana $4; $5) od strane {{GENDER:$3|korisnika|korisnice}} $3:",
-       "undeleterevision-missing": "Nevažeća ili nedostajuća izmena.\nMožda ste uneli loš link ili je izmena vraćena ili uklonjena iz arhive.",
+       "undeleterevision-missing": "Nevažeća ili nedostajuća izmena.\nMožda ste uneli lošu vezu ili je izmena vraćena ili uklonjena iz arhive.",
        "undeleterevision-duplicate-revid": "Ne mogu vratiti {{PLURAL:$1|izmenu|$1 izmene|$1 izmena}} jer se {{PLURAL:$1|njen|njihov}} <code>rev_id</code> već koristi.",
        "undelete-nodiff": "Prethodne izmene nisu pronađene.",
        "undeletebtn": "Vrati",
-       "undeletelink": "pogledaj/vrati",
-       "undeleteviewlink": "pogledaj",
+       "undeletelink": "prikaži/vrati",
+       "undeleteviewlink": "prikaži",
        "undeleteinvert": "Obrni izbor",
        "undeletecomment": "Razlog:",
        "cannotundelete": "Vraćanje jedne ili svih nije uspelo:\n$1",
-       "undeletedpage": "<strong>Stranica $1 je vraćena</strong>\n\nPogledajte [[Special:Log/delete|evidenciju brisanja]] za zapise o nedavnim brisanjima i vraćanjima.",
-       "undelete-header": "Pogledajte [[Special:Log/delete|evidenciju brisanja]] za nedavno izbrisane stranice.",
+       "undeletedpage": "<strong>Stranica $1 je vraćena</strong>\n\nPogledajte [[Special:Log/delete|dnevnik brisanja]] za zapise o nedavnim brisanjima i vraćanjima.",
+       "undelete-header": "Pogledajte [[Special:Log/delete|dnevnik brisanja]] za nedavno izbrisane stranice.",
        "undelete-search-title": "Pretraga izbrisanih stranica",
        "undelete-search-box": "Pretraga izbrisanih stranica",
        "undelete-search-prefix": "Prikaži stranice koje počinju sa:",
        "namespace": "Imenski prostor:",
        "invert": "Obrni izbor",
        "tooltip-invert": "Označite ovu kutijucu da biste sakrili promene na stranicana u izabranom imenskom prostoru (i povezanim imenskim prostorima, ako je označeno)",
-       "tooltip-whatlinkshere-invert": "Označite ovu kutijicu za sakrivanje linkova sa stranica u izabranom imenskom prostoru.",
+       "tooltip-whatlinkshere-invert": "Označite ovu kutijicu za sakrivanje veza sa stranica u izabranom imenskom prostoru.",
        "namespace_association": "Povezani imenski prostor",
        "tooltip-namespace_association": "Označite ovu kutijicu da biste uključili i razgovor ili imenski prostor teme koja je povezana sa izabranim imenskim prostorom",
        "blanknamespace": "(glavni)",
-       "contributions": "Doprinosi {{GENDER:$1|korisnika|korisnice}}",
+       "contributions": "{{GENDER:$1|Doprinosi korisnika|Doprinosi korisnice|Korisnički doprinosi}}",
        "contributions-title": "Doprinosi {{GENDER:$1|korisnika|korisnice}} $1",
        "mycontris": "Doprinosi",
        "anoncontribs": "Doprinosi",
        "sp-contributions-logs": "dnevnici",
        "sp-contributions-talk": "razgovor",
        "sp-contributions-userrights": "upravljanje pravima {{GENDER:$1|korisnika|korisnice}}",
-       "sp-contributions-blocked-notice": "Ovaj korisnik je trenutno blokiran. \nPoslednji unos u evidenciji blokiranja je naveden ispod kao referenca:",
-       "sp-contributions-blocked-notice-anon": "Ova IP adresa je trenutno blokirana.\nPoslednji unos u evidenciji blokiranja je naveden ispod kao referenca:",
+       "sp-contributions-blocked-notice": "Ovaj korisnik je trenutno blokiran. \nNajnoviji unos u dnevniku blokiranja je naveden ispod kao referenca:",
+       "sp-contributions-blocked-notice-anon": "Ova IP adresa je trenutno blokirana.\nNajnoviji unos u dnevniku blokiranja je naveden ispod kao referenca:",
        "sp-contributions-search": "Pretraga doprinosa",
        "sp-contributions-username": "IP adresa ili korisničko ime:",
-       "sp-contributions-toponly": "Prikaži samo izmene koje su najnovije izmene",
-       "sp-contributions-newonly": "Samo izmene kojima su napravljene nove stranice",
+       "sp-contributions-toponly": "Prikaži samo najnovije izmene",
+       "sp-contributions-newonly": "Prikaži samo izmene kojima su napravljene nove stranice",
        "sp-contributions-hideminor": "Sakrij manje izmene",
        "sp-contributions-submit": "Pretraži",
        "whatlinkshere": "Šta vodi ovde",
        "nolinkshere-ns": "Nijedna stranica ne vodi na stranicu <strong>$2</strong> u izabranom imenskom prostoru.",
        "isredirect": "preusmerenje",
        "istemplate": "uključivanje",
-       "isimage": "link do datoteke",
+       "isimage": "veza do datoteke",
        "whatlinkshere-prev": "{{PLURAL:$1|prethodni|prethodna $1|prethodnih $1}}",
        "whatlinkshere-next": "{{PLURAL:$1|sledeći|sledeća $1|sledećih $1}}",
-       "whatlinkshere-links": "← linkovi",
+       "whatlinkshere-links": "← veze",
        "whatlinkshere-hideredirs": "$1 preusmerenja",
        "whatlinkshere-hidetrans": "$1 uključivanja",
-       "whatlinkshere-hidelinks": "$1 linkove",
-       "whatlinkshere-hideimages": "$1 linkova do datoteke",
+       "whatlinkshere-hidelinks": "$1 veze",
+       "whatlinkshere-hideimages": "$1 veza do datoteke",
        "whatlinkshere-filters": "Filteri",
        "whatlinkshere-submit": "Idi",
-       "autoblockid": "Automatsko blokiranje #$1",
+       "autoblockid": "Automatska blokada #$1",
        "block": "Blokiranje korisnika",
        "unblock": "Deblokiranje korisnika",
        "blockip": "Blokiranje {{GENDER:$1|korisnika|korisnice}}",
        "ipaddressorusername": "IP adresa ili korisničko ime:",
        "ipbexpiry": "Ističe:",
        "ipbreason": "Razlog:",
-       "ipbreason-dropdown": "*Najčešći razlozi za blokiranje\n** Umetanje lažnih informacija\n** Uklanjanje sadržaja sa stranica\n** Dodavanje nepoželjnih linkova do spoljašnjih sajtova\n** Unošenje besmislica/grafita u stranice\n** Nepristojno ponašanje\n** Upotreba više naloga\n** Neprihvatljivo korisničko ime",
+       "ipbreason-dropdown": "*Najčešći razlozi za blokiranje\n** Umetanje lažnih informacija\n** Uklanjanje sadržaja sa stranica\n** Dodavanje nepoželjnih veza do spoljašnjih sajtova\n** Unošenje besmislica/grafita u stranice\n** Nepristojno ponašanje\n** Upotreba više naloga\n** Neprihvatljivo korisničko ime",
        "ipb-hardblock": "Spreči prijavljene korisnike da uređuju s ove IP adrese",
        "ipbcreateaccount": "Onemogući otvaranje naloga",
        "ipbemailban": "Spreči korisnika da šalje imejlove",
        "badipaddress": "Nevažeća IP adresa",
        "blockipsuccesssub": "Blokiranje je uspelo",
        "blockipsuccesstext": "[[Special:Contributions/$1|$1]] je {{GENDER:$1|blokiran|blokirana}}.<br />\nPogledajte [[Special:BlockList|spisak]] za pregled blokada.",
-       "ipb-blockingself": "Ovom radnjom ćete blokirati sebe! Jeste li sigurni da to želite?",
-       "ipb-confirmhideuser": "Upravo ćete blokirati korisnika s uključenom mogućnošću „sakrij korisnika“. Ovim će korisničko ime biti sakriveno u svim spiskovima i izveštajima. Želite li to da uradite?",
+       "ipb-blockingself": "Blokiraćete samog sebe! Zaista to želite?",
+       "ipb-confirmhideuser": "Blokirate korisnika sa omogućenom funkcijom „sakrij korisnika”. Ovim će se sakriti korisničko ime u svim spiskovima i unosima u dnevniku. Želite li zaista to da uradite?",
        "ipb-confirmaction": "Ako ste sigurni da želite nastaviti označite polje „{{int:ipb-confirm}}“ na dnu stranice.",
        "ipb-edit-dropdown": "Uredi razloge blokiranja",
        "ipb-unblock-addr": "Deblokiraj $1",
        "ipb-unblock": "Deblokiraj korisničko ime ili IP adresu",
-       "ipb-blocklist": "Pogledaj postojeća blokiranja",
+       "ipb-blocklist": "Prikaži postojeće blokade",
        "ipb-blocklist-contribs": "Doprinosi za {{GENDER:$1|$1}}",
        "ipb-blocklist-duration-left": "preostalo: $1",
        "unblockip": "Deblokiranje korisnika",
        "ipusubmit": "Ukloni ovu blokadu",
        "unblocked": "[[User:$1|$1]] je deblokiran",
        "unblocked-range": "$1 je deblokiran",
-       "unblocked-id": "Blokiranje $1 je uklonjeno",
+       "unblocked-id": "Blokada ID oznake $1 je uklonjena.",
        "unblocked-ip": "[[Special:Contributions/$1|$1]] je deblokiran.",
        "blocklist": "Blokirani korisnici",
        "autoblocklist": "Autoblokovi",
        "autoblocklist-otherblocks": "{{PLURAL:$1|Drugi autoblok|Drugi autoblokovi}}",
        "ipblocklist": "Blokirani korisnici",
        "ipblocklist-legend": "Pronalaženje blokiranog korisnika",
-       "blocklist-userblocks": "Sakrij blokiranja naloga",
-       "blocklist-tempblocks": "Sakrij privremena blokiranja",
+       "blocklist-userblocks": "Sakrij blokade naloga",
+       "blocklist-tempblocks": "Sakrij privremene blokade",
        "blocklist-addressblocks": "Sakrij pojedinačne blokade IP-a",
-       "blocklist-rangeblocks": "Sakrij blokiranja opsega",
+       "blocklist-rangeblocks": "Sakrij blokade opsega",
        "blocklist-timestamp": "Vremenska oznaka",
        "blocklist-target": "Korisnik",
        "blocklist-expiry": "Ističe",
-       "blocklist-by": "Blokirao",
+       "blocklist-by": "Blokirao administrator",
        "blocklist-params": "Zabranjene radnje",
        "blocklist-reason": "Razlog",
        "ipblocklist-submit": "Pretraži",
-       "ipblocklist-localblock": "Lokalno blokiranje",
-       "ipblocklist-otherblocks": "{{PLURAL:$1|Druga blokiranja}}",
+       "ipblocklist-localblock": "Lokalna blokada",
+       "ipblocklist-otherblocks": "{{PLURAL:$1|Druga blokada|Druge blokade}}",
        "infiniteblock": "trajno",
        "expiringblock": "ističe $1 u $2",
        "anononlyblock": "samo anonimni",
        "contribslink": "doprinosi",
        "emaillink": "pošalji imejl",
        "autoblocker": "Automatski ste blokirani jer delite IP adresu s korisnikom/com [[User:$1|$1]].\nRazlog blokiranja korisnika/ce $1 je „$2“",
-       "blocklogpage": "Evidencija blokiranja",
-       "blocklog-showlog": "{{GENDER:$1|Ovaj korisnik je ranije blokiran|Ova korisnica je ranije blokirana}}.\nIstorija blokiranja se nalazi ispod:",
-       "blocklog-showsuppresslog": "{{GENDER:$1|Ovaj korisnik je ranije blokiran i sakriven|Ova korisnica je ranije blokirana i sakrivena}}.\nIstorija sakrivanja se nalazi ispod:",
+       "blocklogpage": "Dnevnik blokiranja",
+       "blocklog-showlog": "{{GENDER:$1|Ovaj korisnik je ranije blokiran|Ova korisnica je ranije blokirana}}.\nDnevnik blokiranja je naveden ispod kao referenca:",
+       "blocklog-showsuppresslog": "{{GENDER:$1|Ovaj korisnik je ranije blokiran i sakriven|Ova korisnica je ranije blokirana i sakrivena}}.\nDnevnik sakrivanja je naveden ispod kao referenca:",
        "blocklogentry": "je blokirao [[$1]] sa vremenom isticanja od $2 $3",
-       "reblock-logentry": "{{GENDER:|je promenio|je promenila}} podešavanja za blokiranje {{GENDER:$1|korisnika|korisnice}} [[$1]] sa vremenom isteka od $2 ($3)",
+       "reblock-logentry": "je {{GENDER:|promenio|promenila}} podešavanja blokiranja za {{GENDER:$1|korisnika|korisnicu}} [[$1]] sa vremenom isteka od $2 ($3)",
        "blocklogtext": "Ovo je dnevnik radnji blokiranja i deblokiranja korisnika.\nAutomatski blokirane IP adrese nisu navedene.\nPogledajte [[Special:BlockList|spisak blokiranja]] za spisak trenutnih operacija zabrana i blokiranja.",
        "unblocklogentry": "je deblokirao $1",
        "block-log-flags-anononly": "samo anonimni korisnici",
        "ipb_hide_invalid": "Ne mogu da potisnem ovaj nalog; ima više od {{PLURAL:$1|jedne izmene|$1 izmena}}.",
        "ipb_already_blocked": "„$1“ je već blokiran.",
        "ipb-needreblock": "$1 je već blokiran. Želite li da promenite podešavanja?",
-       "ipb-otherblocks-header": "{{PLURAL:$1|Druge blokade}}",
+       "ipb-otherblocks-header": "{{PLURAL:$1|Druga blokada|Druge blokade}}",
        "unblock-hideuser": "Ne možete deblokirati ovog korisnika jer je njegovo korisničko ime sakriveno.",
        "ipb_cant_unblock": "Greška: blokada $1 ne postoji. Možda je korisnik deblokiran.",
        "ipb_blocked_as_range": "Greška: IP adresa $1 nije direktno blokirana i ne može da se deblokira.\nOna je blokirana kao deo blokade $2, koja može da se deblokira.",
        "lockedbyandtime": "(od $1 dana $2 u $3)",
        "move-page": "Premeštanje „$1”",
        "move-page-legend": "Premeštanje stranice",
-       "movepagetext": "Donji obrazac će preimenovati stranicu, premeštajući celu istoriju na novo ime.\nStari naslov postaće preusmerenje na novi.\nMožete ažurirati preusmerenja koja vode do izvornog naslova;\npogledajte [[Special:DoubleRedirects|dvostruka]] ili [[Special:BrokenRedirects|pokvarena]] preusmerenja.\nNa vama je odgovornost da linkovi i dalje idu tamo gde treba.\n\nStranica <strong>neće</strong> biti premeštena ako već postoji stranica s tim imenom (osim ako je prazna, sadrži preusmerenje ili nema istoriju izmena).\nTo znači da možete vratiti stranicu na prethodno ime ako pogrešite, ali ne možete ''prepisati'' postojeću.\n\n<strong>Napomena:</strong>\nOvo može predstavljati drastičnu i neočekivanu izmenu za popularnu stranicu;\ndobro razmislite o posledicama pre nego što nastavite.",
-       "movepagetext-noredirectfixer": "Donji obrazac će preimenovati stranicu, premeštajući celu istoriju na novo ime.\nStari naslov postaće preusmerenje na novi.\nPogledajte [[Special:DoubleRedirects|dvostruka]] ili [[Special:BrokenRedirects|pokvarena]] preusmerenja.\nNa vama je odgovornost da linkovi i dalje idu tamo gde treba.\n\nStranica <strong>neće</strong> biti premeštena ako već postoji stranica s tim imenom (osim ako je prazna, sadrži preusmerenje ili nema istoriju izmena).\nTo znači da možete vratiti stranicu na prethodno ime ako pogrešite, ali ne možete ''prepisati'' postojeću.\n\n<strong>Napomena:</strong>\nOvo može predstavljati drastičnu i neočekivanu izmenu za popularnu stranicu;\ndobro razmislite o posledicama pre nego što nastavite.",
+       "movepagetext": "Donji obrazac će preimenovati stranicu, premeštajući celu istoriju na novo ime.\nStari naslov postaće preusmerenje na novi.\nMožete ažurirati preusmerenja koja vode do izvornog naslova;\npogledajte [[Special:DoubleRedirects|dvostruka]] ili [[Special:BrokenRedirects|pokvarena]] preusmerenja.\nNa vama je odgovornost da veze i dalje idu tamo gde treba.\n\nStranica <strong>neće</strong> biti premeštena ako već postoji stranica s tim imenom (osim ako je prazna, sadrži preusmerenje ili nema istoriju izmena).\nTo znači da možete vratiti stranicu na prethodno ime ako pogrešite, ali ne možete ''prepisati'' postojeću.\n\n<strong>Napomena:</strong>\nOvo može predstavljati drastičnu i neočekivanu izmenu za popularnu stranicu;\ndobro razmislite o posledicama pre nego što nastavite.",
+       "movepagetext-noredirectfixer": "Donji obrazac će preimenovati stranicu, premeštajući celu istoriju na novo ime.\nStari naslov postaće preusmerenje na novi.\nPogledajte [[Special:DoubleRedirects|dvostruka]] ili [[Special:BrokenRedirects|pokvarena]] preusmerenja.\nNa vama je odgovornost da veze i dalje idu tamo gde treba.\n\nStranica <strong>neće</strong> biti premeštena ako već postoji stranica s tim imenom (osim ako je prazna, sadrži preusmerenje ili nema istoriju izmena).\nTo znači da možete vratiti stranicu na prethodno ime ako pogrešite, ali ne možete ''prepisati'' postojeću.\n\n<strong>Napomena:</strong>\nOvo može predstavljati drastičnu i neočekivanu izmenu za popularnu stranicu;\ndobro razmislite o posledicama pre nego što nastavite.",
        "movepagetalktext": "Ako ste označili ovaj kvadratić, odgovarajuća stranica za razgovor biće automatski premeštena na novi naslov, osim ako već postoji stranica za razgovor sa istim naslovom.\n\nU tom slučaju, moraćete ručno da je premestite ili spojite, ako ima potrebe za tim.",
        "moveuserpage-warning": "'''Upozorenje:''' na putu ste da premestite korisničku stranicu. Imajte u vidu da će samo stranica biti premeštena, a sam korisnik ''neće'' biti preimenovan.",
        "movecategorypage-warning": "<strong>Upozorenje:</strong> premeštate stranicu kategorije. Imajte na umu da će samo stranica biti premeštena i da sve stranice u staroj kategoriji <em>neće</em> biti rekategorisane u novu kategoriju.",
        "move-watch": "Nadgledaj ovu stranicu",
        "movepagebtn": "Premesti stranicu",
        "pagemovedsub": "Uspešno premeštanje",
-       "movepage-moved": "'''„$1“ je premeštena na „$2“'''",
+       "movepage-moved": "<strong>Stranica „$1“ je premeštena na naslov „$2“</strong>",
        "movepage-moved-redirect": "Preusmerenje je napravljeno.",
        "movepage-moved-noredirect": "Stvaranje preusmerenja je onemogućeno.",
+       "movepage-delete-first": "Ciljna stranica ima previše izmena za brisanje kao deo premeštanja stranice.  Prvo ručno izbrišite stranicu, pa pokušajte ponovo.",
        "articleexists": "Stranica sa tim imenom već postoji ili ime koje ste odabrali nije važeće.\nOdaberite drugo.",
        "cantmove-titleprotected": "Ne možete da premestite stranicu na ovu lokaciju jer je pravljenje novog naslova zaštićeno.",
        "movetalk": "Premesti i stranicu za razgovor",
        "movepage-page-moved": "Stranica $1 je premeštena na $2.",
        "movepage-page-unmoved": "Stranica $1 ne može da se premesti na $2.",
        "movepage-max-pages": "Najviše $1 {{PLURAL:$1|stranica je premeštena|stranice su premeštene|stranica je premešteno}} i više ne može da bude automatski premešteno.",
-       "movelogpage": "Evidencija premeštanja",
+       "movelogpage": "Dnevnik premeštanja",
        "movelogpagetext": "Ispod se nalazi spisak premeštanja stranica.",
        "movesubpage": "{{PLURAL:$1|Podstranica|Podstranice}}",
        "movesubpagetext": "Ova stranica ima $1 {{PLURAL:$1|podstranicu prikazanu|podstranice prikazane|podstranica prikazanih}} ispod.",
        "selfmove": "Naslov je istovetan;\nne možete premestiti stranicu preko same sebe.",
        "immobile-source-namespace": "Ne mogu premestiti stranice u imenski prostor „$1“.",
        "immobile-target-namespace": "Ne mogu premestiti stranice u imenski prostor „$1“.",
-       "immobile-target-namespace-iw": "Međuviki link nije važeće odredište za premeštanje stranice.",
+       "immobile-target-namespace-iw": "Međuviki veza nije važeće odredište za premeštanje stranice.",
        "immobile-source-page": "Ova stranica se ne može premestiti.",
-       "immobile-target-page": "Ne mogu da premestim na željeni naslov.",
+       "immobile-target-page": "Premeštanje nije moguće na odredišni naslov.",
        "bad-target-model": "Željeno odredište koristi drugačiji model sadržaja. Ne mogu da pretvorim iz $1 u $2.",
        "imagenocrossnamespace": "Datoteka se ne može premestiti u imenski prostor koji ne pripada datotekama.",
        "nonfile-cannot-move-to-file": "Ne-datoteke ne možete premestiti u imenski prostor za datoteke",
        "imageinvalidfilename": "Ciljano ime datoteke je nevažeće",
        "fix-double-redirects": "Ažurirajte sva preusmerenja koja vode do prvobitnog naslova",
        "move-leave-redirect": "Ostavi preusmerenje",
-       "protectedpagemovewarning": "'''Upozorenje:''' Ova stranica je zaštićena, tako da samo korisnici sa administratorskim ovlašćenjima mogu da je premeste.\nNajnoviji unos u evidenciji je naveden ispod kao referenca:",
-       "semiprotectedpagemovewarning": "<strong>Napomena:</strong> Ova stranica je zaštićena, tako da samo automatski potvrđeni korisnici mogu da je premeste.\nNajnoviji unos u evidenciji je naveden ispod kao referenca:",
+       "protectedpagemovewarning": "'''Upozorenje:''' Ova stranica je zaštićena, tako da samo korisnici sa administratorskim ovlašćenjima mogu da je premeste.\nNajnoviji unos u dnevniku je naveden ispod kao referenca:",
+       "semiprotectedpagemovewarning": "<strong>Napomena:</strong> Ova stranica je zaštićena, tako da samo automatski potvrđeni korisnici mogu da je premeste.\nNajnoviji unos u dnevniku je naveden ispod kao referenca:",
        "move-over-sharedrepo": "[[:$1]] se nalazi na deljenom skladištu. Ako premestite datoteku na ovaj naslov, to će zameniti deljenu datoteku.",
        "file-exists-sharedrepo": "Navedeni naziv datoteke se već koristi u deljenom skladištu.\nIzaberite drugi naziv.",
        "export": "Izvoz stranica",
-       "exporttext": "Možete da izvezete tekst i istoriju izmena određene stranice ili skupa stranica uklljenih u XML formatu.\nOvo onda može da bude uvezeno u drugi viki koji koristi Medijaviki softver preko [[Special:Import|stranice za uvoz]].\n\nDa biste izvezli stranice, unesite nazive u okviru ispod, s jednim naslovom po redu, i izaberite da li želite trenutnu izmenu i sve ostale, ili samo trenutnu izmenu s podacima o poslednjoj izmeni.\n\nU drugom slučaju, možete koristiti i link, na primer [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] za stranicu [[{{MediaWiki:Mainpage}}]].",
+       "exporttext": "Možete da izvezete tekst i istoriju izmena određene stranice ili skupa stranica uklljenih u XML formatu.\nOvo onda može da bude uvezeno u drugi viki koji koristi Medijaviki softver preko [[Special:Import|stranice za uvoz]].\n\nDa biste izvezli stranice, unesite nazive u okviru ispod, s jednim naslovom po redu, i izaberite da li želite trenutnu izmenu i sve ostale, ili samo trenutnu izmenu s podacima o poslednjoj izmeni.\n\nU drugom slučaju, možete koristiti i veze, na primer [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] za stranicu [[{{MediaWiki:Mainpage}}]].",
        "exportall": "Izvezi sve stranice",
        "exportcuronly": "Uključi samo trenutnu izmenu, ne celu istoriju",
        "exportnohistory": "----\n'''Napomena:''' izvoz pune istorije stranica preko ovog obrasca je onemogućeno iz tehničkih razloga.",
        "allmessages-prefix": "Filtriraj po prefiksu:",
        "allmessages-language": "Jezik:",
        "allmessages-filter-submit": "Idi",
-       "allmessages-filter-translate": "Prevedi",
+       "allmessages-filter-translate": "Prevedite",
        "thumbnail-more": "Povećajte",
        "filemissing": "Nedostaje datoteka",
        "thumbnail_error": "Greška pri pravljenju sličice: $1",
        "thumbnail_error_remote": "Poruka o grešci iz $1:\n$2",
        "djvu_page_error": "DjVu stranica je van opsega",
-       "djvu_no_xml": "Ne mogu da preuzmem XML za DjVu datoteku.",
-       "thumbnail-temp-create": "Ne mogu da napravim privremenu datoteku za sličicu",
-       "thumbnail-dest-create": "Ne mogu da sačuvam minijaturu u odredištu",
+       "djvu_no_xml": "Nije moguće dobaviti XML za DjVu datoteku.",
+       "thumbnail-temp-create": "Nije moguće napraviti privremenu datoteku-sličicu",
+       "thumbnail-dest-create": "Nije moguće sačuvati sličicu na odredište",
        "thumbnail_invalid_params": "Nevažeći parametri sličice",
        "thumbnail_toobigimagearea": "Datoteka sa veličinama većim od $1",
-       "thumbnail_dest_directory": "Ne mogu da napravim odredišnu fasciklu",
+       "thumbnail_dest_directory": "Nije moguće napraviti odredišni direktorijum",
        "thumbnail_image-type": "Tip slike nije podržan",
        "thumbnail_gd-library": "Nedovršena podešavanja grafičke biblioteke: nedostaje funkcija $1",
        "thumbnail_image-size-zero": "Izgleda da je veličina datoteke nula.",
        "importfailed": "Neuspešan uvoz: <nowiki>$1</nowiki>",
        "importunknownsource": "Nepoznat izvorni tip uvoza",
        "importnoprefix": "Nije naveden međuviki prefiks",
-       "importcantopen": "Ne mogu da otvorim datoteku za uvoz.",
-       "importbadinterwiki": "Loš međuviki link",
+       "importcantopen": "Nije moguće otvoriti datoteku za uvoz",
+       "importbadinterwiki": "Loša međuviki veza",
        "importsuccess": "Uvoženje je završeno!",
        "importnosources": "Nije određen nijedan izvor za uvoz, tako da je otpremanje istorije onemogućeno.",
-       "importnofile": "Uvozna datoteka nije poslata.",
-       "importuploaderrorsize": "Ne mogu da otpremim datoteku za uvoz.\nDatoteka je veća od dozvoljene veličine.",
-       "importuploaderrorpartial": "Ne mogu da otpremim datoteku za uvoz.\nDatoteka je samo delimično poslata.",
-       "importuploaderrortemp": "Ne mogu da pošaljem datoteku za uvoz.\nNedostaje privremena fascikla.",
+       "importnofile": "Datoteka za uvoz nije otpremljena.",
+       "importuploaderrorsize": "Otpremanje datoteke za uvoz nije uspelo.\nDatoteka je veća od dozvoljene veličine.",
+       "importuploaderrorpartial": "Otpremanje datoteke za uvoz nije uspelo.\nDatoteka je samo delimično otpremljena.",
+       "importuploaderrortemp": "Otpremanje datoteke za uvoz nije uspelo.\nNedostaje privremena fascikla.",
        "import-parse-failure": "Pogrešno raščlanjivanje XML-a.",
        "import-noarticle": "Nema stranice za uvoz!",
        "import-nonewrevisions": "Nijedna izmena nije uvezena (sve su već prisutne ili su preskočene zbog grešaka).",
        "xml-error-string": "$1 u redu $2, kolona $3 (bajt $4): $5",
        "import-upload": "Otpremanje XML podataka",
        "import-token-mismatch": "Gubitak podataka o sesiji.\n\nMožda ste odjavljeni. '''Molimo Vas proverite da li ste još uvek prijavljeni i pokušajte ponovo'''.\n\nAko i dalje ne radi, pokušajte se [[Special:UserLogout|odjaviti]] i ponovo prijaviti i proverite da li vaš veb-pretraživač dozvoljava kolačiće sa ovog sajta.",
-       "import-invalid-interwiki": "Ne mogu da uvozim s navedenog vikija.",
+       "import-invalid-interwiki": "Nije moguće uvoziti sa navedenog vikija.",
        "import-error-edit": "Stranica „$1“ nije uvezena jer vam nije dozvoljeno da je uređujete.",
        "import-error-create": "Stranica „$1“ nije uvezena jer vam nije dozvoljeno da je napravite.",
-       "import-error-interwiki": "Ne mogu da uvezem stranicu „$1“ jer je njen naziv rezervisan za spoljno povezivanje (međuviki).",
-       "import-error-special": "Ne mogu da uvezem stranicu „$1“ jer ona pripada posebnom imenskom prostoru koje ne prihvata stranice.",
+       "import-error-interwiki": "Stranica „$1” nije uvezena jer je njen naziv rezervisan za spoljašnje povezivanje (međuviki).",
+       "import-error-special": "Stranica „$1” nije uvezena jer pripada posebnom imenskom prostoru koji ne dozvoljava stranice.",
        "import-error-invalid": "Stranica „$1“ nije uvezena jer je ime pod kojim se treba uvosti nevažeće na ovom vikiju.",
-       "import-error-unserialize": "Ne mogu da deserijalizujem izmenu $2 stranice $1. Zapisano je da izmena koristi $3 model sadržaja u $4 formatu.",
+       "import-error-unserialize": "Nije moguće deserijalizovati izmenu $2 stranice „$1”. Zapisano je da izmena koristi model sadržaja $3 koji je serijalizovan kao $4.",
        "import-options-wrong": "{{PLURAL:$2|Pogrešna opcija|Pogrešne opcije}}: <nowiki>$1</nowiki>",
        "import-rootpage-invalid": "Navedena osnovna stranica ima nevažeći naslov.",
        "import-rootpage-nosubpage": "Imenski prostor „$1“ osnovne stranice ne dozvoljava podstranice.",
-       "importlogpage": "Evidencija uvoza",
+       "importlogpage": "Dnevnik uvoza",
        "importlogpagetext": "Administrativni uvozi stranica s istorijama izmena s drugih vikija.",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|izmena uvezena|izmene uvezene|izmena uvezeno}}",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|izmena uvezena|izmene uvezene|izmena uvezeno}} iz $2",
        "tooltip-pt-userpage": "{{GENDER:|Vaša}} korisnička stranica",
        "tooltip-pt-anonuserpage": "Korisnička stranica za IP adresu s koje uređujete",
        "tooltip-pt-mytalk": "{{GENDER:|Vaša}} stranica za razgovor",
-       "tooltip-pt-anontalk": "Diskusija o uređivanjima sa ove IP adrese",
+       "tooltip-pt-anontalk": "Diskusija o izmenama sa ove IP adrese",
        "tooltip-pt-preferences": "{{GENDER:|Vaša}} podešavanja",
        "tooltip-pt-watchlist": "Spisak stranica koje nadgledate",
-       "tooltip-pt-mycontris": "Spisak {{GENDER:|Vaših}} doprinosa",
-       "tooltip-pt-anoncontribs": "Spisak izmena napravljenih sa ove IP adrese",
+       "tooltip-pt-mycontris": "Spisak {{GENDER:|vaših}} doprinosa",
+       "tooltip-pt-anoncontribs": "Lista izmena napravljenih sa ove IP adrese",
        "tooltip-pt-login": "Predlažemo vam da se prijavite, iako to nije obavezno",
        "tooltip-pt-login-private": "Morate da se prijavite da biste koristili ovaj Viki",
        "tooltip-pt-logout": "Odjavite se",
        "tooltip-pt-createaccount": "Predlažemo vam da otvorite nalog i prijavite se, iako to nije obavezno",
-       "tooltip-ca-talk": "Razgovor o stranici sa sadržajem",
+       "tooltip-ca-talk": "Diskusija o stranici sa sadržajem",
        "tooltip-ca-edit": "Uredite ovu stranicu",
        "tooltip-ca-addsection": "Započnite novi odeljak",
-       "tooltip-ca-viewsource": "Ova stranica je zaključana. \nMožete da pogledate njen izvornik",
+       "tooltip-ca-viewsource": "Ova stranica je zaključana. \nMožete da joj vidite izvor",
        "tooltip-ca-history": "Prethodne izmene ove stranice",
        "tooltip-ca-protect": "Zaštitite ovu stranicu",
        "tooltip-ca-unprotect": "Promeni zaštitu ove stranice",
        "tooltip-ca-watch": "Dodajte ovu stranicu na svoj spisak nadgledanja",
        "tooltip-ca-unwatch": "Uklonite ovu stranicu sa spiska nadgledanja",
        "tooltip-search": "Pretražite projekat {{SITENAME}}",
-       "tooltip-search-go": "Idite na stranicu s tačno ovim imenom ako postoji",
+       "tooltip-search-go": "Idite na stranicu sa tačno ovim imenom ako postoji",
        "tooltip-search-fulltext": "Pretražite stranice sa ovim tekstom",
        "tooltip-p-logo": "Posetite glavnu stranu",
        "tooltip-n-mainpage": "Posetite glavnu stranu",
        "tooltip-t-upload": "Otpremite datoteke",
        "tooltip-t-specialpages": "Spisak svih posebnih stranica",
        "tooltip-t-print": "Verzija ove stranice za štampanje",
-       "tooltip-t-permalink": "Trajni link ka ovoj izmeni stranice",
+       "tooltip-t-permalink": "Trajna veza ka ovoj izmeni stranice",
        "tooltip-ca-nstab-main": "Pogledajte stranicu sa sadržajem",
        "tooltip-ca-nstab-user": "Pogledajte korisničku stranicu",
-       "tooltip-ca-nstab-media": "Pogledajte medijsku stranicu",
+       "tooltip-ca-nstab-media": "Pogledajte stranicu medija",
        "tooltip-ca-nstab-special": "Ovo je posebna stranica. Ne možete je menjati.",
        "tooltip-ca-nstab-project": "Pogledajte stranicu projekta",
        "tooltip-ca-nstab-image": "Pogledajte stranicu datoteke",
        "creditspage": "Autori stranice",
        "nocredits": "Ne postoje podaci o autoru ove stranice.",
        "spamprotectiontitle": "Filter za zaštitu od nepoželjnih poruka",
-       "spamprotectiontext": "Filtera protiv neželjenih poruka je blokirao čuvanje ove stranice.\nOvo je verovatno izazvano linkom do spoljašnjeg sajta koji se nalazi na crnom spisku.",
+       "spamprotectiontext": "Filtera protiv neželjenih poruka je blokirao čuvanje ove stranice.\nOvo je verovatno izazvano vezom do spoljašnjeg sajta koji se nalazi na crnoj listi.",
        "spamprotectionmatch": "Sledeći tekst je aktivirao naš filter za neželjene poruke: $1",
        "spambot_username": "Čišćenje nepoželjnih poruka u Medijavikiji",
-       "spam_reverting": "Vraćam na poslednju izmenu koja ne sadrži linkove do $1",
-       "spam_blanking": "Sve izmene sadrže linkove do $1. Praznim",
-       "spam_deleting": "Sve izmene sadrže linkove do $1. Brišem",
+       "spam_reverting": "Vraćam na poslednju izmenu koja ne sadrži veze do $1",
+       "spam_blanking": "Sve izmene sadrže veze do $1. Praznim",
+       "spam_deleting": "Sve izmene sadrže veze do $1. Brišem",
        "simpleantispam-label": "Provera protiv neželjenog sadržaja. \n<strong>Ne</strong> popunjavajte ovo!",
        "pageinfo-title": "Informacije za „$1“",
-       "pageinfo-not-current": "Nažalost, nemoguće je navesti ove infomacije za starije izmene.",
+       "pageinfo-not-current": "Nije moguće navesti ove infomacije za starije izmene.",
        "pageinfo-header-basic": "Osnovne informacije",
        "pageinfo-header-edits": "Istorija izmena",
        "pageinfo-header-restrictions": "Zaštita stranice",
        "pageinfo-category-files": "Broj datoteka",
        "pageinfo-user-id": "ID korisnika",
        "pageinfo-file-hash": "Hash vrednost",
+       "pageinfo-view-protect-log": "Prikaži dnevnik zaštite za ovu stranicu.",
        "markaspatrolleddiff": "Označi kao patrolirano",
        "markaspatrolledtext": "Označi stranicu kao patroliranu",
        "markaspatrolledtext-file": "Označi ovu verziju datoteke kao patroliranu",
        "markedaspatrolled": "Označeno kao patrolirano",
        "markedaspatrolledtext": "Izabrana izmena stranice [[:$1]] označena je kao patrolirana.",
        "rcpatroldisabled": "Patroliranje skorašnjih izmena je onemogućeno",
-       "rcpatroldisabledtext": "Mogućnost patroliranja skorašnjih izmena je trenutno onemogućena.",
-       "markedaspatrollederror": "Ne mogu da označim kao patrolirano.",
+       "rcpatroldisabledtext": "Funkcija patroliranja skorašnjih izmena je trenutno onemogućena.",
+       "markedaspatrollederror": "Nije moguće označiti kao patrolirano",
        "markedaspatrollederrortext": "Morate navesti izmenu da biste je označili kao patroliranu.",
        "markedaspatrollederror-noautopatrol": "Ne možete da označite svoje promene kao patrolirane.",
-       "markedaspatrollednotify": "Ova izmena na stranici „$1” označena je kao patrolirana.",
+       "markedaspatrollednotify": "Ova promena na stranici „$1” označena je kao patrolirana.",
        "markedaspatrollederrornotify": "Označavanje ove izmene patroliranom nije uspelo.",
-       "patrol-log-page": "Evidencija patroliranja",
+       "patrol-log-page": "Dnevnik patroliranja",
        "patrol-log-header": "Ovo je dnevnik patroliranih izmena.",
        "confirm-markpatrolled-button": "U redu",
        "confirm-markpatrolled-top": "Označiti izmenu $3 stranice $2 kao patroliranu?",
        "deletedrevision": "Izbrisana stara izmena $1.",
        "filedeleteerror-short": "Greška pri brisanju datoteke: $1",
        "filedeleteerror-long": "Došlo je do grešaka pri brisanju datoteke:\n\n$1",
-       "filedelete-missing": "Ne mogu da izbrišem datoteku „$1“ jer ne postoji.",
+       "filedelete-missing": "Nije moguće izbrisati datoteku „$1” jer ne postoji.",
        "filedelete-old-unregistered": "Navedena izmena datoteke „$1“ ne postoji u bazi podataka.",
        "filedelete-current-unregistered": "Navedena datoteka „$1“ ne postoji u bazi podataka.",
        "filedelete-archive-read-only": "Server ne može da piše po skladišnoj fascikli ($1).",
        "previousdiff": "← Starija izmena",
        "nextdiff": "Novija izmena →",
        "mediawarning": "<strong>Upozorenje:</strong> ovaj tip datoteke može da sadrži štetan kod.\nNjegovim izvršavanjem možete da ugrozite vaš sistem.",
-       "imagemaxsize": "Ograničenje veličine slike:<br /><em>(na stranicama za opis datoteka)</em>",
+       "imagemaxsize": "Ograničenje veličine slike na stranicama za opis datoteka:",
        "thumbsize": "Veličina sličice:",
        "widthheight": "$1 × $2",
        "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|stranica|stranice|stranica}}",
        "newimages-newbies": "Prikaži samo doprinose novih naloga",
        "newimages-showbots": "Prikaži otpremanja botova",
        "newimages-hidepatrolled": "Sakrij patrolirana otpremanja",
-       "newimages-mediatype": "Tip datoteke:",
+       "newimages-mediatype": "Tip medija:",
        "noimages": "Nema ništa.",
        "gallery-slideshow-toggle": "sličice",
        "ilsubmit": "Pretraži",
        "saturday-at": "u subotu u $1",
        "sunday-at": "u nedelju u $1",
        "yesterday-at": "Juče u $1",
-       "bad_image_list": "Format je sledeći:\n\nRazmatraju se samo nabrajanja (redovi koji počinju sa zvezdicom).\nPrvi link u redu mora da bude link do neispravne datoteke.\nSvi daljnji linkovi u istom redu smatraju se izuzecima.",
+       "bad_image_list": "Format je sledeći:\n\nRazmatraju se samo nabrajanja (redovi koji počinju sa zvezdicom).\nPrva veza u redu mora da bude veza do neispravne datoteke.\nSve daljnje veze u istom redu smatraju se izuzecima.",
        "variantname-zh-hans": "hans",
        "variantname-zh-hant": "hant",
        "variantname-zh-cn": "cn",
        "metadata": "Metapodaci",
        "metadata-help": "Ova datoteka sadrži dodatne podatke, koji verovatno dolaze od digitalnog fotoaparata ili skenera korišćenog za digitalizaciju.\nAko je prvobitno stanje datoteke promenjeno, moguće je da neki detalji ne opisuju izmenjenu datoteku u potpunosti.",
        "metadata-expand": "Prikaži detalje",
-       "metadata-collapse": "Sakrij detalje",
+       "metadata-collapse": "Sakrij dodatne detalje",
        "metadata-fields": "Polja za metapodatke slike navedena u ovoj poruci će biti uključena na stranici za slike kada se skupi tabela metapodataka. Ostala polja će biti sakrivena po podrazumevanim postavkama.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
        "metadata-langitem": "'''$2:''' $1",
        "metadata-langitem-default": "$1",
        "exif-pixelxdimension": "Širina slike",
        "exif-pixelydimension": "Visina slike",
        "exif-usercomment": "Korisnički komentari",
-       "exif-relatedsoundfile": "Povezani zvučni zapis",
+       "exif-relatedsoundfile": "Srodne zvučne datoteke",
        "exif-datetimeoriginal": "Datum i vreme slikanja",
        "exif-datetimedigitized": "Datum i vreme digitalizacije",
        "exif-subsectime": "Deo sekunde u kojem je slikano",
        "exif-focalplaneyresolution": "Rezolucija fokusne ravni Y",
        "exif-focalplaneresolutionunit": "Jedinica za rezoluciju fokusne ravni",
        "exif-subjectlocation": "Položaj objekta",
-       "exif-exposureindex": "Popis ekspozicije",
+       "exif-exposureindex": "Indeks ekspozicije",
        "exif-sensingmethod": "Način senzora",
        "exif-filesource": "Izvorna datoteka",
        "exif-scenetype": "Tip scene",
        "exif-originaldocumentid": "Jedinstveni ID izvornog dokumenta",
        "exif-licenseurl": "Adresa licence za autorska prava",
        "exif-morepermissionsurl": "Rezervni podaci o licenciranju",
-       "exif-attributionurl": "Pri ponovnom korišćenju ovog rada, koristite link do",
+       "exif-attributionurl": "Pri ponovnom korišćenju ovog rada, koristite vezu do",
        "exif-preferredattributionname": "Pri ponovnom korišćenju ovog rada, postavite zasluge",
        "exif-pngfilecomment": "Komentar na datoteku PNG",
        "exif-disclaimer": "Odricanje odgovornosti",
        "monthsall": "sve",
        "confirmemail": "Potvrda imejl-adrese",
        "confirmemail_noemail": "Niste postavili važeću imejl-adresu u [[Special:Preferences|korisničkim podešavanjima]].",
-       "confirmemail_text": "{{SITENAME}} zahteva da potvrdite imejl adresu pre nego što počnete da koristite mogućnosti imejla.\nKliknite na dugme ispod za slanje poruke na vašu adresu.\nU poruci će se nalaziti link sa potvrdnim kodom;\nunesite je u pregledač da biste potvrdili da je vaša imejl adresa važeća.",
+       "confirmemail_text": "{{SITENAME}} zahteva da proverite valjanost imejl-adrese pre nego što počnete da koristite funkciju imejla.\nAktivirajte dugme ispod da biste poslali mejl za potvrdu na svoju adresu.\nMejl će uključivati vezu sa kodom;\nučitajte vezu u svom pregledaču da biste potvrdili da je vaša imejl-adresa važeća.",
        "confirmemail_pending": "Kod za potvrdu vam je već poslat imejlom.\nAko ste nedavno otvorili nalog, možda treba da sačekate nekoliko minuta da pristigne pre nego što ponovo zatražite novi kod.",
        "confirmemail_send": "Pošalji kod za potvrdu",
        "confirmemail_sent": "Potvrdna poruka je poslata.",
-       "confirmemail_oncreate": "Poslat je kod za potvrdu na vašu imejl adresu.\nOvaj kod nije potreban za prijavljivanje, ali vam treba da biste uključili mogućnosti imejla na vikiju.",
+       "confirmemail_oncreate": "Kôd za potvrdu je poslat na vašu imejl-adresu.\nOvaj kôd nije neophodan za prijavljivanje, ali ćete morati da ga navedete pre omogućavanja bilo kakvih funkcija zasnovanih na imejlu na vikiju.",
        "confirmemail_sendfailed": "{{SITENAME}} ne može da pošalje imejl potvrdu.\nProverite da li je imejl adresa pravilno napisana.\n\nGreška: $1",
        "confirmemail_invalid": "Nevažeći kod za potvrdu.\nKod je možda istekao.",
-       "confirmemail_needlogin": "Morate biti $1 da biste potvrdili svoju imejl-adresu.",
+       "confirmemail_needlogin": "$1 da biste potvrdili svoju imejl-adresu.",
        "confirmemail_success": "Vaša imejl-adresa je potvrđena.\nSada možete da se [[Special:UserLogin|prijavite]] i uživate u vikiju.",
        "confirmemail_loggedin": "Vaša imejl-adresa je sada potvrđena.",
        "confirmemail_subject": "{{SITENAME}} – potvrda imejl-adrese",
-       "confirmemail_body": "Neko, verovatno Vi, sa IP adrese $1,\nregistrovao je nalog „$2“ sa ovom imejl adresom na projektu {{SITENAME}}.\n\nDa biste potvrdili da ovaj nalog stvarno pripada vama i aktivirali mogućnosti imejla na projektu {{SITENAME}}, otvorite ovaj link u pregledaču:\n\n$3\n\nAko vi *niste* registrovali nalog, pratite ovaj link\nda biste otkazali potvrdu imejl adrese:\n\n$5\n\nOvaj kod za potvrdu ističe u $4.",
-       "confirmemail_body_changed": "Neko, verovatno Vi, s IP adrese $1,\npromenio je imejl adresu naloga „$2“ u ovu adresu na projektu {{SITENAME}}.\n\nDa biste potvrdili da ovaj nalog stvarno pripada vama i ponovo aktivirali mogućnosti imejla, otvorite sledeći link u pregledaču:\n\n$3\n\nAko nalog *ne* pripada vama, pratite sledeći link da otkažete potvrdu imejl adrese:\n\n$5\n\nOvaj kod za potvrdu ističe $6 u $7",
-       "confirmemail_body_set": "Neko, verovatno Vi, s IP adrese $1,\npromenio je imejl adresu naloga „$2“ u ovu adresu na {{SITENAME}}.\n\nDa bismo potvrdili da ovaj nalog stvarno pripada vama i ponovo aktivirali\nmogućnosti imejla na {{SITENAME}}, otvorite sledeći link u pregledaču:\n\n$3\n\nAko nalog *ne* pripada vama, pratite sledeći link da otkažete potvrdu imejl adrese:\n\n$5\n\nOvaj kod za potvrdu ističe $4.",
+       "confirmemail_body": "Neko, verovatno Vi, sa IP adrese $1,\nregistrovao je nalog „$2“ sa ovom imejl adresom na projektu {{SITENAME}}.\n\nDa biste potvrdili da ovaj nalog stvarno pripada vama i aktivirali funkciju imejla na projektu {{SITENAME}}, otvorite ova u pregledaču:\n\n$3\n\nAko vi *niste* registrovali nalog, pratite ovu vezu\nda biste otkazali potvrdu imejl adrese:\n\n$5\n\nOvaj kod za potvrdu ističe u $4.",
+       "confirmemail_body_changed": "Neko, verovatno Vi, s IP adrese $1,\npromenio je imejl adresu naloga „$2“ u ovu adresu na projektu {{SITENAME}}.\n\nDa biste potvrdili da ovaj nalog stvarno pripada vama i ponovo aktivirali funkciju imejla, otvorite sledeću vezu u pregledaču:\n\n$3\n\nAko nalog *ne* pripada vama, pratite sledeću vezu da otkažete potvrdu imejl adrese:\n\n$5\n\nOvaj kod za potvrdu ističe $6 u $7",
+       "confirmemail_body_set": "Neko, verovatno Vi, s IP adrese $1,\npromenio je imejl adresu naloga „$2“ u ovu adresu na {{SITENAME}}.\n\nDa bismo potvrdili da ovaj nalog stvarno pripada vama i ponovo aktivirali\nfunkciju imejla na {{SITENAME}}, otvorite sledeću vezu u pregledaču:\n\n$3\n\nAko nalog *ne* pripada vama, pratite sledeću vezu da otkažete potvrdu imejl adrese:\n\n$5\n\nOvaj kod za potvrdu ističe $4.",
        "confirmemail_invalidated": "Potvrda imejl adrese je otkazana",
        "invalidateemail": "Otkazivanje potvrde imejla",
        "notificationemail_subject_changed": "Registrovana imejl adresa na projektu {{SITENAME}} je promenjena",
        "scarytranscludefailed-httpstatus": "[Ne mogu da preuzmem šablon $1: HTTP $2]",
        "scarytranscludetoolong": "[URL adresa je predugačka]",
        "deletedwhileediting": "<strong>Upozorenje</strong>: Ova stranica je izbrisana nakon što ste počeli sa uređivanjem!",
-       "confirmrecreate": "{{GENDER:$1|Korisnik|Korisnica}} [[User:$1|$1]] ([[User talk:$1|razgovor]]) je {{GENDER:$1|obrisao|obrisala}} ovu stranicu nakon što ste počeli da je uređujete iz sledećeg razloga:\n: <em>$2</em>\nPotvrdite da stvarno želite da napravite stranicu.",
-       "confirmrecreate-noreason": "{{GENDER:$1|Korisnik|Korisnica}} [[User:$1|$1]] ([[User talk:$1|razgovor]]) je {{GENDER:$1|obrisao|obrisala}} ovu stranicu nakon što ste počeli da je uređujete. Potvrdite da stvarno želite da ponovo napravite ovu stranicu.",
+       "confirmrecreate": "{{GENDER:$1|Korisnik|Korisnica}} [[User:$1|$1]] ([[User talk:$1|razgovor]]) je {{GENDER:$1|izbrisao|izbrisala}} ovu stranicu nakon što ste počeli da je uređujete iz sledećeg razloga:\n: <em>$2</em>\nPotvrdite da stvarno želite da napravite stranicu.",
+       "confirmrecreate-noreason": "{{GENDER:$1|Korisnik|Korisnica}} [[User:$1|$1]] ([[User talk:$1|razgovor]]) je {{GENDER:$1|izbrisao|izbrisala}} ovu stranicu nakon što ste počeli da je uređujete. Potvrdite da stvarno želite da ponovo napravite ovu stranicu.",
        "recreate": "Ponovo napravi",
        "unit-pixel": "p",
        "confirm-purge-title": "Osveži ovu stranicu",
        "confirm_purge_button": "U redu",
-       "confirm-purge-top": "Očistiti keš ove stranice?",
-       "confirm-purge-bottom": "Osvežavanje stranice čisti keš i nameće najnoviju izmenu.",
+       "confirm-purge-top": "Obrisati keš ove stranice?",
+       "confirm-purge-bottom": "Osvežavanje stranice briše keš i nameće najnoviju izmenu.",
        "confirm-watch-button": "U redu",
        "confirm-watch-top": "Dodati ovu stranicu u spisak nadgledanja?",
        "confirm-unwatch-button": "U redu",
        "confirm-unwatch-top": "Ukloniti ovu stranicu sa spiska nadgledanja?",
        "confirm-rollback-button": "U redu",
        "confirm-rollback-top": "Vrati izmene na ovoj stranici?",
+       "confirm-mcrrestore-title": "Vraćanje izmene",
        "confirm-mcrundo-title": "Poništavanje promene",
        "mcrundofailed": "Poništavanje nije uspelo",
        "mcrundo-missingparam": "Nedostaje potreban parametar na zahtevu.",
        "mcrundo-changed": "Stranica je promenjena dok ste gledali razliku. Pregledajte novu promenu.",
+       "mcrundo-parse-failed": "Raščlanjivanje novih izmena nije uspelo: $1",
        "semicolon-separator": ";&#32;",
        "comma-separator": ",&#32;",
        "colon-separator": ":&#32;",
        "lag-warn-high": "Zbog preopterećenja baze podataka, promene novije od $1 {{PLURAL:$1|1=sekunde|sekunde|sekundi}} neće biti prikazane.",
        "watchlistedit-normal-title": "Uređivanje spiska nadgledanja",
        "watchlistedit-normal-legend": "Uklanjanje naslova sa spiska nadgledanja",
-       "watchlistedit-normal-explain": "Naslovi na vašem spisku nadgledanja su prikazani ispod.\nDa biste uklonili naslov, označite kvadratić do njega i kliknite na „{{int:Watchlistedit-normal-submit}}“.\nMožete i da [[Special:EditWatchlist/raw|uredite sirov spisak]].",
+       "watchlistedit-normal-explain": "Naslovi na vašem spisku nadgledanja su prikazani ispod.\nDa biste uklonili naslov, označite polje za potvrdu pored njega i kliknite na „{{int:Watchlistedit-normal-submit}}”.\nTakođe možete da [[Special:EditWatchlist/raw|uredite neobrađeni spisak]].",
        "watchlistedit-normal-submit": "Ukloni naslove",
        "watchlistedit-normal-done": "{{PLURAL:$1|1=Jedna stranica je uklonjena|$1 stranice su uklonjene|$1 stranica je uklonjeno}} s vašeg spiska nadgledanja:",
-       "watchlistedit-raw-title": "Uredi sirov spisak nadgledanja",
-       "watchlistedit-raw-legend": "Uredi sirov spisak nadgledanja",
+       "watchlistedit-raw-title": "Uređivanje neobrađenog spiska nadgledanja",
+       "watchlistedit-raw-legend": "Uređivanje neobrađenog spiska nadgledanja",
        "watchlistedit-raw-explain": "Naslovi sa spiska nadgledanja su prikazani ispod i mogu se uređivati dodavanjem ili uklanjanjem stavki sa spiska;\njedan naslov po redu.\nKada završite, kliknite na „{{int:Watchlistedit-raw-submit}}“.\nMožete da [[Special:EditWatchlist|koristite i običan uređivač]].",
        "watchlistedit-raw-titles": "Naslovi:",
        "watchlistedit-raw-submit": "Ažuriraj spisak",
        "watchlistedit-clear-removed": "{{PLURAL:$1|1 naslov je uklonjen|$1 naslova su uklonjena|$1 naslova je uklonjeno}}:",
        "watchlistedit-too-many": "Ima previše stranica za prikaz ovde.",
        "watchlisttools-clear": "očisti spisak nadgledanja",
-       "watchlisttools-view": "pogledaj relevantne promene",
-       "watchlisttools-edit": "pogledaj i uredi spisak nadgledanja",
-       "watchlisttools-raw": "uredi sirov spisak nadgledanja",
+       "watchlisttools-view": "prikaži srodne promene",
+       "watchlisttools-edit": "prikaži i uredi spisak nadgledanja",
+       "watchlisttools-raw": "uredi neobrađeni spisak nadgledanja",
        "iranian-calendar-m1": "Farvardin",
        "iranian-calendar-m2": "Ordibehešt",
        "iranian-calendar-m3": "Hordad",
        "version-libraries-license": "Licenca",
        "version-libraries-description": "Opis",
        "version-libraries-authors": "Autori",
-       "redirect": "Preusmerenje na datoteku, korisnika, stranicu, izmenu ili evidenciju (ID)",
+       "redirect": "Preusmerenje na datoteku, korisnika, stranicu, izmenu ili dnevnik (ID)",
        "redirect-summary": "Ova posebna stranica preusmerava do datoteke (s datim imenom datoteke), stranice (s datim ID-om izmene ili ID-om stranice), korisničke stranice (s datim numeričkim korisničkim ID-om), ili unosa u dnevniku (s datim dnevničkim ID-om). Upotreba: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], [[{{#Special:Redirect}}/user/101]], or [[{{#Special:Redirect}}/logid/186]].",
        "redirect-submit": "Idi",
        "redirect-lookup": "Tip vrednosti:",
        "redirect-file": "Naziv datoteke",
        "redirect-logid": "ID dnevnika",
        "redirect-not-exists": "Vrednost nije pronađena",
+       "redirect-not-numeric": "Vrednost nije numerička",
        "fileduplicatesearch": "Pretraga duplikata datoteka",
        "fileduplicatesearch-summary": "Pretraga dupliranih datoteka prema heš vrednosti.",
        "fileduplicatesearch-filename": "Naziv datoteke:",
        "specialpages-note-restricted": "* Obične posebne stranice.\n* <span class=\"mw-specialpagerestricted\">Posebne stranice sa ograničenjem.</span>",
        "specialpages-group-maintenance": "Izveštaji održavanja",
        "specialpages-group-other": "Ostale posebne stranice",
-       "specialpages-group-login": "Prijava / registracija",
+       "specialpages-group-login": "Prijava / otvaranje naloga",
        "specialpages-group-changes": "Nedavne promene i dnevnici",
        "specialpages-group-media": "Izveštaji o multimedijalnom sadržaju i otpremanja",
        "specialpages-group-users": "Korisnici i korisnička prava",
        "specialpages-group-developer": "Programerske alatke",
        "blankpage": "Prazna stranica",
        "intentionallyblankpage": "Ova stranica je namerno ostavljena praznom.",
-       "external_image_whitelist": " #Ostavite ovaj red onakvim kakav jeste<pre>\n#Ispod dodajte odlomke regularnih izraza (samo deo koji se nalazi između //)\n#Oni će biti upoređeni s adresama spoljašnjih slika\n#One koje se poklapaju biće prikazane kao slike, a preostale kao linkovi do slika\n#Redovi koji počinju s tarabom se smatraju komentarima\n#Svi unosi su osetljivi na mala i velika slova\n\n#Dodajte sve odlomke regularnih izraza iznad ovog reda. Ovaj red ne dirajte</pre>",
+       "external_image_whitelist": " #Ostavite ovaj red onakvim kakav jeste<pre>\n#Ispod dodajte odlomke regularnih izraza (samo deo koji se nalazi između //)\n#Oni će biti upoređeni s adresama spoljašnjih slika\n#One koje se poklapaju biće prikazane kao slike, a preostale kao veze do slika\n#Redovi koji počinju s tarabom se smatraju komentarima\n#Svi unosi su osetljivi na mala i velika slova\n\n#Dodajte sve odlomke regularnih izraza iznad ovog reda. Ovaj red ne dirajte</pre>",
        "tags": "Važeće oznake promena",
        "tag-filter": "Filter [[Special:Tags|oznaka]]:",
        "tag-filter-submit": "Filtriraj",
        "tags-activate-title": "Aktiviranje oznaka",
        "tags-activate-question": "Aktivirate oznaku „$1“.",
        "tags-activate-reason": "Razlog:",
-       "tags-activate-not-allowed": "Nije moguÄ\87e aktivirati oznaku â\80\9e$1â\80\9c.",
+       "tags-activate-not-allowed": "Nije moguÄ\87e aktivirati oznaku â\80\9e$1â\80\9d.",
        "tags-activate-not-found": "Oznaka „$1“ ne postoji.",
        "tags-activate-submit": "Aktiviraj",
        "tags-deactivate-title": "Deaktiviranje oznaka",
        "tags-deactivate-question": "Deaktivirate oznaku „$1“.",
        "tags-deactivate-reason": "Razlog:",
-       "tags-deactivate-not-allowed": "Nije moguÄ\87e deaktivirati oznaku â\80\9e$1â\80\9c.",
+       "tags-deactivate-not-allowed": "Nije moguÄ\87e deaktivirati oznaku â\80\9e$1â\80\9d.",
        "tags-deactivate-submit": "Dekativiraj",
        "tags-apply-no-permission": "Nemate dozvolu da primenite oznake promena zajedno sa svojim promenama.",
        "tags-apply-blocked": "Ne možete da primenite oznake tagova zajedno sa vašim promenama sve dok ste blokirani.",
-       "tags-update-no-permission": "Nemate dozvolu da dodate ili uklonite oznake promena iz pojedinačnih izmena ili unosa u evidenciji.",
+       "tags-update-no-permission": "Nemate dozvolu da dodate ili uklonite oznake promena iz pojedinačnih izmena ili unosa u dnevniku.",
        "tags-update-blocked": "Ne možete dodavati niti uklanjati oznake izmena dok {{GENDER:$1|ste}} blokirani.",
        "tags-update-add-not-allowed-one": "Nije dozvoljeno da se oznaka „$1” dodaje ručno.",
        "tags-edit-title": "Uredi oznake",
        "tags-edit-reason": "Razlog:",
        "tags-edit-revision-submit": "Primeni promene {{PLURAL:$1|ovoj izmeni|$1 izmenama}}",
        "tags-edit-success": "Promene su primenjene.",
-       "tags-edit-failure": "Ne mogu da primenim izmene:\n$1",
+       "tags-edit-failure": "Nije moguće primeniti promene:\n$1",
        "tags-edit-nooldid-title": "Nevažeća odredišna izmena",
        "tags-edit-nooldid-text": "Niste odredili bilo koju ciljanu izmenu na kojoj će se izvršiti ova funkcija ili ako navedena izmena ne postoji.",
        "tags-edit-none-selected": "Izaberite bar jednu oznaku koju treba dodati ili ukloniti.",
        "diff-form-oldid": "ID stare izmene (opcionalno)",
        "diff-form-revid": "ID izmene ili razlike",
        "diff-form-submit": "Prikaži razlike",
-       "permanentlink": "Trajni link",
+       "permanentlink": "Trajna veza",
        "permanentlink-revid": "ID izmene",
        "permanentlink-submit": "Idi na izmenu",
        "dberr-problems": "Došlo je do tehničkih problema.",
        "htmlform-title-not-exists": "$1 ne postoji.",
        "htmlform-user-not-exists": "<strong>$1</strong> ne postoji.",
        "htmlform-user-not-valid": "<strong>$1</strong> nije validno korisničko ime.",
-       "logentry-delete-delete": "$1 je {{GENDER:$2|obrisao|obrisala}} stranicu $3",
-       "logentry-delete-delete_redir": "$1 je {{GENDER:$2|obrisao|obrisala}} preusmerenje $3 prepisivanjem",
+       "logentry-delete-delete": "$1 je {{GENDER:$2|izbrisao|izbrisala}} stranicu $3",
+       "logentry-delete-delete_redir": "$1 je {{GENDER:$2|izbrisao|izbrisala}} preusmerenje $3 prepisivanjem",
        "logentry-delete-restore": "$1 je {{GENDER:$2|vratio|vratila}} stranicu $3 ($4)",
        "logentry-delete-restore-nocount": "$1 je {{GENDER:$2|vratio|vratila}} stranicu $3",
        "restore-count-revisions": "{{PLURAL:$1|1 izmena|$1 izmene|$1 izmena}}",
        "restore-count-files": "{{PLURAL:$1|1 datoteka|$1 datoteke|$1 datoteka}}",
-       "logentry-delete-event": "$1 je {{GENDER:$2|promenio|promenila}} vidljivost {{PLURAL:$5|događaja|$5 događaja}} u evidenciji na stranici „$3”: $4",
+       "logentry-delete-event": "$1 je {{GENDER:$2|promenio|promenila}} vidljivost {{PLURAL:$5|događaja|$5 događaja}} u dnevniku na stranici „$3”: $4",
        "logentry-delete-revision": "$1 je {{GENDER:$2|promenio|promenila}} vidljivost {{PLURAL:$5|izmene|$5 izmene|$5 izmena}} na stranici $3: $4",
-       "logentry-delete-event-legacy": "$1 je {{GENDER:$2|promenio|promenila}} vidljivost događaja u evidenciji na stranici „$3”",
+       "logentry-delete-event-legacy": "$1 je {{GENDER:$2|promenio|promenila}} vidljivost događaja u dnevniku na stranici „$3”",
        "logentry-delete-revision-legacy": "$1 je {{GENDER:$2|promenio|promenila}} vidljivost izmena na stranici $3",
        "logentry-suppress-delete": "$1 je {{GENDER:$2|potisnuo|potisnula}} stranicu $3",
-       "logentry-suppress-event": "$1 je tajno {{GENDER:$2|promenio|promenila}} vidljivost {{PLURAL:$5|događaja|$5 događaja}} u evidenciji na stranici „$3”: $4",
+       "logentry-suppress-event": "$1 je tajno {{GENDER:$2|promenio|promenila}} vidljivost {{PLURAL:$5|događaja|$5 događaja}} u dnevniku na stranici „$3”: $4",
        "logentry-suppress-revision": "$1 je tajno {{GENDER:$2|promenio|promenila}} vidljivost {{PLURAL:$5|izmene|$5 izmena}} na stranici $3: $4",
-       "logentry-suppress-event-legacy": "$1 je potajno {{GENDER:$2|promenio|promenila}} vidljivost događaja u evidenciji na stranici „$3”",
+       "logentry-suppress-event-legacy": "$1 je potajno {{GENDER:$2|promenio|promenila}} vidljivost događaja u dnevniku na stranici „$3”",
        "logentry-suppress-revision-legacy": "$1 je tajno {{GENDER:$2|promenio|promenila}} vidljivost izmena na stranici $3",
        "revdelete-content-hid": "sadržaj je sakriven",
        "revdelete-summary-hid": "opis izmene je sakriven",
        "logentry-upload-upload": "$1 je {{GENDER:$2|otpremio|otpremila}} $3",
        "logentry-upload-overwrite": "$1 je {{GENDER:$2|otpremio|otpremila}} novu verziju datoteke $3",
        "logentry-upload-revert": "$1 je {{GENDER:$2|otpremio|otpremila}} $3",
-       "log-name-managetags": "Evidencija upravljanja oznakama",
-       "log-description-managetags": "Na ovoj stranici se nalazi spisak izmena u vezi [[Special:Tags|oznaka]]. Evidencija sadrži samo radnje koje su ručno izvršili administratori; unosi za oznake koje je napravio ili izbrisao viki softvera se ne nalaze u ovoj evidenciji.",
+       "log-name-managetags": "Dnevnik upravljanja oznakama",
+       "log-description-managetags": "Na ovoj stranici se nalazi spisak izmena u vezi [[Special:Tags|oznaka]]. Dnevnik sadrži samo radnje koje su ručno izvršili administratori; unosi za oznake koje je napravio ili izbrisao viki softver, a ne nalaze se u ovom dnevniku.",
        "logentry-managetags-create": "$1 je {{GENDER:$2|napravio|napravila}} oznaku „$4“",
-       "logentry-managetags-delete": "$1 je {{GENDER:$2|obrisao|obrisala}} oznaku „$4“ (uklonjena je iz $5 {{PLURAL:$5|izmene ili unosa u evidenciji|izmena i/ili unosa u evidenciji}})",
+       "logentry-managetags-delete": "$1 je {{GENDER:$2|izbrisao|izbrisala}} oznaku „$4” (uklonjena je iz $5 {{PLURAL:$5|izmene ili unosa u dnevniku|izmena i/ili unosa u dnevniku}})",
        "logentry-managetags-activate": "$1 je {{GENDER:$2|aktivirao|aktivirala}} oznaku „$4“ za upotrebu od strane korisnika i botova",
        "logentry-managetags-deactivate": "$1 je {{GENDER:$2|deaktivirao|deaktivirala}} oznaku „$4“ za upotrebu od strane korisnika i botova",
-       "log-name-tag": "Evidencija oznaka",
-       "log-description-tag": "Ova stranica prikazuje kada su korisnici dodali/uklonili [[Special:Tags|oznake]] s pojedinačnih izmena ili unosa u dnevnicima. Evidencija ne prikazuje radnje označavanja kada su se dogodile prilikom uređivanja, brisanja ili slične radnje.",
+       "log-name-tag": "Dnevnik oznaka",
+       "log-description-tag": "Ova stranica prikazuje kada su korisnici dodali/uklonili [[Special:Tags|oznake]] s pojedinačnih izmena ili unosa u dnevnicima. Dnevnik ne prikazuje radnje označavanja kada su se dogodile prilikom uređivanja, brisanja ili slične radnje.",
        "rightsnone": "(nema)",
        "rightslogentry-temporary-group": "$1 (privremeno, do $2)",
        "feedback-adding": "Dodajem povratne informacije na stranicu…",
        "expand_templates_input": "Unos vikiteksta:",
        "expand_templates_output": "Rezultat",
        "expand_templates_xml_output": "XML izlaz",
-       "expand_templates_html_output": "Sirov HTML izlaz",
+       "expand_templates_html_output": "Neobrađeni HTML izlaz",
        "expand_templates_ok": "U redu",
        "expand_templates_remove_comments": "Ukloni komentare",
        "expand_templates_remove_nowiki": "Poništava efekat <nowiki> tagova u prikazu članaka",
        "expand_templates_generate_xml": "Prikaži XML stablo za raščlanjivanje",
-       "expand_templates_generate_rawhtml": "Prikaži sirov HTML",
+       "expand_templates_generate_rawhtml": "Prikaži neobrađeni HTML",
        "expand_templates_preview": "Pretpregled",
        "expand_templates_input_missing": "Morate da obezbedite barem neki ulazni vikitekst.",
        "pagelanguage": "Promena jezika stranice",
        "pagelang-db-failed": "Baza podataka nije uspela da promeni jezik stranice.",
        "right-pagelang": "menjanje jezika stranice",
        "action-pagelang": "promenite jezik stranice",
-       "log-name-pagelang": "Evidencija promene jezika",
+       "log-name-pagelang": "Dnevnik promene jezika",
        "log-description-pagelang": "Ovo je dnevnik promena u jezicima stranica.",
        "logentry-pagelang-pagelang": "$1 je {{GENDER:$2|promenio|promenila}} jezik stranice „$3” iz $4 u $5.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (omogućena)",
        "mediastatistics-header-unknown": "Nepoznato",
        "mediastatistics-header-bitmap": "Bitmap slike",
        "mediastatistics-header-drawing": "Crteži (vektorske slike)",
-       "mediastatistics-header-audio": "Zvuk",
+       "mediastatistics-header-audio": "Zvučni snimci",
        "mediastatistics-header-video": "Videi",
        "mediastatistics-header-multimedia": "Obogaćeni mediji",
        "mediastatistics-header-office": "Kancelarija",
        "json-error-recursion": "Jedna ili više rekurzivnih referenci u vrednosti koju treba enkodirati.",
        "json-error-inf-or-nan": "Jedna ili više NAN ili INF vrednosti u vrednosti koju treba enkodirati",
        "json-error-unsupported-type": "Data je vrednost tipa koja se ne može enkodirati",
-       "headline-anchor-title": "Link do ovog odeljka",
+       "headline-anchor-title": "Veza do ovog odeljka",
        "special-characters-group-latin": "Latinica",
        "special-characters-group-latinextended": "Proširena latinica",
        "special-characters-group-ipa": "MFA",
        "sessionprovider-mediawiki-session-cookiesessionprovider": "sesije sa kolačićima",
        "sessionprovider-nocookies": "Kolačići su možda onemogućeni. Uverite se da imate kolačiće omogućene i počnite ponovo.",
        "randomrootpage": "Slučajna korenska stranica",
-       "log-action-filter-block": "Tip blokiranja:",
+       "log-action-filter-block": "Tip blokade:",
        "log-action-filter-contentmodel": "Tip promene modela sadržaja:",
        "log-action-filter-delete": "Tip brisanja:",
        "log-action-filter-import": "Tip uvoza:",
        "log-action-filter-protect-move_prot": "premeštanje zaštite",
        "log-action-filter-rights-rights": "ručno",
        "log-action-filter-rights-autopromote": "automatski",
-       "log-action-filter-suppress-event": "Skrivanje unosa u evidenciji",
+       "log-action-filter-suppress-event": "sakrivanje dnevnika",
        "log-action-filter-suppress-revision": "skrivanje izmena",
        "log-action-filter-suppress-delete": "Skrivanje stranice",
        "log-action-filter-suppress-block": "Skrivanje korisnika blokiranjem",
        "log-action-filter-upload-upload": "novo otpremanje",
        "log-action-filter-upload-overwrite": "promena postojećeg",
        "authmanager-authn-not-in-progress": "Potvrda identiteta nije u toku ili je došlo do gubitka podataka o sesiji. Počnite ispočetka.",
-       "authmanager-authn-no-primary": "Ne mogu da proverim pružene akreditive.",
+       "authmanager-authn-no-primary": "Nije moguće potvrditi pružene akreditive.",
        "authmanager-authn-no-local-user": "Pruženi akreditivi nisu povezani ni sa jednim korisnikom na ovom vikiju.",
-       "authmanager-authn-no-local-user-link": "Pruženi su važeći akreditivi, ali nisu povezani ni s jednim korisnikom na ovom vikiju. Prijavite se na neki drugi način ili napravite novi korisnički nalog, što će vam dati mogućnost da povežete prethodne akreditive na novi nalog.",
-       "authmanager-authn-autocreate-failed": "Ne mogu da automatski napravim lokalni nalog: $1",
+       "authmanager-authn-no-local-user-link": "Pruženi akreditivi su važeći, ali nisu povezani ni sa jednim korisnikom na ovom vikiju. Prijavite se na neki drugi način ili otvorite novi korisnički nalog, što će vam dati opciju da povežete prethodne akreditive na novi nalog.",
+       "authmanager-authn-autocreate-failed": "Automatsko otvaranje lokalnog naloga nije uspelo: $1",
        "authmanager-change-not-supported": "Ne mogu da promenim pružene akreditive jer ih ništa ne bi koristilo.",
        "authmanager-create-disabled": "Otvaranje naloga je onemogućeno.",
        "authmanager-create-from-login": "Popunite polja da biste napravili nalog.",
        "authform-notoken": "Nedostaje token",
        "authform-wrongtoken": "Pogrešan token",
        "specialpage-securitylevel-not-allowed-title": "Nije dozvoljeno",
-       "specialpage-securitylevel-not-allowed": "Žao nam je, nije vam dozvoljeno da koristite ovu stranicu jer ne mogu da potvrdim vaš identitet.",
-       "authpage-cannot-login": "Ne mogu da započnem prijavu.",
-       "authpage-cannot-login-continue": "Ne mogu da nastavim sa prijavom. Vaša sesija je najverovatnije istekla.",
-       "authpage-cannot-create": "Ne mogu da započnem otvaranje naloga.",
-       "authpage-cannot-create-continue": "Ne mogu da nastavim kreiranje naloga. Vaša sesija je najverovatnije istekla.",
-       "authpage-cannot-link": "Ne mogu da započnem povezivanje naloga.",
+       "specialpage-securitylevel-not-allowed": "Nije vam dozvoljeno da koristite ovu stranicu jer nije moguće potvrditi vaš identitet.",
+       "authpage-cannot-login": "Nije moguće započeti prijavu.",
+       "authpage-cannot-login-continue": "Nije moguće nastaviti sa prijavom. Vaša sesija je najverovatnije istekla.",
+       "authpage-cannot-create": "Nije moguće započeti otvaranje naloga.",
+       "authpage-cannot-create-continue": "Nije moguće nastaviti sa otvaranjem naloga. Vaša sesija je najverovatnije istekla.",
+       "authpage-cannot-link": "Nije moguće započeti povezivanje naloga.",
        "authpage-cannot-link-continue": "Ne mogu nastaviti povezivanje naloga. Vaša sesija je najverovatnije istekla.",
        "cannotauth-not-allowed-title": "Pristup je odbijen",
        "cannotauth-not-allowed": "Nije vam dozvoljeno da koristite ovu stranicu",
        "removecredentials-invalidsubpage": "„$1“ nije važeći tip akreditiva.",
        "removecredentials-success": "Vaši akreditivi su uklonjeni.",
        "credentialsform-provider": "Tip akreditiva:",
-       "credentialsform-account": "Naziv naloga:",
+       "credentialsform-account": "Ime naloga:",
        "cannotlink-no-provider-title": "Nema naloga za povezivanje",
        "cannotlink-no-provider": "Nema naloga za povezivanje.",
        "linkaccounts": "Spajanje naloga",
index 15a7147..05343e9 100644 (file)
@@ -16,7 +16,6 @@
        "tog-extendwatchlist": "Moro langa \"Tan luku\" réy",
        "tog-usenewrc": "Moro betre Laste Kenki (JavaScript)",
        "tog-numberheadings": "Gi den ede wan nomru sondro fu yepi",
-       "tog-showtoolbar": "Sori Kenki-Wrokosani-barki (JavaScript)",
        "tog-editondblclick": "Naki tu tron fu kenki (JavaScript)",
        "tog-editsectiononrightclick": "Gi primisi fu kenki pisi-papira nanga wan naki n'a leti-anu sey na tapu wan pisi-ede (JavaScript)",
        "tog-watchcreations": "Tan luku den papira di mi meki",
index 83390c7..e8a5ed0 100644 (file)
@@ -21,7 +21,6 @@
        "tog-extendwatchlist": "Uutgediende Beooboachtengslieste tou Anwiesenge fon aal Annerengen",
        "tog-usenewrc": "Fermeerde Deerstaalenge fon do \"Lääste Annerengen\" (bruukt Javascript)",
        "tog-numberheadings": "Uurskrifte automatisk nuumerierje",
-       "tog-showtoolbar": "Beoarbaidengs-Reewen anwiese",
        "tog-editondblclick": "Sieden mäd Dubbeldklik beoarbaidje (JavaScript)",
        "tog-editsectiononrightclick": "Eenpelde Ousatse mäd Gjuchtsklik beoarbaidje (JavaScript)",
        "tog-watchcreations": "Aal do sälwen näi anlaide Sieden beooboachtje",
index bcf7bc5..f175311 100644 (file)
@@ -26,7 +26,6 @@
        "tog-extendwatchlist": "Legaan béréndélan ngarah sakabéh parobahanana kaawaskeun",
        "tog-usenewrc": "Parobahan grup dumasar kaca dina béréndélan anu anyar robah jeung daptar awaseun",
        "tog-numberheadings": "Nomeran lulugu sacara otomatis",
-       "tog-showtoolbar": "Témbongkeun tulbar édit",
        "tog-editondblclick": "Édit kaca ku klik ganda",
        "tog-editsectiononrightclick": "Fungsikeun ngédit sub-bagean kalawan klik-katuhu dina judul bagéan",
        "tog-watchcreations": "Tambahkeun kaca-kaca jieunan kuring jeung berkas muatan kuring kana daptar awaseun",
index ed82a7f..1b0c51e 100644 (file)
@@ -89,7 +89,6 @@
        "tog-extendwatchlist": "Utöka bevakningslistan till att visa alla ändringar, inte bara den senaste",
        "tog-usenewrc": "Gruppera ändringar efter sida i senaste ändringar och bevakningslistan",
        "tog-numberheadings": "Numrera rubriker automatiskt",
-       "tog-showtoolbar": "Visa redigeringsverktygsraden",
        "tog-editondblclick": "Redigera sidor med dubbelklick",
        "tog-editsectiononrightclick": "Aktivera redigering av avsnitt genom högerklick på underrubriker",
        "tog-watchcreations": "Lägg till sidor jag skapar och filer jag laddar upp till min bevakningslista",
        "badarticleerror": "Den åtgärden kan inte utföras på den här sidan.",
        "cannotdelete": "Sidan eller filen \"$1\" kunde inte raderas.\nDen kanske redan har raderats av någon annan.",
        "cannotdelete-title": "Sidan \"$1\" kan inte raderas",
+       "delete-scheduled": "Sidan \"$1\" är schemalagd för radering.\nHa tålamod.",
        "delete-hook-aborted": "Borttagning avbruten av hook.\nDen gav ingen förklaring.",
        "no-null-revision": "Kunde inte skapa ny tom version för sidan \"$1\"",
        "badtitle": "Felaktig titel",
        "subject-preview": "Förhandsgranskning av ämne:",
        "previewerrortext": "Ett fel uppstod när dina ändringar skulle förhandsgranskas.",
        "blockedtitle": "Användaren är blockerad",
+       "blocked-email-user": "<strong>Ditt användarnamn har blockerats från att skicka e-post. Du kan fortfarande redigera andra sidor på denna wiki.</strong> Du kan se de fullständiga blockeringsdetaljerna på [[Special:MyContributions|kontobidragen]].\n\nBlockeringen gjordes av $1.\n\nAnledningen var <em>$2</em>.\n\n* Blockeringen startade: $8\n* Blockeringen gäller till: $6\n* Blockeringen är avsedd för: $7\n* Blockerings-ID nr $5",
+       "blockedtext-partial": "<strong>Ditt användarnamn eller IP-adress har blockerats från att göra ändringar på denna sida. Du kan fortfarande redigera andra sidor på denna wiki.</strong> Du kan se de fullständiga blockeringsdetaljerna på [[Special:MyContributions|kontobidrag]].\n\nBlockeringen gjordes av $1.\n\nAnledningen var <em>$2</em>.\n\n* Blockeringen startade: $8\n* Blockeringen gäller till: $6\n* Blockeringen är avsedd för: $7\n* Blockerings-ID nr $5",
        "blockedtext": "'''Din IP-adress eller ditt användarnamn är blockerat.'''\n\nBlockeringen utfördes av $1 med motiveringen: ''$2''.\n\n* Blockeringen startade: $8\n* Blockeringen gäller till: $6.\n* Blockeringen var avsedd för: $7.\n\nDu kan kontakta $1 eller någon annan av [[{{MediaWiki:Grouppage-sysop}}|administratörerna]] för att diskutera blockeringen.\nOm du är inloggad och har uppgivit en e-postadress i dina [[Special:Preferences|inställningar]] så kan du använda funktionen \"{{int:emailuser}}\", såvida du inte blivit blockerad från funktionen.\n\nDin IP-adress är $3 och blockerings-ID är #$5.\nVänligen ange informationen ovan i alla förfrågningar som du gör i ärendet.",
        "autoblockedtext": "Din IP-adress har blockerats automatiskt eftersom den har använts av en annan användare som blockerats av $1.\nMotiveringen av blockeringen var:\n\n:''$2''\n\n* Blockeringen startade: $8\n* Blockeringen gäller till: $6\n* Blockeringen är avsedd för: $7\n\nDu kan kontakta $1 eller någon annan [[{{MediaWiki:Grouppage-sysop}}|administratör]] för att diskutera blockeringen.\n\nObservera att du inte kan använda dig av funktionen \"{{int:emailuser}}\" om du inte har registrerat en giltig e-postadress i [[Special:Preferences|dina inställningar]] eller om du har blivit blockerad från att skicka e-post.\n\nDin nuvarande IP-adress är $3, och blockerings-ID är #$5.\nVänligen ange informationen ovan i alla förfrågningar som du gör i ärendet.",
        "systemblockedtext": "Ditt användarnamn eller IP-adress h    ar blockerats automatiskt av MediaWiki.\n\nMotiveringen av blockeringen var:\n\n:<em>$2</em>\n\n* Blockeringen startade: $8\n* Blockeringen gäller till: $6\n* Blockeringen är avsedd för: $7\n\nDin nuvarande IP-adress är $3.\nVänligen ange informationen ovan i alla förfrågningar som du gör i ärendet.",
        "prefixindex": "Alla sidor med prefix",
        "prefixindex-namespace": "Alla sidor med prefix ($1 namnrymder)",
        "prefixindex-submit": "Visa",
-       "prefixindex-strip": "Avlägsna prefix i lista",
+       "prefixindex-strip": "Dölj prefixet i resultaten",
        "shortpages": "Korta sidor",
        "longpages": "Långa sidor",
        "deadendpages": "Sidor utan länkar",
        "ipb-disableusertalk": "Hindra användaren från att redigera sin egen diskussionssida under blockeringen",
        "ipb-change-block": "Återblockera användaren med de här inställningarna",
        "ipb-confirm": "Bekräfta blockering",
+       "ipb-sitewide": "Hela webbplatsen",
+       "ipb-partial": "Partiell",
+       "ipb-type-label": "Typ",
+       "ipb-pages-label": "Sidor",
        "badipaddress": "Du har inte skrivit IP-adressen korrekt.",
        "blockipsuccesssub": "Blockeringen är utförd",
        "blockipsuccesstext": "[[Special:Contributions/$1|$1]] har blockerats.<br />\nFör att se alla aktuella blockeringar, gå till [[Special:BlockList|listan över blockeringar]].",
        "createaccountblock": "kontoregistrering blockerad",
        "emailblock": "e-post blockerad",
        "blocklist-nousertalk": "kan inte redigera sin egen diskussionssida",
+       "blocklist-editing": "redigerar",
+       "blocklist-editing-sitewide": "redigerar (hela webbplatsen)",
        "ipblocklist-empty": "Listan över blockeringar är tom.",
        "ipblocklist-no-results": "Den angivna IP-adressen eller användaren är inte blockerad.",
        "blocklink": "blockera",
        "movepage-moved": "'''\"$1\" har flyttats till \"$2\"'''",
        "movepage-moved-redirect": "En omdirigering har skapats.",
        "movepage-moved-noredirect": "Skapandet av en omdirigering avbröts.",
+       "movepage-delete-first": "Målsidan har för många revisioner att radera som del av sidflyttningen. Radera först sidan manuellt och försök sedan igen.",
        "articleexists": "Antingen existerar redan en sida med det namnet, eller så har du valt ett namn som inte är tillåtet.\nVälj något annat namn istället.",
        "cantmove-titleprotected": "Du kan inte flytta sidan till den titeln, eftersom den nya titeln har skyddats från att skapas.",
        "movetalk": "Flytta tillhörande diskussionssida",
        "logentry-block-block": "$1 {{GENDER:$2|blockerade}} {{GENDER:$4|$3}} med en varaktighet på $5 $6",
        "logentry-block-unblock": "$1 {{GENDER:$2|avblockerade}} {{GENDER:$4|$3}}",
        "logentry-block-reblock": "$1 {{GENDER:$2|ändrade}} blockeringsinställningar för {{GENDER:$4|$3}} med en varaktighet på $5 $6",
+       "logentry-partialblock-block": "$1 {{GENDER:$2|blockerade}} {{GENDER:$4|$3}} från att redigera {{PLURAL:$8||sidorna}} $7 med en varaktighet på $5 $6",
+       "logentry-partialblock-reblock": "$1 {{GENDER:$2|ändrade}} blockeringsinställningarna för {{GENDER:$4|$3}} som förhindrar redigeringar på {{PLURAL:$8||sidorna}} $7 med en varaktighet på $5 $6",
+       "logentry-non-editing-block-block": "$1 {{GENDER:$2|blockerade}} {{GENDER:$4|$3}} från icke-redigerande handlingar med en varaktighet på $5 $6",
+       "logentry-non-editing-block-reblock": "$1 {{GENDER:$2|ändrade}} blockeringsinställningarna för {{GENDER:$4|$3}} för icke-redigerande handlingar med en varaktighet på $5 $6",
        "logentry-suppress-block": "$1 {{GENDER:$2|blockerade}} {{GENDER:$4|$3}} med en varaktighet på $5 $6",
        "logentry-suppress-reblock": "$1 {{GENDER:$2|ändrade}} blockeringsinställningar för {{GENDER:$4|$3}} med en varaktighet på $5 $6",
        "logentry-import-upload": "$1 {{GENDER:$2|importerade}} $3 genom filuppladdning",
        "mw-widgets-titleinput-description-redirect": "omdirigerar till $1",
        "mw-widgets-categoryselector-add-category-placeholder": "Lägg till en kategori...",
        "mw-widgets-usersmultiselect-placeholder": "Lägg till fler...",
+       "mw-widgets-titlesmultiselect-placeholder": "Lägg till fler...",
        "date-range-from": "Från datum:",
        "date-range-to": "Till datum:",
        "sessionmanager-tie": "Kan inte kombinera flera begäransautentiseringstyper: $1.",
        "passwordpolicies-policy-passwordcannotmatchblacklist": "Lösenordet kan inte matcha specifikt svartlistade lösenord",
        "passwordpolicies-policy-maximalpasswordlength": "Lösenordet måste vara högst $1 {{PLURAL:$1|tecken}} långt",
        "passwordpolicies-policy-passwordcannotbepopular": "Lösenordet kan inte vara {{PLURAL:$1|det populäraste lösenordet|i listan över de $1 populäraste lösenorden}}",
-       "easydeflate-invaliddeflate": "Innehåll som tillhandahålls är inte helt komprimerat"
+       "easydeflate-invaliddeflate": "Innehåll som tillhandahålls är inte helt komprimerat",
+       "unprotected-js": "Av säkerhetsskäl kan inte JavaScript läsas in från oskyddade sidor. Skapa endast JavaScript i namnrymden MediaWiki: eller som en användarundersida."
 }
index a0e1e10..18de234 100644 (file)
@@ -30,7 +30,6 @@
        "tog-extendwatchlist": "Tanua orodha ya maangalizi ili kuonyesha mabadiliko yote yaliyofanyika, si hilo la mwisho tu.",
        "tog-usenewrc": "Mabadiliko ya kundi kwa kurasa kwenye mabadiliko ya karibuni na orodha ya maangalizi",
        "tog-numberheadings": "Vichwa vya habari vijipange namba-vyenyewe",
-       "tog-showtoolbar": "Onyesha mwambaa wa zana za kuhariria",
        "tog-editondblclick": "Hariri ukurasa kwa kubonyeza mara mbili",
        "tog-editsectiononrightclick": "Wezesha sehemu ya kuandikia kwa kubonyeza kitufe cha kulia cha puku yako kwa kubonyeza kwenye vichwa vya sehemu",
        "tog-watchcreations": "Ongeza kurasa nilizoumba katika maangalizi yangu",
index 8a9a78e..11b8cbc 100644 (file)
@@ -32,7 +32,6 @@
        "tog-extendwatchlist": "Pokŏż na mojij pozōrliście wszyjske, a niy jyno niydŏwne pōmiany",
        "tog-usenewrc": "Potajluj pōmiany podug zajtōw we niydŏwnych pōmianach i pozōrliście",
        "tog-numberheadings": "Automatycznŏ nōmeracyjŏ titlōw",
-       "tog-showtoolbar": "Pokŏż spisek nŏczyniōw",
        "tog-editondblclick": "Edycyjõ napoczynajōm dwa klikniyncia (JavaScript)",
        "tog-editsectiononrightclick": "Klikniyncie prawym kneflym myszy na titlu tajli<br />napoczynŏ jigo edycyjõ(JavaScript)",
        "tog-watchcreations": "Przidej zajty, kere żech napisoł i pliki, kere żech wciepoł, na mojã pozōrlistã",
index e2a152b..e6f33f6 100644 (file)
@@ -65,7 +65,6 @@
        "tog-extendwatchlist": "அனைத்து பொருத்தமான மாற்றங்களைக் காட்டுமாறு கவனிப்புப் பட்டியலை விரிவாக்கு",
        "tog-usenewrc": "அண்மைய மாற்றங்கள் மற்றும் கவனிப்புப் பட்டியல் பக்கத்தில் மாற்றங்களை பக்கத்தை பொறுத்து குழுவாக்கு",
        "tog-numberheadings": "தலைப்புகளுக்கு தானியங்கி இலக்கமிடு",
-       "tog-showtoolbar": "கருவிப்பட்டையைக் காட்டு",
        "tog-editondblclick": "இரட்டைச் சொடுக்கில் பக்கங்களைத் தொகு",
        "tog-editsectiononrightclick": "பிரிவுத் தலைப்பின் மீது வலச் சொடுக்குவதன் மூலம் பகுதித்  தொகுப்பை செயலாக்கவும்",
        "tog-watchcreations": "நான் உருவாக்கும் பக்கங்கள் மற்றும் பதிவேற்றும் கோப்புகளை எனது கவனிப்புப் பட்டியலில் சேர்க்கவும்.",
index cfd4c2b..4aaf3a0 100644 (file)
@@ -22,7 +22,6 @@
        "tog-extendwatchlist": "ಕೇವಲೊ ಇಂಚಿಪೊದ ಬದಲಾವನೆಲತ್ತಂದೆ, ಸಂಬಂದೊ ಇಪ್ಪುನ ಮಾತ ಬದಲಾವನೆನ್ಲಾ ತೋಜುಲೆಕ ಪಟ್ಟಿನ್ ವಿಸ್ತರಿಪುಲೆ",
        "tog-usenewrc": "ಇಂಚಿಪೊದ ಬದಲಾವಣೆ ಬೊಕ್ಕೊ ವೀಕ್ಷಣಾಪಟ್ಟಿಡ್ ಪುಟೊತ ಅನುಸಾರ ಗುಂಪು ಬದಲಾವಣೆಲು",
        "tog-numberheadings": "ತರೆಬರವುಲೆಗ್ ಕ್ರಮಸಂಖ್ಯೆಲೆನ್ ತೋಜಾವು",
-       "tog-showtoolbar": "ಸಂಪಾದನೆದ ಉಪಕರನೊ ಪಟ್ಟಿನ್ ತೋಜಾವು",
        "tog-editondblclick": "ರಡ್ಡ್ ಸರ್ತಿ ಒತ್ತ್‌ನಗ ಪುಟೊನು ಸಂಪೊಲಿಪುನಂಚ ಆವಡ್",
        "tog-editsectiononrightclick": "ಪುಟೊತ ವಿಬಾಗೊಲೆನ್ ಐತ ಸೀರ್ಸಿಕೆನ್ ರಡ್ಡ್ ಸರ್ತಿ ಒತ್ತ್‌ನಗ ಸಂಪೊಲಿಪುನಂಚ ಉಪ್ಪಡ್",
        "tog-watchcreations": "ಯಾನ್ ಉಂಡುಮಲ್ತಿನ ಪುಟೊಕ್ಲೆನ್ ಬೊಕ್ಕ ಅಪ್ಲೋಡ್ ಮಲ್ತಿ ಕಡತೊಲೆನ್ ಎನ್ನ ವೀಕ್ಷಣಾಪಟ್ಟಿಗ್ ಸೇರ್ಪಾಲೆ",
index 6548aaa..ef21d2e 100644 (file)
@@ -26,7 +26,8 @@
                        "Matma Rex",
                        "WP MANIKHANTA",
                        "SrihariThalla",
-                       "Fitoschido"
+                       "Fitoschido",
+                       "Pavan santhosh.s"
                ]
        },
        "tog-underline": "లంకె క్రీగీత:",
@@ -37,7 +38,6 @@
        "tog-extendwatchlist": "కేవలం ఇటీవలి మార్పులే కాక, మార్పులన్నీ చూపించటానికి నా వీక్షణా జాబితాను పెద్దది చేయి",
        "tog-usenewrc": "ఇటీవలి మార్పులు, వీక్షణ జాబితాలలో మార్పులను పేజీ వారీగా చూపించు",
        "tog-numberheadings": "శీర్షికలకు అప్రమేయంగా వరుస సంఖ్యలు చేర్చు",
-       "tog-showtoolbar": "దిద్దుబాటు పనిముట్ల పట్టీని చూపించు",
        "tog-editondblclick": "డబుల్‌ క్లిక్కు చేసినప్పుడు పేజీని మార్చు",
        "tog-editsectiononrightclick": "విభాగాల శీర్షికల మీద కుడినొక్కుతో విభాగపు దిద్దుబాటును చేతనం చేయి",
        "tog-watchcreations": "నేను సృష్టించే పేజీలను, దస్త్రాలనూ నా వీక్షణ జాబితాకు చేర్చు",
        "subject-preview": "విషయపు మునుజూపు:",
        "previewerrortext": "మీ మార్పులు మునుజూపు చూపడంలో లోపం దొర్లింది.",
        "blockedtitle": "వాడుకరి నిరోధించబడ్డారు",
+       "blockedtext-partial": "<strong>ఈ పేజీల్లో మార్పులు చేయకుండా మీ వాడుకరి పేరు లేక ఐపీ అడ్రస్‌ను నిరోధం విధించారు. మీరు ఇంకా వికీలోని ఇతర పేజీల్లో మార్పులు చేయవచ్చు.</strong> [[Special:MyContributions|నా మార్పులు]] అన్న దగ్గర నిరోధానికి సంబంధించిన పూర్తి వివరాలు మీరు చూడవచ్చు.\n\nఈ నిరోధాన్ని $1 విధించారు.\n\nఅందుకు ఇచ్చిన కారణం ఇదీ: <em>$2</em>.\n\n* నిరోధం మొదలైన సమయం: $8\n* నిరోధించిన కాలం : $6\n* ఉద్దేశిత నిరోధిత వాడుకరి: $7\n* నిరోధించిన ఐడీ #$5",
        "blockedtext": "<strong>మీ వాడుకరిపేరును లేదా ఐ.పి. చిరునామాను నిరోధించారు.</strong>\n\nనిరోధించినవారు $1.\nఅందుకు వారు ఇచ్చిన కారణం: <em>$2</em>.\n\n* నిరోధం మొదలైన సమయం: $8\n* నిరోధించిన కాలం: $6\n* నిరోధానికి గురైనవారు: $7\n\nఈ నిరోధంపై చర్చించేందుకు మీరు $1 ను గాని, మరెవరైనా [[{{MediaWiki:Grouppage-sysop}}|నిర్వాహకుని]] గాని సంప్రదించవచ్చు.\nమీ [[Special:Preferences|ఖాతా అభిరుచులలో]] సరైన ఈ-మెయిలు చిరునామా ఇచ్చివుండకపోయినా లేదా మిమ్మల్ని 'ఈ వాడుకరికి ఈ-మెయిలు పంపు' సౌలభ్యాన్ని వాడుకోవడం నుండి నిరోధించివున్నా మీరు ఈమెయిలు ద్వారా సంప్రదించలేరు.\nమీ ప్రస్తుత ఐ.పీ. చిరునామా $3, నిరోధపు ID #$5.\nమీ సంప్రదింపులన్నిటిలోనూ పై వివరాలను పేర్కొనండి.",
        "autoblockedtext": "మీ ఐపీ చిరునామా ఆటోమాటిగ్గా నిరోధించబడింది. ఎందుకంటే ఇదే ఐపీ చిరునామాని ఓ నిరోధిత వాడుకరి ఉపయోగించారు. ఆ వాడుకరిని $1 నిరోధించారు.\nఅందుకు ఇచ్చిన కారణం ఇదీ:\n\n:<em>$2</em>\n\n* నిరోధం మొదలైన సమయం: $8\n* నిరోధించిన కాలం: $6\n* ఉద్దేశించిన నిరోధిత వాడుకరి: $7\n\nఈ నిరోధం గురించి చర్చించేందుకు మీరు $1 ను గానీ, లేదా ఇతర [[{{MediaWiki:Grouppage-sysop}}|నిర్వాహకులను]] గానీ సంప్రదించండి.\n\nమీ [[Special:Preferences|అభిరుచులలో]] సరైన ఈమెయిలు ఐడీని ఇచ్చి ఉంటే తప్ప, మీరు \"ఈ వాడుకరికి ఈమెయిలు పంపు\" అనే అంశాన్ని వాడజాలరని గమనించండి. ఆ సౌలభ్యాన్ని వాడటం నుండి మిమ్మల్ని నిరోధించలేదు.\n\nమీ ప్రస్తుత ఐపీ చిరునామా $3, నిరోధపు ఐడీ: $5.\nమీ సంప్రదింపులన్నిటిలోను అన్ని పై వివరాలను ఉదహరించండి.",
        "systemblockedtext": "మీడియావికీ మీ వాడుకరిపేరు లేదా ఐపీ అడ్రసును ఆటోమాటిగ్గా నిరోధించింది.\nఅందుకు ఇచ్చిన కారణం:\n\n:<em>$2</em>\n\n* నిరోధం మొదలైన సమయం: $8\n* నిరోధం ముగిసే సమయం: $6\n* నిరోధానికి గురైనవారు: $7\n\nమీ ప్రస్తుత ఐపీ అడ్రసు $3.\nమీ సంప్రదింపులన్నిటిలోనూ పై వివరాలను పేర్కొనండి.",
        "userpage-userdoesnotexist": "\"$1\" అనే వాడుకరి ఖాతా నమోదయిలేదు. మీరు ఈ పేజీని సృష్టించాలని/సరిదిద్దాలని అనుకుంటున్నారేమో చూడండి.",
        "userpage-userdoesnotexist-view": "వాడుకరి ఖాతా \"$1\" నమోదుకాలేదు.",
        "blocked-notice-logextract": "ప్రస్తుతం ఈ వాడుకరిని నిరోధించారు.\nనిరోధపు చిట్టాలోని చివరి పద్దుని మీ సమాచారం కోసం ఈ క్రింద ఇస్తున్నాం:",
-       "clearyourcache": "<strong>గమనిక:</strong> భద్రపరచిన తర్వాత, మార్పులను చూడాలంటే మీ విహారిణి యొక్క కోశాన్ని తీసేయాల్సిరావచ్చు.\n*<strong>ఫైర్‌ఫాక్స్‌ / సఫారి:</strong> <em>Shift</em> మీటని నొక్కిపట్టి <em>Reload</em>ని నొక్కండి లేదా <em>Ctrl-F5</em> గానీ <em>Ctrl-R</em> (మాకింటోషులో <em>⌘-Shift-R</em>) గానీ నొక్కండి\n* <strong>గూగుల్ క్రోమ్:</strong> <em>Ctrl-Shift-R</em> (మాక్ లో <em>⌘-Shift-R</em>) నొక్కండి\n*<strong>ఇంటర్నెట్ ఎక్ప్లోరర్:</strong> <em>Ctrl</em> ను నొక్కిపట్టి <em>Refresh</em> నొక్కండి లేదా <em>Ctrl-F5</em> నొక్కండి.\n*<em>ఒపెరా:</em> <em>Tools → Preferences</em> ద్వారా కోశాన్ని ఖాళీ చెయ్యండి",
+       "clearyourcache": "<strong>గమనిక:</strong> భద్రపరచిన తర్వాత, మార్పులను చూడాలంటే మీ విహారిణి యొక్క కోశాన్ని తీసేయాల్సిరావచ్చు.\n*<strong>ఫైర్‌ఫాక్స్‌ / సఫారి:</strong> <em>Shift</em> మీటని నొక్కిపట్టి <em>Reload</em>ని నొక్కండి లేదా <em>Ctrl-F5</em> గానీ <em>Ctrl-R</em> (మాకింటోషులో <em>⌘-Shift-R</em>) గానీ నొక్కండి\n* <strong>గూగుల్ క్రోమ్:</strong> <em>Ctrl-Shift-R</em> (మాక్ లో <em>⌘-Shift-R</em>) నొక్కండి\n*<strong>ఇంటర్నెట్ ఎక్ప్లోరర్:</strong> <em>Ctrl</em> ను నొక్కిపట్టి <em>Refresh</em> నొక్కండి లేదా <em>Ctrl-F5</em> నొక్కండి.\n* <strong>ఓపెరా:</strong> <em>Menu → Settings</em> వెళ్ళి (మ్యాక్‌లో <em>Opera → Preferences</em>కు వెళ్ళాలి) తర్వాత <em>Privacy & security → Clear browsing data → Cached images and files</em>కు వెళ్ళండి.",
        "usercssyoucanpreview": "<strong>చిట్కా:</strong> భద్రపరిచేముందు మీ కొత్త CSSని పరీక్షించడానికి \"{{int:showpreview}}\" బొత్తాన్ని వాడండి.",
        "userjsyoucanpreview": "<strong>చిట్కా:</strong> భద్రపరిచేముందు మీ కొత్త జావాస్క్రిప్టుని పరీక్షించడానికి \"{{int:showpreview}}\" బొత్తాన్ని వాడండి.",
        "usercsspreview": "<strong>మీరు వాడుకరి CSSను కేవలం సరిచూస్తున్నారని గుర్తుంచుకోండి.\nదాన్నింకా భద్రపరచలేదు!</strong>",
        "recentchangeslinked-feed": "సంబంధిత మార్పులు",
        "recentchangeslinked-toolbox": "సంబంధిత మార్పులు",
        "recentchangeslinked-title": "\"$1\" కు సంబంధించిన మార్పులు",
-       "recentchangeslinked-summary": "à°\8fà°¦à±\88నా à°ªà±\87à°\9cà±\80à°\95à°¿ à°²à±\87దా à°ªà±\87à°\9cà±\80à°¨à±\81à°\82à°¡à°¿ à°²à°¿à°\82à°\95à±\88 à°\89à°¨à±\8dà°¨ à°ªà±\87à°\9cà±\80à°²à±\8dà°²à±\8b à°\9cà°°à°¿à°\97à°¿à°¨ à°®à°¾à°°à±\8dà°ªà±\81లనà±\81 à°\9aà±\82à°¸à±\87à°\82à°¦à±\81à°\95à±\81 à°\86 à°ªà±\87à°\9cà±\80 à°ªà±\87à°°à±\81 à°\87à°µà±\8dà°µà°\82à°¡à°¿. (à°\8fà°¦à±\88నా à°µà°°à±\8dà°\97à°\82à°²à±\8bని à°ªà±\87à°\9cà±\80లనà±\81 à°\9aà±\82à°¸à±\87à°\82à°¦à±\81à°\95à±\81, à°µà°°à±\8dà°\97à°\82 à°ªà±\87à°°à±\81 à°\87à°µà±\8dà°µà°\82à°¡à°¿).  [[Special:Watchlist|à°®à±\80 à°µà±\80à°\95à±\8dà°·à°£ à°\9cాబితా]]à°²à±\8b à°\89à°¨à±\8dà°¨ à°ªà±\87à°\9cà±\80à°²à±\8dà°²à±\8b à°\9cà°°à°¿à°\97à°¿à°¨ à°®à°¾à°°à±\8dà°ªà±\81à°²à±\81 <strong>à°¬à±\8aà°¦à±\8dà°¦à±\81</strong>à°\97à°¾ à°\89à°\82à°\9fాయి.",
+       "recentchangeslinked-summary": "à°\8fà°¦à±\88నా à°ªà±\87à°\9cà±\80à°²à±\8b à°\95ానà±\80, à°\86 à°ªà±\87à°\9cà±\80 à°¨à±\81à°\82à°¡à°¿ à°²à°¿à°\82à°\95à±\88 à°\89à°¨à±\8dà°¨ à°ªà±\87à°\9cà±\80à°²à±\8dà°²à±\8b à°\95ానà±\80 à°\9cà°°à°¿à°\97à°¿à°¨ à°®à°¾à°°à±\8dà°ªà±\81లనà±\81 à°\9aà±\82à°¸à±\87à°\82à°¦à±\81à°\95à±\81 à°\86 à°ªà±\87à°\9cà±\80 à°ªà±\87à°°à±\81 à°\87à°µà±\8dà°µà°\82à°¡à°¿. (à°\8fà°¦à±\88నా à°µà°°à±\8dà°\97à°\82à°²à±\8bని à°ªà±\87à°\9cà±\80లనà±\81 à°\9aà±\82à°¸à±\87à°\82à°¦à±\81à°\95à±\81, {{ns:category}}:వరà±\8dà°\97à°\82 à°ªà±\87à°°à±\81 à°\87à°µà±\8dà°µà°\82à°¡à°¿).  [[Special:Watchlist|à°®à±\80 à°µà±\80à°\95à±\8dà°·à°£ à°\9cాబితా]]à°²à±\8bని à°ªà±\87à°\9cà±\80à°²à±\8dà°²à±\8b à°\9cà°°à°¿à°\97à°¿à°¨ à°®à°¾à°°à±\8dà°ªà±\81à°²à±\81 <strong>à°¬à±\8aà°¦à±\8dà°¦à±\81</strong>à°\97à°¾ à°\95నిపిసà±\8dà°¤ాయి.",
        "recentchangeslinked-page": "పేజీ పేరు:",
        "recentchangeslinked-to": "లేదంటే, ఇచ్చిన పేజీకి లింకయివున్న పేజీలలో జరిగిన మార్పులను చూపించు",
        "recentchanges-page-added-to-category": "[[:$1]] ను వర్గానికి చేర్చాం",
        "zip-wrong-format": "ఇచ్చినది ZIP ఫైలు కాదు.",
        "zip-bad": "ఫైలు చెడిపోయిన, లేదా చదవడానికి వీల్లేని ZIP ఫైలు అయ్యుండాలి.\nదానిపై భద్రతా పరమైన పరీక్ష చెయ్యలేం.",
        "zip-unsupported": "ఇది MediaWiki కి పట్టులేని ZIP అంశాలు కలిగిన ZIP ఫైలు.\nదీనిపై సరైన భద్రతా పరీక్షలు చెయ్యలేం.",
-       "uploadstash": "à°­à±\8bషాణà°\82 à°\8eà°\95à±\8dà°\95à°¿à°\82à°ªు",
+       "uploadstash": "à°\8eà°\95à±\8dà°\95à°¿à°\82à°\9aà°¿ à°¦à°¾à°\9aు",
        "uploadstash-summary": "ఎక్కించినప్పటికీ వికీలో ప్రచురితం కాని  (లేదా ఎక్కింపు జరుగుతున్న) ఫైళ్ళు ఈ పేజీలో కనిపిస్తాయి. ఈ ఫైళ్ళు ఎక్కించిన వాడుకరికి తప్ప మరొకరికి కనబడవు.",
        "uploadstash-clear": "భోషాణం లోని ఫైళ్లను తీసివెయ్యి",
        "uploadstash-nofiles": "మీకు ఫైళ్ళ భోషాణమేమీ లేదు.",
        "prefixindex": "ఉపసర్గతో అన్ని పేజీలు",
        "prefixindex-namespace": "ఉపసర్గతో ఉన్న పేజీలు ($1 పేరుబరి)",
        "prefixindex-submit": "చూపించు",
-       "prefixindex-strip": "à°\9cాబితాలà±\8b à°\86దిపదానà±\8dని à°¤à±\80సివà±\87యి",
+       "prefixindex-strip": "ఫలితాలà±\8dà°²à±\8b à°\89పసరà±\8dà°\97లనà±\81 à°¦à°¾à°\9aà±\81",
        "shortpages": "చిన్న పేజీలు",
        "longpages": "పొడవు పేజీలు",
        "deadendpages": "అగాధ (డెడ్ఎండ్) పేజీలు",
        "ipb-disableusertalk": "నిరోధంలో ఉండగా ఈ వాడుకరి తన స్వంత చర్చ పేజీలో మార్పుచేర్పులు చెయ్యకుండా నిరోధించు",
        "ipb-change-block": "ఈ అమరికలతో వాడుకరిని పునర్నిరోధించు",
        "ipb-confirm": "నిరోధాన్ని ధృవపరచండి",
+       "ipb-sitewide": "సైట్ వ్యాప్తంగా",
+       "ipb-partial": "పాక్షికం",
+       "ipb-type-label": "రకం",
+       "ipb-pages-label": "పేజీలు",
        "badipaddress": "సరైన ఐ.పి. అడ్రసు కాదు",
        "blockipsuccesssub": "నిరోధం విజయవంతం అయింది",
        "blockipsuccesstext": "[[Special:Contributions/$1|$1]] నిరోధించబడింది.<br />\nనిరోధాల సమీక్ష కొరకు [[Special:BlockList|నిరోధాల జాబితా]] చూడండి.",
        "pageinfo-header-restrictions": "పేజీ సంరక్షణ",
        "pageinfo-header-properties": "పేజీ లక్షణాలు",
        "pageinfo-display-title": "చూపించే శీర్షిక",
+       "pageinfo-default-sort": "అప్రమేయంగా విడదీసే కీ",
        "pageinfo-length": "పేజీ నిడివి (బైట్లలో)",
        "pageinfo-article-id": "పేజీ ఐడీ",
        "pageinfo-language": "పేజీ విషయపు భాష",
        "version-libraries-description": "వివరణ",
        "version-libraries-authors": "రచయితలు",
        "redirect": "ఫైలు పేరు, వాడుకరి ఐడీ, పేజీ ఐడీ, కూర్పు ఐడీ లేదా లాగ్ ఐడీ పేరిట దారిమార్పు చెయ్యండి",
+       "redirect-summary": "ఒక దస్త్రానికి (దస్త్రం పేరు ఇవ్వాలి) కానీ, ఒక పేజీకి (రివిజన్ ఐడీ కానీ, పేజీ పేరు కానీ ఇవ్వాలి) కానీ, ఒక వాడుకరి పేరుకు కానీ (అంకెలతో కూడిన వాడుకరి ఐడీ ఇవ్వాలి), లాగ్ ఎంట్రీకి (లాగ్ ఐడీ ఇవ్వాలి) కానీ తీసుకువెళ్తుంది. వాడే పద్ధతి: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], [[{{#Special:Redirect}}/user/101]], or [[{{#Special:Redirect}}/logid/186]].",
        "redirect-submit": "వెళ్ళు",
        "redirect-lookup": "చూడు:",
        "redirect-value": "విలువ:",
        "logentry-block-block": "$1, {{GENDER:$4|$3}}ను {{GENDER:$2|నిరోధించారు}}. నిరోధ కాలం: $5 $6",
        "logentry-block-unblock": "$1 {{GENDER:$4|$3}} పై ఉన్న {{GENDER:$2|నిరోధాన్ని ఎత్తివేసారు}}",
        "logentry-block-reblock": "$1 {{GENDER:$4|$3}} యొక్క నిరోధపు కాలం తీరిపోయే వ్యవధిని $5 $6 గా సెట్టింగులను {{GENDER:$2|మార్చారు}}",
+       "logentry-partialblock-block": "{{GENDER:$4|$3}} {{PLURAL:$8}} పేజీల్లో ($7) మార్పులు చేయకుండా $1 {{GENDER:$2|నిరోధించారు}}. నిరోధించిన కాలం : $5 $6",
+       "logentry-partialblock-reblock": "{{GENDER:$4|$3}} {{PLURAL:$8}} పేజీల్లో ($7) మార్పులు చేయకుండా $1 {{GENDER:$2|నిరోధించారు}}. నిరోధించిన కాలం : $5 $6",
+       "logentry-non-editing-block-block": "$5 $6 సమయానికి నిరోధం ముగిసే వరకు {{GENDER:$4|$3}}ని $1 దిద్దుబాట్లు కాకుండా ఇతర చర్యల నుంచి {{GENDER:$2|నిరోధించారు}}",
+       "logentry-non-editing-block-reblock": "{{GENDER:$4|$3}} నిరోధాల సెట్టింగులను $1 {{GENDER:$2|మార్చారు}}. ప్రస్తుతం నిరోధ కాలపు గడువు: $5 $6.",
        "logentry-suppress-block": "$1, {{GENDER:$4|$3}}ను {{GENDER:$2|నిరోధించారు}}. నిరోధ కాలం: $5 $6",
        "logentry-suppress-reblock": "$1, {{GENDER:$4|$3}} యొక్క నిరోధాల సెట్టింగులను {{GENDER:$2|మార్చారు}}. నిరోధ కాలం: $5 $6",
        "logentry-import-upload": "$1, $3 ను దస్త్రం ఎక్కింపు ద్వారా {{GENDER:$2|దిగుమతి చేసారు}}",
        "mw-widgets-titleinput-description-redirect": "$1 కు దారిమార్పు",
        "mw-widgets-categoryselector-add-category-placeholder": "ఓ వర్గాన్ని చేర్చండి...",
        "mw-widgets-usersmultiselect-placeholder": "మరిన్ని చేర్చండి...",
+       "mw-widgets-titlesmultiselect-placeholder": "మరింత చేర్చండి...",
        "date-range-from": "తేదీ నుండి",
        "date-range-to": "తేదీ వరకు",
        "sessionprovider-generic": "$1 సెషన్లు",
        "sessionprovider-mediawiki-session-cookiesessionprovider": "కూకీ-ఆధారిత సెషన్లు",
+       "randomrootpage": "యాదృచ్ఛిక మూల పేజీ",
        "log-action-filter-block": "నిరోధపు రకం:",
        "log-action-filter-delete": "తొలగింపు రకం:",
        "log-action-filter-import": "Type of import:",
index 8c7b63a..0f6d694 100644 (file)
@@ -12,7 +12,6 @@
        "tog-underline": "Subliña ligasaun sira:",
        "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",
-       "tog-showtoolbar": "Hatudu kaixa edita",
        "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",
index e41b212..574a587 100644 (file)
@@ -26,7 +26,6 @@
        "tog-extendwatchlist": "Густариши феҳристи пайгириҳо барои нишон додани ҳамаи тағйирот, на танҳо аз ҳама охирин",
        "tog-usenewrc": "Гурӯҳбандии тағийрот бар пояи сафҳа дар тағийроти охир ва феҳристи пайгириҳо",
        "tog-numberheadings": "шуморагузори~и худкори инвонҳо",
-       "tog-showtoolbar": "Намоиши навори абзори вироиш",
        "tog-editondblclick": "Вироиш намудани саҳифаҳо ҳангоми ду карат пахш намудани тугмаи мушак",
        "tog-editsectiononrightclick": "Ба кор андохтани вироиши сарлавҳаҳои қисматҳо бо клики рост",
        "tog-watchcreations": "Саҳифаҳое, ки месозам ва парвандаҳое, ки боргузорӣ мекунам ба феҳристи пайгириҳоям афзуда шавад.",
index 7839f18..989f4fd 100644 (file)
@@ -15,7 +15,6 @@
        "tog-extendwatchlist": "Gustarişi fehristi pajgiriho baroi nişon dodani hamai taƣjirotho, na tanho az hama oxirin",
        "tog-usenewrc": "Az taƣjiroti oxiri gustarişjofta istifoda bared(ÇavaSkript lozim ast)",
        "tog-numberheadings": "şumoraguzori~i xudkori invonho",
-       "tog-showtoolbar": "Namoişi navori abzori viroiş (JavaScript)",
        "tog-editondblclick": "Viroiş namudani sahifaho hangomi du karat paxş namudani tugmai muşak (JavaScript)",
        "tog-editsectiononrightclick": "Ba kor andoxtani viroişi sarlavhahoi qismatho bo kliki rost (ÇavaSkript)",
        "tog-watchcreations": "Doxil namudani sahifahoe, ki man soxtaam ba fehristi nazaroti man",
index 17e1956..90b9c4d 100644 (file)
                ]
        },
        "tog-underline": "การขีดเส้นใต้ลิงก์:",
-       "tog-hideminor": "à¸\8bà¹\88อà¸\99à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¹\80ลà¹\87à¸\81à¸\99à¹\89อยà¹\83à¸\99หà¸\99à¹\89าà¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87ลà¹\88าสุà¸\94",
+       "tog-hideminor": "ซ่อนการแก้ไขเล็กน้อยในหน้าเปลี่ยนแปลงล่าสุด",
        "tog-hidepatrolled": "ซ่อนการแก้ไขที่ตรวจสอบแล้วในหน้าปรับปรุงล่าสุด",
        "tog-newpageshidepatrolled": "ซ่อนหน้าที่ตรวจสอบแล้วในรายการหน้าใหม่",
        "tog-hidecategorization": "ซ่อนการจัดหมวดหมู่หน้า",
        "tog-extendwatchlist": "ขยายรายการเฝ้าดูให้แสดงการเปลี่ยนแปลงทั้งหมด ไม่เพียงการเปลี่ยนแปลงล่าสุด",
-       "tog-usenewrc": "à¸\88ัà¸\94à¸\81ลุà¹\88มà¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87à¹\81à¸\9aà¹\88à¸\87à¸\95ามหà¸\99à¹\89าà¹\83à¸\99รายà¸\81ารà¸\9bรัà¸\9aà¸\9bรุงล่าสุดและรายการเฝ้าดู",
+       "tog-usenewrc": "à¸\88ัà¸\94à¸\81ลุà¹\88มà¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87à¹\81à¸\9aà¹\88à¸\87à¸\95ามหà¸\99à¹\89าà¹\83à¸\99รายà¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลงล่าสุดและรายการเฝ้าดู",
        "tog-numberheadings": "กำหนดเลขพาดหัวอัตโนมัติ",
-       "tog-showtoolbar": "แสดงแถบเครื่องมือแก้ไข",
        "tog-editondblclick": "แก้ไขหน้าเมื่อคลิกสองครั้ง",
        "tog-editsectiononrightclick": "เปิดใช้งานการแก้ไขส่วนโดยคลิกขวาที่ชื่อเรื่องของส่วนนั้น",
        "tog-watchcreations": "เพิ่มหน้าที่ฉันสร้างและไฟล์ที่ฉันอัปโหลดเข้ารายการเฝ้าดู",
@@ -63,9 +62,9 @@
        "tog-watchlisthideown": "ซ่อนการแก้ไขของฉันจากรายการเฝ้าดู",
        "tog-watchlisthidebots": "ซ่อนการแก้ไขของบอตจากรายการเฝ้าดู",
        "tog-watchlisthideminor": "ซ่อนการแก้ไขเล็กน้อยจากรายการเฝ้าดู",
-       "tog-watchlisthideliu": "à¸\8bà¹\88อà¸\99à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¹\82à¸\94ยà¸\9cูà¹\89à¹\83à¸\8aà¹\89ลà¹\87อà¸\81อิà¸\99จากรายการเฝ้าดู",
+       "tog-watchlisthideliu": "à¸\8bà¹\88อà¸\99à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¹\82à¸\94ยà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\97ีà¹\88à¹\80à¸\82à¹\89าสูà¹\88ระà¸\9aà¸\9aจากรายการเฝ้าดู",
        "tog-watchlistreloadautomatically": "โหลดรายการเฝ้าดูใหม่อัตโนมัติเมื่อใดที่มีการเปลี่ยนตัวกรอง (ต้องการจาวาสคริปต์)",
-       "tog-watchlistunwatchlinks": "à¹\80à¸\9eิà¹\88มลิà¸\87à¸\81à¹\8cà¹\80ลิà¸\81à¹\80à¸\9dà¹\89าà¸\94ู/à¹\80à¸\9dà¹\89าà¸\94ูà¹\82à¸\94ยà¸\95รà¸\87à¹\80à¸\82à¹\89าหà¸\99à¹\88วยรายà¸\81ารà¹\80à¸\9dà¹\89าà¸\94ู (ต้องการจาวาสคริปต์เพื่อเปิดปิดการใช้งาน)",
+       "tog-watchlistunwatchlinks": "à¹\80à¸\9eิà¹\88มà¹\80à¸\84รืà¹\88อà¸\87หมายà¹\80ลิà¸\81à¹\80à¸\9dà¹\89าà¸\94ู/à¹\80à¸\9dà¹\89าà¸\94ูà¹\82à¸\94ยà¸\95รà¸\87 ({{int:Watchlist-unwatch}}/{{int:Watchlist-unwatch-undo}}) à¸¥à¸\87à¹\83à¸\99หà¸\99à¹\89าà¸\97ีà¹\88à¹\80à¸\9dà¹\89าà¸\94ูà¸\97ีà¹\88มีà¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87 (ต้องการจาวาสคริปต์เพื่อเปิดปิดการใช้งาน)",
        "tog-watchlisthideanons": "ซ่อนการแก้ไขโดยผู้ใช้นิรนามจากรายการเฝ้าดู",
        "tog-watchlisthidepatrolled": "ซ่อนการแก้ไขที่ตรวจสอบแล้วจากรายการเฝ้าดู",
        "tog-watchlisthidecategorization": "ซ่อนการจัดหมวดหมู่หน้า",
        "tool-link-userrights-readonly": "ดูกลุ่ม{{GENDER:$1|ผู้ใช้}}",
        "tool-link-emailuser": "ส่งอีเมลหา{{GENDER:$1|ผู้ใช้}}นี้",
        "imagepage": "ดูหน้าไฟล์",
-       "mediawikipage": "à¸\94ูหà¸\99à¹\89าสาร",
+       "mediawikipage": "à¸\94ูหà¸\99à¹\89าà¸\82à¹\89อà¸\84วาม",
        "templatepage": "ดูหน้าแม่แบบ",
        "viewhelppage": "ดูหน้าคำอธิบาย",
        "categorypage": "ดูหน้าหมวดหมู่",
        "youhavenewmessages": "คุณมี$1 ($2)",
        "youhavenewmessagesfromusers": "คุณมี $1จาก{{PLURAL:$3|ผู้ใช้คนอื่น|ผู้ใช้ $3 คน}} ($2)",
        "youhavenewmessagesmanyusers": "คุณมี $1จากผู้ใช้หลายคน ($2)",
-       "newmessageslinkplural": "$1 สารใหม่",
+       "newmessageslinkplural": "ข้อความใหม่ $1 ข้อความ",
        "newmessagesdifflinkplural": "$1 การเปลี่ยนแปลงล่าสุด",
-       "youhavenewmessagesmulti": "à¸\84ุà¸\93มีสารใหม่ที่ $1",
+       "youhavenewmessagesmulti": "à¸\84ุà¸\93มีà¸\82à¹\89อà¸\84วามใหม่ที่ $1",
        "editsection": "แก้ไข",
        "editold": "แก้ไข",
        "viewsourceold": "ดูโค้ด",
        "nstab-special": "หน้าพิเศษ",
        "nstab-project": "หน้าโครงการ",
        "nstab-image": "ไฟล์",
-       "nstab-mediawiki": "สาร",
+       "nstab-mediawiki": "à¸\82à¹\89อà¸\84วาม",
        "nstab-template": "แม่แบบ",
        "nstab-help": "หน้าคำอธิบาย",
        "nstab-category": "หมวดหมู่",
        "databaseerror-query": "คำสั่ง: $1",
        "databaseerror-function": "ฟังก์ชัน: $1",
        "databaseerror-error": "ข้อผิดพลาด: $1",
+       "transaction-duration-limit-exceeded": "เพื่อเป็นการหลีกเลี่ยงการทำซ้ำไม่ให้มีความล่าช้าสูง การดำเนินการนี้ถูกยกเลิกเนื่องจากระยะเวลาในการเขียน ($1) สูงเกินกว่าระยะเวลาที่จำกัดไว้ $2 วินาที\nหากคุณกำลังเปลี่ยนแปลงหลายรายการในครั้งเดียว ให้ลองทำการดำเนินการที่เล็กกว่าแทน",
        "laggedslavemode": "<strong>คำเตือน:</strong> หน้านี้อาจไม่มีการปรับข้อมูลล่าสุด",
        "readonly": "ฐานข้อมูลถูกล็อก",
        "enterlockreason": "ใส่เหตุแห่งการล็อก ทั้งเวลาที่คาดว่าจะปลดล็อก",
        "badarticleerror": "ไม่สามารถดำเนินปฏิบัติการนี้ในหน้านี้",
        "cannotdelete": "ไม่สามารถลบหน้าหรือไฟล์ \"$1\" \nผู้อื่นอาจลบไปแล้ว",
        "cannotdelete-title": "ไม่สามารถลบหน้า ''$1''",
+       "delete-scheduled": "มีการกำหนดเวลาลบหน้า \"$1\" แล้ว\nโปรดรอสักครู่",
        "delete-hook-aborted": "การลบถูกฮุกยกเลิก\nโดยไม่มีคำชี้แจง",
        "no-null-revision": "ไม่สามารถสร้างรุ่นแก้ไขว่างใหม่ของหน้า \"$1\"",
        "badtitle": "ใช้ชื่อเรื่องนี้ไม่ได้",
        "protectedpagetext": "หน้านี้ถูกล็อกเพื่อป้องกันการแก้ไขหรือปฏิบัติการอื่น",
        "viewsourcetext": "คุณสามารถดูและคัดลอกโค้ดของหน้านี้",
        "viewyourtext": "คุณสามารถดูและคัดลอกต้นฉบับ<strong>การแก้ไขของคุณ</strong>มาหน้านี้ได้",
-       "protectedinterface": "หà¸\99à¹\89าà¸\99ีà¹\89à¹\80à¸\9bà¹\87à¸\99à¸\82à¹\89อà¸\84วามสà¹\88วà¸\99à¸\95à¹\88อà¸\9bระสาà¸\99สำหรับซอฟต์แวร์บนวิกินี้ และถูกป้องกันมิให้แก้ไขเพื่อป้องกันการก่อกวน\nหากต้องการเพิ่มหรือเปลี่ยนแปลงการแปลสำหรับทุกวิกิ โปรดใช้ [https://translatewiki.net/ translatewiki.net] โครงการแปลมีเดียวิกิเป็นภาษาถิ่น",
-       "editinginterface": "<strong>à¸\84ำà¹\80à¸\95ือà¸\99:</strong> à¸«à¸\99à¹\89าà¸\97ีà¹\88à¸\84ุà¸\93à¸\81ำลัà¸\87à¹\81à¸\81à¹\89à¹\84à¸\82à¹\80à¸\9bà¹\87à¸\99หà¸\99à¹\89าสำหรัà¸\9aà¸\81ำหà¸\99à¸\94à¸\82à¹\89อà¸\84วามà¹\83à¸\99สà¹\88วà¸\99à¹\81สà¸\94à¸\87à¸\9cลà¸\82อà¸\87à¸\8bอà¸\9fà¸\95à¹\8cà¹\81วรà¹\8c\nà¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87หà¸\99à¹\89าà¸\99ีà¹\89à¸\88ะมีà¸\9cลà¸\95à¹\88อà¸\81ารà¹\81สà¸\94à¸\87à¸\9cลà¸\82อà¸\87สà¹\88วà¸\99à¸\95à¹\88อà¸\9bระสาà¸\99ผู้ใช้ที่ปรากฏแก่ผู้ใช้อื่นบนวิกินี้",
+       "protectedinterface": "หà¸\99à¹\89าà¸\99ีà¹\89à¹\80à¸\9bà¹\87à¸\99à¸\82à¹\89อà¸\84วามอิà¸\99à¹\80à¸\95อรà¹\8cà¹\80à¸\9fà¸\8bสำหรับซอฟต์แวร์บนวิกินี้ และถูกป้องกันมิให้แก้ไขเพื่อป้องกันการก่อกวน\nหากต้องการเพิ่มหรือเปลี่ยนแปลงการแปลสำหรับทุกวิกิ โปรดใช้ [https://translatewiki.net/ translatewiki.net] โครงการแปลมีเดียวิกิเป็นภาษาถิ่น",
+       "editinginterface": "<strong>à¸\84ำà¹\80à¸\95ือà¸\99:</strong> à¸«à¸\99à¹\89าà¸\97ีà¹\88à¸\84ุà¸\93à¸\81ำลัà¸\87à¹\81à¸\81à¹\89à¹\84à¸\82à¹\80à¸\9bà¹\87à¸\99หà¸\99à¹\89าสำหรัà¸\9aà¸\81ำหà¸\99à¸\94à¸\82à¹\89อà¸\84วามà¹\83à¸\99อิà¸\99à¹\80à¸\95อรà¹\8cà¹\80à¸\9fà¸\8bà¸\82อà¸\87à¸\8bอà¸\9fà¸\95à¹\8cà¹\81วรà¹\8c\nà¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87หà¸\99à¹\89าà¸\99ีà¹\89à¸\88ะมีà¸\9cลà¸\95à¹\88อà¸\81ารà¹\81สà¸\94à¸\87à¸\9cลà¸\82อà¸\87อิà¸\99à¹\80à¸\95อรà¹\8cà¹\80à¸\9fà¸\8bผู้ใช้ที่ปรากฏแก่ผู้ใช้อื่นบนวิกินี้",
        "translateinterface": "ในการเพิ่มหรือเปลี่ยนแปลงคำแปลสำหรับทุกวิกิ โปรดใช้ [https://translatewiki.net/ translatewiki.net] โครงการแปลเป็นภาษาถิ่นของมีเดียวิกิ",
        "cascadeprotected": "หน้านี้ถูกป้องกันมิให้แก้ไข เพราะถูกรวมอยู่ใน{{PLURAL:$1|page, which is|หน้าต่อไปนี้}} ซึ่งถูกล็อกโดยเปิดตัวเลือก \"ต่อเรียง\":\n$2",
        "namespaceprotected": "คุณไม่มีสิทธิแก้ไขหน้าในเนมสเปซ <strong>$1</strong>",
        "invalidtitle-knownnamespace": "ชื่อเรื่องที่มีเนมสเปซ \"$2\" กับข้อความ \"$3\" ไม่ถูกต้อง",
        "invalidtitle-unknownnamespace": "ชื่อเรื่องที่ไม่ทราบเนมสเปซหมายเลข $1 กับข้อความ \"$2\" ไม่ถูกต้อง",
        "exception-nologin": "ยังไม่ได้เข้าสู่ระบบ",
-       "exception-nologin-text": "à¹\82à¸\9bรà¸\94ลà¹\87อà¸\81อิà¸\99à¹\80à¸\9eืà¹\88อสามารà¸\96à¹\80à¸\82à¹\89าà¸\96ึà¸\87หà¸\99à¹\89าหรือà¸\9bà¸\8fิà¸\9aัà¸\95ิà¸\81ารà¸\99ี้",
+       "exception-nologin-text": "à¹\82à¸\9bรà¸\94à¹\80à¸\82à¹\89าสูà¹\88ระà¸\9aà¸\9aà¹\80à¸\9eืà¹\88อà¹\83หà¹\89สามารà¸\96à¹\80à¸\82à¹\89าà¸\96ึà¸\87หà¸\99à¹\89าหรือà¸\9bà¸\8fิà¸\9aัà¸\95ิà¸\81ารà¸\99ีà¹\89à¹\84à¸\94้",
        "exception-nologin-text-manual": "โปรด$1เพื่อสามารถเข้าถึงหน้าหรือปฏิบัติการนี้",
        "virus-badscanner": "โครงแบบผิดพลาด: ไม่รู้จักตัวสแกนไวรัส: <em>$1</em>",
        "virus-scanfailed": "การสแกนล้มเหลว (โค้ด $1)",
        "virus-unknownscanner": "โปรแกรมป้องกันไวรัสที่ไม่รู้จัก:",
-       "logouttext": "<strong>à¸\84ุà¸\93ลà¹\87อà¸\81à¹\80อาà¸\95à¹\8cà¹\81ลà¹\89ว</strong>\n\nหมายà¹\80หà¸\95ุวà¹\88า à¸\9aาà¸\87หà¸\99à¹\89าอาà¸\88ยัà¸\87à¹\81สà¸\94à¸\87à¸\9cลà¹\80สมือà¸\99วà¹\88าà¸\84ุà¸\93ยัà¸\87ลà¹\87อà¸\81อิà¸\99อยูà¹\88 à¸\88à¸\99à¸\81วà¹\88าà¸\84ุà¸\93ล้างแคชเบราว์เซอร์ของคุณ",
-       "cannotlogoutnow-title": "à¹\84มà¹\88สามารà¸\96ลà¹\87อà¸\81à¹\80อาà¸\95à¹\8cà¹\84à¸\94à¹\89à¸\82à¸\93ะนี้",
-       "cannotlogoutnow-text": "à¹\84มà¹\88สามารà¸\96ลà¹\87อà¸\81à¹\80อาà¸\95à¹\8cได้เมื่อกำลังใช้ $1",
+       "logouttext": "<strong>à¸\84ุà¸\93ออà¸\81à¸\88าà¸\81ระà¸\9aà¸\9aà¹\81ลà¹\89ว</strong>\n\nสัà¸\87à¹\80à¸\81à¸\95วà¹\88าà¸\9aาà¸\87หà¸\99à¹\89าอาà¸\88ยัà¸\87à¹\81สà¸\94à¸\87à¸\9cลà¹\80สมือà¸\99วà¹\88าà¸\84ุà¸\93ยัà¸\87à¹\80à¸\82à¹\89าสูà¹\88ระà¸\9aà¸\9aอยูà¹\88 à¸\88à¸\99à¸\81วà¹\88าà¸\84ุà¸\93à¸\88ะล้างแคชเบราว์เซอร์ของคุณ",
+       "cannotlogoutnow-title": "à¹\84มà¹\88สามารà¸\96ออà¸\81à¸\88าà¸\81ระà¸\9aà¸\9aà¹\84à¸\94à¹\89à¸\95อà¸\99นี้",
+       "cannotlogoutnow-text": "à¹\84มà¹\88สามารà¸\96ออà¸\81à¸\88าà¸\81ระà¸\9aà¸\9aได้เมื่อกำลังใช้ $1",
        "welcomeuser": "ยินดีต้อนรับ $1!",
        "welcomecreation-msg": "สร้างบัญชีของคุณแล้ว\nคุณสามารถเปลี่ยน[[Special:Preferences|การตั้งค่า]] {{SITENAME}} ของคุณได้หากต้องการ",
        "yourname": "ชื่อผู้ใช้:",
        "userlogin-signwithsecure": "ใช้การเชื่อมต่อที่ปลอดภัย",
        "cannotlogin-title": "ไม่สามารถเข้าสู่ระบบได้",
        "cannotlogin-text": "ไม่สามารถเข้าสู่ระบบได้",
-       "cannotloginnow-title": "à¹\84มà¹\88สามารà¸\96ลà¹\87อà¸\81à¹\80อาà¸\95à¹\8cà¹\84à¸\94à¹\89à¸\82à¸\93ะนี้",
-       "cannotloginnow-text": "à¹\84มà¹\88สามารà¸\96ลà¹\87อà¸\81à¹\80อาà¸\95à¹\8cได้เมื่อกำลังใช้ $1",
+       "cannotloginnow-title": "à¹\84มà¹\88สามารà¸\96à¹\80à¸\82à¹\89าสูà¹\88ระà¸\9aà¸\9aà¹\84à¸\94à¹\89à¸\95อà¸\99นี้",
+       "cannotloginnow-text": "à¹\84มà¹\88สามารà¸\96à¹\80à¸\82à¹\89าสูà¹\88ระà¸\9aà¸\9aได้เมื่อกำลังใช้ $1",
        "cannotcreateaccount-title": "ไม่สามารถสร้างบัญชีได้",
        "cannotcreateaccount-text": "การสร้างบัญชีโดยตรงไม่ได้เปิดใช้งานบนวิกินี้",
        "yourdomainname": "โดเมนของคุณ:",
        "externaldberror": "มีข้อผิดพลาดของฐานข้อมูลการพิสูจน์ตัวจริง หรือคุณไม่ได้รับอนุญาตให้ปรับบัญชีภายนอกของคุณ",
        "login": "เข้าสู่ระบบ",
        "login-security": "ยืนยันตัวตนของคุณ",
-       "nav-login-createaccount": "ลà¹\87อà¸\81อิà¸\99 / สร้างบัญชี",
+       "nav-login-createaccount": "à¹\80à¸\82à¹\89าสูà¹\88ระà¸\9aà¸\9a / สร้างบัญชี",
        "logout": "ออกจากระบบ",
        "userlogout": "ออกจากระบบ",
        "notloggedin": "ยังไม่ได้เข้าสู่ระบบ",
        "createacct-realname": "ชื่อจริง (เลือกไม่ใส่ได้)",
        "createacct-reason": "เหตุผล",
        "createacct-reason-ph": "เหตุใดคุณจึงสร้างอีกบัญชี",
-       "createacct-reason-help": "สารที่แสดงในปูมการสร้างบัญชี",
+       "createacct-reason-help": "à¸\82à¹\89อà¸\84วามที่แสดงในปูมการสร้างบัญชี",
        "createacct-submit": "สร้างบัญชีของคุณ",
        "createacct-another-submit": "สร้างบัญชี",
        "createacct-continue-submit": "สร้างบัญชีต่อ",
        "badretype": "รหัสผ่านที่คุณกรอกไม่ตรง",
        "usernameinprogress": "การสร้างบัญชีสำหรับชื่อผู้ใช้นี้อยู่ระหว่างดำเนินการแล้ว\nโปรดรอสักครู่",
        "userexists": "ชื่อผู้ใช้ที่กรอกมีผู้ใช้แล้ว \nกรุณาเลือกชื่ออื่น",
-       "loginerror": "ลà¹\87อà¸\81อิà¸\99à¸\9cิà¸\94à¸\9eลาà¸\94",
+       "loginerror": "à¸\82à¹\89อà¸\9cิà¸\94à¸\9eลาà¸\94à¹\83à¸\99à¸\81ารà¹\80à¸\82à¹\89าสูà¹\88ระà¸\9aà¸\9a",
        "createacct-error": "การสร้างบัญชีผิดพลาด",
        "createaccounterror": "ไม่สามารถสร้างบัญชี: $1",
-       "nocookiesnew": "สรà¹\89าà¸\87à¸\9aัà¸\8dà¸\8aีà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¹\81ลà¹\89ว à¹\81à¸\95à¹\88ยัà¸\87à¹\84มà¹\88à¹\84à¸\94à¹\89ลà¹\87อà¸\81อิà¸\99 \n{{SITENAME}} à¹\83à¸\8aà¹\89à¸\84ุà¸\81à¸\81ีà¹\89à¹\80à¸\9eืà¹\88อลà¹\87อà¸\81อิà¸\99à¸\9cูà¹\89à¹\83à¸\8aà¹\89\nà¸\84ุà¸\93à¸\9bิà¸\94à¹\83à¸\8aà¹\89à¸\87าà¸\99à¸\84ุà¸\81à¸\81ีà¹\89\nà¹\82à¸\9bรà¸\94à¹\80à¸\9bิà¸\94à¹\83à¸\8aà¹\89à¸\87าà¸\99 à¹\81ลà¹\89วลà¹\87อà¸\81อิà¸\99พร้อมชื่อผู้ใช้และรหัสผ่านใหม่ของคุณ",
+       "nocookiesnew": "สรà¹\89าà¸\87à¸\9aัà¸\8dà¸\8aีà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¹\81ลà¹\89ว à¹\81à¸\95à¹\88ยัà¸\87à¹\84มà¹\88à¹\84à¸\94à¹\89à¹\80à¸\82à¹\89าสูà¹\88ระà¸\9aà¸\9a \n{{SITENAME}} à¹\83à¸\8aà¹\89à¸\84ุà¸\81à¸\81ีà¹\89à¹\80à¸\9eืà¹\88อà¸\99ำà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¹\80à¸\82à¹\89าสูà¹\88ระà¸\9aà¸\9a\nà¸\84ุà¸\93à¸\9bิà¸\94à¹\83à¸\8aà¹\89à¸\87าà¸\99à¸\84ุà¸\81à¸\81ีà¹\89\nà¹\82à¸\9bรà¸\94à¹\80à¸\9bิà¸\94à¹\83à¸\8aà¹\89à¸\87าà¸\99 à¹\81ลà¹\89วà¹\80à¸\82à¹\89าสูà¹\88ระà¸\9aà¸\9aพร้อมชื่อผู้ใช้และรหัสผ่านใหม่ของคุณ",
        "nocookieslogin": "{{SITENAME}} ใช้คุกกี้เพื่อล็อกอินผู้ใช้\nคุณปิดใช้งานคุกกี้\nกรุณาเปิดใช้งานและลองอีกครั้ง",
        "nocookiesfornew": "บัญชีผู้ใช้ไม่ถูกสร้าง เนื่องจากเราไม่สามารถยืนยันต้นทาง\nกรุณาทำให้แน่ใจว่าคุณได้เปิดใช้งานคุกกี้ โหลดหน้านี้ใหม่และลองอีกครั้ง",
        "createacct-loginerror": "บัญชีผู้ใช้ถูกสร้างสำเร็จแล้ว แต่คุณไม่สามารถเข้าสู่ระบบได้โดยอัตโนมัติ โปรด[[Special:UserLogin|เข้าสู่ระบบด้วยตนเอง]]",
        "noname": "คุณไม่ได้ใส่ชื่อผู้ใช้ที่ถูกต้อง",
        "loginsuccesstitle": "เข้าสู่ระบบแล้ว",
-       "loginsuccess": "<strong>à¸\82à¸\93ะà¸\99ีà¹\89à¸\84ุà¸\93ลà¹\87อà¸\81อิà¸\99สูà¹\88 {{SITENAME}} à¹\83à¸\99à¸\8aืà¹\88อ \"$1\"</strong>",
+       "loginsuccess": "<strong>à¸\95อà¸\99à¸\99ีà¹\89à¸\84ุà¸\93à¹\80à¸\82à¹\89าสูà¹\88ระà¸\9aà¸\9a {{SITENAME}} à¹\83à¸\99à¸\8aืà¹\88อ \"$1\" à¹\81ลà¹\89ว</strong>",
        "nosuchuser": "ไม่มีผู้ใช้ชื่อ \"$1\"\nชื่อผู้ใช้นั้นไวต่ออักษรใหญ่เล็ก\nกรุณาตรวจการสะกดอีกครั้ง หรือ[[Special:CreateAccount|สร้างบัญชีใหม่]]",
        "nosuchusershort": "ไม่มีผู้ใช้ชื่อ \"$1\" \nกรุณาตรวจสอบการสะกด",
        "nouserspecified": "คุณต้องระบุชื่อผู้ใช้",
-       "login-userblocked": "à¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\99ีà¹\89à¸\96ูà¸\81à¸\9aลà¹\87อà¸\81 à¹\84มà¹\88อà¸\99ุà¸\8dาà¸\95à¹\83หà¹\89ลà¹\87อà¸\81อิà¸\99",
+       "login-userblocked": "à¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\99ีà¹\89à¸\96ูà¸\81à¸\9aลà¹\87อà¸\81 à¹\84มà¹\88อà¸\99ุà¸\8dาà¸\95à¹\83หà¹\89à¹\80à¸\82à¹\89าสูà¹\88ระà¸\9aà¸\9a",
        "wrongpassword": "กรอกชื่อผู้ใช้หรือรหัสผ่านไม่ถูกต้อง \nโปรดลองอีกครั้ง",
        "wrongpasswordempty": "รหัสผ่านที่กรอกว่าง\nโปรดลองอีกครั้ง",
        "passwordtooshort": "รหัสผ่านต้องมีอย่างน้อย $1 อักขระ",
        "password-login-forbidden": "ห้ามใช้ชื่อผู้ใช้และรหัสผ่านนี้",
        "mailmypassword": "ตั้งรหัสผ่านใหม่",
        "passwordremindertitle": "รหัสผ่านชั่วคราวใหม่สำหรับ {{SITENAME}}",
-       "passwordremindertext": "à¸\9cูà¹\89à¹\83à¸\94à¸\9cูà¹\89หà¸\99ึà¹\88à¸\87 (à¸\88าà¸\81à¹\80ลà¸\82à¸\97ีà¹\88อยูà¹\88à¹\84อà¸\9eี $1) à¸\82อà¹\83หà¹\89สà¹\88à¸\87รหัสà¸\9cà¹\88าà¸\99à¹\83หมà¹\88à¸\82อà¸\87 {{SITENAME}} ($4) à¸£à¸«à¸±à¸ªà¸\9cà¹\88าà¸\99à¸\8aัà¹\88วà¸\84ราวสำหรัà¸\9aà¸\9cูà¹\89à¹\83à¸\8aà¹\89 \"$2\" à¸\96ูà¸\81สรà¹\89าà¸\87à¸\82ึà¹\89à¸\99 à¹\81ละà¸\81ำหà¸\99à¸\94à¹\80à¸\9bà¹\87à¸\99 \"$3\" à¸«à¸²à¸\81à¹\80à¸\9bà¹\87à¸\99à¹\80à¸\88à¸\95à¸\99าà¸\82อà¸\87à¸\84ุà¸\93 à¸\84ุà¸\93à¸\88ำà¸\95à¹\89อà¸\87ลà¹\87อà¸\81อิà¸\99à¹\81ละà¹\80ลือà¸\81รหัสà¸\9cà¹\88าà¸\99à¹\83หมà¹\88à¹\83à¸\99à¸\82à¸\93ะà¸\99ีà¹\89 \nรหัสผ่านชั่วคราวของคุณจะหมดอายุใน $5 วัน\n\nหากเป็นบุคคลอื่นที่ขอรหัสผ่านใหม่ หรือหากคุณจำรหัสผ่านของคุณได้แล้ว และไม่ต้องการเปลี่ยนรหัสผ่านใหม่อีก คุณอาจละเลยข้อความนี้และใช้รหัสผ่านเดิมของคุณต่อไป",
+       "passwordremindertext": "à¸\9cูà¹\89à¹\83à¸\94à¸\9cูà¹\89หà¸\99ึà¹\88à¸\87 (à¸\88าà¸\81à¹\80ลà¸\82à¸\97ีà¹\88อยูà¹\88à¹\84อà¸\9eี $1) à¸\82อà¹\83หà¹\89สà¹\88à¸\87รหัสà¸\9cà¹\88าà¸\99à¹\83หมà¹\88à¸\82อà¸\87 {{SITENAME}} ($4) à¸£à¸«à¸±à¸ªà¸\9cà¹\88าà¸\99à¸\8aัà¹\88วà¸\84ราวสำหรัà¸\9aà¸\9cูà¹\89à¹\83à¸\8aà¹\89 \"$2\" à¸\96ูà¸\81สรà¹\89าà¸\87à¸\82ึà¹\89à¸\99 à¹\81ละà¸\81ำหà¸\99à¸\94à¹\80à¸\9bà¹\87à¸\99 \"$3\" à¸«à¸²à¸\81à¹\80à¸\9bà¹\87à¸\99à¹\80à¸\88à¸\95à¸\99าà¸\82อà¸\87à¸\84ุà¸\93 à¸\84ุà¸\93à¸\88ะà¸\95à¹\89อà¸\87à¹\80à¸\82à¹\89าสูà¹\88ระà¸\9aà¸\9aà¹\81ละà¹\80ลือà¸\81รหัสà¸\9cà¹\88าà¸\99à¹\83หมà¹\88à¸\97ัà¸\99à¸\97ี\nรหัสผ่านชั่วคราวของคุณจะหมดอายุใน $5 วัน\n\nหากเป็นบุคคลอื่นที่ขอรหัสผ่านใหม่ หรือหากคุณจำรหัสผ่านของคุณได้แล้ว และไม่ต้องการเปลี่ยนรหัสผ่านใหม่อีก คุณอาจละเลยข้อความนี้และใช้รหัสผ่านเดิมของคุณต่อไป",
        "noemail": "ไม่มีการบันทึกที่อยู่อีเมลสำหรับผู้ใช้ \"$1\"",
        "noemailcreate": "คุณจำต้องใส่ที่อยู่อีเมลให้ถูกต้อง",
-       "passwordsent": "รหัสà¸\9cà¹\88าà¸\99à¹\83หมà¹\88à¸\96ูà¸\81สà¹\88à¸\87à¹\84à¸\9bยัà¸\87à¸\97ีà¹\88อยูà¹\88อีà¹\80มลà¸\97ีà¹\88ลà¸\87à¸\97ะà¹\80à¸\9aียà¸\99à¹\84วà¹\89à¸\82อà¸\87 \"$1\"\nà¸\81รุà¸\93าลà¹\87อà¸\81อิà¸\99อีกครั้งหลังได้รับอีเมล",
+       "passwordsent": "รหัสà¸\9cà¹\88าà¸\99à¹\83หมà¹\88à¸\96ูà¸\81สà¹\88à¸\87à¹\84à¸\9bยัà¸\87à¸\97ีà¹\88อยูà¹\88อีà¹\80มลà¸\97ีà¹\88ลà¸\87à¸\97ะà¹\80à¸\9aียà¸\99à¹\84วà¹\89à¸\82อà¸\87 \"$1\"\nà¸\81รุà¸\93าà¹\80à¸\82à¹\89าสูà¹\88ระà¸\9aà¸\9aอีกครั้งหลังได้รับอีเมล",
        "blocked-mailpassword": "เลขที่อยู่ไอพีของคุณถูกบล็อกมิให้แก้ไข ทำให้ไม่สามารถใช้ฟังก์ชันกู้รหัสผ่าน เพื่อป้องกันการใช้ในทางที่ผิด",
        "eauthentsent": "อีเมลยืนยันถูกส่งไปยังที่อยู่อีเมลที่ระบุไว้แล้ว \nก่อนที่อีเมลอื่นจะถูกส่งไปยังบัญชีนั้น คุณต้องปฏิบัติตามคำสั่งในอีเมลเพื่อยืนยันว่าบัญชีนั้นเป็นของคุณจริง ๆ",
        "throttled-mailpassword": "อีเมลตั้งรหัสผ่านใหม่ถูกส่งไปแล้วใน $1 ชั่วโมงที่ผ่านมา \nอีเมลตั้งรหัสผ่านใหม่จะส่งไปหนึ่งครั้งต่อ $1 ชั่วโมงเท่านั้น เพื่อป้องกันการกระทำผิด",
        "accountcreated": "สร้างบัญชีแล้ว",
        "accountcreatedtext": "สร้างบัญชีผู้ใช้สำหรับ [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|พูดคุย]]) แล้ว",
        "createaccount-title": "การสร้างบัญชีสำหรับ {{SITENAME}}",
-       "createaccount-text": "มีà¸\9aาà¸\87à¸\84à¸\99สรà¹\89าà¸\87à¸\9aัà¸\8dà¸\8aีà¹\82à¸\94ยà¹\83à¸\8aà¹\89à¸\97ีà¹\88อยูà¹\88อีà¹\80มลà¸\82อà¸\87à¸\84ุà¸\93à¸\9aà¸\99 {{SITENAME}} ($4) à¹\82à¸\94ยà¹\83à¸\8aà¹\89à¸\8aืà¹\88อ \"$2\" à¹\81ละรหัสà¸\9cà¹\88าà¸\99 \"$3\" \nà¸\84ุà¸\93à¸\84วรลà¹\87อà¸\81อิà¸\99และเปลี่ยนรหัสผ่านทันที\n\nคุณอาจเพิกเฉยข้อความนี้ หากการสร้างบัญชีนี้เป็นความผิดพลาด",
+       "createaccount-text": "มีà¸\9aาà¸\87à¸\84à¸\99สรà¹\89าà¸\87à¸\9aัà¸\8dà¸\8aีà¹\82à¸\94ยà¹\83à¸\8aà¹\89à¸\97ีà¹\88อยูà¹\88อีà¹\80มลà¸\82อà¸\87à¸\84ุà¸\93à¸\9aà¸\99 {{SITENAME}} ($4) à¹\82à¸\94ยà¹\83à¸\8aà¹\89à¸\8aืà¹\88อ \"$2\" à¹\81ละรหัสà¸\9cà¹\88าà¸\99 \"$3\" \nà¸\84ุà¸\93à¸\84วรà¹\80à¸\82à¹\89าสูà¹\88ระà¸\9aà¸\9aและเปลี่ยนรหัสผ่านทันที\n\nคุณอาจเพิกเฉยข้อความนี้ หากการสร้างบัญชีนี้เป็นความผิดพลาด",
        "login-throttled": "ที่ผ่านมาคุณพยายามล็อกอินมากครั้งเกินไป\nกรุณารอ $1 ก่อนลองอีกครั้ง",
-       "login-abort-generic": "à¸\81ารลà¹\87อà¸\81อิà¸\99ของคุณไม่สำเร็จ - ล้มเลิกแล้ว",
+       "login-abort-generic": "à¸\81ารà¹\80à¸\82à¹\89าสูà¹\88ระà¸\9aà¸\9aของคุณไม่สำเร็จ - ล้มเลิกแล้ว",
        "login-migrated-generic": "บัญชีของคุณถูกย้ายแล้ว และไม่มีชื่อผู้ใช้ของคุณอยู่บนวิกินี้อีก",
        "loginlanguagelabel": "ภาษา: $1",
-       "suspicious-userlogout": "à¸\84ำà¸\82อลà¹\87อà¸\81à¹\80อาà¸\95à¹\8cของคุณถูกปฏิเสธเพราะดูเหมือนส่งมาจากเบราว์เซอร์หรือพร็อกซีแคชที่เสีย",
+       "suspicious-userlogout": "à¸\84ำà¸\82อออà¸\81à¸\88าà¸\81ระà¸\9aà¸\9aของคุณถูกปฏิเสธเพราะดูเหมือนส่งมาจากเบราว์เซอร์หรือพร็อกซีแคชที่เสีย",
        "createacct-another-realname-tip": "ไม่จำเป็นต้องใส่ชื่อจริง\nหากคุณเลือกใส่ชื่อจริง จะใช้เพื่อแสดงที่มาสำหรับงานของตน",
        "pt-login": "เข้าสู่ระบบ",
        "pt-login-button": "เข้าสู่ระบบ",
        "user-mail-no-addy": "พยายามส่งอีเมลโดยไม่มีที่อยู่อีเมล",
        "user-mail-no-body": "พยายามส่งอีเมลที่มีเนื้อหาว่างหรือสั้นอย่างไร้เหตุผล",
        "changepassword": "เปลี่ยนรหัสผ่าน",
-       "resetpass_announce": "à¸\84ุà¸\93à¸\95à¹\89อà¸\87à¸\95ัà¹\89à¸\87รหัสà¸\9cà¹\88าà¸\99à¹\83หมà¹\88à¸\88ึà¸\87à¸\88ะà¹\80สรà¹\87à¸\88สิà¹\89à¸\99à¸\81ารลà¹\87อà¸\81อิà¸\99",
+       "resetpass_announce": "à¸\84ุà¸\93à¸\95à¹\89อà¸\87à¸\95ัà¹\89à¸\87รหัสà¸\9cà¹\88าà¸\99à¹\83หมà¹\88à¹\80à¸\9eืà¹\88อà¹\83หà¹\89à¸\81ารà¹\80à¸\82à¹\89าสูà¹\88ระà¸\9aà¸\9aà¹\80สรà¹\87à¸\88สมà¸\9aูรà¸\93à¹\8c",
        "resetpass_text": "<!-- เพิ่มข้อความที่นี่ -->",
        "resetpass_header": "เปลี่ยนรหัสผ่านบัญชี",
        "oldpassword": "รหัสผ่านเดิม:",
        "newpassword": "รหัสผ่านใหม่:",
        "retypenew": "พิมพ์รหัสผ่านใหม่อีกครั้ง:",
-       "resetpass_submit": "à¸\95ัà¹\89à¸\87รหัสà¸\9cà¹\88าà¸\99à¹\81ละลà¹\87อà¸\81อิà¸\99",
+       "resetpass_submit": "à¸\95ัà¹\89à¸\87รหัสà¸\9cà¹\88าà¸\99à¹\81ละà¹\80à¸\82à¹\89าสูà¹\88ระà¸\9aà¸\9a",
        "changepassword-success": "เปลี่ยนรหัสผ่านของคุณสำเร็จ!",
-       "changepassword-throttled": "ลà¹\88าสุà¸\94à¸\84ุà¸\93à¸\9eยายามลà¹\87อà¸\81อิà¸\99มาà¸\81à¸\84รัà¹\89à¸\87à¹\80à¸\81ิà¸\99à¹\84à¸\9b\nà¸\81รุà¸\93ารอ $1 à¸\81à¹\88อà¸\99ลองอีกครั้ง",
+       "changepassword-throttled": "ลà¹\88าสุà¸\94à¸\84ุà¸\93à¸\9eยายามà¹\80à¸\82à¹\89าสูà¹\88ระà¸\9aà¸\9aหลายà¸\84รัà¹\89à¸\87à¹\80à¸\81ิà¸\99à¹\84à¸\9b\nà¸\81รุà¸\93ารอà¹\80à¸\9bà¹\87à¸\99à¹\80วลา $1à¹\81ลà¹\89วà¸\88ึà¸\87ลองอีกครั้ง",
        "botpasswords": "รหัสผ่านบอต",
-       "botpasswords-summary": "<em>รหัสà¸\9cà¹\88าà¸\99à¸\9aอà¸\95</em>อà¸\99ุà¸\8dาà¸\95à¸\81ารà¹\80à¸\82à¹\89าà¸\96ึà¸\87à¹\83หà¹\89à¸\81ัà¸\9aà¸\9aัà¸\8dà¸\8aีà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\9cà¹\88าà¸\99à¸\97าà¸\87 API à¹\82à¸\94ยà¹\84มà¹\88à¸\95à¹\89อà¸\87à¹\83à¸\8aà¹\89à¹\83à¸\9aรัà¸\9aรอà¸\87à¸\81ารลà¹\87อà¸\81อิà¸\99หลัà¸\81à¸\82อà¸\87à¸\9aัà¸\8dà¸\8aีà¸\99ีà¹\89 à¸ªà¸´à¸\97à¸\98ิà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¹\80มืà¹\88อลà¹\87อà¸\81อิà¸\99ด้วยรหัสผ่านบอตอาจถูกจำกัด\n\nถ้าคุณไม่ทราบว่าทำไมคุณอาจต้องการดำเนินการนี้ คุณไม่ควรดำเนินการนี้ และไม่ควรให้ผู้ใดขอให้คุณสร้างรหัสผ่านไว้ให้พวกเขาเหล่านั้น",
+       "botpasswords-summary": "<em>รหัสà¸\9cà¹\88าà¸\99à¸\9aอà¸\95</em>อà¸\99ุà¸\8dาà¸\95à¸\81ารà¹\80à¸\82à¹\89าà¸\96ึà¸\87à¹\83หà¹\89à¸\81ัà¸\9aà¸\9aัà¸\8dà¸\8aีà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\9cà¹\88าà¸\99à¸\97าà¸\87 API à¹\82à¸\94ยà¹\84มà¹\88à¸\95à¹\89อà¸\87à¹\83à¸\8aà¹\89à¹\83à¸\9aรัà¸\9aรอà¸\87à¸\81ารà¹\80à¸\82à¹\89าสูà¹\88ระà¸\9aà¸\9aหลัà¸\81à¸\82อà¸\87à¸\9aัà¸\8dà¸\8aีà¸\99ีà¹\89 à¸ªà¸´à¸\97à¸\98ิà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¹\80มืà¹\88อà¹\80à¸\82à¹\89าสูà¹\88ระà¸\9aà¸\9aด้วยรหัสผ่านบอตอาจถูกจำกัด\n\nถ้าคุณไม่ทราบว่าทำไมคุณอาจต้องการดำเนินการนี้ คุณไม่ควรดำเนินการนี้ และไม่ควรให้ผู้ใดขอให้คุณสร้างรหัสผ่านไว้ให้พวกเขาเหล่านั้น",
        "botpasswords-disabled": "รหัสผ่านสำหรับบอตถูกปิดใช้",
-       "botpasswords-no-central-id": "หาà¸\81à¸\95à¹\89อà¸\87à¸\81ารà¹\83à¸\8aà¹\89รหัสà¸\9cà¹\88าà¸\99à¸\9aอà¸\95 à¸\84ุà¸\93à¸\95à¹\89อà¸\87ลà¹\87อà¸\81อิà¸\99ในชื่อบัญชีผู้ใช้ที่เป็นกลาง",
+       "botpasswords-no-central-id": "หาà¸\81à¸\95à¹\89อà¸\87à¸\81ารà¹\83à¸\8aà¹\89รหัสà¸\9cà¹\88าà¸\99à¸\9aอà¸\95 à¸\84ุà¸\93à¸\95à¹\89อà¸\87à¹\80à¸\82à¹\89าสูà¹\88ระà¸\9aà¸\9aในชื่อบัญชีผู้ใช้ที่เป็นกลาง",
        "botpasswords-existing": "รหัสผ่านบอตที่มีอยู่",
        "botpasswords-createnew": "สร้างรหัสผ่านบอตใหม่",
        "botpasswords-editexisting": "แก้ไขรหัสผ่านบอตที่มีอยู่เดิม",
        "botpasswords-updated-body": "ปรับรหัสผานบอตสำหรับชื่อบอต \"$1\" ของผู้ใช้ \"$2\" แล้ว",
        "botpasswords-deleted-title": "ลบรหัสผ่านบอตแล้ว",
        "botpasswords-deleted-body": "ลบรหัสผ่านบอตสำหรับชื่อบอต \"$1\" ของผู้ใช้ชื่อ \"$2\" แล้ว",
-       "botpasswords-newpassword": "รหัสà¸\9cà¹\88าà¸\99à¹\83หมà¹\88à¸\97ีà¹\88à¸\88ะà¹\83à¸\8aà¹\89à¸\81ัà¸\9a <strong>$1</strong> à¸\84ือ <strong>$2</strong> <em>à¹\82à¸\9bรà¸\94à¹\80à¸\81à¹\87à¸\9aà¸\9aัà¸\99à¸\97ึà¸\81à¸\82à¹\89อมูลà¸\99ีà¹\89à¹\84วà¹\89 à¹\80à¸\9eืà¹\88อà¹\83หà¹\89สามารà¸\96à¸\99ำà¹\84à¸\9bà¹\83à¸\8aà¹\89อà¹\89าà¸\87อิà¸\87à¹\83à¸\99ภายหลัà¸\87à¹\84à¸\94à¹\89</em> <br> (à¹\83à¸\99à¸\81รà¸\93ีà¸\97ีà¹\88à¹\80à¸\9bà¹\87à¸\99à¸\9aอà¸\95à¹\80à¸\81à¹\88าà¸\8bึà¹\88à¸\87à¸\95à¹\89อà¸\87à¹\83à¸\8aà¹\89à¸\8aืà¹\88อลà¹\87อà¸\81อิà¸\99เหมือนกับชื่อผู้ใช้ โปรดใช้ <strong>$3</strong> เป็นชื่อผู้ใช้และ <strong>$4</strong> เป็นรหัสผ่าน)",
+       "botpasswords-newpassword": "รหัสà¸\9cà¹\88าà¸\99à¹\83หมà¹\88à¸\97ีà¹\88à¸\88ะà¹\83à¸\8aà¹\89à¸\81ัà¸\9a <strong>$1</strong> à¸\84ือ <strong>$2</strong> <em>à¹\82à¸\9bรà¸\94à¹\80à¸\81à¹\87à¸\9aà¸\9aัà¸\99à¸\97ึà¸\81à¸\82à¹\89อมูลà¸\99ีà¹\89à¹\84วà¹\89 à¹\80à¸\9eืà¹\88อà¹\83หà¹\89สามารà¸\96à¸\99ำà¹\84à¸\9bà¹\83à¸\8aà¹\89อà¹\89าà¸\87อิà¸\87à¹\83à¸\99ภายหลัà¸\87à¹\84à¸\94à¹\89</em> <br> (à¹\83à¸\99à¸\81รà¸\93ีà¸\97ีà¹\88à¹\80à¸\9bà¹\87à¸\99à¸\9aอà¸\95à¹\80à¸\81à¹\88าà¸\8bึà¹\88à¸\87à¸\95à¹\89อà¸\87à¹\83à¸\8aà¹\89à¸\8aืà¹\88อà¹\80à¸\82à¹\89าสูà¹\88ระà¸\9aà¸\9aเหมือนกับชื่อผู้ใช้ โปรดใช้ <strong>$3</strong> เป็นชื่อผู้ใช้และ <strong>$4</strong> เป็นรหัสผ่าน)",
        "botpasswords-no-provider": "BotPasswordsSessionProvider ไม่พร้อมใช้งาน",
-       "botpasswords-restriction-failed": "à¸\82à¹\89อà¸\88ำà¸\81ัà¸\94à¸\82อà¸\87รหัสà¸\9cà¹\88าà¸\99à¸\9aอà¸\95หà¹\89ามà¹\84มà¹\88à¹\83หà¹\89ลà¹\87อà¸\81อินครั้งนี้",
+       "botpasswords-restriction-failed": "à¸\82à¹\89อà¸\88ำà¸\81ัà¸\94à¸\82อà¸\87รหัสà¸\9cà¹\88าà¸\99à¸\9aอà¸\95หà¹\89ามà¹\84มà¹\88à¹\83หà¹\89à¹\80à¸\82à¹\89าสูà¹\88ระà¸\9aà¸\9aà¹\83นครั้งนี้",
        "botpasswords-invalid-name": "ชื่อผู้ใช้ที่ระบุไม่มีเครื่องหมายคั่นในรหัสผ่านบอต (\"$1\")",
        "botpasswords-not-exist": "ผู้ใช้ \"$1\" ไม่มีรหัสผ่านบอต \"$2\".",
        "botpasswords-needs-reset": "รหัสผ่านบอตสำหรับชื่อบอต \"$2\" ของผู้ใช้ชื่อ \"$1\" ต้องรีเซ็ต",
        "botpasswords-locked": "คุณไม่สามารถเข้าสู่ระบบด้วยรหัสผ่านบอตได้เนื่องจากบัญชีของคุณถูกล็อกอยู่",
        "resetpass_forbidden": "ไม่สามารถเปลี่ยนรหัสผ่านได้",
        "resetpass_forbidden-reason": "ไม่สามารถเปลี่ยนรหัสผ่านได้: $1",
-       "resetpass-no-info": "à¸\84ุà¸\93à¸\88ำà¹\80à¸\9bà¹\87à¸\99à¸\95à¹\89อà¸\87ลà¹\87อà¸\81อิà¸\99เพื่อเข้าถึงหน้านี้โดยตรง",
+       "resetpass-no-info": "à¸\84ุà¸\93à¸\88ำà¹\80à¸\9bà¹\87à¸\99à¸\95à¹\89อà¸\87à¹\80à¸\82à¹\89าสูà¹\88ระà¸\9aà¸\9aเพื่อเข้าถึงหน้านี้โดยตรง",
        "resetpass-submit-loggedin": "เปลี่ยนรหัสผ่าน",
        "resetpass-submit-cancel": "ยกเลิก",
        "resetpass-wrong-oldpass": "รหัสผ่านชั่วคราวหรือปัจจุบันไม่ถูกต้อง\nคุณอาจเปลี่ยนรหัสผ่านของคุณสำเร็จแล้ว หรือขอรหัสผ่านชั่วคราวใหม่แล้ว",
        "resetpass-recycled": "โปรดเปลี่ยนรหัสผ่านใหม่ให้ต่างจากรหัสผ่านปัจจุบัน",
-       "resetpass-temp-emailed": "à¸\84ุà¸\93ลà¹\87อà¸\81อิà¸\99à¸\94à¹\89วยรหัสà¸\9cà¹\88าà¸\99à¸\8aัà¹\88วà¸\84ราวà¸\97ีà¹\88สà¹\88à¸\87à¸\97าà¸\87อีà¹\80มล\nà¸\84ุà¸\93à¸\95à¹\89อà¸\87à¸\95ัà¹\89à¸\87รหัสà¸\9cà¹\88าà¸\99à¹\83หมà¹\88à¸\97ีà¹\88à¸\99ีà¹\88à¸\88ึà¸\87à¸\88ะà¹\80สรà¹\87à¸\88สิà¹\89à¸\99à¸\81ารลà¹\87อà¸\81อิà¸\99:",
+       "resetpass-temp-emailed": "à¸\84ุà¸\93à¹\80à¸\82à¹\89าสูà¹\88ระà¸\9aà¸\9aà¸\94à¹\89วยรหัสà¸\9cà¹\88าà¸\99à¸\8aัà¹\88วà¸\84ราวà¸\97ีà¹\88สà¹\88à¸\87à¸\97าà¸\87อีà¹\80มล\nà¸\84ุà¸\93à¸\95à¹\89อà¸\87à¸\95ัà¹\89à¸\87รหัสà¸\9cà¹\88าà¸\99à¹\83หมà¹\88à¸\97ีà¹\88à¸\99ีà¹\88à¹\80à¸\9eืà¹\88อà¹\83หà¹\89à¸\81ารà¹\80à¸\82à¹\89าสูà¹\88ระà¸\9aà¸\9aà¹\80สรà¹\87à¸\88สมà¸\9aูรà¸\93à¹\8c:",
        "resetpass-temp-password": "รหัสผ่านชั่วคราว:",
        "resetpass-abort-generic": "การเปลี่ยนรหัสผ่านถูกส่วนขยายยกเลิก",
-       "resetpass-expired": "รหัสà¸\9cà¹\88าà¸\99à¸\82อà¸\87à¸\84ุà¸\93หมà¸\94อายุà¹\81ลà¹\89ว à¹\82à¸\9bรà¸\94à¸\95ัà¹\89à¸\87รหัสà¸\9cà¹\88าà¸\99à¹\83หมà¹\88à¹\80à¸\9eืà¹\88อลà¹\87อà¸\81อิà¸\99",
+       "resetpass-expired": "รหัสà¸\9cà¹\88าà¸\99à¸\82อà¸\87à¸\84ุà¸\93หมà¸\94อายุà¹\81ลà¹\89ว à¹\82à¸\9bรà¸\94à¸\95ัà¹\89à¸\87รหัสà¸\9cà¹\88าà¸\99à¹\83หมà¹\88à¹\80à¸\9eืà¹\88อà¹\80à¸\82à¹\89าสูà¹\88ระà¸\9aà¸\9a",
        "resetpass-expired-soft": "รหัสผ่านของคุณหมดอายุแล้วและจำเป็นต้องเปลี่ยนใหม่ โปรดเลือกรหัสผ่านใหม่ขณะนี้ หรือคลิก \"{{int:authprovider-resetpass-skip-label}}\" เพื่อเปลี่ยนใหม่ทีหลัง",
        "resetpass-validity-soft": "รหัสผ่านของคุณไม่สมเหตุสมผล: $1\n\nโปรดเลือกรหัสผ่านใหม่ในขณะนี้ หรือคลิก \"{{int:authprovider-resetpass-skip-label}}\" เพื่อเปลี่ยนใหม่ทีหลัง",
        "passwordreset": "ตั้งรหัสผ่านใหม่",
        "passwordreset-domain": "โดเมน:",
        "passwordreset-email": "ที่อยู่อีเมล:",
        "passwordreset-emailtitle": "รายละเอียดบัญชีบน {{SITENAME}}",
-       "passwordreset-emailtext-ip": "à¸\9aาà¸\87à¸\84à¸\99 (à¸\8bึà¹\88à¸\87อาà¸\88à¹\80à¸\9bà¹\87à¸\99à¸\84ุà¸\93 à¸\88าà¸\81à¹\80ลà¸\82à¸\97ีà¹\88อยูà¹\88à¹\84อà¸\9eี $1) à¸\82อà¸\95ัà¹\89à¸\87รหัสà¸\9cà¹\88าà¸\99à¸\82อà¸\87à¸\84ุà¸\93à¹\83หมà¹\88à¸\9aà¸\99{{SITENAME}} ($4) à¸\9aัà¸\8dà¸\8aีà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\94ัà¸\87à¸\81ลà¹\88าวà¹\80à¸\81ีà¹\88ยวà¸\82à¹\89อà¸\87à¸\81ัà¸\9aà¸\97ีà¹\88อยูà¹\88อีà¹\80มลà¸\99ีà¹\89:\n\n$2\n\n{{PLURAL:$3|รหัสà¸\9cà¹\88าà¸\99à¸\8aัà¹\88วà¸\84ราวà¸\99ีà¹\89|รหัสà¸\9cà¹\88าà¸\99à¸\8aัà¹\88วà¸\84ราวà¹\80หลà¹\88าà¸\99ีà¹\89}}à¸\88ะหมà¸\94อายุà¹\83à¸\99 $5 à¸§à¸±à¸\99\nà¸\95อà¸\99à¸\99ีà¹\89à¸\84ุà¸\93à¸\84วรลà¹\87อà¸\81อิà¸\99และเลือกรหัสผ่านใหม่ หากบุคคลอื่นขอตั้งรหัสผ่านใหม่นี้ หรือคุณจำรหัสผ่านเดิมของคุณได้แล้ว และคุณไม่ต้องการเปลี่ยนรหัสผ่านอีก คุณอาจละเลยข้อความนี้และใช้รหัสผ่านเดิมของคุณต่อไป",
+       "passwordreset-emailtext-ip": "à¸\9aาà¸\87à¸\84à¸\99 (à¸\8bึà¹\88à¸\87อาà¸\88à¹\80à¸\9bà¹\87à¸\99à¸\84ุà¸\93 à¸\88าà¸\81à¹\80ลà¸\82à¸\97ีà¹\88อยูà¹\88à¹\84อà¸\9eี $1) à¸\82อà¸\95ัà¹\89à¸\87รหัสà¸\9cà¹\88าà¸\99à¸\82อà¸\87à¸\84ุà¸\93à¹\83หมà¹\88à¸\9aà¸\99{{SITENAME}} ($4) à¸\9aัà¸\8dà¸\8aีà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\94ัà¸\87à¸\81ลà¹\88าวà¹\80à¸\81ีà¹\88ยวà¸\82à¹\89อà¸\87à¸\81ัà¸\9aà¸\97ีà¹\88อยูà¹\88อีà¹\80มลà¸\99ีà¹\89:\n\n$2\n\n{{PLURAL:$3|รหัสà¸\9cà¹\88าà¸\99à¸\8aัà¹\88วà¸\84ราวà¸\99ีà¹\89|รหัสà¸\9cà¹\88าà¸\99à¸\8aัà¹\88วà¸\84ราวà¹\80หลà¹\88าà¸\99ีà¹\89}}à¸\88ะหมà¸\94อายุà¹\83à¸\99 $5 à¸§à¸±à¸\99\nà¸\95อà¸\99à¸\99ีà¹\89à¸\84ุà¸\93à¸\84วรà¹\80à¸\82à¹\89าสูà¹\88ระà¸\9aà¸\9aและเลือกรหัสผ่านใหม่ หากบุคคลอื่นขอตั้งรหัสผ่านใหม่นี้ หรือคุณจำรหัสผ่านเดิมของคุณได้แล้ว และคุณไม่ต้องการเปลี่ยนรหัสผ่านอีก คุณอาจละเลยข้อความนี้และใช้รหัสผ่านเดิมของคุณต่อไป",
        "passwordreset-emailtext-user": "ผู้ใช้ $1 บน {{SITENAME}} ขอตั้งรหัสผ่านของคุณใหม่สำหรับ {{SITENAME}} ($4) {{PLURAL:$3||}}บัญชีผู้ใช้ดังกล่าวเกี่ยวข้องกับที่อยู่อีเมลนี้:\n\n$2\n\n{{PLURAL:$3|รหัสผ่านชั่วคราวนี้|รหัสผ่านชั่วคราวเหล่านี้}}จะหมดอายุใน $5 วัน\nตอนนี้คุณควรล็อกอินและเลือกรหัสผ่านใหม่ หากบุคคลอื่นขอตั้งรหัสผ่านใหม่นี้ หรือคุณจำรหัสผ่านเดิมของคุณได้แล้ว และคุณไม่ต้องการเปลี่ยนรหัสผ่านอีก คุณอาจละเลยข้อความนี้และใช้รหัสผ่านเดิมของคุณต่อไป",
        "passwordreset-emailelement": "ชื่อผู้ใช้: \n$1\n\nรหัสผ่านชั่วคราว: \n$2",
        "passwordreset-emailsentemail": "หากที่อยู่อีเมลนี้สัมพันธ์กับบัญชีของคุณ เช่นนั้นจะส่งอีเมลตั้งรหัสผ่านใหม่",
        "passwordreset-nodata": "ไม่ได้ระบุชื่อผู้ใช้และรหัสผ่านไว้",
        "changeemail": "เปลี่ยนหรือลบที่อยู่อีเมล",
        "changeemail-header": "กรอกแบบนี้เพื่อเปลี่ยนที่อยู่อีเมลของคุณ หากคุณต้องการลบการเชื่อมโยงของที่อยู่อีเมลใด ๆ จากบัญชีของคุณ ให้เว้นที่อยู่อีเมลใหม่ว่างเมื่อส่งแบบ",
-       "changeemail-no-info": "à¸\84ุà¸\93à¸\88ำà¸\95à¹\89อà¸\87ลà¹\87อà¸\81อิà¸\99เพื่อเข้าถึงหน้านี้โดยตรง",
+       "changeemail-no-info": "à¸\84ุà¸\93à¸\88ำà¹\80à¸\9bà¹\87à¸\99à¸\95à¹\89อà¸\87à¹\80à¸\82à¹\89าสูà¹\88ระà¸\9aà¸\9aเพื่อเข้าถึงหน้านี้โดยตรง",
        "changeemail-oldemail": "ที่อยู่อีเมลปัจจุบัน:",
        "changeemail-newemail": "ที่อยู่อีเมลใหม่:",
        "changeemail-newemail-help": "เว้นว่างเขตข้อมูลนี้หากคุณต้องการลบที่อยู่อีเมลของคุณ คุณจะไม่สามารถตั้งรหัสผ่านที่ลืมใหม่และจะไม่ได้รับอีเมลจากวิกินี้ถ้าลบที่อยู่อีเมล",
        "changeemail-none": "(ไม่มี)",
        "changeemail-password": "รหัสผ่าน {{SITENAME}} ของคุณ:",
        "changeemail-submit": "เปลี่ยนอีเมล",
-       "changeemail-throttled": "à¸\84ุà¸\93à¹\84à¸\94à¹\89à¸\9eยายามลà¹\87อà¸\81อิà¸\99หลายà¸\84รัà¹\89à¸\87à¹\80à¸\81ิà¸\99à¹\84à¸\9b\nà¸\81รุà¸\93ารอ $1 à¸\81à¹\88อà¸\99ลองอีกครั้ง",
+       "changeemail-throttled": "à¸\84ุà¸\93à¹\84à¸\94à¹\89à¸\9eยายามà¹\80à¸\82à¹\89าสูà¹\88ระà¸\9aà¸\9aหลายà¸\84รัà¹\89à¸\87à¹\80à¸\81ิà¸\99à¹\84à¸\9b\nà¸\81รุà¸\93ารอà¹\80à¸\9bà¹\87à¸\99à¹\80วลา $1à¹\81ลà¹\89วà¸\88ึà¸\87ลองอีกครั้ง",
        "changeemail-nochange": "กรุณากรอกที่อยู่อีเมลอื่น",
        "resettokens": "ตั้งโทเค็นใหม่",
        "resettokens-text": "คุณสามารถตั้งโทเค็นใหม่ ซึ่งให้การเข้าถึงข้อมูลส่วนตัวบางอย่างที่เกี่ยวข้องกับบัญชีของคุณที่นี่\n\nคุณควรตั้งโทเค็นใหม่ หากคุณบอกผู้อื่นโดยมิได้ตั้งใจหรือบัญชีของคุณถูกเจาะ",
        "showpreview": "แสดงตัวอย่าง",
        "showdiff": "แสดงการเปลี่ยนแปลง",
        "blankarticle": "<strong>คำเตือน:</strong> หน้าที่คุณกำลังสร้างว่าง หากคุณคลิก \"$1\" อีกครั้ง จะสร้างหน้าโดยไม่มีเนื้อหาใด",
-       "anoneditwarning": "<strong>à¸\84ำà¹\80à¸\95ือà¸\99:</strong> à¸\84ุà¸\93มิà¹\84à¸\94à¹\89ลà¹\87อà¸\81อิà¸\99 à¸ªà¸²à¸\98ารà¸\93ะà¸\88ะà¹\80หà¹\87à¸\99à¹\80ลà¸\82à¸\97ีà¹\88อยูà¹\88à¹\84อà¸\9eีà¸\82อà¸\87à¸\84ุà¸\93หาà¸\81à¸\84ุà¸\93à¹\81à¸\81à¹\89à¹\84à¸\82 à¸«à¸²à¸\81à¸\84ุà¸\93<strong>[$1 à¸¥à¹\87อà¸\81อิà¸\99]</strong>หรือ<strong>[$2 à¸ªà¸£à¹\89าà¸\87à¸\9aัà¸\8dà¸\8aี]</strong> à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\82อà¸\87à¸\84ุà¸\93à¸\88ะà¸\96ือวà¹\88าà¹\80à¸\9bà¹\87à¸\99à¸\82อà¸\87à¸\8aืà¹\88อà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\82อà¸\87à¸\84ุà¸\93 à¸£à¹\88วมà¸\81ัà¸\9aà¸\9bระà¹\82ยà¸\8aà¸\99à¹\8cอืà¹\88à¸\99",
+       "anoneditwarning": "<strong>à¸\84ำà¹\80à¸\95ือà¸\99:</strong> à¸\84ุà¸\93à¹\84มà¹\88à¹\84à¸\94à¹\89à¹\80à¸\82à¹\89าสูà¹\88ระà¸\9aà¸\9a à¸ªà¸²à¸\98ารà¸\93ะà¸\88ะà¹\80หà¹\87à¸\99à¸\97ีà¹\88อยูà¹\88à¹\84อà¸\9eีà¸\82อà¸\87à¸\84ุà¸\93หาà¸\81à¸\84ุà¸\93à¸\97ำà¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¹\83à¸\94à¹\86 à¸«à¸²à¸\81à¸\84ุà¸\93<strong>[$1 à¹\80à¸\82à¹\89าสูà¹\88ระà¸\9aà¸\9a]</strong>หรือ<strong>[$2 à¸ªà¸£à¹\89าà¸\87à¸\9aัà¸\8dà¸\8aี]</strong> à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\82อà¸\87à¸\84ุà¸\93à¸\88ะà¸\96ือวà¹\88าà¹\80à¸\9bà¹\87à¸\99à¸\82อà¸\87à¸\8aืà¹\88อà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\82อà¸\87à¸\84ุà¸\93 à¸\9eรà¹\89อมà¸\97ัà¹\89à¸\87อาà¸\88มีà¸\9bระà¹\82ยà¸\8aà¸\99à¹\8cอืà¹\88à¸\99à¹\86 à¸\94à¹\89วย",
        "anonpreviewwarning": "<em>คุณมิได้ล็อกอิน การบันทึกจะเก็บเลขที่อยู่ไอพีของคุณในประวัติการแก้ไขของหน้านี้</em>",
        "missingsummary": "<strong>อย่าลืม:</strong> คุณยังไม่ได้ให้ความย่อการแก้ไข\nถ้าคุณคลิก \"$1\" อีก จะบันทึกการแก้ไขของคุณโดยเว้นไว้",
        "selfredirect": "<strong>คำเตือน:</strong> คุณกำลังสร้างการเปลี่ยนทางไปบทความเดียวกัน\nคุณอาจระบุเป้าหมายของการเปลี่ยนทางผิด หรือคุณอาจแก้ไขหน้าผิด \nหากคุณคลิก \"$1\" อีกครั้ง จะสร้างการเปลี่ยนทาง",
        "subject-preview": "ตัวอย่างเรื่อง:",
        "previewerrortext": "เกิดข้อผิดพลาดขณะกำลังพยายามดูตัวอย่างการเปลี่ยนแปลงของคุณ",
        "blockedtitle": "ผู้ใช้ถูกบล็อก",
+       "blocked-email-user": "<strong>ชื่อผู้ใช้ของคุณถูกบล็อกไม่ให้ส่งอีเมล แต่คุณยังสามารถแก้ไขหน้าอื่นที่อยู่บนวิกินี้ได้</strong> คุณสามารถดูรายละเอียดการบล็อกแบบเต็มได้ที่[[Special:MyContributions|ส่วนร่วมบัญชี]]\n\nผู้ที่ทำการบล็อกคือ $1\n\nเหตุผลสำหรับการบล็อกคือ <em>$2</em>\n\n* เริ่มการบล็อก: $8\n* สิ้นสุดการบล็อก: $6\n* ผู้ถูกบล็อกที่เจตนา: $7\n* ไอดีการบล็อก #$5",
+       "blockedtext-partial": "<strong>ชื่อผู้ใช้หรือเลขที่อยู่ไอพีของคุณถูกบล็อกไม่ให้ทำการเปลี่ยนแปลงหน้านี้ แต่คุณยังสามารถแก้ไขหน้าอื่นที่อยู่บนวิกินี้ได้</strong> คุณสามารถดูรายละเอียดการบล็อกแบบเต็มได้ที่[[Special:MyContributions|ส่วนร่วมบัญชี]]\n\nผู้ที่ทำการบล็อกคือ $1\n\nเหตุผลสำหรับการบล็อกคือ <em>$2</em>\n\n* เริ่มการบล็อก: $8\n* สิ้นสุดการบล็อก: $6\n* ผู้ถูกบล็อกที่เจตนา: $7\n* ไอดีการบล็อก #$5",
        "blockedtext": "<strong>ชื่อผู้ใช้หรือเลขที่อยู่ไอพีของคุณถูกบล็อก</strong>\n\nการบล็อกนี้ดำเนินการโดย $1\nซึ่งให้เหตุผลว่า ''$2''\n\n* เริ่มการบล็อก: $8\n* หมดเขตการบล็อก: $6\n* ผู้ถูกบล็อกที่เจตนา: $7\n\nคุณสามารถติดต่อ $1 หรือ[[{{MediaWiki:Grouppage-sysop}}|ผู้ดูแลระบบ]]คนอื่นเพื่ออภิปรายการบล็อกนี้ได้\nคุณไม่สามารถใช้คุณลักษณะ \"{{int:emailuser}}\" จนกว่าจะระบุที่อยู่อีเมลให้ถูกต้องใน[[Special:Preferences|การตั้งค่าบัญชี]]ของคุณ และคุณมิได้ถูกห้ามใช้ความสามารถนี้\nเลขที่อยู่ไอพีปัจจุบันของคุณคือ $3 และหมายเลขการบล็อกคือ #$5 \nโปรดแสดงรายละเอียดข้างต้นทั้งหมดในการสอบถามใด ๆ",
-       "autoblockedtext": "เลขที่อยู่ไอพีของคุณถูกบล็อกอัตโนมัติ เพราะเคยมีผู้ใช้อื่นใช้ ซึ่งถูกบล็อกโดย $1\nโดยให้เหตุผลว่า\n\n:<em>$2</em>\n\n* เริ่มการบล็อก: $8\n* สิ้นสุดการบล็อก: $6\n* ผู้ถูกบล็อกที่เจตนา: $7\n\nคุณสามารถติดต่อ $1 หรือ[[{{MediaWiki:Grouppage-sysop}}|ผู้ดูแลระบบ]]คนอื่นเพื่ออภิปรายการบล็อกนี้ \nคุณไม่สามารถใช้คุณลักษณะ \"ส่งอีเมลหาผู้ใช้รายนี้ได้\" จนกว่าจะระบุที่อยู่อีเมลที่ถูกต้องใน[[Special:Preferences|การตั้งค่าบัญชี]]ของคุณ และคุณมิได้ถูกห้ามใช้\nเลขที่อยู่ไอพีปัจจุบันของคุณคือ $3 และหมายเลขการบล็อกคือ #$5 \nโปรดรวมรายละเอียดข้างต้นทั้งหมดในการสอบถามใด ๆ",
+       "autoblockedtext": "เลขที่อยู่ไอพีของคุณถูกบล็อกอัตโนมัติ เพราะเคยมีผู้ใช้อื่นใช้ ซึ่งถูกบล็อกโดย $1\nโดยให้เหตุผลว่า\n\n:<em>$2</em>\n\n* เริ่มการบล็อก: $8\n* สิ้นสุดการบล็อก: $6\n* ผู้ถูกบล็อกที่เจตนา: $7\n\nคุณสามารถติดต่อ $1 หรือ[[{{MediaWiki:Grouppage-sysop}}|ผู้ดูแลระบบ]]คนอื่นเพื่ออภิปรายการบล็อกนี้ \nคุณไม่สามารถใช้คุณลักษณะ \"{{int:emailuser}}\" จนกว่าจะระบุที่อยู่อีเมลที่ถูกต้องใน[[Special:Preferences|การตั้งค่าบัญชี]]ของคุณ และคุณมิได้ถูกห้ามใช้\nเลขที่อยู่ไอพีปัจจุบันของคุณคือ $3 และหมายเลขการบล็อกคือ #$5 \nโปรดรวมรายละเอียดข้างต้นทั้งหมดในการสอบถามใด ๆ",
        "systemblockedtext": "ชื่อผู้ใช้หรือที่อยู่ไอพีของคุณถูกบล็อกอัตโนมัติโดยมีเดียวิกิ\nเหตุผลสำหรับการบล็อกคือ:\n\n:<em>$2</em>\n\n* เริ่มการบล็อก: $8\n* สิ้นสุดการบล็อก: $6\n* ผู้ดำเนินการบล็อก: $7\n\nไอพีแอดเดรสปัจจุบันของคุณคือ $3\nโปรดแจ้งรายละเอียดทั้งหมดข้างต้น ถ้าคุณมีข้อสงสัยใด ๆ",
        "blockednoreason": "ไม่ได้ให้เหตุผล",
        "whitelistedittext": "คุณต้อง$1เพื่อแก้ไขหน้า",
        "confirmedittext": "คุณต้องยืนยันที่อยู่อีเมลของคุณก่อนแก้ไขหน้า \nโปรดตั้งและตรวจสอบความสมเหตุสมผลของที่อยู่อีเมลของคุผ่าน[[Special:Preferences|การตั้งค่าผู้ใช้]]",
        "nosuchsectiontitle": "ไม่พบส่วน",
        "nosuchsectiontext": "คุณพยายามแก้ไขส่วนที่ไม่มีอยู่ \nส่วนดังกล่าวอาจถูกย้ายหรือลบขณะที่คุณดูหน้าอยู่",
-       "loginreqtitle": "à¸\95à¹\89อà¸\87ลà¹\87อà¸\81อิà¸\99",
+       "loginreqtitle": "à¸\95à¹\89อà¸\87à¹\80à¸\82à¹\89าสูà¹\88ระà¸\9aà¸\9a",
        "loginreqlink": "เข้าสู่ระบบ",
        "loginreqpagetext": "กรุณา$1เพื่อดูหน้าอื่น",
        "accmailtitle": "ส่งรหัสผ่านแล้ว",
-       "accmailtext": "สà¹\88à¸\87รหัสà¸\9cà¹\88าà¸\99à¹\81à¸\9aà¸\9aสุà¹\88มà¸\82อà¸\87 [[User talk:$1|$1]] à¹\84à¸\9b $2 à¹\81ลà¹\89ว à¸ªà¸²à¸¡à¸²à¸£à¸\96à¹\80à¸\9bลีà¹\88ยà¸\99รหัสà¸\9cà¹\88าà¸\99à¹\83à¸\99หà¸\99à¹\89า<em>[[Special:ChangePassword|à¹\80à¸\9bลีà¹\88ยà¸\99รหัสà¸\9cà¹\88าà¸\99]]</em> à¸«à¸¥à¸±à¸\87ลà¹\87อà¸\81อิà¸\99",
+       "accmailtext": "สà¹\88à¸\87รหัสà¸\9cà¹\88าà¸\99à¹\81à¸\9aà¸\9aสุà¹\88มà¸\82อà¸\87 [[User talk:$1|$1]] à¹\84à¸\9b $2 à¹\81ลà¹\89ว à¸ªà¸²à¸¡à¸²à¸£à¸\96à¹\80à¸\9bลีà¹\88ยà¸\99รหัสà¸\9cà¹\88าà¸\99à¹\83à¸\99หà¸\99à¹\89า<em>[[Special:ChangePassword|à¹\80à¸\9bลีà¹\88ยà¸\99รหัสà¸\9cà¹\88าà¸\99]]</em> à¹\84à¸\94à¹\89หลัà¸\87à¸\88าà¸\81à¹\80à¸\82à¹\89าสูà¹\88ระà¸\9aà¸\9aà¹\81ลà¹\89ว",
        "newarticle": "(ใหม่)",
        "newarticletext": "คุณตามลิงก์ไปยังหน้าที่ยังไม่มีในขณะนี้\nในการสร้างหน้า เริ่มพิมพ์ในกล่องด้านล่าง (ดูข้อมูลเพิ่มเติมใน[$1 หน้าคำอธิบาย])\nถ้าคุณเข้ามาหน้านี้โดยผิดพลาด ให้กดปุ่ม<strong>ถอยหลัง</strong> (back) ของเบราว์เซอร์",
-       "anontalkpagetext": "----\n<em>หà¸\99à¹\89าà¸\99ีà¹\89à¹\80à¸\9bà¹\87à¸\99หà¸\99à¹\89าà¸\84ุยà¸\81ัà¸\9aà¸\9cูà¹\89à¹\83à¸\8aà¹\89สำหรัà¸\9aà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\99ิรà¸\99ามà¸\8bึà¹\88à¸\87ยัà¸\87à¹\84มà¹\88à¹\84à¸\94à¹\89สรà¹\89าà¸\87หรือà¹\83à¸\8aà¹\89à¸\9aัà¸\8dà¸\8aี</em>\nà¸\94ัà¸\87à¸\99ัà¹\89à¸\99à¹\80ราà¸\88ึà¸\87ระà¸\9aุà¸\95ัวà¸\95à¸\99à¹\82à¸\94ยà¹\83à¸\8aà¹\89à¹\80ลà¸\82à¸\97ีà¹\88อยูà¹\88à¹\84อà¸\9eีà¹\81à¸\97à¸\99\nà¹\80ลà¸\82à¸\97ีà¹\88อยูà¹\88à¹\84อà¸\9eีà¸\99ีà¹\89อาà¸\88มีà¸\9cูà¹\89à¹\83à¸\8aà¹\89รà¹\88วมà¸\81ัà¸\99หลายà¸\84à¸\99\nà¸\96à¹\89าà¸\84ุà¸\93à¹\80à¸\9bà¹\87à¸\99à¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\99ิรà¸\99าม à¹\81ละรูà¹\89สึà¸\81วà¹\88าà¸\84ุà¸\93à¹\84à¸\94à¹\89รัà¸\9aà¸\84วามà¹\80หà¹\87à¸\99à¸\97ีà¹\88à¹\84มà¹\88à¹\80à¸\81ีà¹\88ยวà¸\82à¹\89อà¸\87สà¹\88à¸\87หาà¸\84ุà¸\93 à¸\81รุà¸\93า[[Special:CreateAccount|สรà¹\89าà¸\87à¸\9aัà¸\8dà¸\8aี]]หรือ[[Special:UserLogin|ลà¹\87อà¸\81อิà¸\99]] เพื่อป้องกันการสับสนกับผู้ใช้นิรนามรายอื่นในอนาคต",
+       "anontalkpagetext": "----\n<em>หà¸\99à¹\89าà¸\99ีà¹\89à¹\80à¸\9bà¹\87à¸\99หà¸\99à¹\89าà¸\84ุยà¸\81ัà¸\9aà¸\9cูà¹\89à¹\83à¸\8aà¹\89สำหรัà¸\9aà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\99ิรà¸\99ามà¸\8bึà¹\88à¸\87ยัà¸\87à¹\84มà¹\88à¹\84à¸\94à¹\89สรà¹\89าà¸\87หรือà¹\83à¸\8aà¹\89à¸\9aัà¸\8dà¸\8aี</em>\nà¸\94ัà¸\87à¸\99ัà¹\89à¸\99à¹\80ราà¸\88ึà¸\87ระà¸\9aุà¸\95ัวà¸\95à¸\99à¹\82à¸\94ยà¹\83à¸\8aà¹\89à¹\80ลà¸\82à¸\97ีà¹\88อยูà¹\88à¹\84อà¸\9eีà¹\81à¸\97à¸\99\nà¹\80ลà¸\82à¸\97ีà¹\88อยูà¹\88à¹\84อà¸\9eีà¸\99ีà¹\89อาà¸\88มีà¸\9cูà¹\89à¹\83à¸\8aà¹\89รà¹\88วมà¸\81ัà¸\99หลายà¸\84à¸\99\nà¸\96à¹\89าà¸\84ุà¸\93à¹\80à¸\9bà¹\87à¸\99à¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\99ิรà¸\99าม à¹\81ละรูà¹\89สึà¸\81วà¹\88าà¸\84ุà¸\93à¹\84à¸\94à¹\89รัà¸\9aà¸\84วามà¹\80หà¹\87à¸\99à¸\97ีà¹\88à¹\84มà¹\88à¹\80à¸\81ีà¹\88ยวà¸\82à¹\89อà¸\87สà¹\88à¸\87หาà¸\84ุà¸\93 à¸\81รุà¸\93า[[Special:CreateAccount|สรà¹\89าà¸\87à¸\9aัà¸\8dà¸\8aี]]หรือ[[Special:UserLogin|à¹\80à¸\82à¹\89าสูà¹\88ระà¸\9aà¸\9a]] เพื่อป้องกันการสับสนกับผู้ใช้นิรนามรายอื่นในอนาคต",
        "noarticletext": "ปัจจุบันไม่มีข้อความในหน้านี้\nคุณสามารถ[[Special:Search/{{PAGENAME}}|ค้นหาชื่อเรื่องหน้านี้]]ในหน้าอื่น <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ค้นหาปูมที่เกี่ยวข้อง] หรือ[{{fullurl:{{FULLPAGENAME}}|action=edit}} แก้ไขหน้านี้]</span>",
        "noarticletext-nopermission": "ปัจจุบันไม่มีข้อความในหน้านี้\nคุณสามารถ[[Special:Search/{{PAGENAME}}|ค้นหาชื่อหน้านี้]]ในหน้าอื่น หรือ<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ค้นหาปูมที่เกี่ยวข้อง]</span> แต่คุณไม่มีสิทธิสร้างหน้านี้",
        "missing-revision": "ไม่มีรุ่นแก้ไข #$1 ของหน้าชื่อ \"{{FULLPAGENAME}}\" \n\nปกติเกิดจากการตามการโยงประวัติเก่าไปยังหน้าที่ถูกลบแล้ว\nดูรายละเอียดได้ที่[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ปูมการลบ]",
        "previewnote": "<strong>พึงระลึกว่านี่เป็นเพียงการแสดงตัวอย่าง</strong>\nยังไม่ได้บันทึกการเปลี่ยนแปลงของคุณ!",
        "continue-editing": "ไปพื้นที่แก้ไข",
        "previewconflict": "ตัวอย่างนี้สะท้อนข้อความในพื้นที่แก้ไขข้อความส่วนบนซึ่งจะปรากฏหากคุณเลือกบันทึก",
-       "session_fail_preview": "à¸\82ออภัย! à¹\80ราà¹\84มà¹\88สามารà¸\96à¸\94ำà¹\80à¸\99ิà¸\99à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\82อà¸\87à¸\84ุà¸\93à¹\84à¸\94à¹\89 à¹\80à¸\99ืà¹\88อà¸\87à¸\88าà¸\81à¸\82à¹\89อมูลà¸\8aà¹\88วà¸\87à¹\80วลาสืà¹\88อสารสูà¸\8dหาย\n\nà¸\84ุà¸\93อาà¸\88ลà¹\87อà¸\81à¹\80อาà¸\95à¹\8cà¹\84à¸\9bà¹\81ลà¹\89ว <strong>à¹\82à¸\9bรà¸\94à¸\95รวà¸\88à¸\94ูà¹\83หà¹\89à¹\81à¸\99à¹\88à¹\83à¸\88วà¹\88าà¸\84ุà¸\93ลà¹\87อà¸\81อิà¸\99อยูà¹\88 à¹\81ลà¹\89วลอà¸\87อีà¸\81à¸\84รัà¹\89à¸\87</strong> \nหาà¸\81ยัà¸\87à¹\80สียอยูà¹\88 à¸¥à¸­à¸\87[[Special:UserLogout|ลà¹\87อà¸\81à¹\80อาà¸\95à¹\8c]]à¹\81ละลà¹\87อà¸\81อิà¸\99à¸\81ลัà¸\9aมา แล้วตรวจดูว่าเบราว์เซอร์ที่คุณใช้อนุญาตคุกกี้จากไซต์นี้",
-       "session_fail_preview_html": "à¸\82ออภัย! à¹\84มà¹\88สามารà¸\96à¸\94ำà¹\80à¸\99ิà¸\99à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\82อà¸\87à¸\84ุà¸\93à¸\95à¹\88อà¹\84à¸\94à¹\89 à¹\80à¸\99ืà¹\88อà¸\87à¸\88าà¸\81à¸\82à¹\89อมูลà¸\8aà¹\88วà¸\87à¹\80วลาสืà¹\88อสารสูญหาย\n\n<em>เนื่องจาก {{SITENAME}} เปิดใช้งานเอชทีเอ็มแอลล้วน การแสดงตัวอย่างจะถูกซ่อนไว้เพื่อป้องกันการโจมตีด้วยจาวาสคริปต์</em>\n\n<strong>หากนี่เป็นความพยายามแก้ไขโดยชอบ โปรดลองอีกครั้งหนึ่ง</strong> \nหากยังเสียอยู่ ลอง[[Special:UserLogout|ล็อกเอาต์]]และล็อกอินกลับมา และตรวจดูให้แน่ใจว่าเบราว์เซอร์ที่คุณใช้อนุญาตคุกกี้จากไซต์นี้",
+       "session_fail_preview": "à¸\82ออภัย! à¹\80ราà¹\84มà¹\88สามารà¸\96à¸\94ำà¹\80à¸\99ิà¸\99à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\82อà¸\87à¸\84ุà¸\93à¹\84à¸\94à¹\89 à¹\80à¸\99ืà¹\88อà¸\87à¸\88าà¸\81à¸\82à¹\89อมูลà¹\80à¸\8bสà¸\8aัà¸\99สูà¸\8dหาย\n\nà¸\84ุà¸\93อาà¸\88ออà¸\81à¸\88าà¸\81ระà¸\9aà¸\9aà¹\84à¸\9bà¹\81ลà¹\89ว <strong>à¹\82à¸\9bรà¸\94à¸\95รวà¸\88à¸\94ูà¹\83หà¹\89à¹\81à¸\99à¹\88à¹\83à¸\88วà¹\88าà¸\84ุà¸\93à¹\80à¸\82à¹\89าสูà¹\88ระà¸\9aà¸\9aอยูà¹\88 à¹\81ลà¹\89วลอà¸\87อีà¸\81à¸\84รัà¹\89à¸\87</strong> \nหาà¸\81ยัà¸\87à¹\80สียอยูà¹\88 à¸¥à¸­à¸\87[[Special:UserLogout|ออà¸\81à¸\88าà¸\81ระà¸\9aà¸\9a]]à¹\81ละà¸\81ลัà¸\9aà¹\80à¸\82à¹\89าสูà¹\88ระà¸\9aà¸\9aà¹\83หมà¹\88 แล้วตรวจดูว่าเบราว์เซอร์ที่คุณใช้อนุญาตคุกกี้จากไซต์นี้",
+       "session_fail_preview_html": "à¸\82ออภัย! à¹\84มà¹\88สามารà¸\96à¸\94ำà¹\80à¸\99ิà¸\99à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\82อà¸\87à¸\84ุà¸\93à¸\95à¹\88อà¹\84à¸\94à¹\89 à¹\80à¸\99ืà¹\88อà¸\87à¸\88าà¸\81à¸\82à¹\89อมูลà¹\80à¸\8bสà¸\8aัà¸\99สูญหาย\n\n<em>เนื่องจาก {{SITENAME}} เปิดใช้งานเอชทีเอ็มแอลล้วน การแสดงตัวอย่างจะถูกซ่อนไว้เพื่อป้องกันการโจมตีด้วยจาวาสคริปต์</em>\n\n<strong>หากนี่เป็นความพยายามแก้ไขโดยชอบ โปรดลองอีกครั้งหนึ่ง</strong> \nหากยังเสียอยู่ ลอง[[Special:UserLogout|ล็อกเอาต์]]และล็อกอินกลับมา และตรวจดูให้แน่ใจว่าเบราว์เซอร์ที่คุณใช้อนุญาตคุกกี้จากไซต์นี้",
        "token_suffix_mismatch": "<strong>การแก้ไขของคุณถูกปฏิเสธ เนื่องจากเครื่องลูกข่ายของคุณทำให้อักขระเครื่องหมายวรรคตอนในโทเค็นการแก้ไขเสีย</strong>\nการแก้ไขนี้ถูกปฏิเสธเพื่อป้องกันการวิบัติของข้อความหน้า\nบางครั้งเกิดปัญหานี้ขึ้นเมื่อคุณใช้บริการเว็บพร็อกซีนิรนามที่มีจุดบกพร่อง",
        "edit_form_incomplete": "<strong>แบบแก้ไขบางส่วนไปไม่ถึงเซิร์ฟเวอร์ ตรวจสอบอีกครั้งว่าการแก้ไขของคุณยังอยู่และลองอีกครั้ง</strong>",
        "editing": "กำลังแก้ไข $1",
        "template-semiprotected": "(ถูกกึ่งป้องกัน)",
        "hiddencategories": "หน้านี้มี {{PLURAL:$1|1 หมวดหมู่ซ่อน|$1 หมวดหมู่ซ่อน}}:",
        "edittools": "<!-- ข้อความนี้จะแสดงผลใต้ฟอร์มสำหรับการแก้ไขและอัปโหลด -->",
-       "nocreatetext": "{{SITENAME}} à¸\88ำà¸\81ัà¸\94à¸\81ารสรà¹\89าà¸\87หà¸\99à¹\89าà¹\83หมà¹\88\nà¸\84ุà¸\93สามารà¸\96ยà¹\89อà¸\99à¸\81ลัà¸\9aà¹\84à¸\9bà¹\81à¸\81à¹\89à¹\84à¸\82หà¸\99à¹\89าà¸\97ีà¹\88มีอยูà¹\88à¹\80à¸\94ิม à¸«à¸£à¸·à¸­[[Special:UserLogin|ลà¹\87อà¸\81อิà¸\99หรือสร้างบัญชีผู้ใช้]]",
+       "nocreatetext": "{{SITENAME}} à¹\84à¸\94à¹\89à¸\88ำà¸\81ัà¸\94à¸\81ารสรà¹\89าà¸\87หà¸\99à¹\89าà¹\83หมà¹\88\nà¸\84ุà¸\93สามารà¸\96ยà¹\89อà¸\99à¸\81ลัà¸\9aà¹\84à¸\9bà¹\81à¸\81à¹\89à¹\84à¸\82หà¸\99à¹\89าà¸\97ีà¹\88มีอยูà¹\88à¹\80à¸\94ิม à¸«à¸£à¸·à¸­[[Special:UserLogin|à¹\80à¸\82à¹\89าสูà¹\88ระà¸\9aà¸\9aหรือสร้างบัญชีผู้ใช้]]",
        "nocreate-loggedin": "คุณไม่มีสิทธิสร้างหน้าใหม่",
        "sectioneditnotsupported-title": "ไม่สนับสนุนการแก้ไขหัวข้อย่อย",
        "sectioneditnotsupported-text": "ไม่สนับสนุนการแก้ไขหัวข้อย่อยในหน้านี้",
        "postedit-confirmation-saved": "บันทึกการแก้ไขของคุณแล้ว",
        "postedit-confirmation-published": "เผยแพร่การแก้ไขของคุณแล้ว",
        "edit-already-exists": "ไม่สามารถสร้างหน้าใหม่ได้\nเพราะมีแล้ว",
-       "defaultmessagetext": "à¸\82à¹\89อà¸\84วามสารปริยาย",
+       "defaultmessagetext": "à¹\80à¸\99ืà¹\89อหาà¸\82à¹\89อà¸\84วามปริยาย",
        "content-failed-to-parse": "แจงส่วนเนื้อหา $2 ของตัวแบบ $1 ล้มเหลว: $3",
        "invalid-content-data": "ข้อมูลเนื้อหาไม่ถูกต้อง",
        "content-not-allowed-here": "ไม่อนุญาตเนื้อหา \"$1\" ในหน้า [[$2]]",
-       "editwarning-warning": "à¸\81ารออà¸\81à¸\88าà¸\81หà¸\99à¹\89าà¸\99ีà¹\89อาà¸\88à¸\97ำà¹\83หà¹\89à¸\84วามà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87à¸\97ีà¹\88à¸\84ุà¸\93à¸\94ำà¹\80à¸\99ิà¸\99à¸\81ารสูà¸\8dหาย\nà¸\96à¹\89าà¸\84ุà¸\93ลà¹\87อà¸\81อิà¸\99แล้ว คุณสามารถปิดคำเตือนนี้ได้ที่ส่วน \"{{int:prefs-editing}}\" ในการตั้งค่าของคุณ",
+       "editwarning-warning": "à¸\81ารออà¸\81à¸\88าà¸\81หà¸\99à¹\89าà¸\99ีà¹\89อาà¸\88à¸\97ำà¹\83หà¹\89à¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87à¸\97ัà¹\89à¸\87หมà¸\94à¸\97ีà¹\88à¸\84ุà¸\93à¹\84à¸\94à¹\89à¸\97ำสูà¸\8dหาย\nà¸\96à¹\89าà¸\84ุà¸\93à¹\80à¸\82à¹\89าสูà¹\88ระà¸\9aà¸\9aแล้ว คุณสามารถปิดคำเตือนนี้ได้ที่ส่วน \"{{int:prefs-editing}}\" ในการตั้งค่าของคุณ",
        "editpage-invalidcontentmodel-title": "ไม่รองรับรูปแบบเนื้อหานี้",
        "editpage-invalidcontentmodel-text": "ไม่รองรับโมเดลเนื้อหา \"$1\"",
        "editpage-notsupportedcontentformat-title": "รูปแบบเนื้อหาไม่ได้รับการรองรับ",
        "content-json-empty-object": "วัตถุเปล่า",
        "content-json-empty-array": "แถวเปล่า",
        "deprecated-self-close-category": "หน้าที่ใช้ป้าย HTML ที่ปิดเองที่ไม่ถูกต้อง",
+       "deprecated-self-close-category-desc": "หน้านี้มีป้ายระบุ HTML ที่ปิดเองที่ไม่ถูกต้อง เช่น <code>&lt;b/></code> หรือ <code>&lt;span/></code> ลักษณะการทำงานของป้ายระบุเหล่านี้จะเปลี่ยนในไม่ช้าเพื่อให้สอดคล้องกับคุณสมบัติของ HTML5 ดังนั้นป้ายระบุเหล่านี้ในข้อความวิกิจะถูกเลิกใช้",
        "duplicate-args-warning": "<strong>คำเตือน:</strong> [[:$1]] กำลังเรียกใช้ [[:$2]] ด้วยค่ามากกว่าหนึ่งค่าสำหรับตัวแปร \"$3\" เฉพาะค่าสุดท้ายที่ระบุเท่านั้นจะถูกนำมาใช้",
        "duplicate-args-category": "หน้าที่ใช้อาร์กิวเมนต์ซ้ำในการเรียกแม่แบบ",
+       "duplicate-args-category-desc": "หน้านี้มีการเรียกแม่แบบที่ใช้อาร์กิวเมนต์ซ้ำ เช่น <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> หรือ <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>",
        "expensive-parserfunction-warning": "<strong>คำเตือน:</strong> หน้านี้มีการเรียกใช้ฟังก์ชันแจงส่วนมากเกินไป\n\nหน้านี้ควรมีการเรียกใช้น้อยกว่า $2  ครั้ง แต่ปัจจุบันมีการเรียกใช้ $1 ครั้ง",
        "expensive-parserfunction-category": "หน้าที่มีการเรียกใช้ฟังก์ชันแจงส่วนมากเกินไป",
        "post-expand-template-inclusion-warning": "<strong>คำเตือน:</strong> แม่แบบที่นำมารวมมีขนาดใหญ่เกินไป\nจะไม่รวมบางแม่แบบเข้ามา",
        "parser-template-recursion-depth-warning": "เกินขีดจำกัดความลึกการเรียกแม่แบบซ้ำ ($1)",
        "language-converter-depth-warning": "เกินขีดจำกัดความลึกตัวแปลงผันภาษา ($1)",
        "node-count-exceeded-category": "หน้าที่จำนวนปมเกิน",
+       "node-count-exceeded-category-desc": "หน้านี้มีปมเกินจำนวนสูงสุด",
        "node-count-exceeded-warning": "หน้าเกินจำนวนปม",
        "expansion-depth-exceeded-category": "หน้าที่ความลึกการขยายเกิน",
+       "expansion-depth-exceeded-category-desc": "หน้านี้มีความลึกการขยายเกินขีดสูงสุด",
        "expansion-depth-exceeded-warning": "หน้าเกินความลึกการขยาย",
        "parser-unstrip-loop-warning": "พบวงวน unstrip",
-       "unstrip-depth-warning": "ขีดจำกัดการเรียกซ้ำ unstrip เกิน ($1)",
+       "unstrip-depth-warning": "ขีดจำกัดความลึก unstrip เกิน ($1)",
+       "unstrip-depth-category": "หน้าที่ขีดจำกัดความลึก unstrip เกิน",
+       "unstrip-size-warning": "ขีดจำกัดขนาด unstrip เกิน ($1)",
+       "unstrip-size-category": "หน้าที่ขีดจำกัดขนาด unstrip เกิน",
        "converter-manual-rule-error": "พบข้อผิดพลาดในกฎการแปลงผันภาษาด้วยมือ",
        "undo-success": "สามารถย้อนการแก้ไขนี้กลับได้ \nกรุณาตรวจสอบข้อแตกต่างด้านล่างเพื่อทวนสอบว่านี่เป็นสิ่งที่คุณต้องการทำ แล้วบันทึกการเปลี่ยนแปลงด้านล่างเพื่อเสร็จสิ้นการย้อนการแก้ไขกลับ",
        "undo-failure": "การแก้ไขนี้ไม่สามารถย้อนกลับได้ เนื่องจากขัดแย้งกับการแก้ไขระหว่างกลาง",
        "revdelete-no-change": "<strong>คำเตือน:</strong> รายการวันที่ $2 เวลา $1 ตั้งค่าทัศนวิสัยตามที่ขออยู่แล้ว",
        "revdelete-concurrent-change": "มีข้อผิดพลาดในการดัดแปรรายการลงวันที่ $2 เวลา $1: ดูเหมือนว่ามีผู้เปลี่ยนสถานะของรายการขณะคุณพยายามดัดแปร\nโปรดตรวจสอบปูม",
        "revdelete-only-restricted": "มีข้อผิดพลาดในการซ่อนรายการวันที่ $2 เวลา $1: คุณไม่สามารถยับยั้งมิให้ผู้ดูแลระบบดูรุ่นนี้ได้โดยไม่เลือกตัวเลือกทัศนวิสัยอื่นด้วย",
-       "revdelete-reason-dropdown": "*à¹\80หà¸\95ุà¸\9cลà¸\81ารลà¸\9aà¸\97ัà¹\88วà¹\84à¸\9b\n** à¸¥à¸°à¹\80มิà¸\94ลิà¸\82สิà¸\97à¸\98ิà¹\8c\n** à¸\84วามà¹\80หà¹\87à¸\99à¹\84มà¹\88à¹\80หมาะสมหรือสารสà¸\99à¹\80à¸\97ศสà¹\88วà¸\99à¸\9aุà¸\84à¸\84ล\n** à¸\8aืà¹\88อà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¹\84มà¹\88à¹\80หมาะสม\n** à¸ªà¸²à¸£à¸ªà¸\99à¹\80à¸\97ศที่อาจหมิ่นประมาท",
+       "revdelete-reason-dropdown": "*à¹\80หà¸\95ุà¸\9cลà¸\81ารลà¸\9aà¸\97ัà¹\88วà¹\84à¸\9b\n** à¸¥à¸°à¹\80มิà¸\94ลิà¸\82สิà¸\97à¸\98ิà¹\8c\n** à¸\84วามà¹\80หà¹\87à¸\99à¹\84มà¹\88à¹\80หมาะสมหรือà¸\82à¹\89อมูลสà¹\88วà¸\99à¸\9aุà¸\84à¸\84ล\n** à¸\8aืà¹\88อà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¹\84มà¹\88à¹\80หมาะสม\n** à¸\82à¹\89อมูลที่อาจหมิ่นประมาท",
        "revdelete-otherreason": "เหตุผลอื่น/เพิ่มเติม:",
        "revdelete-reasonotherlist": "เหตุผลอื่น",
        "revdelete-edit-reasonlist": "แก้ไขเหตุผลการลบ",
        "preferences": "ตั้งค่าผู้ใช้",
        "mypreferences": "ตั้งค่าผู้ใช้",
        "prefs-edits": "จำนวนการแก้ไข:",
-       "prefsnologintext2": "à¹\82à¸\9bรà¸\94ลà¹\87อà¸\81อิà¸\99à¹\80à¸\9eืà¹\88อà¹\80à¸\9bลีà¹\88ยà¸\99การตั้งค่าของคุณ",
+       "prefsnologintext2": "à¹\82à¸\9bรà¸\94à¹\80à¸\82à¹\89าสูà¹\88ระà¸\9aà¸\9aà¹\80à¸\9eืà¹\88อà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87การตั้งค่าของคุณ",
        "prefs-skin": "หน้าตา",
        "skin-preview": "ตัวอย่าง",
        "datedefault": "ไม่ตั้งค่า",
        "prefs-watchlist-edits": "จำนวนการเปลี่ยนแปลงมากสุดที่แสดงในรายการเฝ้าดู:",
        "prefs-watchlist-edits-max": "จำนวนสูงสุด: 1000",
        "prefs-watchlist-token": "โทเค็นรายการเฝ้าดู:",
+       "prefs-watchlist-managetokens": "จัดการโทเค็น",
        "prefs-misc": "เบ็ดเตล็ด",
        "prefs-resetpass": "เปลี่ยนรหัสผ่าน",
        "prefs-changeemail": "เปลี่ยนหรือลบที่อยู่อีเมล",
        "stub-threshold": "ความยาวของหน้าที่ใช้เป็นเส้นแบ่งในการระบุหน้าโครง เพื่อจะให้มีการจัดรูปแบบเฉพาะตัว สำหรับลิงก์ที่โยงมายังโครง ($1):",
        "stub-threshold-sample-link": "ตัวอย่าง",
        "stub-threshold-disabled": "ปิดใช้งาน",
-       "recentchangesdays": "à¸\88ำà¸\99วà¸\99วัà¸\99à¸\97ีà¹\88à¹\81สà¸\94à¸\87à¹\83à¸\99à¸\9bรัà¸\9aà¸\9bรุงล่าสุด:",
+       "recentchangesdays": "à¸\88ำà¸\99วà¸\99วัà¸\99à¸\97ีà¹\88à¹\81สà¸\94à¸\87à¹\83à¸\99à¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลงล่าสุด:",
        "recentchangesdays-max": "มากสุด $1 วัน",
        "recentchangescount": "จำนวนการแก้ไขที่แสดงในเปลี่ยนแปลงล่าสุด ประวัติหน้า และในปูม โดยปริยาย:",
        "prefs-help-recentchangescount": "จำนวนสูงสุด: 1000",
        "default": "ค่าปริยาย",
        "prefs-files": "ไฟล์",
        "prefs-custom-css": "สไตล์ชีตปรับแต่งเอง",
+       "prefs-custom-json": "JSON กำหนดเอง",
        "prefs-custom-js": "จาวาสคริปต์ปรับแต่งเอง",
-       "prefs-common-config": "CSS / จาวาสคริปต์รวมสำหรับทุกหน้าตา:",
+       "prefs-common-config": "CSS/JSON/จาวาสคริปต์รวมสำหรับทุกหน้าตา:",
        "prefs-reset-intro": "คุณสามารถใช้หน้านี้ตั้งการตั้งค่าของคุณเป็นค่าปริยายของเว็บใหม่\nไม่สามารถทำกลับได้",
        "prefs-emailconfirm-label": "การยืนยันอีเมล:",
        "youremail": "อีเมล:",
        "gender-unknown": "เมื่อกล่าวถึงคุณ ซอฟต์แวร์จะใช้คำที่ไม่ระบุเพศทุกเมื่อที่เป็นไปได้",
        "gender-male": "ชาย",
        "gender-female": "หญิง",
-       "prefs-help-gender": "à¹\80ลือà¸\81à¸\95ัà¹\89à¸\87à¸\84à¹\88าà¸\99ีà¹\89หรือà¹\84มà¹\88à¸\81à¹\87à¹\84à¸\94à¹\89\nà¸\8bอà¸\9fà¸\95à¹\8cà¹\81วรà¹\8cà¹\83à¸\8aà¹\89à¸\84à¹\88าà¸\99ีà¹\89à¹\80à¸\9eืà¹\88อà¸\95ิà¸\94à¸\95à¹\88อà¸\84ุà¸\93à¹\81ละà¸\81ลà¹\88าวà¸\96ึà¸\87à¸\84ุà¸\93à¹\82à¸\94ยà¹\83à¸\8aà¹\89à¹\80à¸\9eศà¸\97าà¸\87à¹\84วยาà¸\81รà¸\93à¹\8cà¸\97ีà¹\88à¹\80หมาะสมà¹\80มืà¹\88อà¸\95ิà¸\94à¸\95à¹\88อà¸\9cูà¹\89อืà¹\88à¸\99\nสารสà¸\99à¹\80à¸\97ศนี้เปิดเผยต่อสาธารณะ",
+       "prefs-help-gender": "à¹\80ลือà¸\81à¸\95ัà¹\89à¸\87à¸\84à¹\88าà¸\99ีà¹\89หรือà¹\84มà¹\88à¸\81à¹\87à¹\84à¸\94à¹\89\nà¸\8bอà¸\9fà¸\95à¹\8cà¹\81วรà¹\8cà¹\83à¸\8aà¹\89à¸\84à¹\88าà¸\99ีà¹\89à¹\80à¸\9eืà¹\88อà¸\95ิà¸\94à¸\95à¹\88อà¸\84ุà¸\93à¹\81ละà¸\81ลà¹\88าวà¸\96ึà¸\87à¸\84ุà¸\93à¹\82à¸\94ยà¹\83à¸\8aà¹\89à¹\80à¸\9eศà¸\97าà¸\87à¹\84วยาà¸\81รà¸\93à¹\8cà¸\97ีà¹\88à¹\80หมาะสมà¹\80มืà¹\88อà¸\95ิà¸\94à¸\95à¹\88อà¸\9cูà¹\89อืà¹\88à¸\99\nà¸\82à¹\89อมูลนี้เปิดเผยต่อสาธารณะ",
        "email": "อีเมล",
        "prefs-help-realname": "ไม่ต้องใช้ชื่อจริง \nหากใช้ จะใช้เพื่อบ่งชี้งานของคุณว่ามาจากคุณ",
        "prefs-help-email": "ไม่จำเป็นต้องใส่ที่อยู่อีเมล แต่จำเป็นสำหรับการตั้งรหัสผ่านใหม่หากคุณลืมรหัสผ่าน",
        "prefs-help-email-others": "คุณยังสามารถเลือกให้ผู้อื่นติดต่อคุณโดยอีเมลผ่านลิงก์บนหน้าผู้ใช้หรือหน้าพูดคุยกับผู้ใช้ของคุณ\nไม่เปิดเผยที่อยู่อีเมลของคุณเมื่อผู้ใช้อื่นติดต่อคุณ",
        "prefs-help-email-required": "ต้องการที่อยู่อีเมล",
-       "prefs-info": "สารสà¸\99à¹\80à¸\97ศเบื้องต้น",
+       "prefs-info": "à¸\82à¹\89อมูลเบื้องต้น",
        "prefs-i18n": "สากลวิวัตน์",
        "prefs-signature": "ลายเซ็น",
        "prefs-dateformat": "รูปแบบวันที่",
        "group-autoconfirmed": "ผู้ใช้ทั่วไป",
        "group-bot": "บอต",
        "group-sysop": "ผู้ดูแลระบบ",
+       "group-interface-admin": "ผู้ดูแลอินเตอร์เฟซ",
        "group-bureaucrat": "ผู้ดูแลระบบสิทธิแต่งตั้ง",
        "group-suppress": "ผู้ดูแลประวัติ",
        "group-all": "(ทั้งหมด)",
        "group-autoconfirmed-member": "{{GENDER:$1|ผู้ใช้ทั่วไป}}",
        "group-bot-member": "{{GENDER:$1|บอต}}",
        "group-sysop-member": "{{GENDER:$1|ผู้ดูแลระบบ}}",
+       "group-interface-admin-member": "{{GENDER:$1|ผู้ดูแลอินเตอร์เฟซ}}",
        "group-bureaucrat-member": "{{GENDER:$1|ผู้ดูแลระบบสิทธิแต่งตั้ง}}",
        "group-suppress-member": "{{GENDER:$1|ผู้ดูแลประวัติ}}",
        "grouppage-user": "{{ns:project}}:ผู้ใช้",
        "grouppage-autoconfirmed": "{{ns:project}}:ผู้ใช้ทั่วไป",
        "grouppage-bot": "{{ns:project}}:บอต",
        "grouppage-sysop": "{{ns:project}}:ผู้ดูแลระบบ",
+       "grouppage-interface-admin": "{{ns:project}}:ผู้ดูแลอินเตอร์เฟซ",
        "grouppage-bureaucrat": "{{ns:project}}:ผู้ดูแลระบบสิทธิแต่งตั้ง",
        "grouppage-suppress": "{{ns:project}}:ผู้ดูแลประวัติ",
        "right-read": "อ่านหน้า",
        "right-createpage": "สร้างหน้า (ที่ไม่ใช่หน้าอภิปราย)",
        "right-createtalk": "สร้างหน้าอภิปราย",
        "right-createaccount": "สร้างบัญชีผู้ใช้ใหม่",
-       "right-autocreateaccount": "ลà¹\87อà¸\81อิà¸\99à¹\82à¸\94ยà¹\83à¸\8aà¹\89บัญชีผู้ใช้ภายนอกอัตโนมัติ",
+       "right-autocreateaccount": "à¹\80à¸\82à¹\89าสูà¹\88ระà¸\9aà¸\9aà¸\94à¹\89วยบัญชีผู้ใช้ภายนอกอัตโนมัติ",
        "right-minoredit": "ทำเครื่องหมายการแก้ไขเป็นการแก้ไขเล็กน้อย",
        "right-move": "ย้ายหน้า",
        "right-move-subpages": "ย้ายหน้าพร้อมหน้าย่อย",
        "right-purge": "ล้างแคชของเว็บไซต์โดยไม่ยืนยัน",
        "right-autoconfirmed": "ไม่ได้รับผลจากขีดจำกัดอัตรายึดเลขที่อยู่ไอพี",
        "right-bot": "กำหนดเป็นกระบวนการอัตโนมัติ",
-       "right-nominornewtalk": "หาà¸\81à¹\84มà¹\88มีà¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¹\80ลà¹\87à¸\81à¸\99à¹\89อยà¹\83à¸\99หà¸\99à¹\89าอภิà¸\9bรายà¸\88ะà¸\97ำà¹\83หà¹\89à¸\81ารà¹\81à¸\88à¹\89à¸\87สารใหม่ปรากฏ",
+       "right-nominornewtalk": "หาà¸\81à¹\84มà¹\88มีà¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¹\80ลà¹\87à¸\81à¸\99à¹\89อยà¹\83à¸\99หà¸\99à¹\89าอภิà¸\9bรายà¸\88ะà¸\97ำà¹\83หà¹\89à¸\81ารà¹\81à¸\88à¹\89à¸\87à¸\82à¹\89อà¸\84วามใหม่ปรากฏ",
        "right-apihighlimits": "ใช้ข้อจำกัดที่สูงขึ้นในคำสั่งเอพีไอ",
        "right-writeapi": "ใช้การเขียนเอพีไอ",
        "right-delete": "ลบหน้า",
        "grant-highvolume": "การแก้ไขในปริมาณสูง",
        "grant-oversight": "ซ่อนผู้ใช้ และ ยับยั้งรุ่นปรับปรุง",
        "grant-patrol": "ลาดตระเวนตรวจการเปลี่ยนแปลงหน้าต่าง ๆ",
-       "grant-privateinfo": "à¹\80à¸\82à¹\89าà¸\96ึà¸\87à¸\82à¹\89อมูลสà¹\88วà¸\99à¸\9aุà¸\84à¸\84ล",
+       "grant-privateinfo": "à¹\80à¸\82à¹\89าà¸\96ึà¸\87à¸\82à¹\89อมูลสà¹\88วà¸\99à¸\95ัว",
        "grant-protect": "ล็อกและปลดล็อกหน้าต่าง ๆ",
        "grant-rollback": "ย้อนการเปลี่ยนแปลงในหน้ารวดเดียว",
        "grant-sendemail": "ส่งอีเมลหาผู้ใช้อื่น",
        "action-editmyoptions": "แก้ไขการตั้งค่าของคุณ",
        "action-editmywatchlist": "แก้ไขรายการเฝ้าดูของคุณ",
        "action-viewmywatchlist": "ดูรายการเฝ้าดูของคุณ",
-       "action-viewmyprivateinfo": "à¸\94ูสารสà¸\99à¹\80à¸\97ศส่วนตัวของคุณ",
+       "action-viewmyprivateinfo": "à¸\94ูà¸\82à¹\89อมูลส่วนตัวของคุณ",
        "action-editmyprivateinfo": "แก้ไขสารสนเทศส่วนตัวของคุณ",
        "action-editcontentmodel": "แก้ไขตัวแบบเนื้อหาของหน้า",
        "action-managechangetags": "สร้างและ(เ)ปิดใช้งานป้ายระบุ",
        "rcfilters-watchlist-edit-watchlist-button": "แก้ไขรายการหน้าเฝ้าดูของคุณ",
        "rcfilters-watchlist-showupdated": "การเปลี่ยนแปลงหน้าที่คุณไม่ได้ชมตั้งแต่มีการเปลี่ยนแปลงแสดงด้วย <strong>ตัวหนา</strong> โดยมีเครื่องหมายเข้ม",
        "rcfilters-preference-label": "ซ่อนรุ่นปรับปรุงของรายการเปลี่ยนแปลงล่าสุด",
-       "rcfilters-preference-help": "ยà¹\89อà¸\99à¸\81ลัà¸\9aà¸\81ารออà¸\81à¹\81à¸\9aà¸\9aอิà¸\99à¹\80à¸\95อรà¹\8cà¹\80à¸\9fà¸\8bà¹\83หมà¹\88à¸\9bี 2560 à¹\81ละอุà¸\9bà¸\81รà¸\93à¹\8cทั้งหมดที่เพิ่มเข้ามาหลังจากนั้น",
+       "rcfilters-preference-help": "ยà¹\89อà¸\99à¸\81ลัà¸\9aà¸\81ารออà¸\81à¹\81à¸\9aà¸\9aอิà¸\99à¹\80à¸\95อรà¹\8cà¹\80à¸\9fà¸\8bà¹\83หมà¹\88à¸\9bี 2560 à¹\81ละà¹\80à¸\84รืà¹\88อà¸\87มือทั้งหมดที่เพิ่มเข้ามาหลังจากนั้น",
        "rcfilters-watchlist-preference-label": "ซ่อนรายการเฝ้าดูรุ่นปรับปรุง",
-       "rcfilters-watchlist-preference-help": "ย้อนการออกแบบอินเตอร์เฟซใหม่ปี 2560 และเครื่องมือที่เพิ่มเข้ามาหลังจากนั้น",
+       "rcfilters-watchlist-preference-help": "ยà¹\89อà¸\99à¸\81ลัà¸\9aà¸\81ารออà¸\81à¹\81à¸\9aà¸\9aอิà¸\99à¹\80à¸\95อรà¹\8cà¹\80à¸\9fà¸\8bà¹\83หมà¹\88à¸\9bี 2560 à¹\81ละà¹\80à¸\84รืà¹\88อà¸\87มือà¸\97ีà¹\88à¹\80à¸\9eิà¹\88มà¹\80à¸\82à¹\89ามาหลัà¸\87à¸\88าà¸\81à¸\99ัà¹\89à¸\99",
        "rcfilters-filter-showlinkedfrom-label": "แสดงการเปลี่ยนแปลงในหน้าที่ลิงก์มาจาก",
        "rcfilters-filter-showlinkedfrom-option-label": "<strong>หน้าที่ลิงก์มา</strong>จากหน้าที่เลือก",
        "rcfilters-filter-showlinkedto-label": "แสดงการเปลี่ยนแปลงในหน้าที่ลิงก์ไป",
        "img-auth-nopathinfo": "PATH_INFO สูญหาย\nเซิร์ฟเวอร์ของคุณอาจไม่ได้ถูกตั้งให้ส่งสารสนเทศนี้\nอาจเป็นแบบ CGI-based และไม่สามารถสนับสนุน img_auth\nดูที่ https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization",
        "img-auth-notindir": "ที่อยู่ที่ร้องขอไม่ได้อยู่ในสารบบอัพโหลดที่กำหนดไว้",
        "img-auth-badtitle": "ไม่สามารถสร้างชื่อเรื่องที่ถูกต้องจาก \"$1\"",
-       "img-auth-nologinnWL": "à¸\84ุà¸\93à¹\84มà¹\88à¹\84à¸\94à¹\89ลà¹\87อà¸\81อิà¸\99และ \"$1\" ไม่ได้อยู่ในรายชื่อผู้ใช้ที่ได้รับอนุญาต (whitelist)",
+       "img-auth-nologinnWL": "à¸\84ุà¸\93à¹\84มà¹\88à¹\84à¸\94à¹\89à¹\80à¸\82à¹\89าสูà¹\88ระà¸\9aà¸\9aและ \"$1\" ไม่ได้อยู่ในรายชื่อผู้ใช้ที่ได้รับอนุญาต (whitelist)",
        "img-auth-nofile": "ไม่มีไฟล์ \"$1\"",
        "img-auth-isdir": "คุณกำลังพยายามเข้าถึงสารบบ \"$1\"\nอนุญาตเฉพาะการเข้าถึงไฟล์",
        "img-auth-streaming": "กำลังดึงข้อมูล \"$1\"",
        "linkstoimage-redirect": "$1 (ไฟล์เปลี่ยนทาง) $2",
        "duplicatesoffile": "$1 ไฟล์ต่อไปนี้ เป็นไฟล์เดียวกับไฟล์นี้ ([[Special:FileDuplicateSearch/$2|รายละเอียดเพิ่มเติม]]):",
        "sharedupload": "ไฟล์นี้มาจาก $1 และอาจมีใช้ในโครงการอื่น",
-       "sharedupload-desc-there": "à¹\84à¸\9fลà¹\8cà¸\99ีà¹\89มาà¸\88าà¸\81 $1 à¹\81ละอาà¸\88à¹\83à¸\8aà¹\89à¸\9aà¸\99à¹\82à¸\84รà¸\87à¸\81ารอืà¹\88à¸\99\nà¸\81รุà¸\93าà¸\94ู[หà¸\99à¹\89าà¸\84ำอà¸\98ิà¸\9aายà¹\84à¸\9fลà¹\8c $2] à¸ªà¸³à¸«à¸£à¸±à¸\9aสารสà¸\99à¹\80à¸\97ศเพิ่มเติม",
+       "sharedupload-desc-there": "à¹\84à¸\9fลà¹\8cà¸\99ีà¹\89มาà¸\88าà¸\81 $1 à¹\81ละอาà¸\88à¹\83à¸\8aà¹\89à¸\9aà¸\99à¹\82à¸\84รà¸\87à¸\81ารอืà¹\88à¸\99\nà¸\81รุà¸\93าà¸\94ู[หà¸\99à¹\89าà¸\84ำอà¸\98ิà¸\9aายà¹\84à¸\9fลà¹\8c $2] à¸ªà¸³à¸«à¸£à¸±à¸\9aà¸\82à¹\89อมูลเพิ่มเติม",
        "sharedupload-desc-here": "ไฟล์นี้มาจาก $1 และอาจมีใช้ในโครงการอื่น\nคำอธิบายใน[$2 หน้าคำอธิบายไฟล์]แสดงไว้ด้านล่างนี้",
        "sharedupload-desc-edit": "ไฟล์นี้มาจาก $1 และอาจมีใช้ในโครงการอื่น\nคุณอาจต้องการแก้ไขคำอธิบายใน[$2 หน้าคำอธิบายไฟล์]นั้น",
        "sharedupload-desc-create": "ไฟล์นี้มาจาก $1 และอาจมีใช้ไฟล์นี้ในโครงการอื่น\nคุณอาจต้องการแก้ไขคำอธิบายใน[$2 หน้าคำอธิบายไฟล์]นั้น",
        "booksources": "แหล่งหนังสือ",
        "booksources-search-legend": "ค้นหาแหล่งหนังสือ",
        "booksources-search": "ค้นหา",
-       "booksources-text": "à¸\94à¹\89าà¸\99ลà¹\88าà¸\87à¹\80à¸\9bà¹\87à¸\99รายà¸\81ารà¸\81ารà¹\80à¸\8aืà¹\88อมà¹\82ยà¸\87à¹\84à¸\9bยัà¸\87à¹\80วà¹\87à¸\9aà¹\84à¸\8bà¸\95à¹\8cอืà¹\88à¸\99à¸\97ีà¹\88à¸\82ายหà¸\99ัà¸\87สือà¹\83หมà¹\88à¹\81ละหà¸\99ัà¸\87สือà¹\83à¸\8aà¹\89à¹\81ลà¹\89ว à¹\81ละอาà¸\88มีสารสà¸\99à¹\80à¸\97ศเพิ่มเติมเกี่ยวกับหนังสือที่คุณกำลังมองหา:",
+       "booksources-text": "à¸\94à¹\89าà¸\99ลà¹\88าà¸\87à¹\80à¸\9bà¹\87à¸\99รายà¸\81ารà¸\81ารà¹\80à¸\8aืà¹\88อมà¹\82ยà¸\87à¹\84à¸\9bยัà¸\87à¹\80วà¹\87à¸\9aà¹\84à¸\8bà¸\95à¹\8cอืà¹\88à¸\99à¸\97ีà¹\88à¸\82ายหà¸\99ัà¸\87สือà¹\83หมà¹\88à¹\81ละหà¸\99ัà¸\87สือà¹\83à¸\8aà¹\89à¹\81ลà¹\89ว à¹\81ละอาà¸\88มีà¸\82à¹\89อมูลเพิ่มเติมเกี่ยวกับหนังสือที่คุณกำลังมองหา:",
        "booksources-invalid-isbn": "รหัส ISBN ที่ให้ไว้ไม่ถูกต้อง กรุณาตรวจสอบจากต้นฉบับอีกครั้ง",
        "specialloguserlabel": "ผู้ดำเนินการ:",
        "speciallogtitlelabel": "เป้าหมาย (ชื่อเรื่องหรือ {{ns:user}}:ชื่อผู้ใช้ สำหรับผู้ใช้):",
        "activeusers-noresult": "ไม่พบผู้ใช้",
        "activeusers-submit": "แสดงผู้ใช้ที่ยังเคลื่อนไหว",
        "listgrouprights": "สิทธิกลุ่มผู้ใช้",
-       "listgrouprights-summary": "à¸\94à¹\89าà¸\99ลà¹\88าà¸\87à¹\80à¸\9bà¹\87à¸\99รายà¸\81ารà¸\81ลุà¹\88มà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\97ีà¹\88à¸\99ิยามà¸\9aà¸\99วิà¸\81ิà¸\99ีà¹\89 à¹\81ละสิà¸\97à¸\98ิà¸\81ารà¹\80à¸\82à¹\89าà¸\96ึà¸\87à¸\97ีà¹\88à¹\80à¸\81ีà¹\88ยวà¸\82à¹\89อà¸\87\nอาà¸\88มี[[{{MediaWiki:Listgrouprights-helppage}}|สารสà¸\99à¹\80à¸\97ศเพิ่มเติม]]เกี่ยวกับสิทธิหนึ่ง ๆ",
+       "listgrouprights-summary": "à¸\94à¹\89าà¸\99ลà¹\88าà¸\87à¹\80à¸\9bà¹\87à¸\99รายà¸\81ารà¸\81ลุà¹\88มà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\97ีà¹\88à¸\99ิยามà¸\9aà¸\99วิà¸\81ิà¸\99ีà¹\89 à¹\81ละสิà¸\97à¸\98ิà¸\81ารà¹\80à¸\82à¹\89าà¸\96ึà¸\87à¸\97ีà¹\88à¹\80à¸\81ีà¹\88ยวà¸\82à¹\89อà¸\87\nอาà¸\88มี[[{{MediaWiki:Listgrouprights-helppage}}|à¸\82à¹\89อมูลเพิ่มเติม]]เกี่ยวกับสิทธิหนึ่ง ๆ",
        "listgrouprights-key": "คำอธิบาย:\n* <span class=\"listgrouprights-granted\">สิทธิที่ได้รับแต่งตั้ง</span>\n* <span class=\"listgrouprights-revoked\">สิทธิที่ถูกเพิกถอน</span>",
        "listgrouprights-group": "กลุ่ม",
        "listgrouprights-rights": "สิทธิ",
        "listgrants-grant": "การให้สิทธิ",
        "listgrants-rights": "สิทธิ",
        "trackingcategories": "หมวดหมู่ค้นหาและติดตาม",
-       "trackingcategories-summary": "หà¸\99à¹\89าà¸\99ีà¹\89à¹\81สà¸\94à¸\87รายà¸\81ารหมวà¸\94หมูà¹\88à¸\84à¹\89à¸\99หาà¹\81ละà¸\95ิà¸\94à¸\95ามà¸\8bึà¹\88à¸\87à¸\8bอà¸\9fà¸\95à¹\8cà¹\81วรà¹\8cมีà¹\80à¸\94ียวิà¸\81ิà¸\88ัà¸\94à¸\81ารอัà¸\95à¹\82à¸\99มัà¸\95ิ à¸ªà¸²à¸¡à¸²à¸£à¸\96à¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อà¹\80หลà¹\88าà¸\99ีà¹\89à¹\84à¸\94à¹\89à¹\82à¸\94ยà¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99สารระบบที่เกี่ยวข้องในเนมสเปซ {{ns:8}}",
+       "trackingcategories-summary": "หà¸\99à¹\89าà¸\99ีà¹\89à¹\81สà¸\94à¸\87รายà¸\81ารหมวà¸\94หมูà¹\88à¸\84à¹\89à¸\99หาà¹\81ละà¸\95ิà¸\94à¸\95ามà¸\8bึà¹\88à¸\87à¸\8bอà¸\9fà¸\95à¹\8cà¹\81วรà¹\8cมีà¹\80à¸\94ียวิà¸\81ิà¸\88ัà¸\94à¸\81ารอัà¸\95à¹\82à¸\99มัà¸\95ิ à¸ªà¸²à¸¡à¸²à¸£à¸\96à¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อà¹\80หลà¹\88าà¸\99ีà¹\89à¹\84à¸\94à¹\89à¹\82à¸\94ยà¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¸\82à¹\89อà¸\84วามระบบที่เกี่ยวข้องในเนมสเปซ {{ns:8}}",
        "trackingcategories-msg": "หมวดหมู่ค้นหาและติดตาม",
-       "trackingcategories-name": "à¸\8aืà¹\88อสาร",
+       "trackingcategories-name": "à¸\8aืà¹\88อà¸\82à¹\89อà¸\84วาม",
        "trackingcategories-desc": "เกณฑ์การรวมหมวดหมู่",
        "restricted-displaytitle-ignored": "หน้าที่มีชื่อเรื่องแสดงที่ถูกละเลย",
        "restricted-displaytitle-ignored-desc": "หน้ามี <code><nowiki>{{DISPLAYTITLE}}</nowiki></code> ที่ถูกละเลย เพราะไม่สมนัยกับชื่อเรื่องแท้จริงของหน้า",
        "noindex-category-desc": "โรบอตไม่สามารถทำดัชนีหน้านี้เพราะมีเมจิกเวิร์ด <code><nowiki>__NOINDEX__</nowiki></code> อยู่และอยู่ในเนมสเปซซึ่งอนุญาตตัวบ่งชี้นี้",
        "index-category-desc": "หน้านี้มี <code><nowiki>__INDEX__</nowiki></code> อยู่ (และอยู่ในเนมสเปซซึ่งอนุญาตตัวบ่งชี้นี้) ฉะนั้น โรบอตจึงทำดัชนี้ได้ ซึ่งปกติไม่สามารถทำได้",
        "post-expand-template-inclusion-category-desc": "การแทนที่แม่แบบทั้งหมดทำให้ขนาดของหน้าใหญ่กว่า <code>$wgMaxArticleSize</code> จึงไม่มีการแทนที่แม่แบบบางตัว",
+       "post-expand-template-argument-category-desc": "หน้านี้มีขนาดใหญ่กว่า <code>$wgMaxArticleSize</code> หลังจากขยายอาร์กิวเมนต์ของแม่แบบ (สิ่งที่อยู่ภายในวงเล็บปีกกาสามวง เช่น <code>{{{Foo}}}</code>)",
        "broken-file-category-desc": "หน้ามีลิงก์ไฟล์เสีย (ลิงก์เพื่อฝังตัวไฟล์เมื่อไม่มีไฟล์)",
        "hidden-category-category-desc": "หมวดหมู่นี้มี <code><nowiki>__HIDDENCAT__</nowiki></code> ในเนื้อหาหน้า ซึ่งป้องกันมิให้แสดงในกล่องลิงก์หมวดหมู่ในหน้าโดยปริยาย",
        "trackingcategories-nodesc": "ไม่มีคำอธิบาย",
        "trackingcategories-disabled": "ปิดใช้งานหมวดหมู่",
        "mailnologin": "ไม่มีที่อยู่ส่ง",
-       "mailnologintext": "à¸\84ุà¸\93à¸\95à¹\89อà¸\87[[Special:UserLogin|ลà¹\87อà¸\81อิà¸\99]]และมีที่อยู่อีเมลที่สมเหตุสมผลใน[[Special:Preferences|การตั้งค่า]]ของคุณเพื่อส่งอีเมลหาผู้ใช้อื่น",
+       "mailnologintext": "à¸\84ุà¸\93à¸\95à¹\89อà¸\87[[Special:UserLogin|à¹\80à¸\82à¹\89าสูà¹\88ระà¸\9aà¸\9a]]และมีที่อยู่อีเมลที่สมเหตุสมผลใน[[Special:Preferences|การตั้งค่า]]ของคุณเพื่อส่งอีเมลหาผู้ใช้อื่น",
        "emailuser": "ส่งอีเมลหาผู้ใช้นี้",
        "emailuser-title-target": "ส่งอีเมลหา{{GENDER:$1|ผู้ใช้}}",
        "emailuser-title-notarget": "อีเมลผู้ใช้",
-       "emailpagetext": "คุณสามารถใช้แบบด้านล่างส่งอีเมลหา{{GENDER:$1|ผู้ใช้}}นี้\nที่อยู่อีเมลที่คุณกรอกใน[[Special:Preferences|การตั้งค่าส่วนตัวของคุณ]]จะปรากฏเป็นที่อยู่ \"จาก\" ของอีเมล ซึ่งผู้รับสามารถตอบกลับคุณได้โดยตรง",
+       "emailpagetext": "à¸\84ุà¸\93สามารà¸\96à¹\83à¸\8aà¹\89à¹\81à¸\9aà¸\9aà¸\94à¹\89าà¸\99ลà¹\88าà¸\87สà¹\88à¸\87à¸\82à¹\89อà¸\84วามอีà¹\80มลหา{{GENDER:$1|à¸\9cูà¹\89à¹\83à¸\8aà¹\89}}à¸\99ีà¹\89\nà¸\97ีà¹\88อยูà¹\88อีà¹\80มลà¸\97ีà¹\88à¸\84ุà¸\93à¸\81รอà¸\81à¹\83à¸\99[[Special:Preferences|à¸\81ารà¸\95ัà¹\89à¸\87à¸\84à¹\88าสà¹\88วà¸\99à¸\95ัวà¸\82อà¸\87à¸\84ุà¸\93]]à¸\88ะà¸\9bราà¸\81à¸\8fà¹\80à¸\9bà¹\87à¸\99à¸\97ีà¹\88อยูà¹\88 \"à¸\88าà¸\81\" à¸\82อà¸\87อีà¹\80มล à¸\8bึà¹\88à¸\87à¸\9cูà¹\89รัà¸\9aสามารà¸\96à¸\95อà¸\9aà¸\81ลัà¸\9aà¸\84ุà¸\93à¹\84à¸\94à¹\89à¹\82à¸\94ยà¸\95รà¸\87",
        "defemailsubject": "อีเมล {{SITENAME}} จากผู้ใช้ \"$1\"",
        "usermaildisabled": "ปิดใช้งานการส่งอีเมลหาผู้ใช้",
        "usermaildisabledtext": "คุณไม่สามารถส่งอีเมลหาผู้ใช้อื่นบนวิกินี้",
        "emailfrom": "จาก:",
        "emailto": "ถึง:",
        "emailsubject": "เรื่อง:",
-       "emailmessage": "สาร:",
+       "emailmessage": "à¸\82à¹\89อà¸\84วาม:",
        "emailsend": "ส่ง",
-       "emailccme": "สà¹\88à¸\87อีà¹\80มลสำà¹\80à¸\99าสารของฉันหาฉัน",
+       "emailccme": "สà¹\88à¸\87อีà¹\80มลสำà¹\80à¸\99าà¸\82à¹\89อà¸\84วามของฉันหาฉัน",
        "emailccsubject": "คัดลอกสารของคุณไป $1: $2",
        "emailsent": "ส่งอีเมลแล้ว",
-       "emailsenttext": "สà¹\88à¸\87สารอีเมลของคุณแล้ว",
+       "emailsenttext": "สà¹\88à¸\87à¸\82à¹\89อà¸\84วามอีเมลของคุณแล้ว",
        "emailuserfooter": "$1 ส่งอีเมลนี้ถึง $2 โดยฟังก์ชัน \"{{int:emailuser}}\" ที่ {{SITENAME}} อีเมลของคุณจะถูกส่งไปที่ผู้ส่งคนเดิมโดยตรง โดยจะเปิดเผยที่อยู่อีเมลให้พวกเขาเห็น",
        "usermessage-summary": "ฝากสารระบบ",
        "usermessage-editor": "ตัวส่งสารของระบบ",
        "mywatchlist": "รายการเฝ้าดู",
        "watchlistfor2": "สำหรับ $1 $2",
        "nowatchlist": "ไม่มีรายการในรายการเฝ้าดูของคุณ",
-       "watchlistanontext": "à¹\82à¸\9bรà¸\94ลà¸\87à¸\8aืà¹\88อà¹\80à¸\82à¹\89าเพื่อดูหรือแก้ไขรายการในรายการเฝ้าดูของคุณ",
+       "watchlistanontext": "à¹\82à¸\9bรà¸\94à¹\80à¸\82à¹\89าสูà¹\88ระà¸\9aà¸\9aเพื่อดูหรือแก้ไขรายการในรายการเฝ้าดูของคุณ",
        "watchnologin": "ยังไม่ได้เข้าสู่ระบบ",
        "addwatch": "เพิ่มเข้ารายการเฝ้าดู",
        "addedwatchtext": "เพิ่มหน้า \"[[:$1]]\" และหน้าอภิปรายเข้า[[Special:Watchlist|รายการเฝ้าดู]]ของคุณแล้ว",
        "enotif_lastvisited": "ดู $1 สำหรับการเปลี่ยนแปลงทั้งหมดตั้งแต่คุณชมครั้งสุดท้าย",
        "enotif_lastdiff": "เพื่อดูการเปลี่ยนแปลงนี้ ให้ดู $1",
        "enotif_anon_editor": "ผู้ใช้นิรนาม $1",
-       "enotif_body": "à¹\80รียà¸\99 $WATCHINGUSERNAME\n\n$PAGEINTRO $NEWPAGE\n\nà¸\84ำอà¸\98ิà¸\9aายอยà¹\88าà¸\87ยà¹\88อà¸\82อà¸\87à¸\9cูà¹\89à¹\80à¸\82ียà¸\99: $PAGESUMMARY $PAGEMINOREDIT\n\nà¸\95ิà¸\94à¸\95à¹\88อà¸\9cูà¹\89à¹\80à¸\82ียà¸\99:\nà¹\80มล: $PAGEEDITOR_EMAIL\nวิà¸\81ิ: $PAGEEDITOR_WIKI\n\nà¸\88ะà¹\84มà¹\88มีà¸\9bระà¸\81าศอืà¹\88à¸\99หาà¸\81มีà¸\81ิà¸\88à¸\81รรมà¹\80à¸\9eิà¹\88มà¹\80à¸\95ิม à¹\80วà¹\89à¸\99à¹\80สียà¹\81à¸\95à¹\88à¸\84ุà¸\93à¸\88ะà¹\80à¸\82à¹\89าà¸\8aมหà¸\99à¹\89าà¸\99ีà¹\89à¸\82à¸\93ะà¸\97ีà¹\88à¸\81ำลัà¸\87ลà¹\87อà¸\81อิà¸\99อยู่ คุณยังสามารถตั้งค่าตัวบ่งชี้ประกาศใหม่สำหรับหน้าที่คุณเฝ้าดูทุกหน้าในรายการเฝ้าดูของคุณ\n\nระบบประกาศ {{SITENAME}} ที่เป็นมิตรของคุณ\n\n--\nในการเปลี่ยนการตั้งค่าประกาศอีเมลของคุณ โปรดดู\n{{canonicalurl:{{#special:Preferences}}}}\n\nในการเปลี่ยนการตั้งค่ารายการเฝ้าดูของคุณ โปรดดู\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nในการลบหน้าจากรายการเฝ้าดูของคุณ โปรดดู\n$UNWATCHURL\n\nผลป้อนกลับและความช่วยเหลือเพิ่มเติม:\n$HELPPAGE",
+       "enotif_body": "à¹\80รียà¸\99 $WATCHINGUSERNAME\n\n$PAGEINTRO $NEWPAGE\n\nà¸\84ำอà¸\98ิà¸\9aายอยà¹\88าà¸\87ยà¹\88อà¸\82อà¸\87à¸\9cูà¹\89à¹\80à¸\82ียà¸\99: $PAGESUMMARY $PAGEMINOREDIT\n\nà¸\95ิà¸\94à¸\95à¹\88อà¸\9cูà¹\89à¹\80à¸\82ียà¸\99:\nà¹\80มล: $PAGEEDITOR_EMAIL\nวิà¸\81ิ: $PAGEEDITOR_WIKI\n\nà¸\88ะà¹\84มà¹\88มีà¸\9bระà¸\81าศอืà¹\88à¸\99หาà¸\81มีà¸\81ิà¸\88à¸\81รรมà¹\80à¸\9eิà¹\88มà¹\80à¸\95ิม à¹\80วà¹\89à¸\99à¹\80สียà¹\81à¸\95à¹\88à¸\84ุà¸\93à¸\88ะà¹\80à¸\82à¹\89าà¸\8aมหà¸\99à¹\89าà¸\99ีà¹\89à¸\82à¸\93ะà¸\97ีà¹\88à¸\81ำลัà¸\87à¹\80à¸\82à¹\89าสูà¹\88ระà¸\9aà¸\9aอยู่ คุณยังสามารถตั้งค่าตัวบ่งชี้ประกาศใหม่สำหรับหน้าที่คุณเฝ้าดูทุกหน้าในรายการเฝ้าดูของคุณ\n\nระบบประกาศ {{SITENAME}} ที่เป็นมิตรของคุณ\n\n--\nในการเปลี่ยนการตั้งค่าประกาศอีเมลของคุณ โปรดดู\n{{canonicalurl:{{#special:Preferences}}}}\n\nในการเปลี่ยนการตั้งค่ารายการเฝ้าดูของคุณ โปรดดู\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nในการลบหน้าจากรายการเฝ้าดูของคุณ โปรดดู\n$UNWATCHURL\n\nผลป้อนกลับและความช่วยเหลือเพิ่มเติม:\n$HELPPAGE",
        "enotif_minoredit": "นี่เป็นการแก้ไขเล็กน้อย",
        "created": "ถูกสร้าง",
        "changed": "ถูกเปลี่ยนแปลง",
        "revertpage-nouser": "ย้อนการแก้ไขโดยผู้ใช้ไม่ระบุชื่อไปยังรุ่นล่าสุดโดย {{GENDER:$1|[[User:$1|$1]]}}",
        "rollback-success": "ย้อนการแก้ไขโดย $1; \nเปลี่ยนกลับไปรุ่นล่าสุดโดย $2",
        "rollback-success-notify": "ย้อนการแก้ไขโดย $1;\nเปลี่ยนกลับไปรุ่นล่าสุดโดย $2 [$3 แสดงการเปลี่ยนแปลง]",
-       "sessionfailure-title": "à¸\8aà¹\88วà¸\87à¹\80วลาสืà¹\88อสารล้มเหลว",
-       "sessionfailure": "à¸\94ูà¹\80หมือà¸\99มีà¸\9bัà¸\8dหาà¸\81ัà¸\9aà¸\8aà¹\88วà¸\87à¹\80วลาสืà¹\88อสารลà¹\87อà¸\81อิà¸\99à¸\82อà¸\87à¸\84ุà¸\93\nà¸\81ารà¸\81ระà¸\97ำà¸\99ีà¹\89à¸\96ูà¸\81ยà¸\81à¹\80ลิà¸\81à¹\80à¸\9bà¹\87à¸\99à¸\81ารà¸\9bà¹\89อà¸\87à¸\81ัà¸\99à¸\81ารลัà¸\81ลอà¸\9aà¸\8aà¹\88วà¸\87à¹\80วลาสืà¹\88อสารà¹\84วà¹\89à¸\81à¹\88อà¸\99 \nà¸\81รุà¸\93าà¸\81รอà¸\81à¹\81à¸\9aà¸\9aอีกครั้ง",
+       "sessionfailure-title": "à¹\80à¸\8bสà¸\8aัà¸\99ล้มเหลว",
+       "sessionfailure": "à¸\94ูà¹\80หมือà¸\99มีà¸\9bัà¸\8dหาà¸\81ัà¸\9aà¹\80à¸\8bสà¸\8aัà¸\99à¸\81ารà¹\80à¸\82à¹\89าสูà¹\88ระà¸\9aà¸\9aà¸\82อà¸\87à¸\84ุà¸\93\nà¸\81ารà¸\81ระà¸\97ำà¸\99ีà¹\89à¸\96ูà¸\81ยà¸\81à¹\80ลิà¸\81à¹\80à¸\9eืà¹\88อà¹\80à¸\9bà¹\87à¸\99à¸\81ารà¸\9bà¹\89อà¸\87à¸\81ัà¸\99à¸\81ารลัà¸\81ลอà¸\9aà¹\80à¸\8bสà¸\8aัà¸\99à¹\84วà¹\89à¸\81à¹\88อà¸\99 \nà¸\81รุà¸\93าà¸\81รอà¸\81à¹\81à¸\9aà¸\9aà¸\9fอรà¹\8cมà¹\83หมà¹\88อีกครั้ง",
        "changecontentmodel-title-label": "ชื่อหน้า:",
        "changecontentmodel-reason-label": "เหตุผล:",
        "changecontentmodel-submit": "ความเปลี่ยนแปลง",
        "movepagetalktext": "หากคุณเลือกกล่องนี้ หน้าคุยของหน้านี้จะถูกย้ายไปชื่อเรื่องใหม่โดยอัตโนมัติเว้นแต่ปลายทางมีหน้าคุยไม่ว่างแล้ว\n\nในกรณีเหล่านี้ คุณจะต้องย้ายหรือผสานหน้าเองหากต้องการ",
        "moveuserpage-warning": "<strong>คำเตือน:</strong> คุณกำลังย้ายหน้าผู้ใช้ โปรดทราบว่าหน้าผู้ใช้เท่านั้นที่จะถูกเปลี่ยนชื่อ แต่ผู้ใช้จะ<em>ไม่</em>ถูกเปลี่ยนชื่อ",
        "movecategorypage-warning": "<strong>คำเตือน:</strong> คุณกำลังย้ายหน้าหมวดหมู่ โปรดทราบว่า จะย้ายเฉพาะหน้าและทุกหน้าในหมวดหมู่เก่าจะ<em>ไม่</em>ถูกจัดเข้าหมวดหมู่ใหม่",
-       "movenologintext": "à¸\96à¹\89าà¸\95à¹\89อà¸\87à¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อหà¸\99à¹\89าà¸\99ีà¹\89 à¸\95à¹\89อà¸\87à¹\80à¸\9bà¹\87à¸\99à¸\9cูà¹\89à¹\83à¸\8aà¹\89ลà¸\87à¸\97ะà¹\80à¸\9aียà¸\99à¹\81ละ[[Special:UserLogin|ลà¹\87อà¸\81อิà¸\99]]",
+       "movenologintext": "หาà¸\81à¸\95à¹\89อà¸\87à¸\81ารยà¹\89ายหà¸\99à¹\89าà¸\99ีà¹\89 à¸\95à¹\89อà¸\87à¹\80à¸\9bà¹\87à¸\99à¸\9cูà¹\89à¹\83à¸\8aà¹\89ลà¸\87à¸\97ะà¹\80à¸\9aียà¸\99à¹\81ละ[[Special:UserLogin|à¹\80à¸\82à¹\89าสูà¹\88ระà¸\9aà¸\9a]]",
        "movenotallowed": "คุณไม่มีสิทธิเปลี่ยนชื่อหน้า",
        "movenotallowedfile": "คุณไม่มีสิทธิย้ายไฟล์",
        "cant-move-user-page": "คุณไม่มีสิทธิย้ายหน้าผู้ใช้ (แยกจากหน้าย่อย)",
        "export-download": "ส่งออกมาเป็นไฟล์",
        "export-templates": "รวมแม่แบบมาด้วย",
        "export-pagelinks": "จำนวนลำดับของหน้าที่ถูกเชื่อมโยงทั้งหมด:",
-       "allmessages": "สารà¸\82อà¸\87ระบบ",
+       "allmessages": "à¸\82à¹\89อà¸\84วามระบบ",
        "allmessagesname": "ชื่อ",
-       "allmessagesdefault": "à¸\82à¹\89อà¸\84วามสารà¹\82à¸\94ยปริยาย",
+       "allmessagesdefault": "à¹\80à¸\99ืà¹\89อหาà¸\82à¹\89อà¸\84วามปริยาย",
        "allmessagescurrent": "ข้อความปัจจุบัน",
-       "allmessagestext": "à¸\99ีà¹\88à¸\84ือรายà¸\81ารà¸\82à¹\89อà¸\84วามà¸\82อà¸\87ระà¸\9aà¸\9aà¸\97ีà¹\88อยูà¹\88à¹\83à¸\99à¹\80à¸\99มสà¹\80à¸\9bà¸\8bมีà¹\80à¸\94ียวิà¸\81ิ\nà¸\81รุà¸\93าอà¹\88าà¸\99หà¸\99à¹\89า[https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation à¹\80à¸\97ศวิวัà¸\95à¸\99à¹\8cà¸\82อà¸\87มีà¹\80à¸\94ียวิà¸\81ิ] à¹\81ละ [https://translatewiki.net translatewiki.net] à¸\96à¹\89าคุณอยากที่จะช่วยแปลข้อความของระบบมีเดียวิกิ",
+       "allmessagestext": "à¸\99ีà¹\88à¸\84ือรายà¸\81ารà¸\82à¹\89อà¸\84วามà¸\82อà¸\87ระà¸\9aà¸\9aà¸\97ีà¹\88อยูà¹\88à¹\83à¸\99à¹\80à¸\99มสà¹\80à¸\9bà¸\8bมีà¹\80à¸\94ียวิà¸\81ิ\nà¸\81รุà¸\93าอà¹\88าà¸\99หà¸\99à¹\89า[https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation à¹\80à¸\97ศวิวัà¸\95à¸\99à¹\8cà¸\82อà¸\87มีà¹\80à¸\94ียวิà¸\81ิ] à¹\81ละ [https://translatewiki.net translatewiki.net] à¸«à¸²à¸\81คุณอยากที่จะช่วยแปลข้อความของระบบมีเดียวิกิ",
        "allmessagesnotsupportedDB": "หน้านี้ไม่สามารถใช้งานได้เนื่องจาก '''$wgUseDatabaseMessages''' ถูกระงับการใช้งาน",
        "allmessages-filter-legend": "กรอง",
        "allmessages-filter": "กรองตามสถานะที่เลือก:",
        "thumbnail-more": "ขยาย",
        "filemissing": "ไฟล์สูญหาย",
        "thumbnail_error": "มีข้อผิดพลาดในการสร้างรูปย่อ: $1",
-       "thumbnail_error_remote": "สารข้อผิดพลาดจาก $1:\n$2",
+       "thumbnail_error_remote": "à¸\82à¹\89อà¸\84วามข้อผิดพลาดจาก $1:\n$2",
        "djvu_page_error": "หน้าเดจาวู (DjVu) เกินขนาด",
        "djvu_no_xml": "ไม่สามารถส่งเอกซ์เอ็มแอล (XML) สำหรับไฟล์เดจาวู (DjVu)",
        "thumbnail-dest-create": "ไม่สามารถบันทึกรูปย่อลงในปลายทางได้",
        "import-nonewrevisions": "ทุกรุ่นมาจากการนำเข้าข้อมูลก่อนหน้านี้",
        "xml-error-string": "$1 ที่บรรทัด $2 คอลัมน์ $3 (ไบต์ที่ $4): $5",
        "import-upload": "อัปโหลดข้อมูล XML",
-       "import-token-mismatch": "à¸\82à¹\89อมูลà¹\80à¸\8bà¸\8aà¸\8aัà¸\99สูà¸\8dหาย\n\nà¸\84ุà¸\93อาà¸\88ลà¹\87อà¸\81à¹\80อาà¸\95à¹\8c '''à¸\81รุà¸\93ายืà¸\99ยัà¸\99วà¹\88าà¸\84ุà¸\93ยัà¸\87ลà¹\87อà¸\81อิà¸\99à¹\81ละลอà¸\87อีà¸\81à¸\84รัà¹\89à¸\87'''\nหาà¸\81ยัà¸\87à¹\84มà¹\88à¹\80à¸\9bà¹\87à¸\99à¸\9cล à¹\83หà¹\89ลอà¸\87[[Special:UserLogout|ลà¹\87อà¸\81à¹\80อาà¸\95à¹\8c]]à¸\81à¹\88อà¸\99à¹\81ลà¹\89วลà¹\87อà¸\81อิà¸\99à¸\81ลัà¸\9aมา และตรวจสอบว่าเบราว์เซอร์ของคุณอนุญาตคุกกี้จากเว็บไซต์นี้",
+       "import-token-mismatch": "à¸\82à¹\89อมูลà¹\80à¸\8bสà¸\8aัà¸\99สูà¸\8dหาย\n\nà¸\84ุà¸\93อาà¸\88ออà¸\81à¸\88าà¸\81ระà¸\9aà¸\9aà¹\84à¸\9bà¹\81ลà¹\89ว '''à¸\81รุà¸\93ายืà¸\99ยัà¸\99วà¹\88าà¸\84ุà¸\93ยัà¸\87à¹\80à¸\82à¹\89าสูà¹\88ระà¸\9aà¸\9aà¹\81ละลอà¸\87อีà¸\81à¸\84รัà¹\89à¸\87'''\nหาà¸\81ยัà¸\87à¹\84มà¹\88à¹\80à¸\9bà¹\87à¸\99à¸\9cล à¹\83หà¹\89ลอà¸\87[[Special:UserLogout|ออà¸\81à¸\88าà¸\81ระà¸\9aà¸\9a]]à¸\81à¹\88อà¸\99à¹\81ลà¹\89วà¸\81ลัà¸\9aà¹\80à¸\82à¹\89าสูà¹\88ระà¸\9aà¸\9aà¹\83หมà¹\88 และตรวจสอบว่าเบราว์เซอร์ของคุณอนุญาตคุกกี้จากเว็บไซต์นี้",
        "import-invalid-interwiki": "ไม่สามารถนำข้อมูลเข้าจากวิกิที่กำหนดได้",
        "import-error-create": "หน้า \"$1\" ยังไม่ได้ถูกนำเข้า เนื่องจากคุณไม่ได้รับอนุญาตให้สามารถสร้างได้",
        "import-options-wrong": "{{PLURAL:$2|ตัวเลือก|ตัวเลือก}}ผิด:<nowiki>$1</nowiki>",
        "tooltip-pt-watchlist": "รายการหน้าที่คุณกำลังเฝ้าดูการเปลี่ยนแปลง",
        "tooltip-pt-mycontris": "รายการการเข้ามีส่วนร่วมของ{{GENDER:|คุณ}}",
        "tooltip-pt-anoncontribs": "รายการการแก้ไขจากเลขที่อยู่ไอพีนี้",
-       "tooltip-pt-login": "สà¸\99ัà¸\9aสà¸\99ุà¸\99à¹\83หà¹\89à¸\84ุà¸\93ลà¹\87อà¸\81อิà¸\99 แต่ไม่บังคับ",
+       "tooltip-pt-login": "à¹\81à¸\99ะà¸\99ำà¹\83หà¹\89à¸\84ุà¸\93à¹\80à¸\82à¹\89าสูà¹\88ระà¸\9aà¸\9a แต่ไม่บังคับ",
        "tooltip-pt-login-private": "คุณต้องล็อกอินจึงจะใช้วิกินี้ได้",
        "tooltip-pt-logout": "ออกจากระบบ",
-       "tooltip-pt-createaccount": "สà¸\99ัà¸\9aสà¸\99ุà¸\99à¹\83หà¹\89à¸\84ุà¸\93สรà¹\89าà¸\87à¸\9aัà¸\8dà¸\8aีà¹\81ละลà¹\87อà¸\81อิà¸\99 แต่ไม่บังคับ",
+       "tooltip-pt-createaccount": "à¹\81à¸\99ะà¸\99ำà¹\83หà¹\89à¸\84ุà¸\93สรà¹\89าà¸\87à¸\9aัà¸\8dà¸\8aีà¹\81ละà¹\80à¸\82à¹\89าสูà¹\88ระà¸\9aà¸\9a แต่ไม่บังคับ",
        "tooltip-ca-talk": "อภิปรายเกี่ยวกับหน้าเนื้อหา",
        "tooltip-ca-edit": "แก้ไขหน้านี้",
        "tooltip-ca-addsection": "เริ่มส่วนใหม่",
        "tooltip-n-mainpage": "เยี่ยมชมหน้าหลัก",
        "tooltip-n-mainpage-description": "เยี่ยมชมหน้าหลัก",
        "tooltip-n-portal": "เกี่ยวกับโครงการ สิ่งที่คุณทำได้ วิธีการค้นหา",
-       "tooltip-n-currentevents": "ค้นหาเหตุการณ์ปัจจุบัน",
-       "tooltip-n-recentchanges": "รายà¸\81ารà¸\9bรัà¸\9aà¸\9bรุงล่าสุดในวิกินี้",
+       "tooltip-n-currentevents": "à¸\84à¹\89à¸\99หาà¸\82à¹\89อมูลà¹\80à¸\9aืà¹\89อà¸\87หลัà¸\87à¹\83à¸\99à¹\80หà¸\95ุà¸\81ารà¸\93à¹\8cà¸\9bัà¸\88à¸\88ุà¸\9aัà¸\99",
+       "tooltip-n-recentchanges": "รายà¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลงล่าสุดในวิกินี้",
        "tooltip-n-randompage": "โหลดหน้าสุ่ม",
        "tooltip-n-help": "อธิบายการใช้งาน",
        "tooltip-t-whatlinkshere": "รายการหน้าวิกิทุกหน้าที่ลิงก์มาที่นี่",
-       "tooltip-t-recentchangeslinked": "รายà¸\81ารà¸\9bรัà¸\9aà¸\9bรุงล่าสุดในหน้าที่ลิงก์จากหน้านี้",
+       "tooltip-t-recentchangeslinked": "รายà¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลงล่าสุดในหน้าที่ลิงก์จากหน้านี้",
        "tooltip-feed-rss": "ฟีดชนิดอาร์เอสเอส (RSS) ของหน้านี้",
        "tooltip-feed-atom": "ฟีดอะตอม (Atom) ของหน้านี้",
        "tooltip-t-contributions": "รายการการมีส่วนร่วมของ{{GENDER:$1|ผู้ใช้นี้}}",
        "tooltip-t-emailuser": "ส่งอีเมลถึง{{GENDER:$1|ผู้ใช้นี้}}",
-       "tooltip-t-info": "สารสà¸\99à¹\80à¸\97ศเพิ่มเติมเกี่ยวกับหน้านี้",
+       "tooltip-t-info": "à¸\82à¹\89อมูลเพิ่มเติมเกี่ยวกับหน้านี้",
        "tooltip-t-upload": "อัปโหลดไฟล์",
        "tooltip-t-specialpages": "รายการหน้าพิเศษทั้งหมด",
        "tooltip-t-print": "รุ่นที่พร้อมพิมพ์ของหน้านี้",
        "tooltip-ca-nstab-special": "หน้านี้เป็นหน้าพิเศษ ไม่สามารถแก้ไขได้",
        "tooltip-ca-nstab-project": "ดูหน้าโครงการ",
        "tooltip-ca-nstab-image": "ดูหน้าภาพไฟล์",
-       "tooltip-ca-nstab-mediawiki": "à¸\94ูสารระบบ",
+       "tooltip-ca-nstab-mediawiki": "à¸\94ูà¸\82à¹\89อà¸\84วามระบบ",
        "tooltip-ca-nstab-template": "ดูแม่แบบ",
        "tooltip-ca-nstab-help": "ดูหน้าคำอธิบาย",
        "tooltip-ca-nstab-category": "ดูหน้าหมวดหมู่",
        "spam_blanking": "รุ่นการปรับปรุงทุกรุ่นประกอบไปด้วยลิงก์ไปยังเว็บ $1 (ทำหน้าว่าง)",
        "spam_deleting": "ทุกรุ่นที่มีลิงก์ไปยัง $1 กำลังลบ",
        "simpleantispam-label": "การตรวจสอบสแปม\n<strong>อย่า</strong>กรอกช่องนี้!",
-       "pageinfo-title": "สารสà¸\99à¹\80à¸\97ศสำหรับ \"$1\"",
-       "pageinfo-not-current": "à¸\82ออภัย à¹\84มà¹\88สามารà¸\96à¹\83หà¹\89สารสà¸\99à¹\80à¸\97ศนี้สำหรับรุ่นปรับปรุงเก่าได้",
+       "pageinfo-title": "à¸\82à¹\89อมูลสำหรับ \"$1\"",
+       "pageinfo-not-current": "à¸\82ออภัย à¹\84มà¹\88สามารà¸\96à¹\83หà¹\89à¸\82à¹\89อมูลนี้สำหรับรุ่นปรับปรุงเก่าได้",
        "pageinfo-header-basic": "สารสนเทศเบื้องต้น",
        "pageinfo-header-edits": "ประวัติการแก้ไข",
        "pageinfo-header-restrictions": "การล็อกหน้า",
        "pageinfo-magic-words": "{{PLURAL:$1|คำสั่งพิเศษ}} ($1)",
        "pageinfo-hidden-categories": "หมวดหมู่ที่ซ่อนอยู่ ($1)",
        "pageinfo-templates": "แม่แบบที่ใช้ ($1)",
-       "pageinfo-toolboxlink": "สารสà¸\99à¹\80à¸\97ศหน้า",
+       "pageinfo-toolboxlink": "à¸\82à¹\89อมูลหน้า",
        "pageinfo-redirectsto": "เปลี่ยนทางไป",
        "pageinfo-redirectsto-info": "สนเทศ",
        "pageinfo-contentpage": "นับเป็นหน้าเนื้อหา",
        "pageinfo-protect-cascading": "การล็อกที่ต่อเรียงจากหน้านี้",
        "pageinfo-protect-cascading-yes": "ใช่",
        "pageinfo-protect-cascading-from": "การล็อกต่อเรียงจาก",
-       "pageinfo-category-info": "สารสà¸\99à¹\80à¸\97ศหมวดหมู่",
+       "pageinfo-category-info": "à¸\82à¹\89อมูลหมวดหมู่",
        "pageinfo-category-total": "จำนวนสมาชิกรวม",
        "pageinfo-category-pages": "จำนวนหน้า",
        "pageinfo-category-subcats": "จำนวนหมวดหมู่ย่อย",
        "markaspatrolledtext-file": "ทำเครื่องหมายรุ่นไฟล์นี้ว่าตรวจสอบแล้ว",
        "markedaspatrolled": "ตรวจสอบแล้ว",
        "markedaspatrolledtext": "กำหนดรุ่นที่เลือกของ [[:$1]] ว่าตรวจสอบแล้ว",
-       "rcpatroldisabled": "à¸\81ารà¸\95รวà¸\88สอà¸\9aหà¸\99à¹\89าà¸\9bรัà¸\9aà¸\9bรุงล่าสุดถูกปิดใช้งาน",
+       "rcpatroldisabled": "à¸\81ารà¸\95รวà¸\88สอà¸\9aหà¸\99à¹\89าà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลงล่าสุดถูกปิดใช้งาน",
        "rcpatroldisabledtext": "ปัจจุบันฟังก์ชันการตรวจสอบหน้าปรับปรุงล่าสุดถูกปิดใช้งาน",
        "markedaspatrollederror": "ไม่สามารถทำเครื่องหมายว่าตรวจสอบแล้ว",
        "markedaspatrollederrortext": "คุณจำเป็นต้องระบุรุ่นการแก้ไขที่กำหนดว่าตรวจสอบแล้ว",
        "yesterday-at": "เมื่อวานเมื่อ $1 น.",
        "bad_image_list": "รูปแบบแสดงต่อไปนี้:\n\nเฉพาะรายการที่แสดง (ในแถวขึ้นต้นด้วย *) โดยลิงก์แรกของแต่ละแถวเป็นลิงก์ไปยังภาพที่เสีย\nโดยลิงก์ถัดไปเป็นข้อยกเว้น เช่น บทความที่ภาพถูกจัดในบรรทัดเดียวกับส่วนข้อความ",
        "metadata": "ข้อมูลอภิพันธุ์",
-       "metadata-help": "à¹\84à¸\9fลà¹\8cà¸\99ีà¹\89มีสารสà¸\99à¹\80à¸\97ศà¹\80à¸\9eิà¹\88มà¹\80à¸\95ิม à¸­à¸²à¸\88à¹\80à¸\9eิà¹\88มà¸\88าà¸\81à¸\81ลà¹\89อà¸\87à¸\96à¹\88ายรูà¸\9bà¸\94ิà¸\88ิà¸\97ัลหรือสà¹\81à¸\81à¸\99à¹\80à¸\99อรà¹\8cà¸\97ีà¹\88à¹\83à¸\8aà¹\89à¹\80à¸\9eืà¹\88อสรà¹\89าà¸\87หรือà¹\81à¸\9bลà¸\87ภาà¸\9eà¹\80à¸\9bà¹\87à¸\99à¸\94ิà¸\88ิà¸\97ัล\nหาà¸\81à¹\84à¸\9fลà¹\8cà¸\99ีà¹\89à¸\96ูà¸\81à¸\94ัà¸\94à¹\81à¸\9bรà¸\88าà¸\81สà¸\96าà¸\99ะà¸\95à¹\89à¸\99à¸\89à¸\9aัà¸\9a à¸£à¸²à¸¢à¸¥à¸°à¹\80อียà¸\94à¸\9aาà¸\87อยà¹\88าà¸\87อาà¸\88à¹\84มà¹\88สะà¸\97à¹\89อà¸\99à¹\84à¸\9fลà¹\8cà¸\97ีà¹\88à¸\96ูà¸\81à¸\94ัà¸\94à¹\81à¸\9bลอย่างสมบูรณ์",
+       "metadata-help": "à¹\84à¸\9fลà¹\8cà¸\99ีà¹\89มีà¸\82à¹\89อมูลà¹\80à¸\9eิà¹\88มà¹\80à¸\95ิม à¸­à¸²à¸\88à¹\80à¸\9eิà¹\88มà¸\88าà¸\81à¸\81ลà¹\89อà¸\87à¸\96à¹\88ายรูà¸\9bà¸\94ิà¸\88ิà¸\97ัลหรือสà¹\81à¸\81à¸\99à¹\80à¸\99อรà¹\8cà¸\97ีà¹\88à¹\83à¸\8aà¹\89à¹\80à¸\9eืà¹\88อสรà¹\89าà¸\87หรือà¹\81à¸\9bลà¸\87ภาà¸\9eà¹\80à¸\9bà¹\87à¸\99à¸\94ิà¸\88ิà¸\97ัล\nหาà¸\81à¹\84à¸\9fลà¹\8cà¸\99ีà¹\89à¸\96ูà¸\81à¹\81à¸\81à¹\89à¹\84à¸\82à¸\88าà¸\81สà¸\96าà¸\99ะà¸\95à¹\89à¸\99à¸\89à¸\9aัà¸\9a à¸£à¸²à¸¢à¸¥à¸°à¹\80อียà¸\94à¸\9aาà¸\87อยà¹\88าà¸\87อาà¸\88à¹\84มà¹\88สะà¸\97à¹\89อà¸\99à¹\84à¸\9fลà¹\8cà¸\97ีà¹\88à¸\96ูà¸\81à¹\81à¸\81à¹\89à¹\84à¸\82อย่างสมบูรณ์",
        "metadata-expand": "แสดงรายละเอียดขยาย",
        "metadata-collapse": "ซ่อนรายละเอียดขยาย",
        "metadata-fields": "เขตข้อมูลข้อมูลอภิพันธุ์ของภาพดังที่แสดงรายการไว้ในข้อความนี้ จะถูกรวมบนหน้าภาพเมื่อตารางข้อมูลอภิพันธุ์ถูกยุบ \nเขตข้อมูลอื่น ๆ จะถูกซ่อนโดยปริยาย\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
        "confirmemail_pending": "รหัสยืนยันได้ส่งไปยังอีเมลของคุณแล้ว \nถ้าคุณเพิ่งสร้างบัญชี คุณอาจต้องรอสักครู่ให้รหัสส่งไปถึงที่อยู่อีเมลคุณ แทนที่จะขอรหัสยืนยันใหม่ทันที",
        "confirmemail_send": "ส่งรหัสยืนยันทางอีเมล",
        "confirmemail_sent": "ส่งอีเมลสำหรับการยืนยันแล้ว",
-       "confirmemail_oncreate": "รหัสยืà¸\99ยัà¸\99à¸\96ูà¸\81สà¹\88à¸\87à¹\84à¸\9bยัà¸\87à¸\97ีà¹\88อยูà¹\88อีà¹\80มลà¸\82อà¸\87à¸\84ุà¸\93\nรหัสà¸\99ีà¹\89à¹\84มà¹\88à¸\81ำหà¸\99à¸\94à¹\83หà¹\89à¸\95à¹\89อà¸\87ลà¹\87อà¸\81อิà¸\99 แต่คุณต้องระบุรหัสก่อนเปิดใช้งานคุณลักษณะที่อาศัยอีเมลทั้งหมดในวิกินี้",
+       "confirmemail_oncreate": "รหัสยืà¸\99ยัà¸\99à¸\96ูà¸\81สà¹\88à¸\87à¹\84à¸\9bยัà¸\87à¸\97ีà¹\88อยูà¹\88อีà¹\80มลà¸\82อà¸\87à¸\84ุà¸\93\nรหัสà¸\99ีà¹\89à¹\84มà¹\88à¸\81ำหà¸\99à¸\94à¹\83หà¹\89à¸\95à¹\89อà¸\87à¹\80à¸\82à¹\89าสูà¹\88ระà¸\9aà¸\9a แต่คุณต้องระบุรหัสก่อนเปิดใช้งานคุณลักษณะที่อาศัยอีเมลทั้งหมดในวิกินี้",
        "confirmemail_sendfailed": "{{SITENAME}}ไม่สามารถส่งอีเมลยืนยันได้\nโปรดตรวจสอบที่อยู่อีเมลว่าอักขระทั้งหมดถูกต้อง\n\nข้อความตีกลับ: $1",
        "confirmemail_invalid": "รหัสยืนยันไม่ถูกต้อง \nรหัสอาจหมดอายุแล้ว",
        "confirmemail_needlogin": "คุณต้อง $1 เพื่อยืนยันที่อยู่อีเมลของคุณ",
-       "confirmemail_success": "อีà¹\80มลà¸\84ุà¸\93à¹\84à¸\94à¹\89รัà¸\9aà¸\81ารยืà¸\99ยัà¸\99à¹\81ลà¹\89ว\nà¸\84ุà¸\93อาà¸\88[[Special:UserLogin|ลà¹\87อà¸\81อิà¸\99]]à¸\95อà¸\99à¸\99ีà¹\89à¹\81ละสà¸\99ุà¸\81à¸\81ัà¸\9aà¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82วิà¸\81ิ",
+       "confirmemail_success": "อีà¹\80มลà¸\84ุà¸\93à¹\84à¸\94à¹\89รัà¸\9aà¸\81ารยืà¸\99ยัà¸\99à¹\81ลà¹\89ว\nà¸\84ุà¸\93สามารà¸\96[[Special:UserLogin|à¹\80à¸\82à¹\89าสูà¹\88ระà¸\9aà¸\9a]]à¸\95อà¸\99à¸\99ีà¹\89à¹\81ละสà¸\99ุà¸\81à¸\81ัà¸\9aà¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82วิà¸\81ิà¹\84à¸\94à¹\89à¹\80ลย",
        "confirmemail_loggedin": "อีเมลคุณได้รับการยืนยันแล้ว",
        "confirmemail_subject": "การยืนยันที่อยู่อีเมลของ{{SITENAME}}",
        "confirmemail_body": "ใครบางคน ซึ่งอาจจะเป็นคุณ จากหมายเลขไอพี $1 ได้ลงทะเบียนในชื่อ \"$2\" โดยใช้อีเมลนี้ที่ {{SITENAME}}\n\nเพื่อยืนยันว่าบัญชีผู้ใช้นี้เป็นของคุณอย่างแน่อน และใช้งานฟีเจอร์ส่งอีเมลหาผู้ใช้บน {{SITENAME}} กดลิงก์นี้ในเว็บเบราวเซอร์ของคุณ:\n\n$3\n\nถ้าคุณ*ไม่*ได้ลงทะเบียน กรุณากดลิงก์ด้านล่างเพื่อยกเลิกการยืนยันที่อยู่อีเมล\n\n$5\n\nรหัสยืนยันนี้จะหมดอายุเมื่อ $4",
        "version-ext-colheader-description": "คำอธิบาย",
        "version-ext-colheader-credits": "ผู้ประพันธ์",
        "version-license-title": "ใบอนุญาตสำหรับ $1",
-       "version-license-not-found": "à¹\84มà¹\88à¸\9eà¸\9aสารสà¸\99à¹\80à¸\97ศà¹\83à¸\9aอà¸\99ุà¸\8dาà¸\95ลà¸\87รายละเอียดสำหรับส่วนขยายนี้",
+       "version-license-not-found": "à¹\84มà¹\88à¸\9eà¸\9aà¸\82à¹\89อมูลà¹\83à¸\9aอà¸\99ุà¸\8dาà¸\95à¹\81à¸\9aà¸\9aละเอียดสำหรับส่วนขยายนี้",
        "version-credits-title": "ข้อความให้เกียรติเจ้าของงานสำหรับ $1",
-       "version-credits-not-found": "à¹\84มà¹\88à¸\9eà¸\9aสารสà¸\99à¹\80à¸\97ศà¸\82à¹\89อà¸\84วามà¹\83หà¹\89à¹\80à¸\81ียรà¸\95ิà¹\80à¸\88à¹\89าà¸\82อà¸\87à¸\87าà¸\99ลà¸\87รายละเอียดสำหรับส่วนขยายนี้",
+       "version-credits-not-found": "à¹\84มà¹\88à¸\9eà¸\9aà¸\82à¹\89อมูลà¸\82à¹\89อà¸\84วามà¹\83หà¹\89à¹\80à¸\81ียรà¸\95ิà¹\80à¸\88à¹\89าà¸\82อà¸\87à¸\87าà¸\99à¹\81à¸\9aà¸\9aละเอียดสำหรับส่วนขยายนี้",
        "version-poweredby-credits": "วิกินี้จัดทำโดย '''[https://www.mediawiki.org/ MediaWiki]''', สงวนลิขสิทธิ์ © 2001-$1 โดย $2",
        "version-poweredby-others": "ผู้อื่น",
        "version-poweredby-translators": "ผู้แปล translatewiki.net",
        "tags-delete-not-allowed": "ลบป้ายระบุที่ส่วนขยายนิยามไม่ได้ยกเว้นส่วนขยายนั้นเจาะจงอนุญาต",
        "tags-delete-not-found": "ไม่มีป้ายระบุ \"$1\"",
        "tags-delete-too-many-uses": "ป้ายะรุบ \"$1\" มีผลใช้ในกว่า $2 รุ่น ฉะนั้นจึงไม่สามารถลบ",
+       "tags-activate-reason": "เหตุผล:",
        "tags-activate-submit": "เปิดใช้งาน",
        "tags-deactivate-title": "ปิดใช้งานป้ายระบุ",
+       "tags-deactivate-reason": "เหตุผล:",
+       "tags-edit-reason": "เหตุผล:",
        "comparepages": "เปรียบเทียบหน้า",
        "compare-page1": "หน้า 1",
        "compare-page2": "หน้า 2",
        "feedback-bugornote": "หากคุณได้อธิบายปัญหาทางเทคนิคในรายละเอียดแล้ว โปรด[$1 รายงานจุดบกพร่อง]\nมิฉะนั้น คุณสามารถแบบอย่างง่ายด้านล่าง ความเห็นของคุณจะถูกเพิ่มเข้าสู่ \"[$3 $2]\" ร่วมกับชื่อผู้ใช้ของคุณ",
        "feedback-cancel": "ยกเลิก",
        "feedback-close": "เสร็จสิ้น",
-       "feedback-message": "สาร:",
+       "feedback-message": "à¸\82à¹\89อà¸\84วาม:",
        "feedback-subject": "เรื่อง:",
        "feedback-submit": "ตกลง",
        "feedback-thanks": "ขอบคุณ! ผลป้อนกลับของคุณถูกโพสต์ไปยังหน้า \"[$2 $1]\" แล้ว",
        "limitreport-templateargumentsize": "ขนาดอาร์กิวเมนต์แม่แบบ",
        "limitreport-templateargumentsize-value": "$1/$2 ไบต์",
        "limitreport-expansiondepth": "ความลึกการขยายสูงสุด",
+       "limitreport-unstrip-depth": "ความลึกการเรียกซ้ำ Unstrip",
        "expandtemplates": "ขยายแม่แบบ",
        "expand_templates_output": "ผลลัพธ์",
        "expand_templates_ok": "ตกลง",
        "pagelang-language": "ภาษา",
        "pagelang-use-default": "ใช้ภาษาโดยปริยาย",
        "pagelang-select-lang": "เลือกภาษา",
+       "pagelang-reason": "เหตุผล",
        "pagelang-submit": "ส่ง",
        "right-pagelang": "เปลี่ยนภาษาหน้า",
        "action-pagelang": "เปลี่ยนภาษาหน้า",
        "mediastatistics-header-drawing": "ภาพวาดเส้น (ภาพเวกเตอร์)",
        "mediastatistics-header-audio": "เสียง",
        "mediastatistics-header-video": "วิดีทัศน์",
+       "json-error-depth": "ความลึกสแตกสูงสุดเกิน",
        "headline-anchor-title": "โยงมาส่วนนี้",
        "special-characters-group-latin": "ละติน",
        "special-characters-group-latinextended": "ละตินส่วนขยาย",
        "special-characters-group-canadianaboriginal": "แคนาดาพื้นเมืองดั้งเดิม",
        "special-characters-title-minus": "เครื่องหมายลบ",
        "mw-widgets-dateinput-no-date": "ไม่เลือกวันที่",
+       "mw-widgets-usersmultiselect-placeholder": "เพิ่ม...",
+       "mw-widgets-titlesmultiselect-placeholder": "เพิ่ม...",
        "date-range-from": "ตั้งแต่วันที่:",
        "date-range-to": "ถึงวันที่:",
        "randomrootpage": "สุ่มหน้าราก",
        "log-action-filter-suppress-reblock": "การระงับผู้ใช้โดยการบล็อกใหม่",
        "log-action-filter-upload-upload": "อัปโหลดใหม่",
        "log-action-filter-upload-overwrite": "อัปโหลดใหม่",
-       "authmanager-authn-not-in-progress": "à¹\84มà¹\88อยูà¹\88ระหวà¹\88าà¸\87à¸\81ารà¸\9eิสูà¸\88à¸\99à¹\8cà¸\95ัวà¸\88ริà¸\87หรือà¸\82à¹\89อมูลà¸\8aà¹\88วà¸\87à¹\80วลาสืà¹\88อสารสูญหาย กรุณาเริ่มใหม่ตั้งแต่ต้น",
+       "authmanager-authn-not-in-progress": "à¹\84มà¹\88อยูà¹\88ระหวà¹\88าà¸\87à¸\81ารà¸\9eิสูà¸\88à¸\99à¹\8cà¸\95ัวà¸\88ริà¸\87หรือà¸\82à¹\89อมูลà¹\80à¸\8bสà¸\8aัà¸\99สูญหาย กรุณาเริ่มใหม่ตั้งแต่ต้น",
        "authmanager-authn-no-primary": "เอกสารทางการที่ให้ไม่สามารถพิสูจน์ตัวจริงได้",
        "authmanager-authn-no-local-user": "เอกสารทางการที่ให้ไม่สัมพันธ์กับผู้ใช้ใดในวิกินี้",
        "authmanager-authn-no-local-user-link": "เอกสารทางการที่ให้ไม่สัมพันธ์กับผู้ใช้ใดในวิกินี้ ล็อกอินอีกทางหนึ่ง หรือสร้างผู้ใช้ใหม่ และคุณจะมีตัวเลือกให้ลิงก์เอกสารทางการก่อนหน้าของคุณไปบัญชีนั้น",
        "authmanager-change-not-supported": "ไม่สามารถเปลี่ยนเอกสารทางการที่ให้ได้ เพราะไม่มีความต้องการใช้",
        "authmanager-create-disabled": "ปิดใช้งานการสร้างบัญชี",
        "authmanager-create-from-login": "กรุณากรอกเขตข้อมูลเพื่อสร้างบัญชี",
-       "authmanager-create-not-in-progress": "à¹\84มà¹\88อยูà¹\88ระหวà¹\88าà¸\87à¸\81ารสรà¹\89าà¸\87à¸\9aัà¸\8dà¸\8aีหรือà¸\82à¹\89อมูลà¸\8aà¹\88วà¸\87à¹\80วลาสืà¹\88อสารสูญหาย กรุณาเริ่มใหม่ตั้งแต่ต้น",
+       "authmanager-create-not-in-progress": "à¹\84มà¹\88อยูà¹\88ระหวà¹\88าà¸\87à¸\81ารสรà¹\89าà¸\87à¸\9aัà¸\8dà¸\8aีหรือà¸\82à¹\89อมูลà¹\80à¸\8bสà¸\8aัà¸\99สูญหาย กรุณาเริ่มใหม่ตั้งแต่ต้น",
        "authmanager-create-no-primary": "เอกสารทางการที่ให้ไม่สามารถใช้สำหรับการสร้างบัญชีได้",
        "authmanager-link-no-primary": "เอกสารทางการที่ให้ไม่สามารถใช้สำหรับการเชื่อมโยงบัญชี",
-       "authmanager-link-not-in-progress": "à¹\84มà¹\88อยูà¹\88ระหวà¹\88าà¸\87à¸\81ารà¹\82ยà¸\87à¸\9aัà¸\8dà¸\8aีหรือà¸\82à¹\89อมูลà¸\8aà¹\88วà¸\87à¹\80วลาสืà¹\88อสารสูญหาย กรุณาเริ่มใหม่ตั้งแต่ต้น",
+       "authmanager-link-not-in-progress": "à¹\84มà¹\88อยูà¹\88ระหวà¹\88าà¸\87à¸\81ารà¹\82ยà¸\87à¸\9aัà¸\8dà¸\8aีหรือà¸\82à¹\89อมูลà¹\80à¸\8bสà¸\8aัà¸\99สูญหาย กรุณาเริ่มใหม่ตั้งแต่ต้น",
        "authmanager-authplugin-setpass-failed-title": "การเปลี่ยนรหัสผ่านล้มเหลว",
        "authmanager-authplugin-setpass-failed-message": "ปลั๊กอินการพิสูจน์ตัวจริงปฏิเสธการเปลี่ยนรหัสผ่าน",
        "authmanager-authplugin-create-fail": "ปลั๊กอินการพิสูจน์ตัวจริงปฏิเสธการสร้างบัญชี",
        "authmanager-autocreate-noperm": "ไม่อนุญาตการสร้างบัญชีอัตโนมัติ",
        "authmanager-autocreate-exception": "ปิดใช้งานการสร้างบัญชีอัตโนมัติชั่วคราวเนื่องจากข้อผิดพลาดก่อนหน้านี้",
        "authmanager-userdoesnotexist": "บัญชีผู้ใช้ \"$1\"ยังไม่ลงทะเบียน",
-       "authmanager-userlogin-remembermypassword-help": "à¸\84วรà¸\88à¸\94à¸\88ำรหัสà¸\9cà¹\88าà¸\99à¸\99าà¸\99à¹\80à¸\81ิà¸\99à¸\84วามยาวà¸\82อà¸\87à¸\8aà¹\88วà¸\87à¹\80วลาสืà¹\88อสารหรือไม่",
+       "authmanager-userlogin-remembermypassword-help": "à¸\84วรà¸\88à¸\94à¸\88ำรหัสà¸\9cà¹\88าà¸\99à¸\99าà¸\99à¹\80à¸\81ิà¸\99à¸\84วามยาวà¸\82อà¸\87à¹\80à¸\8bสà¸\8aัà¸\99หรือไม่",
        "authmanager-username-help": "ชื่อผู้ใช้สำหรับการพิสูจน์ตัวจริง",
        "authmanager-password-help": "รหัสผ่านสำหรับการพิสูจน์ตัวจริง",
        "authmanager-domain-help": "โดเมนสำหรับการพิสูจน์ตัวจริงภายนอก",
index eff94a5..7173a02 100644 (file)
@@ -22,7 +22,6 @@
        "tog-extendwatchlist": "Gözegçilik sanawyny, diňe soňky däl-de, eýsem ähli üýtgeşmeleri görkezer ýaly edip giňelt",
        "tog-usenewrc": "Güýçlendirilen soňky üýtgeşmelerden peýdalanyň (JavaScript bolmaly)",
        "tog-numberheadings": "Atlary awtomatik usulda belgile",
-       "tog-showtoolbar": "Redaktirleme mahalynda gural panelini görkez (JavaScript)",
        "tog-editondblclick": "Sahypany jübüt tyklap, redaktirläp başla (JavaScript)",
        "tog-editsectiononrightclick": "Bölümleri bölümiň adyna sag tyklap redaktirlemäge mümkinçilik döret (JavaScript)",
        "tog-watchcreations": "Döreden sahypalarymy gözegçilik sanawyma goş",
index f81415e..e4ba136 100644 (file)
@@ -34,7 +34,6 @@
        "tog-extendwatchlist": "Palawigin ang tala ng binabantayan upang maipakita ang lahat ng mga pagbabago, hindi lamang ang pinakahuling pagbabago",
        "tog-usenewrc": "Ipangkat ang mga pagbabago ayon sa pahina sa mga huling pagbabago at tala ng binabantayan",
        "tog-numberheadings": "Automatikong bilangin ang mga pamagat",
-       "tog-showtoolbar": "Ipakita ang ''toolbar'' ng pagbabago",
        "tog-editondblclick": "Magbago ng mga pahina sa dalawahang pagpindot",
        "tog-editsectiononrightclick": "Payagan ang mga pagbabagong panseksyon sa pakanang pagpindot ng mga panseksyong pamagat",
        "tog-watchcreations": "Idagdag sa aking tala ng mga binabantayan ang mga pahinang nilikha ko at mga talaksang ikinarga kong paitaas",
index 7734c11..d47975f 100644 (file)
        "tog-extendwatchlist": "İzleme listesini sadece en son değil, tüm değişiklikleri gösterecek şekilde genişlet",
        "tog-usenewrc": "Son değişiklikler ve izleme listesindeki değişiklikleri sayfalara göre gruplandır",
        "tog-numberheadings": "Başlıkları otomatik numaralandır",
-       "tog-showtoolbar": "Düzenleme araç çubuğunu göster",
        "tog-editondblclick": "Çift tıklandığında sayfaları düzenle",
        "tog-editsectiononrightclick": "Bölüm başlıklarına sağ tıklayarak bölüm düzenlemeyi etkinleştir",
        "tog-watchcreations": "Oluşturduğum sayfaları ve yüklediğim dosyaları izleme listeme ekle",
        "dellogpagetext": "Aşağıda en son silme işlemlerinin bir listesi bulunmaktadır.",
        "deletionlog": "silme günlüğü",
        "log-name-create": "Sayfa oluşturma günlüğü",
+       "log-description-create": "Aşağıda en son yeni sayfa oluşturma işlemlerinin bir listesi bulunmaktadır.",
        "logentry-create-create": "$1, $3 adlı sayfayı {{GENDER:$2|oluşturdu}}",
        "reverted": "Önceki sürüm geri getirildi",
        "deletecomment": "Neden:",
        "log-action-filter-upload-upload": "Yeni yükleme",
        "log-action-filter-upload-overwrite": "Yeniden yükle",
        "authmanager-authplugin-setpass-bad-domain": "Geçersiz alanadı.",
+       "authmanager-autocreate-noperm": "Otomatik kullanıcı oluşturma izni yok.",
        "authmanager-userdoesnotexist": "\"$1\" kullanıcı hesabı kayıtlı değil.",
        "authmanager-email-label": "E-posta",
        "authmanager-email-help": "E-posta adresi",
index 7068765..10ce72f 100644 (file)
@@ -13,7 +13,6 @@
        "tog-extendwatchlist": "Ndlandlamuxa ku komba kucinca hikwako, handle ka ku cinca ka sweswinyana ntsena",
        "tog-usenewrc": "Tirhisa kucinca ka sweswinyana loku hlutiweke (yitirhisa ntsalo wa Java)",
        "tog-numberheadings": "Tinhloko-mhaka leti hleriweke",
-       "tog-showtoolbar": "Komba xiangarhi xo cinca (yitirhisa ntsalo wa Java)",
        "tog-editondblclick": "Lulamisa matluka hi ku thlava kambirhi (yitirhisa ntsalo wa Java)",
        "tog-editsectiononrightclick": "Pfula ku lulamisa hi swiyenge hi ku thlava nhlokomhaka ya xiyenge (yitirhisa ntsalo wa Java)",
        "tog-watchcreations": "Hoxa matluka lawa ndzi matumbuluxaka eka leswi ndziswi languteke",
index 6ea99c2..46fb9e0 100644 (file)
@@ -40,7 +40,6 @@
        "tog-extendwatchlist": "Соңгыларын гына түгел, ә барлык үзгәртүләрне эченә алган, киңәйтелгән күзәтү исемлеге",
        "tog-usenewrc": "Соңгы үзгәртүләрдә һәм күзәтү исемлегендә үзгәрешләрне төркемләргә",
        "tog-numberheadings": "Атамалар автомат рәвештә номерлансын",
-       "tog-showtoolbar": "Үзгәртү вакытында коралларның өске панеле күрсәтелсен",
        "tog-editondblclick": "Битләргә ике чирттерү белән үзгәртү бите ачылсын",
        "tog-editsectiononrightclick": "Бүлек исеменә тычканның уң чирттермәсе белән төрткәч үзгәртү",
        "tog-watchcreations": "Мин төзегән битләр һәм йөкләгән файллар күзәтү исемлегемә өстәлсен",
index cab0be7..c7e349c 100644 (file)
@@ -21,7 +21,6 @@
        "tog-extendwatchlist": "Soñğıların ğına tügel, ä barlıq üzgärtülärne eçenä alğan, kiñäytelgän küzätü isemlege",
        "tog-usenewrc": "Yaxşırtılğan soñğı üzgärtülär isemlege qullanılsın (JavaScript kiräk)",
        "tog-numberheadings": "Atamalar avtomat räweştä nomerlansın",
-       "tog-showtoolbar": "Üzgärtü waqıtında qorallarnıñ öske panele kürsätelsen (JavaScript kiräk)",
        "tog-editondblclick": "Bitlärgä ike çirtterü belän üzgärtü bite açılsın (JavaScript kiräk)",
        "tog-editsectiononrightclick": "Bülek isemenä tıçqannıñ uñ çirttermäse belän törtkäç üzgärtü bite açılsın (JavaScript kiräk)",
        "tog-watchcreations": "Tözegän bitlärem küzätü isemlegemä östälsen",
index 712a68b..8f0dee5 100644 (file)
@@ -19,7 +19,6 @@
        "tog-newpageshidepatrolled": "Чаа арыннарның даңзындан истээн арыннарны чажырары",
        "tog-usenewrc": "Чаа өскерлиишкиннерниң өөделеттинген даңзызын ажыглаар (JavaScript херек)",
        "tog-numberheadings": "Эгелерин авто-санаар",
-       "tog-showtoolbar": "Өскертир херекселдерни көргүзер (JavaScript)",
        "tog-editondblclick": "Арынны өскертирде ийи катап базар (JavaScript)",
        "tog-watchcreations": "Мээң чаяан арыннарымны хайгаарал даңзымче немээри.",
        "tog-watchdefault": "Мээң өскерткен арыннарымны хайгаарал даңзымче немээри.",
index 52519e5..a20b490 100644 (file)
@@ -24,7 +24,6 @@
        "tog-extendwatchlist": "Чаклан списокын вань тупатонъёсты возьматыны (озьытэк берпуметӥоссэс гинэ)",
        "tog-usenewrc": "Выль тупатонъёслэсь списоксэс умояллям сямен возьматыны (JavsScript кулэ)",
        "tog-numberheadings": "Заголовокъёсты автоматически нумеровать карыны",
-       "tog-showtoolbar": "Тупатон тӥрлыкъёслэн панельзэс возьматыны",
        "tog-editondblclick": "Бамъёсты шырлэсь зӥбонзэ кык пол зӥбыса тупатыны (JavaScript кулэ)",
        "tog-editsectiononrightclick": "Cекциолэсь заголовок вылазы шырлэн бур кнопкаеныз зӥбыса тупатонзэс лэзьыны (JavaScript кулэ)",
        "tog-watchcreations": "Мынэсьтым кылдытэм бамъёсме но ӝуткам файлъёсме чаклан списокам пыртыны",
index 15bf314..2107474 100644 (file)
@@ -26,7 +26,6 @@
        "tog-extendwatchlist": "كۆزىتىش تىزىملىكىدە يېقىنقى ئۆزگەرتىشنىلا كۆرسەتمەي بەلكى ھەممە ئۆزگەرتىشنى كۆرسىتىش",
        "tog-usenewrc": "يېقىنقى ئۆزگەرتىش ۋە كۆزەت تىزىملىلىگىدىكى بەتلەر ئۆزگىرىشىگە ئاساسەن گۇرۇپپىلاش",
        "tog-numberheadings": "ماۋزۇغا ئۆزلۈكىدىن تەرتىپ نومۇرى قوش",
-       "tog-showtoolbar": "تەھرىر قورال بالداقنى كۆرسەت",
        "tog-editondblclick": "قوش چەككەندە بەت تەھرىرلە",
        "tog-editsectiononrightclick": "تېمىنى ئوڭ چېكىپ ئابزاس تەھرىرلەشكە يول قوي",
        "tog-watchcreations": "مەن قۇرغان بەت ۋە يۈكلىگەن ھۆججەتلەرنى كۆزەت تىزىملىكىمگە قوش",
index 273d521..8629986 100644 (file)
@@ -88,7 +88,6 @@
        "tog-extendwatchlist": "Розгорнути список спостереження, щоб показати всі зміни, а не лише останні",
        "tog-usenewrc": "Групувати редагування на сторінках останніх змін та списку спостереження",
        "tog-numberheadings": "Автоматично нумерувати заголовки",
-       "tog-showtoolbar": "Показувати панель інструментів",
        "tog-editondblclick": "Перейти в режим редагування сторінки подвійним клацанням мишки",
        "tog-editsectiononrightclick": "Перейти в режим редагування розділу клацанням правою кнопкою мишки на назву розділу",
        "tog-watchcreations": "Додавати створені мною сторінки і завантажені файли до мого списку спостереження",
        "subject-preview": "Попередній перегляд теми:",
        "previewerrortext": "Сталася помилка при спробі попереднього перегляду Ваших змін.",
        "blockedtitle": "Користувача заблоковано",
+       "blocked-email-user": "<strong>Для вашого імені користувача заблокована можливість надсилання електронної пошти. Але ви ще можете редагувати інші сторінки у цій вікі.</strong> Всі подробиці блокування ви можете побачити на сторінці [[Special:MyContributions|внеску облікового запису]].\n\nБлокування виконав адміністратор $1.\n\nВказана наступна причина: $2.\n\n* Початок блокування: $8\n* Закінчення блокування: $6\n* Ціль блокування: $7\n* Ідентифікатор блокування: #$5",
+       "blockedtext-partial": "<strong>Для вашого імені користувача або IP-адреси заблокована можливість змінення  цієї сторінки. Але ви ще можете редагувати інші сторінки у цій вікі.</strong> Всі подробиці блокування ви можете побачити на сторінці [[Special:MyContributions|внеску облікового запису]].\n\nБлокування виконав адміністратор $1.\n\nВказана наступна причина: $2.\n\n* Початок блокування: $8\n* Закінчення блокування: $6\n* Ціль блокування: $7\n* Ідентифікатор блокування: #$5",
        "blockedtext": "<strong>Ваш обліковий запис або IP-адреса заблоковані.</strong>\n\nБлокування виконане адміністратором $1.\nПричина блокування: <em>$2</em>.\n\n* Початок блокування: $8\n* Закінчення блокування: $6\n* Діапазон блокування: $7\n\nВи можете надіслати листа користувачеві $1 або будь-якому іншому [[{{MediaWiki:Grouppage-sysop}}|адміністратору]], щоб обговорити блокування.\n\nЗверніть увагу, що ви не зможете використати функцію \"{{int:emailuser}}\", якщо ви не зареєстровані або не підтвердили свою електронну адресу в [[Special:Preferences|особистих налаштуваннях]], а також якщо вам було заборонено надсилати листи при блокуванні.\n\nВаша поточна IP-адреса — $3, ідентифікатор блокування — #$5. Будь ласка, зазначайте ці дані у своїх запитах.",
        "autoblockedtext": "Ваша IP-адреса автоматично заблокована у зв'язку з тим, що вона раніше використовувалася кимось із користувачів, якого заблокував $1.\nПричина блокування блокування:\n\n:<em>$2</em>\n\n* Початок блокування: $8\n* Закінчення блокування: $6\n* Блокування виконав: $7\n\nВи можете надіслати листа користувачеві $1 або будь-якому іншому [[{{MediaWiki:Grouppage-sysop}}|адміністратору]], щоб обговорити блокування.\n\nЗверніть увагу, що ви не зможете скористатися функцією \"{{int:emailuser}}\", так як не маєте дійсної електронної пошти, зареєстрованої в [[Special:Preferences|особистих налаштуваннях]], а також якщо вам було заборонено надсилати листи при блокуванні.\n\nВаша поточна IP-адреса — $3, ідентифікатор блокування — #$5. Будь ласка, зазначайте ці дані у своїх запитах.",
        "systemblockedtext": "Ваше ім'я користувача або IP-адресу було автоматично заблоковано MediaWiki.\nВказана причина:\n\n:<em>$2</em>\n\n* Початок блокування: $8\n* Закінчення блокування: $6\n* Ціль блокування: $7\n\nВаша поточна IP-адреса — $3.\nБудь ласка, додайте всі вказані подробиці до будь-яких запитів, які Ви будете робити.",
        "right-importupload": "імпорт сторінок через завантаження файлів",
        "right-patrol": "позначення редагувань патрульованими",
        "right-autopatrol": "автоматичне позначення редагувань патрульованими",
-       "right-patrolmarks": "Ð\9fеÑ\80еглÑ\8fд Ð¿Ð°Ñ\82Ñ\80Ñ\83лÑ\8cованиÑ\85 Ñ\81Ñ\82оÑ\80Ñ\96нок у нових редагуваннях",
+       "right-patrolmarks": "пеÑ\80еглÑ\8fд Ð¿Ð¾Ð·Ð½Ð°Ñ\87ок Ð¿Ð°Ñ\82Ñ\80Ñ\83лÑ\8eваннÑ\8f у нових редагуваннях",
        "right-unwatchedpages": "перегляд списку сторінок, за якими ніхто не спостерігає",
        "right-mergehistory": "об'єднання історій редагувань сторінок",
        "right-userrights": "зміна всіх прав користувачів",
        "prefixindex": "Усі сторінки, що починаються з",
        "prefixindex-namespace": "Усі сторінки з префіксом (простір назв $1)",
        "prefixindex-submit": "Показати",
-       "prefixindex-strip": "Ð\9eпÑ\83Ñ\81Ñ\82иÑ\82и Ð¿Ñ\80еÑ\84Ñ\96кÑ\81 Ñ\83 Ñ\81пиÑ\81кÑ\83",
+       "prefixindex-strip": "Ð\9eпÑ\83Ñ\81Ñ\82иÑ\82и Ð¿Ñ\80еÑ\84Ñ\96кÑ\81 Ñ\83 Ñ\80езÑ\83лÑ\8cÑ\82аÑ\82аÑ\85",
        "shortpages": "Короткі статті",
        "longpages": "Довгі статті",
        "deadendpages": "Сторінки без посилань",
        "sp-contributions-logs": "журнали",
        "sp-contributions-talk": "обговорення",
        "sp-contributions-userrights": "управління правами {{GENDER:$1|користувача|користувачки}}",
-       "sp-contributions-blocked-notice": "Цей ÐºÐ¾Ñ\80иÑ\81Ñ\82Ñ\83ваÑ\87 Ð½Ð°Ñ\80азÑ\96 Ð·Ð°Ð±Ð»Ð¾ÐºÐ¾Ð²Ð°Ð½Ð¸Ð¹. Ð\9eÑ\81Ñ\82аннÑ\96й Ð·Ð°Ð¿Ð¸Ñ\81 Ñ\83 Ð¶Ñ\83Ñ\80налÑ\96 Ð±Ð»Ð¾ÐºÑ\83ванÑ\8c Ñ\82акий:",
+       "sp-contributions-blocked-notice": "Цей ÐºÐ¾Ñ\80иÑ\81Ñ\82Ñ\83ваÑ\87 Ð½Ð°Ñ\80азÑ\96 Ð·Ð°Ð±Ð»Ð¾ÐºÐ¾Ð²Ð°Ð½Ð¸Ð¹. Ð\9dижÑ\87е Ð½Ð°Ð²ÐµÐ´ÐµÐ½Ð¾ Ð¾Ñ\81Ñ\82аннÑ\96й Ð·Ð°Ð¿Ð¸Ñ\81 Ñ\83 Ð¶Ñ\83Ñ\80налÑ\96 Ð±Ð»Ð¾ÐºÑ\83ванÑ\8c:",
        "sp-contributions-blocked-notice-anon": "Доступ з цієї IP-адреси зараз заблокований.\nДалі наведено останній запис з журналу блокувань:",
        "sp-contributions-search": "Пошук внеску",
        "sp-contributions-username": "IP-адреса або ім'я користувача:",
        "ipb-disableusertalk": "Заборонити користувачеві редагувати свою сторінку обговорення під час блокування",
        "ipb-change-block": "Переблокувати користувача з цими налаштуваннями",
        "ipb-confirm": "Підтвердити блокування",
+       "ipb-sitewide": "У всій вікі",
+       "ipb-partial": "Частково",
+       "ipb-type-label": "Тип",
+       "ipb-pages-label": "Сторінки",
        "badipaddress": "IP-адреса записана в невірному форматі, або користувача з таким іменем не існує.",
        "blockipsuccesssub": "Блокування проведено",
        "blockipsuccesstext": "[[Special:Contributions/$1|«$1»]] заблоковано.<br />\nДив. [[Special:BlockList|список заблокованих IP-адрес]] для перегляду блокувань.",
        "createaccountblock": "створення облікових записів заблоковане",
        "emailblock": "листи заборонені",
        "blocklist-nousertalk": "не може редагувати свою сторінку обговорення",
+       "blocklist-editing": "редагування",
+       "blocklist-editing-sitewide": "редагування (у всій вікі)",
        "ipblocklist-empty": "Список блокувань порожній.",
        "ipblocklist-no-results": "Запрохані IP-адреса або ім'я користувача не заблоковані.",
        "blocklink": "заблокувати",
        "logentry-block-block": "$1 {{GENDER:$2|заблокував|заблокувала}} {{GENDER:$4|$3}} на термін $5 $6",
        "logentry-block-unblock": "$1 {{GENDER:$2|розблокував|розблокувала}} {{GENDER:$4|$3}}",
        "logentry-block-reblock": "$1 {{GENDER:$2|переблокував|переблокувала}} {{GENDER:$4|$3}} на термін $5 $6",
+       "logentry-partialblock-block": "$1 {{GENDER:$2|заблокував|заблокувала}} {{GENDER:$4|$3}} від редагування {{PLURAL:$8||сторінок}} $7 на термін $5 $6",
+       "logentry-partialblock-reblock": "$1 {{GENDER:$2|змінив|змінила}} блокувальні налаштування для {{GENDER:$4|$3}}, заперечуючи зміни {{PLURAL:$8||сторінок}} $7 на термін $5 $6",
+       "logentry-non-editing-block-block": "$1 {{GENDER:$2|заблокував|заблокувала}} {{GENDER:$4|$3}} від нередагуючих дій на термін $5 $6",
+       "logentry-non-editing-block-reblock": "$1 {{GENDER:$2|змінив|змінила}} блокувальні налаштування для {{GENDER:$4|$3}} від нередагуючих дій на термін $5 $6",
        "logentry-suppress-block": "$1 {{GENDER:$2|заблокував}} {{GENDER:$4|$3}} строком на $5 $6",
        "logentry-suppress-reblock": "$1 {{GENDER:$2|змінив}} блокування для {{GENDER:$4|$3}} на період $5 $6",
        "logentry-import-upload": "$1 імпортува{{GENDER:$2|в|ла}} $3 через завантаження файлів",
        "mw-widgets-titleinput-description-redirect": "перенаправлення на $1",
        "mw-widgets-categoryselector-add-category-placeholder": "Додати категорію...",
        "mw-widgets-usersmultiselect-placeholder": "Додати ще...",
+       "mw-widgets-titlesmultiselect-placeholder": "Додати ще...",
        "date-range-from": "Від дати:",
        "date-range-to": "До дати:",
        "sessionmanager-tie": "Не можна поєднувати кілька типів автентифікації запиту: $1.",
index a5bc856..098a3be 100644 (file)
@@ -50,7 +50,6 @@
        "tog-extendwatchlist": "حالیہ ترین تبدیلیوں کی بجائے تمام تبدیلیاں دیکھنے کے لیے زیر نظر فہرست کو وسیع کریں",
        "tog-usenewrc": "حالیہ تبدیلیاں اور زیر نظر فہرست میں تبدیلیوں کو بلحاظ صفحہ گروہ بند کریں",
        "tog-numberheadings": "سرخیوں کو خودکار نمبر دیں",
-       "tog-showtoolbar": "آلات ترمیم دکھائیں",
        "tog-editondblclick": "دہرے کلک پر صفحات کی ترمیم کریں",
        "tog-editsectiononrightclick": "قطعہ کے عنوانات پر رائیٹ کلک کے ذریعے قطعہ کی ترمیم کاری فعال کریں",
        "tog-watchcreations": "میرے تخلیق کردہ صفحات اور اپلوڈ کردہ فائلوں کو میری زیر نظر فہرست میں شامل کریں",
        "pageinfo-category-files": "فائلوں کی تعداد",
        "pageinfo-user-id": "صارف آئی ڈی",
        "pageinfo-file-hash": "ہیش قدر",
+       "pageinfo-view-protect-log": "اس صفحہ کے لیے نوشتہ محفوظ شدگی دیکھیے۔",
        "markaspatrolleddiff": "بطور مراجعت شدہ نشان زد کریں",
        "markaspatrolledtext": "اس صفحہ کو بطور مراجعت شدہ نشان زد کریں",
        "markaspatrolledtext-file": "فائل کے اس نسخے کو مراجعت شدہ نشان زد کریں",
index cf94891..b4ccf28 100644 (file)
@@ -25,7 +25,6 @@
        "tog-extendwatchlist": "Kengaytirilgan kuzatuv roʻyxati: faqat oxirgi paytdagi emas, barcha oʻzgarishlar koʻrsatiladi",
        "tog-usenewrc": "Yangi oʻzgarishlar va kuzatuv roʻyxatidagi sahifalarni guruhlarga boʻlish",
        "tog-numberheadings": "Sarlavhalarni avtomatik raqamlash",
-       "tog-showtoolbar": "Tahrirlash asboblarini koʻrsatish",
        "tog-editondblclick": "Sichqonchaning chap tugmasini ikki marta bosib tahrirlashni boshlash",
        "tog-editsectiononrightclick": "Boʻlim sarlavhasiga sichqonchaning oʻng tugmasini bosib tahrirlashni boshlash",
        "tog-watchcreations": "Men yaratgan sahifalar va yuklagan fayllar kuzatuv roʻyxatimga qoʻshilsin",
index 830734a..cfcd32b 100644 (file)
@@ -34,7 +34,6 @@
        "tog-extendwatchlist": "Mostra tute łe modifeghe a i oservai spesałi, no soło l'ultima",
        "tog-usenewrc": "Ragrupa ƚe modifeghe par pàgina inte i ultemi canbiamenti e inte ƚe tegnùe d'òcio",
        "tog-numberheadings": "Numerasion automatega de i titołi de sesion",
-       "tog-showtoolbar": "Mostra ƚa bara de i strumenti de modifega",
        "tog-editondblclick": "Modifega de ƚe pàgine co dopio clic",
        "tog-editsectiononrightclick": "Modifega de ƚe sesion co clic dreto so'l tìtoƚo",
        "tog-watchcreations": "Xonta łe pàjine creae e i file cargai a łe tegnùe d'ocio",
index b55152f..f6682e1 100644 (file)
@@ -21,7 +21,6 @@
        "tog-extendwatchlist": "Levitagat kaclendnimikirjutez, miše nähta kaik toižetused.",
        "tog-usenewrc": "Kävutagat paremboitud tantoižed toižetused (pidab otta radho JavaScript)",
        "tog-numberheadings": "Nomeruida avtomatižikš pälkirjutesed",
-       "tog-showtoolbar": "Ozutada redaktiruindan panel'",
        "tog-editondblclick": "Redaktiruida lehtpoled kaksitadud plokul",
        "tog-editsectiononrightclick": "Redaktiruida sekcijad hiren oiktal plokul pälkirjutesele",
        "tog-watchcreations": "Ližata kaik minai sätud lehtpoled da failad minun kaclendkirjuteshe",
index b24dbfb..f4bb715 100644 (file)
        "tog-extendwatchlist": "Mở rộng danh sách theo dõi để hiển thị tất cả các thay đổi, chứ không chỉ các thay đổi gần đây",
        "tog-usenewrc": "Thu gọn các thay đổi theo trang trong thay đổi gần đây và danh sách theo dõi",
        "tog-numberheadings": "Tự động đánh số các đề mục",
-       "tog-showtoolbar": "Hiển thị thanh định dạng",
        "tog-editondblclick": "Nhấn đúp để sửa đổi trang",
-       "tog-editsectiononrightclick": "Bấm chuột phải vào đề mục để sửa đổi phần trang",
+       "tog-editsectiononrightclick": "Bấm chuột phải vào tên đề mục để sửa đổi đề mục đó",
        "tog-watchcreations": "Tự động theo dõi các trang tôi tạo và các tập tin tôi tải lên",
        "tog-watchdefault": "Tự động theo dõi các trang và tập tin tôi sửa",
        "tog-watchmoves": "Tự động theo dõi các trang và tập tin tôi di chuyển",
        "tog-watchdeletion": "Tự động theo dõi các trang và tập tin tôi xóa",
-       "tog-watchuploads": "Thêm các tập tin tải lên của tôi vào danh sách theo dõi của tôi",
+       "tog-watchuploads": "Thêm các tập tin tôi tải lên vào danh sách theo dõi của tôi",
        "tog-watchrollback": "Tự động theo dõi các trang tôi lùi sửa",
        "tog-minordefault": "Mặc định đánh dấu tất cả sửa đổi của tôi là sửa đổi nhỏ",
        "tog-previewontop": "Hiển thị phần xem trước nằm trên hộp sửa đổi",
        "tog-watchlisthidebots": "Ẩn các sửa đổi của robot khỏi danh sách theo dõi",
        "tog-watchlisthideminor": "Ẩn các sửa đổi nhỏ khỏi danh sách theo dõi",
        "tog-watchlisthideliu": "Ẩn sửa đổi của thành viên đã đăng nhập khỏi danh sách theo dõi",
-       "tog-watchlistreloadautomatically": "Tự động tải lại danh sách theo dõi khi nào bộ lọc được thay đổi (cần JavaScript)",
-       "tog-watchlistunwatchlinks": "Thêm nút ngừng theo dõi/theo dõi ({{int:Watchlist-unwatch}}/{{int:Watchlist-unwatch-undo}}) trực tiếp vào trang theo dõi có thay đổi (cần JavaScript để bật/tắt)",
+       "tog-watchlistreloadautomatically": "Tự động tải lại danh sách theo dõi mỗi khi thay đổi bộ lọc (cần JavaScript)",
+       "tog-watchlistunwatchlinks": "Thêm nút ngừng theo dõi/theo dõi ({{int:Watchlist-unwatch}}/{{int:Watchlist-unwatch-undo}}) vào ngay trang tôi theo dõi khi có thay đổi (cần JavaScript để dùng chức năng này)",
        "tog-watchlisthideanons": "Ẩn sửa đổi của người dùng vô danh khỏi danh sách theo dõi",
        "tog-watchlisthidepatrolled": "Ẩn sửa đổi đã tuần tra trong danh sách theo dõi",
        "tog-watchlisthidecategorization": "Ẩn việc xếp thể loại",
        "tog-ccmeonemails": "Gửi bản sao cho tôi khi gửi thư điện tử cho người khác",
-       "tog-diffonly": "Ẩn nội dung trang dưới phần so sánh phiên bản",
+       "tog-diffonly": "Không hiện nội dung trang ở phía dưới phần so sánh phiên bản",
        "tog-showhiddencats": "Hiển thị thể loại ẩn",
        "tog-norollbackdiff": "Bỏ qua bản so sánh sau khi lùi sửa",
        "tog-useeditwarning": "Cảnh báo khi tôi thoát trang sửa đổi mà chưa lưu trang",
-       "tog-prefershttps": "Luôn kết nối an toàn khi đã đăng nhập",
+       "tog-prefershttps": "Luôn sử dụng kết nối an toàn khi đã đăng nhập",
        "underline-always": "Luôn luôn",
        "underline-never": "Không bao giờ",
        "underline-default": "Mặc định của giao diện hoặc trình duyệt",
        "listingcontinuesabbrev": "(tiếp theo)",
        "index-category": "Trang được ghi chỉ mục",
        "noindex-category": "Trang không hiển thị trong bộ máy tìm kiếm",
-       "broken-file-category": "Trang nhúng tập tin không tồn tại",
+       "broken-file-category": "Trang có sử dụng tập tin không tồn tại",
        "about": "Giới thiệu",
        "article": "Trang nội dung",
        "newwindow": "(mở cửa sổ mới)",
        "morenotlisted": "Danh sách này có thể không đầy đủ.",
        "mypage": "Trang cá nhân",
        "mytalk": "Tin nhắn",
-       "anontalk": "Thảo luận",
+       "anontalk": "Tin nhắn",
        "navigation": "Xem nhanh",
        "and": "&#32;và",
        "faq": "Câu hỏi thường gặp",
        "tagline": "Từ {{SITENAME}}",
        "help": "Trợ giúp",
        "search": "Tìm kiếm",
-       "search-ignored-headings": " #<!-- để yên dòng này --> <pre>\n# Công cụ tìm kiếm sẽ bỏ qua các đề mục này.\n# Các thay đổi trên danh sách này sẽ có hiệu lực một khi trang có đề mục được đưa vào chỉ mục.\n# Để bắt trang phải được đưa lại vào chỉ mục, thực hiện một sửa đổi vô hiệu quả.\n# Cú pháp:\n#   * Tất cả mọi thứ từ ký hiệu “#” để cuối dòng là chú thích.\n#   * Mỗi dòng có nội dung là đúng tên đề mục để bỏ qua, phân biệt chữ hoa/thường.\nTham khảo\nChú thích\nLiên kết ngoài\nXem thêm\nĐọc thêm\n #</pre> <!-- để yên dòng này -->",
+       "search-ignored-headings": " #<!-- để yên dòng này --> <pre>\n# Công cụ tìm kiếm sẽ bỏ qua các đề mục này.\n# Các thay đổi trong danh sách này sẽ có hiệu lực ngay khi trang chứa đề mục được đưa vào chỉ mục.\n# Để bắt buộc trang phải được đưa trở lại vào chỉ mục, hãy thực hiện một sửa đổi rỗng.\n# Cú pháp:\n#   * Tất cả mọi thứ từ ký hiệu “#” đến cuối dòng là chú thích.\n#   * Mỗi dòng có nội dung là bản sao của tên đề mục cần bỏ qua, phân biệt chữ hoa/thường.\nTham khảo\nChú thích\nLiên kết ngoài\nXem thêm\nĐọc thêm\n #</pre> <!-- để yên dòng này -->",
        "searchbutton": "Tìm kiếm",
        "go": "Xem",
        "searcharticle": "Xem",
        "specialpage": "Trang đặc biệt",
        "personaltools": "Công cụ cá nhân",
        "talk": "Thảo luận",
-       "views": "Các hiển thị",
+       "views": "Giao diện",
        "toolbox": "Công cụ",
        "tool-link-userrights": "Thay đổi nhóm {{GENDER:$1}}người dùng",
        "tool-link-userrights-readonly": "Xem {{GENDER:$1}}nhóm người dùng",
        "tool-link-emailuser": "Gửi thư cho {{GENDER:$1}}người dùng này",
        "imagepage": "Xem trang tập tin",
-       "mediawikipage": "Thông điệp giao diện",
+       "mediawikipage": "Xem thông điệp giao diện",
        "templatepage": "Xem trang bản mẫu",
        "viewhelppage": "Xem trang trợ giúp",
        "categorypage": "Xem trang thể loại",
        "viewtalkpage": "Xem trang thảo luận",
-       "otherlanguages": "Trong ngôn ngữ khác",
+       "otherlanguages": "Ngôn ngữ khác",
        "redirectedfrom": "(đổi hướng từ $1)",
        "redirectpagesub": "Trang đổi hướng",
        "redirectto": "Đổi hướng đến:",
        "badaccess-group0": "Bạn không được phép thực hiện thao tác này.",
        "badaccess-groups": "Chỉ những thành viên trong {{PLURAL:$2|nhóm|các nhóm}} $1 mới được thực hiện thao tác này.",
        "versionrequired": "Cần phiên bản $1 của MediaWiki",
-       "versionrequiredtext": "Cần phiên bản $1 của MediaWiki để sử dụng trang này. Xem [[Special:Version|trang phiên bản]].",
+       "versionrequiredtext": "Cần phiên bản $1 của MediaWiki để sử dụng trang này. \nXem [[Special:Version|phiên bản hiện hành]].",
        "ok": "OK",
        "pagetitle": "$1 – {{SITENAME}}",
        "retrievedfrom": "Lấy từ “$1”",
        "youhavenewmessages": "Bạn có $1 ($2).",
-       "youhavenewmessagesfromusers": "Bạn có $1 từ {{PLURAL:$3|người dùng khác|$3 người dùng}} ($2).",
+       "youhavenewmessagesfromusers": "Bạn có $1 từ {{PLURAL:$3|một người dùng|$3 người dùng}} ($2).",
        "youhavenewmessagesmanyusers": "Bạn có $1 từ nhiều người dùng ($2).",
        "newmessageslinkplural": "{{PLURAL:$1}}tin nhắn mới",
        "newmessagesdifflinkplural": "{{PLURAL:$1|thay đổi|999=các thay đổi}} gần đây",
        "confirmable-confirm": "{{GENDER:$1}}Bạn chắc chứ?",
        "confirmable-yes": "Có",
        "confirmable-no": "Không",
-       "thisisdeleted": "Xem hay phục hồi $1 ?",
+       "thisisdeleted": "Xem hay phục hồi $1?",
        "viewdeleted": "Xem $1?",
        "restorelink": "{{PLURAL:$1|một|$1}} sửa đổi đã xóa",
-       "feedlinks": "Nạp:",
+       "feedlinks": "Nguồn cấp dữ liệu:",
        "feed-invalid": "Định dạng nguồn cấp dữ liệu không hợp lệ.",
        "feed-unavailable": "Nguồn cấp dữ liệu không có sẵn tại đây",
        "site-rss-feed": "Nguồn cấp RSS của $1",
        "nosuchaction": "Không có tác vụ này",
        "nosuchactiontext": "Wiki không hiểu được tác vụ được yêu cầu trong địa chỉ URL.\nCó thể bạn đã gõ nhầm địa chỉ URL, hoặc nhấn vào một liên kết sai.\nNó cũng có thể là dấu hiệu của một lỗi trong phần mềm mà {{SITENAME}} sử dụng.",
        "nosuchspecialpage": "Không có trang đặc biệt nào có tên này",
-       "nospecialpagetext": "<strong>Bạn đã đi đến một liên kết trang đặc biệt không tồn tại.</strong>\n\nCó danh sách trang đặc biệt tại [[Special:SpecialPages|{{int:specialpages}}]].",
+       "nospecialpagetext": "<strong>Bạn đã đi đến một liên kết trang đặc biệt không tồn tại.</strong>\n\nDanh sách trang đặc biệt có thể xem tại [[Special:SpecialPages|{{int:specialpages}}]].",
        "error": "Lỗi",
        "databaseerror": "Lỗi cơ sở dữ liệu",
        "databaseerror-text": "Xuất hiện lỗi truy vấn cơ sở dữ liệu.\nĐiều này có thể xảy ra do một lỗi phần mềm.",
        "databaseerror-query": "Truy vấn: $1",
        "databaseerror-function": "Hàm: $1",
        "databaseerror-error": "Lỗi: $1",
-       "transaction-duration-limit-exceeded": "Để tránh việc tăng độ trễ sao chép quá mức, giao dịch này bị hủy bỏ vì thời gian ghi ($1) vượt quá giới hạn là $2 giây.\nNếu bạn muốn thay đổi nhiều mục cùng lúc, hãy thử thực hiện nhiều tác vụ nhỏ hơn thay thế.",
+       "transaction-duration-limit-exceeded": "Để tránh việc tăng độ trễ sao chép quá mức, giao dịch này bị hủy bỏ vì thời gian ghi ($1) vượt quá giới hạn là $2 giây.\nNếu bạn muốn thay đổi nhiều mục cùng lúc, hãy thay bằng nhiều tác vụ nhỏ hơn.",
        "laggedslavemode": "Cảnh báo: Trang có thể chưa được cập nhật.",
        "readonly": "Cơ sở dữ liệu bị khóa",
        "enterlockreason": "Nêu lý do khóa, cùng với thời hạn khóa",
        "nonwrite-api-promise-error": "Đầu đề HTTP “Promise-Non-Write-API-Action” được gửi nhưng yêu cầu là cho mô đun ghi của API.",
        "internalerror": "Lỗi nội bộ",
        "internalerror_info": "Lỗi nội bộ: $1",
-       "internalerror-fatal-exception": "Ngoại lệ chí tử loại “$1”",
+       "internalerror-fatal-exception": "Lỗi chí tử loại “$1”",
        "filecopyerror": "Không thể chép tập tin “$1” đến “$2”.",
        "filerenameerror": "Không thể đổi tên tập tin “$1” thành “$2”.",
        "filedeleteerror": "Không thể xóa tập tin “$1”.",
-       "directorycreateerror": "Không thể tạo được danh mục “$1”.",
+       "directorycreateerror": "Không thể tạo được thư mục “$1”.",
        "directoryreadonlyerror": "Thư mục “$1” là chỉ-đọc.",
        "directorynotreadableerror": "Không đọc được thư mục “$1”.",
        "filenotfound": "Không tìm thấy tập tin “$1”.",
        "cannotdelete": "Không thể xóa trang hay tập tin “$1”. Có thể nó đã bị ai đó xóa rồi.",
        "cannotdelete-title": "Không thể xóa trang “$1”",
        "delete-hook-aborted": "Một phần bổ trợ phần mềm đã bỏ qua việc xóa này.\nKhông có lý do nào được đưa ra.",
-       "no-null-revision": "Không thể tạo phiên bản không nội dung mới cho trang “$1”",
+       "no-null-revision": "Không thể tạo phiên bản trống mới cho trang “$1”",
        "badtitle": "Tựa trang sai",
        "badtitletext": "Tựa trang yêu cầu không đúng, rỗng, hoặc là một liên kết ngôn ngữ hoặc liên kết wiki sai. Nó có thể chứa một hoặc nhiều ký tự mà tựa trang không thể sử dụng.",
        "title-invalid-empty": "Tiêu đề trang được yêu cầu rỗng hoặc chỉ chứa tên của một không gian tên.",
        "title-invalid-characters": "Tiêu đề trang đã yêu cầu chứa ký tự không hợp lệ: “$1”.",
        "title-invalid-relative": "Tiêu đề có đường dẫn tương đối. Tiêu đề trang tương đối (./, ../) là không hợp lệ, bởi chúng thường sẽ không thể đến được khi được xử lý bởi trình duyệt của người dùng.",
        "title-invalid-magic-tilde": "Tiêu đề trang đã yêu cầu chứa dãy dấu ngã không hợp lệ (<nowiki>~~~</nowiki>).",
-       "title-invalid-too-long": "Tiêu đề trang đã yêu cầu quá dài. Tiêu đề phải ngắn hơn $1 byte theo mã hóa UTF-8.",
-       "title-invalid-leading-colon": "Tiêu đề trang đã yêu cầu chứa dấu hai chấm ở đầu là không hợp lệ.",
-       "perfcached": "Dữ liệu sau được lấy từ bộ nhớ đệm và có thể đã lỗi thời. Tối đa có sẵn {{PLURAL:$1|một kết quả|$1 kết quả}} trong bộ nhớ đệm.",
+       "title-invalid-too-long": "Tiêu đề trang được yêu cầu quá dài. Tiêu đề phải ngắn hơn $1 byte theo mã hóa UTF-8.",
+       "title-invalid-leading-colon": "Tiêu đề trang được yêu cầu chứa dấu hai chấm ở đầu là không hợp lệ.",
+       "perfcached": "Dữ liệu sau được lấy từ vùng nhớ đệm và có thể đã lỗi thời. Tối đa có sẵn {{PLURAL:$1|một kết quả|$1 kết quả}} trong vùng nhớ đệm.",
        "perfcachedts": "Dữ liệu dưới đây được đưa vào vùng nhớ đệm và được cập nhật lần cuối lúc $1. Tối đa có sẵn {{PLURAL:$4|một kết quả|$4 kết quả}} trong vùng nhớ đệm.",
        "querypage-no-updates": "Việc cập nhật trang này hiện đã bị tắt. Dữ liệu ở đây có thể bị lỗi thời.",
        "viewsource": "Xem mã nguồn",
        "prefixindex": "Tất cả các trang trùng với tiền tố",
        "prefixindex-namespace": "Tất cả các trang trùng với tiền tố (không gian tên $1)",
        "prefixindex-submit": "Xem",
-       "prefixindex-strip": "Ẩn tiền tố trong danh sách",
+       "prefixindex-strip": "Ẩn tiền tố trong kết quả",
        "shortpages": "Trang ngắn nhất",
        "longpages": "Trang dài nhất",
        "deadendpages": "Trang đường cùng",
index 60d1098..4df9726 100644 (file)
@@ -22,7 +22,6 @@
        "tog-extendwatchlist": "Stäänükön galädalisedi ad jonön votükamis tefik valik, e no te nulikünos",
        "tog-usenewrc": "Grupön votükamis pado in votukäms nulik e galädalised",
        "tog-numberheadings": "Givön itjäfidiko nümis dilädatiädes",
-       "tog-showtoolbar": "Jonön redakamastumemi",
        "tog-editondblclick": "Dälön redakön padis pö drän telik mugaknopa",
        "tog-editsectiononrightclick": "Dälön redakami diläda me klik mugaknopa detik su dilädatiäds",
        "tog-watchcreations": "Läükön padis fa ob pejafölis e ragivis fa ob pelöpükölis lä galädalised obik",
index 0c2b2dd..8d48b01 100644 (file)
@@ -21,7 +21,6 @@
        "tog-extendwatchlist": "Laendaq perräkaemisnimekirjä, et nätäq kõiki muutmiisi, mitte õnnõ kõgõ perämäidsi",
        "tog-usenewrc": "Sordiq viimädseq muutmisõq ja muutmisnimekirän leheküle perrä",
        "tog-numberheadings": "Päälkirjo automaatnummõrdus",
-       "tog-showtoolbar": "Näütäq toimõndusõ tüüriistaripa",
        "tog-editondblclick": "Toimõndaq artikliid topõltklõpsu pääle",
        "tog-editsectiononrightclick": "Lupaq lõikõ toimõndaq hüäpoolidsõ klõpsutusõga lõigu päälkirä pääl",
        "tog-watchcreations": "Panõq muq luuduq leheq ja üleslaadiduq teedüstüq muq perräkaemisnimekirjä",
index fa6bb02..657031e 100644 (file)
@@ -20,7 +20,6 @@
        "tog-extendwatchlist": "Ragrandi l' djivêye po mostrer tos les candjmints, nén seulmint les dierins",
        "tog-usenewrc": "Rashonner par pådje dins les dierins candjmints et l' djivêye des shuvous (i fåt JavaScript)",
        "tog-numberheadings": "Limerotaedje otomatike des tites",
-       "tog-showtoolbar": "Mostrer l' bår d' usteyes e môde candjmint",
        "tog-editondblclick": "Candjî les pådjes avou on dobe-clitch",
        "tog-editsectiononrightclick": "Candjî les seccions avou on dobe-clitch so les tites",
        "tog-watchcreations": "Radjouter a m' djivêye des shuvous les pådjes ki dj' askepeye et les fitchîs ki dj' eberwete",
index 2d5c8ad..7662af2 100644 (file)
@@ -23,7 +23,6 @@
        "tog-extendwatchlist": "Padako-a an angay timan-an agod makita an tanan nga kabag-ohan, diri la an gibag-ohi",
        "tog-usenewrc": "Grupo nga mga pagbag-o kada pakli ha kababag-o pala ngan mga barantayon nga talaan",
        "tog-numberheadings": "Auto-nga-ihap nga mga pagngaran",
-       "tog-showtoolbar": "Igpakita an edit toolbar",
        "tog-editondblclick": "Igliwat in mga pakli ha doble nga klik",
        "tog-editsectiononrightclick": "Tugoti in pagliwat hin seksyon ha pag klik-ha-tuo dida hin mga ngaran o titulo hin seksyon",
        "tog-watchcreations": "Igdugang in mga pakli nga akon ginhimo ngan mga paypay nga akon ginkarga ngadto han akon angay timan-an",
        "summary-preview": "Pahiuna nga pagawas han dalikyat nga pulong:",
        "subject-preview": "Pahiuna nga pagawas hit himangrawan:",
        "blockedtitle": "Ginpugngan ini nga gumaramit",
-       "blockedtext": "'''An imo agnay-gumaramit o IP address in ginpugngan.'''\n\nAn pagpugong in ginhimo ni $1.\nAn rason nga ginhatag in ''$2''.\n\n* Pagtikang han pagpugong: $8\n* Paghuman han pagpugong: $6\n* Ginpupugngan: $7\n\nPuydi nimo bilngon hi $1 o iba liwat nga [[{{MediaWiki:Grouppage-sysop}}|magdudumara]] para makipaghimangraw hiunong hini nga pagpugong.\nDiri nimo magagamit an \"ig-email ini nga gumaramit\" nga feature antes may-ada balido nga email address nga nakabutang ha imo  [[Special:Preferences|mga preperensya han akawnt]] ngan waray ka pugngi paggamit hini.\nAn imo IP address yana in $3, ngan an imo pagpugong nga ID in #$5.  Alayon la paglakip han ngatanan nga aada ha igbaw nga mga detalye ha bisan ano nga mga pakiana nga karuyag mo buhaton.",
+       "blockedtext": "'''An imo username o IP address in ginpugngan.'''\n\nAn pagpugong ginhimo ni $1.\nAn rason nga ginhatag kay tungod hin ''$2''.\n\n* Pagtikang han pagpugong: $8\n* Mahuhuman an pagpugong: $6\n* An pupugngan: $7\n\nPuydi nimo bilngon hi $1 o iba nga [[{{MediaWiki:Grouppage-sysop}}|magdudumara]] para makipaghimangraw hiunong hini nga pagpugong.\nDiri nimo magagamit an \"{{int:emailuser}}\" nga feature antes may-ada valid nga email address nga nakabutang ha imo  [[Special:Preferences|account preferences]] ngan waray ka pugngi paggamit hini.\nAn imo IP address yana in $3, ngan an imo block ID amo in #$5.  Alayon la paglakip han ngatanan nga aada ha igbaw nga mga detalye kun mamamakyana ka.",
        "autoblockedtext": "An imo IP address in automatiko nga ginpugngan mahitungod nga ini in gingamit hin iba nga gumaramit, nga ginpugngan ni $1.\n\nAn rason nga ginhatag in ''$2''.\n\n* Pagtikang han pagpugong: $8\n* Paghuman han pagpugong: $6\n* Ginpupugngan: $7\n\nPuydi nimo bilngon hi $1 o iba liwat nga [[{{MediaWiki:Grouppage-sysop}}|magdudumara]] para makipaghimangraw hiunong hini nga pagpugong.\n\nGinpapasabot ka nga diri nimo magagamitan an \"ig-email ini nga gumaramit\" nga feature antes may-ada nimo balido nga email address nga nakarehistro ha imo  [[Special:Preferences|mga preperensya han gumaramit]] ngan waray ka pugngi hit paggamit hini.\n\nAn imo IP address yana in $3, ngan an imo pagpugong nga ID in #$5.  Alayon la paglakip han ngatanan nga aada ha igbaw nga mga detalye ha bisan ano nga mga pakiana nga karuyag mo buhaton.",
        "blockednoreason": "waray katadungan nga ginhatag",
        "whitelistedittext": "Kinahanglan mo mag-$1 para makaliwat han mga pakli.",
        "filehist-filesize": "Kadako han fayl",
        "filehist-comment": "Komento",
        "imagelinks": "Mga gamit hin paypay",
-       "linkstoimage": "An nasunod nga {{PLURAL:$1|pakli nasumpay|$1 mga pakli nasumpay}} hini nga paypay:",
-       "linkstoimage-more": "Labaw hin $1 {{PLURAL:$1|nga pakli násúmpay|nga mga pakli násúmpay}} ngadâ hini nga paypay là.\nAn nasunód nga taramdan nagpapakita han {{PLURAL:$1|syahan nga pakli nga násúmpay|syahan nga $1 nga pakli nga násúmpay}} ngadâ hini nga paypay là.\nIn [[Special:WhatLinksHere/$2|bug-os nga taramdan]] áadâ.$2",
-       "nolinkstoimage": "Waray mga pakli nga nasumpay hini nga fayl.",
+       "linkstoimage": "An masunod nga {{PLURAL:$1|ka pakli nagamit|$1 ka mga pakli nagamit}} hini nga file:",
+       "linkstoimage-more": "Labaw hin $1 {{PLURAL:$1|ka pakli nagamit|ka mga pakli nagamit}} hinin nga file.\nAn masunód nga taramdan nagpapakita han {{PLURAL:$1|syahan nga pakli|nauuna nga $1 ka mga pakli}} nga nagamit la hinin nga file.\nMayda inin [[Special:WhatLinksHere/$2|bug-os nga listahan]].",
+       "nolinkstoimage": "Waray pakli nga nagamit hinin nga file.",
        "linkstoimage-redirect": "$1 (redirecta an paypay) $2",
        "sharedupload": "Ini nga fayl tikang han $1 ngan puyde magamit ha iba nga mga proyekto.",
        "sharedupload-desc-there": "Ini nga fayl tikang han $1 ngan puyde magamit ha iba nga mga proyekto.\nAlayon pagkita han [$2 nga pakli hin pagpahayag mahitungod hini nga fayl] para hin dugang nga kasayuran.",
        "htmlform-reset": "Igbalik an mga pinamalyuan",
        "htmlform-selectorother-other": "iba",
        "logentry-delete-delete": "Hi $1 {{GENDER:$2|ginpara}} an pakli nga $3",
+       "logentry-delete-restore": "Hi $1 {{GENDER:$2|ginpabalik}} an pakli nga $3 ($4)",
        "logentry-delete-revision": "$1 {{GENDER:$2|ginbalyo-an}} an pagkakita hin {{PLURAL:$5|usa nga pagliwat|$5 nga mga pagliwat}} dida han pakli $3: $4",
        "revdelete-content-hid": "sulod nakatago",
        "revdelete-summary-hid": "An halipotay nga masisiring hiton pagliwat in nakatago",
index f9dc81b..159e614 100644 (file)
@@ -20,7 +20,6 @@
        "tog-extendwatchlist": "Yatalal limu toppte bi ngir muy wone bépp coppite, déet yu mujj yi rekk",
        "tog-usenewrc": "Jëfandikool coppite yu mujj yees gënal (laaj na JavaScript)",
        "tog-numberheadings": "Koj yi jox lim seen bopp",
-       "tog-showtoolbar": "Wone bànqaasu njëlu coppite bi (JavaScript)",
        "tog-editondblclick": "Cuq cuqaatal ngir soppi aw xët (JavaScript)",
        "tog-editsectiononrightclick": "Soppi ab xaaj cib cuqub ndeyjoor ci kojam  (JavaScript)",
        "tog-watchcreations": "Yokk ci sama limu toppte xët yi may sos",
index 2047dbf..b5875e5 100644 (file)
@@ -34,7 +34,6 @@
        "tog-extendwatchlist": "扩展关注表来显示所有改动,弗光是最近个",
        "tog-usenewrc": "使用折叠版个近段辰光个改动搭关注表",
        "tog-numberheadings": "標題自動編號",
-       "tog-showtoolbar": "显示编辑工具条",
        "tog-editondblclick": "双击编辑页面",
        "tog-editsectiononrightclick": "右击段落标题编辑段落",
        "tog-watchcreations": "拿我建个页面搭我传个文件加到我个关注表里去",
index 5709fc5..fa49d4f 100644 (file)
@@ -15,7 +15,6 @@
        "tog-extendwatchlist": "Һанц отхн биш хамг ясврта өргн оврлң",
        "tog-usenewrc": "Ясрулсн шидрә сольлһна сеткүл олзлх (JavaScript кергтә)",
        "tog-numberheadings": "Эврәр һарцг тойглх",
-       "tog-showtoolbar": "Ясврин зевсг үзүлх",
        "tog-editondblclick": "Давхр шавдлһар халх ясх",
        "tog-editsectiononrightclick": "Һарцг барун шавдсар салвр чиклх",
        "tog-watchcreations": "Мини бүтәсн халхс болн орулсн боомгуд оврлңд немх",
index 0dd1dcf..c891977 100644 (file)
@@ -29,7 +29,6 @@
        "tog-extendwatchlist": "გოფაჩი ოთოჸუჯე ერკებული არძო თირაფეფიშ ოძირაფალო, ამარდეიან თირაფეფიშ მეკოროცხილო",
        "tog-usenewrc": "ბოლო ცვლილებების და კონტროლის სიის ცვლილებების დაჯგუფება",
        "tog-numberheadings": "ავტომატურო დონომერე დუდჯოხოეფი",
-       "tog-showtoolbar": "რედაქტირაფაშ ხეჭკუდეფიშ ძირაფა",
        "tog-editondblclick": "ხასჷლეფიშ რედაქტირაფა ჟირმანგი გეწკანტაფათ",
        "tog-editsectiononrightclick": "ჩართი სექციაშ რედაქტირაფა სექციაშ ჯოხოშა მარძგვან გეწკანტაფათ",
        "tog-watchcreations": "ქიგუძინი ჩქიმ კონტროლიშ ერკბულს ჩქიმ დუნარცხუა ხასჷლეფი დო ეხარგელი ფაილეფი",
index 4d21f32..85abd85 100644 (file)
@@ -30,7 +30,6 @@
        "tog-extendwatchlist": "פארברייטערן די אויפפאסן ליסטע צו צייגן אלע פאסנדע ענדערונגען (אנדערשט: בלויז די לעצטע ענדערונג פון יעדן בלאט)",
        "tog-usenewrc": "גרופירן ענדערונגען לויטן בלאט אין \"לעצטע ענדערונגען\" און אויפֿפאסן ליסטע",
        "tog-numberheadings": "נומערירן קעפּלעך אויטאָמאַטיש",
-       "tog-showtoolbar": "ווײַזן רעדאקטירן געצייג-שטאנג",
        "tog-editondblclick": "רעדאַקטירן בלעטער דורך טאָפּל־קליק",
        "tog-editsectiononrightclick": "באמעגלעכן אפטייל רעדאקטירן דורכן רעכטס־קליקן אויף אפטייל קעפלעך",
        "tog-watchcreations": "צולייגן בלעטער וואס איך באשאף און טעקעס וואס איך לאד ארויף צו מיין אכטונג ליסטע",
index 7ad682b..cda22a2 100644 (file)
@@ -21,7 +21,6 @@
        "tog-extendwatchlist": "Ìfẹ̀ àmójútó láti ṣ'àfihàn gbogbo àtúnṣe, kìí ṣe tuntun nìkan",
        "tog-usenewrc": "Ìtò àwọn àtúnṣe gẹ́gẹ́bí ojúewé nínú àwọn àtúnṣe tuntun àti ìmújútó",
        "tog-numberheadings": "Àwọn àkọlé nọmba-araẹni",
-       "tog-showtoolbar": "Ìfihàn pẹpẹ irinṣẹ́ àtúnṣe",
        "tog-editondblclick": "Ṣ'àtúnṣe àwọn ojúewé ní kíkàn lẹ́mẹjì",
        "tog-editsectiononrightclick": "Ìgbàláyè àtúnṣe abala nípa klííkì ọ̀tún lórí àkọlé abala",
        "tog-watchcreations": "Ṣ'àfikún ojúewé tí mo dá àti àwọn fáìlì tí mo rùsókè mọ́ ìmójútó mi",
index 7f82f70..40d8a42 100644 (file)
        "tog-extendwatchlist": "展開監視清單去顯示全部更改,唔係淨係最新嘅",
        "tog-usenewrc": "最近修改同監視清單顯示群組修改",
        "tog-numberheadings": "標題自動編號",
-       "tog-showtoolbar": "顯示修改工具列",
        "tog-editondblclick": "撳兩下改嘢",
        "tog-editsectiononrightclick": "可以撳右掣更改個別段落",
        "tog-watchcreations": "將我開嘅頁同上傳嘅檔案加入監視清單",
        "tog-watchdefault": "將我修改嘅頁同檔案加入監視清單",
        "tog-watchmoves": "將我移動嘅頁同檔案加入監視清單",
        "tog-watchdeletion": "將我刪除嘅頁同檔案加入監視清單",
-       "tog-watchuploads": "加入我監視清單入面上載嘅檔案",
+       "tog-watchuploads": "加我上載嘅檔去監視清單度",
        "tog-watchrollback": "將我反轉過嘅頁加落監視清單",
        "tog-minordefault": "預設全部編輯做細修改",
        "tog-previewontop": "喺修改欄上邊顯示預覽",
        "listingcontinuesabbrev": "續",
        "index-category": "做咗索引嘅版",
        "noindex-category": "未做索引嘅版",
-       "broken-file-category": "æ\9c\89失æ\95\88æ\96\87件é\8f\88æ\8e¥嘅版",
+       "broken-file-category": "æ\96\87件é\8f\88æ\8e¥å£\9eå\92\97嘅版",
        "about": "關於",
        "article": "內容頁",
        "newwindow": "(響新視窗度打開)",
        "trackingcategories-name": "訊息名",
        "trackingcategories-desc": "分類收錄標準",
        "post-expand-template-inclusion-category-desc": "由於呢篇頁面嘥士喺擴展之前,已經超出咗<code>$wgMaxArticleSize</code>限制,所以好多模都擴展唔到。",
+       "broken-file-category-desc": "呢版有文件鏈接壞咗(即係連去一個唔存在嘅文件)。",
        "trackingcategories-nodesc": "冇解說資料",
        "trackingcategories-disabled": "類停用咗",
        "mailnologin": "冇傳送地址",
index a26730f..3ee0aa8 100644 (file)
@@ -16,7 +16,6 @@
        "tog-extendwatchlist": "Uutebreide volglieste hebruuk'n om aolle wiezigieng'n te bekiek'n, en nie alleêne de laeste",
        "tog-usenewrc": "Uutebreide lèste wiezigiengen-pagina gebruken (JavaScript vereist)",
        "tog-numberheadings": "Koppn automaotisch nummern",
-       "tog-showtoolbar": "Bewerkiengswerkbalke weerheven (JavaScript vereist)",
        "tog-editondblclick": "Dubbelklikkn voe bewerkn (JavaScript vereist)",
        "tog-editsectiononrightclick": "Bewerken van deêlpahina's meulijk maeken mie een rechtermuusklik op een tussenkopje (JavaScript vereist)",
        "tog-watchcreations": "Pahina's die ak anmik automaotisch volhen",
index 7c64fcf..403ebbc 100644 (file)
@@ -19,7 +19,6 @@
        "tog-extendwatchlist": "ⵙⵙⵉⵔⵉⵡ ⵜⴰⵍⴳⴰⵎⵜ ⵏ ⵓⴹⴼⴼⵓⵔ ⴰⴼⴰⴷ ⴰⴷ ⵜⵙⴽⵏⴷ ⵉⵙⵏⵉⴼⵉⵍⵏ ⴰⴽⴽ ⵓⵔ ⴷ ⵖⴰⵙ ⵉⵎⴳⴳⵓⵔⴰ",
        "tog-usenewrc": "ⵙⵎⵓⵏ ⵉⵙⵏⴼⵍⵏ ⴷ ⵜⴰⵙⵏⴰ ⵏⵙⵏ ⴳ ⵉⵙⵏⴼⵍⵏ ⵉⵎⴳⴳⵓⵔⴰ ⴷ ⵜⴰⵍⴳⴰⵎⵜ ⵏ ⵓⴹⴼⵓⵔ",
        "tog-numberheadings": "ⴰⵙⵓⵟⵟⵏ ⴰⵡⵓⵔⵎⴰⵏ ⵏ ⵉⵣⵡⵍⴰⵏ",
-       "tog-showtoolbar": "ⵙⴽⵏ ⵜⴰⵙⵙⴼⵉⴼⵜ ⵏ ⵉⵎⴰⵙⵙⵏ ⵏ ⵓⵥⵔⴰⴳ",
        "tog-editondblclick": "ⵙⵏⴼⵍ ⵜⴰⵙⵏⵉⵡⵉⵏ ⵙ ⵙⵉⵏ ⵉⴽⵍⵉⴽⵉⵜⵏ",
        "tog-editsectiononrightclick": "ⵙⵙⵔⵎⴷ ⴰⵙⵏⴼⵍ ⵏ ⵜⵣⵓⵏⵉⵡⵉⵏ ⵙ ⵢⴰⵏ ⵓⴽⵍⵉⴽⵉ ⵖⴼ ⵉⵣⵡⵍⴰⵏ ⵏ ⵜⵣⵓⵏⵉ",
        "tog-watchcreations": "ⵔⵏⵓ ⵖⵔ ⵜⴳⵍⴰⵎⵜ ⵉⵏⵓ ⵏ ⵓⴹⴼⴼⵓⵔ ⵜⴰⵙⵏⵉⵡⵉⵏ ⵏⵏⴰ ⵙⴽⵔⵖ ⴷ ⵉⴼⵓⵢⵍⴰ ⵏⵏⴰ ⴷ ⵙⴽⵛⵎⵖ",
index c9ecdf1..342fa18 100644 (file)
        "tog-extendwatchlist": "扩展监视列表以显示所有更改,而不仅是最近的更改",
        "tog-usenewrc": "按页面合并最近更改和监视列表中的更改",
        "tog-numberheadings": "自动将标题编号",
-       "tog-showtoolbar": "显示编辑工具栏",
        "tog-editondblclick": "双击编辑页面",
        "tog-editsectiononrightclick": "启用右击段落标题编辑段落",
        "tog-watchcreations": "添加我创建的页面和我上传的文件至我的监视列表",
index 2f74004..97877ab 100644 (file)
        "tog-extendwatchlist": "展開監視清單顯示包含最近以外的所有變更",
        "tog-usenewrc": "依近期變更與監視清單的頁面分類顯示變更",
        "tog-numberheadings": "標題自動編號",
-       "tog-showtoolbar": "顯示編輯工具列",
        "tog-editondblclick": "點選兩次以編輯頁面",
        "tog-editsectiononrightclick": "開啟滑鼠右鍵點選章節標題編輯",
        "tog-watchcreations": "將我建立的頁面和上傳的檔案加入監視清單",
        "subject-preview": "預覽主旨:",
        "previewerrortext": "嘗試預覽您的變更時發生錯誤。",
        "blockedtitle": "使用者已被封鎖",
+       "blocked-email-user": "<strong>您的使用者名稱已被禁止發送電子郵件,但您仍可在此 wiki 上編輯其它頁面。</strong>您可以在[[Special:MyContributions|帳號貢獻]]檢視完整的封鎖詳情。\n\n封鎖是由$1所執行。\n\n原因出自<em>$2</em>。\n\n*封鎖開始時間:$8\n*封鎖結束時間:$6\n*防止行為:$7\n*封鎖 ID #$5",
+       "blockedtext-partial": "<strong>您的使用者名稱或 IP 地址已被禁止更改此頁面,但您仍可在此 wiki 上編輯其它頁面。</strong>您可以在[[Special:MyContributions|帳號貢獻]]檢視完整的封鎖詳情。\n\n封鎖是由$1所執行。\n\n原因出自<em>$2</em>。\n\n*封鎖開始時間:$8\n*封鎖結束時間:$6\n*防止行為:$7\n*封鎖 ID #$5",
        "blockedtext": "<strong>您的使用者名稱或 IP 位址已被封鎖。</strong>\n\n您被 $1 封鎖,\n原因爲 <em>$2</em>。\n\n* 封鎖開始時間:$8\n* 封鎖結束時間:$6\n* 相關封鎖對象:$7\n\n您可以聯絡 $1 或其他的 [[{{MediaWiki:Grouppage-sysop}}|管理員]] 討論封鎖的相關問題。\n若您已在 [[Special:Preferences|偏好設定]] 中設定了一個有效的電子郵件地址,且尚未被封鎖郵件功能,則您可透過 \"{{int:emailuser}}\" 的功能來聯絡相關管理員。\n您目前的 IP 位址是 $3,此次封鎖的 ID 為 #$5。\n請您在詢問時附註以上詳細訊息。",
        "autoblockedtext": "因先前的另一位使用者被 $1 封鎖,您的 IP 位址已被自動封鎖。\n原因是:\n\n:<em>$2</em>\n\n* 封鎖開始時間:$8\n* 封鎖結束時間:$6\n* 相關封鎖對象:$7\n\n您可以聯絡 $1 或其他的 [[{{MediaWiki:Grouppage-sysop}}|管理員]] 討論封鎖的相關問題。\n若您已在 [[Special:Preferences|偏好設定]] 中設定了一個有效的電子郵件地址,且尚未被封鎖郵件功能,則您可透過 \"{{int:emailuser}}\" 的功能來聯絡相關管理員。\n您目前的 IP 位址是 $3,此次封鎖的 ID 為 #$5。\n請您在詢問時附註以上詳細資料。",
        "systemblockedtext": "您的使用者名稱或 IP 位址已被 MediaWiki 自動封鎖,原因如下:\n\n:<em>$2</em>\n\n* 封鎖開始時間:$8\n* 封鎖結束時間:$6\n* 被封鎖的使用者:$7\n\n您目前的 IP 位址為 $3。\n請在做詢問時附上以上資訊。",
        "prefixindex": "按詞頭查詢頁面",
        "prefixindex-namespace": "按詞頭查詢頁面 ($1 命名空間)",
        "prefixindex-submit": "顯示",
-       "prefixindex-strip": "於清單中省略詞頭",
+       "prefixindex-strip": "在結果隱藏字首",
        "shortpages": "過短的頁面",
        "longpages": "過長的頁面",
        "deadendpages": "無連結頁面",
        "logeventslist-patrol-log": "巡查日誌",
        "logeventslist-tag-log": "標籤日誌",
        "all-logs-page": "所有公開日誌",
-       "alllogstext": "合併顯示所有 {{SITENAME}} 中所有類型的日誌。\n您可以點選下拉式選單選擇日誌的類型,指定使用者名稱 (區分大小寫) 或影響的頁面 (區分大小寫)。",
+       "alllogstext": "合併顯示所有 {{SITENAME}} 中所有類型的日誌。您可以點選下拉式選單選擇日誌的類型,指定使用者名稱(區分大小寫)或影響的頁面(區分大小寫)。",
        "logempty": "無符合條件的日誌。",
        "log-title-wildcard": "搜尋以此欄位文字為字首的標題",
        "showhideselectedlogentries": "顯示/隱藏已選擇的日誌項目",
        "confirmdeletetext": "您正要刪除一個頁面或圖片以及其所有歷史。請確定您要進行此操作,並了解其後果,同時您的行為符合[[{{MediaWiki:Policy-url}}|方針]]。",
        "actioncomplete": "操作完成",
        "actionfailed": "操作失敗",
-       "deletedtext": "已刪除 \"$1\"。\n請參考 $2 檢視最近的刪除記錄。",
+       "deletedtext": "已刪除「$1」。請參考$2檢視最近的刪除記錄。",
        "dellogpage": "刪除日誌",
        "dellogpagetext": "以下為最近刪除記錄的清單。",
        "deletionlog": "刪除日誌",
        "ipb-disableusertalk": "禁止使用者在封鎖期間編輯自己的對話頁面",
        "ipb-change-block": "使用現有設定重新封鎖使用者",
        "ipb-confirm": "確認封鎖",
+       "ipb-sitewide": "站台範圍",
+       "ipb-partial": "部分",
+       "ipb-type-label": "類型",
+       "ipb-pages-label": "頁面",
        "badipaddress": "無效的 IP 位址",
        "blockipsuccesssub": "封鎖成功",
        "blockipsuccesstext": "[[Special:Contributions/$1|$1]] 已經被封鎖。<br />\n請參考 [[Special:BlockList|封鎖清單]] 以檢查目前的封鎖。",
        "createaccountblock": "帳號建立已停用",
        "emailblock": "停用電子郵件",
        "blocklist-nousertalk": "無法編輯自己的對話頁面",
+       "blocklist-editing": "編輯",
+       "blocklist-editing-sitewide": "編輯(站台範圍)",
        "ipblocklist-empty": "封鎖清單為空。",
        "ipblocklist-no-results": "請求的 IP 位址或使用者名稱尚未被封鎖。",
        "blocklink": "封鎖",
        "logentry-block-block": "$1{{GENDER:$2|已封鎖}}{{GENDER:$4|$3}}期限為$5$6",
        "logentry-block-unblock": "$1 {{GENDER:$2|已解除封鎖}} {{GENDER:$4|$3}}",
        "logentry-block-reblock": "$1{{GENDER:$2|已變更}}{{GENDER:$4|$3}}的封鎖設定期限為$5$6",
+       "logentry-partialblock-block": "$1{{GENDER:$2|已封鎖}}{{GENDER:$4|$3}}對於{{PLURAL:$8||頁面}}$7的編輯至期限$5 $6",
+       "logentry-partialblock-reblock": "$1{{GENDER:$2|已變更}}{{GENDER:$4|$3}}禁止編輯{{PLURAL:$8||頁面}}$7的封鎖設定為期限時間至$5 $6",
+       "logentry-non-editing-block-block": "$1{{GENDER:$2|已封鎖}}{{GENDER:$4|$3}}的編輯操作至其期限$5 $6",
+       "logentry-non-editing-block-reblock": "$1{{GENDER:$2|已變更}}{{GENDER:$4|$3}}禁止編輯操作的封鎖設定為期限至$5 $6",
        "logentry-suppress-block": "$1 {{GENDER:$2|已封鎖}} {{GENDER:$4|$3}} 期限為 $5 $6",
        "logentry-suppress-reblock": "$1 {{GENDER:$2|已變更}} {{GENDER:$4|$3}} 的封鎖設定期限為 $5 $6",
        "logentry-import-upload": "$1 已由檔案上傳{{GENDER:$2|匯入}} $3",
        "mw-widgets-titleinput-description-redirect": "重新導向至 $1",
        "mw-widgets-categoryselector-add-category-placeholder": "加入分類...",
        "mw-widgets-usersmultiselect-placeholder": "加入更多...",
+       "mw-widgets-titlesmultiselect-placeholder": "加入更多...",
        "date-range-from": "開始日期:",
        "date-range-to": "結束日期:",
        "sessionmanager-tie": "無法合併多個請求認證類型:$1。",
        "passwordpolicies-policy-passwordcannotmatchblacklist": "密碼不可以同於被列入黑名單的特定密碼",
        "passwordpolicies-policy-maximalpasswordlength": "密碼必須小於 $1 個{{PLURAL:$1|字元|字元}}長度",
        "passwordpolicies-policy-passwordcannotbepopular": "密碼不可以是{{PLURAL:$1|常用密碼內容|在清單中的編號 $1 常用密碼}}",
-       "easydeflate-invaliddeflate": "提供的內容未被正常的壓縮"
+       "easydeflate-invaliddeflate": "提供的內容未被正常的壓縮",
+       "unprotected-js": "基於安全因素,JavaScript 不能從未保護的頁面來載入。建立 JavaScript 請僅在 MediaWiki 的:命名空間或使用者子頁面"
 }
index 60be21c..3a3529a 100644 (file)
@@ -439,11 +439,3 @@ $specialPageAliases = [
  * Arabic trails too.
  */
 $linkTrail = '/^([a-zء-ي]+)(.*)$/sDu';
-
-$imageFiles = [
-       'button-bold'     => 'ar/button_bold.png',
-       'button-italic'   => 'ar/button_italic.png',
-       'button-link'     => 'ar/button_link.png',
-       'button-headline' => 'ar/button_headline.png',
-       'button-nowiki'   => 'ar/button_nowiki.png',
-];
index 00295fe..21bd60c 100644 (file)
@@ -239,9 +239,3 @@ $separatorTransformTable = [
 $minimumGroupingDigits = 2;
 
 $linkTrail = '/^([абвгґджзеёжзійклмнопрстуўфхцчшыьэюяćčłńśšŭźža-z]+)(.*)$/sDu';
-
-$imageFiles = [
-       'button-bold'     => 'be-tarask/button_bold.png',
-       'button-italic'   => 'be-tarask/button_italic.png',
-       'button-link'     => 'be-tarask/button_link.png',
-];
index 5227eba..d3167cc 100644 (file)
@@ -352,8 +352,3 @@ $bookstoreList = [
 
 $separatorTransformTable = [ ',' => '.', '.' => ',' ];
 $linkTrail = '/^([äöüßa-z]+)(.*)$/sDu';
-
-$imageFiles = [
-       'button-bold'     => 'de/button_bold.png',
-       'button-italic'   => 'de/button_italic.png',
-];
index 7a7370f..4c078a6 100644 (file)
@@ -531,23 +531,6 @@ $linkTrail = '/^([a-z]+)(.*)$/sD';
  */
 $linkPrefixCharset = 'a-zA-Z\\x{80}-\\x{10ffff}';
 
-/**
- * List of filenames for some ui images that can be overridden per language
- * basis if needed.
- */
-$imageFiles = [
-       'button-bold'     => 'en/button_bold.png',
-       'button-italic'   => 'en/button_italic.png',
-       'button-link'     => 'en/button_link.png',
-       'button-extlink'  => 'en/button_extlink.png',
-       'button-headline' => 'en/button_headline.png',
-       'button-image'    => 'en/button_image.png',
-       'button-media'    => 'en/button_media.png',
-       'button-nowiki'   => 'en/button_nowiki.png',
-       'button-sig'      => 'en/button_sig.png',
-       'button-hr'       => 'en/button_hr.png',
-];
-
 /**
  * A list of messages to preload for each request.
  * Here we add messages that are needed for a typical anonymous parser cache hit.
index bda468c..a78233f 100644 (file)
@@ -412,11 +412,3 @@ $dateFormats = [
 # Harakat are intentionally not included in the linkTrail. Their addition should
 # take place after enough tests.
 $linkTrail = "/^([ابپتثجچحخدذرزژسشصضطظعغفقکگلمنوهیآأئؤة‌]+)(.*)$/sDu";
-
-$imageFiles = [
-       'button-bold'     => 'fa/button_bold.png',
-       'button-italic'   => 'fa/button_italic.png',
-       'button-link'     => 'fa/button_link.png',
-       'button-headline' => 'fa/button_headline.png',
-       'button-nowiki'   => 'fa/button_nowiki.png',
-];
index c96c94d..0687a42 100644 (file)
@@ -201,7 +201,3 @@ $magicWords = [
        'language'                  => [ '0', '#SHPROOCH:', '#SPROCH:', '#SPRACHE:', '#LANGUAGE:' ],
        'hiddencat'                 => [ '1', '__VERSHTOCHE_SAACHJRUPP__', '__VERSTECKTE_KATEGORIE__', '__WARTUNGSKATEGORIE__', '__HIDDENCAT__' ],
 ];
-
-$imageFiles = [
-       'button-italic'   => 'ksh/button_italic.png',
-];
index b513648..fbd8096 100644 (file)
@@ -425,10 +425,4 @@ $minimumGroupingDigits = 2;
 $fallback8bitEncoding = 'windows-1251';
 $linkPrefixExtension = false;
 
-$imageFiles = [
-       'button-bold'   => 'ru/button_bold.png',
-       'button-italic' => 'ru/button_italic.png',
-       'button-link'   => 'ru/button_link.png',
-];
-
 $linkTrail = '/^([a-zабвгдеёжзийклмнопрстуфхцчшщъыьэюя]+)(.*)$/sDu';
index 6219476..c786ce8 100644 (file)
@@ -1699,13 +1699,9 @@ abstract class LoggedUpdateMaintenance extends Maintenance {
                        return false;
                }
 
-               if ( $db->insert( 'updatelog', [ 'ul_key' => $key ], __METHOD__, 'IGNORE' ) ) {
-                       return true;
-               } else {
-                       $this->output( $this->updatelogFailedMessage() . "\n" );
+               $db->insert( 'updatelog', [ 'ul_key' => $key ], __METHOD__, 'IGNORE' );
 
-                       return false;
-               }
+               return true;
        }
 
        /**
@@ -1718,16 +1714,6 @@ abstract class LoggedUpdateMaintenance extends Maintenance {
                return "Update '{$key}' already logged as completed.";
        }
 
-       /**
-        * Message to show that the update log was unable to log the completion of this update
-        * @return string
-        */
-       protected function updatelogFailedMessage() {
-               $key = $this->getUpdateKey();
-
-               return "Unable to log update '{$key}' as completed.";
-       }
-
        /**
         * Do the actual work. All child classes will need to implement this.
         * Return true to log the update as done or false (usually on failure).
index a0177b1..0345ad6 100644 (file)
@@ -3697,7 +3697,6 @@ showredirs
 showreviewed
 showsizediff
 showtoc
-showtoolbar
 showunreviewed
 shtml
 si
index 7ff972e..54c1d38 100644 (file)
                                        "mw.visibleTimeout"
                                ]
                        },
-                       {
-                               "name": "Actions",
-                               "classes": ["mw.toolbar"]
-                       },
                        {
                                "name": "API",
                                "classes": ["mw.Api*", "mw.ForeignApi*"]
index a105920..210e907 100644 (file)
@@ -247,11 +247,7 @@ class GenerateCollationData extends Maintenance {
                        if ( $weight !== $prevWeight ) {
                                $this->groups[$prevWeight] = $group;
                                $prevWeight = $weight;
-                               if ( isset( $this->groups[$weight] ) ) {
-                                       $group = $this->groups[$weight];
-                               } else {
-                                       $group = [];
-                               }
+                               $group = $this->groups[$weight] ?? [];
                        }
                        $group[] = $cp;
                }
index f2a0007..f07bc55 100644 (file)
@@ -133,20 +133,14 @@ TEXT
                        usleep( $throttle * 1000 );
                }
 
-               if ( $dbw->insert(
+               $dbw->insert(
                        'updatelog',
                        [ 'ul_key' => 'populate category' ],
                        __METHOD__,
                        'IGNORE'
-               ) ) {
-                       $this->output( "Category population complete.\n" );
-
-                       return true;
-               } else {
-                       $this->output( "Could not insert category population row.\n" );
+               );
 
-                       return false;
-               }
+               return true;
        }
 }
 
index d6b4b79..771d19b 100644 (file)
@@ -65,6 +65,7 @@ class ResetUserEmail extends Maintenance {
                        // Kick whomever is currently controlling the account off
                        $user->setPassword( PasswordFactory::generateRandomPasswordString( 128 ) );
                }
+               $this->output( "Done!\n" );
        }
 }
 
index 0dfb834..a95789d 100644 (file)
@@ -29,11 +29,7 @@ if ( !defined( 'MEDIAWIKI' ) ) {
 
        $cs = new CheckStorage;
        $fix = isset( $options['fix'] );
-       if ( isset( $args[0] ) ) {
-               $xml = $args[0];
-       } else {
-               $xml = false;
-       }
+       $xml = $args[0] ?? false;
        $cs->check( $fix, $xml );
 }
 
index 6bc2f98..61f1177 100644 (file)
@@ -255,11 +255,7 @@ class FixT22757 extends Maintenance {
 
        function findTextIdInPage( $pageId, $textId ) {
                $ids = $this->getRevTextMap( $pageId );
-               if ( !isset( $ids[$textId] ) ) {
-                       return null;
-               } else {
-                       return $ids[$textId];
-               }
+               return $ids[$textId] ?? null;
        }
 
        function getRevTextMap( $pageId ) {
index 639ef58..0b95ba5 100644 (file)
@@ -38,11 +38,7 @@ if ( !defined( 'MEDIAWIKI' ) ) {
        $cluster = $args[0];
        $dbw = wfGetDB( DB_MASTER );
 
-       if ( isset( $options['e'] ) ) {
-               $maxID = $options['e'];
-       } else {
-               $maxID = $dbw->selectField( 'text', 'MAX(old_id)', '', $fname );
-       }
+       $maxID = $options['e'] ?? $dbw->selectField( 'text', 'MAX(old_id)', '', $fname );
        $minID = $options['s'] ?? 1;
 
        moveToExternal( $cluster, $maxID, $minID );
index 0670454..12b33b4 100644 (file)
@@ -304,11 +304,7 @@ TEXT
                        if ( $raw !== '' ) {
                                $raw .= ', ';
                        }
-                       if ( !isset( $this->sizeHistogram[$i] ) ) {
-                               $val = 0;
-                       } else {
-                               $val = $this->sizeHistogram[$i];
-                       }
+                       $val = $this->sizeHistogram[$i] ?? 0;
                        for ( $coarseIndex = 0; $coarseIndex < $numBins - 1; $coarseIndex++ ) {
                                if ( $coarseBoundaries[$coarseIndex] > $i ) {
                                        $coarseHistogram[$coarseIndex] += $val;
@@ -327,11 +323,7 @@ TEXT
                $scale = 60 / $maxBinVal;
                $prevBoundary = 0;
                for ( $coarseIndex = 0; $coarseIndex < $numBins; $coarseIndex++ ) {
-                       if ( !isset( $coarseHistogram[$coarseIndex] ) ) {
-                               $val = 0;
-                       } else {
-                               $val = $coarseHistogram[$coarseIndex];
-                       }
+                       $val = $coarseHistogram[$coarseIndex] ?? 0;
                        $boundary = $coarseBoundaries[$coarseIndex];
                        $this->output( sprintf( "%-10s %-10d |%s\n",
                                $prevBoundary . '-' . ( $boundary - 1 ) . ': ',
index c65f952..d000972 100644 (file)
@@ -338,11 +338,7 @@ $res = $dbr->select(
        [ 'ORDER BY' => 'pf_name ASC' ]
 );
 
-if ( isset( $_REQUEST['filter'] ) ) {
-       $filter = $_REQUEST['filter'];
-} else {
-       $filter = '';
-}
+$filter = $_REQUEST['filter'] ?? '';
 
 ?>
 <form method="get" action="profileinfo.php">
index 9603830..86315fc 100644 (file)
@@ -1394,12 +1394,6 @@ return [
                'dependencies' => 'jquery.cookie',
                'targets' => [ 'desktop', 'mobile' ],
        ],
-       'mediawiki.toolbar' => [
-               'class' => ResourceLoaderEditToolbarModule::class,
-               'scripts' => 'resources/src/mediawiki.toolbar/toolbar.js',
-               'styles' => 'resources/src/mediawiki.toolbar/toolbar.less',
-               'dependencies' => 'jquery.textSelection',
-       ],
        'mediawiki.experiments' => [
                'scripts' => 'resources/src/mediawiki.experiments.js',
                'targets' => [ 'desktop', 'mobile' ],
@@ -2067,6 +2061,7 @@ return [
        ],
        'mediawiki.special.block' => [
                'scripts' => 'resources/src/mediawiki.special.block.js',
+               'styles' => 'resources/src/mediawiki.special.block.less',
                'dependencies' => [
                        'oojs-ui-core',
                        'oojs-ui.styles.icons-editing-core',
@@ -2077,6 +2072,7 @@ return [
                        'mediawiki.htmlform',
                        'moment',
                ],
+               'targets' => [ 'desktop', 'mobile' ],
        ],
        'mediawiki.special.changecredentials.js' => [
                'scripts' => 'resources/src/mediawiki.special.changecredentials.js',
@@ -2706,6 +2702,18 @@ return [
                ],
                'targets' => [ 'desktop', 'mobile' ],
        ],
+       'mediawiki.widgets.TitlesMultiselectWidget' => [
+               'scripts' => [
+                       'resources/src/mediawiki.widgets/mw.widgets.TitlesMultiselectWidget.js',
+               ],
+               'dependencies' => [
+                       'mediawiki.api',
+                       'oojs-ui-widgets',
+                       // FIXME: Needs TitleInputWidget only
+                       'mediawiki.widgets',
+               ],
+               'targets' => [ 'desktop', 'mobile' ],
+       ],
        'mediawiki.widgets.SearchInputWidget' => [
                'scripts' => [
                        'resources/src/mediawiki.widgets/mw.widgets.SearchInputWidget.js',
index 5820b83..8a44dcc 100644 (file)
        mw.log.deprecate( window, '$j', $, 'Use $ or jQuery instead.' );
 
        // Process callbacks for Grade A that require modules.
-       // Plain ones were already processed by startup.js.
        queue = window.RLQ;
-       // Redefine publicly to capture any late arrivals
+       // Replace temporary RLQ implementation from startup.js with the
+       // final implementation that also processes callbacks that can
+       // require modules. It must also support late arrivals of
+       // plain callbacks. (T208093)
        window.RLQ = {
                push: function ( entry ) {
-                       mw.loader.using( entry[ 0 ], entry[ 1 ] );
+                       if ( typeof entry === 'function' ) {
+                               entry();
+                       } else {
+                               mw.loader.using( entry[ 0 ], entry[ 1 ] );
+                       }
                }
        };
        while ( queue[ 0 ] ) {
index d1fb98b..5b73e7c 100644 (file)
                                }
                        }, this )
                        .next( function () {
-                               var plainMsg, parsedMsg,
+                               var $link,
                                        settings = data.settings;
                                data.contents = data.contents || {};
 
                                this.useragentMandatory = settings.useragentCheckbox.mandatory;
                                this.useragentFieldLayout.toggle( settings.useragentCheckbox.show );
 
-                               // HACK: Setting a link in the messages doesn't work. There is already a report
-                               // about this, and the bug report offers a somewhat hacky work around that
-                               // includes setting a separate message to be parsed.
-                               // We want to make sure the user can configure both the title of the page and
-                               // a separate url, so this must be allowed to parse correctly.
-                               // See https://phabricator.wikimedia.org/T49395#490610
-                               mw.messages.set( {
-                                       'feedback-dialog-temporary-message':
-                                               '<a href="' + this.feedbackPageUrl + '" target="_blank">' + this.feedbackPageName + '</a>'
-                               } );
-                               plainMsg = mw.message( 'feedback-dialog-temporary-message' ).plain();
-                               mw.messages.set( { 'feedback-dialog-temporary-message-parsed': plainMsg } );
-                               parsedMsg = mw.message( 'feedback-dialog-temporary-message-parsed' );
+                               $link = $( '<a>' )
+                                       .attr( 'href', this.feedbackPageUrl )
+                                       .attr( 'target', '_blank' )
+                                       .text( this.feedbackPageName );
                                this.feedbackMessageLabel.setLabel(
-                                       // Double-parse
-                                       $( '<span>' )
-                                               .append( mw.message( 'feedback-dialog-intro', parsedMsg ).parse() )
+                                       mw.message( 'feedback-dialog-intro', $link ).parseDom()
                                );
 
                                this.validateFeedbackForm();
index 12ef1ba..082db5c 100644 (file)
        // Replace the default message parser with jqueryMsg
        oldParser = mw.Message.prototype.parser;
        mw.Message.prototype.parser = function () {
-               if ( this.format === 'plain' || !/\{\{|[<>[&]/.test( this.map.get( this.key ) ) ) {
-                       // Fall back to mw.msg's simple parser
+               // Fall back to mw.msg's simple parser where possible
+               if (
+                       // Plain text output always uses the simple parser
+                       this.format === 'plain' ||
+                       (
+                               // jqueryMsg parser is needed for messages containing wikitext
+                               !/\{\{|[<>[&]/.test( this.map.get( this.key ) ) &&
+                               // jqueryMsg parser is needed when jQuery objects or DOM nodes are passed in as parameters
+                               !this.parameters.some( function ( param ) {
+                                       return param instanceof $ || ( param && param.nodeType !== undefined );
+                               } )
+                       )
+               ) {
                        return oldParser.apply( this );
                }
 
index 55be237..7e7821e 100644 (file)
@@ -1,4 +1,4 @@
-// Common Less mixin library for MediaWiki
+// Common LESS mixin library for MediaWiki
 //
 // By default the folder containing this file is included in the LESS import paths,
 // which makes this file importable by all less files via `@import 'mediawiki.mixins';`.
index e90ce96..516a79b 100644 (file)
@@ -9,22 +9,18 @@
                        list-style: none;
                }
        }
-
-       & > div {
-               margin-right: @margin-circle-result;
-       }
 }
 
 // Make more specific for the overrides
 div.mw-rcfilters-ui-highlights {
        body.mw-rcfilters-ui-initialized & {
                display: inline-block;
-               .mw-rcfilters-circle( @size-circle-result, @size-circle-result, 0 );
        }
 
        &-color {
                &-none {
                        display: inline-block;
+                       .mw-rcfilters-circle( @size-circle-result, @size-circle-result, 0 );
 
                        .mw-changeslist-watchedseen & {
                                .mw-rcfilters-ui-changesListWrapperWidget.mw-rcfilters-ui-changesListWrapperWidget-highlighted & {
@@ -48,29 +44,28 @@ div.mw-rcfilters-ui-highlights {
 
                }
 
-       }
-
-       // Watchlist unseen highlighted fixes
-       // Seen (empty circle)
-       // There's no need to correct 'unseen' because that would be
-       // a filled colorful circle, which is the regular rendering
-       .mw-changeslist-watchedseen &-c1 {
-               .mw-rcfilters-circle-color( @highlight-c1, true, @highlight-c1, true );
-       }
+               // Watchlist unseen highlighted fixes
+               // Seen (empty circle)
+               // There's no need to correct 'unseen' because that would be
+               // a filled colorful circle, which is the regular rendering
+               .mw-changeslist-watchedseen &-c1 {
+                       .mw-rcfilters-circle-color( @highlight-c1, true, @highlight-c1, true );
+               }
 
-       .mw-changeslist-watchedseen &-c2 {
-               .mw-rcfilters-circle-color( @highlight-c2, true, @highlight-c2, true );
-       }
+               .mw-changeslist-watchedseen &-c2 {
+                       .mw-rcfilters-circle-color( @highlight-c2, true, @highlight-c2, true );
+               }
 
-       .mw-changeslist-watchedseen &-c3 {
-               .mw-rcfilters-circle-color( @highlight-c3, true, @highlight-c3, true );
-       }
+               .mw-changeslist-watchedseen &-c3 {
+                       .mw-rcfilters-circle-color( @highlight-c3, true, @highlight-c3, true );
+               }
 
-       .mw-changeslist-watchedseen &-c4 {
-               .mw-rcfilters-circle-color( @highlight-c4, true, @highlight-c4, true );
-       }
+               .mw-changeslist-watchedseen &-c4 {
+                       .mw-rcfilters-circle-color( @highlight-c4, true, @highlight-c4, true );
+               }
 
-       .mw-changeslist-watchedseen &-c5 {
-               .mw-rcfilters-circle-color( @highlight-c5, true, @highlight-c5, true );
+               .mw-changeslist-watchedseen &-c5 {
+                       .mw-rcfilters-circle-color( @highlight-c5, true, @highlight-c5, true );
+               }
        }
 }
index 324c900..94306ca 100644 (file)
                        width: 100%;
                }
        }
+}
 
-       &-highlights {
-               display: none;
-               padding: 0 @margin-circle 0 0;
-               text-align: right;
-               // The width is 5 circles times their diameter + individual margin
-               // and then plus the general margin
-               width: ~'calc( ( @{size-circle-result} + @{margin-circle-result} ) * 5 )';
-               // And we want to shift the entire block to the left of the li
-               position: relative;
-               // Negative left margin of width + padding
-               margin-left: ~'calc( ( @{size-circle-result} + @{margin-circle-result} ) * -5 - @{margin-circle} )';
-
-               .mw-rcfilters-ui-changesListWrapperWidget-highlighted & {
-                       display: inline-block;
-               }
+.mw-rcfilters-ui-highlights {
+       display: none;
+       padding: 0 @margin-circle 0 0;
+       // The width is 5 circles times their diameter + individual margin
+       // and then plus the general margin
+       width: ~'calc( ( @{size-circle-result} + @{margin-circle-result} ) * 5 )';
+       // And we want to shift the entire block to the left of the li
+       position: relative;
+       // Negative left margin of width + padding
+       margin-left: ~'calc( ( @{size-circle-result} + @{margin-circle-result} ) * -5 - @{margin-circle} )';
 
-               // This needs to be very specific, since these are
-               // position rules that should apply to all overrides
-               .mw-rcfilters-ui-changesListWrapperWidget .mw-rcfilters-ui-changesListWrapperWidget-highlights > div&-circle {
-                       vertical-align: middle;
-                       .mw-rcfilters-circle( @size-circle-result, @size-circle-result, 0 );
-                       // This is to make the dots appear at the center of the
-                       // text itself; it's a horrendous hack and blame JamesF for it.
-                       margin-top: -2px;
-                       margin-right: @margin-circle-result;
-               }
+       .mw-rcfilters-ui-changesListWrapperWidget-highlighted & {
+               display: inline-block;
+       }
+
+       // This needs to be very specific, since these are
+       // position rules that should apply to all overrides
+       .mw-rcfilters-ui-changesListWrapperWidget & > div {
+               vertical-align: middle;
+               .mw-rcfilters-circle( @size-circle-result, @size-circle-result, 0 );
+               // This is to make the dots appear at the center of the
+               // text itself; it's a horrendous hack and blame JamesF for it.
+               margin-top: -2px;
+               margin-right: @margin-circle-result;
+               float: right;
+       }
+
+       &-color {
+               &-none {
+                       .mw-rcfilters-circle-color( @highlight-none, true );
+                       display: inline-block;
 
-               &-color {
-                       &-none {
-                               .mw-rcfilters-circle-color( @highlight-none, true );
-                               display: inline-block;
-
-                               .mw-rcfilters-highlight-color-c1 &,
-                               .mw-rcfilters-highlight-color-c2 &,
-                               .mw-rcfilters-highlight-color-c3 &,
-                               .mw-rcfilters-highlight-color-c4 &,
-                               .mw-rcfilters-highlight-color-c5 & {
-                                       display: none;
-                               }
+                       .mw-rcfilters-highlight-color-c1 &,
+                       .mw-rcfilters-highlight-color-c2 &,
+                       .mw-rcfilters-highlight-color-c3 &,
+                       .mw-rcfilters-highlight-color-c4 &,
+                       .mw-rcfilters-highlight-color-c5 & {
+                               display: none;
                        }
-                       .result-circle( c1 );
-                       .result-circle( c2 );
-                       .result-circle( c3 );
-                       .result-circle( c4 );
-                       .result-circle( c5 );
                }
+               .result-circle( c1 );
+               .result-circle( c2 );
+               .result-circle( c3 );
+               .result-circle( c4 );
+               .result-circle( c5 );
        }
 }
 
index 07e43c0..ea50841 100644 (file)
@@ -5,6 +5,7 @@
 .mw-rcfilters-ui-filterMenuOptionWidget {
        .mw-rcfilters-ui-filterMenuSectionOptionWidget ~ & {
                padding-left: 12 / @font-size-system-ui / @font-size-vector;
+               padding-right: 12 / @font-size-system-ui / @font-size-vector;
        }
 
        &.oo-ui-flaggedElement-muted {
index bf855be..61872bd 100644 (file)
@@ -6,17 +6,19 @@
        padding: 0 0.5em;
        .box-sizing( border-box );
 
-       &:not( :last-child ) {
+       &:not( :last-child ):not( .mw-rcfilters-ui-itemMenuOptionWidget-identifier-talk ) {
                border-bottom: 1px solid @colorGray14;
        }
 
        &-view-namespaces {
                border-top: 4px solid @colorGray12;
+       }
 
-               &:first-child,
-               &.mw-rcfilters-ui-itemMenuOptionWidget-identifier-subject + &.mw-rcfilters-ui-itemMenuOptionWidget-identifier-talk {
-                       border-top: 0;
-               }
+       // Don't show border for first namespace
+       &-view-default + &-view-namespaces,
+       // Hide for every 'talk' option
+       &-view-namespaces&.mw-rcfilters-ui-itemMenuOptionWidget-identifier-subject + &-view-namespaces.mw-rcfilters-ui-itemMenuOptionWidget-identifier-talk {
+               border-top: 0;
        }
 
        &:hover {
diff --git a/resources/src/mediawiki.skinning/images/external-link-icons.svg b/resources/src/mediawiki.skinning/images/external-link-icons.svg
deleted file mode 100644 (file)
index 6a67993..0000000
+++ /dev/null
@@ -1,697 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="13"
-   height="110"
-   id="svg2"
-   version="1.1"
-   inkscape:version="0.48.5 r10040"
-   sodipodi:docname="external link icons.svg">
-  <defs
-     id="defs4" />
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="15.999999"
-     inkscape:cx="10.40536"
-     inkscape:cy="65.686256"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer5"
-     showgrid="true"
-     fit-margin-top="0"
-     fit-margin-left="0"
-     fit-margin-right="0"
-     fit-margin-bottom="0"
-     inkscape:window-width="1283"
-     inkscape:window-height="711"
-     inkscape:window-x="1790"
-     inkscape:window-y="-6"
-     inkscape:window-maximized="0">
-    <inkscape:grid
-       type="xygrid"
-       id="grid3246"
-       empspacing="4"
-       visible="true"
-       enabled="true"
-       snapvisiblegridlinesonly="true"
-       originx="0px"
-       originy="-27.999997px" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata7">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:groupmode="layer"
-     id="layer2"
-     inkscape:label="base"
-     style="display:none"
-     transform="translate(-505,-869.36218)">
-    <rect
-       style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none"
-       id="rect4646"
-       width="13"
-       height="12.999996"
-       x="505"
-       y="885.36218" />
-    <rect
-       style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none"
-       id="rect4646-4"
-       width="13"
-       height="12.999998"
-       x="505"
-       y="901.36218" />
-    <rect
-       style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none"
-       id="rect4646-4-6"
-       width="13"
-       height="12.999996"
-       x="505"
-       y="917.36218"
-       inkscape:export-filename="/home/rahah/elvidishu/steak/unreal/dev/skins/external link icons/mail.png"
-       inkscape:export-xdpi="90"
-       inkscape:export-ydpi="90" />
-    <rect
-       style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none"
-       id="rect4646-4-6-9"
-       width="13"
-       height="12.999996"
-       x="505"
-       y="933.36218" />
-    <rect
-       style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none"
-       id="rect4646-4-6-6"
-       width="13"
-       height="12.999996"
-       x="505"
-       y="950.36218" />
-    <rect
-       style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none"
-       id="rect4646-4-6-2"
-       width="13"
-       height="12.999998"
-       x="505"
-       y="966.36218" />
-    <rect
-       style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
-       id="rect4646-44"
-       width="13"
-       height="12.999996"
-       x="505"
-       y="869.36218" />
-  </g>
-  <g
-     inkscape:label="sketch 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(-505,-869.36218)"
-     style="display:none"
-     sodipodi:insensitive="true">
-    <path
-       style="fill:none;stroke:#0066ff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-       d="m 507,870.36218 0,5 3,0 4,4 0,-13 -4,4 z"
-       id="path3194"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="ccccccc" />
-    <path
-       style="fill:none;stroke:#5b9dff;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-       d="m 517,869.36218 c 1,2 1,5 0,7"
-       id="path3196"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#5b9dff;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-       d="m 520,867.36218 c 2,2 2,9 0,11"
-       id="path3198"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#0066ff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-       d="m 507.93861,989.90562 0,15.99988 13,0 0,-10.99988 -5,-5 z"
-       id="path3200"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cccccc" />
-    <path
-       style="fill:none;stroke:#0066ff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-       d="m 506.93861,918.90546 0,11.5 15,0 0,-11.5 z"
-       id="path3202"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="ccccc" />
-    <path
-       style="fill:none;stroke:#0066ff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-       d="m 506.93861,918.90546 7.5,6 7.5,-6"
-       id="path3204"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="ccc" />
-    <path
-       style="fill:none;stroke:#5b9dff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-       d="m 507.93861,890.90546 3,0"
-       id="path3212"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#5b9dff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-       d="m 507.93861,893.90546 3,0"
-       id="path3214"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#5b9dff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-       d="m 507.93861,899.90546 3,0"
-       id="path3218"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#5b9dff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-       d="m 507.93861,902.90546 3,0"
-       id="path3220"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#5b9dff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-       d="m 517.93861,890.90546 3,0"
-       id="path3222"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#5b9dff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-       d="m 507.93861,896.90546 13,0"
-       id="path3224"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#5b9dff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-       d="m 517.93861,893.90546 3,0"
-       id="path3226"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#5b9dff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-       d="m 517.93861,899.90546 3,0"
-       id="path3230"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#5b9dff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-       d="m 517.93861,902.90546 3,0"
-       id="path3232"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#0066ff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-       d="m 510.93861,890.90546 0,12 7,0 0,-12 z"
-       id="path3206"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="ccccc" />
-    <path
-       style="fill:none;stroke:#0066ff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-       d="m 507.93861,888.90546 0,16"
-       id="path3208"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#0066ff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-       d="m 520.93861,888.90546 0,16"
-       id="path3210"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#0066ff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-       d="m 515.93861,989.90562 0,5 5,0"
-       id="path3234"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="ccc" />
-    <path
-       style="fill:none;stroke:#0066ff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-       d="m 513.93861,969.40546 c -2,0 -5,0 -7,0 l 0,10.99995 11,5e-5 c 0,-2.33332 0,-4.66668 0,-7"
-       id="path3236"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="ccccc" />
-    <path
-       style="fill:none;stroke:#0066ff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:none"
-       d="m 513.93861,976.40546 5,-4 3,3 0,-10 -10,0 3,3 -4,5"
-       id="path3242"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="ccccccc" />
-    <path
-       style="fill:none;stroke:#0066ff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-       d="m 506.93861,940.40546 15,0 0,10 -6,0 -6,4 1,-4 -4,0 z"
-       id="path3244"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cccccccc" />
-    <path
-       style="fill:none;stroke:#5b9dff;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-       d="m 509.93861,972.40546 c 2,1 4,3 5,5"
-       id="path4641"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-  </g>
-  <g
-     inkscape:groupmode="layer"
-     id="layer4"
-     inkscape:label="sketch 2"
-     style="display:none"
-     transform="translate(0,-6.0000106)">
-    <path
-       style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
-       d="m 8.4921988,1.0623917 -4.0641234,4.064123 -3.2512987,0 0,5.6897733 3.2512987,0 4.0641234,4.064124 z m -1.6256494,4.064124 0,5.6897733 -1.6256493,-1.6256493 -2.438474,-1e-6 0,-2.438474 2.438474,1e-6 z"
-       id="path4755-9"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cccccccccccccc" />
-    <path
-       style="fill:#15a5ea;fill-opacity:1;stroke:none;display:inline"
-       d="m 9.3050235,5.1265157 c 0,-0.812824 0.8128245,-1.625649 1.6256495,-0.812824 0,0 0.812825,0.812824 0.812825,3.251298 0,2.4384743 -0.812825,3.2512993 -0.812825,3.2512993 -0.812825,0.812825 -1.6256495,0 -1.6256495,-0.812825 0,0 0.8128245,-0.8128243 0.8128245,-2.4384743 0,-1.625649 -0.8128245,-2.438474 -0.8128245,-2.438474 z"
-       id="path4760-1"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="ccsccsc" />
-    <path
-       style="fill:#15a5ea;fill-opacity:1;stroke:none;display:inline"
-       d="m 11.743498,3.5008667 c 0,-0.812825 0.812824,-1.625649 1.625649,-0.812825 0,0 1.625649,1.62565 1.625649,4.876948 0,3.2512993 -1.625649,4.8769483 -1.625649,4.8769483 -0.812825,0.812825 -1.625649,0 -1.625649,-0.812824 0,0 1.625649,-1.62565 1.625649,-4.0641243 0,-2.438474 -1.625649,-4.064123 -1.625649,-4.064123 z"
-       id="path4762-8"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="ccsccsc" />
-    <path
-       style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
-       d="m 2.8024261,23.008658 0,0.812825 10.5667209,0 0,-0.812825 z"
-       id="path4772"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="ccccc" />
-    <path
-       style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
-       d="m 2.8024261,33.575379 10.5667209,0 0,-0.812825 -10.5667209,0 z"
-       id="path4774"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="ccccc" />
-    <path
-       style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
-       d="m 2.8024261,25.447132 0,0.812824 2.438474,0 0,-0.812824 z m 8.1282469,0 0,0.812824 2.438474,0 0,-0.812824 z"
-       id="path4782"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cccccccccc" />
-    <path
-       style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
-       d="m 2.8024261,30.32408 0,0.812824 2.438474,0 0,-0.812824 z m 8.1282469,0 0,0.812824 2.438474,0 0,-0.812824 z"
-       id="path4778"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cccccccccc" />
-    <path
-       style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
-       d="m 2.8024261,28.698431 10.5667209,0 0,-0.812825 -10.5667209,0 z"
-       id="path4780"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="ccccc" />
-    <path
-       style="fill:#15a5ea;fill-opacity:1;stroke:none;display:inline"
-       d="m 5.2409001,27.479194 0,1.625649 5.6897729,0 0,-1.625649 z"
-       id="path4793"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="ccccc" />
-    <path
-       style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
-       d="m 4.4280754,23.008658 0,10.56672 7.3154226,0 0,-10.56672 z m 1.6256494,1.625649 4.0641232,0 0,7.315422 -4.0641232,0 z"
-       id="path4768"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cccccccccc" />
-    <path
-       style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
-       d="m 1.9896014,21.383009 1.6256493,0 0,13.818019 -1.6256493,0 z"
-       id="path4764"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="ccccc" />
-    <path
-       style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
-       d="m 12.556322,21.383009 1.62565,0 0,13.818019 -1.62565,0 z"
-       id="path4766"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="ccccc" />
-    <path
-       style="fill:#15a5ea;fill-opacity:1;stroke:none;display:inline"
-       d="m 1.9896014,44.954923 6.096185,5.689773 6.0961856,-5.689773 -0.812825,-0.812825 -1.625649,0.813196 -3.6577116,3.251298 -3.657711,-3.251298 -1.6256493,-0.813196 z"
-       id="path4800-4"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="ccccccccc" />
-    <path
-       style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
-       d="m 1.1767767,43.329273 0,11.379545 13.8180193,0 0,-11.379545 z m 1.6256494,1.625649 10.5667209,0 0,8.128247 -10.5667209,0 z"
-       id="path4795-8"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cccccccccc" />
-    <path
-       style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
-       d="m 1.9896014,62.024243 -0.8128247,0.812824 0,8.128247 0.8128247,0.812825 2.438474,0 -0.8128247,3.251297 5.6897728,-3.251297 4.8769485,0 0.812824,-0.812825 0,-8.128247 -0.812824,-0.812824 z m 0.8128247,1.625649 10.5667209,0 0,6.502598 -4.0641235,0 -3.5815088,2.133664 0.9144278,-2.133664 -3.8355164,0 z"
-       id="path4802-8"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cccccccccccccccccccc" />
-    <path
-       style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
-       d="m 4.4280754,82.344856 10.5667206,0 0,10.56672 -3.251298,-3.25129 -3.2512992,2.43847 -0.8128247,-0.81282 4.0641239,-3.2513 1.625649,1.62565 0,-5.68978 -5.6897729,0 1.6256494,1.62565 -3.2512987,4.06413 -0.8128247,-0.81283 2.438474,-3.2513 z"
-       id="path4807-5"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="ccccccccccccccc" />
-    <path
-       style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
-       d="m 8.4921988,85.596156 -7.3154221,0 0,10.56672 10.5667213,0 0,-7.31542 -1.62565,0.81283 0,4.87694 -7.3154219,0 0,-7.31542 4.876948,0 z"
-       id="path4809-7"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="ccccccccccc" />
-    <path
-       style="fill:#15a5ea;fill-opacity:1;stroke:none;display:inline"
-       d="m 8.4921988,103.47831 0,4.87694 4.8769482,0 0,-1.62565 -3.251299,0 0,-3.25129 z"
-       id="path4818-67"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="ccccccc" />
-    <path
-       style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
-       d="m 1.9896014,102.66548 0,13.81802 12.1923706,0 0,-10.13799 -3.657711,-3.68003 z m 1.6256493,1.62565 6.5025973,0 2.438474,2.43847 0,8.12825 -8.9410713,0 z"
-       id="path4813-2"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cccccccccccc" />
-    <path
-       style="fill:#15a5ea;fill-opacity:1;stroke:none;display:inline"
-       d="m 3.6152507,88.847456 c 0,-0.81282 0.8128247,-0.81282 0.8128247,-0.81282 2.438474,0.81282 4.0641234,2.43847 4.8769481,4.87694 0,0 0,0.81283 -0.8128247,0.81283 -1.6256494,-2.43847 -2.438474,-3.2513 -4.8769481,-4.87695 z"
-       id="path4822-8"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="ccccc" />
-  </g>
-  <g
-     inkscape:groupmode="layer"
-     id="layer3"
-     inkscape:label="Layer"
-     style="display:none"
-     transform="translate(-10,-26.000007)">
-    <path
-       style="fill:#3366bb;fill-opacity:1;stroke:none"
-       d="m 19,20.999995 -4,4 -3,0 0,6 3,0 4,4 z m -1,2.5 0,9 -2.6,-2.5 -2.4,0 0,-4 2.5,0 z"
-       id="path4755"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cccccccccccccc" />
-    <path
-       style="fill:#15a5ea;fill-opacity:1;stroke:none"
-       d="m 19.75,24.999995 c 0,-1 0.75,-1 0.75,-1 0,0 1.5,1.029412 1.5,3.5 0,2.470588 -1.5,3.5 -1.5,3.5 0,0 -0.75,0 -0.75,-1 0,0 1,-0.852941 1,-2.5 0,-1.647059 -1,-2.5 -1,-2.5 z"
-       id="path4760"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="ccsccsc" />
-    <path
-       style="fill:#15a5ea;fill-opacity:1;stroke:none"
-       d="m 22.25,23.999995 c 0,-1 0.75,-1 0.75,-1 0,0 2,1.205882 2,4.5 0,3.294118 -2,4.5 -2,4.5 0,0 -0.75,0 -0.75,-1 0,0 1.5,-1.029412 1.5,-3.5 0,-2.470588 -1.5,-3.5 -1.5,-3.5 z"
-       id="path4762"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="ccsccsc" />
-    <path
-       style="fill:#3366bb;fill-opacity:1;stroke:none"
-       d="m 31.4375,79.875 -1,1 0,10 1,1 3,0 -1,4 7,-4 6,0 1,-1 0,-10 -1,-1 z m 1,2 13,0 0,8 -5,0 -4.40625,2.625 1.125,-2.625 -4.71875,0 z"
-       id="path4802"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cccccccccccccccccccc" />
-    <path
-       style="fill:#3366bb;fill-opacity:1;stroke:none"
-       d="m 35.125,98.8125 13,0 0,13 -4,-4 -4,3 -1,-1 5,-4 2,2 0,-7 -7,0 2,2 -4,5 -1,-1 3,-4 z"
-       id="path4807"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:#3366bb;fill-opacity:1;stroke:none"
-       d="m 40.125,102.8125 -9,0 0,13 13,0 0,-9 -2,1 0,6 -9,0 0,-9 6,0 z"
-       id="path4809"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:#15a5ea;fill-opacity:1;stroke:none"
-       d="m 34.125,106.8125 c 0,-1 1,-1 1,-1 3,1 5,3 6,6 0,0 0,1 -1,1 -2,-3 -3,-4 -6,-6 z"
-       id="path4822"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="ccccc" />
-    <path
-       style="fill:#15a5ea;fill-opacity:1;fill-rule:evenodd;stroke:none"
-       d="m 12,50.499995 0,1 3,0 0,-1 -3,0 z m 9,0 0,1 3,0 0,-1 -3,0 z"
-       id="rect4841"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:#15a5ea;fill-opacity:1;fill-rule:evenodd;stroke:none"
-       d="m 12,44.499995 0,1 3,0 0,-1 -3,0 z m 9,0 0,1 3,0 0,-1 -3,0 z"
-       id="rect4843"
-       inkscape:connector-curvature="0" />
-    <path
-       inkscape:connector-curvature="0"
-       style="fill:#15a5ea;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
-       d="m 12,52.999995 0,1 3,0 0,-1 z m 9,0 0,1 3,0 0,-1 z"
-       id="rect4843-1"
-       sodipodi:nodetypes="cccccccccc" />
-    <path
-       inkscape:connector-curvature="0"
-       style="fill:#15a5ea;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
-       d="m 12,41.999995 0,1 3,0 0,-1 z m 9,0 0,1 3,0 0,-1 z"
-       id="rect4843-17"
-       sodipodi:nodetypes="cccccccccc" />
-    <path
-       style="fill:#15a5ea;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
-       d="m 12,47.499995 0,1 3,0 0,-1 z m 9,0 0,1 3,0 0,-1 z"
-       id="rect4841-9"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cccccccccc" />
-    <rect
-       style="fill:#15a5ea;fill-opacity:1;fill-rule:evenodd;stroke:none"
-       id="rect4835"
-       width="7"
-       height="2"
-       x="4"
-       y="27"
-       transform="translate(10,19.999995)" />
-    <path
-       style="fill:#3366bb;fill-opacity:1;stroke:none"
-       d="m 2,21 1,0 0,14 -1,0 z"
-       id="path4826"
-       inkscape:connector-curvature="0"
-       transform="translate(10,19.999995)"
-       sodipodi:nodetypes="ccccc" />
-    <path
-       style="fill:#3366bb;fill-opacity:1;stroke:none"
-       d="m 13,21 1,0 0,14 -1,0 z"
-       id="path4828"
-       inkscape:connector-curvature="0"
-       transform="translate(10,19.999995)"
-       sodipodi:nodetypes="ccccc" />
-    <path
-       style="fill:#3366bb;fill-opacity:1;stroke:none"
-       d="m 4,22 0,12 8,0 0,-12 z m 1,1 6,0 0,10 -6,0 z"
-       transform="translate(10,19.999995)"
-       id="path4830"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cccccccccc" />
-    <rect
-       style="fill:#3366bb;fill-opacity:1;fill-rule:evenodd;stroke:none"
-       id="rect4837"
-       width="8"
-       height="1"
-       x="4"
-       y="22"
-       transform="translate(10,19.999995)" />
-    <rect
-       style="fill:#3366bb;fill-opacity:1;fill-rule:evenodd;stroke:none"
-       id="rect4839"
-       width="8"
-       height="1"
-       x="4"
-       y="33"
-       transform="translate(10,19.999995)" />
-    <path
-       style="fill:#15a5ea;fill-opacity:1;stroke:none"
-       d="m 12,64.999995 6,5 6,-5 0.53033,-1.45299 -1.28033,0.45299 -5.25,4.5 -5.25,-4.5 -1.236136,-0.53033 z"
-       id="path4910"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="ccccccccc" />
-    <path
-       style="fill:#3366bb;fill-opacity:1;stroke:none"
-       d="m 11,62.999995 0,10 14,0 0,-10 z m 1,1 12,0 0,8 -12,0 z"
-       id="path4905"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cccccccccc" />
-    <path
-       style="fill:#15a5ea;fill-opacity:1;stroke:none;display:inline"
-       d="m 19,121 0,5 5,0 -1,-1 -3,0 0,-3 z"
-       id="path4818-6"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="ccccccc" />
-    <path
-       style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
-       d="m 12,121 0,14 12,0 0,-10 -4,-4 z m 1,1 6.5,0 3.5,3.5 0,8.5 -10,0 z"
-       id="path4813-3"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cccccccccccc" />
-  </g>
-  <g
-     inkscape:groupmode="layer"
-     id="layer5"
-     inkscape:label="Layer#1"
-     style="opacity:0.98999999"
-     transform="translate(0,-6.0000106)">
-    <path
-       style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
-       d="m 7,23.000004 -3,3 -3,0 0,4 3,0 3,3 z m -1,2.500001 0,5 -1.5,-1.500001 -2.5,0 0,-2 2.5,0 z"
-       id="path4755-9-5"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cccccccccccccc" />
-    <path
-       style="fill:#15a5ea;fill-opacity:1;stroke:none;display:inline"
-       d="m 7.4319858,26.075368 c 0,-0.621323 0.6213237,-1.242647 1.2426477,-0.621323 0,0 0.6213228,0.621323 0.6213228,2.485294 0,1.863971 -0.6213228,2.485294 -0.6213228,2.485294 -0.621324,0.621324 -1.2426477,0 -1.2426477,-0.621323 0,0 0.6213237,-0.621324 0.6213237,-1.863971 0,-1.242648 -0.6213237,-1.863971 -0.6213237,-1.863971 z"
-       id="path4760-1-7"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="ccsccsc" />
-    <path
-       style="fill:#15a5ea;fill-opacity:1;stroke:none;display:inline"
-       d="m 9.2959563,24.832721 c 0,-0.621324 0.6213228,-1.242647 1.2426477,-0.621324 0,0 1.242646,1.242648 1.242646,3.727942 0,2.485294 -1.242646,3.727941 -1.242646,3.727941 -0.6213249,0.621324 -1.2426477,0 -1.2426477,-0.621323 0,0 1.2426477,-1.242647 1.2426477,-3.106618 0,-1.863971 -1.2426477,-3.106618 -1.2426477,-3.106618 z"
-       id="path4762-8-3"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="ccsccsc" />
-    <path
-       style="fill:#15a5ea;fill-opacity:0.99215686;stroke:none;display:inline"
-       d="m 2.4916056,40.000004 0,0.621323 8.0979164,0 0,-0.621323 z"
-       id="path4772-4"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="ccccc" />
-    <path
-       style="fill:#15a5ea;fill-opacity:0.99215686;stroke:none;display:inline"
-       d="m 2.4916056,48.000004 8.0979164,0 0,-0.621324 -8.0979164,0 z"
-       id="path4774-6"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="ccccc" />
-    <path
-       style="fill:#15a5ea;fill-opacity:0.99215686;stroke:none;display:inline"
-       d="m 2.4916056,41.919118 0,0.621323 1.8687499,0 0,-0.621323 z m 6.2291665,0 0,0.621323 1.8687499,0 0,-0.621323 z"
-       id="path4782-3"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cccccccccc" />
-    <path
-       style="fill:#15a5ea;fill-opacity:0.99215686;stroke:none;display:inline"
-       d="m 2.4916056,45.589344 0,0.621322 1.8687499,0 0,-0.621322 z m 6.2291665,0 0,0.621322 1.8687499,0 0,-0.621322 z"
-       id="path4778-9"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cccccccccc" />
-    <path
-       style="fill:#15a5ea;fill-opacity:0.99215686;stroke:none;display:inline"
-       d="m 2.4916056,44.404412 8.0979164,0 0,-0.621323 -8.0979164,0 z"
-       id="path4780-0"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="ccccc" />
-    <path
-       style="fill:#15a5ea;fill-opacity:1;stroke:none;display:inline"
-       d="m 4.3603555,43.472427 0,1.242647 4.3604166,0 0,-1.242647 z"
-       id="path4793-0"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="ccccc" />
-    <path
-       style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
-       d="m 4,40.000004 0,8 5,0 0,-8 z m 1,1 3,0 0,6 -3,0 z"
-       id="path4768-5"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cccccccccc" />
-    <path
-       style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
-       d="m 2,39.000004 1,0 0,10 -1,0 z"
-       id="path4764-1"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="ccccc" />
-    <path
-       style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
-       d="m 10,39.000004 1,0 0,10 -1,0 z"
-       id="path4766-6"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="ccccc" />
-    <path
-       style="fill:#15a5ea;fill-opacity:1;stroke:none;display:inline"
-       d="M 1.8400738,58.055766 6.5000005,62.405031 11.159927,58.055766 10.538604,57.434442 9.2959563,58.056049 6.5000005,60.541343 3.7040445,58.056049 2.4613977,57.434442 z"
-       id="path4800-4-9"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="ccccccccc"
-       inkscape:export-filename="/home/rahah/elvidishu/steak/unreal/dev/skins/external link icons/mail.png"
-       inkscape:export-xdpi="90"
-       inkscape:export-ydpi="90" />
-    <path
-       style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
-       d="m 1,57.000008 0,8 11,0 0,-8 z m 1,1 9,0 0,6 -9,0 z"
-       id="path4795-8-2"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cccccccccc"
-       inkscape:export-filename="/home/rahah/elvidishu/steak/unreal/dev/skins/external link icons/mail.png"
-       inkscape:export-xdpi="90"
-       inkscape:export-ydpi="90" />
-    <path
-       style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
-       d="M 1.6213238,72.000004 1,72.621328 l 0,5.757352 0.6213238,0.621324 1.6894529,0 L 2.6894528,81.727943 7,79.000004 l 4.378677,0 L 12,78.37868 12,72.621328 11.378677,72.000004 z m 0.3786762,1 9,0 0,5 -4,0 L 4.0978858,79.896603 5,78.000004 l -3,0 z"
-       id="path4802-8-9"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cccccccccccccccccccc" />
-    <path
-       style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
-       d="m 5,88.000004 7,0 0,7 -2,-2 -3,2 0,-1 3,-2.249999 1,1 0,-3.750001 -3.75,0 1,1 -2.25,3 -1,0 2,-3 z"
-       id="path4807-5-6"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="ccccccccccccccc" />
-    <path
-       style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
-       d="m 7,90.000004 -5,0 0,8 8,0 0,-5 -1,0 0,4 -6,0 0,-6 4,0 z"
-       id="path4809-7-3"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="ccccccccccc" />
-    <path
-       style="fill:#15a5ea;fill-opacity:1;stroke:none;display:inline"
-       d="m 7.5,105.00001 0,3 2.5,0 1,-1 -2.5,0 0,-3 z"
-       id="path4818-67-7"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="ccccccc" />
-    <path
-       style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
-       d="m 3,104 0,10 8,1e-5 0,-7 -2.5,-3 z m 1,1 4,1e-5 2,2.50001 0,5.49999 -6,0 z"
-       id="path4813-2-2"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cccccccccccc" />
-    <path
-       style="fill:#15a5ea;fill-opacity:1;stroke:none;display:inline"
-       d="m 4.0827206,92.533089 c 0,-0.621319 0.6213239,-0.621319 0.6213239,-0.621319 1.8639706,0.621319 3.1066175,1.863968 3.7279413,3.727935 0,0 0,0.621328 -0.6213238,0.621328 C 6.5680151,94.397065 5.9466913,93.775738 4.0827206,92.533089 z"
-       id="path4822-8-2"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="ccccc" />
-    <path
-       style="fill:#3465ba;fill-opacity:1;stroke:none;display:inline"
-       d="m 1,8.500006 0,7.5001 1,-0.9872 0,-6.0129 2,0 2,1 4,-2e-4 0,2.0002 1,0 0,-2.5 -0.5,-0.5002 -4.5,2e-4 -2,-1 -2.5,0 z"
-       id="path3209"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="ccccccccccccccc" />
-    <path
-       style="fill:#16a4e8;fill-opacity:1;stroke:none;display:inline"
-       d="m 6,11.000106 -1,-10e-5 -2.5,0 -0.5,0.5 -1,4.5001 10,-10e-5 0,-4.4998 -0.5,-0.5 z m 0,1 4,-10e-5 0,3 -7.75,-1e-4 0.75,-3.0001 2,0 z"
-       id="path3215"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cccccccccccccccc" />
-    <path
-       style="fill:#3465ba;fill-opacity:1;stroke:none;display:inline"
-       d="m 2,17.000006 0,1 8,0 0,-1 z"
-       id="path3247"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="ccccc" />
-    <path
-       style="fill:#3465ba;fill-opacity:1;stroke:none;display:inline"
-       d="m 5,15.500006 0,2 2,0 0,-2 c 0,-0.5 -2,-0.5 -2,0 z"
-       id="path3249"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="ccccc" />
-  </g>
-</svg>
index cb54e71..1852231 100644 (file)
@@ -19,7 +19,9 @@
                        enableAutoblockField = infuseOrNull( $( '#mw-input-wpAutoBlock' ).closest( '.oo-ui-fieldLayout' ) ),
                        hideUserField = infuseOrNull( $( '#mw-input-wpHideUser' ).closest( '.oo-ui-fieldLayout' ) ),
                        watchUserField = infuseOrNull( $( '#mw-input-wpWatch' ).closest( '.oo-ui-fieldLayout' ) ),
-                       expiryWidget = infuseOrNull( 'mw-input-wpExpiry' );
+                       expiryWidget = infuseOrNull( 'mw-input-wpExpiry' ),
+                       editingRestrictionWidget = infuseOrNull( 'mw-input-wpEditingRestriction' ),
+                       pageRestrictionsWidget = infuseOrNull( 'mw-input-wpPageRestrictions' );
 
                function updateBlockOptions() {
                        var blocktarget = blockTargetWidget.getValue().trim(),
@@ -30,7 +32,8 @@
                                expiryValue = expiryWidget.getValue(),
                                // infinityValues  are the values the SpecialBlock class accepts as infinity (sf. wfIsInfinity)
                                infinityValues = [ 'infinite', 'indefinite', 'infinity', 'never' ],
-                               isIndefinite = infinityValues.indexOf( expiryValue ) !== -1;
+                               isIndefinite = infinityValues.indexOf( expiryValue ) !== -1,
+                               editingRestrictionValue = editingRestrictionWidget ? editingRestrictionWidget.getValue() : undefined;
 
                        if ( enableAutoblockField ) {
                                enableAutoblockField.toggle( !( isNonEmptyIp ) );
                        if ( watchUserField ) {
                                watchUserField.toggle( !( isIpRange && !isEmpty ) );
                        }
+                       if ( pageRestrictionsWidget ) {
+                               pageRestrictionsWidget.setDisabled( editingRestrictionValue === 'sitewide' );
+                       }
                }
 
                if ( blockTargetWidget ) {
                        // Bind functions so they're checked whenever stuff changes
                        blockTargetWidget.on( 'change', updateBlockOptions );
                        expiryWidget.on( 'change', updateBlockOptions );
+                       editingRestrictionWidget.on( 'change', updateBlockOptions );
 
                        // Call them now to set initial state (ie. Special:Block/Foobar?wpBlockExpiry=2+hours)
                        updateBlockOptions();
diff --git a/resources/src/mediawiki.special.block.less b/resources/src/mediawiki.special.block.less
new file mode 100644 (file)
index 0000000..c013994
--- /dev/null
@@ -0,0 +1,6 @@
+.mw-block-page-restrictions {
+       margin-left: 2em;
+       .oo-ui-widget {
+               max-width: 48em;
+       }
+}
diff --git a/resources/src/mediawiki.toolbar/images/ar/button_bold.png b/resources/src/mediawiki.toolbar/images/ar/button_bold.png
deleted file mode 100644 (file)
index 50e2ff0..0000000
Binary files a/resources/src/mediawiki.toolbar/images/ar/button_bold.png and /dev/null differ
diff --git a/resources/src/mediawiki.toolbar/images/ar/button_headline.png b/resources/src/mediawiki.toolbar/images/ar/button_headline.png
deleted file mode 100644 (file)
index 2e3e781..0000000
Binary files a/resources/src/mediawiki.toolbar/images/ar/button_headline.png and /dev/null differ
diff --git a/resources/src/mediawiki.toolbar/images/ar/button_italic.png b/resources/src/mediawiki.toolbar/images/ar/button_italic.png
deleted file mode 100644 (file)
index 6b54fb6..0000000
Binary files a/resources/src/mediawiki.toolbar/images/ar/button_italic.png and /dev/null differ
diff --git a/resources/src/mediawiki.toolbar/images/ar/button_link.png b/resources/src/mediawiki.toolbar/images/ar/button_link.png
deleted file mode 100644 (file)
index 4434e7f..0000000
Binary files a/resources/src/mediawiki.toolbar/images/ar/button_link.png and /dev/null differ
diff --git a/resources/src/mediawiki.toolbar/images/ar/button_nowiki.png b/resources/src/mediawiki.toolbar/images/ar/button_nowiki.png
deleted file mode 100644 (file)
index c9378de..0000000
Binary files a/resources/src/mediawiki.toolbar/images/ar/button_nowiki.png and /dev/null differ
diff --git a/resources/src/mediawiki.toolbar/images/be-tarask/button_bold.png b/resources/src/mediawiki.toolbar/images/be-tarask/button_bold.png
deleted file mode 100644 (file)
index df6700d..0000000
Binary files a/resources/src/mediawiki.toolbar/images/be-tarask/button_bold.png and /dev/null differ
diff --git a/resources/src/mediawiki.toolbar/images/be-tarask/button_italic.png b/resources/src/mediawiki.toolbar/images/be-tarask/button_italic.png
deleted file mode 100644 (file)
index 872c00f..0000000
Binary files a/resources/src/mediawiki.toolbar/images/be-tarask/button_italic.png and /dev/null differ
diff --git a/resources/src/mediawiki.toolbar/images/be-tarask/button_link.png b/resources/src/mediawiki.toolbar/images/be-tarask/button_link.png
deleted file mode 100644 (file)
index d3dd88e..0000000
Binary files a/resources/src/mediawiki.toolbar/images/be-tarask/button_link.png and /dev/null differ
diff --git a/resources/src/mediawiki.toolbar/images/de/button_bold.png b/resources/src/mediawiki.toolbar/images/de/button_bold.png
deleted file mode 100644 (file)
index 8e6b389..0000000
Binary files a/resources/src/mediawiki.toolbar/images/de/button_bold.png and /dev/null differ
diff --git a/resources/src/mediawiki.toolbar/images/de/button_italic.png b/resources/src/mediawiki.toolbar/images/de/button_italic.png
deleted file mode 100644 (file)
index 5e3cd11..0000000
Binary files a/resources/src/mediawiki.toolbar/images/de/button_italic.png and /dev/null differ
diff --git a/resources/src/mediawiki.toolbar/images/en/button_bold.png b/resources/src/mediawiki.toolbar/images/en/button_bold.png
deleted file mode 100644 (file)
index e582fb1..0000000
Binary files a/resources/src/mediawiki.toolbar/images/en/button_bold.png and /dev/null differ
diff --git a/resources/src/mediawiki.toolbar/images/en/button_extlink.png b/resources/src/mediawiki.toolbar/images/en/button_extlink.png
deleted file mode 100644 (file)
index 458943c..0000000
Binary files a/resources/src/mediawiki.toolbar/images/en/button_extlink.png and /dev/null differ
diff --git a/resources/src/mediawiki.toolbar/images/en/button_headline.png b/resources/src/mediawiki.toolbar/images/en/button_headline.png
deleted file mode 100644 (file)
index 7d64a16..0000000
Binary files a/resources/src/mediawiki.toolbar/images/en/button_headline.png and /dev/null differ
diff --git a/resources/src/mediawiki.toolbar/images/en/button_hr.png b/resources/src/mediawiki.toolbar/images/en/button_hr.png
deleted file mode 100644 (file)
index 47e1ca4..0000000
Binary files a/resources/src/mediawiki.toolbar/images/en/button_hr.png and /dev/null differ
diff --git a/resources/src/mediawiki.toolbar/images/en/button_image.png b/resources/src/mediawiki.toolbar/images/en/button_image.png
deleted file mode 100644 (file)
index 6919296..0000000
Binary files a/resources/src/mediawiki.toolbar/images/en/button_image.png and /dev/null differ
diff --git a/resources/src/mediawiki.toolbar/images/en/button_italic.png b/resources/src/mediawiki.toolbar/images/en/button_italic.png
deleted file mode 100644 (file)
index 820efe2..0000000
Binary files a/resources/src/mediawiki.toolbar/images/en/button_italic.png and /dev/null differ
diff --git a/resources/src/mediawiki.toolbar/images/en/button_link.png b/resources/src/mediawiki.toolbar/images/en/button_link.png
deleted file mode 100644 (file)
index 5dd362c..0000000
Binary files a/resources/src/mediawiki.toolbar/images/en/button_link.png and /dev/null differ
diff --git a/resources/src/mediawiki.toolbar/images/en/button_media.png b/resources/src/mediawiki.toolbar/images/en/button_media.png
deleted file mode 100644 (file)
index 80c3156..0000000
Binary files a/resources/src/mediawiki.toolbar/images/en/button_media.png and /dev/null differ
diff --git a/resources/src/mediawiki.toolbar/images/en/button_nowiki.png b/resources/src/mediawiki.toolbar/images/en/button_nowiki.png
deleted file mode 100644 (file)
index 05a977a..0000000
Binary files a/resources/src/mediawiki.toolbar/images/en/button_nowiki.png and /dev/null differ
diff --git a/resources/src/mediawiki.toolbar/images/en/button_sig.png b/resources/src/mediawiki.toolbar/images/en/button_sig.png
deleted file mode 100644 (file)
index 2cbcc0b..0000000
Binary files a/resources/src/mediawiki.toolbar/images/en/button_sig.png and /dev/null differ
diff --git a/resources/src/mediawiki.toolbar/images/fa/button_bold.png b/resources/src/mediawiki.toolbar/images/fa/button_bold.png
deleted file mode 100644 (file)
index 5489343..0000000
Binary files a/resources/src/mediawiki.toolbar/images/fa/button_bold.png and /dev/null differ
diff --git a/resources/src/mediawiki.toolbar/images/fa/button_headline.png b/resources/src/mediawiki.toolbar/images/fa/button_headline.png
deleted file mode 100644 (file)
index 4d48a5d..0000000
Binary files a/resources/src/mediawiki.toolbar/images/fa/button_headline.png and /dev/null differ
diff --git a/resources/src/mediawiki.toolbar/images/fa/button_italic.png b/resources/src/mediawiki.toolbar/images/fa/button_italic.png
deleted file mode 100644 (file)
index 41098c7..0000000
Binary files a/resources/src/mediawiki.toolbar/images/fa/button_italic.png and /dev/null differ
diff --git a/resources/src/mediawiki.toolbar/images/fa/button_link.png b/resources/src/mediawiki.toolbar/images/fa/button_link.png
deleted file mode 100644 (file)
index 8c2d85a..0000000
Binary files a/resources/src/mediawiki.toolbar/images/fa/button_link.png and /dev/null differ
diff --git a/resources/src/mediawiki.toolbar/images/fa/button_nowiki.png b/resources/src/mediawiki.toolbar/images/fa/button_nowiki.png
deleted file mode 100644 (file)
index c9378de..0000000
Binary files a/resources/src/mediawiki.toolbar/images/fa/button_nowiki.png and /dev/null differ
diff --git a/resources/src/mediawiki.toolbar/images/ksh/LICENSE b/resources/src/mediawiki.toolbar/images/ksh/LICENSE
deleted file mode 100644 (file)
index 640bbff..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-
-button_italic.png
--------------------
-Source : https://commons.wikimedia.org/wiki/Image:Button_S_italic.png
-License: Public domain
-Author : Purodha Blissenbach, https://ksh.wikipedia.org/wiki/User:Purodha
-
diff --git a/resources/src/mediawiki.toolbar/images/ksh/button_italic.png b/resources/src/mediawiki.toolbar/images/ksh/button_italic.png
deleted file mode 100644 (file)
index 34268d9..0000000
Binary files a/resources/src/mediawiki.toolbar/images/ksh/button_italic.png and /dev/null differ
diff --git a/resources/src/mediawiki.toolbar/images/ru/LICENSE b/resources/src/mediawiki.toolbar/images/ru/LICENSE
deleted file mode 100644 (file)
index 572864b..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-button_bold.png
----------------
-Source : https://commons.wikimedia.org/wiki/File:Button_bold_ukr.png
-License: Public domain
-Author : Alexey Belomoev
-
-button_italic.png
-------------------------
-Source : https://commons.wikimedia.org/wiki/File:Button_italic_ukr.png
-License: Public domain
-Author : Alexey Belomoev
-
-button_link.png
------------------
-Source : https://commons.wikimedia.org/wiki/File:Button_internal_link_ukr.png
-License: GPL
-Author : Saproj, Erik Möller
diff --git a/resources/src/mediawiki.toolbar/images/ru/button_bold.png b/resources/src/mediawiki.toolbar/images/ru/button_bold.png
deleted file mode 100644 (file)
index a7dceb1..0000000
Binary files a/resources/src/mediawiki.toolbar/images/ru/button_bold.png and /dev/null differ
diff --git a/resources/src/mediawiki.toolbar/images/ru/button_italic.png b/resources/src/mediawiki.toolbar/images/ru/button_italic.png
deleted file mode 100644 (file)
index 44a0a74..0000000
Binary files a/resources/src/mediawiki.toolbar/images/ru/button_italic.png and /dev/null differ
diff --git a/resources/src/mediawiki.toolbar/images/ru/button_link.png b/resources/src/mediawiki.toolbar/images/ru/button_link.png
deleted file mode 100644 (file)
index 36b9059..0000000
Binary files a/resources/src/mediawiki.toolbar/images/ru/button_link.png and /dev/null differ
diff --git a/resources/src/mediawiki.toolbar/toolbar.js b/resources/src/mediawiki.toolbar/toolbar.js
deleted file mode 100644 (file)
index be49d26..0000000
+++ /dev/null
@@ -1,208 +0,0 @@
-/**
- * Interface for the classic edit toolbar.
- *
- * @class mw.toolbar
- * @singleton
- */
-( function () {
-       var toolbar, isReady, $toolbar, queue, slice, $currentFocused;
-
-       /**
-        * Internal helper that does the actual insertion of the button into the toolbar.
-        *
-        * For backwards-compatibility, passing `imageFile`, `speedTip`, `tagOpen`, `tagClose`,
-        * `sampleText` and `imageId` as separate arguments (in this order) is also supported.
-        *
-        * @private
-        *
-        * @param {Object} button Object with the following properties.
-        *  You are required to provide *either* the `onClick` parameter, or the three parameters
-        *  `tagOpen`, `tagClose` and `sampleText`, but not both (they're mutually exclusive).
-        * @param {string} [button.imageFile] Image to use for the button.
-        * @param {string} button.speedTip Tooltip displayed when user mouses over the button.
-        * @param {Function} [button.onClick] Function to be executed when the button is clicked.
-        * @param {string} [button.tagOpen]
-        * @param {string} [button.tagClose]
-        * @param {string} [button.sampleText] Alternative to `onClick`. `tagOpen`, `tagClose` and
-        *  `sampleText` together provide the markup that should be inserted into page text at
-        *  current cursor position.
-        * @param {string} [button.imageId] `id` attribute of the button HTML element. Can be
-        *  used to define the image with CSS if it's not provided as `imageFile`.
-        * @param {string} [speedTip]
-        * @param {string} [tagOpen]
-        * @param {string} [tagClose]
-        * @param {string} [sampleText]
-        * @param {string} [imageId]
-        */
-       function insertButton( button, speedTip, tagOpen, tagClose, sampleText, imageId ) {
-               var $button;
-
-               // Backwards compatibility
-               if ( typeof button !== 'object' ) {
-                       button = {
-                               imageFile: button,
-                               speedTip: speedTip,
-                               tagOpen: tagOpen,
-                               tagClose: tagClose,
-                               sampleText: sampleText,
-                               imageId: imageId
-                       };
-               }
-
-               if ( button.imageFile ) {
-                       $button = $( '<img>' ).attr( {
-                               src: button.imageFile,
-                               alt: button.speedTip,
-                               title: button.speedTip,
-                               id: button.imageId || undefined,
-                               'class': 'mw-toolbar-editbutton'
-                       } );
-               } else {
-                       $button = $( '<div>' ).attr( {
-                               title: button.speedTip,
-                               id: button.imageId || undefined,
-                               'class': 'mw-toolbar-editbutton'
-                       } );
-               }
-
-               $button.click( function ( e ) {
-                       if ( button.onClick !== undefined ) {
-                               button.onClick( e );
-                       } else {
-                               toolbar.insertTags( button.tagOpen, button.tagClose, button.sampleText );
-                       }
-
-                       return false;
-               } );
-
-               $toolbar.append( $button );
-       }
-
-       isReady = false;
-       $toolbar = false;
-
-       /**
-        * @private
-        * @property {Array}
-        * Contains button objects (and for backwards compatibility, it can
-        * also contains an arguments array for insertButton).
-        */
-       queue = [];
-       slice = queue.slice;
-
-       toolbar = {
-
-               /**
-                * Add buttons to the toolbar.
-                *
-                * Takes care of race conditions and time-based dependencies by placing buttons in a queue if
-                * this method is called before the toolbar is created.
-                *
-                * For backwards-compatibility, passing `imageFile`, `speedTip`, `tagOpen`, `tagClose`,
-                * `sampleText` and `imageId` as separate arguments (in this order) is also supported.
-                *
-                * @inheritdoc #insertButton
-                */
-               addButton: function () {
-                       if ( isReady ) {
-                               insertButton.apply( toolbar, arguments );
-                       } else {
-                               // Convert arguments list to array
-                               queue.push( slice.call( arguments ) );
-                       }
-               },
-
-               /**
-                * Add multiple buttons to the toolbar (see also #addButton).
-                *
-                * Example usage:
-                *
-                *     addButtons( [ { .. }, { .. }, { .. } ] );
-                *     addButtons( { .. }, { .. } );
-                *
-                * @param {...Object|Array} [buttons] An array of button objects or the first
-                *  button object in a list of variadic arguments.
-                */
-               addButtons: function ( buttons ) {
-                       if ( !Array.isArray( buttons ) ) {
-                               buttons = slice.call( arguments );
-                       }
-                       if ( isReady ) {
-                               buttons.forEach( function ( button ) {
-                                       insertButton( button );
-                               } );
-                       } else {
-                               // Push each button into the queue
-                               queue.push.apply( queue, buttons );
-                       }
-               },
-
-               /**
-                * Apply tagOpen/tagClose to selection in currently focused textarea.
-                *
-                * Uses `sampleText` if selection is empty.
-                *
-                * @param {string} tagOpen
-                * @param {string} tagClose
-                * @param {string} sampleText
-                */
-               insertTags: function ( tagOpen, tagClose, sampleText ) {
-                       if ( $currentFocused && $currentFocused.length ) {
-                               $currentFocused.textSelection(
-                                       'encapsulateSelection', {
-                                               pre: tagOpen,
-                                               peri: sampleText,
-                                               post: tagClose
-                                       }
-                               );
-                       }
-               }
-       };
-
-       // Legacy (for compatibility with the code previously in skins/common.edit.js)
-       mw.log.deprecate( window, 'addButton', toolbar.addButton, 'Use mw.toolbar.addButton instead.' );
-       mw.log.deprecate( window, 'insertTags', toolbar.insertTags, 'Use mw.toolbar.insertTags instead.' );
-
-       // For backwards compatibility. Used to be called from EditPage.php, maybe other places as well.
-       toolbar.init = $.noop;
-
-       // Expose API publicly
-       // @deprecated since MW 1.29
-       mw.log.deprecate( mw, 'toolbar', toolbar, null, 'mw.toolbar' );
-
-       $( function () {
-               var i, button;
-
-               // Used to determine where to insert tags
-               $currentFocused = $( '#wpTextbox1' );
-
-               // Populate the selector cache for $toolbar
-               $toolbar = $( '#toolbar' );
-
-               for ( i = 0; i < queue.length; i++ ) {
-                       button = queue[ i ];
-                       if ( Array.isArray( button ) ) {
-                               // Forwarded arguments array from mw.toolbar.addButton
-                               insertButton.apply( toolbar, button );
-                       } else {
-                               // Raw object from mw.toolbar.addButtons
-                               insertButton( button );
-                       }
-               }
-
-               // Clear queue
-               queue.length = 0;
-
-               // This causes further calls to addButton to go to insertion directly
-               // instead of to the queue.
-               // It is important that this is after the one and only loop through
-               // the queue
-               isReady = true;
-
-               // Apply to dynamically created textboxes as well as normal ones
-               $( document ).on( 'focus', 'textarea, input:text', function () {
-                       $currentFocused = $( this );
-               } );
-       } );
-
-}() );
diff --git a/resources/src/mediawiki.toolbar/toolbar.less b/resources/src/mediawiki.toolbar/toolbar.less
deleted file mode 100644 (file)
index 93ea294..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-@import 'mediawiki.mixins';
-
-#mw-editbutton-bold {
-       .background-image('images/@{button-bold}');
-}
-
-#mw-editbutton-italic {
-       .background-image('images/@{button-italic}');
-}
-
-#mw-editbutton-link {
-       .background-image('images/@{button-link}');
-}
-
-#mw-editbutton-extlink {
-       .background-image('images/@{button-extlink}');
-}
-
-#mw-editbutton-headline {
-       .background-image('images/@{button-headline}');
-}
-
-#mw-editbutton-image {
-       .background-image('images/@{button-image}');
-}
-
-#mw-editbutton-media {
-       .background-image('images/@{button-media}');
-}
-
-#mw-editbutton-nowiki {
-       .background-image('images/@{button-nowiki}');
-}
-
-// Who decided to make only this single one different than the name of the data item?
-#mw-editbutton-signature {
-       .background-image('images/@{button-sig}');
-}
-
-#mw-editbutton-hr {
-       .background-image('images/@{button-hr}');
-}
index 395f80b..1035786 100644 (file)
@@ -20,7 +20,9 @@
        line-height: 2.5;
 }
 
-.mw-widget-calendarWidget-header .oo-ui-buttonWidget {
+// Overwrite OOUI's `.oo-ui-buttonElement-frameless.oo-ui-iconElement:first-child`
+.mw-widget-calendarWidget-header .oo-ui-buttonWidget.oo-ui-iconElement {
+       margin-left: 0;
        margin-right: 0;
 }
 
index 26f347a..333b8f9 100644 (file)
                // Parent constructor
                mw.widgets.ExpiryWidget.parent.call( this, config );
 
-               // If the wiki does not want the date picker, then initialize the relative
-               // field and exit.
-               if ( config.noDatePicker ) {
-                       this.relativeField.on( 'change', function ( event ) {
-                               // Emit a change event for this widget.
-                               this.emit( 'change', event );
-                       }.bind( this ) );
-
-                       // Initialization
-                       this.$element
-                               .addClass( 'mw-widget-ExpiryWidget' )
-                               .append(
-                                       this.relativeField.$element
-                               );
-
-                       return;
-               }
-
                // Properties
                this.inputSwitch = new OO.ui.ButtonSelectWidget( {
                        tabIndex: -1,
index c256f1f..cb1281d 100644 (file)
@@ -28,6 +28,7 @@
         * @cfg {boolean} [excludeCurrentPage] Exclude the current page from suggestions
         * @cfg {boolean} [validateTitle=true] Whether the input must be a valid title
         * @cfg {boolean} [required=false] Whether the input must not be empty
+        * @cfg {boolean} [highlightSearchQuery=true] Highlight the partial query the user used for this title
         * @cfg {Object} [cache] Result cache which implements a 'set' method, taking keyed values as an argument
         * @cfg {mw.Api} [api] API object to use, creates a default mw.Api instance if not specified
         */
@@ -51,6 +52,7 @@
                this.addQueryInput = config.addQueryInput !== false;
                this.excludeCurrentPage = !!config.excludeCurrentPage;
                this.validateTitle = config.validateTitle !== undefined ? config.validateTitle : true;
+               this.highlightSearchQuery = config.highlightSearchQuery === undefined ? true : !!config.highlightSearchQuery;
                this.cache = config.cache;
                this.api = config.api || new mw.Api();
                // Supports: IE10, FF28, Chrome23
                        missing: data.missing,
                        redirect: data.redirect,
                        disambiguation: data.disambiguation,
-                       query: this.getQueryValue(),
+                       query: this.highlightSearchQuery ? this.getQueryValue() : null,
                        compare: this.compare
                };
        };
diff --git a/resources/src/mediawiki.widgets/mw.widgets.TitlesMultiselectWidget.js b/resources/src/mediawiki.widgets/mw.widgets.TitlesMultiselectWidget.js
new file mode 100644 (file)
index 0000000..71ba33f
--- /dev/null
@@ -0,0 +1,145 @@
+/*!
+ * MediaWiki Widgets - TitlesMultiselectWidget class.
+ *
+ * @copyright 2011-2015 MediaWiki Widgets Team and others; see AUTHORS.txt
+ * @license The MIT License (MIT); see LICENSE.txt
+ */
+( function () {
+
+       /**
+        * Creates an mw.widgets.TitlesMultiselectWidget object
+        *
+        * @class
+        * @extends OO.ui.MenuTagMultiselectWidget
+        * @mixins OO.ui.mixin.RequestManager
+        * @mixins OO.ui.mixin.PendingElement
+        * @mixins mw.widgets.TitleWidget
+        *
+        * @constructor
+        * @param {Object} [config] Configuration options
+        */
+       mw.widgets.TitlesMultiselectWidget = function MwWidgetsTitlesMultiselectWidget( config ) {
+               config = $.extend( true, {
+                       // Shouldn't this be handled by MenuTagMultiselectWidget?
+                       options: config.selected ? config.selected.map( function ( title ) {
+                               return {
+                                       data: title,
+                                       label: title
+                               };
+                       } ) : []
+               }, config );
+
+               // Parent constructor
+               mw.widgets.TitlesMultiselectWidget.parent.call( this, $.extend( true,
+                       {
+                               clearInputOnChoose: true,
+                               inputPosition: 'inline',
+                               allowEditTags: false
+                       },
+                       config
+               ) );
+
+               // Mixin constructors
+               mw.widgets.TitleWidget.call( this, $.extend( true, {
+                       addQueryInput: true,
+                       highlightSearchQuery: false
+               }, config ) );
+               OO.ui.mixin.RequestManager.call( this, config );
+               OO.ui.mixin.PendingElement.call( this, $.extend( true, {}, config, {
+                       $pending: this.$handle
+               } ) );
+
+               // Validate from mw.widgets.TitleWidget
+               this.input.setValidation( this.isQueryValid.bind( this ) );
+
+               if ( this.maxLength !== undefined ) {
+                       // maxLength is defined through TitleWidget parent
+                       this.input.$input.attr( 'maxlength', this.maxLength );
+               }
+
+               // Initialization
+               this.$element
+                       .addClass( 'mw-widgets-titlesMultiselectWidget' );
+
+               this.menu.$element
+                       // For consistency, use the same classes as TitleWidget
+                       // expects for menu results
+                       .addClass( 'mw-widget-titleWidget-menu' )
+                       .toggleClass( 'mw-widget-titleWidget-menu-withImages', this.showImages )
+                       .toggleClass( 'mw-widget-titleWidget-menu-withDescriptions', this.showDescriptions );
+
+               if ( 'name' in config ) {
+                       // Use this instead of <input type="hidden">, because hidden inputs do not have separate
+                       // 'value' and 'defaultValue' properties. The script on Special:Preferences
+                       // (mw.special.preferences.confirmClose) checks this property to see if a field was changed.
+                       this.hiddenInput = $( '<textarea>' )
+                               .addClass( 'oo-ui-element-hidden' )
+                               .attr( 'name', config.name )
+                               .appendTo( this.$element );
+                       // Update with preset values
+                       // Set the default value (it might be different from just being empty)
+                       this.hiddenInput.prop( 'defaultValue', this.getItems().map( function ( item ) {
+                               return item.getData();
+                       } ).join( '\n' ) );
+                       this.on( 'change', function ( items ) {
+                               this.hiddenInput.val( items.map( function ( item ) {
+                                       return item.getData();
+                               } ).join( '\n' ) );
+                               // Trigger a 'change' event as if a user edited the text
+                               // (it is not triggered when changing the value from JS code).
+                               this.hiddenInput.trigger( 'change' );
+                       }.bind( this ) );
+               }
+
+       };
+
+       /* Setup */
+
+       OO.inheritClass( mw.widgets.TitlesMultiselectWidget, OO.ui.MenuTagMultiselectWidget );
+       OO.mixinClass( mw.widgets.TitlesMultiselectWidget, OO.ui.mixin.RequestManager );
+       OO.mixinClass( mw.widgets.TitlesMultiselectWidget, OO.ui.mixin.PendingElement );
+       OO.mixinClass( mw.widgets.TitlesMultiselectWidget, mw.widgets.TitleWidget );
+
+       /* Methods */
+
+       mw.widgets.TitlesMultiselectWidget.prototype.getQueryValue = function () {
+               return this.input.getValue();
+       };
+
+       /**
+        * @inheritdoc OO.ui.MenuTagMultiselectWidget
+        */
+       mw.widgets.TitlesMultiselectWidget.prototype.onInputChange = function () {
+               var widget = this;
+
+               this.getRequestData()
+                       .then( function ( data ) {
+                               // Reset
+                               widget.menu.clearItems();
+                               widget.menu.addItems( widget.getOptionsFromData( data ) );
+                       } );
+
+               mw.widgets.TitlesMultiselectWidget.parent.prototype.onInputChange.call( this );
+       };
+
+       /**
+        * @inheritdoc OO.ui.mixin.RequestManager
+        */
+       mw.widgets.TitlesMultiselectWidget.prototype.getRequestQuery = function () {
+               return this.getQueryValue();
+       };
+
+       /**
+        * @inheritdoc OO.ui.mixin.RequestManager
+        */
+       mw.widgets.TitlesMultiselectWidget.prototype.getRequest = function () {
+               return this.getSuggestionsPromise();
+       };
+
+       /**
+        * @inheritdoc OO.ui.mixin.RequestManager
+        */
+       mw.widgets.TitlesMultiselectWidget.prototype.getRequestCacheDataFromResponse = function ( response ) {
+               return response.query || {};
+       };
+}() );
index 5483ad2..bebf4dc 100644 (file)
@@ -118,9 +118,10 @@ if ( !isCompatible() ) {
                mw.config.set( $VARS.configuration );
 
                // Process callbacks for Grade A
-               // Must be after registrations and mw.config.set, which mw.loader depends on.
                var queue = window.RLQ;
-               // Redefine push(), but keep type as array for storing callbacks that require modules.
+               // Replace RLQ placeholder from ResourceLoaderClientHtml with an implementation
+               // that executes simple callbacks, but continues to store callbacks that require
+               // modules.
                window.RLQ = [];
                /* global RLQ */
                RLQ.push = function ( fn ) {
@@ -132,7 +133,7 @@ if ( !isCompatible() ) {
                        }
                };
                while ( queue && queue[ 0 ] ) {
-                       // Re-use our push()
+                       // Re-use our new push() method
                        RLQ.push( queue.shift() );
                }
 
index 41f3192..de8ddbf 100644 (file)
@@ -93,6 +93,9 @@ $wgAutoloadClasses += [
        'MediaWiki\\Auth\\AuthenticationRequestTestCase' =>
                "$testDir/phpunit/includes/auth/AuthenticationRequestTestCase.php",
 
+       # tests/phpunit/includes/block
+       'MediaWiki\\Tests\\Block\\Restriction\\RestrictionTestCase' => "$testDir/phpunit/includes/block/Restriction/RestrictionTestCase.php",
+
        # tests/phpunit/includes/changes
        'TestRecentChangesHelper' => "$testDir/phpunit/includes/changes/TestRecentChangesHelper.php",
 
@@ -227,11 +230,7 @@ spl_autoload_register( function ( $class ) {
                'PHPUnit_Framework_Error' => 'PHPUnit\Framework\Error\Error',
        ];
 
-       if ( isset( $map[$class] ) ) {
-               $newForm = $map[$class];
-       } else {
-               $newForm = str_replace( '_', '\\', $class );
-       }
+       $newForm = $map[$class] ?? str_replace( '_', '\\', $class );
 
        if ( class_exists( $newForm ) || interface_exists( $newForm ) ) {
                // If the new class name exists, alias
index 5995012..acc5cb1 100644 (file)
@@ -49,11 +49,7 @@ class ParserTestParserHook {
                        && $argv['action'] === 'flush' && $in === null
                ) {
                        // Clear the buffer, we probably don't need to
-                       if ( isset( $parser->static_tag_buf ) ) {
-                               $tmp = $parser->static_tag_buf;
-                       } else {
-                               $tmp = '';
-                       }
+                       $tmp = $parser->static_tag_buf ?? '';
                        $parser->static_tag_buf = null;
                        return $tmp;
                } else { // wtf?
index 50d1bc9..2dc1b85 100644 (file)
Binary files a/tests/parser/extraParserTests.txt and b/tests/parser/extraParserTests.txt differ
index ac100af..2789571 100644 (file)
@@ -30,25 +30,38 @@ class ReleaseNotesTest extends MediaWikiTestCase {
                );
 
                foreach ( $notesFiles as $index => $fileName ) {
-                       $file = file( $fileName, FILE_IGNORE_NEW_LINES );
+                       $this->assertFileLength( "Release Notes", $fileName );
+               }
 
-                       $this->assertFalse(
-                               !$file,
-                               "Release Notes file '$fileName' is inaccessible."
-                       );
+               // Also test the README and similar files
+               $otherFiles = [ "$IP/COPYING", "$IP/FAQ", "$IP/INSTALL", "$IP/README", "$IP/SECURITY" ];
 
-                       $lines = count( $file );
+               foreach ( $otherFiles as $index => $fileName ) {
+                       $this->assertFileLength( "Help", $fileName );
+               }
+       }
 
-                       for ( $i = 0; $i < $lines; $i++ ) {
-                               $line = $file[$i];
+       /**
+        */
+       private function assertFileLength( $type, $fileName ) {
+               $file = file( $fileName, FILE_IGNORE_NEW_LINES );
 
-                               $this->assertLessThanOrEqual(
-                                       // FILE_IGNORE_NEW_LINES drops the \n at the EOL, so max length is 80 not 81.
-                                       80,
-                                       mb_strlen( $line ),
-                                       "Release notes file '$fileName' line $i is longer than 80 chars:\n\t'$line'"
-                               );
-                       }
+               $this->assertFalse(
+                       !$file,
+                       "$type file '$fileName' is inaccessible."
+               );
+
+               $lines = count( $file );
+
+               for ( $i = 0; $i < $lines; $i++ ) {
+                       $line = $file[$i];
+
+                       $this->assertLessThanOrEqual(
+                               // FILE_IGNORE_NEW_LINES drops the \n at the EOL, so max length is 80 not 81.
+                               80,
+                               mb_strlen( $line ),
+                               "$type file '$fileName' line $i is longer than 80 chars:\n\t'$line'"
+                       );
                }
        }
 }
index a921ee0..9954425 100644 (file)
@@ -1,5 +1,8 @@
 <?php
 
+use MediaWiki\Block\BlockRestriction;
+use MediaWiki\Block\Restriction\PageRestriction;
+
 /**
  * @group Database
  * @group Blocking
@@ -460,4 +463,263 @@ class BlockTest extends MediaWikiLangTestCase {
                }
        }
 
+       /**
+        * @covers Block::newFromRow
+        */
+       public function testNewFromRow() {
+               $badActor = $this->getTestUser()->getUser();
+               $sysop = $this->getTestSysop()->getUser();
+
+               $block = new Block( [
+                       'address' => $badActor->getName(),
+                       'user' => $badActor->getId(),
+                       'by' => $sysop->getId(),
+                       'expiry' => 'infinity',
+               ] );
+               $block->insert();
+
+               $blockQuery = Block::getQueryInfo();
+               $row = $this->db->select(
+                       $blockQuery['tables'],
+                       $blockQuery['fields'],
+                       [
+                               'ipb_id' => $block->getId(),
+                       ],
+                       __METHOD__,
+                       [],
+                       $blockQuery['joins']
+               )->fetchObject();
+
+               $block = Block::newFromRow( $row );
+               $this->assertInstanceOf( Block::class, $block );
+               $this->assertEquals( $block->getBy(), $sysop->getId() );
+               $this->assertEquals( $block->getTarget()->getName(), $badActor->getName() );
+               $block->delete();
+       }
+
+       /**
+        * @covers Block::equals
+        */
+       public function testEquals() {
+               $block = new Block();
+
+               $this->assertTrue( $block->equals( $block ) );
+
+               $partial = new Block( [
+                       'sitewide' => false,
+               ] );
+               $this->assertFalse( $block->equals( $partial ) );
+       }
+
+       /**
+        * @covers Block::isSitewide
+        */
+       public function testIsSitewide() {
+               $block = new Block();
+               $this->assertTrue( $block->isSitewide() );
+
+               $block = new Block( [
+                       'sitewide' => true,
+               ] );
+               $this->assertTrue( $block->isSitewide() );
+
+               $block = new Block( [
+                       'sitewide' => false,
+               ] );
+               $this->assertFalse( $block->isSitewide() );
+
+               $block = new Block( [
+                       'sitewide' => false,
+               ] );
+               $block->isSitewide( true );
+               $this->assertTrue( $block->isSitewide() );
+       }
+
+       /**
+        * @covers Block::getRestrictions
+        * @covers Block::setRestrictions
+        */
+       public function testRestrictions() {
+               $block = new Block();
+               $restrictions = [
+                       new PageRestriction( 0, 1 )
+               ];
+               $block->setRestrictions( $restrictions );
+
+               $this->assertSame( $restrictions, $block->getRestrictions() );
+       }
+
+       /**
+        * @covers Block::getRestrictions
+        * @covers Block::insert
+        */
+       public function testRestrictionsFromDatabase() {
+               $badActor = $this->getTestUser()->getUser();
+               $sysop = $this->getTestSysop()->getUser();
+
+               $block = new Block( [
+                       'address' => $badActor->getName(),
+                       'user' => $badActor->getId(),
+                       'by' => $sysop->getId(),
+                       'expiry' => 'infinity',
+               ] );
+               $page = $this->getExistingTestPage( 'Foo' );
+               $restriction = new PageRestriction( 0, $page->getId() );
+               $block->setRestrictions( [ $restriction ] );
+               $block->insert();
+
+               // Refresh the block from the database.
+               $block = Block::newFromID( $block->getId() );
+               $restrictions = $block->getRestrictions();
+               $this->assertCount( 1, $restrictions );
+               $this->assertTrue( $restriction->equals( $restrictions[0] ) );
+               $block->delete();
+       }
+
+       /**
+        * @covers Block::insert
+        */
+       public function testInsertExistingBlock() {
+               $badActor = $this->getTestUser()->getUser();
+               $sysop = $this->getTestSysop()->getUser();
+
+               $block = new Block( [
+                       'address' => $badActor->getName(),
+                       'user' => $badActor->getId(),
+                       'by' => $sysop->getId(),
+                       'expiry' => 'infinity',
+               ] );
+               $page = $this->getExistingTestPage( 'Foo' );
+               $restriction = new PageRestriction( 0, $page->getId() );
+               $block->setRestrictions( [ $restriction ] );
+               $block->insert();
+
+               // Insert the block again, which should result in a failur
+               $result = $block->insert();
+
+               $this->assertFalse( $result );
+
+               // Ensure that there are no restrictions where the blockId is 0.
+               $count = $this->db->selectRowCount(
+                       'ipblocks_restrictions',
+                       '*',
+                       [ 'ir_ipb_id' => 0 ],
+                       __METHOD__
+               );
+               $this->assertSame( 0, $count );
+
+               $block->delete();
+       }
+
+       /**
+        * @covers Block::preventsEdit
+        */
+       public function testPreventsEditReturnsTrueOnSitewideBlock() {
+               $user = $this->getTestUser()->getUser();
+               $block = new Block( [
+                       'expiry' => wfTimestamp( TS_MW, wfTimestamp() + ( 40 * 60 * 60 ) ),
+                       'allowUsertalk' => true,
+                       'sitewide' => true
+               ] );
+
+               $block->setTarget( $user );
+               $block->setBlocker( $this->getTestSysop()->getUser() );
+               $block->insert();
+
+               $title = $this->getExistingTestPage( 'Foo' )->getTitle();
+
+               $this->assertTrue( $block->preventsEdit( $title ) );
+
+               $block->delete();
+       }
+
+       /**
+        * @covers Block::preventsEdit
+        */
+       public function testPreventsEditOnPartialBlock() {
+               $user = $this->getTestUser()->getUser();
+               $block = new Block( [
+                       'expiry' => wfTimestamp( TS_MW, wfTimestamp() + ( 40 * 60 * 60 ) ),
+                       'allowUsertalk' => true,
+                       'sitewide' => false
+               ] );
+
+               $block->setTarget( $user );
+               $block->setBlocker( $this->getTestSysop()->getUser() );
+               $block->insert();
+
+               $pageFoo = $this->getExistingTestPage( 'Foo' );
+               $pageBar = $this->getExistingTestPage( 'Bar' );
+
+               $pageRestriction = new PageRestriction( $block->getId(), $pageFoo->getId() );
+               BlockRestriction::insert( [ $pageRestriction ] );
+
+               $this->assertTrue( $block->preventsEdit( $pageFoo->getTitle() ) );
+               $this->assertFalse( $block->preventsEdit( $pageBar->getTitle() ) );
+
+               $block->delete();
+       }
+
+       /**
+        * @covers Block::preventsEdit
+        * @dataProvider preventsEditOnUserTalkProvider
+        */
+       public function testPreventsEditOnUserTalkPage(
+               $allowUsertalk, $sitewide, $result, $blockAllowsUTEdit = true
+       ) {
+               $this->setMwGlobals( [
+                       'wgBlockAllowsUTEdit' => $blockAllowsUTEdit,
+               ] );
+
+               $user = $this->getTestUser()->getUser();
+               $block = new Block( [
+                       'expiry' => wfTimestamp( TS_MW, wfTimestamp() + ( 40 * 60 * 60 ) ),
+                       'allowUsertalk' => $allowUsertalk,
+                       'sitewide' => $sitewide
+               ] );
+
+               $block->setTarget( $user );
+               $block->setBlocker( $this->getTestSysop()->getUser() );
+               $block->insert();
+
+               $this->assertEquals( $result, $block->preventsEdit( $user->getTalkPage() ) );
+               $block->delete();
+       }
+
+       public function preventsEditOnUserTalkProvider() {
+               return [
+                       [
+                               'allowUsertalk' => false,
+                               'sitewide' => true,
+                               'result' => true,
+                       ],
+                       [
+                               'allowUsertalk' => true,
+                               'sitewide' => true,
+                               'result' => false,
+                       ],
+                       [
+                               'allowUsertalk' => true,
+                               'sitewide' => false,
+                               'result' => false,
+                       ],
+                       [
+                               'allowUsertalk' => false,
+                               'sitewide' => false,
+                               'result' => true,
+                       ],
+                       [
+                               'allowUsertalk' => true,
+                               'sitewide' => true,
+                               'result' => true,
+                               'blockAllowsUTEdit' => false
+                       ],
+                       [
+                               'allowUsertalk' => true,
+                               'sitewide' => false,
+                               'result' => true,
+                               'blockAllowsUTEdit' => false
+                       ],
+               ];
+       }
 }
index 7ce4d1e..fc317b7 100644 (file)
@@ -46,6 +46,25 @@ class ExtraParserTest extends MediaWikiTestCase {
                        $this->parser->parse( $longLine, $title, $options )->getText( [ 'unwrap' => true ] ) );
        }
 
+       /**
+        * @covers Parser::braceSubstitution
+        * @covers SpecialPageFactory::capturePath
+        */
+       public function testSpecialPageTransclusionRestoresGlobalState() {
+               $text = "{{Special:ApiHelp/help}}";
+               $title = Title::newFromText( 'testSpecialPageTransclusionRestoresGlobalState' );
+               $options = ParserOptions::newFromUser( new User() );
+
+               RequestContext::getMain()->setTitle( $title );
+               RequestContext::getMain()->getWikiPage()->CustomTestProp = true;
+
+               $parsed = $this->parser->parse( $text, $title, $options )->getText();
+               $this->assertContains( 'apihelp-header', $parsed );
+
+               // Verify that this property wasn't wiped out by the parse
+               $this->assertTrue( RequestContext::getMain()->getWikiPage()->CustomTestProp );
+       }
+
        /**
         * Test the parser entry points
         * @covers Parser::parse
index c838fc3..ab9a472 100644 (file)
@@ -11,6 +11,7 @@ use MediaWiki\Services\ServiceDisabledException;
  * @group MediaWiki
  */
 class MediaWikiServicesTest extends MediaWikiTestCase {
+       private $deprecatedServices = [ 'CryptRand' ];
 
        /**
         * @return Config
@@ -276,6 +277,7 @@ class MediaWikiServicesTest extends MediaWikiTestCase {
                        $getterCases[$name] = [
                                'get' . $service,
                                $class,
+                               in_array( $service, $this->deprecatedServices )
                        ];
                }
 
@@ -285,7 +287,11 @@ class MediaWikiServicesTest extends MediaWikiTestCase {
        /**
         * @dataProvider provideGetters
         */
-       public function testGetters( $getter, $type ) {
+       public function testGetters( $getter, $type, $isDeprecated = false ) {
+               if ( $isDeprecated ) {
+                       $this->hideDeprecated( MediaWikiServices::class . "::$getter" );
+               }
+
                // Test against the default instance, since the dummy will not know the default services.
                $services = MediaWikiServices::getInstance();
                $service = $services->$getter();
index 53e6f46..e572be2 100644 (file)
@@ -1430,6 +1430,7 @@ class OutputPageTest extends MediaWikiTestCase {
         * @dataProvider provideAddWikiText
         * @covers OutputPage::addWikiText
         * @covers OutputPage::addWikiTextAsInterface
+        * @covers OutputPage::wrapWikiTextAsInterface
         * @covers OutputPage::addWikiTextAsContent
         * @covers OutputPage::addWikiTextWithTitle
         * @covers OutputPage::addWikiTextTitle
@@ -1441,10 +1442,13 @@ class OutputPageTest extends MediaWikiTestCase {
                $op = $this->newInstance();
                $this->assertSame( '', $op->getHTML() );
 
+               $this->hideDeprecated( 'OutputPage::addWikiText' );
                $this->hideDeprecated( 'OutputPage::addWikiTextTitle' );
                $this->hideDeprecated( 'OutputPage::addWikiTextWithTitle' );
                $this->hideDeprecated( 'OutputPage::addWikiTextTidy' );
                $this->hideDeprecated( 'OutputPage::addWikiTextTitleTidy' );
+               $this->hideDeprecated( 'disabling tidy' );
+
                if ( in_array(
                        $method,
                        [ 'addWikiTextWithTitle', 'addWikiTextTitleTidy', 'addWikiTextTitle' ]
@@ -1545,6 +1549,21 @@ class OutputPageTest extends MediaWikiTestCase {
                                        '<div class="mw-editintro">' . "Some page\n</div>"
                                ],
                        ],
+                       'wrapWikiTextAsInterface' => [
+                               'Simple' => [
+                                       [ 'wrapperClass', 'text' ],
+                                       "<div class=\"wrapperClass\"><p>text\n</p></div>"
+                               ], 'Spurious </div>' => [
+                                       [ 'wrapperClass', 'text</div><div>more' ],
+                                       "<div class=\"wrapperClass\"><p>text</p><div>more\n</div></div>"
+                               ], 'Extra newlines would break <p> wrappers' => [
+                                       [ 'two classes', "1\n\n2\n\n3" ],
+                                       "<div class=\"two classes\"><p>1\n</p><p>2\n</p><p>3\n</p></div>"
+                               ], 'Other unclosed tags' => [
+                                       [ 'error', 'a<b>c<i>d' ],
+                                       "<div class=\"error\"><p>a<b>c<i>d\n</i></b></p></div>"
+                               ],
+                       ],
                ];
 
                // Test all the others on addWikiTextTitle as well
@@ -1598,6 +1617,7 @@ class OutputPageTest extends MediaWikiTestCase {
         * @covers OutputPage::addWikiText
         */
        public function testAddWikiTextNoTitle() {
+               $this->hideDeprecated( 'OutputPage::addWikiText' );
                $this->setExpectedException( MWException::class, 'Title is null' );
 
                $op = $this->newInstance( [], null, 'notitle' );
@@ -1634,9 +1654,8 @@ class OutputPageTest extends MediaWikiTestCase {
                $op = $this->newInstance();
                $this->assertSame( '', $op->getHTML() );
                $op->addWikiMsg( 'parentheses', "<b>a" );
-               // This is known to be bad unbalanced HTML; this will be fixed
-               // by I743f4185a03403f8d9b9db010ff1ee4e9342e062 (T198214)
-               $this->assertSame( "<p>(<b>a)\n</p>", $op->getHTML() );
+               // The input is bad unbalanced HTML, but the output is tidied
+               $this->assertSame( "<p>(<b>a)\n</b></p>", $op->getHTML() );
        }
 
        /**
@@ -1649,9 +1668,8 @@ class OutputPageTest extends MediaWikiTestCase {
                $op = $this->newInstance();
                $this->assertSame( '', $op->getHTML() );
                $op->wrapWikiMsg( '[$1]', [ 'parentheses', "<b>a" ] );
-               // This is known to be bad unbalanced HTML; this will be fixed
-               // by I743f4185a03403f8d9b9db010ff1ee4e9342e062 (T198214)
-               $this->assertSame( "<p>[(<b>a)]\n</p>", $op->getHTML() );
+               // The input is bad unbalanced HTML, but the output is tidied
+               $this->assertSame( "<p>[(<b>a)]\n</b></p>", $op->getHTML() );
        }
 
        /**
@@ -1808,28 +1826,44 @@ class OutputPageTest extends MediaWikiTestCase {
 
        public function provideParse() {
                return [
-                       'List at start of line' => [
-                               [ '* List' ],
+                       'List at start of line (content)' => [
+                               [ '* List', true, false ],
                                "<div class=\"mw-parser-output\"><ul><li>List</li></ul>\n</div>",
+                               "<ul><li>List</li></ul>\n",
                        ],
-                       'List not at start' => [
-                               [ "* ''Not'' list", false ],
+                       'List at start of line (interface)' => [
+                               [ '* List', true, true ],
+                               "<ul><li>List</li></ul>\n",
+                       ],
+                       'List not at start (content)' => [
+                               [ "* ''Not'' list", false, false ],
                                '<div class="mw-parser-output">* <i>Not</i> list</div>',
+                               '* <i>Not</i> list',
                        ],
-                       'Interface' => [
+                       'List not at start (interface)' => [
+                               [ "* ''Not'' list", false, true ],
+                               '* <i>Not</i> list',
+                       ],
+                       'Interface message' => [
                                [ "''Italic''", true, true ],
                                "<p><i>Italic</i>\n</p>",
                                '<i>Italic</i>',
                        ],
-                       'formatnum' => [
-                               [ '{{formatnum:123456.789}}' ],
+                       'formatnum (content)' => [
+                               [ '{{formatnum:123456.789}}', true, false ],
                                "<div class=\"mw-parser-output\"><p>123,456.789\n</p></div>",
+                               "123,456.789",
                        ],
-                       'Language' => [
+                       'formatnum (interface)' => [
+                               [ '{{formatnum:123456.789}}', true, true ],
+                               "<p>123,456.789\n</p>",
+                               "123,456.789",
+                       ],
+                       'Language (content)' => [
                                [ '{{formatnum:123456.789}}', true, false, Language::factory( 'is' ) ],
                                "<div class=\"mw-parser-output\"><p>123.456,789\n</p></div>",
                        ],
-                       'Language with interface' => [
+                       'Language (interface)' => [
                                [ '{{formatnum:123456.789}}', true, true, Language::factory( 'is' ) ],
                                "<p>123.456,789\n</p>",
                                '123.456,789',
@@ -1838,6 +1872,79 @@ class OutputPageTest extends MediaWikiTestCase {
                                [ '== Header ==' ],
                                '<div class="mw-parser-output"><h2><span class="mw-headline" id="Header">' .
                                        "Header</span></h2>\n</div>",
+                               '<h2><span class="mw-headline" id="Header">Header</span></h2>' .
+                                       "\n",
+                       ]
+               ];
+       }
+
+       /**
+        * @dataProvider provideParseAs
+        * @covers OutputPage::parseAsContent
+        * @param array $args To pass to parse()
+        * @param string $expectedHTML Expected return value for parseAsContent()
+        * @param string $expectedHTML Expected return value for parseInlineAsInterface(), if different
+        */
+       public function testParseAsContent(
+               array $args, $expectedHTML, $expectedHTMLInline = null
+       ) {
+               $op = $this->newInstance();
+               $this->assertSame( $expectedHTML, $op->parseAsContent( ...$args ) );
+       }
+
+       /**
+        * @dataProvider provideParseAs
+        * @covers OutputPage::parseAsInterface
+        * @param array $args To pass to parse()
+        * @param string $expectedHTML Expected return value for parseAsInterface()
+        * @param string $expectedHTML Expected return value for parseInlineAsInterface(), if different
+        */
+       public function testParseAsInterface(
+               array $args, $expectedHTML, $expectedHTMLInline = null
+       ) {
+               $op = $this->newInstance();
+               $this->assertSame( $expectedHTML, $op->parseAsInterface( ...$args ) );
+       }
+
+       /**
+        * @dataProvider provideParseAs
+        * @covers OutputPage::parseInlineAsInterface
+        */
+       public function testParseInlineAsInterface(
+               array $args, $expectedHTML, $expectedHTMLInline = null
+       ) {
+               $op = $this->newInstance();
+               $this->assertSame(
+                       $expectedHTMLInline ?? $expectedHTML,
+                       $op->parseInlineAsInterface( ...$args )
+               );
+       }
+
+       public function provideParseAs() {
+               return [
+                       'List at start of line' => [
+                               [ '* List', true ],
+                               "<ul><li>List</li></ul>\n",
+                       ],
+                       'List not at start' => [
+                               [ "* ''Not'' list", false ],
+                               '<p>* <i>Not</i> list</p>',
+                               '* <i>Not</i> list',
+                       ],
+                       'Italics' => [
+                               [ "''Italic''", true ],
+                               "<p><i>Italic</i>\n</p>",
+                               '<i>Italic</i>',
+                       ],
+                       'formatnum' => [
+                               [ '{{formatnum:123456.789}}', true ],
+                               "<p>123,456.789\n</p>",
+                               "123,456.789",
+                       ],
+                       'No section edit links' => [
+                               [ '== Header ==' ],
+                               '<h2><span class="mw-headline" id="Header">Header</span></h2>' .
+                                       "\n",
                        ]
                ];
        }
@@ -1846,20 +1953,47 @@ class OutputPageTest extends MediaWikiTestCase {
         * @covers OutputPage::parse
         */
        public function testParseNullTitle() {
-               $this->setExpectedException( MWException::class, 'Empty $mTitle in OutputPage::parse' );
+               $this->setExpectedException( MWException::class, 'Empty $mTitle in OutputPage::parseInternal' );
                $op = $this->newInstance( [], null, 'notitle' );
                $op->parse( '' );
        }
 
        /**
-        * @covers OutputPage::parse
+        * @covers OutputPage::parseInline
         */
        public function testParseInlineNullTitle() {
-               $this->setExpectedException( MWException::class, 'Empty $mTitle in OutputPage::parse' );
+               $this->setExpectedException( MWException::class, 'Empty $mTitle in OutputPage::parseInternal' );
                $op = $this->newInstance( [], null, 'notitle' );
                $op->parseInline( '' );
        }
 
+       /**
+        * @covers OutputPage::parseAsContent
+        */
+       public function testParseAsContentNullTitle() {
+               $this->setExpectedException( MWException::class, 'Empty $mTitle in OutputPage::parseInternal' );
+               $op = $this->newInstance( [], null, 'notitle' );
+               $op->parseAsContent( '' );
+       }
+
+       /**
+        * @covers OutputPage::parseAsInterface
+        */
+       public function testParseAsInterfaceNullTitle() {
+               $this->setExpectedException( MWException::class, 'Empty $mTitle in OutputPage::parseInternal' );
+               $op = $this->newInstance( [], null, 'notitle' );
+               $op->parseAsInterface( '' );
+       }
+
+       /**
+        * @covers OutputPage::parseInlineAsInterface
+        */
+       public function testParseInlineAsInterfaceNullTitle() {
+               $this->setExpectedException( MWException::class, 'Empty $mTitle in OutputPage::parseInternal' );
+               $op = $this->newInstance( [], null, 'notitle' );
+               $op->parseInlineAsInterface( '' );
+       }
+
        /**
         * @covers OutputPage::setCdnMaxage
         * @covers OutputPage::lowerCdnMaxage
index 060099e..dbe4d4e 100644 (file)
@@ -25,6 +25,11 @@ class MutableRevisionRecordTest extends MediaWikiTestCase {
 
        use RevisionRecordTests;
 
+       function setUp() {
+               Title::clearCaches();
+               parent::setUp();
+       }
+
        /**
         * @param array $rowOverrides
         *
index cc166a3..e5e5551 100644 (file)
@@ -1601,4 +1601,38 @@ abstract class RevisionDbTestBase extends MediaWikiTestCase {
                $this->assertSame( $expected, $rev->getTextId() );
        }
 
+       public function provideGetRevisionText() {
+               yield [
+                       [ 'text' ]
+               ];
+       }
+
+       /**
+        * @dataProvider provideGetRevisionText
+        * @covers Revision::getRevisionText
+        */
+       public function testGetRevisionText( array $queryInfoOptions, array $queryInfoExtra = [] ) {
+               $rev = $this->testPage->getRevisionRecord();
+
+               $queryInfo = Revision::getQueryInfo( $queryInfoOptions );
+               $queryInfo['tables'] = array_merge( $queryInfo['tables'], $queryInfoExtra['tables'] ?? [] );
+               $queryInfo['fields'] = array_merge( $queryInfo['fields'], $queryInfoExtra['fields'] ?? [] );
+               $queryInfo['joins'] = array_merge( $queryInfo['joins'], $queryInfoExtra['joins'] ?? [] );
+
+               $conds = [ 'rev_id' => $rev->getId() ];
+               $row = $this->db->selectRow(
+                       $queryInfo['tables'],
+                       $queryInfo['fields'],
+                       $conds,
+                       __METHOD__,
+                       [],
+                       $queryInfo['joins']
+               );
+
+               $expected = $rev->getContent( SlotRecord::MAIN )->serialize();
+
+               $this->hideDeprecated( 'Revision::getRevisionText (MCR without SCHEMA_COMPAT_WRITE_OLD)' );
+               $this->assertSame( $expected, Revision::getRevisionText( $row ) );
+       }
+
 }
index d6ac35b..2da2275 100644 (file)
@@ -46,4 +46,10 @@ class RevisionMcrDbTest extends RevisionDbTestBase {
                yield [ $rec, 789 ];
        }
 
+       public function provideGetRevisionText() {
+               yield 'no text table' => [
+                       []
+               ];
+       }
+
 }
index df54f56..64de854 100644 (file)
@@ -42,4 +42,18 @@ class RevisionMcrReadNewDbTest extends RevisionDbTestBase {
                yield [ $rec, 789 ];
        }
 
+       public function provideGetRevisionText() {
+               yield 'no text table' => [
+                       []
+               ];
+               yield 'force text table' => [
+                       [],
+                       [
+                               'tables' => [ 'text' ],
+                               'fields' => [ 'old_id', 'old_text', 'old_flags', 'rev_text_id' ],
+                               'joins' => [ 'text' => [ 'INNER JOIN', 'old_id=rev_text_id' ] ]
+                       ]
+               ];
+       }
+
 }
index 5868b8d..c053104 100644 (file)
@@ -289,16 +289,6 @@ class RevisionTest extends MediaWikiTestCase {
                Wikimedia\restoreWarnings();
        }
 
-       public function provideGetRevisionText() {
-               yield 'Generic test' => [
-                       'This is a goat of revision text.',
-                       [
-                               'old_flags' => '',
-                               'old_text' => 'This is a goat of revision text.',
-                       ],
-               ];
-       }
-
        public function provideGetId() {
                yield [
                        [],
@@ -365,6 +355,20 @@ class RevisionTest extends MediaWikiTestCase {
                $this->assertSame( $expected, $rev->getParentId() );
        }
 
+       public function provideGetRevisionText() {
+               yield 'Generic test' => [
+                       'This is a goat of revision text.',
+                       (object)[
+                               'old_flags' => '',
+                               'old_text' => 'This is a goat of revision text.',
+                       ],
+               ];
+               yield 'garbage in, garbage out' => [
+                       false,
+                       false,
+               ];
+       }
+
        /**
         * @covers Revision::getRevisionText
         * @dataProvider provideGetRevisionText
@@ -372,13 +376,13 @@ class RevisionTest extends MediaWikiTestCase {
        public function testGetRevisionText( $expected, $rowData, $prefix = 'old_', $wiki = false ) {
                $this->assertEquals(
                        $expected,
-                       Revision::getRevisionText( (object)$rowData, $prefix, $wiki ) );
+                       Revision::getRevisionText( $rowData, $prefix, $wiki ) );
        }
 
        public function provideGetRevisionTextWithZlibExtension() {
                yield 'Generic gzip test' => [
                        'This is a small goat of revision text.',
-                       [
+                       (object)[
                                'old_flags' => 'gzip',
                                'old_text' => gzdeflate( 'This is a small goat of revision text.' ),
                        ],
@@ -397,7 +401,7 @@ class RevisionTest extends MediaWikiTestCase {
        public function provideGetRevisionTextWithZlibExtension_badData() {
                yield 'Generic gzip test' => [
                        'This is a small goat of revision text.',
-                       [
+                       (object)[
                                'old_flags' => 'gzip',
                                'old_text' => 'DEAD BEEF',
                        ],
@@ -481,7 +485,7 @@ class RevisionTest extends MediaWikiTestCase {
                        "Wiki est l'\xc3\xa9cole superieur !",
                        'fr',
                        'iso-8859-1',
-                       [
+                       (object)[
                                'old_flags' => 'utf-8',
                                'old_text' => "Wiki est l'\xc3\xa9cole superieur !",
                        ]
@@ -490,7 +494,7 @@ class RevisionTest extends MediaWikiTestCase {
                        "Wiki est l'\xc3\xa9cole superieur !",
                        'fr',
                        'iso-8859-1',
-                       [
+                       (object)[
                                'old_flags' => '',
                                'old_text' => "Wiki est l'\xe9cole superieur !",
                        ]
@@ -519,7 +523,7 @@ class RevisionTest extends MediaWikiTestCase {
                        "Wiki est l'\xc3\xa9cole superieur !",
                        'fr',
                        'iso-8859-1',
-                       [
+                       (object)[
                                'old_flags' => 'gzip,utf-8',
                                'old_text' => gzdeflate( "Wiki est l'\xc3\xa9cole superieur !" ),
                        ]
@@ -528,7 +532,7 @@ class RevisionTest extends MediaWikiTestCase {
                        "Wiki est l'\xc3\xa9cole superieur !",
                        'fr',
                        'iso-8859-1',
-                       [
+                       (object)[
                                'old_flags' => 'gzip',
                                'old_text' => gzdeflate( "Wiki est l'\xe9cole superieur !" ),
                        ]
@@ -729,13 +733,6 @@ class RevisionTest extends MediaWikiTestCase {
                );
        }
 
-       /**
-        * @covers Revision::getRevisionText
-        */
-       public function testGetRevisionText_returnsFalseWhenNoTextField() {
-               $this->assertFalse( Revision::getRevisionText( new stdClass() ) );
-       }
-
        public function provideTestGetRevisionText_returnsDecompressedTextFieldWhenNotExternal() {
                yield 'Just text' => [
                        (object)[ 'old_text' => 'SomeText' ],
index 715d469..44d440f 100644 (file)
@@ -352,4 +352,9 @@ class TitleMethodsTest extends MediaWikiLangTestCase {
                $this->assertNotSame( $title1, $title2, 'title cache should be empty' );
                $this->assertEquals( 0, $linkCache->getGoodLinkID( 'Foo' ), 'link cache should be empty' );
        }
+
+       function tearDown() {
+               Title::clearCaches();
+               parent::tearDown();
+       }
 }
index 5aa24e5..11b9c01 100644 (file)
@@ -969,5 +969,22 @@ class TitlePermissionTest extends MediaWikiLangTestCase {
                                'Useruser', 'test', '23:00, 31 December 1969', '127.0.8.1',
                                $wgLang->timeanddate( wfTimestamp( TS_MW, $now ), true ) ] ],
                        $this->title->getUserPermissionsErrors( 'move-target', $this->user ) );
+
+               // partial block message test
+               $this->user->mBlockedby = $this->user->getName();
+               $this->user->mBlock = new Block( [
+                       'address' => '127.0.8.1',
+                       'by' => $this->user->getId(),
+                       'reason' => 'no reason given',
+                       'timestamp' => $now,
+                       'sitewide' => false,
+                       'expiry' => 10,
+               ] );
+
+               $this->assertEquals( [ [ 'blockedtext-partial',
+                               '[[User:Useruser|Useruser]]', 'no reason given', '127.0.0.1',
+                               'Useruser', null, '23:00, 31 December 1969', '127.0.8.1',
+                               $wgLang->timeanddate( wfTimestamp( TS_MW, $now ), true ) ] ],
+                       $this->title->getUserPermissionsErrors( 'move-target', $this->user ) );
        }
 }
index 07e861f..563d5e3 100644 (file)
@@ -233,6 +233,26 @@ class ApiBlockTest extends ApiTestCase {
                $this->doBlock( [ 'expiry' => '' ] );
        }
 
+       public function testBlockWithRestrictions() {
+               $this->setMwGlobals( [
+                       'wgEnablePartialBlocks' => true,
+               ] );
+
+               $title = 'Foo';
+               $page = $this->getExistingTestPage( $title );
+
+               $this->doBlock( [
+                       'partial' => true,
+                       'pagerestrictions' => $title,
+               ] );
+
+               $block = Block::newFromTarget( $this->mUser->getName() );
+
+               $this->assertFalse( $block->isSitewide() );
+               $this->assertCount( 1, $block->getRestrictions() );
+               $this->assertEquals( $title, $block->getRestrictions()[0]->getTitle()->getText() );
+       }
+
        /**
         * @expectedException ApiUsageException
         * @expectedExceptionMessage The "token" parameter must be set
@@ -249,4 +269,50 @@ class ApiBlockTest extends ApiTestCase {
                        self::$users['sysop']->getUser()
                );
        }
+
+       /**
+        * @expectedException ApiUsageException
+        * @expectedExceptionMessage Invalid value "127.0.0.1/64" for user parameter "user".
+        */
+       public function testBlockWithLargeRange() {
+               $tokens = $this->getTokens();
+
+               $this->doApiRequest(
+                       [
+                               'action' => 'block',
+                               'user' => '127.0.0.1/64',
+                               'reason' => 'Some reason',
+                               'token' => $tokens['blocktoken'],
+                       ],
+                       null,
+                       false,
+                       self::$users['sysop']->getUser()
+               );
+       }
+
+       /**
+        * @expectedException ApiUsageException
+        * @expectedExceptionMessage "pagerestrictions" may not be over 10 (set to 11) for bots or sysops.
+        */
+       public function testBlockingToManyRestrictions() {
+               $this->setMwGlobals( [
+                       'wgEnablePartialBlocks' => true,
+               ] );
+
+               $tokens = $this->getTokens();
+
+               $this->doApiRequest(
+                       [
+                               'action' => 'block',
+                               'user' => $this->mUser->getName(),
+                               'reason' => 'Some reason',
+                               'partial' => true,
+                               'pagerestrictions' => 'One|Two|Three|Four|Five|Six|Seven|Eight|Nine|Ten|Eleven',
+                               'token' => $tokens['blocktoken'],
+                       ],
+                       null,
+                       false,
+                       self::$users['sysop']->getUser()
+               );
+       }
 }
diff --git a/tests/phpunit/includes/api/ApiQueryBlocksTest.php b/tests/phpunit/includes/api/ApiQueryBlocksTest.php
new file mode 100644 (file)
index 0000000..dc7d450
--- /dev/null
@@ -0,0 +1,157 @@
+<?php
+
+use MediaWiki\Block\Restriction\PageRestriction;
+
+/**
+ * @group API
+ * @group Database
+ * @group medium
+ *
+ * @covers ApiQueryBlocks
+ */
+class ApiQueryBlocksTest extends ApiTestCase {
+
+       protected $tablesUsed = [
+               'ipblocks',
+               'ipblocks_restrictions',
+       ];
+
+       public function testExecute() {
+               list( $data ) = $this->doApiRequest( [
+                       'action' => 'query',
+                       'list' => 'blocks',
+               ] );
+               $this->assertEquals( [ 'batchcomplete' => true, 'query' => [ 'blocks' => [] ] ], $data );
+       }
+
+       public function testExecuteBlock() {
+               $badActor = $this->getTestUser()->getUser();
+               $sysop = $this->getTestSysop()->getUser();
+
+               $block = new Block( [
+                       'address' => $badActor->getName(),
+                       'user' => $badActor->getId(),
+                       'by' => $sysop->getId(),
+                       'expiry' => 'infinity',
+               ] );
+
+               $block->insert();
+
+               list( $data ) = $this->doApiRequest( [
+                       'action' => 'query',
+                       'list' => 'blocks',
+               ] );
+               $this->arrayHasKey( 'query', $data );
+               $this->arrayHasKey( 'blocks', $data['query'] );
+               $this->assertCount( 1, $data['query']['blocks'] );
+               $subset = [
+                       'id' => $block->getId(),
+                       'user' => $badActor->getName(),
+                       'expiry' => $block->getExpiry(),
+               ];
+               $this->assertArraySubset( $subset, $data['query']['blocks'][0] );
+       }
+
+       public function testExecuteSitewide() {
+               $badActor = $this->getTestUser()->getUser();
+               $sysop = $this->getTestSysop()->getUser();
+
+               $block = new Block( [
+                       'address' => $badActor->getName(),
+                       'user' => $badActor->getId(),
+                       'by' => $sysop->getId(),
+                       'ipb_expiry' => 'infinity',
+                       'ipb_sitewide' => 1,
+               ] );
+
+               $block->insert();
+
+               list( $data ) = $this->doApiRequest( [
+                       'action' => 'query',
+                       'list' => 'blocks',
+               ] );
+               $this->arrayHasKey( 'query', $data );
+               $this->arrayHasKey( 'blocks', $data['query'] );
+               $this->assertCount( 1, $data['query']['blocks'] );
+               $subset = [
+                       'id' => $block->getId(),
+                       'user' => $badActor->getName(),
+                       'expiry' => $block->getExpiry(),
+                       'partial' => !$block->isSitewide(),
+               ];
+               $this->assertArraySubset( $subset, $data['query']['blocks'][0] );
+       }
+
+       public function testExecuteRestrictions() {
+               $badActor = $this->getTestUser()->getUser();
+               $sysop = $this->getTestSysop()->getUser();
+
+               $block = new Block( [
+                       'address' => $badActor->getName(),
+                       'user' => $badActor->getId(),
+                       'by' => $sysop->getId(),
+                       'expiry' => 'infinity',
+                       'sitewide' => 0,
+               ] );
+
+               $block->insert();
+
+               $subset = [
+                       'id' => $block->getId(),
+                       'user' => $badActor->getName(),
+                       'expiry' => $block->getExpiry(),
+               ];
+
+               $title = 'Lady Macbeth';
+               $pageData = $this->insertPage( $title );
+               $pageId = $pageData['id'];
+
+               $this->db->insert( 'ipblocks_restrictions', [
+                       'ir_ipb_id' => $block->getId(),
+                       'ir_type' => PageRestriction::TYPE_ID,
+                       'ir_value' => $pageId,
+               ] );
+               $this->db->insert( 'ipblocks_restrictions', [
+                       'ir_ipb_id' => $block->getId(),
+                       'ir_type' => 2,
+                       'ir_value' => 3,
+               ] );
+
+               // Test without requesting restrictions.
+               list( $data ) = $this->doApiRequest( [
+                       'action' => 'query',
+                       'list' => 'blocks',
+               ] );
+               $this->arrayHasKey( 'query', $data );
+               $this->arrayHasKey( 'blocks', $data['query'] );
+               $this->assertCount( 1, $data['query']['blocks'] );
+               $flagSubset = array_merge( $subset, [
+                       'partial' => !$block->isSitewide(),
+               ] );
+               $this->assertArraySubset( $flagSubset, $data['query']['blocks'][0] );
+               $this->assertArrayNotHasKey( 'restrictions', $data['query']['blocks'][0] );
+
+               // Test requesting the restrictions.
+               list( $data ) = $this->doApiRequest( [
+                       'action' => 'query',
+                       'list' => 'blocks',
+                       'bkprop' => 'id|user|expiry|restrictions'
+               ] );
+               $this->arrayHasKey( 'query', $data );
+               $this->arrayHasKey( 'blocks', $data['query'] );
+               $this->assertCount( 1, $data['query']['blocks'] );
+               $restrictionsSubset = array_merge( $subset, [
+                       'restrictions' => [
+                               'pages' => [
+                                       [
+                                               'id' => $pageId,
+                                               'ns' => 0,
+                                               'title' => $title,
+                                       ],
+                               ],
+                       ],
+               ] );
+               $this->assertArraySubset( $restrictionsSubset, $data['query']['blocks'][0] );
+               $this->assertArrayNotHasKey( 'partial', $data['query']['blocks'][0] );
+       }
+}
index 80043da..3aaad48 100644 (file)
@@ -107,7 +107,7 @@ class ApiQueryInfoTest extends ApiTestCase {
                        'user' => $badActor->getId(),
                        'by' => $sysop->getId(),
                        'expiry' => 'infinity',
-                       'sitewide' => 0,
+                       'sitewide' => 1,
                        'enableAutoblock' => true,
                ] );
 
diff --git a/tests/phpunit/includes/api/ApiQueryUserInfoTest.php b/tests/phpunit/includes/api/ApiQueryUserInfoTest.php
new file mode 100644 (file)
index 0000000..7dcb75c
--- /dev/null
@@ -0,0 +1,47 @@
+<?php
+
+/**
+ * @group medium
+ * @covers ApiQueryUserInfo
+ */
+class ApiQueryUserInfoTest extends ApiTestCase {
+       public function testGetBlockInfo() {
+               $apiQueryUserInfo = new ApiQueryUserInfo(
+                       new ApiQuery( new ApiMain( $this->apiContext ), 'userinfo' ),
+                       'userinfo'
+               );
+
+               $block = new Block();
+               $info = $apiQueryUserInfo->getBlockInfo( $block );
+               $subset = [
+                       'blockid' => null,
+                       'blockedby' => '',
+                       'blockedbyid' => 0,
+                       'blockreason' => '',
+                       'blockexpiry' => 'infinite',
+                       'blockpartial' => false,
+               ];
+               $this->assertArraySubset( $subset, $info );
+       }
+
+       public function testGetBlockInfoPartial() {
+               $apiQueryUserInfo = new ApiQueryUserInfo(
+                       new ApiQuery( new ApiMain( $this->apiContext ), 'userinfo' ),
+                       'userinfo'
+               );
+
+               $block = new Block( [
+                       'sitewide' => false,
+               ] );
+               $info = $apiQueryUserInfo->getBlockInfo( $block );
+               $subset = [
+                       'blockid' => null,
+                       'blockedby' => '',
+                       'blockedbyid' => 0,
+                       'blockreason' => '',
+                       'blockexpiry' => 'infinite',
+                       'blockpartial' => true,
+               ];
+               $this->assertArraySubset( $subset, $info );
+       }
+}
index 61512d5..5ef3b04 100644 (file)
@@ -364,6 +364,7 @@ class ApiStashEditTest extends ApiTestCase {
                // Now let's also increment our editcount
                $this->editPage( ucfirst( __FUNCTION__ ), '' );
 
+               $user->clearInstanceCache();
                $this->assertFalse( $this->doCheckCache( $user ),
                        "Cache should be invalidated when it's old and the user has an intervening edit" );
        }
diff --git a/tests/phpunit/includes/auth/LegacyHookPreAuthenticationProviderTest.php b/tests/phpunit/includes/auth/LegacyHookPreAuthenticationProviderTest.php
deleted file mode 100644 (file)
index 4b89d25..0000000
+++ /dev/null
@@ -1,375 +0,0 @@
-<?php
-
-namespace MediaWiki\Auth;
-
-use MediaWiki\MediaWikiServices;
-
-/**
- * @group AuthManager
- * @group Database
- * @covers MediaWiki\Auth\LegacyHookPreAuthenticationProvider
- */
-class LegacyHookPreAuthenticationProviderTest extends \MediaWikiTestCase {
-       /**
-        * Get an instance of the provider
-        * @return LegacyHookPreAuthenticationProvider
-        */
-       protected function getProvider() {
-               $request = $this->getMockBuilder( \FauxRequest::class )
-                       ->setMethods( [ 'getIP' ] )->getMock();
-               $request->expects( $this->any() )->method( 'getIP' )->will( $this->returnValue( '127.0.0.42' ) );
-
-               $manager = new AuthManager(
-                       $request,
-                       MediaWikiServices::getInstance()->getMainConfig()
-               );
-
-               $provider = new LegacyHookPreAuthenticationProvider();
-               $provider->setManager( $manager );
-               $provider->setLogger( new \Psr\Log\NullLogger() );
-               $provider->setConfig( new \HashConfig( [
-                       'PasswordAttemptThrottle' => [ 'count' => 23, 'seconds' => 42 ],
-               ] ) );
-               return $provider;
-       }
-
-       /**
-        * Sets a mock on a hook
-        * @param string $hook
-        * @param object $expect From $this->once(), $this->never(), etc.
-        * @return object $mock->expects( $expect )->method( ... ).
-        */
-       protected function hook( $hook, $expect ) {
-               $mock = $this->getMockBuilder( __CLASS__ )->setMethods( [ "on$hook" ] )->getMock();
-               $this->mergeMwGlobalArrayValue( 'wgHooks', [
-                       $hook => [ $mock ],
-               ] );
-               $mockClass = get_class( $mock );
-               $this->hideDeprecated( "$hook hook (used in $mockClass::on$hook)" );
-               return $mock->expects( $expect )->method( "on$hook" );
-       }
-
-       /**
-        * Unsets a hook
-        * @param string $hook
-        */
-       protected function unhook( $hook ) {
-               $this->mergeMwGlobalArrayValue( 'wgHooks', [
-                       $hook => [],
-               ] );
-       }
-
-       // Stubs for hooks taking reference parameters
-       public function onLoginUserMigrated( $user, &$msg ) {
-       }
-       public function onAbortLogin( $user, $password, &$abort, &$msg ) {
-       }
-       public function onAbortNewAccount( $user, &$abortError, &$abortStatus ) {
-       }
-       public function onAbortAutoAccount( $user, &$abortError ) {
-       }
-
-       /**
-        * @dataProvider provideTestForAuthentication
-        * @param string|null $username
-        * @param string|null $password
-        * @param string|null $msgForLoginUserMigrated
-        * @param int|null $abortForAbortLogin
-        * @param string|null $msgForAbortLogin
-        * @param string|null $failMsg
-        * @param array $failParams
-        */
-       public function testTestForAuthentication(
-               $username, $password,
-               $msgForLoginUserMigrated, $abortForAbortLogin, $msgForAbortLogin,
-               $failMsg, $failParams = []
-       ) {
-               $reqs = [];
-               if ( $username === null ) {
-                       $this->hook( 'LoginUserMigrated', $this->never() );
-                       $this->hook( 'AbortLogin', $this->never() );
-               } else {
-                       if ( $password === null ) {
-                               $req = $this->getMockForAbstractClass( AuthenticationRequest::class );
-                       } else {
-                               $req = new PasswordAuthenticationRequest();
-                               $req->action = AuthManager::ACTION_LOGIN;
-                               $req->password = $password;
-                       }
-                       $req->username = $username;
-                       $reqs[get_class( $req )] = $req;
-
-                       $h = $this->hook( 'LoginUserMigrated', $this->once() );
-                       if ( $msgForLoginUserMigrated !== null ) {
-                               $h->will( $this->returnCallback(
-                                       function ( $user, &$msg ) use ( $username, $msgForLoginUserMigrated ) {
-                                               $this->assertInstanceOf( \User::class, $user );
-                                               $this->assertSame( $username, $user->getName() );
-                                               $msg = $msgForLoginUserMigrated;
-                                               return false;
-                                       }
-                               ) );
-                               $this->hook( 'AbortLogin', $this->never() );
-                       } else {
-                               $h->will( $this->returnCallback(
-                                       function ( $user, &$msg ) use ( $username ) {
-                                               $this->assertInstanceOf( \User::class, $user );
-                                               $this->assertSame( $username, $user->getName() );
-                                               return true;
-                                       }
-                               ) );
-                               $h2 = $this->hook( 'AbortLogin', $this->once() );
-                               if ( $abortForAbortLogin !== null ) {
-                                       $h2->will( $this->returnCallback(
-                                               function ( $user, $pass, &$abort, &$msg )
-                                                       use ( $username, $password, $abortForAbortLogin, $msgForAbortLogin )
-                                               {
-                                                       $this->assertInstanceOf( \User::class, $user );
-                                                       $this->assertSame( $username, $user->getName() );
-                                                       if ( $password !== null ) {
-                                                               $this->assertSame( $password, $pass );
-                                                       } else {
-                                                               $this->assertInternalType( 'string', $pass );
-                                                       }
-                                                       $abort = $abortForAbortLogin;
-                                                       $msg = $msgForAbortLogin;
-                                                       return false;
-                                               }
-                                       ) );
-                               } else {
-                                       $h2->will( $this->returnCallback(
-                                               function ( $user, $pass, &$abort, &$msg ) use ( $username, $password ) {
-                                                       $this->assertInstanceOf( \User::class, $user );
-                                                       $this->assertSame( $username, $user->getName() );
-                                                       if ( $password !== null ) {
-                                                               $this->assertSame( $password, $pass );
-                                                       } else {
-                                                               $this->assertInternalType( 'string', $pass );
-                                                       }
-                                                       return true;
-                                               }
-                                       ) );
-                               }
-                       }
-               }
-               unset( $h, $h2 );
-
-               $status = $this->getProvider()->testForAuthentication( $reqs );
-
-               $this->unhook( 'LoginUserMigrated' );
-               $this->unhook( 'AbortLogin' );
-
-               if ( $failMsg === null ) {
-                       $this->assertEquals( \StatusValue::newGood(), $status, 'should succeed' );
-               } else {
-                       $this->assertInstanceOf( \StatusValue::class, $status, 'should fail (type)' );
-                       $this->assertFalse( $status->isOk(), 'should fail (ok)' );
-                       $errors = $status->getErrors();
-                       $this->assertEquals( $failMsg, $errors[0]['message'], 'should fail (message)' );
-                       $this->assertEquals( $failParams, $errors[0]['params'], 'should fail (params)' );
-               }
-       }
-
-       public static function provideTestForAuthentication() {
-               return [
-                       'No valid requests' => [
-                               null, null, null, null, null, null
-                       ],
-                       'No hook errors' => [
-                               'User', 'PaSsWoRd', null, null, null, null
-                       ],
-                       'No hook errors, no password' => [
-                               'User', null, null, null, null, null
-                       ],
-                       'LoginUserMigrated no message' => [
-                               'User', 'PaSsWoRd', false, null, null, 'login-migrated-generic'
-                       ],
-                       'LoginUserMigrated with message' => [
-                               'User', 'PaSsWoRd', 'LUM-abort', null, null, 'LUM-abort'
-                       ],
-                       'LoginUserMigrated with message and params' => [
-                               'User', 'PaSsWoRd', [ 'LUM-abort', 'foo' ], null, null, 'LUM-abort', [ 'foo' ]
-                       ],
-                       'AbortLogin, SUCCESS' => [
-                               'User', 'PaSsWoRd', null, \LoginForm::SUCCESS, null, null
-                       ],
-                       'AbortLogin, NEED_TOKEN, no message' => [
-                               'User', 'PaSsWoRd', null, \LoginForm::NEED_TOKEN, null, 'nocookiesforlogin'
-                       ],
-                       'AbortLogin, NEED_TOKEN, with message' => [
-                               'User', 'PaSsWoRd', null, \LoginForm::NEED_TOKEN, 'needtoken', 'needtoken'
-                       ],
-                       'AbortLogin, WRONG_TOKEN, no message' => [
-                               'User', 'PaSsWoRd', null, \LoginForm::WRONG_TOKEN, null, 'sessionfailure'
-                       ],
-                       'AbortLogin, WRONG_TOKEN, with message' => [
-                               'User', 'PaSsWoRd', null, \LoginForm::WRONG_TOKEN, 'wrongtoken', 'wrongtoken'
-                       ],
-                       'AbortLogin, ILLEGAL, no message' => [
-                               'User', 'PaSsWoRd', null, \LoginForm::ILLEGAL, null, 'noname'
-                       ],
-                       'AbortLogin, ILLEGAL, with message' => [
-                               'User', 'PaSsWoRd', null, \LoginForm::ILLEGAL, 'badname', 'badname'
-                       ],
-                       'AbortLogin, NO_NAME, no message' => [
-                               'User', 'PaSsWoRd', null, \LoginForm::NO_NAME, null, 'noname'
-                       ],
-                       'AbortLogin, NO_NAME, with message' => [
-                               'User', 'PaSsWoRd', null, \LoginForm::NO_NAME, 'badname', 'badname'
-                       ],
-                       'AbortLogin, WRONG_PASS, no message' => [
-                               'User', 'PaSsWoRd', null, \LoginForm::WRONG_PASS, null, 'wrongpassword'
-                       ],
-                       'AbortLogin, WRONG_PASS, with message' => [
-                               'User', 'PaSsWoRd', null, \LoginForm::WRONG_PASS, 'badpass', 'badpass'
-                       ],
-                       'AbortLogin, WRONG_PLUGIN_PASS, no message' => [
-                               'User', 'PaSsWoRd', null, \LoginForm::WRONG_PLUGIN_PASS, null, 'wrongpassword'
-                       ],
-                       'AbortLogin, WRONG_PLUGIN_PASS, with message' => [
-                               'User', 'PaSsWoRd', null, \LoginForm::WRONG_PLUGIN_PASS, 'badpass', 'badpass'
-                       ],
-                       'AbortLogin, NOT_EXISTS, no message' => [
-                               "User'", 'A', null, \LoginForm::NOT_EXISTS, null, 'nosuchusershort', [ 'User&#39;' ]
-                       ],
-                       'AbortLogin, NOT_EXISTS, with message' => [
-                               "User'", 'A', null, \LoginForm::NOT_EXISTS, 'badname', 'badname', [ 'User&#39;' ]
-                       ],
-                       'AbortLogin, EMPTY_PASS, no message' => [
-                               'User', 'PaSsWoRd', null, \LoginForm::EMPTY_PASS, null, 'wrongpasswordempty'
-                       ],
-                       'AbortLogin, EMPTY_PASS, with message' => [
-                               'User', 'PaSsWoRd', null, \LoginForm::EMPTY_PASS, 'badpass', 'badpass'
-                       ],
-                       'AbortLogin, RESET_PASS, no message' => [
-                               'User', 'PaSsWoRd', null, \LoginForm::RESET_PASS, null, 'resetpass_announce'
-                       ],
-                       'AbortLogin, RESET_PASS, with message' => [
-                               'User', 'PaSsWoRd', null, \LoginForm::RESET_PASS, 'resetpass', 'resetpass'
-                       ],
-                       'AbortLogin, THROTTLED, no message' => [
-                               'User', 'PaSsWoRd', null, \LoginForm::THROTTLED, null, 'login-throttled',
-                               [ \Message::durationParam( 42 ) ]
-                       ],
-                       'AbortLogin, THROTTLED, with message' => [
-                               'User', 'PaSsWoRd', null, \LoginForm::THROTTLED, 't', 't',
-                               [ \Message::durationParam( 42 ) ]
-                       ],
-                       'AbortLogin, USER_BLOCKED, no message' => [
-                               "User'", 'P', null, \LoginForm::USER_BLOCKED, null, 'login-userblocked', [ 'User&#39;' ]
-                       ],
-                       'AbortLogin, USER_BLOCKED, with message' => [
-                               "User'", 'P', null, \LoginForm::USER_BLOCKED, 'blocked', 'blocked', [ 'User&#39;' ]
-                       ],
-                       'AbortLogin, ABORTED, no message' => [
-                               "User'", 'P', null, \LoginForm::ABORTED, null, 'login-abort-generic', [ 'User&#39;' ]
-                       ],
-                       'AbortLogin, ABORTED, with message' => [
-                               "User'", 'P', null, \LoginForm::ABORTED, 'aborted', 'aborted', [ 'User&#39;' ]
-                       ],
-                       'AbortLogin, USER_MIGRATED, no message' => [
-                               'User', 'P', null, \LoginForm::USER_MIGRATED, null, 'login-migrated-generic'
-                       ],
-                       'AbortLogin, USER_MIGRATED, with message' => [
-                               'User', 'P', null, \LoginForm::USER_MIGRATED, 'migrated', 'migrated'
-                       ],
-                       'AbortLogin, USER_MIGRATED, with message and params' => [
-                               'User', 'P', null, \LoginForm::USER_MIGRATED, [ 'migrated', 'foo' ],
-                               'migrated', [ 'foo' ]
-                       ],
-               ];
-       }
-
-       /**
-        * @dataProvider provideTestForAccountCreation
-        * @param string $msg
-        * @param Status|null $status
-        * @param StatusValue $result
-        */
-       public function testTestForAccountCreation( $msg, $status, $result ) {
-               $this->hook( 'AbortNewAccount', $this->once() )
-                       ->will( $this->returnCallback( function ( $user, &$error, &$abortStatus )
-                               use ( $msg, $status )
-                       {
-                               $this->assertInstanceOf( \User::class, $user );
-                               $this->assertSame( 'User', $user->getName() );
-                               $error = $msg;
-                               $abortStatus = $status;
-                               return $error === null && $status === null;
-                       } ) );
-
-               $user = \User::newFromName( 'User' );
-               $creator = \User::newFromName( 'UTSysop' );
-               $ret = $this->getProvider()->testForAccountCreation( $user, $creator, [] );
-
-               $this->unhook( 'AbortNewAccount' );
-
-               $this->assertEquals( $result, $ret );
-       }
-
-       public static function provideTestForAccountCreation() {
-               return [
-                       'No hook errors' => [
-                               null, null, \StatusValue::newGood()
-                       ],
-                       'AbortNewAccount, old style' => [
-                               'foobar', null, \StatusValue::newFatal(
-                                       \Message::newFromKey( 'createaccount-hook-aborted' )->rawParams( 'foobar' )
-                               )
-                       ],
-                       'AbortNewAccount, new style' => [
-                               'foobar',
-                               \Status::newFatal( 'aborted!', 'param' ),
-                               \StatusValue::newFatal( 'aborted!', 'param' )
-                       ],
-               ];
-       }
-
-       /**
-        * @dataProvider provideTestUserForCreation
-        * @param string|null $error
-        * @param string|null $failMsg
-        */
-       public function testTestUserForCreation( $error, $failMsg ) {
-               $testUser = self::getTestUser()->getUser();
-               $provider = $this->getProvider();
-               $options = [ 'flags' => \User::READ_LOCKING, 'creating' => true ];
-
-               $this->hook( 'AbortNewAccount', $this->never() );
-               $this->hook( 'AbortAutoAccount', $this->once() )
-                       ->will( $this->returnCallback( function ( $user, &$abortError ) use ( $testUser, $error ) {
-                               $this->assertInstanceOf( \User::class, $user );
-                               $this->assertSame( $testUser->getName(), $user->getName() );
-                               $abortError = $error;
-                               return $error === null;
-                       } ) );
-               $status = $provider->testUserForCreation(
-                       $testUser, AuthManager::AUTOCREATE_SOURCE_SESSION, $options
-               );
-               $this->unhook( 'AbortNewAccount' );
-               $this->unhook( 'AbortAutoAccount' );
-               if ( $failMsg === null ) {
-                       $this->assertEquals( \StatusValue::newGood(), $status, 'should succeed' );
-               } else {
-                       $this->assertInstanceOf( \StatusValue::class, $status, 'should fail (type)' );
-                       $this->assertFalse( $status->isOk(), 'should fail (ok)' );
-                       $errors = $status->getErrors();
-                       $this->assertEquals( $failMsg, $errors[0]['message'], 'should fail (message)' );
-               }
-
-               $this->hook( 'AbortAutoAccount', $this->never() );
-               $this->hook( 'AbortNewAccount', $this->never() );
-               $status = $provider->testUserForCreation( $testUser, false, $options );
-               $this->unhook( 'AbortNewAccount' );
-               $this->unhook( 'AbortAutoAccount' );
-               $this->assertEquals( \StatusValue::newGood(), $status, 'should succeed' );
-       }
-
-       public static function provideTestUserForCreation() {
-               return [
-                       'Success' => [ null, null ],
-                       'Fail, no message' => [ false, 'login-abort-generic' ],
-                       'Fail, with message' => [ 'fail', 'fail' ],
-               ];
-       }
-}
diff --git a/tests/phpunit/includes/block/BlockRestrictionTest.php b/tests/phpunit/includes/block/BlockRestrictionTest.php
new file mode 100644 (file)
index 0000000..7889f36
--- /dev/null
@@ -0,0 +1,556 @@
+<?php
+
+namespace MediaWiki\Tests\Block;
+
+use MediaWiki\Block\BlockRestriction;
+use MediaWiki\Block\Restriction\PageRestriction;
+use MediaWiki\Block\Restriction\Restriction;
+
+/**
+ * @group Database
+ * @group Blocking
+ * @coversDefaultClass \MediaWiki\Block\BlockRestriction
+ */
+class BlockRestrictionTest extends \MediaWikiLangTestCase {
+
+       public function tearDown() {
+               parent::tearDown();
+               $this->resetTables();
+       }
+
+       /**
+        * @covers ::loadByBlockId
+        * @covers ::resultToRestrictions
+        * @covers ::rowToRestriction
+        */
+       public function testLoadMultipleRestrictions() {
+               $block = $this->insertBlock();
+
+               $pageFoo = $this->getExistingTestPage( 'Foo' );
+               $pageBar = $this->getExistingTestPage( 'Bar' );
+
+               BlockRestriction::insert( [
+                               new PageRestriction( $block->getId(), $pageFoo->getId() ),
+                               new PageRestriction( $block->getId(), $pageBar->getId() ),
+               ] );
+
+               $restrictions = BlockRestriction::loadByBlockId( $block->getId() );
+
+               $this->assertCount( 2, $restrictions );
+       }
+
+       /**
+        * @covers ::loadByBlockId
+        * @covers ::resultToRestrictions
+        * @covers ::rowToRestriction
+        */
+       public function testWithNoRestrictions() {
+               $block = $this->insertBlock();
+               $restrictions = BlockRestriction::loadByBlockId( $block->getId() );
+               $this->assertEmpty( $restrictions );
+       }
+
+       /**
+        * @covers ::loadByBlockId
+        * @covers ::resultToRestrictions
+        * @covers ::rowToRestriction
+        */
+       public function testWithEmptyParam() {
+               $restrictions = BlockRestriction::loadByBlockId( [] );
+
+               $this->assertEmpty( $restrictions );
+       }
+
+       /**
+        * @covers ::loadByBlockId
+        * @covers ::resultToRestrictions
+        * @covers ::rowToRestriction
+        */
+       public function testIgnoreNotSupportedTypes() {
+               $block = $this->insertBlock();
+
+               $pageFoo = $this->getExistingTestPage( 'Foo' );
+               $pageBar = $this->getExistingTestPage( 'Bar' );
+
+               // valid type
+               $this->insertRestriction( $block->getId(), PageRestriction::TYPE_ID, $pageFoo->getId() );
+
+               // invalid type
+               $this->insertRestriction( $block->getId(), 9, $pageBar->getId() );
+
+               $restrictions = BlockRestriction::loadByBlockId( $block->getId() );
+               $this->assertCount( 1, $restrictions );
+       }
+
+       /**
+        * @covers ::loadByBlockId
+        * @covers ::resultToRestrictions
+        * @covers ::rowToRestriction
+        */
+       public function testMappingRestrictionObject() {
+               $block = $this->insertBlock();
+               $title = 'Lady Macbeth';
+               $page = $this->getExistingTestPage( $title );
+
+               BlockRestriction::insert( [
+                               new PageRestriction( $block->getId(), $page->getId() ),
+               ] );
+
+               $restrictions = BlockRestriction::loadByBlockId( $block->getId() );
+
+               list( $pageRestriction ) = $restrictions;
+               $this->assertInstanceOf( PageRestriction::class, $pageRestriction );
+               $this->assertEquals( $block->getId(), $pageRestriction->getBlockId() );
+               $this->assertEquals( $page->getId(), $pageRestriction->getValue() );
+               $this->assertEquals( $pageRestriction->getType(), PageRestriction::TYPE );
+               $this->assertEquals( $pageRestriction->getTitle()->getText(), $title );
+       }
+
+       /**
+        * @covers ::insert
+        */
+       public function testInsert() {
+               $block = $this->insertBlock();
+
+               $pageFoo = $this->getExistingTestPage( 'Foo' );
+               $pageBar = $this->getExistingTestPage( 'Bar' );
+
+               $restrictions = [
+                       new \stdClass(),
+                       new PageRestriction( $block->getId(), $pageFoo->getId() ),
+                       new PageRestriction( $block->getId(), $pageBar->getId() ),
+               ];
+
+               $result = BlockRestriction::insert( $restrictions );
+               $this->assertTrue( $result );
+
+               $restrictions = [
+                       new \stdClass(),
+               ];
+
+               $result = BlockRestriction::insert( $restrictions );
+               $this->assertFalse( $result );
+
+               $result = BlockRestriction::insert( [] );
+               $this->assertFalse( $result );
+       }
+
+       /**
+        * @covers ::insert
+        */
+       public function testInsertTypes() {
+               $block = $this->insertBlock();
+
+               $pageFoo = $this->getExistingTestPage( 'Foo' );
+               $pageBar = $this->getExistingTestPage( 'Bar' );
+
+               $namespace = $this->createMock( Restriction::class );
+               $namespace->method( 'toRow' )
+                       ->willReturn( [
+                               'ir_ipb_id' => $block->getId(),
+                               'ir_type' => 2,
+                               'ir_value' => 0,
+                       ] );
+
+               $invalid = $this->createMock( Restriction::class );
+               $invalid->method( 'toRow' )
+                       ->willReturn( [
+                               'ir_ipb_id' => $block->getId(),
+                               'ir_type' => 9,
+                               'ir_value' => 42,
+                       ] );
+
+               $restrictions = [
+                       new \stdClass(),
+                       new PageRestriction( $block->getId(), $pageFoo->getId() ),
+                       new PageRestriction( $block->getId(), $pageBar->getId() ),
+                       $namespace,
+                       $invalid,
+               ];
+
+               $result = BlockRestriction::insert( $restrictions );
+               $this->assertTrue( $result );
+
+               $restrictions = BlockRestriction::loadByBlockId( $block->getId() );
+               $this->assertCount( 2, $restrictions );
+       }
+
+       /**
+        * @covers ::update
+        * @covers ::restrictionsByBlockId
+        * @covers ::restrictionsToRemove
+        */
+       public function testUpdateInsert() {
+               $block = $this->insertBlock();
+               $pageFoo = $this->getExistingTestPage( 'Foo' );
+               $pageBar = $this->getExistingTestPage( 'Bar' );
+               BlockRestriction::insert( [
+                               new PageRestriction( $block->getId(), $pageFoo->getId() ),
+               ] );
+
+               BlockRestriction::update( [
+                       new \stdClass(),
+                       new PageRestriction( $block->getId(), $pageBar->getId() ),
+               ] );
+
+               $db = wfGetDb( DB_REPLICA );
+               $result = $db->select(
+                       [ 'ipblocks_restrictions' ],
+                       [ '*' ],
+                       [ 'ir_ipb_id' => $block->getId() ]
+               );
+
+               $this->assertEquals( 1, $result->numRows() );
+               $row = $result->fetchObject();
+               $this->assertEquals( $block->getId(), $row->ir_ipb_id );
+               $this->assertEquals( $pageBar->getId(), $row->ir_value );
+       }
+
+       /**
+        * @covers ::update
+        * @covers ::restrictionsByBlockId
+        * @covers ::restrictionsToRemove
+        */
+       public function testUpdateChange() {
+               $block = $this->insertBlock();
+               $page = $this->getExistingTestPage( 'Foo' );
+
+               BlockRestriction::update( [
+                       new PageRestriction( $block->getId(), $page->getId() ),
+               ] );
+
+               $db = wfGetDb( DB_REPLICA );
+               $result = $db->select(
+                       [ 'ipblocks_restrictions' ],
+                       [ '*' ],
+                       [ 'ir_ipb_id' => $block->getId() ]
+               );
+
+               $this->assertEquals( 1, $result->numRows() );
+               $row = $result->fetchObject();
+               $this->assertEquals( $block->getId(), $row->ir_ipb_id );
+               $this->assertEquals( $page->getId(), $row->ir_value );
+       }
+
+       /**
+        * @covers ::update
+        * @covers ::restrictionsByBlockId
+        * @covers ::restrictionsToRemove
+        */
+       public function testUpdateNoRestrictions() {
+               $block = $this->insertBlock();
+
+               BlockRestriction::update( [] );
+
+               $db = wfGetDb( DB_REPLICA );
+               $result = $db->select(
+                       [ 'ipblocks_restrictions' ],
+                       [ '*' ],
+                       [ 'ir_ipb_id' => $block->getId() ]
+               );
+
+               $this->assertEquals( 0, $result->numRows() );
+       }
+
+       /**
+        * @covers ::update
+        * @covers ::restrictionsByBlockId
+        * @covers ::restrictionsToRemove
+        */
+       public function testUpdateSame() {
+               $block = $this->insertBlock();
+               $page = $this->getExistingTestPage( 'Foo' );
+               BlockRestriction::insert( [
+                               new PageRestriction( $block->getId(), $page->getId() ),
+               ] );
+
+               BlockRestriction::update( [
+                       new PageRestriction( $block->getId(), $page->getId() ),
+               ] );
+
+               $db = wfGetDb( DB_REPLICA );
+               $result = $db->select(
+                       [ 'ipblocks_restrictions' ],
+                       [ '*' ],
+                       [ 'ir_ipb_id' => $block->getId() ]
+               );
+
+               $this->assertEquals( 1, $result->numRows() );
+               $row = $result->fetchObject();
+               $this->assertEquals( $block->getId(), $row->ir_ipb_id );
+               $this->assertEquals( $page->getId(), $row->ir_value );
+       }
+
+       /**
+        * @covers ::updateByParentBlockId
+        */
+       public function testDeleteAllUpdateByParentBlockId() {
+               // Create a block and an autoblock (a child block)
+               $block = $this->insertBlock();
+               $pageFoo = $this->getExistingTestPage( 'Foo' );
+               $pageBar = $this->getExistingTestPage( 'Bar' );
+               BlockRestriction::insert( [
+                       new PageRestriction( $block->getId(), $pageFoo->getId() ),
+               ] );
+               $autoblockId = $block->doAutoblock( '127.0.0.1' );
+
+               // Ensure that the restrictions on the block have not changed.
+               $restrictions = BlockRestriction::loadByBlockId( $block->getId() );
+               $this->assertCount( 1, $restrictions );
+               $this->assertEquals( $pageFoo->getId(), $restrictions[0]->getValue() );
+
+               // Ensure that the restrictions on the autoblock are the same as the block.
+               $restrictions = BlockRestriction::loadByBlockId( $autoblockId );
+               $this->assertCount( 1, $restrictions );
+               $this->assertEquals( $pageFoo->getId(), $restrictions[0]->getValue() );
+
+               // Update the restrictions on the autoblock (but leave the block unchanged)
+               BlockRestriction::updateByParentBlockId( $block->getId(), [
+                       new PageRestriction( $block->getId(), $pageBar->getId() ),
+               ] );
+
+               // Ensure that the restrictions on the block have not changed.
+               $restrictions = BlockRestriction::loadByBlockId( $block->getId() );
+               $this->assertCount( 1, $restrictions );
+               $this->assertEquals( $pageFoo->getId(), $restrictions[0]->getValue() );
+
+               // Ensure that the restrictions on the autoblock have been updated.
+               $restrictions = BlockRestriction::loadByBlockId( $autoblockId );
+               $this->assertCount( 1, $restrictions );
+               $this->assertEquals( $pageBar->getId(), $restrictions[0]->getValue() );
+       }
+
+       /**
+        * @covers ::updateByParentBlockId
+        */
+       public function testUpdateByParentBlockId() {
+               // Create a block and an autoblock (a child block)
+               $block = $this->insertBlock();
+               $page = $this->getExistingTestPage( 'Foo' );
+               BlockRestriction::insert( [
+                       new PageRestriction( $block->getId(), $page->getId() ),
+               ] );
+               $autoblockId = $block->doAutoblock( '127.0.0.1' );
+
+               // Ensure that the restrictions on the block have not changed.
+               $restrictions = BlockRestriction::loadByBlockId( $block->getId() );
+               $this->assertCount( 1, $restrictions );
+
+               // Ensure that the restrictions on the autoblock have not changed.
+               $restrictions = BlockRestriction::loadByBlockId( $autoblockId );
+               $this->assertCount( 1, $restrictions );
+
+               // Remove the restrictions on the autoblock (but leave the block unchanged)
+               BlockRestriction::updateByParentBlockId( $block->getId(), [] );
+
+               // Ensure that the restrictions on the block have not changed.
+               $restrictions = BlockRestriction::loadByBlockId( $block->getId() );
+               $this->assertCount( 1, $restrictions );
+
+               // Ensure that the restrictions on the autoblock have been updated.
+               $restrictions = BlockRestriction::loadByBlockId( $autoblockId );
+               $this->assertCount( 0, $restrictions );
+       }
+
+       /**
+        * @covers ::updateByParentBlockId
+        */
+       public function testNoAutoblocksUpdateByParentBlockId() {
+               // Create a block with no autoblock.
+               $block = $this->insertBlock();
+               $page = $this->getExistingTestPage( 'Foo' );
+               BlockRestriction::insert( [
+                       new PageRestriction( $block->getId(), $page->getId() ),
+               ] );
+
+               // Ensure that the restrictions on the block have not changed.
+               $restrictions = BlockRestriction::loadByBlockId( $block->getId() );
+               $this->assertCount( 1, $restrictions );
+
+               // Update the restrictions on any autoblocks (there are none).
+               BlockRestriction::updateByParentBlockId( $block->getId(), $restrictions );
+
+               // Ensure that the restrictions on the block have not changed.
+               $restrictions = BlockRestriction::loadByBlockId( $block->getId() );
+               $this->assertCount( 1, $restrictions );
+       }
+
+       /**
+        * @covers ::delete
+        */
+       public function testDelete() {
+               $block = $this->insertBlock();
+               $page = $this->getExistingTestPage( 'Foo' );
+               BlockRestriction::insert( [
+                       new PageRestriction( $block->getId(), $page->getId() ),
+               ] );
+
+               $restrictions = BlockRestriction::loadByBlockId( $block->getId() );
+               $this->assertCount( 1, $restrictions );
+
+               $result = BlockRestriction::delete( array_merge( $restrictions, [ new \stdClass() ] ) );
+               $this->assertTrue( $result );
+
+               $restrictions = BlockRestriction::loadByBlockId( $block->getId() );
+               $this->assertCount( 0, $restrictions );
+       }
+
+       /**
+        * @covers ::deleteByBlockId
+        */
+       public function testDeleteByBlockId() {
+               $block = $this->insertBlock();
+               $page = $this->getExistingTestPage( 'Foo' );
+               BlockRestriction::insert( [
+                       new PageRestriction( $block->getId(), $page->getId() ),
+               ] );
+
+               $restrictions = BlockRestriction::loadByBlockId( $block->getId() );
+               $this->assertCount( 1, $restrictions );
+
+               $result = BlockRestriction::deleteByBlockId( $block->getId() );
+               $this->assertNotFalse( $result );
+
+               $restrictions = BlockRestriction::loadByBlockId( $block->getId() );
+               $this->assertCount( 0, $restrictions );
+       }
+
+       /**
+        * @covers ::deleteByParentBlockId
+        */
+       public function testDeleteByParentBlockId() {
+               // Create a block with no autoblock.
+               $block = $this->insertBlock();
+               $page = $this->getExistingTestPage( 'Foo' );
+               BlockRestriction::insert( [
+                       new PageRestriction( $block->getId(), $page->getId() ),
+               ] );
+               $autoblockId = $block->doAutoblock( '127.0.0.1' );
+
+               // Ensure that the restrictions on the block have not changed.
+               $restrictions = BlockRestriction::loadByBlockId( $block->getId() );
+               $this->assertCount( 1, $restrictions );
+
+               // Ensure that the restrictions on the autoblock are the same as the block.
+               $restrictions = BlockRestriction::loadByBlockId( $autoblockId );
+               $this->assertCount( 1, $restrictions );
+
+               // Remove all of the restrictions on the autoblock (but leave the block unchanged).
+               $result = BlockRestriction::deleteByParentBlockId( $block->getId() );
+               // NOTE: commented out until https://gerrit.wikimedia.org/r/c/mediawiki/core/+/469324 is merged
+               //$this->assertTrue( $result );
+
+               // Ensure that the restrictions on the block have not changed.
+               $restrictions = BlockRestriction::loadByBlockId( $block->getId() );
+               $this->assertCount( 1, $restrictions );
+
+               // Ensure that the restrictions on the autoblock have been removed.
+               $restrictions = BlockRestriction::loadByBlockId( $autoblockId );
+               $this->assertCount( 0, $restrictions );
+       }
+
+       /**
+        * @covers ::equals
+        * @dataProvider equalsDataProvider
+        *
+        * @param array $a
+        * @param array $b
+        * @param bool $expected
+        */
+       public function testEquals( array $a, array $b, $expected ) {
+               $this->assertSame( $expected, BlockRestriction::equals( $a, $b ) );
+       }
+
+       public function equalsDataProvider() {
+               return [
+                       [
+                               [
+                                       new \stdClass(),
+                                       new PageRestriction( 1, 1 ),
+                               ],
+                               [
+                                       new \stdClass(),
+                                       new PageRestriction( 1, 2 )
+                               ],
+                               false,
+                       ],
+                       [
+                               [
+                                       new PageRestriction( 1, 1 ),
+                               ],
+                               [
+                                       new PageRestriction( 1, 1 ),
+                                       new PageRestriction( 1, 2 )
+                               ],
+                               false,
+                       ],
+                       [
+                               [],
+                               [],
+                               true,
+                       ],
+                       [
+                               [
+                                       new PageRestriction( 1, 1 ),
+                                       new PageRestriction( 1, 2 ),
+                                       new PageRestriction( 2, 3 ),
+                               ],
+                               [
+                                       new PageRestriction( 2, 3 ),
+                                       new PageRestriction( 1, 2 ),
+                                       new PageRestriction( 1, 1 ),
+                               ],
+                               true
+                       ],
+               ];
+       }
+
+       /**
+        * @covers ::setBlockId
+        */
+       public function testSetBlockId() {
+               $restrictions = [
+                       new \stdClass(),
+                       new PageRestriction( 1, 1 ),
+                       new PageRestriction( 1, 2 ),
+               ];
+
+               $result = BlockRestriction::setBlockId( 2, $restrictions );
+
+               $this->assertSame( 1, $restrictions[1]->getBlockId() );
+               $this->assertSame( 1, $restrictions[2]->getBlockId() );
+               $this->assertSame( 2, $result[0]->getBlockId() );
+               $this->assertSame( 2, $result[1]->getBlockId() );
+       }
+
+       protected function insertBlock() {
+               $badActor = $this->getTestUser()->getUser();
+               $sysop = $this->getTestSysop()->getUser();
+
+               $block = new \Block( [
+                       'address' => $badActor->getName(),
+                       'user' => $badActor->getId(),
+                       'by' => $sysop->getId(),
+                       'expiry' => 'infinity',
+                       'sitewide' => 0,
+                       'enableAutoblock' => true,
+               ] );
+
+               $block->insert();
+
+               return $block;
+       }
+
+       protected function insertRestriction( $blockId, $type, $value ) {
+               $this->db->insert( 'ipblocks_restrictions', [
+                       'ir_ipb_id' => $blockId,
+                       'ir_type' => $type,
+                       'ir_value' => $value,
+               ] );
+       }
+
+       protected function resetTables() {
+               $this->db->delete( 'ipblocks', '*', __METHOD__ );
+               $this->db->delete( 'ipblocks_restrictions', '*', __METHOD__ );
+       }
+}
diff --git a/tests/phpunit/includes/block/Restriction/PageRestrictionTest.php b/tests/phpunit/includes/block/Restriction/PageRestrictionTest.php
new file mode 100644 (file)
index 0000000..95cb3b7
--- /dev/null
@@ -0,0 +1,64 @@
+<?php
+
+namespace MediaWiki\Tests\Block\Restriction;
+
+use MediaWiki\Block\Restriction\PageRestriction;
+
+/**
+ * @group Database
+ * @group Blocking
+ * @covers \MediaWiki\Block\Restriction\AbstractRestriction
+ * @covers \MediaWiki\Block\Restriction\PageRestriction
+ */
+class PageRestrictionTest extends RestrictionTestCase {
+
+       public function testMatches() {
+               $class = $this->getClass();
+               $page = $this->getExistingTestPage( 'Saturn' );
+               $restriction = new $class( 1, $page->getId() );
+               $this->assertTrue( $restriction->matches( $page->getTitle() ) );
+
+               $page = $this->getExistingTestPage( 'Mars' );
+               $this->assertFalse( $restriction->matches( $page->getTitle() ) );
+       }
+
+       public function testGetType() {
+               $class = $this->getClass();
+               $restriction = new $class( 1, 2 );
+               $this->assertEquals( 'page', $restriction->getType() );
+       }
+
+       public function testGetTitle() {
+               $class = $this->getClass();
+               $restriction = new $class( 1, 2 );
+               $title = \Title::newFromText( 'Pluto' );
+               $title->mArticleID = 2;
+               $restriction->setTitle( $title );
+               $this->assertSame( $title, $restriction->getTitle() );
+
+               $restriction = new $class( 1, 1 );
+               $title = \Title::newFromId( 1 );
+               $this->assertEquals( $title->getArticleId(), $restriction->getTitle()->getArticleId() );
+       }
+
+       public function testNewFromRow() {
+               $class = $this->getClass();
+               $restriction = $class::newFromRow( (object)[
+                       'ir_ipb_id' => 1,
+                       'ir_value' => 2,
+                       'page_namespace' => 0,
+                       'page_title' => 'Saturn',
+               ] );
+
+               $this->assertSame( 1, $restriction->getBlockId() );
+               $this->assertSame( 2, $restriction->getValue() );
+               $this->assertSame( 'Saturn', $restriction->getTitle()->getText() );
+       }
+
+       /**
+        * {@inheritdoc}
+        */
+       protected function getClass() {
+               return PageRestriction::class;
+       }
+}
diff --git a/tests/phpunit/includes/block/Restriction/RestrictionTestCase.php b/tests/phpunit/includes/block/Restriction/RestrictionTestCase.php
new file mode 100644 (file)
index 0000000..51e004c
--- /dev/null
@@ -0,0 +1,74 @@
+<?php
+
+namespace MediaWiki\Tests\Block\Restriction;
+
+/**
+ * @group Blocking
+ */
+abstract class RestrictionTestCase extends \MediaWikiTestCase {
+       public function testConstruct() {
+               $class = $this->getClass();
+               $restriction = new $class( 1, 2 );
+
+               $this->assertSame( $restriction->getBlockId(), 1 );
+               $this->assertSame( $restriction->getValue(), 2 );
+       }
+
+       public function testSetBlockId() {
+               $class = $this->getClass();
+               $restriction = new $class( 1, 2 );
+
+               $restriction->setBlockId( 10 );
+               $this->assertSame( $restriction->getBlockId(), 10 );
+       }
+
+       public function testEquals() {
+               $class = $this->getClass();
+
+               // Test two restrictions with the same data.
+               $restriction = new $class( 1, 2 );
+               $second = new $class( 1, 2 );
+               $this->assertTrue( $restriction->equals( $second ) );
+
+               // Test two restrictions that implement different classes.
+               $second = $this->createMock( $this->getClass() );
+               $this->assertFalse( $restriction->equals( $second ) );
+
+               // Not the same block id.
+               $second = new $class( 2, 2 );
+               $this->assertTrue( $restriction->equals( $second ) );
+
+               // Not the same value.
+               $second = new $class( 1, 3 );
+               $this->assertFalse( $restriction->equals( $second ) );
+       }
+
+       public function testNewFromRow() {
+               $class = $this->getClass();
+
+               $restriction = $class::newFromRow( (object)[
+                       'ir_ipb_id' => 1,
+                       'ir_value' => 2,
+               ] );
+
+               $this->assertSame( 1, $restriction->getBlockId() );
+               $this->assertSame( 2, $restriction->getValue() );
+       }
+
+       public function testToRow() {
+               $class = $this->getClass();
+
+               $restriction = new $class( 1, 2 );
+               $row = $restriction->toRow();
+
+               $this->assertSame( 1, $row['ir_ipb_id'] );
+               $this->assertSame( 2, $row['ir_value'] );
+       }
+
+       /**
+        * Get the class name of the class that is being tested.
+        *
+        * @return string
+        */
+       abstract protected function getClass();
+}
index 4488d9e..4a9603c 100644 (file)
@@ -2139,4 +2139,21 @@ class DatabaseSQLTest extends PHPUnit\Framework\TestCase {
                $this->assertLastSql( 'BEGIN; SELECT 1; ROLLBACK' );
                $this->assertEquals( 0, $this->database->trxLevel() );
        }
+
+       /**
+        * @covers Wikimedia\Rdbms\Database::selectFieldValues()
+        */
+       public function testSelectFieldValues() {
+               $this->database->forceNextResult( [
+                       (object)[ 'value' => 'row1' ],
+                       (object)[ 'value' => 'row2' ],
+                       (object)[ 'value' => 'row3' ],
+               ] );
+
+               $this->assertSame(
+                       [ 'row1', 'row2', 'row3' ],
+                       $this->database->selectFieldValues( 'table', 'table.field', 'conds', __METHOD__ )
+               );
+               $this->assertLastSql( 'SELECT table.field AS value FROM table WHERE conds' );
+       }
 }
index 762812c..bd1c112 100644 (file)
@@ -681,4 +681,5 @@ class DatabaseTest extends PHPUnit\Framework\TestCase {
                $this->assertSame( $oldPrefix, $this->db->tablePrefix() );
                $this->assertSame( $oldDomain, $this->db->getDomainId() );
        }
+
 }
index 8a05641..d550dcb 100644 (file)
@@ -191,4 +191,8 @@ class LinkRendererTest extends MediaWikiLangTestCase {
                );
        }
 
+       function tearDown() {
+               Title::clearCaches();
+               parent::tearDown();
+       }
 }
index 03671ac..85ccebc 100644 (file)
@@ -376,4 +376,77 @@ class BlockLogFormatterTest extends LogFormatterTestCase {
        public function testSuppressReblockLogDatabaseRows( $row, $extra ) {
                $this->doTestLogFormatter( $row, $extra );
        }
+
+       public function providePartialBlockLogDatabaseRows() {
+               return [
+                       [
+                               [
+                                       'type' => 'block',
+                                       'action' => 'block',
+                                       'comment' => 'Block comment',
+                                       'user' => 0,
+                                       'user_text' => 'Sysop',
+                                       'namespace' => NS_USER,
+                                       'title' => 'Logtestuser',
+                                       'params' => [
+                                               '5::duration' => 'infinite',
+                                               '6::flags' => 'anononly',
+                                               '7::restrictions' => [ 'pages' => [ 'User:Test1', 'Main Page' ] ],
+                                               'sitewide' => false,
+                                       ],
+                               ],
+                               [
+                                       'text' => 'Sysop blocked Logtestuser from editing the pages User:Test1 and Main Page'
+                                               . ' with an expiration time of indefinite (anonymous users only)',
+                                       'api' => [
+                                               'duration' => 'infinite',
+                                               'flags' => [ 'anononly' ],
+                                               'restrictions' => [ 'pages' => [
+                                                               [
+                                                                       'page_ns' => 2,
+                                                                       'page_title' => 'User:Test1',
+                                                               ], [
+                                                                       'page_ns' => 0,
+                                                                       'page_title' => 'Main Page',
+                                                               ],
+                                                       ],
+                                               ],
+                                               'sitewide' => false,
+                                       ],
+                               ],
+                       ],
+                       [
+                               [
+                                       'type' => 'block',
+                                       'action' => 'block',
+                                       'comment' => 'Block comment',
+                                       'user' => 0,
+                                       'user_text' => 'Sysop',
+                                       'namespace' => NS_USER,
+                                       'title' => 'Logtestuser',
+                                       'params' => [
+                                               '5::duration' => 'infinite',
+                                               '6::flags' => 'anononly',
+                                               'sitewide' => false,
+                                       ],
+                               ],
+                               [
+                                       'text' => 'Sysop blocked Logtestuser from non-editing actions'
+                                               . ' with an expiration time of indefinite (anonymous users only)',
+                                       'api' => [
+                                               'duration' => 'infinite',
+                                               'flags' => [ 'anononly' ],
+                                               'sitewide' => false,
+                                       ],
+                               ],
+                       ],
+               ];
+       }
+
+       /**
+        * @dataProvider providePartialBlockLogDatabaseRows
+        */
+       public function testPartialBlockLogDatabaseRows( $row, $extra ) {
+               $this->doTestLogFormatter( $row, $extra );
+       }
 }
index d9c92f5..fee4583 100644 (file)
@@ -816,6 +816,15 @@ abstract class WikiPageDbTestBase extends MediaWikiLangTestCase {
                                "#REDIRECT [[Media:hello_world]]",
                                "File:Hello world"
                        ],
+                       // Test fragments longer than 255 bytes (T207876)
+                       [
+                               'WikiPageTest_testGetRedirectTarget_4',
+                               CONTENT_MODEL_WIKITEXT,
+                               // phpcs:ignore Generic.Files.LineLength
+                               '#REDIRECT [[Foobar#🏴󠁮󠁬󠁦󠁲󠁿🏴󠁮󠁬󠁦󠁲󠁿🏴󠁮󠁬󠁦󠁲󠁿🏴󠁮󠁬󠁦󠁲󠁿🏴󠁮󠁬󠁦󠁲󠁿🏴󠁮󠁬󠁦󠁲󠁿🏴󠁮󠁬󠁦󠁲󠁿🏴󠁮󠁬󠁦󠁲󠁿🏴󠁮󠁬󠁦󠁲󠁿🏴󠁮󠁬󠁦󠁲󠁿🏴󠁮󠁬󠁦󠁲󠁿🏴󠁮󠁬󠁦󠁲󠁿🏴󠁮󠁬󠁦󠁲󠁿🏴󠁮󠁬󠁦󠁲󠁿🏴󠁮󠁬󠁦󠁲󠁿🏴󠁮󠁬󠁦󠁲󠁿🏴󠁮󠁬󠁦󠁲󠁿🏴󠁮󠁬󠁦󠁲󠁿🏴󠁮󠁬󠁦󠁲󠁿🏴󠁮󠁬󠁦󠁲󠁿🏴󠁮󠁬󠁦󠁲󠁿🏴󠁮󠁬󠁦󠁲󠁿]]',
+                               // phpcs:ignore Generic.Files.LineLength
+                               'Foobar#🏴󠁮󠁬󠁦󠁲󠁿🏴󠁮󠁬󠁦󠁲󠁿🏴󠁮󠁬󠁦󠁲󠁿🏴󠁮󠁬󠁦󠁲󠁿🏴󠁮󠁬󠁦󠁲󠁿🏴󠁮󠁬󠁦󠁲󠁿🏴󠁮󠁬󠁦󠁲󠁿🏴󠁮󠁬󠁦󠁲󠁿🏴󠁮󠁬󠁦󠁲󠁿🏴󠁮󠁬󠁦󠁲󠁿🏴󠁮󠁬...'
+                       ]
                ];
        }
 
@@ -836,7 +845,7 @@ abstract class WikiPageDbTestBase extends MediaWikiLangTestCase {
 
                # now, test the actual redirect
                $t = $page->getRedirectTarget();
-               $this->assertEquals( $target, is_null( $t ) ? null : $t->getPrefixedText() );
+               $this->assertEquals( $target, is_null( $t ) ? null : $t->getFullText() );
        }
 
        /**
index 291d75b..d702084 100644 (file)
@@ -370,6 +370,21 @@ class ParserMethodsTest extends MediaWikiLangTestCase {
                }
        }
 
+       public static function provideGuessSectionNameFromWikiText() {
+               return [
+                       [ '1/2', 'html5', '#1/2' ],
+                       [ '1/2', 'legacy', '#1.2F2' ],
+               ];
+       }
+
+       /** @dataProvider provideGuessSectionNameFromWikiText */
+       public function testGuessSectionNameFromWikiText( $input, $mode, $expected ) {
+               $this->setMwGlobals( [ 'wgFragmentMode' => [ $mode ] ] );
+               global $wgParser;
+               $result = $wgParser->guessSectionNameFromWikiText( $input );
+               $this->assertEquals( $result, $expected );
+       }
+
        // @todo Add tests for cleanSig() / cleanSigInSig(), getSection(),
        // replaceSection(), getPreloadText()
 }
index a1ad8f9..ad8fa78 100644 (file)
@@ -442,6 +442,11 @@ class ResourceLoaderWikiModuleTest extends ResourceLoaderTestCase {
                        'Redirect resolved by getContent'
                );
        }
+
+       function tearDown() {
+               Title::clearCaches();
+               parent::tearDown();
+       }
 }
 
 class TestResourceLoaderWikiModule extends ResourceLoaderWikiModule {
index 132011a..9ccae8c 100644 (file)
@@ -27,4 +27,9 @@ class SearchNearMatcherTest extends \PHPUnit\Framework\TestCase {
                $title = $matcher->getNearMatch( $searchterm );
                $this->assertEquals( $expected, $title === null ? null : (string)$title );
        }
+
+       function tearDown() {
+               Title::clearCaches();
+               parent::tearDown();
+       }
 }
diff --git a/tests/phpunit/includes/specials/SpecialBlockTest.php b/tests/phpunit/includes/specials/SpecialBlockTest.php
new file mode 100644 (file)
index 0000000..080c6e4
--- /dev/null
@@ -0,0 +1,405 @@
+<?php
+
+use MediaWiki\Block\BlockRestriction;
+use MediaWiki\Block\Restriction\PageRestriction;
+use Wikimedia\TestingAccessWrapper;
+
+/**
+ * @group Blocking
+ * @group Database
+ * @coversDefaultClass SpecialBlock
+ */
+class SpecialBlockTest extends SpecialPageTestBase {
+       /**
+        * {@inheritdoc}
+        */
+       protected function newSpecialPage() {
+               return new SpecialBlock();
+       }
+
+       public function tearDown() {
+               parent::tearDown();
+               $this->resetTables();
+       }
+
+       /**
+        * @covers ::getFormFields()
+        */
+       public function testGetFormFields() {
+               $this->setMwGlobals( [
+                       'wgEnablePartialBlocks' => false,
+               ] );
+               $page = $this->newSpecialPage();
+               $wrappedPage = TestingAccessWrapper::newFromObject( $page );
+               $fields = $wrappedPage->getFormFields();
+               $this->assertInternalType( 'array', $fields );
+               $this->assertArrayHasKey( 'Target', $fields );
+               $this->assertArrayHasKey( 'Expiry', $fields );
+               $this->assertArrayHasKey( 'Reason', $fields );
+               $this->assertArrayHasKey( 'CreateAccount', $fields );
+               $this->assertArrayHasKey( 'DisableUTEdit', $fields );
+               $this->assertArrayHasKey( 'DisableUTEdit', $fields );
+               $this->assertArrayHasKey( 'AutoBlock', $fields );
+               $this->assertArrayHasKey( 'HardBlock', $fields );
+               $this->assertArrayHasKey( 'PreviousTarget', $fields );
+               $this->assertArrayHasKey( 'Confirm', $fields );
+
+               $this->assertArrayNotHasKey( 'EditingRestriction', $fields );
+               $this->assertArrayNotHasKey( 'PageRestrictions', $fields );
+       }
+
+       /**
+        * @covers ::getFormFields()
+        */
+       public function testGetFormFieldsPartialBlocks() {
+               $this->setMwGlobals( [
+                       'wgEnablePartialBlocks' => true,
+               ] );
+               $page = $this->newSpecialPage();
+               $wrappedPage = TestingAccessWrapper::newFromObject( $page );
+               $fields = $wrappedPage->getFormFields();
+
+               $this->assertArrayHasKey( 'EditingRestriction', $fields );
+               $this->assertArrayHasKey( 'PageRestrictions', $fields );
+       }
+
+       /**
+        * @covers ::maybeAlterFormDefaults()
+        */
+       public function testMaybeAlterFormDefaults() {
+               $this->setMwGlobals( [
+                       'wgEnablePartialBlocks' => false,
+               ] );
+
+               $block = $this->insertBlock();
+
+               // Refresh the block from the database.
+               $block = Block::newFromTarget( $block->getTarget() );
+
+               $page = $this->newSpecialPage();
+
+               $wrappedPage = TestingAccessWrapper::newFromObject( $page );
+               $wrappedPage->target = $block->getTarget();
+               $fields = $wrappedPage->getFormFields();
+
+               $this->assertSame( (string)$block->getTarget(), $fields['Target']['default'] );
+               $this->assertSame( $block->isHardblock(), $fields['HardBlock']['default'] );
+               $this->assertSame( $block->prevents( 'createaccount' ), $fields['CreateAccount']['default'] );
+               $this->assertSame( $block->isAutoblocking(), $fields['AutoBlock']['default'] );
+               $this->assertSame( $block->prevents( 'editownusertalk' ), $fields['DisableUTEdit']['default'] );
+               $this->assertSame( $block->mReason, $fields['Reason']['default'] );
+               $this->assertSame( 'infinite', $fields['Expiry']['default'] );
+       }
+
+       /**
+        * @covers ::maybeAlterFormDefaults()
+        */
+       public function testMaybeAlterFormDefaultsPartial() {
+               $this->setMwGlobals( [
+                       'wgEnablePartialBlocks' => true,
+               ] );
+
+               $badActor = $this->getTestUser()->getUser();
+               $sysop = $this->getTestSysop()->getUser();
+               $pageSaturn = $this->getExistingTestPage( 'Saturn' );
+               $pageMars = $this->getExistingTestPage( 'Mars' );
+
+               $block = new \Block( [
+                       'address' => $badActor->getName(),
+                       'user' => $badActor->getId(),
+                       'by' => $sysop->getId(),
+                       'expiry' => 'infinity',
+                       'sitewide' => 0,
+                       'enableAutoblock' => true,
+               ] );
+
+               $block->setRestrictions( [
+                       new PageRestriction( 0, $pageSaturn->getId() ),
+                       new PageRestriction( 0, $pageMars->getId() ),
+               ] );
+
+               $block->insert();
+
+               // Refresh the block from the database.
+               $block = Block::newFromTarget( $block->getTarget() );
+
+               $page = $this->newSpecialPage();
+
+               $wrappedPage = TestingAccessWrapper::newFromObject( $page );
+               $wrappedPage->target = $block->getTarget();
+               $fields = $wrappedPage->getFormFields();
+
+               $titles = [
+                       $pageMars->getTitle()->getPrefixedText(),
+                       $pageSaturn->getTitle()->getPrefixedText(),
+               ];
+
+               $this->assertSame( (string)$block->getTarget(), $fields['Target']['default'] );
+               $this->assertSame( 'partial', $fields['EditingRestriction']['default'] );
+               $this->assertSame( implode( "\n", $titles ), $fields['PageRestrictions']['default'] );
+       }
+
+       /**
+        * @covers ::processForm()
+        */
+       public function testProcessForm() {
+               $this->setMwGlobals( [
+                       'wgEnablePartialBlocks' => false,
+               ] );
+               $badActor = $this->getTestUser()->getUser();
+               $context = RequestContext::getMain();
+
+               $page = $this->newSpecialPage();
+               $reason = 'test';
+               $expiry = 'infinity';
+               $data = [
+                       'Target' => (string)$badActor,
+                       'Expiry' => 'infinity',
+                       'Reason' => [
+                               $reason,
+                       ],
+                       'Confirm' => '1',
+                       'CreateAccount' => '0',
+                       'DisableUTEdit' => '0',
+                       'DisableEmail' => '0',
+                       'HardBlock' => '0',
+                       'AutoBlock' => '1',
+                       'HideUser' => '0',
+                       'Watch' => '0',
+               ];
+               $result = $page->processForm( $data, $context );
+
+               $this->assertTrue( $result );
+
+               $block = Block::newFromTarget( $badActor );
+               $this->assertSame( $reason, $block->mReason );
+               $this->assertSame( $expiry, $block->getExpiry() );
+       }
+
+       /**
+        * @covers ::processForm()
+        */
+       public function testProcessFormExisting() {
+               $this->setMwGlobals( [
+                       'wgEnablePartialBlocks' => false,
+               ] );
+               $badActor = $this->getTestUser()->getUser();
+               $sysop = $this->getTestSysop()->getUser();
+               $context = RequestContext::getMain();
+
+               // Create a block that will be updated.
+               $block = new \Block( [
+                       'address' => $badActor->getName(),
+                       'user' => $badActor->getId(),
+                       'by' => $sysop->getId(),
+                       'expiry' => 'infinity',
+                       'sitewide' => 0,
+                       'enableAutoblock' => false,
+               ] );
+               $block->insert();
+
+               $page = $this->newSpecialPage();
+               $reason = 'test';
+               $expiry = 'infinity';
+               $data = [
+                       'Target' => (string)$badActor,
+                       'Expiry' => 'infinity',
+                       'Reason' => [
+                               $reason,
+                       ],
+                       'Confirm' => '1',
+                       'CreateAccount' => '0',
+                       'DisableUTEdit' => '0',
+                       'DisableEmail' => '0',
+                       'HardBlock' => '0',
+                       'AutoBlock' => '1',
+                       'HideUser' => '0',
+                       'Watch' => '0',
+               ];
+               $result = $page->processForm( $data, $context );
+
+               $this->assertTrue( $result );
+
+               $block = Block::newFromTarget( $badActor );
+               $this->assertSame( $reason, $block->mReason );
+               $this->assertSame( $expiry, $block->getExpiry() );
+               $this->assertSame( '1', $block->isAutoblocking() );
+       }
+
+       /**
+        * @covers ::processForm()
+        */
+       public function testProcessFormRestictions() {
+               $this->setMwGlobals( [
+                       'wgEnablePartialBlocks' => true,
+               ] );
+               $badActor = $this->getTestUser()->getUser();
+               $context = RequestContext::getMain();
+
+               $pageSaturn = $this->getExistingTestPage( 'Saturn' );
+               $pageMars = $this->getExistingTestPage( 'Mars' );
+
+               $titles = [
+                       $pageSaturn->getTitle()->getText(),
+                       $pageMars->getTitle()->getText(),
+               ];
+
+               $page = $this->newSpecialPage();
+               $reason = 'test';
+               $expiry = 'infinity';
+               $data = [
+                       'Target' => (string)$badActor,
+                       'Expiry' => 'infinity',
+                       'Reason' => [
+                               $reason,
+                       ],
+                       'Confirm' => '1',
+                       'CreateAccount' => '0',
+                       'DisableUTEdit' => '0',
+                       'DisableEmail' => '0',
+                       'HardBlock' => '0',
+                       'AutoBlock' => '1',
+                       'HideUser' => '0',
+                       'Watch' => '0',
+                       'EditingRestriction' => 'partial',
+                       'PageRestrictions' => implode( "\n", $titles ),
+               ];
+               $result = $page->processForm( $data, $context );
+
+               $this->assertTrue( $result );
+
+               $block = Block::newFromTarget( $badActor );
+               $this->assertSame( $reason, $block->mReason );
+               $this->assertSame( $expiry, $block->getExpiry() );
+               $this->assertCount( 2, $block->getRestrictions() );
+               $this->assertTrue( BlockRestriction::equals( $block->getRestrictions(), [
+                       new PageRestriction( $block->getId(), $pageMars->getId() ),
+                       new PageRestriction( $block->getId(), $pageSaturn->getId() ),
+               ] ) );
+       }
+
+       /**
+        * @covers ::processForm()
+        */
+       public function testProcessFormRestrictionsChange() {
+               $this->setMwGlobals( [
+                       'wgEnablePartialBlocks' => true,
+               ] );
+               $badActor = $this->getTestUser()->getUser();
+               $context = RequestContext::getMain();
+
+               $pageSaturn = $this->getExistingTestPage( 'Saturn' );
+               $pageMars = $this->getExistingTestPage( 'Mars' );
+
+               $titles = [
+                       $pageSaturn->getTitle()->getText(),
+                       $pageMars->getTitle()->getText(),
+               ];
+
+               // Create a partial block.
+               $page = $this->newSpecialPage();
+               $reason = 'test';
+               $expiry = 'infinity';
+               $data = [
+                       'Target' => (string)$badActor,
+                       'Expiry' => 'infinity',
+                       'Reason' => [
+                               $reason,
+                       ],
+                       'Confirm' => '1',
+                       'CreateAccount' => '0',
+                       'DisableUTEdit' => '0',
+                       'DisableEmail' => '0',
+                       'HardBlock' => '0',
+                       'AutoBlock' => '1',
+                       'HideUser' => '0',
+                       'Watch' => '0',
+                       'EditingRestriction' => 'partial',
+                       'PageRestrictions' => implode( "\n", $titles ),
+               ];
+               $result = $page->processForm( $data, $context );
+
+               $this->assertTrue( $result );
+
+               $block = Block::newFromTarget( $badActor );
+               $this->assertSame( $reason, $block->mReason );
+               $this->assertSame( $expiry, $block->getExpiry() );
+               $this->assertFalse( $block->isSitewide() );
+               $this->assertCount( 2, $block->getRestrictions() );
+               $this->assertTrue( BlockRestriction::equals( $block->getRestrictions(), [
+                       new PageRestriction( $block->getId(), $pageMars->getId() ),
+                       new PageRestriction( $block->getId(), $pageSaturn->getId() ),
+               ] ) );
+
+               // Remove a page from the partial block.
+               $data['PageRestrictions'] = $pageMars->getTitle()->getText();
+               $result = $page->processForm( $data, $context );
+
+               $this->assertTrue( $result );
+
+               $block = Block::newFromTarget( $badActor );
+               $this->assertSame( $reason, $block->mReason );
+               $this->assertSame( $expiry, $block->getExpiry() );
+               $this->assertFalse( $block->isSitewide() );
+               $this->assertCount( 1, $block->getRestrictions() );
+               $this->assertTrue( BlockRestriction::equals( $block->getRestrictions(), [
+                       new PageRestriction( $block->getId(), $pageMars->getId() ),
+               ] ) );
+
+               // Remove the last page from the block.
+               $data['PageRestrictions'] = '';
+               $result = $page->processForm( $data, $context );
+
+               $this->assertTrue( $result );
+
+               $block = Block::newFromTarget( $badActor );
+               $this->assertSame( $reason, $block->mReason );
+               $this->assertSame( $expiry, $block->getExpiry() );
+               $this->assertFalse( $block->isSitewide() );
+               $this->assertCount( 0, $block->getRestrictions() );
+
+               // Change to sitewide.
+               $data['EditingRestriction'] = 'sitewide';
+               $result = $page->processForm( $data, $context );
+
+               $this->assertTrue( $result );
+
+               $block = Block::newFromTarget( $badActor );
+               $this->assertSame( $reason, $block->mReason );
+               $this->assertSame( $expiry, $block->getExpiry() );
+               $this->assertTrue( $block->isSitewide() );
+               $this->assertCount( 0, $block->getRestrictions() );
+
+               // Ensure that there are no restrictions where the blockId is 0.
+               $count = $this->db->selectRowCount(
+                       'ipblocks_restrictions',
+                       '*',
+                       [ 'ir_ipb_id' => 0 ],
+                       __METHOD__
+               );
+               $this->assertSame( 0, $count );
+       }
+
+       protected function insertBlock() {
+               $badActor = $this->getTestUser()->getUser();
+               $sysop = $this->getTestSysop()->getUser();
+
+               $block = new \Block( [
+                       'address' => $badActor->getName(),
+                       'user' => $badActor->getId(),
+                       'by' => $sysop->getId(),
+                       'expiry' => 'infinity',
+                       'sitewide' => 1,
+                       'enableAutoblock' => true,
+               ] );
+
+               $block->insert();
+
+               return $block;
+       }
+
+       protected function resetTables() {
+               $this->db->delete( 'ipblocks', '*', __METHOD__ );
+               $this->db->delete( 'ipblocks_restrictions', '*', __METHOD__ );
+       }
+}
diff --git a/tests/phpunit/includes/specials/pagers/BlockListPagerTest.php b/tests/phpunit/includes/specials/pagers/BlockListPagerTest.php
new file mode 100644 (file)
index 0000000..80df1d0
--- /dev/null
@@ -0,0 +1,239 @@
+<?php
+
+use MediaWiki\Block\Restriction\PageRestriction;
+use MediaWiki\MediaWikiServices;
+use Wikimedia\TestingAccessWrapper;
+
+/**
+ * @group Database
+ * @coversDefaultClass BlockListPager
+ */
+class BlockListPagerTest extends MediaWikiTestCase {
+
+       /**
+        * @covers ::formatValue
+        * @dataProvider formatValueEmptyProvider
+        * @dataProvider formatValueDefaultProvider
+        * @param string $name
+        * @param string $value
+        * @param string $expected
+        */
+       public function testFormatValue( $name, $value, $expected, $row = null ) {
+               $this->setMwGlobals( [
+                       'wgEnablePartialBlocks' => false,
+               ] );
+               $row = $row ?: new stdClass;
+               $pager = new BlockListPager( new SpecialPage(),  [] );
+               $wrappedPager = TestingAccessWrapper::newFromObject( $pager );
+               $wrappedPager->mCurrentRow = $row;
+
+               $formatted = $pager->formatValue( $name, $value );
+               $this->assertEquals( $expected, $formatted );
+       }
+
+       /**
+        * Test empty values.
+        */
+       public function formatValueEmptyProvider() {
+               return [
+                       [
+                               'test',
+                               '',
+                               'Unable to format test',
+                       ],
+                       [
+                               'ipb_timestamp',
+                               wfTimestamp( TS_UNIX ),
+                               date( 'H:i, j F Y' ),
+                       ],
+                       [
+                               'ipb_expiry',
+                               '',
+                               'infinite<br />0 minutes left',
+                       ],
+               ];
+       }
+
+       /**
+        * Test the default row values.
+        */
+       public function formatValueDefaultProvider() {
+               $row = (object)[
+                       'ipb_user' => 0,
+                       'ipb_address' => '127.0.0.1',
+                       'ipb_by_text' => 'Admin',
+                       'ipb_create_account' => 1,
+                       'ipb_auto' => 0,
+                       'ipb_anon_only' => 0,
+                       'ipb_create_account' => 1,
+                       'ipb_enable_autoblock' => 1,
+                       'ipb_deleted' => 0,
+                       'ipb_block_email' => 0,
+                       'ipb_allow_usertalk' => 0,
+                       'ipb_sitewide' => 1,
+               ];
+
+               return [
+                       [
+                               'test',
+                               '',
+                               'Unable to format test',
+                               $row,
+                       ],
+                       [
+                               'ipb_timestamp',
+                               wfTimestamp( TS_UNIX ),
+                               date( 'H:i, j F Y' ),
+                               $row,
+                       ],
+                       [
+                               'ipb_expiry',
+                               '',
+                               'infinite<br />0 minutes left',
+                               $row,
+                       ],
+                       [
+                               'ipb_by',
+                               '',
+                               $row->ipb_by_text,
+                               $row,
+                       ],
+                       [
+                               'ipb_params',
+                               '',
+                               '<ul><li>account creation disabled</li><li>cannot edit own talk page</li></ul>',
+                               $row,
+                       ]
+               ];
+       }
+
+       /**
+        * @covers ::formatValue
+        */
+       public function testFormatValueRestrictions() {
+               $this->setMwGlobals( 'wgArticlePath', '/wiki/$1' );
+
+               $pager = new BlockListPager( new SpecialPage(),  [] );
+
+               $row = (object)[
+                       'ipb_id' => 0,
+                       'ipb_user' => 0,
+                       'ipb_anon_only' => 0,
+                       'ipb_enable_autoblock' => 0,
+                       'ipb_create_account' => 0,
+                       'ipb_block_email' => 0,
+                       'ipb_allow_usertalk' => 1,
+                       'ipb_sitewide' => 0,
+               ];
+               $wrappedPager = TestingAccessWrapper::newFromObject( $pager );
+               $wrappedPager->mCurrentRow = $row;
+
+               $pageName = 'Victor Frankenstein';
+               $page = $this->insertPage( $pageName );
+               $title = $page['title'];
+               $pageId = $page['id'];
+
+               $restrictions = [
+                       ( new PageRestriction( 0, $pageId ) )->setTitle( $title )
+               ];
+
+               $wrappedPager = TestingAccessWrapper::newFromObject( $pager );
+               $wrappedPager->restrictions = $restrictions;
+
+               $formatted = $pager->formatValue( 'ipb_params', '' );
+               $this->assertEquals( '<ul><li>'
+                       // FIXME: Expectation value should not be dynamic
+                       // and must not depend on a localisation message.
+                       // TODO: Mock the message or consider using qqx.
+                       . wfMessage( 'blocklist-editing' )->text()
+                       . '<ul><li><a href="/wiki/Victor_Frankenstein" title="'
+                       . $pageName
+                       . '">'
+                       . $pageName
+                       . '</a></li></ul></li></ul>',
+                       $formatted
+               );
+       }
+
+       /**
+        * @covers ::preprocessResults
+        */
+       public function testPreprocessResults() {
+               // Test the Link Cache.
+               $linkCache = MediaWikiServices::getInstance()->getLinkCache();
+               $wrappedlinkCache = TestingAccessWrapper::newFromObject( $linkCache );
+
+               $links = [
+                       'User:127.0.0.1',
+                       'User_talk:127.0.0.1',
+                       'User:Admin',
+                       'User_talk:Admin',
+               ];
+
+               foreach ( $links as $link ) {
+                       $this->assertNull( $wrappedlinkCache->badLinks->get( $link ) );
+               }
+
+               $row = (object)[
+                       'ipb_address' => '127.0.0.1',
+                       'by_user_name' => 'Admin',
+                       'ipb_sitewide' => 1,
+                       'ipb_timestamp' => $this->db->timestamp( wfTimestamp( TS_MW ) ),
+               ];
+               $pager = new BlockListPager( new SpecialPage(),  [] );
+               $pager->preprocessResults( [ $row ] );
+
+               foreach ( $links as $link ) {
+                       $this->assertSame( 1, $wrappedlinkCache->badLinks->get( $link ) );
+               }
+
+               // Test Sitewide Blocks.
+               $row = (object)[
+                       'ipb_address' => '127.0.0.1',
+                       'by_user_name' => 'Admin',
+                       'ipb_sitewide' => 1,
+               ];
+               $pager = new BlockListPager( new SpecialPage(),  [] );
+               $pager->preprocessResults( [ $row ] );
+
+               $this->assertObjectNotHasAttribute( 'ipb_restrictions', $row );
+
+               $pageName = 'Victor Frankenstein';
+               $page = $this->getExistingTestPage( 'Victor Frankenstein' );
+               $title = $page->getTitle();
+
+               $target = '127.0.0.1';
+
+               // Test Partial Blocks Blocks.
+               $block = new Block( [
+                       'address' => $target,
+                       'by' => $this->getTestSysop()->getUser()->getId(),
+                       'reason' => 'Parce que',
+                       'expiry' => $this->db->getInfinity(),
+                       'sitewide' => false,
+               ] );
+               $block->setRestrictions( [
+                       new PageRestriction( 0, $page->getId() ),
+               ] );
+               $block->insert();
+
+               $result = $this->db->select( 'ipblocks', [ '*' ], [ 'ipb_id' => $block->getId() ] );
+
+               $pager = new BlockListPager( new SpecialPage(),  [] );
+               $pager->preprocessResults( $result );
+
+               $wrappedPager = TestingAccessWrapper::newFromObject( $pager );
+
+               $restrictions = $wrappedPager->restrictions;
+               $this->assertInternalType( 'array', $restrictions );
+
+               $restriction = $restrictions[0];
+               $this->assertEquals( $page->getId(), $restriction->getValue() );
+               $this->assertEquals( $page->getId(), $restriction->getTitle()->getArticleId() );
+               $this->assertEquals( $title->getDBKey(), $restriction->getTitle()->getDBKey() );
+               $this->assertEquals( $title->getNamespace(), $restriction->getTitle()->getNamespace() );
+
+               // Delete the block and the restrictions.
+               $block->delete();
+       }
+}
index 1e1f739..55b3bfc 100644 (file)
@@ -263,6 +263,7 @@ class UserTest extends MediaWikiTestCase {
 
                // increase the edit count
                $user->incEditCount();
+               $user->clearInstanceCache();
 
                $this->assertEquals(
                        4,
index f60f92c..240b3f5 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 use MediaWiki\Linker\LinkTarget;
-use Wikimedia\Rdbms\LoadBalancer;
 use Wikimedia\Rdbms\LBFactory;
+use Wikimedia\Rdbms\LoadBalancer;
 use Wikimedia\ScopedCallback;
 use Wikimedia\TestingAccessWrapper;
 
@@ -1106,6 +1106,10 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase {
                                ]
                        );
 
+               $mockDb->expects( $this->once() )
+                       ->method( 'affectedRows' )
+                       ->willReturn( 2 );
+
                $mockCache = $this->getMockCache();
                $mockCache->expects( $this->exactly( 2 ) )
                        ->method( 'delete' );
@@ -1276,23 +1280,36 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase {
                $mockDb = $this->getMockDb();
                $mockDb->expects( $this->once() )
                        ->method( 'delete' )
-                       ->with(
-                               'watchlist',
+                       ->withConsecutive(
                                [
-                                       'wl_user' => 1,
-                                       'wl_namespace' => 0,
-                                       'wl_title' => 'SomeDbKey',
+                                       'watchlist',
+                                       [
+                                               'wl_user' => 1,
+                                               'wl_namespace' => 0,
+                                               'wl_title' => [ 'SomeDbKey' ],
+                                       ],
+                               ],
+                               [
+                                       'watchlist',
+                                       [
+                                               'wl_user' => 1,
+                                               'wl_namespace' => 1,
+                                               'wl_title' => [ 'SomeDbKey' ],
+                                       ]
                                ]
                        );
-               $mockDb->expects( $this->once() )
+               $mockDb->expects( $this->exactly( 1 ) )
                        ->method( 'affectedRows' )
-                       ->will( $this->returnValue( 1 ) );
+                       ->willReturn( 2 );
 
                $mockCache = $this->getMockCache();
                $mockCache->expects( $this->never() )->method( 'get' );
                $mockCache->expects( $this->once() )
                        ->method( 'delete' )
-                       ->with( '0:SomeDbKey:1' );
+                       ->withConsecutive(
+                               [ '0:SomeDbKey:1' ],
+                               [ '1:SomeDbKey:1' ]
+                       );
 
                $store = $this->newWatchedItemStore(
                        $this->getMockLBFactory( $mockDb ),
@@ -1300,10 +1317,11 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase {
                        $this->getMockReadOnlyMode()
                );
 
+               $titleValue = new TitleValue( 0, 'SomeDbKey' );
                $this->assertTrue(
                        $store->removeWatch(
                                $this->getMockNonAnonUserWithId( 1 ),
-                               new TitleValue( 0, 'SomeDbKey' )
+                               Title::newFromTitleValue( $titleValue )
                        )
                );
        }
@@ -1312,23 +1330,37 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase {
                $mockDb = $this->getMockDb();
                $mockDb->expects( $this->once() )
                        ->method( 'delete' )
-                       ->with(
-                               'watchlist',
+                       ->withConsecutive(
                                [
-                                       'wl_user' => 1,
-                                       'wl_namespace' => 0,
-                                       'wl_title' => 'SomeDbKey',
+                                       'watchlist',
+                                       [
+                                               'wl_user' => 1,
+                                               'wl_namespace' => 0,
+                                               'wl_title' => [ 'SomeDbKey' ],
+                                       ]
+                               ],
+                               [
+                                       'watchlist',
+                                       [
+                                               'wl_user' => 1,
+                                               'wl_namespace' => 1,
+                                               'wl_title' => [ 'SomeDbKey' ],
+                                       ]
                                ]
                        );
+
                $mockDb->expects( $this->once() )
                        ->method( 'affectedRows' )
-                       ->will( $this->returnValue( 0 ) );
+                       ->willReturn( 0 );
 
                $mockCache = $this->getMockCache();
                $mockCache->expects( $this->never() )->method( 'get' );
                $mockCache->expects( $this->once() )
                        ->method( 'delete' )
-                       ->with( '0:SomeDbKey:1' );
+                       ->withConsecutive(
+                               [ '0:SomeDbKey:1' ],
+                               [ '1:SomeDbKey:1' ]
+                       );
 
                $store = $this->newWatchedItemStore(
                        $this->getMockLBFactory( $mockDb ),
@@ -1336,10 +1368,11 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase {
                        $this->getMockReadOnlyMode()
                );
 
+               $titleValue = new TitleValue( 0, 'SomeDbKey' );
                $this->assertFalse(
                        $store->removeWatch(
                                $this->getMockNonAnonUserWithId( 1 ),
-                               new TitleValue( 0, 'SomeDbKey' )
+                               Title::newFromTitleValue( $titleValue )
                        )
                );
        }
index e828e3f..dca1363 100644 (file)
@@ -1878,6 +1878,19 @@ class LanguageTest extends LanguageClassesTestCase {
                ];
        }
 
+       /**
+        * @covers Language::hasVariant
+        */
+       public function testHasVariant() {
+               // See LanguageSrTest::testHasVariant() for additional tests
+               $en = Language::factory( 'en' );
+               $this->assertTrue( $en->hasVariant( 'en' ), 'base is always a variant' );
+               $this->assertFalse( $en->hasVariant( 'en-bogus' ), 'bogus en variant' );
+
+               $bogus = Language::factory( 'bogus' );
+               $this->assertTrue( $bogus->hasVariant( 'bogus' ), 'base is always a variant' );
+       }
+
        /**
         * @covers Language::equals
         */
index 296ee60..c7ff3bb 100644 (file)
@@ -34,6 +34,7 @@ class LanguageArTest extends LanguageClassesTestCase {
                $this->assertSame( $expected, $this->getLang()->normalize( $input ), 'ar-normalised form' );
 
                $this->setMwGlobals( 'wgFixArabicUnicode', false );
+               $this->hideDeprecated( '$wgFixArabicUnicode = false' );
                $this->assertSame( $input, $this->getLang()->normalize( $input ), 'regular normalised form' );
        }
 
index 59b7ba8..f5b33e9 100644 (file)
@@ -52,6 +52,7 @@ class LanguageMlTest extends LanguageClassesTestCase {
                $this->assertSame( $expected, $this->getLang()->normalize( $input ), 'ml-normalised form' );
 
                $this->setMwGlobals( 'wgFixMalayalamUnicode', false );
+               $this->hideDeprecated( '$wgFixMalayalamUnicode = false' );
                $this->assertSame( $input, $this->getLang()->normalize( $input ), 'regular normalised form' );
        }
 
index b846c56..c9f2f3e 100644 (file)
  * @covers SrConverter
  */
 class LanguageSrTest extends LanguageClassesTestCase {
+       /**
+        * @covers Language::hasVariants
+        */
+       public function testHasVariants() {
+               $this->assertTrue( $this->getLang()->hasVariants(), 'sr has variants' );
+       }
+
+       /**
+        * @covers Language::hasVariant
+        */
+       public function testHasVariant() {
+               $langs = [
+                       'sr' => $this->getLang(),
+                       'sr-ec' => Language::factory( 'sr-ec' ),
+                       'sr-cyrl' => Language::factory( 'sr-cyrl' ),
+               ];
+               foreach ( $langs as $code => $l ) {
+                       $p = $l->getParentLanguage();
+                       $this->assertTrue( $p !== null, 'parent language exists' );
+                       $this->assertEquals( 'sr', $p->getCode(), 'sr is parent language' );
+                       $this->assertTrue( $p instanceof LanguageSr, 'parent is LanguageSr' );
+                       // This is a valid variant of the base
+                       $this->assertTrue( $p->hasVariant( $l->getCode() ) );
+                       // This test should be tweaked if/when sr-ec is renamed (T117845)
+                       // to swap the roles of sr-ec and sr-Cyrl
+                       $this->assertTrue( $l->hasVariant( 'sr-ec' ), 'sr-ec exists' );
+                       // note that sr-cyrl is an alias, not a (strict) variant name
+                       foreach ( [ 'sr-EC', 'sr-Cyrl', 'sr-cyrl', 'sr-bogus' ] as $v ) {
+                               $this->assertFalse( $l->hasVariant( $v ), "$v is not a variant of $code" );
+                       }
+               }
+       }
+
+       /**
+        * @covers Language::hasVariant
+        */
+       public function testHasVariantBogus() {
+               $langs = [
+                       // Note that case matters when calling Language::factory();
+                       // these are all bogus language codes
+                       'sr-EC' => Language::factory( 'sr-EC' ),
+                       'sr-Cyrl' => Language::factory( 'sr-Cyrl' ),
+                       'sr-bogus' => Language::factory( 'sr-bogus' ),
+               ];
+               foreach ( $langs as $code => $l ) {
+                       $p = $l->getParentLanguage();
+                       $this->assertTrue( $p === null, 'no parent for bogus language' );
+                       $this->assertFalse( $l instanceof LanguageSr, "$code is not sr" );
+                       $this->assertFalse( $this->getLang()->hasVariant( $code ), "$code is not a sr variant" );
+                       foreach ( [ 'sr', 'sr-ec', 'sr-EC', 'sr-Cyrl', 'sr-cyrl', 'sr-bogus' ] as $v ) {
+                               if ( $v !== $code ) {
+                                       $this->assertFalse( $l->hasVariant( $v ), "no variant $v" );
+                               }
+                       }
+               }
+       }
+
        /**
         * @covers LanguageConverter::convertTo
         */
index 33423d8..b8f0d12 100644 (file)
        QUnit.test( 'RLQ.push', function ( assert ) {
                /* global RLQ */
                var loaded = 0,
+                       called = 0,
                        done = assert.async();
                mw.loader.testCallback = function () {
                        loaded++;
                        delete mw.loader.testCallback;
                };
-               mw.loader.implement( 'test.rlq-push', [ QUnit.fixurl( mw.config.get( 'wgScriptPath' ) + '/tests/qunit/data/mwLoaderTestCallback.js' ) ] );
+               mw.loader.implement( 'test.rlq-push', [
+                       QUnit.fixurl( mw.config.get( 'wgScriptPath' ) + '/tests/qunit/data/mwLoaderTestCallback.js' )
+               ] );
+
+               // Regression test for T208093
+               RLQ.push( function () {
+                       called++;
+               } );
+               assert.strictEqual( called, 1, 'Invoke plain callbacks' );
 
                RLQ.push( [ 'test.rlq-push', function () {
                        assert.strictEqual( loaded, 1, 'Load the required module' );
index 8c6f788..913022d 100644 (file)
 
                expected = '<b><a title="Bold" href="/wiki/Bold">Bold</a>!</b>';
                mw.messages.set( 'integration-test', '<b>[[Bold]]!</b>' );
+               mw.messages.set( 'param-test', 'Hello $1' );
+               mw.messages.set( 'param-test-with-link', 'Hello $1 [[$2|$3]]' );
 
                assert.strictEqual(
                        mw.message( 'integration-test' ).parse(),
                        'jQuery plugin $.fn.msg() works correctly'
                );
 
+               assert.strictEqual(
+                       mw.message( 'param-test', $( '<span>' ).text( 'World' ) ).parse(),
+                       'Hello <span>World</span>',
+                       'Passing a jQuery object as a parameter to a message without wikitext works correctly'
+               );
+
+               assert.strictEqual(
+                       mw.message( 'param-test', $( '<span>' ).text( 'World' ).get( 0 ) ).parse(),
+                       'Hello <span>World</span>',
+                       'Passing a DOM node as a parameter to a message without wikitext works correctly'
+               );
+
+               assert.strictEqual(
+                       mw.message( 'param-test', undefined ).parse(),
+                       'Hello $1',
+                       'Passing undefined as a parameter to a message does not throw an exception'
+               );
+
+               assert.strictEqual(
+                       mw.message(
+                               'param-test-with-link',
+                               $( '<span>' ).text( 'cruel' ),
+                               'Globe',
+                               'world'
+                       ).parse(),
+                       'Hello <span>cruel</span> <a title="Globe" href="/wiki/Globe">world</a>',
+                       'Message with a jQuery parameter and a parsed link'
+               );
+
                mw.messages.set( 'integration-test-extlink', '[$1 Link]' );
                msg = mw.message(
                        'integration-test-extlink',