Merge "RC filter: hidebyothers"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Thu, 24 Nov 2016 00:26:04 +0000 (00:26 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Thu, 24 Nov 2016 00:26:04 +0000 (00:26 +0000)
461 files changed:
.eslintrc.json [new file with mode: 0644]
.jscsrc [deleted file]
.jshintignore [deleted file]
.jshintrc [deleted file]
.mailmap
CREDITS
Gruntfile.js
RELEASE-NOTES-1.29
docs/extension.schema.json
docs/extension.schema.v1.json
docs/hooks.txt
includes/Block.php
includes/DefaultSettings.php
includes/EditPage.php
includes/Message.php
includes/MimeMagic.php
includes/ServiceWiring.php
includes/actions/ViewAction.php
includes/api/ApiBase.php
includes/api/ApiHelp.php
includes/api/ApiPageSet.php
includes/api/ApiParamInfo.php
includes/api/ApiQueryAllImages.php
includes/api/ApiQueryAllPages.php
includes/api/ApiQuerySiteinfo.php
includes/api/ApiResetPassword.php
includes/api/i18n/ast.json
includes/api/i18n/bgn.json
includes/api/i18n/en.json
includes/api/i18n/gl.json
includes/api/i18n/id.json
includes/api/i18n/ja.json
includes/api/i18n/ko.json
includes/api/i18n/lij.json
includes/api/i18n/nb.json
includes/api/i18n/nl.json
includes/api/i18n/qqq.json
includes/api/i18n/zh-hans.json
includes/auth/LocalPasswordPrimaryAuthenticationProvider.php
includes/auth/TemporaryPasswordAuthenticationRequest.php
includes/auth/TemporaryPasswordPrimaryAuthenticationProvider.php
includes/auth/Throttler.php
includes/cache/MessageCache.php
includes/changetags/ChangeTags.php
includes/collation/Collation.php
includes/collation/IcuCollation.php
includes/collation/NumericUppercaseCollation.php
includes/content/CodeContentHandler.php
includes/debug/logger/LegacyLogger.php
includes/debug/logger/monolog/WikiProcessor.php
includes/exception/MWExceptionRenderer.php
includes/filerepo/ForeignDBRepo.php
includes/filerepo/ForeignDBViaLBRepo.php
includes/filerepo/LocalRepo.php
includes/filerepo/file/ForeignDBFile.php
includes/filerepo/file/LocalFile.php
includes/filerepo/file/OldLocalFile.php
includes/htmlform/fields/HTMLAutoCompleteSelectField.php
includes/htmlform/fields/HTMLTextField.php
includes/installer/i18n/ar.json
includes/installer/i18n/ast.json
includes/installer/i18n/ja.json
includes/installer/i18n/ku-latn.json
includes/installer/i18n/nb.json
includes/installer/i18n/nl.json
includes/installer/i18n/pt.json
includes/installer/i18n/udm.json
includes/libs/objectcache/WinCacheBagOStuff.php
includes/page/WikiFilePage.php
includes/page/WikiPage.php
includes/parser/CoreParserFunctions.php
includes/parser/Parser.php
includes/password/EncryptedPassword.php
includes/password/MWOldPassword.php
includes/registration/ExtensionProcessor.php
includes/resourceloader/ResourceLoaderClientHtml.php
includes/resourceloader/ResourceLoaderFileModule.php
includes/resourceloader/ResourceLoaderImageModule.php
includes/resourceloader/ResourceLoaderModule.php
includes/resourceloader/ResourceLoaderUserOptionsModule.php
includes/resourceloader/ResourceLoaderUserTokensModule.php
includes/resourceloader/ResourceLoaderWikiModule.php
includes/skins/Skin.php
includes/specials/SpecialActiveusers.php
includes/specials/SpecialPasswordReset.php
includes/specials/SpecialTrackingCategories.php
includes/specials/pagers/ActiveUsersPager.php
includes/upload/UploadStash.php
includes/user/PasswordReset.php
includes/user/User.php
jsduck.json
languages/i18n/ace.json
languages/i18n/ady-cyrl.json
languages/i18n/aeb-arab.json
languages/i18n/aln.json
languages/i18n/am.json
languages/i18n/an.json
languages/i18n/anp.json
languages/i18n/ar.json
languages/i18n/arc.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/av.json
languages/i18n/avk.json
languages/i18n/awa.json
languages/i18n/az.json
languages/i18n/azb.json
languages/i18n/ba.json
languages/i18n/ban.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/bto.json
languages/i18n/ca.json
languages/i18n/ce.json
languages/i18n/ceb.json
languages/i18n/ch.json
languages/i18n/ckb.json
languages/i18n/co.json
languages/i18n/cps.json
languages/i18n/crh-latn.json
languages/i18n/cs.json
languages/i18n/csb.json
languages/i18n/cv.json
languages/i18n/cy.json
languages/i18n/de.json
languages/i18n/diq.json
languages/i18n/dsb.json
languages/i18n/dtp.json
languages/i18n/dty.json
languages/i18n/dv.json
languages/i18n/el.json
languages/i18n/en.json
languages/i18n/eo.json
languages/i18n/es.json
languages/i18n/et.json
languages/i18n/eu.json
languages/i18n/fa.json
languages/i18n/fi.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/gd.json
languages/i18n/gl.json
languages/i18n/glk.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/gv.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.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/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/kk-arab.json
languages/i18n/kk-latn.json
languages/i18n/km.json
languages/i18n/ko.json
languages/i18n/krc.json
languages/i18n/ksh.json
languages/i18n/ku-latn.json
languages/i18n/kw.json
languages/i18n/la.json
languages/i18n/lad.json
languages/i18n/lb.json
languages/i18n/lfn.json
languages/i18n/lg.json
languages/i18n/li.json
languages/i18n/lij.json
languages/i18n/liv.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/ltg.json
languages/i18n/lus.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/min.json
languages/i18n/mk.json
languages/i18n/ml.json
languages/i18n/mr.json
languages/i18n/ms.json
languages/i18n/mwl.json
languages/i18n/my.json
languages/i18n/myv.json
languages/i18n/mzn.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/os.json
languages/i18n/pa.json
languages/i18n/pam.json
languages/i18n/pcd.json
languages/i18n/pdc.json
languages/i18n/pfl.json
languages/i18n/pl.json
languages/i18n/pms.json
languages/i18n/pnb.json
languages/i18n/pnt.json
languages/i18n/prg.json
languages/i18n/ps.json
languages/i18n/pt-br.json
languages/i18n/pt.json
languages/i18n/qqq.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/sco.json
languages/i18n/sd.json
languages/i18n/sdc.json
languages/i18n/sdh.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/si.json
languages/i18n/sk.json
languages/i18n/sl.json
languages/i18n/sli.json
languages/i18n/sq.json
languages/i18n/srn.json
languages/i18n/stq.json
languages/i18n/su.json
languages/i18n/sv.json
languages/i18n/sw.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/tly.json
languages/i18n/to.json
languages/i18n/tpi.json
languages/i18n/tr.json
languages/i18n/tru.json
languages/i18n/ts.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/vep.json
languages/i18n/vi.json
languages/i18n/vmf.json
languages/i18n/vo.json
languages/i18n/vot.json
languages/i18n/war.json
languages/i18n/wuu.json
languages/i18n/xal.json
languages/i18n/xmf.json
languages/i18n/yi.json
languages/i18n/yo.json
languages/i18n/zea.json
languages/i18n/zh-hans.json
languages/i18n/zh-hant.json
languages/messages/MessagesBn.php
maintenance/cleanupUploadStash.php
maintenance/findMissingFiles.php
maintenance/findOrphanedFiles.php
maintenance/purgeChangedFiles.php
maintenance/purgeParserCache.php
maintenance/runBatchedQuery.php
maintenance/updateCredits.php
maintenance/wrapOldPasswords.php
package.json
phpcs.xml
resources/Resources.php
resources/lib/json2/json2.js [deleted file]
resources/src/jquery/jquery.accessKeyLabel.js
resources/src/jquery/jquery.autoEllipsis.js
resources/src/jquery/jquery.byteLimit.js
resources/src/jquery/jquery.color.js
resources/src/jquery/jquery.colorUtil.js
resources/src/jquery/jquery.confirmable.js
resources/src/jquery/jquery.expandableField.js
resources/src/jquery/jquery.hidpi.js
resources/src/jquery/jquery.highlightText.js
resources/src/jquery/jquery.localize.js
resources/src/jquery/jquery.mwExtension.js
resources/src/jquery/jquery.placeholder.js
resources/src/jquery/jquery.qunit.completenessTest.js
resources/src/jquery/jquery.spinner.js
resources/src/jquery/jquery.suggestions.js
resources/src/jquery/jquery.tablesorter.js
resources/src/jquery/jquery.textSelection.js
resources/src/json-skip.js [deleted file]
resources/src/mediawiki.action/mediawiki.action.edit.stash.js
resources/src/mediawiki.action/mediawiki.action.history.js
resources/src/mediawiki.action/mediawiki.action.view.dblClickEdit.js
resources/src/mediawiki.action/mediawiki.action.view.redirect.js
resources/src/mediawiki.language/languages/ga.js
resources/src/mediawiki.language/languages/he.js
resources/src/mediawiki.language/languages/hy.js
resources/src/mediawiki.language/mediawiki.language.js
resources/src/mediawiki.language/mediawiki.language.numbers.js
resources/src/mediawiki.legacy/protect.js
resources/src/mediawiki.legacy/wikibits.js
resources/src/mediawiki.messagePoster/mediawiki.messagePoster.MessagePoster.js
resources/src/mediawiki.messagePoster/mediawiki.messagePoster.WikitextMessagePoster.js
resources/src/mediawiki.messagePoster/mediawiki.messagePoster.factory.js
resources/src/mediawiki.special/mediawiki.special.apisandbox.js
resources/src/mediawiki.special/mediawiki.special.edittags.js
resources/src/mediawiki.special/mediawiki.special.upload.js
resources/src/mediawiki.toolbar/toolbar.js
resources/src/mediawiki.widgets.datetime/CalendarWidget.js
resources/src/mediawiki.widgets.datetime/DateTimeFormatter.js
resources/src/mediawiki.widgets.datetime/DateTimeInputWidget.js
resources/src/mediawiki.widgets.datetime/DiscordianDateTimeFormatter.js
resources/src/mediawiki.widgets.datetime/ProlepticGregorianDateTimeFormatter.js
resources/src/mediawiki.widgets/mw.widgets.CalendarWidget.js
resources/src/mediawiki.widgets/mw.widgets.CategoryCapsuleItemWidget.js
resources/src/mediawiki.widgets/mw.widgets.CategorySelector.js
resources/src/mediawiki.widgets/mw.widgets.ComplexTitleInputWidget.js
resources/src/mediawiki.widgets/mw.widgets.DateInputWidget.js
resources/src/mediawiki.widgets/mw.widgets.NamespaceInputWidget.js
resources/src/mediawiki.widgets/mw.widgets.SearchInputWidget.js
resources/src/mediawiki.widgets/mw.widgets.TitleInputWidget.js
resources/src/mediawiki.widgets/mw.widgets.TitleSearchWidget.js
resources/src/mediawiki.widgets/mw.widgets.TitleWidget.js
resources/src/mediawiki.widgets/mw.widgets.UserInputWidget.js
resources/src/mediawiki/ForeignApi.js
resources/src/mediawiki/api.js
resources/src/mediawiki/api/edit.js
resources/src/mediawiki/api/parse.js
resources/src/mediawiki/api/upload.js
resources/src/mediawiki/api/watch.js
resources/src/mediawiki/htmlform/hide-if.js
resources/src/mediawiki/htmlform/htmlform.Element.js
resources/src/mediawiki/htmlform/multiselect.js
resources/src/mediawiki/mediawiki.ForeignStructuredUpload.BookletLayout.js
resources/src/mediawiki/mediawiki.ForeignStructuredUpload.js
resources/src/mediawiki/mediawiki.ForeignUpload.js
resources/src/mediawiki/mediawiki.Title.js
resources/src/mediawiki/mediawiki.Title.phpCharToUpper.js [new file with mode: 0644]
resources/src/mediawiki/mediawiki.Upload.BookletLayout.js
resources/src/mediawiki/mediawiki.Upload.Dialog.js
resources/src/mediawiki/mediawiki.Upload.js
resources/src/mediawiki/mediawiki.Uri.js
resources/src/mediawiki/mediawiki.checkboxtoggle.js
resources/src/mediawiki/mediawiki.confirmCloseWindow.js
resources/src/mediawiki/mediawiki.debug.js
resources/src/mediawiki/mediawiki.errorLogger.js
resources/src/mediawiki/mediawiki.experiments.js
resources/src/mediawiki/mediawiki.feedback.js
resources/src/mediawiki/mediawiki.filewarning.js
resources/src/mediawiki/mediawiki.inspect.js
resources/src/mediawiki/mediawiki.jqueryMsg.js
resources/src/mediawiki/mediawiki.js
resources/src/mediawiki/mediawiki.log.js
resources/src/mediawiki/mediawiki.notification.js
resources/src/mediawiki/mediawiki.searchSuggest.js
resources/src/mediawiki/mediawiki.template.mustache.js
resources/src/mediawiki/mediawiki.user.blockcookie.js [new file with mode: 0644]
resources/src/mediawiki/mediawiki.user.js
resources/src/mediawiki/mediawiki.util.js
resources/src/mediawiki/mediawiki.viewport.js
resources/src/mediawiki/page/gallery-slideshow.js
resources/src/mediawiki/page/image-pagination.js
resources/src/mediawiki/page/patrol.ajax.js
resources/src/mediawiki/page/rollback.js
resources/src/mediawiki/page/startup.js
resources/src/moment-dmy.js
resources/src/moment-locale-overrides.js
resources/src/polyfill-nodeTypes.js
resources/src/startup.js
tests/common/TestsAutoLoader.php
tests/parser/ParserTestMockParser.php [new file with mode: 0644]
tests/parser/ParserTestRunner.php
tests/parser/parserTests.txt
tests/phpunit/MediaWikiTestCase.php
tests/phpunit/includes/auth/TemporaryPasswordPrimaryAuthenticationProviderTest.php
tests/phpunit/includes/auth/ThrottlerTest.php
tests/phpunit/includes/cache/GenderCacheTest.php
tests/phpunit/includes/htmlform/HTMLAutoCompleteSelectFieldTest.php
tests/phpunit/includes/resourceloader/ResourceLoaderClientHtmlTest.php
tests/phpunit/includes/resourceloader/ResourceLoaderTest.php
tests/phpunit/includes/user/PasswordResetTest.php
tests/phpunit/includes/user/UserTest.php
tests/phpunit/suite.xml
tests/phpunit/tests/MediaWikiTestCaseTest.php
tests/qunit/data/testrunner.js
tests/qunit/suites/resources/jquery/jquery.color.test.js
tests/qunit/suites/resources/jquery/jquery.makeCollapsible.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.Title.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.Uri.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.loader.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.test.js

diff --git a/.eslintrc.json b/.eslintrc.json
new file mode 100644 (file)
index 0000000..044dd72
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "extends": "wikimedia",
+       "env": {
+               "browser": true,
+               "jquery": true,
+               "qunit": true
+       },
+       "globals": {
+               "require": false,
+               "module": false,
+               "mediaWiki": false,
+               "mwPerformance": false,
+               "OO": false
+       },
+       "rules": {
+               "dot-notation": 0
+       }
+}
diff --git a/.jscsrc b/.jscsrc
deleted file mode 100644 (file)
index 3f7e90d..0000000
--- a/.jscsrc
+++ /dev/null
@@ -1,36 +0,0 @@
-{
-       "preset": "wikimedia",
-       "es3": true,
-
-       "requireVarDeclFirst": null,
-
-       "requireDotNotation": { "allExcept": [ "keywords" ] },
-       "jsDoc": {
-               "checkAnnotations": {
-                       "preset": "jsduck5",
-                       "extra": {
-                               "context": "some",
-                               "see": "some"
-                       }
-               },
-               "checkParamNames": true,
-               "checkRedundantAccess": true,
-               "checkRedundantReturns": true,
-               "checkTypes": "strictNativeCase",
-               "requireNewlineAfterDescription": true,
-               "requireParamTypes": true,
-               "requireReturnTypes": true
-       },
-
-       "excludeFiles": [
-               "docs/**",
-               "extensions/**",
-               "node_modules/**",
-               "resources/lib/**",
-               "resources/src/jquery.tipsy/**",
-               "resources/src/jquery/jquery.farbtastic.js",
-               "resources/src/mediawiki.libs/**",
-               "skins/**",
-               "vendor/**"
-       ]
-}
diff --git a/.jshintignore b/.jshintignore
deleted file mode 100644 (file)
index fdde7d0..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-# Generated documentation
-docs/**
-
-# third-party libs
-extensions/**
-node_modules/**
-resources/lib/**
-resources/src/jquery.tipsy/**
-resources/src/jquery/jquery.farbtastic.js
-resources/src/mediawiki.libs/**
-skins/**
-vendor/**
diff --git a/.jshintrc b/.jshintrc
deleted file mode 100644 (file)
index 441c4e3..0000000
--- a/.jshintrc
+++ /dev/null
@@ -1,33 +0,0 @@
-{
-       // Enforcing
-       "bitwise": true,
-       "eqeqeq": true,
-       "esversion": 3,
-       "freeze": true,
-       "futurehostile": true,
-       "latedef": "nofunc",
-       "noarg": true,
-       "nonew": true,
-       "strict": false,
-       "undef": true,
-       "unused": true,
-
-       // Relaxing
-       "laxbreak": true,
-       "multistr": true,
-
-       // Environment
-       "browser": true,
-
-       "globals": {
-               "require": false,
-               "module": false,
-               "mediaWiki": true,
-               "JSON": true,
-               "OO": true,
-               "mwPerformance": true,
-               "jQuery": false,
-               "QUnit": false,
-               "sinon": false
-       }
-}
index 6d9f8e8..dd968e8 100644 (file)
--- a/.mailmap
+++ b/.mailmap
@@ -3,18 +3,18 @@
 #
 # To update the CREDITS file, run maintenance/updateCredits.php
 #
-# Two types of entries are useful here. The first sets a cannonical author
+# Two types of entries are useful here. The first sets a canonical author
 # name for a given email address:
 #
-#   Cannonical Author Name <author email>
+#   Canonical Author Name <author email>
 #
 # The second allows collecting alternate email addresses into a single
-# cannonical author name and email address:
+# canonical author name and email address:
 #
-#   Cannonical Author Name <author email> <alternate email>
+#   Canonical Author Name <author email> <alternate email>
 #
 # Mappings are only needed for authors who have used multiple author names
-# and/or author emails for revisions over time. Author names begenning with
+# and/or author emails for revisions over time. Author names beginning with
 # "[BOT]" will be omitted from the CREDITS file.
 #
 # See also: https://git-scm.com/docs/git-shortlog#_mapping_authors
@@ -32,9 +32,9 @@ addshore <addshorewiki@gmail.com>
 Aditya Sastry <ganeshaditya1@gmail.com>
 Adrian Heine <adrian.heine@wikimedia.de>
 Alex Z. <mrzmanwiki@gmail.com> <mrzman@users.mediawiki.org>
-Alexander Emsenhuber <ialex.wiki@gmail.com>
-Alexander Emsenhuber <ialex.wiki@gmail.com> <ialex@users.mediawiki.org>
-Alexander Emsenhuber <ialex.wiki@gmail.com> <mediawiki@emsenhuber.ch>
+Alexandre Emsenhuber <ialex.wiki@gmail.com>
+Alexandre Emsenhuber <ialex.wiki@gmail.com> <ialex@users.mediawiki.org>
+Alexandre Emsenhuber <ialex.wiki@gmail.com> <mediawiki@emsenhuber.ch>
 Alexander Monk <krenair@gmail.com>
 Alexander Monk <krenair@gmail.com> <alex@wikimedia.org>
 Alexander Monk <krenair@gmail.com> <krenair@wikimedia.org>
diff --git a/CREDITS b/CREDITS
index 1c1cf87..d9ff970 100644 (file)
--- a/CREDITS
+++ b/CREDITS
@@ -34,7 +34,6 @@ following names for their contribution to the product.
 * Alex Ivanov
 * Alex Shih-Han Lin
 * Alex Z.
-* Alexander Emsenhuber
 * Alexander I. Mashin
 * Alexander Lehmann
 * Alexander Monk
index a08db5c..55b7932 100644 (file)
@@ -1,33 +1,44 @@
-/*jshint node:true */
+/* eslint-env node */
+
 module.exports = function ( grunt ) {
-       grunt.loadNpmTasks( 'grunt-contrib-copy' );
-       grunt.loadNpmTasks( 'grunt-contrib-jshint' );
-       grunt.loadNpmTasks( 'grunt-stylelint' );
-       grunt.loadNpmTasks( 'grunt-contrib-watch' );
-       grunt.loadNpmTasks( 'grunt-banana-checker' );
-       grunt.loadNpmTasks( 'grunt-jscs' );
-       grunt.loadNpmTasks( 'grunt-jsonlint' );
-       grunt.loadNpmTasks( 'grunt-karma' );
 
        var wgServer = process.env.MW_SERVER,
                wgScriptPath = process.env.MW_SCRIPT_PATH,
                karmaProxy = {};
 
+       grunt.loadNpmTasks( 'grunt-banana-checker' );
+       grunt.loadNpmTasks( 'grunt-contrib-copy' );
+       grunt.loadNpmTasks( 'grunt-contrib-watch' );
+       grunt.loadNpmTasks( 'grunt-eslint' );
+       grunt.loadNpmTasks( 'grunt-jsonlint' );
+       grunt.loadNpmTasks( 'grunt-karma' );
+       grunt.loadNpmTasks( 'grunt-stylelint' );
+
        karmaProxy[ wgScriptPath ] = wgServer + wgScriptPath;
 
        grunt.initConfig( {
-               jshint: {
-                       options: {
-                               jshintrc: true
-                       },
-                       all: '.'
-               },
-               jscs: {
-                       all: '.'
+               eslint: {
+                       all: [
+                               '**/*.js',
+                               '!docs/**',
+                               '!tests/**',
+                               '!node_modules/**',
+                               '!resources/lib/**',
+                               '!resources/src/jquery.tipsy/**',
+                               '!resources/src/jquery/jquery.farbtastic.js',
+                               '!resources/src/mediawiki.libs/**',
+                               '!vendor/**',
+                               // Explicitly say "**/*.js" here in case of symlinks
+                               '!extensions/**/*.js',
+                               '!skins/**/*.js',
+                               // Skip functions aren't even parseable
+                               '!resources/src/dom-level2-skip.js',
+                               '!resources/src/es5-skip.js',
+                               '!resources/src/mediawiki.hidpi-skip.js'
+                       ]
                },
                jsonlint: {
                        all: [
-                               '.jscsrc',
                                '**/*.json',
                                '!{docs/js,extensions,node_modules,skins,vendor}/**'
                        ]
@@ -48,7 +59,7 @@ module.exports = function ( grunt ) {
                },
                watch: {
                        files: [
-                               '.{stylelintrc,jscsrc,jshintignore,jshintrc}',
+                               '.{stylelintrc,eslintrc.json}',
                                '**/*',
                                '!{docs,extensions,node_modules,skins,vendor}/**'
                        ],
@@ -103,7 +114,7 @@ module.exports = function ( grunt ) {
                return !!( process.env.MW_SERVER && process.env.MW_SCRIPT_PATH );
        } );
 
-       grunt.registerTask( 'lint', [ 'jshint', 'jscs', 'jsonlint', 'banana', 'stylelint' ] );
+       grunt.registerTask( 'lint', [ 'eslint', 'banana', 'stylelint' ] );
        grunt.registerTask( 'qunit', [ 'assert-mw-env', 'karma:main' ] );
 
        grunt.registerTask( 'test', [ 'lint' ] );
index fa1e1c4..23c34df 100644 (file)
@@ -6,8 +6,18 @@ MediaWiki 1.29 is an alpha-quality branch and is not recommended for use in
 production.
 
 === Configuration changes in 1.29 ===
+* Default cookie expiration time has been reduced to 30 days. Login cookie expiration time is
+  kept at 180 days.
+* A new configuration variable has been added: $wgCookieSetOnAutoblock. This
+  determines whether to set a cookie when a user is autoblocked. Doing so means
+  that a blocked user, even after logging out and moving to a new IP address,
+  will still be blocked.
+* The resetpassword right and associated password reset capture feature has
+  been removed.
 
 === New features in 1.29 ===
+* (T5233) A cookie can now be set when a user is autoblocked, to track that user if
+  they move to a new IP address. This is disabled by default.
 
 === External library changes in 1.29 ===
 
@@ -24,6 +34,7 @@ production.
   action=createaccount, action=linkaccount, and action=changeauthenticationdata
   in the query string is now an error. They should be submitted in the POST
   body instead.
+* The capture option for action=resetpassword has been removed
 
 === Action API internal changes in 1.29 ===
 
index 2cf5fe1..30feaef 100644 (file)
                "SkinOOUIThemes": {
                        "type": "object"
                },
+               "PasswordPolicy": {
+                       "type": "object",
+                       "description": "Password policies"
+               },
+               "FileExtensions": {
+                       "type": "array",
+                       "description": "Preferred file extensions for uploading",
+                       "items": {
+                               "type": "string"
+                       }
+               },
                "callback": {
                        "type": [
                                "array",
index 8659dff..421ea5c 100644 (file)
                "SkinOOUIThemes": {
                        "type": "object"
                },
+               "PasswordPolicy": {
+                       "type": "object",
+                       "description": "Password policies"
+               },
+               "FileExtensions": {
+                       "type": "array",
+                       "description": "Preferred file extensions for uploading",
+                       "items": {
+                               "type": "string"
+                       }
+               },
                "callback": {
                        "type": [
                                "array",
index 5b707c1..a73d50f 100644 (file)
@@ -2464,6 +2464,13 @@ $revId: ID of the revision that was parsed to create $parserOutput
 'ParserCloned': Called when the parser is cloned.
 $parser: Newly-cloned Parser object
 
+'ParserFetchTemplate': Called when the parser fetches a template
+$parser: Parser Parser object or false
+$title: Title object of the template to be fetched
+$rev: Revision object of the template
+&$text: Transclusion text of the template or false or null
+&$deps: Array of template dependencies with 'title', 'page_id', 'rev_id' keys
+
 'ParserFirstCallInit': Called when the parser initialises for the first time.
 &$parser: Parser object being cleared
 
@@ -3217,6 +3224,15 @@ $engine: the search engine
   message key to use in the name column,
 $context: IContextSource object
 
+'SpecialTrackingCategories::preprocess': Called after LinkBatch on Special:TrackingCategories
+$specialPage: The SpecialTrackingCategories object
+$trackingCategories: Array of data from Special:TrackingCategories with msg and cats
+
+'SpecialTrackingCategories::generateCatLink': Called for each cat link on Special:TrackingCategories
+$specialPage: The SpecialTrackingCategories object
+$catTitle: The Title object of the linked category
+&$html: The Result html
+
 'SpecialUploadComplete': Called after successfully uploading a file from
 Special:Upload.
 &$form: The SpecialUpload object
index a11ba26..8663d03 100644 (file)
@@ -1417,6 +1417,33 @@ class Block {
                $this->blocker = $user;
        }
 
+       /**
+        * Set the 'BlockID' cookie to this block's ID and expiry time. The cookie's expiry will be
+        * the same as the block's, unless it's greater than $wgCookieExpiration in which case
+        * $wgCookieExpiration will be used instead (defaults to 30 days).
+        *
+        * An empty value can also be set, in order to retain the cookie but remove the block ID
+        * (e.g. as used in User::getBlockedStatus).
+        *
+        * @param WebResponse $response The response on which to set the cookie.
+        * @param boolean $setEmpty Whether to set the cookie's value to the empty string.
+        */
+       public function setCookie( WebResponse $response, $setEmpty = false ) {
+               // Calculate the default expiry time.
+               $config = RequestContext::getMain()->getConfig();
+               $defaultExpiry = wfTimestamp() + $config->get( 'CookieExpiration' );
+
+               // Use the Block's expiry time only if it's less than the default.
+               $expiry = wfTimestamp( TS_UNIX, $this->getExpiry() );
+               if ( $expiry > $defaultExpiry ) {
+                       // The *default* default expiry is 30 days.
+                       $expiry = $defaultExpiry;
+               }
+
+               $cookieValue = $setEmpty ? '' : $this->getId();
+               $response->setCookie( 'BlockID', $cookieValue, $expiry );
+       }
+
        /**
         * Get the key and parameters for the corresponding error message.
         *
index 9d8ccf8..792b9bc 100644 (file)
@@ -1586,7 +1586,7 @@ $wgEnableUserEmail = true;
 
 /**
  * Set to true to put the sending user's email in a Reply-To header
- * instead of From. ($wgEmergencyContact will be used as From.)
+ * instead of From. ($wgPasswordSender will be used as From.)
  *
  * Some mailers (eg SMTP) set the SMTP envelope sender to the From value,
  * which can cause problems with SPF validation and leak recipient addresses
@@ -5864,7 +5864,7 @@ $wgProxyList = [];
 /**
  * Default cookie lifetime, in seconds. Setting to 0 makes all cookies session-only.
  */
-$wgCookieExpiration = 180 * 86400;
+$wgCookieExpiration = 30 * 86400;
 
 /**
  * Default login cookie lifetime, in seconds. Setting
@@ -5872,7 +5872,7 @@ $wgCookieExpiration = 180 * 86400;
  * calculate the cookie lifetime. As with $wgCookieExpiration, 0 will make
  * login cookies session-only.
  */
-$wgExtendedLoginCookieExpiration = null;
+$wgExtendedLoginCookieExpiration = 180 * 86400;
 
 /**
  * Set to set an explicit domain on the login cookies eg, "justthis.domain.org"
@@ -5926,6 +5926,12 @@ $wgCacheVaryCookies = [];
  */
 $wgSessionName = false;
 
+/**
+ * Whether to set a cookie when a user is autoblocked. Doing so means that a blocked user, even
+ * after logging out and moving to a new IP address, will still be blocked.
+ */
+$wgCookieSetOnAutoblock = false;
+
 /** @} */ # end of cookie settings }
 
 /************************************************************************//**
@@ -8380,9 +8386,9 @@ $wgSearchRunSuggestedQuery = true;
 /**
  * Where popular password file is located.
  *
- * Default in core contains 50,000 most popular. This config
+ * Default in core contains 10,000 most popular. This config
  * allows you to change which file, in case you want to generate
- * a password file with > 50000 entries in it.
+ * a password file with > 10000 entries in it.
  *
  * @see maintenance/createCommonPasswordCdb.php
  * @since 1.27
index 82ddee0..745f8de 100644 (file)
@@ -2326,9 +2326,12 @@ class EditPage {
        }
 
        function setHeaders() {
-               global $wgOut, $wgUser, $wgAjaxEditStash;
+               global $wgOut, $wgUser, $wgAjaxEditStash, $wgCookieSetOnAutoblock;
 
                $wgOut->addModules( 'mediawiki.action.edit' );
+               if ( $wgCookieSetOnAutoblock === true ) {
+                       $wgOut->addModules( 'mediawiki.user.blockcookie' );
+               }
                $wgOut->addModuleStyles( 'mediawiki.action.edit.styles' );
 
                if ( $wgUser->getOption( 'showtoolbar' ) ) {
@@ -4068,7 +4071,7 @@ HTML
 
        /**
         * Returns an array of html code of the following buttons:
-        * save, diff, preview and live
+        * save, diff and preview
         *
         * @param int $tabindex Current tabindex
         *
@@ -4102,7 +4105,6 @@ HTML
                ] + Linker::tooltipAndAccesskeyAttribs( 'preview' );
                $buttons['preview'] = Html::submitButton( $this->context->msg( 'showpreview' )->text(),
                        $attribs );
-               $buttons['live'] = '';
 
                $attribs = [
                        'id' => 'wpDiff',
index 27aab8a..7d86d07 100644 (file)
@@ -822,6 +822,7 @@ class Message implements MessageSpecifier, Serializable {
                        // message key is user-controlled.
                        // '⧼' is used instead of '<' to side-step any
                        // double-escaping issues.
+                       // (Keep synchronised with mw.Message#toString in JS.)
                        return '⧼' . htmlspecialchars( $this->key ) . '⧽';
                }
 
index c03bce7..79218ab 100644 (file)
@@ -27,7 +27,7 @@ class MimeMagic extends MimeAnalyzer {
         * @deprecated since 1.28
         */
        public static function singleton() {
-               return MediaWikiServices::getInstance()->getMIMEAnalyzer();
+               return MediaWikiServices::getInstance()->getMimeAnalyzer();
        }
 
        /**
index c2197a6..b958cd4 100644 (file)
@@ -96,7 +96,7 @@ return [
                $config = $services->getMainConfig();
                return new ClassicInterwikiLookup(
                        $wgContLang,
-                       ObjectCache::getMainWANInstance(),
+                       $services->getMainWANObjectCache(),
                        $config->get( 'InterwikiExpiry' ),
                        $config->get( 'InterwikiCache' ),
                        $config->get( 'InterwikiScopes' ),
@@ -238,7 +238,7 @@ return [
        'LinkCache' => function( MediaWikiServices $services ) {
                return new LinkCache(
                        $services->getTitleFormatter(),
-                       ObjectCache::getMainWANInstance()
+                       $services->getMainWANObjectCache()
                );
        },
 
index 4a7f623..0ba964f 100644 (file)
@@ -26,7 +26,7 @@
 /**
  * An action that views article content
  *
- * This is a wrapper that will call Article::render().
+ * This is a wrapper that will call Article::view().
  *
  * @ingroup Actions
  */
index 506ff73..0cd46e4 100644 (file)
@@ -67,7 +67,8 @@ abstract class ApiBase extends ContextSource {
         * - limit: An integer or the string 'max'. Default lower limit is 0 (but
         *   see PARAM_MIN), and requires that PARAM_MAX and PARAM_MAX2 be
         *   specified. Cannot be used with PARAM_ISMULTI.
-        * - namespace: An integer representing a MediaWiki namespace.
+        * - namespace: An integer representing a MediaWiki namespace. Forces PARAM_ALL = true to
+        *   support easily specifying all namespaces.
         * - NULL: Any string.
         * - password: Any non-empty string. Input value is private or sensitive.
         *   <input type="password"> would be an appropriate HTML form field.
@@ -171,8 +172,18 @@ abstract class ApiBase extends ContextSource {
         */
        const PARAM_SUBMODULE_PARAM_PREFIX = 16;
 
+       /**
+        * (boolean|string) When PARAM_TYPE has a defined set of values and PARAM_ISMULTI is true,
+        * this allows for an asterisk ('*') to be passed in place of a pipe-separated list of
+        * every possible value. If a string is set, it will be used in place of the asterisk.
+        * @since 1.29
+        */
+       const PARAM_ALL = 17;
+
        /**@}*/
 
+       const ALL_DEFAULT_STRING = '*';
+
        /** Fast query, standard limit. */
        const LIMIT_BIG1 = 500;
        /** Fast query, apihighlimits limit. */
@@ -920,6 +931,7 @@ abstract class ApiBase extends ContextSource {
                        $dupes = false;
                        $deprecated = false;
                        $required = false;
+                       $allowAll = false;
                } else {
                        $default = isset( $paramSettings[self::PARAM_DFLT] )
                                ? $paramSettings[self::PARAM_DFLT]
@@ -939,6 +951,9 @@ abstract class ApiBase extends ContextSource {
                        $required = isset( $paramSettings[self::PARAM_REQUIRED] )
                                ? $paramSettings[self::PARAM_REQUIRED]
                                : false;
+                       $allowAll = isset( $paramSettings[self::PARAM_ALL] )
+                               ? $paramSettings[self::PARAM_ALL]
+                               : false;
 
                        // When type is not given, and no choices, the type is the same as $default
                        if ( !isset( $type ) ) {
@@ -992,6 +1007,9 @@ abstract class ApiBase extends ContextSource {
 
                        if ( isset( $value ) && $type == 'namespace' ) {
                                $type = MWNamespace::getValidNamespaces();
+                               // By default, namespace parameters allow ALL_DEFAULT_STRING to be used to specify
+                               // all namespaces.
+                               $allowAll = true;
                        }
                        if ( isset( $value ) && $type == 'submodule' ) {
                                if ( isset( $paramSettings[self::PARAM_SUBMODULE_MAP] ) ) {
@@ -1027,12 +1045,19 @@ abstract class ApiBase extends ContextSource {
                        }
                }
 
+               $allSpecifier = ( is_string( $allowAll ) ? $allowAll : self::ALL_DEFAULT_STRING );
+               if ( $allowAll && $multi && is_array( $type ) && in_array( $allSpecifier, $type, true ) ) {
+                       ApiBase::dieDebug(
+                               __METHOD__,
+                               "For param $encParamName, PARAM_ALL collides with a possible value" );
+               }
                if ( isset( $value ) && ( $multi || is_array( $type ) ) ) {
                        $value = $this->parseMultiValue(
                                $encParamName,
                                $value,
                                $multi,
-                               is_array( $type ) ? $type : null
+                               is_array( $type ) ? $type : null,
+                               $allowAll ? $allSpecifier : null
                        );
                }
 
@@ -1215,9 +1240,13 @@ abstract class ApiBase extends ContextSource {
         *  separated by '|'?
         * @param string[]|null $allowedValues An array of values to check against. If
         *  null, all values are accepted.
+        * @param string|null $allSpecifier String to use to specify all allowed values, or null
+        *  if this behavior should not be allowed
         * @return string|string[] (allowMultiple ? an_array_of_values : a_single_value)
         */
-       protected function parseMultiValue( $valueName, $value, $allowMultiple, $allowedValues ) {
+       protected function parseMultiValue( $valueName, $value, $allowMultiple, $allowedValues,
+               $allSpecifier = null
+       ) {
                if ( ( trim( $value ) === '' || trim( $value ) === "\x1f" ) && $allowMultiple ) {
                        return [];
                }
@@ -1229,6 +1258,12 @@ abstract class ApiBase extends ContextSource {
                        ? self::LIMIT_SML2
                        : self::LIMIT_SML1;
 
+               if ( $allowMultiple && is_array( $allowedValues ) && $allSpecifier &&
+                       count( $valuesList ) === 1 && $valuesList[0] === $allSpecifier
+               ) {
+                       return $allowedValues;
+               }
+
                if ( self::truncateArray( $valuesList, $sizeLimit ) ) {
                        $this->logFeatureUsage( "too-many-$valueName-for-{$this->getModulePath()}" );
                        $this->setWarning( "Too many values supplied for parameter '$valueName': " .
index 02efd7b..2a6c938 100644 (file)
@@ -645,6 +645,20 @@ class ApiHelp extends ApiBase {
                                                        if ( $extra ) {
                                                                $info[] = implode( ' ', $extra );
                                                        }
+
+                                                       $allowAll = isset( $settings[ApiBase::PARAM_ALL] )
+                                                               ? $settings[ApiBase::PARAM_ALL]
+                                                               : false;
+                                                       if ( $allowAll || $settings[ApiBase::PARAM_TYPE] === 'namespace' ) {
+                                                               if ( $settings[ApiBase::PARAM_TYPE] === 'namespace' ) {
+                                                                       $allSpecifier = ApiBase::ALL_DEFAULT_STRING;
+                                                               } else {
+                                                                       $allSpecifier = ( is_string( $allowAll ) ? $allowAll : ApiBase::ALL_DEFAULT_STRING );
+                                                               }
+                                                               $info[] = $context->msg( 'api-help-param-multi-all' )
+                                                                       ->params( $allSpecifier )
+                                                                       ->parse();
+                                                       }
                                                }
                                        }
 
index 46c57b8..1a509c5 100644 (file)
@@ -23,6 +23,7 @@
  *
  * @file
  */
+use MediaWiki\MediaWikiServices;
 
 /**
  * This class contains a list of pages that the client has requested.
@@ -915,7 +916,7 @@ class ApiPageSet extends ApiBase {
                }
 
                // Get gender information
-               $genderCache = GenderCache::singleton();
+               $genderCache = MediaWikiServices::getInstance()->getGenderCache();
                $genderCache->doQuery( $usernames, __METHOD__ );
        }
 
@@ -1197,7 +1198,7 @@ class ApiPageSet extends ApiBase {
                        }
                }
                // Get gender information
-               $genderCache = GenderCache::singleton();
+               $genderCache = MediaWikiServices::getInstance()->getGenderCache();
                $genderCache->doQuery( $usernames, __METHOD__ );
 
                return $linkBatch;
index caf0cd7..ffc3fc2 100644 (file)
@@ -406,6 +406,21 @@ class ApiParamInfo extends ApiBase {
                                        $item['type'] = array_values( $item['type'] );
                                        ApiResult::setIndexedTagName( $item['type'], 't' );
                                }
+
+                               // Add 'allspecifier' if applicable
+                               if ( $item['type'] === 'namespace' ) {
+                                       $allowAll = true;
+                                       $allSpecifier = ApiBase::ALL_DEFAULT_STRING;
+                               } else {
+                                       $allowAll = isset( $settings[ApiBase::PARAM_ALL] )
+                                               ? $settings[ApiBase::PARAM_ALL]
+                                               : false;
+                                       $allSpecifier = ( is_string( $allowAll ) ? $allowAll : ApiBase::ALL_DEFAULT_STRING );
+                               }
+                               if ( $allowAll && $item['multi'] &&
+                                       ( is_array( $item['type'] ) || $item['type'] === 'namespace' ) ) {
+                                       $item['allspecifier'] = $allSpecifier;
+                               }
                        }
                        if ( isset( $settings[ApiBase::PARAM_MAX] ) ) {
                                $item['max'] = $settings[ApiBase::PARAM_MAX];
index 553995c..8734f38 100644 (file)
@@ -44,10 +44,10 @@ class ApiQueryAllImages extends ApiQueryGeneratorBase {
         * which may not necessarily be the same as the local DB.
         *
         * TODO: allow querying non-local repos.
-        * @return Database
+        * @return IDatabase
         */
        protected function getDB() {
-               return $this->mRepo->getSlaveDB();
+               return $this->mRepo->getReplicaDB();
        }
 
        public function execute() {
index 0ce1939..6a0f124 100644 (file)
@@ -23,6 +23,7 @@
  *
  * @file
  */
+use MediaWiki\MediaWikiServices;
 
 /**
  * Query module to enumerate all available pages.
@@ -206,7 +207,7 @@ class ApiQueryAllPages extends ApiQueryGeneratorBase {
                        foreach ( $res as $row ) {
                                $users[] = $row->page_title;
                        }
-                       GenderCache::singleton()->doQuery( $users, __METHOD__ );
+                       MediaWikiServices::getInstance()->getGenderCache()->doQuery( $users, __METHOD__ );
                        $res->rewind(); // reset
                }
 
index 0bb7ff8..19e0c93 100644 (file)
@@ -253,6 +253,8 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                $data['maxuploadsize'] = UploadBase::getMaxUploadSize();
                $data['minuploadchunksize'] = (int)$config->get( 'MinUploadChunkSize' );
 
+               $data['galleryoptions'] = $config->get( 'GalleryOptions' );
+
                $data['thumblimits'] = $config->get( 'ThumbLimits' );
                ApiResult::setArrayType( $data['thumblimits'], 'BCassoc' );
                ApiResult::setIndexedTagName( $data['thumblimits'], 'limit' );
index 042ad69..2d7f5df 100644 (file)
@@ -65,13 +65,13 @@ class ApiResetPassword extends ApiBase {
 
                $passwordReset = new PasswordReset( $this->getConfig(), AuthManager::singleton() );
 
-               $status = $passwordReset->isAllowed( $this->getUser(), $params['capture'] );
+               $status = $passwordReset->isAllowed( $this->getUser() );
                if ( !$status->isOK() ) {
                        $this->dieStatus( Status::wrap( $status ) );
                }
 
                $status = $passwordReset->execute(
-                       $this->getUser(), $params['user'], $params['email'], $params['capture']
+                       $this->getUser(), $params['user'], $params['email']
                );
                if ( !$status->isOK() ) {
                        $status->value = null;
@@ -80,12 +80,6 @@ class ApiResetPassword extends ApiBase {
 
                $result = $this->getResult();
                $result->addValue( [ 'resetpassword' ], 'status', 'success' );
-               if ( $params['capture'] ) {
-                       $passwords = $status->getValue() ?: [];
-                       ApiResult::setArrayType( $passwords, 'kvp', 'user' );
-                       ApiResult::setIndexedTagName( $passwords, 'p' );
-                       $result->addValue( [ 'resetpassword' ], 'passwords', $passwords );
-               }
        }
 
        public function isWriteMode() {
@@ -111,7 +105,6 @@ class ApiResetPassword extends ApiBase {
                        'email' => [
                                ApiBase::PARAM_TYPE => 'string',
                        ],
-                       'capture' => false,
                ];
 
                $resetRoutes = $this->getConfig()->get( 'PasswordResetRoutes' );
index d28165d..fccdc0f 100644 (file)
@@ -8,6 +8,11 @@
        "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Documentación]]\n* [[mw:API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Llista d'alderique]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Anuncios de la API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Fallos y solicitúes]\n</div>\n<strong>Estau:</strong> Toles carauterístiques qu'apaecen nesta páxina tendríen de funcionar, pero la API inda ta en desendolcu activu, y puede camudar en cualquier momentu. Suscríbete a la [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ llista de corréu mediawiki-api-announce] p'avisos sobro anovamientos.\n\n<strong>Solicitúes incorreutes:</strong> Cuando s'unvíen solicitúes incorreutes a la API, unvíase una cabecera HTTP cola clave \"MediaWiki-API-Error\" y, darréu, tanto'l valor de la cabecera como'l códigu d'error devueltu pondránse al mesmu valor. Pa más información, consulta [[mw:API:Errors_and_warnings|API: Errores y avisos]].\n\n<strong>Pruebes:</strong> Pa facilitar les pruebes de solicitúes API, consulta [[Special:ApiSandbox]].",
        "apihelp-main-param-action": "Qué aición facer.",
        "apihelp-main-param-format": "El formatu de la salida.",
+       "apihelp-main-param-maxlag": "El retrasu (lag) máximu puede utilizase cuando MediaWiki ta instaláu nun conxuntu de bases de datos replicaes. Pa evitar les aiciones que pudieran causar un retrasu entá mayor na replicación del sitiu, esti parámetru puede causar que'l cliente espere hasta que'l retrasu de replicación sía menor que'l valor especificáu. En casu de retrasu escesivu, devuélvese un códigu d'error <samp>maxlag</samp> con un mensaxe asemeyáu a <samp>Esperando a $host: $lag segundos de retrasu<s/amp>.<br />Ver [[mw:Manual:Maxlag_parameter|Manual:Parámetru maxlag]] pa más información.",
+       "apihelp-main-param-smaxage": "Establez l'encabezáu HTTP <code>s-maxage</code> de control de caché a esta cantidá de segundos. Los errores nunca se guarden na caché.",
+       "apihelp-main-param-maxage": "Establez l'encabezáu HTTP <code>max-age</code> de control de caché a esta cantidá de segundos. Los errores nunca se guarden na caché.",
+       "apihelp-main-param-assert": "Comprobar que l'usuariu tien sesión aniciada si'l valor ye <kbd>user</kbd> o que tien el permisu de bot si ye <kbd>bot</kbd>.",
+       "apihelp-main-param-assertuser": "Comprobar que'l usuariu actual ye l'usuariu nomáu.",
        "apihelp-main-param-servedby": "Incluyir el nome del host que sirvió la solicitú nes resultancies.",
        "apihelp-main-param-curtimestamp": "Incluyir la marca de tiempu actual na resultancia.",
        "apihelp-block-description": "Bloquiar a un usuariu.",
index 4fe6a04..6f8f596 100644 (file)
@@ -4,5 +4,8 @@
                        "Ibrahim khashrowdi"
                ]
        },
-       "apihelp-block-description": "کار زوروکئ بستین"
+       "apihelp-block-description": "کار زوروکئ بستین",
+       "apihelp-createaccount-param-name": "کار زورؤکین نام.",
+       "apihelp-login-param-name": "کار زورؤکین نام.",
+       "apihelp-userrights-param-user": "کار زورؤکین نام."
 }
index 0f184d9..28cd746 100644 (file)
        "apihelp-resetpassword-description-noroutes": "No password reset routes are available.\n\nEnable routes in <var>[[mw:Manual:$wgPasswordResetRoutes|$wgPasswordResetRoutes]]</var> to use this module.",
        "apihelp-resetpassword-param-user": "User being reset.",
        "apihelp-resetpassword-param-email": "Email address of the user being reset.",
-       "apihelp-resetpassword-param-capture": "Return the temporary passwords that were sent. Requires the <code>passwordreset</code> user right.",
        "apihelp-resetpassword-example-user": "Send a password reset email to user <kbd>Example</kbd>.",
        "apihelp-resetpassword-example-email": "Send a password reset email for all users with email address <kbd>user@example.com</kbd>.",
 
        "api-help-param-upload": "Must be posted as a file upload using multipart/form-data.",
        "api-help-param-multi-separate": "Separate values with <kbd>|</kbd> or [[Special:ApiHelp/main#main/datatypes|alternative]].",
        "api-help-param-multi-max": "Maximum number of values is {{PLURAL:$1|$1}} ({{PLURAL:$2|$2}} for bots).",
+       "api-help-param-multi-all": "To specify all values, use <kbd>$1</kbd>.",
        "api-help-param-default": "Default: $1",
        "api-help-param-default-empty": "Default: <span class=\"apihelp-empty\">(empty)</span>",
        "api-help-param-token": "A \"$1\" token retrieved from [[Special:ApiHelp/query+tokens|action=query&meta=tokens]]",
index 902221a..bd8d4a2 100644 (file)
        "api-format-title": "Resultado de API de MediaWiki",
        "api-format-prettyprint-header": "Esta é a representación HTML do formato $1. HTML é bó para depurar, pero non é axeitado para usar nunha aplicación.\n\nEspecifique o parámetro <var>format</var> para cambiar o formato de saída. Para ver a representación non-HTML do formato $1, fixe <kbd>format=$2</kbd>.\n\n\nRevise a [[mw:API|documentación completa]], ou a [[Special:ApiHelp/main|axuda da API]] para obter máis información.",
        "api-format-prettyprint-header-only-html": "Esta é unha representación HTML empregada para a depuración de erros, e non é axeitada para o uso de aplicacións.\n\nVexa a [[mw:API|documentación completa]], ou a [[Special:ApiHelp/main|axuda da API]] para máis información.",
+       "api-format-prettyprint-status": "Esta resposta será devolta co estado de HTTP $1 $2.",
        "api-pageset-param-titles": "Lista de títulos nos que traballar.",
        "api-pageset-param-pageids": "Lista de identificadores de páxina nos que traballar.",
        "api-pageset-param-revids": "Unha lista de IDs de modificacións sobre as que traballar.",
index d93dc23..b585885 100644 (file)
@@ -4,7 +4,8 @@
                        "WongKentir",
                        "Beeyan",
                        "Rachmat.Wahidi",
-                       "Kenrick95"
+                       "Kenrick95",
+                       "Presidenvolksraad"
                ]
        },
        "apihelp-main-param-action": "Tindakan manakah yang akan dilakukan.",
@@ -94,5 +95,6 @@
        "apihelp-login-example-login": "Masuk log.",
        "apihelp-query+prefixsearch-param-profile": "Cari profil untuk digunakan.",
        "apihelp-query+search-param-qiprofile": "Meminta profil independen untuk digunakan (berefek pada algoritma peringkat).",
-       "apihelp-revisiondelete-param-ids": "Penanda untuk perubahan yang akan dihapus"
+       "apihelp-revisiondelete-param-ids": "Penanda untuk perubahan yang akan dihapus",
+       "api-format-prettyprint-status": "Tanggapan ini akan dikembalikan dengan status $1 $2 HTTP."
 }
index f85ea9f..d9d079b 100644 (file)
@@ -10,7 +10,8 @@
                        "Sujiniku",
                        "Macofe",
                        "Suchichi02",
-                       "Kkairri"
+                       "Kkairri",
+                       "ネイ"
                ]
        },
        "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|説明文書]]\n* [[mw: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/ the mediawiki-api-announce メーリングリスト]に参加してください。\n\n<strong>誤ったリクエスト:</strong> 誤ったリクエストが API に送られた場合、\"MediaWiki-API-Error\" HTTP ヘッダーが送信され、そのヘッダーの値と送り返されるエラーコードは同じ値にセットされます。より詳しい情報は [[mw:API:Errors_and_warnings|API: Errors and warnings]] を参照してください。\n\n<strong>テスト:</strong> API のリクエストのテストは、[[Special:ApiSandbox]]で簡単に行えます。",
        "apihelp-opensearch-example-te": "<kbd>Te</kbd> から始まるページを検索する。",
        "apihelp-options-param-reset": "個人設定をサイトの既定値にリセットする。",
        "apihelp-options-param-resetkinds": "<var>$1reset</var> が設定されている場合、リセットする設定項目の種類のリスト。",
-       "apihelp-options-param-change": "名前=値 の形式 (例えば skin=vector) で整形された変更のリスト。値はパイプ文字を含むことができません。optionname|otheroption|... のように値が与えられない (イコール記号すら無い) 場合、設定は既定値にリセットされます。",
+       "apihelp-options-param-change": "名前=値 の形式 (例えば skin=vector) で整形された変更のリスト。optionname|otheroption|... のように値が与えられなかった (イコール記号すら無い) 場合、設定は既定値にリセットされます。与えられた値がパイプ(<kbd>|</kbd>)を含む場合、[[Special:ApiHelp/main#main/datatypes|ほかのセパレーター]]をお使いください。",
        "apihelp-options-example-reset": "すべて初期設定に戻す。",
        "apihelp-options-example-change": "<kbd>skin</kbd> および <kbd>hideminor</kbd> の個人設定を変更する。",
        "apihelp-options-example-complex": "すべての個人設定を初期化し、<kbd>skin</kbd> および <kbd> nickname </kbd> を設定する。",
index f15bec1..d01abe5 100644 (file)
@@ -13,7 +13,8 @@
                        "Yearning",
                        "Priviet",
                        "Ykhwong",
-                       "Jonghaya"
+                       "Jonghaya",
+                       "Jerrykim306"
                ]
        },
        "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|설명문서]]\n* [[mw:API:FAQ|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에 잘못된 요청이 전송되면 \"MediaWiki-API-Error\" 키가 포함된 HTTP 헤더가 전송되며 반환되는 헤더와 오류 코드의 값은 동일한 값으로 설정됩니다. 자세한 정보에 대해서는 [[mw:API:Errors_and_warnings|API:오류와 경고]]를 참조하십시오.\n\n<strong>테스트하기:</strong> API 요청 테스트를 용이하게 하려면, [[Special:ApiSandbox]]를 보십시오.",
        "apihelp-feedwatchlist-param-feedformat": "피드 포맷.",
        "apihelp-feedwatchlist-example-default": "주시문서 목록 피드를 보여줍니다.",
        "apihelp-filerevert-description": "파일을 이전 판으로 되돌립니다.",
+       "apihelp-filerevert-param-comment": "업로드 댓글입니다.",
        "apihelp-filerevert-example-revert": "<kbd>Wiki.png</kbd>를 <kbd>2011-03-05T15:27:40Z</kbd> 판으로 되돌립니다.",
        "apihelp-help-description": "지정된 모듈의 도움말을 보여줍니다.",
        "apihelp-help-param-helpformat": "도움말 출력 포맷.",
index 5ea8613..45680f4 100644 (file)
        "apihelp-feedrecentchanges-param-hidecategorization": "Ascondi e variaçioin d'apartegninça a-e categorie.",
        "apihelp-feedrecentchanges-param-tagfilter": "Filtra pe etichetta.",
        "apihelp-feedrecentchanges-param-target": "Mostra solo e modifiche a-e paggine collegæ da questa paggina.",
-       "apihelp-feedrecentchanges-param-showlinkedto": "Fanni védde sôlo i cangiaménti a-e pàggine colegæ a-a quella speçificâ",
+       "apihelp-feedrecentchanges-param-showlinkedto": "Fanni védde sôlo i cangiaménti a-e pàggine conligæ a-a quella speçificâ",
        "apihelp-feedrecentchanges-param-categories": "Mostra solo e variaçioin in sce-e paggine de tutte queste categorie.",
        "apihelp-feedrecentchanges-param-categories_any": "Mostra invece solo e variaçioin in sce-e paggine inte 'na qualonque categoria.",
        "apihelp-feedrecentchanges-example-simple": "Mostra i urtime modiffiche.",
        "apihelp-import-param-namespace": "Importa inte questo namespace. O no poeu ese doeuviou insemme a <var>$1rootpage</var>.",
        "apihelp-import-param-rootpage": "Importa comme sottopaggina de questa paggina. O no poeu ese doeuviou insemme a <var>$1namespace</var>.",
        "apihelp-import-example-import": "Importa [[meta:Help:ParserFunctions]] into namespace 100 con cronologia completa.",
-       "apihelp-linkaccount-description": "Colegamento de 'n'utença de 'n provider de terçe parte a l'utente corente.",
+       "apihelp-linkaccount-description": "Conligamento de 'n'utença de 'n provider de terçe parte a l'utente corente.",
        "apihelp-linkaccount-example-link": "Avvia o processo de collegamento a 'n'utença da <kbd>Example</kbd>.",
        "apihelp-login-description": "Accedi e otegni i cookie d'aotenticaçion.\n\nQuest'açion dev'ese doeuviâ escluxivamente in combinaçion con [[Special:BotPasswords]]; doeuviâla pe l'accesso a l'account prinçipâ o l'è deprecou e o poeu fallî sença preaviso. Pe acedere in moddo seguo a l'utença prinçipâ, doeuvia <kbd>[[Special:ApiHelp/clientlogin|action=clientlogin]]</kbd>.",
        "apihelp-login-description-nobotpasswords": "Accedi e otegni i cookies d'aotenticaçion.\n\nQuest'açion a l'è deprecâ e a poeu fallî sença preaviso. Pe acede in moddo seguo, doeuvia [[Special:ApiHelp/clientlogin|action=clientlogin]].",
index 47488c0..3df95e7 100644 (file)
@@ -3,23 +3,44 @@
                "authors": [
                        "Jeblad",
                        "Chameleon222",
-                       "Macofe"
+                       "Macofe",
+                       "Jon Harald Søby"
                ]
        },
        "apihelp-main-param-action": "Hvilken handling skal utføres",
        "apihelp-main-param-format": "Resultatets format.",
+       "apihelp-main-param-assert": "Verifiser at brukeren er logget inn om satt til <kbd>user</kbd>, eller har botrettighet om satt til <kbd>bot</kbd>.",
+       "apihelp-main-param-assertuser": "Verifiser at den nåværende brukeren er den navngitte brukeren.",
+       "apihelp-main-param-requestid": "En gitt verdi her vil inkluderes i responsen. Kan brukes til å skille forespørsler fra hverandre.",
        "apihelp-main-param-servedby": "Inkluder navnet på tjeneren som utførte forespørselen i resultatene.",
        "apihelp-main-param-curtimestamp": "Inkluder det nåværende tidsmerket i resultatet.",
+       "apihelp-main-param-uselang": "Språk å bruke for meldingsoversettelser. <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> med <kbd>siprop=languages</kbd> returnerer en liste over språkkoder, eller spesifiser <kbd>user</kbd> for å bruke den nåværende brukerens språkpreferanser, eller spesifiser <kbd>content</kbd> for å bruke denne wikiens innholdsspråk.",
        "apihelp-block-description": "Blokker en bruker.",
        "apihelp-block-param-user": "Brukernavn, IP-adresse eller IP-intervall som skal blokkeres.",
+       "apihelp-block-param-expiry": "Utløpstid. Kan være relativ (f.eks. <kbd>5 months</kbd> eller <kbd>2 weeks</kbd>) eller absolutt (f.eks. <kbd>2014-09-18T12:34:56Z</kbd>). Om den er satt til <kbd>infinite</kbd>, <kbd>indefinite</kbd> eller <kbd>never</kbd> vil blokkeringen ikke ha noen utløpsdato.",
        "apihelp-block-param-reason": "Årsak for blokkering.",
        "apihelp-block-param-anononly": "Blokker bare anonyme brukere (dvs. hindre anonyme redigeringer fra denne IP-adressen).",
        "apihelp-block-param-nocreate": "Hindre kontoopprettelse.",
        "apihelp-block-param-autoblock": "Blokker automatisk sist brukte IP-adresse og alle etterfølgende IP-adresser de prøver å logge inn fra.",
        "apihelp-block-param-noemail": "Hindre brukeren å sende e-post via wikien. (Krever rettigheten <code>blockemail</code>).",
        "apihelp-block-param-hidename": "Skjul brukernavnet fra blokkeringsloggen. (Krever rettigheten <code>hideuser</code>).",
+       "apihelp-block-param-allowusertalk": "La brukeren redigere sin egen diskusjonsside (avhenger av <var>[[mw:Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
+       "apihelp-block-param-reblock": "Overstyr den gamle blokkeringen om brukeren allerede er blokkert.",
+       "apihelp-block-param-watchuser": "Overvåk brukerens eller IP-adressas bruker- og brukerdiskusjonssider.",
+       "apihelp-block-example-ip-simple": "Blokker adressa <kbd>192.0.2.5</kbd> i tre dager med årsak <kbd>First strike</kbd>.",
+       "apihelp-block-example-user-complex": "Blokker brukeren <kbd>Vandal</kbd> på ubestemnt tid med årsak <kbd>Vandalism</kbd>, og forhindre ny kontooppretting og sending av epost.",
+       "apihelp-changeauthenticationdata-description": "Endre autentiseringsdata for den nåværende brukeren.",
+       "apihelp-changeauthenticationdata-example-password": "Forsøk å endre den nåværende brukerens passord til <kbd>ExamplePassword</kbd>.",
+       "apihelp-checktoken-description": "Sjekk gyldigheten til et tegn fra <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>.",
+       "apihelp-checktoken-param-type": "Type tegn som testes.",
+       "apihelp-checktoken-param-token": "Tegn å teste.",
+       "apihelp-checktoken-param-maxtokenage": "Maksimalt tillatt alder på tegnet, i sekunder.",
+       "apihelp-checktoken-example-simple": "Test gyldigheten til et <kbd>csrf</kbd>-tegn.",
        "apihelp-clearhasmsg-description": "Fjerner <code>hasmsg</code>-flagget for den aktuelle brukeren.",
        "apihelp-clearhasmsg-example-1": "Fjern <code>hasmsg</code>-flagget for aktuell bruker.",
+       "apihelp-clientlogin-description": "Logg inn på wikien med den interaktive flyten.",
+       "apihelp-clientlogin-example-login": "Start prosessen med å logge inn til wikien som bruker <kbd>Example</kbd> med passord <kbd>ExamplePassword</kbd>.",
+       "apihelp-clientlogin-example-login2": "Fortsett å logge inn etter en <samp>UI</samp>-respons for tofaktor-autentisering, ved å oppgi en <var>OATHToken</var> på <kbd>987654</kbd>.",
        "apihelp-compare-description": "Hent forskjellen mellom to sider.\n\nEt revisjonsnummer, en sidetittel eller en side-ID for både «fra» og «til» må sendes.",
        "apihelp-compare-param-fromtitle": "Første tittel å sammenligne.",
        "apihelp-compare-param-fromid": "Første side-ID å sammenligne.",
        "apihelp-compare-param-torev": "Andre revisjon å sammenligne.",
        "apihelp-compare-example-1": "Lag en diff mellom revisjon 1 og 2.",
        "apihelp-createaccount-description": "Opprett en ny brukerkonto.",
+       "apihelp-createaccount-param-preservestate": "Om <kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd> returnerte true for <samp>hashprimarypreservedstate</samp> bør forespørsler merket som <samp>primary-required</samp> omgås. Om den returnerte en ikke-tom verdi for <samp>preservedusername</samp> kan det brukernavnet brukes for <var>username</var>-parameteren.",
+       "apihelp-createaccount-example-create": "Start prosessen med å opprette brukeren <kbd>Example</kbd> med passordet <kbd>ExamplePassword</kbd>.",
        "apihelp-createaccount-param-name": "Brukernavn.",
        "apihelp-createaccount-param-password": "Passord (ignorert dersom <var>$1mailpassword</var> er satt).",
        "apihelp-createaccount-param-domain": "Domene for ekstern autentisering (valgfritt).",
+       "apihelp-createaccount-param-token": "Kontoopprettingstegn som hentet i den første forespørselen.",
        "apihelp-createaccount-param-email": "Brukerens e-postadresse (valgfritt).",
        "apihelp-createaccount-param-realname": "Brukerens virkelige navn (valgfritt).",
        "apihelp-createaccount-param-mailpassword": "Dersom satt til en verdi vil et tilfeldig passord bli sendt med e-post til brukeren.",
        "apihelp-createaccount-param-language": "Språkkode å bruke som standard for brukeren (valgfritt, standardverdien er innholdsspråket).",
        "apihelp-createaccount-example-pass": "Opprett bruker <kbd>testuser</kbd> med passordet <kbd>test123</kbd>.",
        "apihelp-createaccount-example-mail": "Opprett bruker <kbd>testmailuser</kbd> og send et tilfeldig generert passord med e-post.",
+       "apihelp-cspreport-description": "Brukes av nettlesere for å rapportere brudd på Content Security Policy. Denne modulen bør aldri brukes utenom av en CSP-mottakelig nettleser.",
        "apihelp-delete-description": "Slett en side.",
        "apihelp-delete-param-title": "Tittel til siden som skal slettes. Kan ikke brukes sammen med <var>$1pageid</var>.",
        "apihelp-delete-param-pageid": "Side-ID til siden som skal slettes. Kan ikke brukes sammen med <var>$1title</var>.",
        "apihelp-delete-param-reason": "Årsak for slettingen. Dersom ikke satt vil en automatisk generert årsak bli brukt.",
+       "apihelp-delete-param-tags": "Endringstagger å legge til oppslaget i slettingsloggen.",
        "apihelp-delete-param-watch": "Legg til siden til aktuell brukers overvåkningsliste.",
        "apihelp-delete-param-unwatch": "Fjern siden fra aktuell brukers overvåkningsliste.",
+       "apihelp-delete-param-oldimage": "Navnet på det gamle bildet som skal slettes som oppgitt av [[Special:ApiHelp/query+imageinfo|action=query&prop=imageinfo&iiprop=archivename]].",
        "apihelp-delete-example-simple": "Slett <kbd>Main Page</kbd>.",
        "apihelp-delete-example-reason": "Slett <kbd>Main Page</kbd> med grunnen <kbd>Preparing for move</kbd>.",
        "apihelp-disabled-description": "Denne modulen har blitt deaktivert",
        "apihelp-edit-param-section": "Avsnittsnummer. <kbd>0</kbd> for det øverste avsnittet, <kbd>new</kbd> for et nytt avsnitt.",
        "apihelp-edit-param-sectiontitle": "Tittelen for et nytt avsnitt.",
        "apihelp-edit-param-text": "Sideinnhold.",
+       "apihelp-edit-param-summary": "Redigeringssammendrag. Også seksjonstittel når $1section=new og $1sectiontitle ikke er satt.",
+       "apihelp-edit-param-tags": "Endringstagger som skal brukes på revisjonen.",
        "apihelp-edit-param-minor": "Mindre redigering.",
+       "apihelp-edit-param-notminor": "Ikke mindre redigering.",
        "apihelp-edit-param-bot": "Merk denne redigeringen som en botendring.",
+       "apihelp-edit-param-basetimestamp": "Tidsstempel for grunnrevisjonen, brukes for å oppdage redigeringskonflikter. Kan hentes via [[Special.ApiHelp/query+revisions|action=query&prop=revisions&rvprop=timestamp]].",
+       "apihelp-edit-param-starttimestamp": "Tidsstempel for når redigeringsprosessen begynte, brukes for å oppdage redigeringskonflikter. En gyldig verdi kan hentes med <var>[[Special:ApiHelp/main|curtimestamp]]</var> når man begynner en redigeringsprosess (f.eks. når man laster sideinnholdet som redigeres).",
+       "apihelp-edit-param-recreate": "Overstyr feil om at siden har blitt slettet i mellomtiden.",
        "apihelp-edit-param-createonly": "Ikke rediger siden dersom den finnes allerede.",
        "apihelp-edit-param-nocreate": "Gi en feilmelding dersom dersom siden ikke finnes.",
        "apihelp-edit-param-watch": "Legg til siden til aktuell brukers overvåkningsliste.",
        "apihelp-logout-description": "Logg ut og fjern sesjonsdata.",
        "apihelp-logout-example-logout": "Logg ut den aktuelle brukeren.",
        "apihelp-move-description": "Flytt en side.",
-       "apihelp-dbg-description": "Resultatdata i PHP's var_export() format.",
-       "apihelp-dbgfm-description": "Resultatdata i PHP's var_export() format (pen utskrift i HTML).",
        "apihelp-json-description": "Resultatdata i JSON-format.",
        "apihelp-none-description": "Ingen resultat.",
        "api-help-flag-readrights": "Denne modulen krever lesetilgang.",
index 89e2b21..ac2c8b7 100644 (file)
@@ -61,7 +61,7 @@
        "apihelp-edit-param-tags": "Wijzigingslabels om aan de versie toe te voegen.",
        "apihelp-edit-param-minor": "Kleine bewerking.",
        "apihelp-edit-param-notminor": "Geen kleine bewerking.",
-       "apihelp-edit-param-bot": "Deze bewerking als bot markeren.",
+       "apihelp-edit-param-bot": "Deze bewerking markeren als gedaan door een robot.",
        "apihelp-edit-param-createonly": "De pagina niet bewerken als die al bestaat.",
        "apihelp-edit-param-nocreate": "Een foutmelding geven als de pagina niet bestaat.",
        "apihelp-edit-param-watch": "Voeg de pagina toe aan de volglijst van de huidige gebruiker.",
index f7c750e..fd6a4dd 100644 (file)
        "apihelp-resetpassword-description-noroutes": "{{doc-apihelp-description|resetpassword|info=This message is used when no known routes are enabled in <var>[[mw:Manual:$wgPasswordResetRoutes|$wgPasswordResetRoutes]]</var>.|seealso={{msg-mw|apihelp-resetpassword-description}}}}",
        "apihelp-resetpassword-param-user": "{{doc-apihelp-param|resetpassword|user}}",
        "apihelp-resetpassword-param-email": "{{doc-apihelp-param|resetpassword|email}}",
-       "apihelp-resetpassword-param-capture": "{{doc-apihelp-param|resetpassword|capture}}",
        "apihelp-resetpassword-example-user": "{{doc-apihelp-example|resetpassword}}",
        "apihelp-resetpassword-example-email": "{{doc-apihelp-example|resetpassword}}",
        "apihelp-revisiondelete-description": "{{doc-apihelp-description|revisiondelete}}",
        "api-help-param-upload": "{{technical}} Used to indicate that an 'upload'-type parameter must be posted as a file upload using multipart/form-data",
        "api-help-param-multi-separate": "Used to indicate how to separate multiple values. Not used with {{msg-mw|api-help-param-list}}.",
        "api-help-param-multi-max": "Used to indicate the maximum number of values accepted for a multi-valued parameter.\n\nParameters:\n* $1 - Maximum value without the apihighlimits right\n* $2 - Maximum value with the apihighlimits right",
+       "api-help-param-multi-all": "Used to indicate what string can be used to specify all possible values of a multi-valued parameter. \n\nParameters:\n* $1 - String to specify all possible values of the parameter",
        "api-help-param-default": "Used to display the default value for an API parameter\n\nParameters:\n* $1 - Default value\n\nSee also:\n* {{msg-mw|api-help-param-default-empty}}\n{{Identical|Default}}",
        "api-help-param-default-empty": "Used to display the default value for an API parameter when that default is an empty value\n\nSee also:\n* {{msg-mw|api-help-param-default}}",
        "api-help-param-token": "{{doc-apihelp-param|description=any 'token' parameter|paramstart=2|params=\n* $1 - Token type|noseealso=1}}",
index faf2858..ad12b2f 100644 (file)
        "apihelp-query+revisions-example-first5-not-localhost": "获取<kbd>Main Page</kbd>的前5次不是由匿名用户<kbd>127.0.0.1</kbd>做出的修订。",
        "apihelp-query+revisions-example-first5-user": "获取<kbd>Main Page</kbd>的前5次由用户<kbd>MediaWiki default</kbd>做出的修订。",
        "apihelp-query+revisions+base-param-prop": "要为每个修订获取的属性:",
-       "apihelp-query+revisions+base-paramvalue-prop-ids": "修订ID。",
+       "apihelp-query+revisions+base-paramvalue-prop-ids": "修订版本的ID。",
        "apihelp-query+revisions+base-paramvalue-prop-flags": "修订标记(小编辑)。",
        "apihelp-query+revisions+base-paramvalue-prop-timestamp": "修订的时间戳。",
        "apihelp-query+revisions+base-paramvalue-prop-user": "做出修订的用户。",
        "apihelp-query+userinfo-paramvalue-prop-groups": "列举当前用户隶属的所有群组。",
        "apihelp-query+userinfo-paramvalue-prop-implicitgroups": "列举当前用户的所有自动成为成员的用户组。",
        "apihelp-query+userinfo-paramvalue-prop-rights": "列举当前用户拥有的所有权限。",
-       "apihelp-query+userinfo-paramvalue-prop-changeablegroups": "Lists the groups the current user can add to and remove from.",
+       "apihelp-query+userinfo-paramvalue-prop-changeablegroups": "列举当前用户可以添加并移除的用户组。",
        "apihelp-query+userinfo-paramvalue-prop-options": "列举当前用户设置的所有参数设置。",
        "apihelp-query+userinfo-paramvalue-prop-preferencestoken": "<span class=\"apihelp-deprecated\">已弃用。</span>获取令牌以更改当前用户的参数设置。",
        "apihelp-query+userinfo-paramvalue-prop-editcount": "添加当前用户的编辑计数。",
        "apihelp-resetpassword-description-noroutes": "没有密码重置路由可用。\n\n在<var>[[mw:Manual:$wgPasswordResetRoutes|$wgPasswordResetRoutes]]</var>中启用路由以使用此模块。",
        "apihelp-resetpassword-param-user": "正在重置的用户。",
        "apihelp-resetpassword-param-email": "正在重置用户的电子邮件地址。",
-       "apihelp-resetpassword-param-capture": "返回已发送的临时密码。需要<code>passwordreset</code>用户权限。",
        "apihelp-resetpassword-example-user": "向用户<kbd>Example</kbd>发送密码重置邮件。",
        "apihelp-resetpassword-example-email": "向所有电子邮件地址为<kbd>user@example.com</kbd>的用户发送密码重置邮件。",
        "apihelp-revisiondelete-description": "删除和恢复修订版本。",
index 88df68d..859fd0c 100644 (file)
@@ -104,7 +104,7 @@ class LocalPasswordPrimaryAuthenticationProvider
                // The old hash format was just an md5 hex hash, with no type information
                if ( preg_match( '/^[0-9a-f]{32}$/', $row->user_password ) ) {
                        if ( $this->config->get( 'PasswordSalt' ) ) {
-                               $row->user_password = ":A:{$row->user_id}:{$row->user_password}";
+                               $row->user_password = ":B:{$row->user_id}:{$row->user_password}";
                        } else {
                                $row->user_password = ":A:{$row->user_password}";
                        }
@@ -132,12 +132,12 @@ class LocalPasswordPrimaryAuthenticationProvider
 
                // @codeCoverageIgnoreStart
                if ( $this->getPasswordFactory()->needsUpdate( $pwhash ) ) {
-                       $pwhash = $this->getPasswordFactory()->newFromPlaintext( $req->password );
-                       \DeferredUpdates::addCallableUpdate( function () use ( $pwhash, $oldRow ) {
+                       $newHash = $this->getPasswordFactory()->newFromPlaintext( $req->password );
+                       \DeferredUpdates::addCallableUpdate( function () use ( $newHash, $oldRow ) {
                                $dbw = wfGetDB( DB_MASTER );
                                $dbw->update(
                                        'user',
-                                       [ 'user_password' => $pwhash->toString() ],
+                                       [ 'user_password' => $newHash->toString() ],
                                        [
                                                'user_id' => $oldRow->user_id,
                                                'user_password' => $oldRow->user_password
index 42f0e70..c858052 100644 (file)
@@ -33,12 +33,6 @@ class TemporaryPasswordAuthenticationRequest extends AuthenticationRequest {
        /** @var bool Email password to the user. */
        public $mailpassword = false;
 
-       /**
-        * @var bool Do not fail certain operations if the password cannot be mailed, there is a
-        *   backchannel present.
-        */
-       public $hasBackchannel = false;
-
        /** @var string Username or IP address of the caller */
        public $caller;
 
index 9962fa3..44c2824 100644 (file)
@@ -154,6 +154,16 @@ class TemporaryPasswordPrimaryAuthenticationProvider
                        return $this->failResponse( $req );
                }
 
+               // Add an extra log entry since a temporary password is
+               // an unusual way to log in, so its important to keep track
+               // of in case of abuse.
+               $this->logger->info( "{user} successfully logged in using temp password",
+                       [
+                               'user' => $username,
+                               'requestIP' => $this->manager->getRequest()->getIP()
+                       ]
+               );
+
                $this->setPasswordResetFlag( $username, $status );
 
                return AuthenticationResponse::newPass( $username );
@@ -236,7 +246,7 @@ class TemporaryPasswordPrimaryAuthenticationProvider
                        $sv->merge( $this->checkPasswordValidity( $username, $req->password ) );
 
                        if ( $req->mailpassword ) {
-                               if ( !$this->emailEnabled && !$req->hasBackchannel ) {
+                               if ( !$this->emailEnabled ) {
                                        return \StatusValue::newFatal( 'passwordreset-emaildisabled' );
                                }
 
@@ -326,7 +336,7 @@ class TemporaryPasswordPrimaryAuthenticationProvider
 
                $ret = \StatusValue::newGood();
                if ( $req ) {
-                       if ( $req->mailpassword && !$req->hasBackchannel ) {
+                       if ( $req->mailpassword ) {
                                if ( !$this->emailEnabled ) {
                                        $ret->merge( \StatusValue::newFatal( 'emaildisabled' ) );
                                } elseif ( !$user->getEmail() ) {
index f47c606..000b070 100644 (file)
@@ -135,7 +135,7 @@ class Throttler implements LoggerAwareInterface {
                                $this->cache->incr( $throttleKey );
                        } else { // throttled
                                $this->logRejection( [
-                                       'type' => $this->type,
+                                       'throttle' => $this->type,
                                        'index' => $index,
                                        'ip' => $ipKey,
                                        'username' => $username,
@@ -191,7 +191,7 @@ class Throttler implements LoggerAwareInterface {
        }
 
        protected function logRejection( array $context ) {
-               $logMsg = 'Throttle {type} hit, throttled for {expiry} seconds due to {count} attempts '
+               $logMsg = 'Throttle {throttle} hit, throttled for {expiry} seconds due to {count} attempts '
                        . 'from username {username} and IP {ip}';
 
                // If we are hitting a throttle for >= warningLimit attempts, it is much more likely to be
index dc8c589..3f78d9a 100644 (file)
@@ -22,6 +22,7 @@
  */
 use MediaWiki\MediaWikiServices;
 use Wikimedia\ScopedCallback;
+use MediaWiki\Logger\LoggerFactory;
 
 /**
  * MediaWiki message cache structure version.
@@ -52,6 +53,11 @@ class MessageCache {
         */
        protected $mCache;
 
+       /**
+        * @var bool[] Map of (language code => boolean)
+        */
+       protected $mCacheVolatile = [];
+
        /**
         * Should mean that database cannot be used, but check
         * @var bool $mDisable
@@ -65,10 +71,12 @@ class MessageCache {
        protected $mExpiry;
 
        /**
-        * Message cache has its own parser which it uses to transform
-        * messages.
+        * Message cache has its own parser which it uses to transform messages
+        * @var ParserOptions
         */
-       protected $mParserOptions, $mParser;
+       protected $mParserOptions;
+       /** @var Parser */
+       protected $mParser;
 
        /**
         * Variable for tracking which variables are already loaded
@@ -129,6 +137,7 @@ class MessageCache {
         */
        public static function normalizeKey( $key ) {
                global $wgContLang;
+
                $lckey = strtr( $key, ' ', '_' );
                if ( ord( $lckey ) < 128 ) {
                        $lckey[0] = strtolower( $lckey[0] );
@@ -144,13 +153,9 @@ class MessageCache {
         * @param bool $useDB
         * @param int $expiry Lifetime for cache. @see $mExpiry.
         */
-       function __construct( $memCached, $useDB, $expiry ) {
+       function __construct( BagOStuff $memCached, $useDB, $expiry ) {
                global $wgUseLocalMessageCache;
 
-               if ( !$memCached ) {
-                       $memCached = wfGetCache( CACHE_NONE );
-               }
-
                $this->mMemc = $memCached;
                $this->mDisable = !$useDB;
                $this->mExpiry = $expiry;
@@ -262,6 +267,7 @@ class MessageCache {
                # Hash of the contents is stored in memcache, to detect if data-center cache
                # or local cache goes out of date (e.g. due to replace() on some other server)
                list( $hash, $hashVolatile ) = $this->getValidationHash( $code );
+               $this->mCacheVolatile[$code] = $hashVolatile;
 
                # Try the local cache and check against the cluster hash key...
                $cache = $this->getLocalCache( $code );
@@ -477,9 +483,16 @@ class MessageCache {
                $bigConds[] = 'page_len > ' . intval( $wgMaxMsgCacheEntrySize );
 
                # Load titles for all oversized pages in the MediaWiki namespace
-               $res = $dbr->select( 'page', 'page_title', $bigConds, __METHOD__ . "($code)-big" );
+               $res = $dbr->select(
+                       'page',
+                       [ 'page_title', 'page_latest' ],
+                       $bigConds,
+                       __METHOD__ . "($code)-big"
+               );
                foreach ( $res as $row ) {
                        $cache[$row->page_title] = '!TOO BIG';
+                       // At least include revision ID so page changes are reflected in the hash
+                       $cache['EXCESSIVE'][$row->page_title] = $row->page_latest;
                }
 
                # Conditions to load the remaining pages with their contents
@@ -524,7 +537,7 @@ class MessageCache {
         * Updates cache as necessary when message page is changed
         *
         * @param string|bool $title Name of the page changed (false if deleted)
-        * @param mixed $text New contents of the page.
+        * @param string|bool $text New contents of the page (false if deleted)
         */
        public function replace( $title, $text ) {
                global $wgMaxMsgCacheEntrySize, $wgContLang, $wgLanguageCode;
@@ -544,31 +557,32 @@ class MessageCache {
                // a self-deadlock. This is safe as no reads happen *directly* in this
                // method between getReentrantScopedLock() and load() below. There is
                // no risk of data "changing under our feet" for replace().
-               $cacheKey = wfMemcKey( 'messages', $code );
-               $scopedLock = $this->getReentrantScopedLock( $cacheKey );
+               $scopedLock = $this->getReentrantScopedLock( wfMemcKey( 'messages', $code ) );
+               // Load the messages from the master DB to avoid race conditions
                $this->load( $code, self::FOR_UPDATE );
 
-               $titleKey = wfMemcKey( 'messages', 'individual', $title );
+               // Load the new value into the process cache...
                if ( $text === false ) {
-                       // Article was deleted
                        $this->mCache[$code][$title] = '!NONEXISTENT';
-                       $this->wanCache->delete( $titleKey );
                } elseif ( strlen( $text ) > $wgMaxMsgCacheEntrySize ) {
-                       // Check for size
                        $this->mCache[$code][$title] = '!TOO BIG';
-                       $this->wanCache->set( $titleKey, ' ' . $text, $this->mExpiry );
+                       // Pre-fill the individual key cache with the known latest message text
+                       $key = $this->wanCache->makeKey( 'messages-big', $this->mCache[$code]['HASH'], $title );
+                       $this->wanCache->set( $key, " $text", $this->mExpiry );
                } else {
                        $this->mCache[$code][$title] = ' ' . $text;
-                       $this->wanCache->delete( $titleKey );
                }
-
-               // Mark this cache as definitely "latest" (non-volatile) so
-               // load() calls do try to refresh the cache with replica DB data
+               // Mark this cache as definitely being "latest" (non-volatile) so
+               // load() calls do not try to refresh the cache with replica DB data
                $this->mCache[$code]['LATEST'] = time();
 
                // Update caches if the lock was acquired
                if ( $scopedLock ) {
                        $this->saveToCaches( $this->mCache[$code], 'all', $code );
+               } else {
+                       LoggerFactory::getInstance( 'MessageCache' )->error(
+                               __METHOD__ . ': could not acquire lock to update {title} ({code})',
+                               [ 'title' => $title, 'code' => $code ] );
                }
 
                ScopedCallback::consume( $scopedLock );
@@ -648,24 +662,26 @@ class MessageCache {
        protected function getValidationHash( $code ) {
                $curTTL = null;
                $value = $this->wanCache->get(
-                       wfMemcKey( 'messages', $code, 'hash', 'v1' ),
+                       $this->wanCache->makeKey( 'messages', $code, 'hash', 'v1' ),
                        $curTTL,
                        [ wfMemcKey( 'messages', $code ) ]
                );
 
-               if ( !$value ) {
-                       // No hash found at all; cache must regenerate to be safe
-                       $hash = false;
-                       $expired = true;
-               } else {
+               if ( $value ) {
                        $hash = $value['hash'];
-                       if ( ( time() - $value['latest'] ) < WANObjectCache::HOLDOFF_TTL ) {
-                               // Cache was recently updated via replace() and should be up-to-date
+                       if ( ( time() - $value['latest'] ) < WANObjectCache::TTL_MINUTE ) {
+                               // Cache was recently updated via replace() and should be up-to-date.
+                               // That method is only called in the primary datacenter and uses FOR_UPDATE.
+                               // Also, it is unlikely that the current datacenter is *now* secondary one.
                                $expired = false;
                        } else {
                                // See if the "check" key was bumped after the hash was generated
                                $expired = ( $curTTL < 0 );
                        }
+               } else {
+                       // No hash found at all; cache must regenerate to be safe
+                       $hash = false;
+                       $expired = true;
                }
 
                return [ $hash, $expired ];
@@ -675,14 +691,15 @@ class MessageCache {
         * Set the md5 used to validate the local disk cache
         *
         * If $cache has a 'LATEST' UNIX timestamp key, then the hash will not
-        * be treated as "volatile" by getValidationHash() for the next few seconds
+        * be treated as "volatile" by getValidationHash() for the next few seconds.
+        * This is triggered when $cache is generated using FOR_UPDATE mode.
         *
         * @param string $code
         * @param array $cache Cached messages with a version
         */
        protected function setValidationHash( $code, array $cache ) {
                $this->wanCache->set(
-                       wfMemcKey( 'messages', $code, 'hash', 'v1' ),
+                       $this->wanCache->makeKey( 'messages', $code, 'hash', 'v1' ),
                        [
                                'hash' => $cache['HASH'],
                                'latest' => isset( $cache['LATEST'] ) ? $cache['LATEST'] : 0
@@ -845,6 +862,7 @@ class MessageCache {
         */
        private function getMessageForLang( $lang, $lckey, $useDB, &$alreadyTried ) {
                global $wgContLang;
+
                $langcode = $lang->getCode();
 
                // Try checking the database for the requested language
@@ -903,6 +921,7 @@ class MessageCache {
         */
        private function getMessagePageName( $langcode, $uckey ) {
                global $wgLanguageCode;
+
                if ( $langcode === $wgLanguageCode ) {
                        // Messages created in the content language will not have the /lang extension
                        return $uckey;
@@ -928,8 +947,7 @@ class MessageCache {
                if ( isset( $this->mCache[$code][$title] ) ) {
                        $entry = $this->mCache[$code][$title];
                        if ( substr( $entry, 0, 1 ) === ' ' ) {
-                               // The message exists, so make sure a string
-                               // is returned.
+                               // The message exists, so make sure a string is returned.
                                return (string)substr( $entry, 1 );
                        } elseif ( $entry === '!NONEXISTENT' ) {
                                return false;
@@ -948,17 +966,19 @@ class MessageCache {
                }
 
                // Try the individual message cache
-               $titleKey = wfMemcKey( 'messages', 'individual', $title );
-
-               $curTTL = null;
-               $entry = $this->wanCache->get(
-                       $titleKey,
-                       $curTTL,
-                       [ wfMemcKey( 'messages', $code ) ]
-               );
-               $entry = ( $curTTL >= 0 ) ? $entry : false;
+               $titleKey = $this->wanCache->makeKey( 'messages-big', $this->mCache[$code]['HASH'], $title );
+
+               if ( $this->mCacheVolatile[$code] ) {
+                       $entry = false;
+                       // Make sure that individual keys respect the WAN cache holdoff period too
+                       LoggerFactory::getInstance( 'MessageCache' )->debug(
+                               __METHOD__ . ': loading volatile key \'{titleKey}\'',
+                               [ 'titleKey' => $titleKey, 'code' => $code ] );
+               } else {
+                       $entry = $this->wanCache->get( $titleKey );
+               }
 
-               if ( $entry ) {
+               if ( $entry !== false ) {
                        if ( substr( $entry, 0, 1 ) === ' ' ) {
                                $this->mCache[$code][$title] = $entry;
                                // The message exists, so make sure a string is returned
@@ -973,7 +993,7 @@ class MessageCache {
                        }
                }
 
-               // Try loading it from the database
+               // Try loading the message from the database
                $dbr = wfGetDB( DB_REPLICA );
                $cacheOpts = Database::getCacheSetOptions( $dbr );
                // Use newKnownCurrent() to avoid querying revision/user tables
@@ -990,32 +1010,18 @@ class MessageCache {
 
                if ( $revision ) {
                        $content = $revision->getContent();
-                       if ( !$content ) {
-                               // A possibly temporary loading failure.
-                               wfDebugLog(
-                                       'MessageCache',
-                                       __METHOD__ . ": failed to load message page text for {$title} ($code)"
-                               );
-                               $message = null; // no negative caching
-                       } else {
-                               // XXX: Is this the right way to turn a Content object into a message?
-                               // NOTE: $content is typically either WikitextContent, JavaScriptContent or
-                               //       CssContent. MessageContent is *not* used for storing messages, it's
-                               //       only used for wrapping them when needed.
-                               $message = $content->getWikitextForTransclusion();
-
-                               if ( $message === false || $message === null ) {
-                                       wfDebugLog(
-                                               'MessageCache',
-                                               __METHOD__ . ": message content doesn't provide wikitext "
-                                                       . "(content model: " . $content->getModel() . ")"
-                                       );
-
-                                       $message = false; // negative caching
-                               } else {
+                       if ( $content ) {
+                               $message = $this->getMessageTextFromContent( $content );
+                               if ( is_string( $message ) ) {
                                        $this->mCache[$code][$title] = ' ' . $message;
                                        $this->wanCache->set( $titleKey, ' ' . $message, $this->mExpiry, $cacheOpts );
                                }
+                       } else {
+                               // A possibly temporary loading failure
+                               LoggerFactory::getInstance( 'MessageCache' )->warning(
+                                       __METHOD__ . ': failed to load message page text for \'{titleKey}\'',
+                                       [ 'titleKey' => $titleKey, 'code' => $code ] );
+                               $message = null; // no negative caching
                        }
                } else {
                        $message = false; // negative caching
@@ -1067,6 +1073,7 @@ class MessageCache {
         */
        function getParser() {
                global $wgParser, $wgParserConf;
+
                if ( !$this->mParser && isset( $wgParser ) ) {
                        # Do some initialisation so that we don't have to do it twice
                        $wgParser->firstCallInit();
@@ -1094,6 +1101,8 @@ class MessageCache {
        public function parse( $text, $title = null, $linestart = true,
                $interface = false, $language = null
        ) {
+               global $wgTitle;
+
                if ( $this->mInParser ) {
                        return htmlspecialchars( $text );
                }
@@ -1108,7 +1117,6 @@ class MessageCache {
                $popts->setTargetLanguage( $language );
 
                if ( !$title || !$title instanceof Title ) {
-                       global $wgTitle;
                        wfDebugLog( 'GlobalTitleFail', __METHOD__ . ' called by ' .
                                wfGetAllCallers( 6 ) . ' with no title set.' );
                        $title = $wgTitle;
@@ -1196,6 +1204,7 @@ class MessageCache {
         */
        public function getAllMessageKeys( $code ) {
                global $wgContLang;
+
                $this->load( $code );
                if ( !isset( $this->mCache[$code] ) ) {
                        // Apparently load() failed
@@ -1205,10 +1214,61 @@ class MessageCache {
                $cache = $this->mCache[$code];
                unset( $cache['VERSION'] );
                unset( $cache['EXPIRY'] );
+               unset( $cache['EXCESSIVE'] );
                // Remove any !NONEXISTENT keys
                $cache = array_diff( $cache, [ '!NONEXISTENT' ] );
 
                // Keys may appear with a capital first letter. lcfirst them.
                return array_map( [ $wgContLang, 'lcfirst' ], array_keys( $cache ) );
        }
+
+       /**
+        * Purge message caches when a MediaWiki: page is created, updated, or deleted
+        *
+        * @param Title $title Message page title
+        * @param Content|null $content New content for edit/create, null on deletion
+        * @since 1.29
+        */
+       public function updateMessageOverride( Title $title, Content $content = null ) {
+               global $wgContLang;
+
+               $msgText = $this->getMessageTextFromContent( $content );
+               if ( $msgText === null ) {
+                       $msgText = false; // treat as not existing
+               }
+
+               $this->replace( $title->getDBkey(), $msgText );
+
+               if ( $wgContLang->hasVariants() ) {
+                       $wgContLang->updateConversionTable( $title );
+               }
+       }
+
+       /**
+        * @param Content|null $content Content or null if the message page does not exist
+        * @return string|bool|null Returns false if $content is null and null on error
+        */
+       private function getMessageTextFromContent( Content $content = null ) {
+               // @TODO: could skip pseudo-messages like js/css here, based on content model
+               if ( $content ) {
+                       // Message page exists...
+                       // XXX: Is this the right way to turn a Content object into a message?
+                       // NOTE: $content is typically either WikitextContent, JavaScriptContent or
+                       //       CssContent. MessageContent is *not* used for storing messages, it's
+                       //       only used for wrapping them when needed.
+                       $msgText = $content->getWikitextForTransclusion();
+                       if ( $msgText === false || $msgText === null ) {
+                               // This might be due to some kind of misconfiguration...
+                               $msgText = null;
+                               LoggerFactory::getInstance( 'MessageCache' )->warning(
+                                       __METHOD__ . ": message content doesn't provide wikitext "
+                                       . "(content model: " . $content->getModel() . ")" );
+                       }
+               } else {
+                       // Message page does not exist...
+                       $msgText = false;
+               }
+
+               return $msgText;
+       }
 }
index 993f0b7..e3035be 100644 (file)
@@ -397,7 +397,7 @@ class ChangeTags {
                        if ( !$user->isAllowed( 'applychangetags' ) ) {
                                return Status::newFatal( 'tags-apply-no-permission' );
                        } elseif ( $user->isBlocked() ) {
-                               return Status::newFatal( 'tags-apply-blocked' );
+                               return Status::newFatal( 'tags-apply-blocked', $user->getName() );
                        }
                }
 
@@ -468,7 +468,7 @@ class ChangeTags {
                        if ( !$user->isAllowed( 'changetags' ) ) {
                                return Status::newFatal( 'tags-update-no-permission' );
                        } elseif ( $user->isBlocked() ) {
-                               return Status::newFatal( 'tags-update-blocked' );
+                               return Status::newFatal( 'tags-update-blocked', $user->getName() );
                        }
                }
 
@@ -790,7 +790,7 @@ class ChangeTags {
                        if ( !$user->isAllowed( 'managechangetags' ) ) {
                                return Status::newFatal( 'tags-manage-no-permission' );
                        } elseif ( $user->isBlocked() ) {
-                               return Status::newFatal( 'tags-manage-blocked' );
+                               return Status::newFatal( 'tags-manage-blocked', $user->getName() );
                        }
                }
 
@@ -858,7 +858,7 @@ class ChangeTags {
                        if ( !$user->isAllowed( 'managechangetags' ) ) {
                                return Status::newFatal( 'tags-manage-no-permission' );
                        } elseif ( $user->isBlocked() ) {
-                               return Status::newFatal( 'tags-manage-blocked' );
+                               return Status::newFatal( 'tags-manage-blocked', $user->getName() );
                        }
                }
 
@@ -917,7 +917,7 @@ class ChangeTags {
                        if ( !$user->isAllowed( 'managechangetags' ) ) {
                                return Status::newFatal( 'tags-manage-no-permission' );
                        } elseif ( $user->isBlocked() ) {
-                               return Status::newFatal( 'tags-manage-blocked' );
+                               return Status::newFatal( 'tags-manage-blocked', $user->getName() );
                        }
                }
 
@@ -1050,7 +1050,7 @@ class ChangeTags {
                        if ( !$user->isAllowed( 'deletechangetags' ) ) {
                                return Status::newFatal( 'tags-delete-no-permission' );
                        } elseif ( $user->isBlocked() ) {
-                               return Status::newFatal( 'tags-manage-blocked' );
+                               return Status::newFatal( 'tags-manage-blocked', $user->getName() );
                        }
                }
 
index 881c8c2..9950a11 100644 (file)
@@ -46,11 +46,13 @@ abstract class Collation {
         * @return Collation
         */
        public static function factory( $collationName ) {
+               global $wgContLang;
+
                switch ( $collationName ) {
                        case 'uppercase':
                                return new UppercaseCollation;
                        case 'numeric':
-                               return new NumericUppercaseCollation;
+                               return new NumericUppercaseCollation( $wgContLang );
                        case 'identity':
                                return new IdentityCollation;
                        case 'uca-default':
index e6b773c..7b4fce6 100644 (file)
@@ -100,6 +100,12 @@ class IcuCollation extends Collation {
                'be' => [ "Ё" ],
                'be-tarask' => [ "Ё" ],
                'bg' => [],
+               'bn' => [ 'ং', 'ঃ', 'ঁ' ],
+               'bn@collation=traditional' => [
+                       'ং', 'ঃ', 'ঁ', 'ক্', 'খ্', 'গ্', 'ঘ্', 'ঙ্', 'চ্', 'ছ্', 'জ্', 'ঝ্',
+                       'ঞ্', 'ট্', 'ঠ্', 'ড্', 'ঢ্', 'ণ্', 'ৎ', 'থ্', 'দ্', 'ধ্', 'ন্', 'প্',
+                       'ফ্', 'ব্', 'ভ্', 'ম্', 'য্', 'র্', 'ৰ্', 'ল্', 'ৱ্', 'শ্', 'ষ্', 'স্', 'হ্'
+               ],
                'bo' => [],
                'br' => [ "Ch", "C'h" ],
                'bs' => [ "Č", "Ć", "Dž", "Đ", "Lj", "Nj", "Š", "Ž" ],
index d15daec..2d2ca47 100644 (file)
  * Note that this only works in terms of sequences of digits, and the behavior for decimal fractions
  * or pretty-formatted numbers may be unexpected.
  *
+ * Digits will be based on the wiki's content language settings. If
+ * you change the content langauge of a wiki you will need to run
+ * updateCollation.php --force. Only English (ASCII 0-9) and the
+ * localized version will be counted. Localized digits from other languages
+ * or weird unicode digit equivalents (e.g. 4, 𝟜, ⓸ , ⁴, etc) will not count.
+ *
  * @since 1.28
  */
 class NumericUppercaseCollation extends UppercaseCollation {
+
+       /**
+        * @var $digitTransformLang Language How to convert digits (usually $wgContLang)
+        */
+       private $digitTransformLang;
+
+       /**
+        * Constructor
+        *
+        * @param $lang Language How to convert digits.
+        *  For example, if given language "my" than ၇ is treated like 7.
+        *
+        * It is expected that usually this is given $wgContLang.
+        */
+       public function __construct( Language $lang ) {
+               $this->digitTransformLang = $lang;
+               parent::__construct();
+       }
+
        public function getSortKey( $string ) {
                $sortkey = parent::getSortKey( $string );
-
+               $sortkey = $this->convertDigits( $sortkey );
                // For each sequence of digits, insert the digit '0' and then the length of the sequence
                // (encoded in two bytes) before it. That's all folks, it sorts correctly now! The '0' ensures
                // correct position (where digits would normally sort), then the length will be compared putting
@@ -48,11 +73,33 @@ class NumericUppercaseCollation extends UppercaseCollation {
                return $sortkey;
        }
 
+       /**
+        * Convert localized digits to english digits.
+        *
+        * based on Language::parseFormattedNumber but without commas.
+        *
+        * @param $string String sortkey to unlocalize digits of
+        * @return String Sortkey with all localized digits replaced with ASCII digits.
+        */
+       private function convertDigits( $string ) {
+               $table = $this->digitTransformLang->digitTransformTable();
+               if ( $table ) {
+                       $table = array_filter( $table );
+                       $flipped = array_flip( $table );
+                       // Some languages seem to also have commas in this table.
+                       $flipped = array_filter( $flipped, 'is_numeric' );
+                       $string = strtr( $string, $flipped );
+               }
+               return $string;
+       }
+
        public function getFirstLetter( $string ) {
-               if ( preg_match( '/^\d/', $string ) ) {
-                       // Note that we pass 0 and 9 as normal params, not numParams(). This only works for 0-9
-                       // and not localised digits, so we don't want them to be converted.
-                       return wfMessage( 'category-header-numerals' )->params( 0, 9 )->text();
+               $convertedString = $this->convertDigits( $string );
+
+               if ( preg_match( '/^\d/', $convertedString ) ) {
+                       return wfMessage( 'category-header-numerals' )
+                               ->numParams( 0, 9 )
+                               ->text();
                } else {
                        return parent::getFirstLetter( $string );
                }
index 20893bb..dfd46c8 100644 (file)
 abstract class CodeContentHandler extends TextContentHandler {
 
        /**
-        * Returns the english language, because code is english, and should be handled as such.
+        * Returns the English language, because code is English, and should be handled as such.
         *
         * @param Title $title
         * @param Content $content
         *
-        * @return Language Return of wfGetLangObj( 'en' )
+        * @return Language
         *
         * @see ContentHandler::getPageLanguage()
         */
        public function getPageLanguage( Title $title, Content $content = null ) {
-               return wfGetLangObj( 'en' );
+               return Language::factory( 'en' );
        }
 
        /**
-        * Returns the english language, because code is english, and should be handled as such.
+        * Returns the English language, because code is English, and should be handled as such.
         *
         * @param Title $title
         * @param Content $content
         *
-        * @return Language Return of wfGetLangObj( 'en' )
+        * @return Language
         *
         * @see ContentHandler::getPageViewLanguage()
         */
        public function getPageViewLanguage( Title $title, Content $content = null ) {
-               return wfGetLangObj( 'en' );
+               return Language::factory( 'en' );
        }
 
        /**
index 4d7c84d..4614c46 100644 (file)
@@ -327,7 +327,7 @@ class LegacyLogger extends AbstractLogger {
         * @param string $channel
         * @param string $message
         * @param array $context
-        * @return null
+        * @return string
         */
        protected static function formatAsWfDebugLog( $channel, $message, $context ) {
                $time = wfTimestamp( TS_DB );
index ad939a0..81e1e14 100644 (file)
@@ -29,6 +29,17 @@ namespace MediaWiki\Logger\Monolog;
  * @copyright © 2013 Bryan Davis and Wikimedia Foundation.
  */
 class WikiProcessor {
+       /** @var array Keys which should not be used in log context */
+       protected $reservedKeys = [
+               // from monolog:src/Monolog/Formatter/LogstashFormatter.php#L71-L88
+               'message', 'channel', 'level', 'type',
+               // from WebProcessor
+               'url', 'ip', 'http_method', 'server', 'referrer',
+               // from WikiProcessor
+               'host', 'wiki', 'reqId', 'mwversion',
+               // from config magic
+               'normalized_message',
+       ];
 
        /**
         * @param array $record
@@ -36,6 +47,15 @@ class WikiProcessor {
         */
        public function __invoke( array $record ) {
                global $wgVersion;
+
+               // some log aggregators such as Logstash will merge the log context into the main
+               // metadata and end up overwriting the data coming from processors
+               foreach ( $this->reservedKeys as $key ) {
+                       if ( isset( $record['context'][$key] ) ) {
+                               wfLogWarning( __METHOD__ . ": '$key' key overwritten in log context." );
+                       }
+               }
+
                $record['extra'] = array_merge(
                        $record['extra'],
                        [
@@ -47,5 +67,4 @@ class WikiProcessor {
                );
                return $record;
        }
-
 }
index 8fdc417..b600f42 100644 (file)
@@ -60,9 +60,10 @@ class MWExceptionRenderer {
                                                        MWExceptionHandler::getLogMessage( $eNew ) .
                                                "\nBacktrace:\n" . MWExceptionHandler::getRedactedTraceAsString( $eNew );
                                } else {
-                                       $message .= "Exception caught inside exception handler.\n\n" .
-                                               "Set \$wgShowExceptionDetails = true; at the bottom of LocalSettings.php " .
-                                               "to show detailed debugging information.";
+                                       $message .= 'Original exception: ' .
+                                               MWExceptionHandler::getPublicLogMessage( $e );
+                                       $message .= "\n\nException caught inside exception handler.\n\n" .
+                                               self::getShowBacktraceError( $e );
                                }
                                $message .= "\n";
                        } else {
@@ -74,11 +75,7 @@ class MWExceptionRenderer {
                                        $message = MWExceptionHandler::getPublicLogMessage( $e );
                                }
                        }
-                       if ( self::isCommandLine() ) {
-                               self::printError( $message );
-                       } else {
-                               echo nl2br( htmlspecialchars( $message ) ) . "\n";
-                       }
+                       echo nl2br( htmlspecialchars( $message ) ) . "\n";
                }
        }
 
@@ -226,9 +223,7 @@ class MWExceptionRenderer {
                                        $logId,
                                        MWExceptionHandler::getURL()
                                ) . "</div>\n" .
-                       "<!-- Set \$wgShowExceptionDetails = true; " .
-                       "at the bottom of LocalSettings.php to show detailed " .
-                       "debugging information. -->";
+                               "<!-- " . wordwrap( self::getShowBacktraceError( $e ), 50 ) . " -->";
                }
 
                return $html;
@@ -262,8 +257,7 @@ class MWExceptionRenderer {
                                "\nBacktrace:\n" .
                                MWExceptionHandler::getRedactedTraceAsString( $e ) . "\n";
                } else {
-                       return "Set \$wgShowExceptionDetails = true; " .
-                               "in LocalSettings.php to show detailed debugging information.\n";
+                       return self::getShowBacktraceError( $e );
                }
        }
 
@@ -280,6 +274,23 @@ class MWExceptionRenderer {
                );
        }
 
+       /**
+        * @param Exception|Throwable $e
+        * @return string
+        */
+       private static function getShowBacktraceError( $e ) {
+               global $wgShowExceptionDetails, $wgShowDBErrorBacktrace;
+               $vars = [];
+               if ( !$wgShowExceptionDetails ) {
+                       $vars[] = '$wgShowExceptionDetails = true;';
+               }
+               if ( $e instanceof DBError && !$wgShowDBErrorBacktrace ) {
+                       $vars[] = '$wgShowDBErrorBacktrace = true;';
+               }
+               $vars = implode( ' and ', $vars );
+               return "Set $vars at the bottom of LocalSettings.php to show detailed debugging information";
+       }
+
        /**
         * @return bool
         */
index 7fb7a0e..f49ef88 100644 (file)
@@ -89,7 +89,7 @@ class ForeignDBRepo extends LocalRepo {
        /**
         * @return IDatabase
         */
-       function getSlaveDB() {
+       function getReplicaDB() {
                return $this->getMasterDB();
        }
 
index 129d55a..a9cd030 100644 (file)
@@ -65,7 +65,7 @@ class ForeignDBViaLBRepo extends LocalRepo {
        /**
         * @return IDatabase
         */
-       function getSlaveDB() {
+       function getReplicaDB() {
                return wfGetLB( $this->wiki )->getConnectionRef( DB_REPLICA, [], $this->wiki );
        }
 
index c4730d7..d49ae7b 100644 (file)
@@ -200,7 +200,7 @@ class LocalRepo extends FileRepo {
                        $memcKey,
                        $expiry,
                        function ( $oldValue, &$ttl, array &$setOpts ) use ( $method, $title ) {
-                               $dbr = $this->getSlaveDB(); // possibly remote DB
+                               $dbr = $this->getReplicaDB(); // possibly remote DB
 
                                $setOpts += Database::getCacheSetOptions( $dbr );
 
@@ -298,7 +298,7 @@ class LocalRepo extends FileRepo {
                        }
                };
 
-               $dbr = $this->getSlaveDB();
+               $dbr = $this->getReplicaDB();
 
                // Query image table
                $imgNames = [];
@@ -368,7 +368,7 @@ class LocalRepo extends FileRepo {
         * @return File[]
         */
        function findBySha1( $hash ) {
-               $dbr = $this->getSlaveDB();
+               $dbr = $this->getReplicaDB();
                $res = $dbr->select(
                        'image',
                        LocalFile::selectFields(),
@@ -400,7 +400,7 @@ class LocalRepo extends FileRepo {
                        return []; // empty parameter
                }
 
-               $dbr = $this->getSlaveDB();
+               $dbr = $this->getReplicaDB();
                $res = $dbr->select(
                        'image',
                        LocalFile::selectFields(),
@@ -430,7 +430,7 @@ class LocalRepo extends FileRepo {
                $selectOptions = [ 'ORDER BY' => 'img_name', 'LIMIT' => intval( $limit ) ];
 
                // Query database
-               $dbr = $this->getSlaveDB();
+               $dbr = $this->getReplicaDB();
                $res = $dbr->select(
                        'image',
                        LocalFile::selectFields(),
@@ -452,10 +452,20 @@ class LocalRepo extends FileRepo {
         * Get a connection to the replica DB
         * @return IDatabase
         */
-       function getSlaveDB() {
+       function getReplicaDB() {
                return wfGetDB( DB_REPLICA );
        }
 
+       /**
+        * Alias for getReplicaDB()
+        *
+        * @return IDatabase
+        * @deprecated Since 1.29
+        */
+       function getSlaveDB() {
+               return $this->getReplicaDB();
+       }
+
        /**
         * Get a connection to the master DB
         * @return IDatabase
index c041dea..df50a67 100644 (file)
@@ -136,7 +136,7 @@ class ForeignDBFile extends LocalFile {
                        return false;
                }
 
-               $touched = $this->repo->getSlaveDB()->selectField(
+               $touched = $this->repo->getReplicaDB()->selectField(
                        'page',
                        'page_touched',
                        [
@@ -179,7 +179,7 @@ class ForeignDBFile extends LocalFile {
         * @since 1.27
         */
        public function getDescriptionShortUrl() {
-               $dbr = $this->repo->getSlaveDB();
+               $dbr = $this->repo->getReplicaDB();
                $pageId = $dbr->selectField(
                        'page',
                        'page_id',
index d3a14fa..011ba87 100644 (file)
@@ -174,7 +174,7 @@ class LocalFile extends File {
         * @return bool|LocalFile
         */
        static function newFromKey( $sha1, $repo, $timestamp = false ) {
-               $dbr = $repo->getSlaveDB();
+               $dbr = $repo->getReplicaDB();
 
                $conds = [ 'img_sha1' => $sha1 ];
                if ( $timestamp ) {
@@ -259,7 +259,7 @@ class LocalFile extends File {
                        $key,
                        $cache::TTL_WEEK,
                        function ( $oldValue, &$ttl, array &$setOpts ) use ( $cache ) {
-                               $setOpts += Database::getCacheSetOptions( $this->repo->getSlaveDB() );
+                               $setOpts += Database::getCacheSetOptions( $this->repo->getReplicaDB() );
 
                                $this->loadFromDB( self::READ_NORMAL );
 
@@ -390,7 +390,7 @@ class LocalFile extends File {
 
                $dbr = ( $flags & self::READ_LATEST )
                        ? $this->repo->getMasterDB()
-                       : $this->repo->getSlaveDB();
+                       : $this->repo->getReplicaDB();
 
                $row = $dbr->selectRow( 'image', $this->getCacheFields( 'img_' ),
                        [ 'img_name' => $this->getName() ], $fname );
@@ -412,7 +412,7 @@ class LocalFile extends File {
                # Unconditionally set loaded=true, we don't want the accessors constantly rechecking
                $this->extraDataLoaded = true;
 
-               $fieldMap = $this->loadFieldsWithTimestamp( $this->repo->getSlaveDB(), $fname );
+               $fieldMap = $this->loadFieldsWithTimestamp( $this->repo->getReplicaDB(), $fname );
                if ( !$fieldMap ) {
                        $fieldMap = $this->loadFieldsWithTimestamp( $this->repo->getMasterDB(), $fname );
                }
@@ -490,7 +490,7 @@ class LocalFile extends File {
 
                $decoded['timestamp'] = wfTimestamp( TS_MW, $decoded['timestamp'] );
 
-               $decoded['metadata'] = $this->repo->getSlaveDB()->decodeBlob( $decoded['metadata'] );
+               $decoded['metadata'] = $this->repo->getReplicaDB()->decodeBlob( $decoded['metadata'] );
 
                if ( empty( $decoded['major_mime'] ) ) {
                        $decoded['mime'] = 'unknown/unknown';
@@ -1037,7 +1037,7 @@ class LocalFile extends File {
         * @return OldLocalFile[]
         */
        function getHistory( $limit = null, $start = null, $end = null, $inc = true ) {
-               $dbr = $this->repo->getSlaveDB();
+               $dbr = $this->repo->getReplicaDB();
                $tables = [ 'oldimage' ];
                $fields = OldLocalFile::selectFields();
                $conds = $opts = $join_conds = [];
@@ -1091,7 +1091,7 @@ class LocalFile extends File {
                # Polymorphic function name to distinguish foreign and local fetches
                $fname = get_class( $this ) . '::' . __FUNCTION__;
 
-               $dbr = $this->repo->getSlaveDB();
+               $dbr = $this->repo->getReplicaDB();
 
                if ( $this->historyLine == 0 ) { // called for the first time, return line from cur
                        $this->historyRes = $dbr->select( 'image',
@@ -1917,7 +1917,7 @@ class LocalFile extends File {
                                'page_namespace' => $this->title->getNamespace(),
                                'page_title' => $this->title->getDBkey()
                        ];
-                       $touched = $this->repo->getSlaveDB()->selectField( 'page', 'page_touched', $cond, __METHOD__ );
+                       $touched = $this->repo->getReplicaDB()->selectField( 'page', 'page_touched', $cond, __METHOD__ );
                        $this->descriptionTouched = $touched ? wfTimestamp( TS_MW, $touched ) : false;
                }
 
index 06fef4f..dfaae73 100644 (file)
@@ -86,7 +86,7 @@ class OldLocalFile extends LocalFile {
         * @return bool|OldLocalFile
         */
        static function newFromKey( $sha1, $repo, $timestamp = false ) {
-               $dbr = $repo->getSlaveDB();
+               $dbr = $repo->getReplicaDB();
 
                $conds = [ 'oi_sha1' => $sha1 ];
                if ( $timestamp ) {
@@ -179,7 +179,7 @@ class OldLocalFile extends LocalFile {
 
                $dbr = ( $flags & self::READ_LATEST )
                        ? $this->repo->getMasterDB()
-                       : $this->repo->getSlaveDB();
+                       : $this->repo->getReplicaDB();
 
                $conds = [ 'oi_name' => $this->getName() ];
                if ( is_null( $this->requestedTime ) ) {
@@ -201,7 +201,7 @@ class OldLocalFile extends LocalFile {
         */
        protected function loadExtraFromDB() {
                $this->extraDataLoaded = true;
-               $dbr = $this->repo->getSlaveDB();
+               $dbr = $this->repo->getReplicaDB();
                $conds = [ 'oi_name' => $this->getName() ];
                if ( is_null( $this->requestedTime ) ) {
                        $conds['oi_archive_name'] = $this->archive_name;
index 0f86ee8..b0890c6 100644 (file)
  *   options-messages - As for HTMLSelectField
  *   options - As for HTMLSelectField
  *   options-message - As for HTMLSelectField
- *   autocomplete - Associative array mapping display text to values.
- *   autocomplete-messages - Like autocomplete, but keys are message names.
+ *   autocomplete-data - Associative array mapping display text to values.
+ *   autocomplete-data-messages - Like autocomplete, but keys are message names.
  *   require-match - Boolean, if true the value must be in the options or the
  *     autocomplete.
  *   other-message - Message to use instead of htmlform-selectorother-other for
  *      the 'other' message.
  *   other - Raw text to use for the 'other' message
+ *
+ * The old name of autocomplete-data[-messages] was autocomplete[-messages] which is still
+ * recognized but deprecated since MediaWiki 1.29 since it conflicts with how autocomplete is
+ * used in HTMLTextField.
  */
 class HTMLAutoCompleteSelectField extends HTMLTextField {
-       protected $autocomplete = [];
+       protected $autocompleteData = [];
 
        public function __construct( $params ) {
                $params += [
                        'require-match' => false,
                ];
 
+               // FIXME B/C, remove in 1.30
+               if (
+                       array_key_exists( 'autocomplete', $params )
+                       && !array_key_exists( 'autocomplete-data', $params )
+               ) {
+                       $params['autocomplete-data'] = $params['autocomplete'];
+                       unset( $params['autocomplete'] );
+               }
+               if (
+                       array_key_exists( 'autocomplete-messages', $params )
+                       && !array_key_exists( 'autocomplete-data-messages', $params )
+               ) {
+                       $params['autocomplete-data-messages'] = $params['autocomplete-messages'];
+                       unset( $params['autocomplete-messages'] );
+               }
+
                parent::__construct( $params );
 
-               if ( array_key_exists( 'autocomplete-messages', $this->mParams ) ) {
-                       foreach ( $this->mParams['autocomplete-messages'] as $key => $value ) {
+               if ( array_key_exists( 'autocomplete-data-messages', $this->mParams ) ) {
+                       foreach ( $this->mParams['autocomplete-data-messages'] as $key => $value ) {
                                $key = $this->msg( $key )->plain();
-                               $this->autocomplete[$key] = strval( $value );
+                               $this->autocompleteData[$key] = strval( $value );
                        }
-               } elseif ( array_key_exists( 'autocomplete', $this->mParams ) ) {
-                       foreach ( $this->mParams['autocomplete'] as $key => $value ) {
-                               $this->autocomplete[$key] = strval( $value );
+               } elseif ( array_key_exists( 'autocomplete-data', $this->mParams ) ) {
+                       foreach ( $this->mParams['autocomplete-data'] as $key => $value ) {
+                               $this->autocompleteData[$key] = strval( $value );
                        }
                }
-               if ( !is_array( $this->autocomplete ) || !$this->autocomplete ) {
+               if ( !is_array( $this->autocompleteData ) || !$this->autocompleteData ) {
                        throw new MWException( 'HTMLAutoCompleteSelectField called without any autocompletions' );
                }
 
@@ -69,8 +89,8 @@ class HTMLAutoCompleteSelectField extends HTMLTextField {
 
                        if ( $val === 'other' ) {
                                $val = $request->getText( $this->mName );
-                               if ( isset( $this->autocomplete[$val] ) ) {
-                                       $val = $this->autocomplete[$val];
+                               if ( isset( $this->autocompleteData[$val] ) ) {
+                                       $val = $this->autocompleteData[$val];
                                }
                        }
 
@@ -87,11 +107,11 @@ class HTMLAutoCompleteSelectField extends HTMLTextField {
                        return $p;
                }
 
-               $validOptions = HTMLFormField::flattenOptions( $this->getOptions() );
+               $validOptions = HTMLFormField::flattenOptions( $this->getOptions() ?: [] );
 
                if ( in_array( strval( $value ), $validOptions, true ) ) {
                        return true;
-               } elseif ( in_array( strval( $value ), $this->autocomplete, true ) ) {
+               } elseif ( in_array( strval( $value ), $this->autocompleteData, true ) ) {
                        return true;
                } elseif ( $this->mParams['require-match'] ) {
                        return $this->msg( 'htmlform-select-badoption' )->parse();
@@ -104,7 +124,7 @@ class HTMLAutoCompleteSelectField extends HTMLTextField {
        public function getAttributes( array $list ) {
                $attribs = [
                        'type' => 'text',
-                       'data-autocomplete' => FormatJson::encode( array_keys( $this->autocomplete ) ),
+                       'data-autocomplete' => FormatJson::encode( array_keys( $this->autocompleteData ) ),
                ] + parent::getAttributes( $list );
 
                if ( $this->getOptions() ) {
@@ -152,7 +172,7 @@ class HTMLAutoCompleteSelectField extends HTMLTextField {
                if ( $valInSelect ) {
                        $value = '';
                } else {
-                       $key = array_search( strval( $value ), $this->autocomplete, true );
+                       $key = array_search( strval( $value ), $this->autocompleteData, true );
                        if ( $key !== false ) {
                                $value = $key;
                        }
index 88f5ec5..c3da746 100644 (file)
@@ -1,8 +1,19 @@
 <?php
 
+/**
+ * <input> field.
+ *
+ * Besides the parameters recognized by HTMLFormField, the following are
+ * recognized:
+ *   autocomplete - HTML autocomplete value (a boolean for on/off or a string according to
+ *     https://html.spec.whatwg.org/multipage/forms.html#autofill )
+ */
 class HTMLTextField extends HTMLFormField {
        protected $mPlaceholder = '';
 
+       /** @var bool HTML autocomplete attribute */
+       protected $autocomplete;
+
        /**
         * @param array $params
         *   - type: HTML textfield type
@@ -13,6 +24,10 @@ class HTMLTextField extends HTMLFormField {
         *     for password fields)
         */
        public function __construct( $params ) {
+               if ( isset( $params['autocomplete'] ) && is_bool( $params['autocomplete'] ) ) {
+                       $params['autocomplete'] = $params['autocomplete'] ? 'on' : 'off';
+               }
+
                parent::__construct( $params );
 
                if ( isset( $params['placeholder-message'] ) ) {
@@ -80,7 +95,8 @@ class HTMLTextField extends HTMLFormField {
                        'required',
                        'autofocus',
                        'multiple',
-                       'readonly'
+                       'readonly',
+                       'autocomplete',
                ];
 
                $attribs += $this->getAttributes( $allowedParams );
@@ -146,12 +162,24 @@ class HTMLTextField extends HTMLFormField {
                        'required',
                        'tabindex',
                        'type',
+                       'autocomplete',
                ];
 
                $attribs += OOUI\Element::configFromHtmlAttributes(
                        $this->getAttributes( $allowedParams )
                );
 
+               // FIXME T150983 downgrade autocomplete
+               if ( isset( $attribs['autocomplete'] ) ) {
+                       if ( $attribs['autocomplete'] === 'on' ) {
+                               $attribs['autocomplete'] = true;
+                       } elseif ( $attribs['autocomplete'] === 'off' ) {
+                               $attribs['autocomplete'] = false;
+                       } else {
+                               unset( $attribs['autocomplete'] );
+                       }
+               }
+
                $type = $this->getType( $attribs );
 
                return $this->getInputWidget( [
index 8142abd..6fb8927 100644 (file)
@@ -9,7 +9,8 @@
                        "Kuwaity26",
                        "محمد أحمد عبد الفتاح",
                        "Maroen1990",
-                       "Super ninja2"
+                       "Super ninja2",
+                       "Zpizza"
                ]
        },
        "config-desc": "مثبت لميدياويكي",
index cd9574c..c591f1e 100644 (file)
@@ -62,6 +62,7 @@
        "config-memory-bad": "<strong>Alvertencia:</strong>: el parámetru <code>memory_limit</code> de PHP ye $1.\nProbablemente sía demasiáu baxu.\n¡La instalación puede fallar!",
        "config-xcache": "[http://xcache.lighttpd.net/ XCache] ta instaláu",
        "config-apc": "[http://www.php.net/apc APC] ta instaláu",
+       "config-apcu": "[http://www.php.net/apcu APCu] ta instaláu",
        "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] ta instaláu",
        "config-no-cache-apcu": "<strong>Warning:</strong> Non pudo atopase[http://www.php.net/apcu APCu], [http://xcache.lighttpd.net/ XCache] o [http://www.iis.net/download/WinCacheForPhp WinCache].\nEl caxé d'oxetos nun ta activáu.",
        "config-mod-security": "<strong>Alvertencia:</strong> El to servidor web tien activáu [http://modsecurity.org/mod_security]/mod_security2 .Munches de les sos configuraciones comunes pueden causar problemes a MediaWiki o otru software que dexe a los usuarios publicar conteníu arbitrario. De ser posible, tendríes de desactivalo. Si non, consulta la  [http://modsecurity.org/documentation/ mod_security documentation] o contacta col alministrador del to servidor si atopes erros aleatorios.",
        "config-db-username": "Nome d'usuariu de base de datos:",
        "config-db-password": "Contraseña de base de datos:",
        "config-db-install-username": "Introduz un nome d'usuariu que s'usará pa coneutase cola base de datos nel procesu d'instalación. Esti nun ye'l nome d'usuariu de la cuenta MediaWiki, ye'l nome d'usuariu de la to base de datos.",
+       "config-db-install-password": "Escribe la contraseña que se va utilizar pa conectase a la base de datos mientres el procesu d'instalación.\nEsta nun ye la contraseña de la cuenta de MediaWiki, sinón la contraseña de la base de datos.",
+       "config-db-install-help": "Escribe'l nome d'usuariu y la contraseña que se van utilizar pa conectase a la base de datos mientres el procesu d'instalación.",
+       "config-db-account-lock": "Usar el mesmu nome d'usuariu y contraseña demientres la operación normal",
+       "config-db-wiki-account": "Cuenta d'usuariu pa operar normalmente",
+       "config-db-wiki-help": "Escribe'l nome d'usuariu y la contraseña que se van utilizar p'aportar a la base de datos mientres la operación normal de la wiki.\nSi esta cuenta nun esiste y la cuenta d'instalación tien permisos bastante, va crease esta cuenta d'usuariu colos mínimos permisos necesarios pa operar normalmente la wiki.",
+       "config-db-prefix": "Prefixu de tables de la base de datos:",
+       "config-db-prefix-help": "Si precises compartir una base de datos ente múltiples wikis, o ente MediaWiki y otra aplicación web, puedes optar por amestar un prefixu a tolos nomes de tabla pa evitar conflictos.\nNun utilices espacios.\n\nDe normal déxase esti campu vacío.",
        "config-type-mysql": "MySQL (o compatible)",
        "config-type-mssql": "Microsoft SQL Server",
        "config-invalid-db-type": "Triba non válida de base de datos.",
        "config-help": "Ayuda",
        "config-nofile": "Nun pudo atopase'l ficheru \"$1\". ¿Desaniciose?",
        "mainpagetext": "<strong>Instalóse MediaWiki.</strong>",
-       "mainpagedocfooter": "Consulta la [https://meta.wikimedia.org/wiki/Help:Contents Guía del usuariu] pa saber cómo usar el software wiki.\n\n== Primeros pasos ==\n\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Llista de les opciones de configuración]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ EMF de MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Llista de corréu de llanzamientos de MediaWiki]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Llocaliza MediaWiki na to llingua]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Depriende como combatir la puxarra na to wiki]"
+       "mainpagedocfooter": "Consulta [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents] pa saber cómo usar el software wiki.\n\n== Primeros pasos ==\n\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Llista de les opciones de configuración]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ EMF de MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Llista de corréu de llanzamientos de MediaWiki]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Llocaliza MediaWiki na to llingua]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Depriende como combatir la puxarra na to wiki]"
 }
index e9e22a9..2a09893 100644 (file)
@@ -19,7 +19,8 @@
                        "2nd-player",
                        "Otokoume",
                        "Rxy",
-                       "Foresttttttt"
+                       "Foresttttttt",
+                       "ネイ"
                ]
        },
        "config-desc": "MediaWiki のインストーラー",
        "config-subscribe": "[https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce リリース告知のメーリングリスト]を購読する。",
        "config-subscribe-help": "これは、リリースの告知 (重要なセキュリティに関する案内を含む) に使用される、流量が少ないメーリングリストです。\nこのメーリングリストを購読して、新しいバージョンが出た場合にMediaWikiを更新してください。",
        "config-subscribe-noemail": "メールアドレスなしでリリースアナウンスのメーリングリストを購読しようとしています。\nメーリングリストを購読する場合にはメールアドレスを入力してください。",
-       "config-pingback": "ã\81\93ã\81®ã\82¤ã\83³ã\82¹ã\83\88ã\83¼ã\83¬ã\83¼ã\82·ã\83§ã\83³ã\81«é\96¢ã\81\99ã\82\8bã\83\87ã\83¼ã\82¿ã\82\92ã\83¡ã\83\87ã\82¤ã\82¢ã\82¦ã\82£ã\82­ã\81®é\96\8bç\99ºè\80\85ã\81«ã\82·ã\82§ã\82¢ã\81\97ã\81¦ã\81\8fã\81 ã\81\95ã\81\84。",
+       "config-pingback": "ã\81\93ã\81®ã\82¤ã\83³ã\82¹ã\83\88ã\83¼ã\83«ã\81«é\96¢ã\81\99ã\82\8bã\83\87ã\83¼ã\82¿ã\82\92MediaWikiã\81®é\96\8bç\99ºè\80\85ã\81¨å\85±æ\9c\89ã\81\99ã\82\8b。",
        "config-pingback-help": "もし君がこのオプションを選択したら、メデイアウィキは定期的にhttps://www.mediawiki.orgとメデイアウィキのインスタンスに関する基本的のデータをピンします。このデータはシステムのタイプ、PHPのバージョンと選択されたデータベースのバックエンドなどを含んでいます。メデイアウィキファンデーションは将来の",
        "config-almost-done": "これでほぼ終わりました!\n残りの設定を飛ばして、ウィキを今すぐインストールできます。",
        "config-optional-continue": "私にもっと質問してください。",
        "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 拡張機能のマトリックス]で拡張機能すべてのリストをご覧になれます。",
        "mainpagetext": "<strong>MediaWiki はインストール済みです。</strong>",
-       "mainpagedocfooter": "ウィキソフトウェアの使い方に関する情報は[https://meta.wikimedia.org/wiki/Help:Contents 利用者案内]を参照してください。\n\n== はじめましょう ==\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings/ja 設定の一覧]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/ja MediaWiki よくある質問と回答]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki リリース情報メーリングリスト]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation/ja MediaWiki のあなたの言語へのローカライズ]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]"
+       "mainpagedocfooter": "ウィキソフトウェアの使い方に関する情報は[https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents 利用者案内]を参照してください。\n\n== はじめましょう ==\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings/ja 設定の一覧]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/ja MediaWiki よくある質問と回答]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki リリース情報メーリングリスト]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation/ja MediaWiki のあなたの言語へのローカライズ]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam あなたのウィキでスパムと戦う方法を学ぶ]"
 }
index 3f20c07..b68b9d8 100644 (file)
        "config-db-install-account": "Hesabê bikarhêner bo avakirinê",
        "config-db-username": "Navê bikarhêner bo danagehê:",
        "config-db-password": "Şîfreya danegehê:",
+       "config-type-mssql": "Microsoft SQL Server",
        "config-invalid-db-type": "Cureya danegehê ya nederbasdar",
+       "config-sqlite-readonly": "Dosyeya <code>$1</code> ne nivîsbar e.",
        "config-db-web-account": "Hesabê danegehê bô têgihiştina tora înternetê",
+       "config-mysql-innodb": "InnoDB",
        "config-mysql-myisam": "MyISAM",
        "config-mysql-utf8": "UTF-8",
        "config-site-name": "Navê wîkiyê:",
index a6b1508..1fcb1cb 100644 (file)
        "config-type-mssql": "Microsoft SQLServer",
        "config-support-info": "MediaWiki støtter følgende databasesystem:\n\n$1\n\nHvis du ikke ser databasesystemet du prøver å bruke i listen nedenfor, følg instruksjonene det er lenket til over for å aktivere støtte.",
        "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] er den prefererte databasen for MediaWiki og er derfor best støttet.  MediaWiki fungerer også med [{{int:version-db-mariadb-url}} MariaDB] og [{{int:version-db-percona-url}} Percona Server], som begge er MySQL-kompatible. ([http://www.php.net/manual/en/mysqli.installation.php Hvordan kompilere med PHP med MySQL-støtte])",
-       "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] er et populært åpen kildekode-databasesystem og et alternativ til MySQL. Det kan ha noen små utestående feil og det anbefales derfor ikke for bruk i et produksjonsmiljø. ([http://www.php.net/manual/en/pgsql.installation.php Hvordan kompilere PHP med PostgreSQL-støtte])",
+       "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] er et populært åpen kildekode-databasesystem og et alternativ til MySQL.  ([http://www.php.net/manual/en/pgsql.installation.php Hvordan kompilere PHP med PostgreSQL-støtte])",
        "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] er et lettvekts-databasesystem som har veldig god støtte. ([http://www.php.net/manual/en/pdo.installation.php Hvordan kompilere PHP med SQLite-støtte], bruker PDO)",
        "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] er en kommersiell database for bedrifter. ([http://www.php.net/manual/en/oci8.installation.php Hvordan kompilere PHP med OCI8-støtte])",
        "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQLServer] er en kommersiell enterprise-database for Windows. ([http://www.php.net/manual/en/sqlsrv.installation.php Hvordan kompilere PHP med SQLSRV-støtte])",
        "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.",
        "mainpagetext": "<strong>MediaWiki har blitt installert.</strong>",
-       "mainpagedocfooter": "Sjekk [https://meta.wikimedia.org/wiki/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]"
+       "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 0a77232..87a176c 100644 (file)
@@ -16,7 +16,8 @@
                        "Sjoerddebruin",
                        "Esketti",
                        "JaapDeKleine",
-                       "Macofe"
+                       "Macofe",
+                       "Hex"
                ]
        },
        "config-desc": "Het installatieprogramma voor MediaWiki",
        "config-type-mssql": "Microsoft SQL Server",
        "config-support-info": "MediaWiki ondersteunt de volgende databasesystemen:\n\n$1\n\nAls u het databasesysteem dat u wilt gebruiken niet in de lijst terugvindt, volg dan de handleiding waarnaar hierboven wordt verwezen om ondersteuning toe te voegen.",
        "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] is de primaire database voor MediaWiki en wordt het best ondersteund. MediaWiki werkt ook met [{{int:version-db-mariadb-url}} MariaDB] en [{{int:version-db-percona-url}} Percona Server], die MySQL compatibel zijn ([http://www.php.net/manual/en/mysqli.installation.php hoe PHP te compileren met MySQL-ondersteuning]).",
-       "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] is een populair open source databasesysteem als alternatief voor MySQL. Het is mogelijk dat er een aantal bekende kleinere problemen zijn met MediaWiki in combinatie met deze database en daarom wordt PostgreSQL niet aanbevolen voor een productieomgeving ([http://www.php.net/manual/en/pgsql.installation.php hoe PHP gecompileerd moet zijn met ondersteuning voor PostgreSQL]).",
+       "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] is een populair open source databasesysteem als alternatief voor MySQL.([http://www.php.net/manual/en/pgsql.installation.php Hoe u PHP kunt compileren met ondersteuning voor PostgreSQL])",
        "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] is een zeer goed ondersteund lichtgewicht databasesysteem ([http://www.php.net/manual/en/pdo.installation.php hoe PHP gecompileerd moet zijn met ondersteuning voor SQLite]; gebruikt PDO).",
        "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] is een commerciële database voor grote bedrijven ([http://www.php.net/manual/en/oci8.installation.php PHP compileren met ondersteuning voor OCI8]).",
        "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] is een commerciële enterprisedatabase voor Windows ([http://www.php.net/manual/en/sqlsrv.installation.php PHP compileren met ondersteuning voor SQLSRV]).",
        "config-cache-options": "Instellingen voor het cachen van objecten:",
        "config-cache-help": "Het cachen van objecten wordt gebruikt om de snelheid van MediaWiki te verbeteren door vaak gebruikte gegevens te bewaren.\nMiddelgrote tot grote websites wordt geadviseerd dit in te schakelen en ook kleine sites merken de voordelen.",
        "config-cache-none": "Niets cachen.\nEr gaat geen functionaliteit verloren, maar dit kan invloed hebben op de prestaties.",
-       "config-cache-accel": "Cachen van objecten via PHP (APC, XCache of WinCache)",
+       "config-cache-accel": "Cachen van objecten via PHP (APC, APCu, XCache of WinCache)",
        "config-cache-memcached": "Memcached gebruiken (dit vereist aanvullende instellingen)",
        "config-memcached-servers": "Memcachedservers:",
        "config-memcached-help": "Lijst met IP-adressen te gebruiken voor Memcached.\nEén IP-adres per regel met een poortnummer.\nBijvoorbeeld:\n 127.0.0.1:11211\n 192.168.1.25:1234",
index 18d77e3..f9a1fef 100644 (file)
        "config-db-host-oracle-help": "Introduza um [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Nome Local de Ligação] válido; tem de estar visível para esta instalação um ficheiro tnsnames.ora.<br />Se está a usar bibliotecas cliente versão 10g ou posterior, também pode usar o método [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Ligação Fácil] de atribuição do nome.",
        "config-db-wiki-settings": "Identifique esta wiki",
        "config-db-name": "Nome da base de dados:",
-       "config-db-name-help": "Escolha um nome para identificar a sua wiki.\nO nome não deve conter espaços.\n\nSe estiver a usar um servidor partilhado, o fornecedor do alojamento deve poder fornecer-lhe o nome de uma base de dados que possa usar, ou permite-lhe criar bases de dados através de um painel de controle.",
+       "config-db-name-help": "Escolha um nome para identificar a sua wiki.\nO nome não deve conter espaços.\n\nSe estiver a usar um servidor partilhado, o fornecedor do alojamento deve poder fornecer-lhe o nome de uma base de dados que possa usar, ou permite-lhe criar bases de dados através de um painel de controlo.",
        "config-db-name-oracle": "Esquema ''(schema)'' da base de dados:",
        "config-db-account-oracle-warn": "Há três cenários suportados na instalação do servidor de base de dados Oracle:\n\nSe pretende criar a conta de acesso pela internet na base de dados durante o processo de instalação, forneça como conta para a instalação uma conta com o papel de SYSDBA na base de dados e especifique as credenciais desejadas para a conta de acesso pela internet. Se não pretende criar a conta de acesso pela internet durante a instalação, pode criá-la manualmente e fornecer só essa conta para a instalação (se ela tiver as permissões necessárias para criar os objetos do esquema ''(schema)''). A terceira alternativa é fornecer duas contas diferentes; uma com privilégios de criação e outra com privilégios limitados para o acesso pela internet.\n\nExiste um script para criação de uma conta com os privilégios necessários no diretório \"maintenance/oracle/\" desta instalação. Mantenha em mente que usar uma conta com privilégios limitados impossibilita todas as operações de manutenção com a conta padrão.",
        "config-db-install-account": "Conta do utilizador para a instalação",
index bfd5ce6..5500097 100644 (file)
@@ -2,7 +2,8 @@
        "@metadata": {
                "authors": [
                        "Andrewboltachev",
-                       "AlnashPiyash2"
+                       "AlnashPiyash2",
+                       "Zpizza"
                ]
        },
        "config-title": "MediaWiki $1 пуктон",
@@ -18,5 +19,5 @@
        "config-page-copying": "Лицензия",
        "config-page-upgradedoc": "Выльдытон",
        "config-diff3-bad": "GNU diff3 шедьтэмын ӧвӧл.",
-       "mainpagetext": "'''MediaWiki движок азинлыко пуктэмын.'''"
+       "mainpagetext": "<strong>MediaWiki движок азинлыко пуктэмын.</strong>"
 }
index 6996ce5..d84c959 100644 (file)
  */
 class WinCacheBagOStuff extends BagOStuff {
        protected function doGet( $key, $flags = 0 ) {
-               $casToken = null;
-
-               return $this->getWithToken( $key, $casToken, $flags );
-       }
-
-       protected function getWithToken( $key, &$casToken, $flags = 0 ) {
                $val = wincache_ucache_get( $key );
-
-               $casToken = $val;
-
                if ( is_string( $val ) ) {
                        $val = unserialize( $val );
                }
@@ -54,10 +45,6 @@ class WinCacheBagOStuff extends BagOStuff {
                return ( is_array( $result ) && $result === [] ) || $result;
        }
 
-       protected function cas( $casToken, $key, $value, $exptime = 0 ) {
-               return wincache_ucache_cas( $key, $casToken, serialize( $value ) );
-       }
-
        public function delete( $key ) {
                wincache_ucache_delete( $key );
 
index c478550..74566cb 100644 (file)
@@ -205,7 +205,7 @@ class WikiFilePage extends WikiPage {
 
                /** @var LocalRepo $repo */
                $repo = $file->getRepo();
-               $dbr = $repo->getSlaveDB();
+               $dbr = $repo->getReplicaDB();
 
                $res = $dbr->select(
                        [ 'page', 'categorylinks' ],
index a5ac78f..56a22c5 100644 (file)
@@ -938,8 +938,8 @@ class WikiPage implements Page, IDBAccessObject {
                $dbw->startAtomic( __METHOD__ );
 
                if ( !$oldLatest || $oldLatest == $this->lockAndGetLatest() ) {
-                       $dbw->replace( 'redirect',
-                               [ 'rd_from' ],
+                       $dbw->upsert(
+                               'redirect',
                                [
                                        'rd_from' => $this->getId(),
                                        'rd_namespace' => $rt->getNamespace(),
@@ -947,6 +947,13 @@ class WikiPage implements Page, IDBAccessObject {
                                        'rd_fragment' => $rt->getFragment(),
                                        'rd_interwiki' => $rt->getInterwiki(),
                                ],
+                               [ 'rd_from' ],
+                               [
+                                       'rd_namespace' => $rt->getNamespace(),
+                                       'rd_title' => $rt->getDBkey(),
+                                       'rd_fragment' => $rt->getFragment(),
+                                       'rd_interwiki' => $rt->getInterwiki(),
+                               ],
                                __METHOD__
                        );
                }
@@ -1166,22 +1173,8 @@ class WikiPage implements Page, IDBAccessObject {
                }
 
                if ( $this->mTitle->getNamespace() == NS_MEDIAWIKI ) {
-                       // @todo move this logic to MessageCache
-                       if ( $this->exists() ) {
-                               // NOTE: use transclusion text for messages.
-                               //       This is consistent with  MessageCache::getMsgFromNamespace()
-
-                               $content = $this->getContent();
-                               $text = $content === null ? null : $content->getWikitextForTransclusion();
-
-                               if ( $text === null ) {
-                                       $text = false;
-                               }
-                       } else {
-                               $text = false;
-                       }
-
-                       MessageCache::singleton()->replace( $this->mTitle->getDBkey(), $text );
+                       $messageCache = MessageCache::singleton();
+                       $messageCache->updateMessageOverride( $this->mTitle, $this->getContent() );
                }
 
                return true;
@@ -2243,7 +2236,7 @@ class WikiPage implements Page, IDBAccessObject {
         *   - 'no-change': don't update the article count, ever
         */
        public function doEditUpdates( Revision $revision, User $user, array $options = [] ) {
-               global $wgRCWatchCategoryMembership, $wgContLang;
+               global $wgRCWatchCategoryMembership;
 
                $options += [
                        'changed' => true,
@@ -2381,17 +2374,7 @@ class WikiPage implements Page, IDBAccessObject {
                }
 
                if ( $this->mTitle->getNamespace() == NS_MEDIAWIKI ) {
-                       // XXX: could skip pseudo-messages like js/css here, based on content model.
-                       $msgtext = $content ? $content->getWikitextForTransclusion() : null;
-                       if ( $msgtext === false || $msgtext === null ) {
-                               $msgtext = '';
-                       }
-
-                       MessageCache::singleton()->replace( $shortTitle, $msgtext );
-
-                       if ( $wgContLang->hasVariants() ) {
-                               $wgContLang->updateConversionTable( $this->mTitle );
-                       }
+                       MessageCache::singleton()->updateMessageOverride( $this->mTitle, $content );
                }
 
                if ( $options['created'] ) {
@@ -3389,8 +3372,6 @@ class WikiPage implements Page, IDBAccessObject {
         * @param Title $title
         */
        public static function onArticleDelete( Title $title ) {
-               global $wgContLang;
-
                // Update existence markers on article/talk tabs...
                $other = $title->getOtherPage();
 
@@ -3407,11 +3388,7 @@ class WikiPage implements Page, IDBAccessObject {
 
                // Messages
                if ( $title->getNamespace() == NS_MEDIAWIKI ) {
-                       MessageCache::singleton()->replace( $title->getDBkey(), false );
-
-                       if ( $wgContLang->hasVariants() ) {
-                               $wgContLang->updateConversionTable( $title );
-                       }
+                       MessageCache::singleton()->updateMessageOverride( $title, null );
                }
 
                // Images
index 01cce02..4c82dda 100644 (file)
@@ -20,6 +20,7 @@
  * @file
  * @ingroup Parser
  */
+use MediaWiki\MediaWikiServices;
 
 /**
  * Various core parser functions, registered in Parser::firstCallInit()
@@ -346,10 +347,11 @@ class CoreParserFunctions {
 
                // check parameter, or use the ParserOptions if in interface message
                $user = User::newFromName( $username );
+               $genderCache = MediaWikiServices::getInstance()->getGenderCache();
                if ( $user ) {
-                       $gender = GenderCache::singleton()->getGenderOf( $user, __METHOD__ );
+                       $gender = $genderCache->getGenderOf( $user, __METHOD__ );
                } elseif ( $username === '' && $parser->getOptions()->getInterfaceMessage() ) {
-                       $gender = GenderCache::singleton()->getGenderOf( $parser->getOptions()->getUser(), __METHOD__ );
+                       $gender = $genderCache->getGenderOf( $parser->getOptions()->getUser(), __METHOD__ );
                }
                $ret = $parser->getFunctionLang()->gender( $gender, $forms );
                return $ret;
index c7db8a1..10dfd26 100644 (file)
@@ -3599,6 +3599,9 @@ class Parser {
                                $content = $rev->getContent();
                                $text = $content ? $content->getWikitextForTransclusion() : null;
 
+                               Hooks::run( 'ParserFetchTemplate',
+                                       [ $parser, $title, $rev, &$text, &$deps ] );
+
                                if ( $text === false || $text === null ) {
                                        $text = false;
                                        break;
index 7b3d9f9..0ea3c63 100644 (file)
@@ -41,20 +41,33 @@ class EncryptedPassword extends ParameterizedPassword {
        public function crypt( $password ) {
                $secret = $this->config['secrets'][$this->params['secret']];
 
+               // Clear error string
+               while ( openssl_error_string() !== false );
+
                if ( $this->hash ) {
-                       $underlyingPassword = $this->factory->newFromCiphertext( openssl_decrypt(
-                                       base64_decode( $this->hash ), $this->params['cipher'],
-                                       $secret, 0, base64_decode( $this->args[0] )
-                               ) );
+                       $decrypted = openssl_decrypt(
+                                       $this->hash, $this->params['cipher'],
+                                       $secret, 0, base64_decode( $this->args[0] ) );
+                       if ( $decrypted === false ) {
+                               throw new PasswordError( 'Error decrypting password: ' . openssl_error_string() );
+                       }
+                       $underlyingPassword = $this->factory->newFromCiphertext( $decrypted );
                } else {
                        $underlyingPassword = $this->factory->newFromType( $this->config['underlying'] );
                }
 
                $underlyingPassword->crypt( $password );
-               $iv = MWCryptRand::generate( openssl_cipher_iv_length( $this->params['cipher'] ), true );
+               if ( count( $this->args ) ) {
+                       $iv = base64_decode( $this->args[0] );
+               } else {
+                       $iv = MWCryptRand::generate( openssl_cipher_iv_length( $this->params['cipher'] ), true );
+               }
 
                $this->hash = openssl_encrypt(
                        $underlyingPassword->toString(), $this->params['cipher'], $secret, 0, $iv );
+               if ( $this->hash === false ) {
+                       throw new PasswordError( 'Error encrypting password: ' . openssl_error_string() );
+               }
                $this->args = [ base64_encode( $iv ) ];
        }
 
@@ -65,32 +78,42 @@ class EncryptedPassword extends ParameterizedPassword {
         * @return bool True if the password was updated
         */
        public function update() {
-               if ( count( $this->args ) != 2 || $this->params == $this->getDefaultParams() ) {
+               if ( count( $this->args ) != 1 || $this->params == $this->getDefaultParams() ) {
                        // Hash does not need updating
                        return false;
                }
 
+               // Clear error string
+               while ( openssl_error_string() !== false );
+
                // Decrypt the underlying hash
                $underlyingHash = openssl_decrypt(
-                       base64_decode( $this->args[1] ),
+                       $this->hash,
                        $this->params['cipher'],
                        $this->config['secrets'][$this->params['secret']],
                        0,
                        base64_decode( $this->args[0] )
                );
+               if ( $underlyingHash === false ) {
+                       throw new PasswordError( 'Error decrypting password: ' . openssl_error_string() );
+               }
 
                // Reset the params
                $this->params = $this->getDefaultParams();
 
                // Check the key size with the new params
                $iv = MWCryptRand::generate( openssl_cipher_iv_length( $this->params['cipher'] ), true );
-               $this->hash = base64_encode( openssl_encrypt(
+               $this->hash = openssl_encrypt(
                                $underlyingHash,
                                $this->params['cipher'],
                                $this->config['secrets'][$this->params['secret']],
                                0,
                                $iv
-                       ) );
+                       );
+               if ( $this->hash === false ) {
+                       throw new PasswordError( 'Error encrypting password: ' . openssl_error_string() );
+               }
+
                $this->args = [ base64_encode( $iv ) ];
 
                return true;
index 84675c1..c48b6e6 100644 (file)
@@ -36,9 +36,11 @@ class MWOldPassword extends ParameterizedPassword {
        }
 
        public function crypt( $plaintext ) {
-               global $wgPasswordSalt;
-
-               if ( $wgPasswordSalt && count( $this->args ) === 1 ) {
+               if ( count( $this->args ) === 1 ) {
+                       // Accept (but do not generate) salted passwords with :A: prefix.
+                       // These are actually B-type passwords, but an error in a previous
+                       // version of MediaWiki caused them to be written with an :A:
+                       // prefix.
                        $this->hash = md5( $this->args[0] . '-' . md5( $plaintext ) );
                } else {
                        $this->args = [];
index 26fbfa1..207f884 100644 (file)
@@ -26,6 +26,7 @@ class ExtensionProcessor implements Processor {
                'ExtensionEntryPointListFiles',
                'ExtensionFunctions',
                'FeedClasses',
+               'FileExtensions',
                'FilterLogTypes',
                'GrantPermissionGroups',
                'GrantPermissions',
@@ -42,6 +43,7 @@ class ExtensionProcessor implements Processor {
                'LogRestrictions',
                'LogTypes',
                'MediaHandlers',
+               'PasswordPolicy',
                'RateLimits',
                'RecentChangesFlags',
                'RemoveCredentialsBlacklist',
@@ -72,6 +74,7 @@ class ExtensionProcessor implements Processor {
                'wgNamespaceContentModels' => 'array_plus',
                'wgNamespaceProtection' => 'array_plus',
                'wgNamespacesWithSubpages' => 'array_plus',
+               'wgPasswordPolicy' => 'array_merge_recursive',
                'wgRateLimits' => 'array_plus_2d',
                'wgRevokePermissions' => 'array_plus_2d',
        ];
index 5729218..91e0b02 100644 (file)
@@ -130,26 +130,15 @@ class ResourceLoaderClientHtml {
                        'states' => [
                                // moduleName => state
                        ],
-                       'general' => [
-                               // position => [ moduleName ]
-                               'top' => [],
-                               'bottom' => [],
-                       ],
+                       'general' => [],
                        'styles' => [
                                // moduleName
                        ],
-                       'scripts' => [
-                               // position => [ moduleName ]
-                               'top' => [],
-                               'bottom' => [],
-                       ],
+                       'scripts' => [],
                        // Embedding for private modules
                        'embed' => [
                                'styles' => [],
-                               'general' => [
-                                       'top' => [],
-                                       'bottom' => [],
-                               ],
+                               'general' => [],
                        ],
 
                ];
@@ -161,16 +150,15 @@ class ResourceLoaderClientHtml {
                        }
 
                        $group = $module->getGroup();
-                       $position = $module->getPosition();
 
                        if ( $group === 'private' ) {
                                // Embed via mw.loader.implement per T36907.
-                               $data['embed']['general'][$position][] = $name;
+                               $data['embed']['general'][] = $name;
                                // Avoid duplicate request from mw.loader
                                $data['states'][$name] = 'loading';
                        } else {
                                // Load via mw.loader.load()
-                               $data['general'][$position][] = $name;
+                               $data['general'][] = $name;
                        }
                }
 
@@ -216,14 +204,13 @@ class ResourceLoaderClientHtml {
                        }
 
                        $group = $module->getGroup();
-                       $position = $module->getPosition();
                        $context = $this->getContext( $group, ResourceLoaderModule::TYPE_SCRIPTS );
                        if ( $module->isKnownEmpty( $context ) ) {
                                // Avoid needless request for empty module
                                $data['states'][$name] = 'ready';
                        } else {
                                // Load from load.php?only=scripts via <script src></script>
-                               $data['scripts'][$position][] = $name;
+                               $data['scripts'][] = $name;
 
                                // Avoid duplicate request from mw.loader
                                $data['states'][$name] = 'loading';
@@ -282,24 +269,24 @@ class ResourceLoaderClientHtml {
                }
 
                // Inline RLQ: Embedded modules
-               if ( $data['embed']['general']['top'] ) {
+               if ( $data['embed']['general'] ) {
                        $chunks[] = $this->getLoad(
-                               $data['embed']['general']['top'],
+                               $data['embed']['general'],
                                ResourceLoaderModule::TYPE_COMBINED
                        );
                }
 
                // Inline RLQ: Load general modules
-               if ( $data['general']['top'] ) {
+               if ( $data['general'] ) {
                        $chunks[] = ResourceLoader::makeInlineScript(
-                               Xml::encodeJsCall( 'mw.loader.load', [ $data['general']['top'] ] )
+                               Xml::encodeJsCall( 'mw.loader.load', [ $data['general'] ] )
                        );
                }
 
                // Inline RLQ: Load only=scripts
-               if ( $data['scripts']['top'] ) {
+               if ( $data['scripts'] ) {
                        $chunks[] = $this->getLoad(
-                               $data['scripts']['top'],
+                               $data['scripts'],
                                ResourceLoaderModule::TYPE_SCRIPTS
                        );
                }
@@ -336,33 +323,7 @@ class ResourceLoaderClientHtml {
         * @return string|WrappedStringList HTML
         */
        public function getBodyHtml() {
-               $data = $this->getData();
-               $chunks = [];
-
-               // Inline RLQ: Embedded modules
-               if ( $data['embed']['general']['bottom'] ) {
-                       $chunks[] = $this->getLoad(
-                               $data['embed']['general']['bottom'],
-                               ResourceLoaderModule::TYPE_COMBINED
-                       );
-               }
-
-               // Inline RLQ: Load only=scripts
-               if ( $data['scripts']['bottom'] ) {
-                       $chunks[] = $this->getLoad(
-                               $data['scripts']['bottom'],
-                               ResourceLoaderModule::TYPE_SCRIPTS
-                       );
-               }
-
-               // Inline RLQ: Load general modules
-               if ( $data['general']['bottom'] ) {
-                       $chunks[] = ResourceLoader::makeInlineScript(
-                               Xml::encodeJsCall( 'mw.loader.load', [ $data['general']['bottom'] ] )
-                       );
-               }
-
-               return WrappedStringList::join( "\n", $chunks );
+               return '';
        }
 
        private function getContext( $group, $type ) {
index 07649e3..725bc6a 100644 (file)
@@ -117,9 +117,6 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
        /** @var string Name of group to load this module in */
        protected $group;
 
-       /** @var string Position on the page to load this module at */
-       protected $position = 'bottom';
-
        /** @var bool Link to raw files in debug mode */
        protected $debugRaw = true;
 
@@ -204,8 +201,6 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
         *         'messages' => [array of message key strings],
         *         // Group which this module should be loaded together with
         *         'group' => [group name string],
-        *         // Position on the page to load this module at
-        *         'position' => ['bottom' (default) or 'top']
         *         // Function that, if it returns true, makes the loader skip this module.
         *         // The file must contain valid JavaScript for execution in a private function.
         *         // The file must not contain the "function () {" and "}" wrapper though.
@@ -272,7 +267,6 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
                                        $this->{$member} = $option;
                                        break;
                                // Single strings
-                               case 'position':
                                case 'group':
                                case 'skipFunction':
                                        $this->{$member} = (string)$option;
@@ -445,13 +439,6 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
                return $this->group;
        }
 
-       /**
-        * @return string
-        */
-       public function getPosition() {
-               return $this->position;
-       }
-
        /**
         * Gets list of names of modules this module depends on.
         * @param ResourceLoaderContext|null $context
@@ -573,7 +560,6 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
                        // - dependencies (provided via startup module)
                        // - targets
                        // - group (provided via startup module)
-                       // - position (only used by OutputPage)
                        'scripts',
                        'debugScripts',
                        'styles',
index 6a8957e..ff1b7b1 100644 (file)
@@ -45,9 +45,6 @@ class ResourceLoaderImageModule extends ResourceLoaderModule {
        protected $selectorWithVariant = '.{prefix}-{name}-{variant}';
        protected $targets = [ 'desktop', 'mobile' ];
 
-       /** @var string Position on the page to load this module at */
-       protected $position = 'bottom';
-
        /**
         * Constructs a new module from an options array.
         *
@@ -183,7 +180,6 @@ class ResourceLoaderImageModule extends ResourceLoaderModule {
                                        $this->{$member} = $option;
                                        break;
 
-                               case 'position':
                                case 'prefix':
                                case 'selectorWithoutVariant':
                                case 'selectorWithVariant':
@@ -448,14 +444,6 @@ class ResourceLoaderImageModule extends ResourceLoaderModule {
                return $localBasePath;
        }
 
-       /**
-        * @return string
-        */
-       public function getPosition() {
-               $this->loadFromDefinition();
-               return $this->position;
-       }
-
        /**
         * @return string
         */
index 796c575..4456517 100644 (file)
@@ -330,14 +330,13 @@ abstract class ResourceLoaderModule implements LoggerAwareInterface {
        }
 
        /**
-        * Where on the HTML page should this module's JS be loaded?
-        *  - 'top': in the "<head>"
-        *  - 'bottom': at the bottom of the "<body>"
+        * From where in the page HTML should this module be loaded?
         *
+        * @deprecated since 1.29 Obsolete. All modules load async from `<head>`.
         * @return string
         */
        public function getPosition() {
-               return 'bottom';
+               return 'top';
        }
 
        /**
index c1b47bf..b3b3f16 100644 (file)
@@ -64,13 +64,6 @@ class ResourceLoaderUserOptionsModule extends ResourceLoaderModule {
                return false;
        }
 
-       /**
-        * @return string
-        */
-       public function getPosition() {
-               return 'top';
-       }
-
        /**
         * @return string
         */
index c8a0ff1..cea1f39 100644 (file)
@@ -74,13 +74,6 @@ class ResourceLoaderUserTokensModule extends ResourceLoaderModule {
                return false;
        }
 
-       /**
-        * @return string
-        */
-       public function getPosition() {
-               return 'top';
-       }
-
        /**
         * @return string
         */
index ccb336f..14d6e05 100644 (file)
@@ -36,7 +36,6 @@
  * Safe for calls on local wikis are:
  * - Option getters:
  *   - getGroup()
- *   - getPosition()
  *   - getPages()
  * - Basic methods that strictly involve the foreign database
  *   - getDB()
@@ -44,8 +43,6 @@
  *   - getTitleInfo()
  */
 class ResourceLoaderWikiModule extends ResourceLoaderModule {
-       /** @var string Position on the page to load this module at */
-       protected $position = 'bottom';
 
        // Origin defaults to users with sitewide authority
        protected $origin = self::ORIGIN_USER_SITEWIDE;
@@ -72,7 +69,6 @@ class ResourceLoaderWikiModule extends ResourceLoaderModule {
 
                foreach ( $options as $member => $option ) {
                        switch ( $member ) {
-                               case 'position':
                                case 'styles':
                                case 'scripts':
                                case 'group':
@@ -435,13 +431,6 @@ class ResourceLoaderWikiModule extends ResourceLoaderModule {
                }
        }
 
-       /**
-        * @return string
-        */
-       public function getPosition() {
-               return $this->position;
-       }
-
        /**
         * @since 1.28
         * @return string
index b60aa10..96812ea 100644 (file)
@@ -217,6 +217,17 @@ abstract class Skin extends ContextSource {
                        }
                }
 
+               // Footer links (used by SkinTemplate::prepareQuickTemplate)
+               foreach ( [
+                       $this->footerLinkTitle( 'privacy', 'privacypage' ),
+                       $this->footerLinkTitle( 'aboutsite', 'aboutpage' ),
+                       $this->footerLinkTitle( 'disclaimers', 'disclaimerpage' ),
+               ] as $title ) {
+                       if ( $title ) {
+                               $titles[] = $title;
+                       }
+               }
+
                Hooks::run( 'SkinPreloadExistence', [ &$titles, $this ] );
 
                if ( $titles ) {
@@ -921,25 +932,34 @@ abstract class Skin extends ContextSource {
         * @return string HTML anchor
         */
        public function footerLink( $desc, $page ) {
-               // if the link description has been set to "-" in the default language,
-               if ( $this->msg( $desc )->inContentLanguage()->isDisabled() ) {
-                       // then it is disabled, for all languages.
+               $title = $this->footerLinkTitle( $desc, $page );
+               if ( !$title ) {
                        return '';
-               } else {
-                       // Otherwise, we display the link for the user, described in their
-                       // language (which may or may not be the same as the default language),
-                       // but we make the link target be the one site-wide page.
-                       $title = Title::newFromText( $this->msg( $page )->inContentLanguage()->text() );
+               }
 
-                       if ( !$title ) {
-                               return '';
-                       }
+               return Linker::linkKnown(
+                       $title,
+                       $this->msg( $desc )->escaped()
+               );
+       }
 
-                       return Linker::linkKnown(
-                               $title,
-                               $this->msg( $desc )->escaped()
-                       );
+       /**
+        * @param string $desc
+        * @param string $page
+        * @return Title|null
+        */
+       private function footerLinkTitle( $desc, $page ) {
+               // If the link description has been set to "-" in the default language,
+               if ( $this->msg( $desc )->inContentLanguage()->isDisabled() ) {
+                       // then it is disabled, for all languages.
+                       return null;
                }
+               // Otherwise, we display the link for the user, described in their
+               // language (which may or may not be the same as the default language),
+               // but we make the link target be the one site-wide page.
+               $title = Title::newFromText( $this->msg( $page )->inContentLanguage()->text() );
+
+               return $title ?: null;
        }
 
        /**
index 531c330..7e29be0 100644 (file)
@@ -52,6 +52,10 @@ class SpecialActiveUsers extends SpecialPage {
 
                $opts->add( 'username', '' );
                $opts->add( 'groups', [] );
+               $opts->add( 'excludegroups', [] );
+               // Backwards-compatibility with old URLs
+               $opts->add( 'hidebots', false, FormOptions::BOOL );
+               $opts->add( 'hidesysops', false, FormOptions::BOOL );
 
                $opts->fetchValuesFromRequest( $this->getRequest() );
 
@@ -86,13 +90,22 @@ class SpecialActiveUsers extends SpecialPage {
                        $options[$msg] = $group;
                }
 
+               // Backwards-compatibility with old URLs
+               $req = $this->getRequest();
+               $excludeDefault = [];
+               if ( $req->getCheck( 'hidebots' ) ) {
+                       $excludeDefault[] = 'bot';
+               }
+               if ( $req->getCheck( 'hidesysops' ) ) {
+                       $excludeDefault[] = 'sysop';
+               }
+
                $formDescriptor = [
                        'username' => [
                                'type' => 'user',
                                'name' => 'username',
                                'label-message' => 'activeusers-from',
                        ],
-
                        'groups' => [
                                'type' => 'multiselect',
                                'dropdown' => true,
@@ -101,6 +114,15 @@ class SpecialActiveUsers extends SpecialPage {
                                'label-message' => 'activeusers-groups',
                                'options' => $options,
                        ],
+                       'excludegroups' => [
+                               'type' => 'multiselect',
+                               'dropdown' => true,
+                               'flatlist' => true,
+                               'name' => 'excludegroups',
+                               'label-message' => 'activeusers-excludegroups',
+                               'options' => $options,
+                               'default' => $excludeDefault,
+                       ],
                ];
 
                HTMLForm::factory( 'ooui', $formDescriptor, $this->getContext() )
index 82abccf..a4f16bd 100644 (file)
@@ -100,14 +100,6 @@ class SpecialPasswordReset extends FormSpecialPage {
                        ];
                }
 
-               if ( $this->getUser()->isAllowed( 'passwordreset' ) ) {
-                       $a['Capture'] = [
-                               'type' => 'check',
-                               'label-message' => 'passwordreset-capture',
-                               'help-message' => 'passwordreset-capture-help',
-                       ];
-               }
-
                return $a;
        }
 
@@ -144,22 +136,12 @@ class SpecialPasswordReset extends FormSpecialPage {
         * @return Status
         */
        public function onSubmit( array $data ) {
-               if ( isset( $data['Capture'] ) && !$this->getUser()->isAllowed( 'passwordreset' ) ) {
-                       // The user knows they don't have the passwordreset permission,
-                       // but they tried to spoof the form. That's naughty
-                       throw new PermissionsError( 'passwordreset' );
-               }
-
                $username = isset( $data['Username'] ) ? $data['Username'] : null;
                $email = isset( $data['Email'] ) ? $data['Email'] : null;
-               $capture = !empty( $data['Capture'] );
 
                $this->method = $username ? 'username' : 'email';
                $this->result = Status::wrap(
-                       $this->getPasswordReset()->execute( $this->getUser(), $username, $email, $capture ) );
-               if ( $capture && $this->result->isOK() ) {
-                       $this->passwords = $this->result->getValue();
-               }
+                       $this->getPasswordReset()->execute( $this->getUser(), $username, $email ) );
 
                if ( $this->result->hasMessage( 'actionthrottledtext' ) ) {
                        throw new ThrottledError;
@@ -169,28 +151,6 @@ class SpecialPasswordReset extends FormSpecialPage {
        }
 
        public function onSuccess() {
-               if ( $this->getUser()->isAllowed( 'passwordreset' ) && $this->passwords ) {
-                       // @todo Logging
-
-                       if ( $this->result->isGood() ) {
-                               $this->getOutput()->addWikiMsg( 'passwordreset-emailsent-capture2',
-                                       count( $this->passwords ) );
-                       } else {
-                               $this->getOutput()->addWikiMsg( 'passwordreset-emailerror-capture2',
-                                       $this->result->getMessage(), key( $this->passwords ), count( $this->passwords ) );
-                       }
-
-                       $this->getOutput()->addHTML( Html::openElement( 'ul' ) );
-                       foreach ( $this->passwords as $username => $pwd ) {
-                               $this->getOutput()->addHTML( Html::rawElement( 'li', [],
-                                       htmlspecialchars( $username, ENT_QUOTES )
-                                       . $this->msg( 'colon-separator' )->text()
-                                       . htmlspecialchars( $pwd, ENT_QUOTES )
-                               ) );
-                       }
-                       $this->getOutput()->addHTML( Html::closeElement( 'ul' ) );
-               }
-
                if ( $this->method === 'email' ) {
                        $this->getOutput()->addWikiMsg( 'passwordreset-emailsentemail' );
                } else {
index 3b502f8..4c6a345 100644 (file)
@@ -87,6 +87,8 @@ class SpecialTrackingCategories extends SpecialPage {
                }
                $batch->execute();
 
+               Hooks::run( 'SpecialTrackingCategories::preprocess', [ $this, $trackingCategories ] );
+
                foreach ( $trackingCategories as $catMsg => $data ) {
                        $allMsgs = [];
                        $catDesc = $catMsg . '-desc';
@@ -97,11 +99,15 @@ class SpecialTrackingCategories extends SpecialPage {
                        );
 
                        foreach ( $data['cats'] as $catTitle ) {
-                               $catTitleText = Linker::link(
+                               $html = Linker::link(
                                        $catTitle,
                                        htmlspecialchars( $catTitle->getText() )
                                );
-                               $allMsgs[] = $catTitleText;
+
+                               Hooks::run( 'SpecialTrackingCategories::generateCatLink',
+                                       [ $this, $catTitle, &$html ] );
+
+                               $allMsgs[] = $html;
                        }
 
                        # Extra message, when no category was found
index ea906b7..645a115 100644 (file)
@@ -64,6 +64,14 @@ class ActiveUsersPager extends UsersPager {
                }
 
                $this->groups = $opts->getValue( 'groups' );
+               $this->excludegroups = $opts->getValue( 'excludegroups' );
+               // Backwards-compatibility with old URLs
+               if ( $opts->getValue( 'hidebots' ) ) {
+                       $this->excludegroups[] = 'bot';
+               }
+               if ( $opts->getValue( 'hidesysops' ) ) {
+                       $this->excludegroups[] = 'sysop';
+               }
        }
 
        function getIndexField() {
@@ -94,6 +102,13 @@ class ActiveUsersPager extends UsersPager {
                        $conds[] = 'ug_user = user_id';
                        $conds['ug_group'] = $this->groups;
                }
+               if ( $this->excludegroups !== [] ) {
+                       foreach ( $this->excludegroups as $group ) {
+                               $conds[] = 'NOT EXISTS (' . $dbr->selectSQLText(
+                                               'user_groups', '1', [ 'ug_user = user_id', 'ug_group' => $group ]
+                                       ) . ')';
+                       }
+               }
                if ( !$this->getUser()->isAllowed( 'hideuser' ) ) {
                        $conds[] = 'NOT EXISTS (' . $dbr->selectSQLText(
                                        'ipblocks', '1', [ 'ipb_user=user_id', 'ipb_deleted' => 1 ]
index b7160b3..48477f8 100644 (file)
@@ -432,7 +432,7 @@ class UploadStash {
                                . ' No user is logged in, files must belong to users' );
                }
 
-               $dbr = $this->repo->getSlaveDB();
+               $dbr = $this->repo->getReplicaDB();
                $res = $dbr->select(
                        'uploadstash',
                        'us_key',
@@ -511,7 +511,7 @@ class UploadStash {
                        // sometimes reading from the master is necessary, if there's replication lag.
                        $dbr = $this->repo->getMasterDB();
                } else {
-                       $dbr = $this->repo->getSlaveDB();
+                       $dbr = $this->repo->getReplicaDB();
                }
 
                $row = $dbr->selectRow(
index 889ec92..c1aef22 100644 (file)
@@ -22,6 +22,9 @@
 
 use MediaWiki\Auth\AuthManager;
 use MediaWiki\Auth\TemporaryPasswordAuthenticationRequest;
+use Psr\Log\LoggerAwareInterface;
+use Psr\Log\LoggerInterface;
+use MediaWiki\Logger\LoggerFactory;
 
 /**
  * Helper class for the password reset functionality shared by the web UI and the API.
@@ -30,16 +33,19 @@ use MediaWiki\Auth\TemporaryPasswordAuthenticationRequest;
  * EmailNotificationSecondaryAuthenticationProvider (or something providing equivalent
  * functionality) to be enabled.
  */
-class PasswordReset {
+class PasswordReset implements LoggerAwareInterface {
        /** @var Config */
        protected $config;
 
        /** @var AuthManager */
        protected $authManager;
 
+       /** @var LoggerInterface */
+       protected $logger;
+
        /**
-        * In-process cache for isAllowed lookups, by username. Contains pairs of StatusValue objects
-        * (for false and true value of $displayPassword, respectively).
+        * In-process cache for isAllowed lookups, by username.
+        * Contains a StatusValue object
         * @var HashBagOStuff
         */
        private $permissionCache;
@@ -48,6 +54,17 @@ class PasswordReset {
                $this->config = $config;
                $this->authManager = $authManager;
                $this->permissionCache = new HashBagOStuff( [ 'maxKeys' => 1 ] );
+               $this->logger = LoggerFactory::getInstance( 'authentication' );
+       }
+
+       /**
+        * Set the logger instance to use.
+        *
+        * @param LoggerInterface $logger
+        * @since 1.29
+        */
+       public function setLogger( LoggerInterface $logger ) {
+               $this->logger = $logger;
        }
 
        /**
@@ -55,13 +72,12 @@ class PasswordReset {
         * @param User $user
         * @param bool $displayPassword If set, also check whether the user is allowed to reset the
         *   password of another user and see the temporary password.
+        * @since 1.29 Second argument for displayPassword removed.
         * @return StatusValue
         */
-       public function isAllowed( User $user, $displayPassword = false ) {
-               $statuses = $this->permissionCache->get( $user->getName() );
-               if ( $statuses ) {
-                       list ( $status, $status2 ) = $statuses;
-               } else {
+       public function isAllowed( User $user ) {
+               $status = $this->permissionCache->get( $user->getName() );
+               if ( !$status ) {
                        $resetRoutes = $this->config->get( 'PasswordResetRoutes' );
                        $status = StatusValue::newGood();
 
@@ -90,19 +106,10 @@ class PasswordReset {
                                $status = StatusValue::newFatal( 'blocked-mailpassword' );
                        }
 
-                       $status2 = StatusValue::newGood();
-                       if ( !$user->isAllowed( 'passwordreset' ) ) {
-                               $status2 = StatusValue::newFatal( 'badaccess' );
-                       }
-
-                       $this->permissionCache->set( $user->getName(), [ $status, $status2 ] );
+                       $this->permissionCache->set( $user->getName(), $status );
                }
 
-               if ( !$displayPassword || !$status->isGood() ) {
-                       return $status;
-               } else {
-                       return $status2;
-               }
+               return $status;
        }
 
        /**
@@ -111,22 +118,22 @@ class PasswordReset {
         * Process the form.  At this point we know that the user passes all the criteria in
         * userCanExecute(), and if the data array contains 'Username', etc, then Username
         * resets are allowed.
+        *
+        * @since 1.29 Fourth argument for displayPassword removed.
         * @param User $performingUser The user that does the password reset
         * @param string $username The user whose password is reset
         * @param string $email Alternative way to specify the user
-        * @param bool $displayPassword Whether to display the password
         * @return StatusValue Will contain the passwords as a username => password array if the
         *   $displayPassword flag was set
         * @throws LogicException When the user is not allowed to perform the action
         * @throws MWException On unexpected DB errors
         */
        public function execute(
-               User $performingUser, $username = null, $email = null, $displayPassword = false
+               User $performingUser, $username = null, $email = null
        ) {
-               if ( !$this->isAllowed( $performingUser, $displayPassword )->isGood() ) {
-                       $action = $this->isAllowed( $performingUser )->isGood() ? 'display' : 'reset';
+               if ( !$this->isAllowed( $performingUser )->isGood() ) {
                        throw new LogicException( 'User ' . $performingUser->getName()
-                               . ' is not allowed to ' . $action . ' passwords' );
+                               . ' is not allowed to reset passwords' );
                }
 
                $resetRoutes = $this->config->get( 'PasswordResetRoutes' )
@@ -134,12 +141,14 @@ class PasswordReset {
                if ( $resetRoutes['username'] && $username ) {
                        $method = 'username';
                        $users = [ User::newFromName( $username ) ];
+                       $email = null;
                } elseif ( $resetRoutes['email'] && $email ) {
                        if ( !Sanitizer::validateEmail( $email ) ) {
                                return StatusValue::newFatal( 'passwordreset-invalidemail' );
                        }
                        $method = 'email';
                        $users = $this->getUsersByEmail( $email );
+                       $username = null;
                } else {
                        // The user didn't supply any data
                        return StatusValue::newFatal( 'passwordreset-nodata' );
@@ -150,7 +159,6 @@ class PasswordReset {
                $data = [
                        'Username' => $username,
                        'Email' => $email,
-                       'Capture' => $displayPassword ? '1' : null,
                ];
                if ( !Hooks::run( 'SpecialPasswordResetOnSubmit', [ &$users, $data, &$error ] ) ) {
                        return StatusValue::newFatal( Message::newFromSpecifier( $error ) );
@@ -199,7 +207,6 @@ class PasswordReset {
                        $req = TemporaryPasswordAuthenticationRequest::newRandom();
                        $req->username = $user->getName();
                        $req->mailpassword = true;
-                       $req->hasBackchannel = $displayPassword;
                        $req->caller = $performingUser->getName();
                        $status = $this->authManager->allowsAuthenticationDataChange( $req, true );
                        if ( $status->isGood() && $status->getValue() !== 'ignored' ) {
@@ -214,19 +221,32 @@ class PasswordReset {
                        }
                }
 
+               $logContext = [
+                       'requestingIp' => $ip,
+                       'requestingUser' => $performingUser->getName(),
+                       'targetUsername' => $username,
+                       'targetEmail' => $email,
+                       'actualUser' => $firstUser->getName(),
+               ];
+
                if ( !$result->isGood() ) {
+                       $this->logger->info(
+                               "{requestingUser} attempted password reset of {actualUser} but failed",
+                               $logContext + [ 'errors' => $result->getErrors() ]
+                       );
                        return $result;
                }
 
                $passwords = [];
                foreach ( $reqs as $req ) {
                        $this->authManager->changeAuthenticationData( $req );
-                       // TODO record mail sending errors
-                       if ( $displayPassword ) {
-                               $passwords[$req->username] = $req->password;
-                       }
                }
 
+               $this->logger->info(
+                       "{requestingUser} did password reset of {actualUser}",
+                       $logContext
+               );
+
                return StatusValue::newGood( $passwords );
        }
 
index 273d555..789c55c 100644 (file)
@@ -166,7 +166,6 @@ class User implements IDBAccessObject {
                'noratelimit',
                'override-export-depth',
                'pagelang',
-               'passwordreset',
                'patrol',
                'patrolmarks',
                'protect',
@@ -301,6 +300,11 @@ class User implements IDBAccessObject {
        /** @var integer User::READ_* constant bitfield used to load data */
        protected $queryFlagsUsed = self::READ_NORMAL;
 
+       /** @var string Indicates type of block (used for eventlogging)
+        * Permitted values: 'cookie-block', 'proxy-block', 'openproxy-block', 'xff-block'
+        */
+       public $blockTrigger = false;
+
        public static $idCacheByName = [];
 
        /**
@@ -1200,13 +1204,29 @@ class User implements IDBAccessObject {
                $user = $session->getUser();
                if ( $user->isLoggedIn() ) {
                        $this->loadFromUserObject( $user );
+
+                       // If this user is autoblocked, set a cookie to track the Block. This has to be done on
+                       // every session load, because an autoblocked editor might not edit again from the same
+                       // IP address after being blocked.
+                       $config = RequestContext::getMain()->getConfig();
+                       if ( $config->get( 'CookieSetOnAutoblock' ) === true ) {
+                               $block = $this->getBlock();
+                               $shouldSetCookie = $this->getRequest()->getCookie( 'BlockID' ) === null
+                                       && $block
+                                       && $block->getType() === Block::TYPE_USER
+                                       && $block->isAutoblocking();
+                               if ( $shouldSetCookie ) {
+                                       wfDebug( __METHOD__ . ': User is autoblocked, setting cookie to track' );
+                                       $block->setCookie( $this->getRequest()->response() );
+                               }
+                       }
+
                        // Other code expects these to be set in the session, so set them.
                        $session->set( 'wsUserID', $this->getId() );
                        $session->set( 'wsUserName', $this->getName() );
                        $session->set( 'wsToken', $this->getToken() );
                        return true;
                }
-
                return false;
        }
 
@@ -1609,6 +1629,31 @@ class User implements IDBAccessObject {
                // User/IP blocking
                $block = Block::newFromTarget( $this, $ip, !$bFromSlave );
 
+               // If no block has been found, check for a cookie indicating that the user is blocked.
+               $blockCookieVal = (int)$this->getRequest()->getCookie( 'BlockID' );
+               if ( !$block instanceof Block && $blockCookieVal > 0 ) {
+                       // Load the Block from the ID in the cookie.
+                       $tmpBlock = Block::newFromID( $blockCookieVal );
+                       if ( $tmpBlock instanceof Block ) {
+                               // Check the validity of the block.
+                               $blockIsValid = $tmpBlock->getType() == Block::TYPE_USER
+                                       && !$tmpBlock->isExpired()
+                                       && $tmpBlock->isAutoblocking();
+                               $config = RequestContext::getMain()->getConfig();
+                               $useBlockCookie = ( $config->get( 'CookieSetOnAutoblock' ) === true );
+                               if ( $blockIsValid && $useBlockCookie ) {
+                                       // Use the block.
+                                       $block = $tmpBlock;
+                                       $this->blockTrigger = 'cookie-block';
+                               } else {
+                                       // If the block is not valid, clear the block cookie (but don't delete it,
+                                       // because it needs to be cleared from LocalStorage as well and an empty string
+                                       // value is checked for in the mediawiki.user.blockcookie module).
+                                       $block->setCookie( $this->getRequest()->response(), true );
+                               }
+                       }
+               }
+
                // Proxy blocking
                if ( !$block instanceof Block && $ip !== null && !in_array( $ip, $wgProxyWhitelist ) ) {
                        // Local list
@@ -1617,11 +1662,13 @@ class User implements IDBAccessObject {
                                $block->setBlocker( wfMessage( 'proxyblocker' )->text() );
                                $block->mReason = wfMessage( 'proxyblockreason' )->text();
                                $block->setTarget( $ip );
+                               $this->blockTrigger = 'proxy-block';
                        } elseif ( $this->isAnon() && $this->isDnsBlacklisted( $ip ) ) {
                                $block = new Block;
                                $block->setBlocker( wfMessage( 'sorbs' )->text() );
                                $block->mReason = wfMessage( 'sorbsreason' )->text();
                                $block->setTarget( $ip );
+                               $this->blockTrigger = 'openproxy-block';
                        }
                }
 
@@ -1640,6 +1687,7 @@ class User implements IDBAccessObject {
                                # Mangle the reason to alert the user that the block
                                # originated from matching the X-Forwarded-For header.
                                $block->mReason = wfMessage( 'xffblockreason', $block->mReason )->text();
+                               $this->blockTrigger = 'xff-block';
                        }
                }
 
@@ -1654,6 +1702,7 @@ class User implements IDBAccessObject {
                        $this->mBlockedby = '';
                        $this->mHideName = 0;
                        $this->mAllowUsertalk = false;
+                       $this->blockTrigger = false;
                }
 
                // Extensions
index 5b18365..228c5c4 100644 (file)
@@ -9,6 +9,7 @@
        "--warnings-exit-nonzero": true,
        "--external": "Blob,File,HTMLDocument,HTMLElement,HTMLIframeElement,HTMLInputElement,KeyboardEvent,MouseEvent,Node,Window,XMLDocument",
        "--output": "docs/js",
+       "--exclude": "resources/src/mediawiki/mediawiki.Title.phpCharToUpper.js",
        "--": [
                "maintenance/jsduck/external.js",
                "resources/src/mediawiki",
index 5ad5bd3..4f0b535 100644 (file)
        "activeusers-intro": "Nyoë nakeuh dapeuta ureuëng ngui nyang na geuteumuléh lam $1 {{PLURAL:$1|uroë}} nyoë.",
        "activeusers-count": "$1 {{PLURAL:$1|buet}} lam {{PLURAL:$3|uroë|$3 uroë}} nyoë",
        "activeusers-from": "Peuleumah ureueng ngui nyang neuawai ngön:",
-       "activeusers-hidebots": "Peusom bot",
-       "activeusers-hidesysops": "Peusom ureueng urôh",
        "activeusers-noresult": "Hana ureueng ngui nyang meutumèe.",
        "listgrouprights": "Dapeuta khut ureueng ngui",
        "listgrouprights-key": "Teuneurang:\n* <span class=\"listgrouprights-granted\">Khut nyang geubri</span>\n* <span class=\"listgrouprights-revoked\">Khut nyang hana geubri</span>",
index eb15a0e..a5c7dd0 100644 (file)
        "passwordreset-emailtitle": "Аккаунт и гъэпсыкIэхэр, мий щыI {{SITENAME}}",
        "passwordreset-emailelement": "НэбгырацIэ: \n$1\n\nTemporary password: \n$2",
        "passwordreset-emailsentemail": "Мыр регистрыгъэ емэйлэу щытмэ уи аккаунтым пае, шъэфгущыIэм и зэтедз емэйл къыпфагъэхьыщт.",
-       "passwordreset-emailsent-capture": "ШъэфгущыIэм изэтедз фэгъэхьыгъэ емэйлыр гъахьыгъэ, ычIэгъкIэ ар олъэгъу.",
        "changeemail": "Зэблэхъу е тегъэкI емэйл адресыр",
        "changeemail-no-info": "Мы нэкIубгъом занкIэу укIонэу уфаемэ, системэм ухэхьэгъэн фае.",
        "changeemail-oldemail": "Джырэ емэйл адрес:",
        "content-model-javascript": "JavaScript",
        "content-json-empty-object": "Объект нэкI",
        "content-json-empty-array": "Массив нэкI",
-       "cantcreateaccounttitle": "Аккаунт ублэн лъэкIыгъэп",
        "viewpagelogs": "Мы нэкӏубгъом и логхэр къэгъэлъагъу",
        "nohistory": "Мы нэкIубгъом и еIэзэнмэ я тарихъ щыIэп.",
        "currentrev": "Ыужрэ версие",
        "linksearch-ok": "Лъыхъу",
        "listusers-submit": "Къэгъэлъагъу",
        "listusers-noresult": "Нэбгырэ пари гъотыгъэп.",
-       "activeusers-hidebots": "Ботхэр гъэбылъ",
-       "activeusers-hidesysops": "Администраторхэр гъэбылъ",
        "activeusers-noresult": "Нэбгырэ пари гъотыгъэп.",
        "listgrouprights": "Нэбгырэмэ якупмэ яфитыныгъэхэр",
        "listgrouprights-group": "Куп",
index cb869d0..794eae2 100644 (file)
        "yourname": "اسم المستخدم:",
        "yourpassword": "كلمة السر:",
        "yourpasswordagain": "أعد كتابة كلمة السر:",
-       "remembermypassword": "تذكر دخولي على هذا الحاسوب (إلى {{PLURAL:$1||يوم واحد|يومين|$1 أيام|$1 يومًا|$1 يوم}} كحد أقصى)",
        "yourdomainname": "نطاقك:",
        "externaldberror": "هناك إما خطأ في دخول قاعدة البيانات الخارجية أو أنه غير مسموح لك بتحديث حسابك الخارجي.",
        "login": "ادخل",
index 23da0fa..5f9ab04 100644 (file)
        "yourname": "Nofka:",
        "yourpassword": "Fjalëkalimi:",
        "yourpasswordagain": "Fjalëkalimi përsëdyti:",
-       "remembermypassword": "Mbaj mend fjalëkalimin tem në këtë shfletues (për $1 {{PLURAL:$1|ditë|ditë}})",
        "yourdomainname": "Domena juej:",
        "externaldberror": "Ose pat gabim në databazën e autentifikimit, ose nuk lejoheni me ndryshue llogarinë tuej të jashtme.",
        "login": "Kyçu",
        "undo-failure": "Redaktimi nuk mund të kthehej për shkak të përplasjeve të ndërmjetshme.",
        "undo-norev": "S'mund të zhbëja këtë redaktim pasi nuk ekziston ose është grisur.",
        "undo-summary": "U kthye versioni $1 i bërë nga [[Special:Contributions/$2]] ([[User talk:$2]])",
-       "cantcreateaccounttitle": "Nuk mundet të krijohet llogaria",
        "cantcreateaccount-text": "Hapja e llogarive nga kjo adresë IP ('''$1''') është bllokuar nga [[User:$3|$3]].\n\nArsyeja e dhënë nga $3 është ''$2''.",
        "viewpagelogs": "Shih regjistrat për këtë faqe",
        "nohistory": "Nuk ka histori redaktimesh për këtë faqe.",
index 712dc1f..0033e3e 100644 (file)
        "yourpasswordagain": "መግቢያ ቃልዎን ዳግመኛ ይስጡ",
        "createacct-yourpasswordagain": "የመግቢያ ቃሉን ይድገሙ",
        "createacct-yourpasswordagain-ph": "የመግቢያ ቃሉን ይድገሙ",
-       "remembermypassword": "ለሚቀጥለው ጊዜ በዚ ኮምፒውተር ላይ በአባልነት ስሜ መግባቴን ( ቢባዛ ለ $1 {{PLURAL:$1|ቀን|ቀናት}}) አስታውስ።",
        "yourdomainname": "የእርስዎ ከባቢ (domain)፦",
        "password-change-forbidden": "በዚሁ ዊኪ መግቢያ ቃልን መቀይር አልተፈቀደም።",
        "externaldberror": "ወይም አፍአዊ የማረጋገጫ መረጃ-ቤት ስኅተት ነበረ፣ ወይም አፍአዊ አባልነትዎን ማሳደስ አልተፈቀዱም።",
        "passwordreset-email": "የኢ-ሜል አድራሻ:",
        "passwordreset-emailelement": "የአባል ስም፦ \n$1\n\nጊዜያዊ መግቢያ ቃል፦ \n$2",
        "passwordreset-emailsentemail": "የማስታወሻ ኢ-ሜል ተልኳል።",
-       "passwordreset-emailsent-capture": "የማስታወሻ ኢ-ሜል ተልኳል፤ ከዚህም ታች ይታያል።",
-       "passwordreset-emailerror-capture": "የማስታወሻ ኢ-ሜል ተልኳል፤ ከዚህም ታች ይታያል፤ ነገር ግን ወደ ተጠቃሚው ለመላክ ስንል አልተከናወነም፡",
        "changeemail": "ኢ-ሜል አድራሻዎን ለመቀይር",
        "changeemail-header": "የአባልነትዎን ኢ-ሜል አድራሻ ለመቀይር",
        "changeemail-no-info": "ይህንን ገጽ በቀጥታ ለማግኘት አስቀድሞ መግባት ያስፈልጋል።",
        "undo-failure": "ከዚሁ ለውጥ በኋላ ቅራኔ ለውጦች ስለ ገቡ ሊገለበጥ አይቻልም።",
        "undo-norev": "ለውጡ አይኖርም ወይም ጠፍቷልና ሊገለበጥ አልተቻለም።",
        "undo-summary": "አንድ ለውጥ $1 ከ[[Special:Contributions/$2|$2]] ([[User talk:$2|ውይይት]]) ገለበጠ",
-       "cantcreateaccounttitle": "ብዕር ስም ለመፍጠር አይቻልም",
        "cantcreateaccount-text": "ከዚሁ የቁጥር አድራሻ ('''$1''') የብዕር ስም መፍጠር በ[[User:$3|$3]] ታግዷል።\n\nበ$3 የተሰጠው ምክንያት ''$2'' ነው።",
        "viewpagelogs": "መዝገቦች ለዚሁ ገጽ",
        "nohistory": "ለዚሁ ገጽ የዕትሞች ታሪክ የለም።",
        "activeusers": "ተግባራዊ አባላት ዝርዝር",
        "activeusers-intro": "እነዚህ አባላት ባለፈው $1 ቀን ውስጥ ማናቸውንም አይነት ተግባር ፈጸሙ።",
        "activeusers-count": "$1 {{PLURAL:$1|ለውጥ|ለውጦች}} ባለፈው $3 ቀን ውስጥ",
-       "activeusers-hidebots": "ሎሌዎች ይደበቁ",
-       "activeusers-hidesysops": "መጋቢዎች ይደበቁ",
        "activeusers-noresult": "ማንም ተጠቃሚ አልተገኘም።",
        "listgrouprights": "የተጠቃሚ ስብስባ መብቶች",
        "listgrouprights-group": "ስብስባ",
index 75e8de8..e7e53b7 100644 (file)
        "activeusers-intro": "Ista ye una lista d'usuarios que han teniu bella actividat en os zaguers $1 {{PLURAL:$1|diya|diyas}}.",
        "activeusers-count": "$1 {{PLURAL:$1|edición|edicions}} en os zaguers {{PLURAL:$3|diya|$3 diyas}}",
        "activeusers-from": "Amostrar nombres d'usuario que prencipien por:",
-       "activeusers-hidebots": "Amagar robots",
-       "activeusers-hidesysops": "Amagar administradors",
        "activeusers-noresult": "No s'han trobato usuarios.",
        "listgrouprights": "Dreitos d'a colla d'usuarios",
        "listgrouprights-summary": "Contino trobará a lista de collas d'usuario definitas en iste wiki, con os suyos dreitos d'acceso asociatos. Tamién puet trobar aquí [[{{MediaWiki:Listgrouprights-helppage}}|información adicional]] sobre os dreitos individuals.",
index 5a3781b..56bbdfe 100644 (file)
        "createacct-yourpassword-ph": "कूटशब्द दर्ज करऽ",
        "createacct-yourpasswordagain": "कूटशब्द केरऽ पुष्टि करऽ",
        "createacct-yourpasswordagain-ph": "कूटशब्द पुनः लिखऽ",
-       "remembermypassword": "इ कंप्यूटर पर हमरॊ लॉग-इन सूचना याद रखॊ (अधिकतम $1 {{PLURAL:$1|दिन|दिन}} लेली)",
        "userlogin-remembermypassword": "हमरा लॉगिन रखऽ",
        "login": "लॉग इन",
        "nav-login-createaccount": "सत्रारंभ / खाता खोलॊ",
index 3289983..3c344fc 100644 (file)
        "passwordreset-emaildisabled": "تم تعطيل ميزات البريد الإلكتروني على هذه الويكي.",
        "passwordreset-username": "اسم المستخدم:",
        "passwordreset-domain": "النطاق:",
-       "passwordreset-capture": "أأعرض البريد الإلكتروني الناتج؟",
-       "passwordreset-capture-help": "إذا علّمت هذا الصندوق فسيعرض لك البريد الإلكتروني (الذي يحتوي كلمة سر مؤقتة) وسيرسل أيضا للمستخدم.",
        "passwordreset-email": "عنوان البريد الإلكتروني:",
        "passwordreset-emailtitle": "تفاصيل حساب {{SITENAME}}",
        "passwordreset-emailtext-ip": "أحد ما (قد يكون أنت، من العنوان $1)  طلب إعادة ضبط كلمة سر حسابك على {{SITENAME}} ($4). {{PLURAL:$3||الحساب|الحسابان| الحسابات}} أدناه قد اقترنت ببريدك الإلكتروني :\n\n$2\n\n{{PLURAL:$3||كلمة السر المؤقتة|كلمات السر المؤقتة}} ستنتهي صلاحيتها في {{PLURAL:$5||يوم واحد|يومين|$5 أيام|$5 يوما|$5 يوم}}\nيمكنك تسجيل الدخول واختيار كلمة سر جديدة. إذا كان هذا الطلب تم بواسطة شخص أخر، أو إذا تذكرت كلمة السر الأصلية الخاصة بك، ولم تعد ترغب في تغييرها، يمكنك تجاهل هذه الرسالة ومتابعة استخدام كلمة السر القديمة.",
        "passwordreset-emailelement": "اسم {{GENDER:$1\n|المستخدم|المستخدمة}}: \n$1\n\nكلمة السر المؤقتة: \n$2",
        "passwordreset-emailsentemail": "إذا كان هذا العنوان البريد مرتبط بحسابك، من ثم سيتم إرسال بريد إلكتروني لإعادة تعيين كلمة السر.",
        "passwordreset-emailsentusername": "إذا كان هناك عنوان بريد إلكتروني مرتبط بهذا المستخدم، ثم سيتم إرسال بريد إلكتروني لإعادة تعيين كلمة السر.",
-       "passwordreset-emailsent-capture2": "{{PLURAL:$1|رسالة|رسائل}} البريد الإلكتروني لضبط كلمة السر تم إرسالها. {{PLURAL:$1|اسم المستخدم وكلمة السر معروضان|قائمة أسماء المستخدمين وكلمات السر معروضة}} هنا.",
-       "passwordreset-emailerror-capture2": "إرسال بريد إلى {{GENDER:$2|المستخدم|المستخدمة}} فشل: $1 {{PLURAL:$3|اسم المستخدم وكلمة السر معروضان|قائمة أسماء المستخدمين وكلمات السر معروضة}} هنا.",
        "passwordreset-nocaller": "يجب أن يتم توفير مستدعي",
        "passwordreset-nosuchcaller": "المستدعي غير موجود: $1",
        "passwordreset-ignored": "إعادة ضبط كلمة السر لم تتم التعامل معها. ربما لا موفر تم ضبطه؟",
-       "passwordreset-invalideamil": "عنوان بريد إلكتروني غير صالح",
+       "passwordreset-invalidemail": "عنوان بريد إلكتروني غير صالح",
        "passwordreset-nodata": "لا اسم مستخدم ولا عنوان بريد الإلكتروي تم توفيره",
        "changeemail": "تغيير أو إزالة عنوان البريد الإلكتروني",
        "changeemail-header": "إكمال هذا النموذج لتغيير عنوان البريد الإلكتروني الخاص بك. إذا كنت ترغب في إزالة جمعية أي عنوان البريد الإلكتروني من حسابك، وترك الفراغ عنوان البريد الإلكتروني الجديد عند تقديم النموذج",
        "right-siteadmin": "غلق ورفع غلق قاعدة البيانات",
        "right-override-export-depth": "تصدير الصفحات متضمنة الصفحات الموصولة حتى عمق 5",
        "right-sendemail": "إرسال رسائل بريد إلكتروني إلى مستخدمين آخرين",
-       "right-passwordreset": "عرض رسائل إعادة ضبط كلمات السر",
        "right-managechangetags": "إنشاء وتعطيل [[Special:Tags|الوسوم]]",
        "right-applychangetags": "تطبيق [[Special:Tags|الوسوم]]  مع التغييرات التي أجريتها.",
        "right-changetags": "إضافة وإزالة [[Special:Tags|وسوم]] في مراجعات ومدخلات سجل فردية",
        "apisandbox-continue": "استمرار",
        "apisandbox-continue-clear": "إفراغ",
        "apisandbox-continue-help": "{{int:apisandbox-continue}} س [https://www.mediawiki.org/wiki/API:Query#Continuing_queries يستمر] في الطلب الأخير؛ {{int:apisandbox-continue-clear}} سيفرغ المعاملات المرتبطة بالاستمرار.",
+       "apisandbox-param-limit": "أدخل <kbd>max</kbd> لاستخدام الحد الأقصى.",
        "booksources": "مصادر كتاب",
        "booksources-search-legend": "البحث عن مصادر الكتب",
        "booksources-isbn": "ردمك:",
        "booksources-search": "بحث",
        "booksources-text": "توجد أدناه قائمة بوصلات لمواقع أخرى تبيع الكتب الجديدة والمستعملة، أيضا يمكنك أن تحصل على معلومات إضافية عن الكتب التي تبحث عنها من هناك:",
        "booksources-invalid-isbn": "رقم ISBN المعطى لا يبدو صحيحا؛ تحقق من أخطاء النسخ من المصدر الأصلي.",
+       "magiclink-tracking-rfc": "الصفحات التي تستخدم الوصلات السحرية لRFC",
+       "magiclink-tracking-rfc-desc": "هذه الصفحة تستخدم الوصلات السحرية لRFC. انظر [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org] حول كيفية التغيير.",
+       "magiclink-tracking-pmid": "الصفحات التي تستخدم الوصلات السحرية لPMID",
+       "magiclink-tracking-pmid-desc": "هذه الصفحة تستخدم الوصلات السحرية لPMID. انظر [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org] حول كيفية التغيير.",
+       "magiclink-tracking-isbn": "الصفحات التي تستخدم الوصلات السحرية لISBN",
+       "magiclink-tracking-isbn-desc": "هذه الصفحة تستخدم الوصلات السحرية لISBN. انظر [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org] حول كيفية التغيير.",
        "specialloguserlabel": "المؤدي:",
        "speciallogtitlelabel": "الهدف (عنوان أو {{ns:user}}:اسم المستخدم للمستخدم):",
        "log": "سجلات",
        "unprotectedarticle": "أزال الحماية من \"[[$1]]\"",
        "movedarticleprotection": "نقل إعدادات الحماية من \"[[$2]]\" إلى \"[[$1]]\"",
        "protectedarticle-comment": "{{GENDER:$2|محمي}} \"[[$1]]\"",
+       "modifiedarticleprotection-comment": "{{GENDER:$2|غير مستوى الحماية|غيرت مستوى الحماية}} ل\"[[$1]]\"",
+       "unprotectedarticle-comment": "{{GENDER:$2|أزال الحماية|أزالت الحماية}} من \"[[$1]]\"",
        "protect-title": "ضبط حماية \"$1\"",
        "protect-title-notallowed": "عرض مستوى حماية \"$1\"",
        "prot_1movedto2": "نُقلت [[$1]] إلى [[$2]]",
        "patrol-log-header": "هذا سجل بالمراجعات المراجعة.",
        "log-show-hide-patrol": "$1 سجل الخفر",
        "log-show-hide-tag": "$1 سجل الوسوم",
+       "confirm-markpatrolled-button": "موافق",
+       "confirm-markpatrolled-top": "علم على المراجعة $3 من $2 كمراجعة؟",
        "deletedrevision": "حذف المراجعة القديمة $1",
        "filedeleteerror-short": "خطأ حذف الملف: $1",
        "filedeleteerror-long": "حدثت أخطاء أثناء حذف الملف:\n\n$1",
        "tags-deactivate": "تعطيل",
        "tags-hitcount": "{{PLURAL:$1|لا تغييرات|تغيير واحد|تغييران|$1 تغييرات|$1 تغييرا|$1 تغيير}}",
        "tags-manage-no-permission": "ليس لديك صلاحية إدارة وسوم التغيير.",
-       "tags-manage-blocked": "لا يمكنك إدارة علامات التغيير في حين منعت.",
+       "tags-manage-blocked": "لا يمكنك إدارة وسوم التغيير أثناء {{GENDER:$1|منعك}}.",
        "tags-create-heading": "إنشاء وسم جديد",
        "tags-create-explanation": "في الوضع الافتراضي، الوسوم الجديدة المنشأة سيتاح استخدامها للبوتات والمستخدمين.",
        "tags-create-tag-name": "اسم الوسم:",
        "tags-deactivate-not-allowed": "من غير الممكن تعطيل الوسم \"$1\".",
        "tags-deactivate-submit": "عطل",
        "tags-apply-no-permission": "ليس لديك إذن لتطبيق علامات التغيير جنبا إلى جنب مع التغييرات.",
-       "tags-apply-blocked": "لا يمكنك تطبيق علامات التغيير جنبا إلى جنب مع التغييرات في حين منعت.",
+       "tags-apply-blocked": "لا يمكنك تطبيق وسوم التغيير جنبا إلى جنب مع تغييراتك أثناء {{GENDER:$1|منعك}}.",
        "tags-apply-not-allowed-one": "الوسم \"$1\" غير مسموح أن يتم تطبيقه يدويا.",
        "tags-apply-not-allowed-multi": "{{PLURAL:$2|الوسم|الوسوم}} التالية غير مسموح أن يتم تطبيقها يدويا: $1",
        "tags-update-no-permission": "أنت لا تمتلك السماح لإضافة أو إزالة وسوم التغيير من المراجعات أو مدخلات السجل الفردية.",
-       "tags-update-blocked": "لا يمكنك إضافة أو إزالة العلامات التغيير بينماهي محظورة.",
+       "tags-update-blocked": "لا يمكنك إضافة أو إزالة وسوم التغيير أثناء {{GENDER:$1|منعك}}.",
        "tags-update-add-not-allowed-one": "الوسم \"$1\" غير مسموح أن تتم إضافته يدويا.",
        "tags-update-add-not-allowed-multi": "The following {{PLURAL:$2|الوسم|الوسوم}} التالية غير مسموح أن تتم إضافتها يدويا: $1",
        "tags-update-remove-not-allowed-one": "من غير المسموح بإزالة وسم \"$1\".",
index 3907c46..8d20e95 100644 (file)
        "yourpasswordagain": "ܟܬܘܒ ܡܠܬܐ ܕܥܠܠܐ ܙܒܢܬܐ ܐܚܪܬܐ:",
        "createacct-yourpasswordagain": "ܫܪܪ ܡܠܬܐ ܕܥܠܠܐ",
        "createacct-yourpasswordagain-ph": "ܐܥܠ ܡܠܬܐ ܕܥܠܠܐ ܙܒܢ ܐܚܪܝܢ",
-       "remembermypassword": "ܕܟܘܪ ܥܠܠܬܝ ܥܠ ܡܦܐܬܢܐ ܗܢܐ (ܠܡܬܚܐ ܥܠܝܐ ܕ $1 {{PLURAL:$1|ܝܘܡܐ|ܝܘܡܬ̈ܐ}})",
        "userlogin-remembermypassword": "ܫܒܘܩ ܠܝ ܥܠܝܠܐ ܒܚܘܫܒܢܝ",
        "userlogin-signwithsecure": "ܐܚܫܚ ܕܒܝܩܘܬܐ ܡܫܝܢܢܬܐ",
        "login": "ܥܘܠ",
        "edit-already-exists": "ܒܪܝܐ ܕܦܐܬܐ ܚܕܬܐ ܠܐ ܡܬܡܨܝܢܐ.\nܗܕܐ ܦܐܬܐ ܐܝܬ ܡܢ ܟܕܘ.",
        "editwarning-warning": "ܐܢ ܫܒܩܬ ܦܐܬܐ ܗܕܐ ܡܬܡܨܝܢܬܐ ܐܝܬܝܗ ܕܚܣܪܬ ܟܠ ܫܘܚܠܦ̈ܐ ܕܥܒܝܕܬ ܗܪܟܐ.\nܡܨܬ ܕܬܒܛܠ ܙܘܗܪܐ ܗܢܐ ܐܢ ܥܠܝܠܐ ܐܝܬܝܟ ܒܡܢܬܐ ܕ\"ܫܚܠܦܬܐ\" ܒܨܒܝܢܝܘܬ̈ܐ.",
        "undo-summary": "ܠܐ ܬܥܒܕ $1 ܒܝܕ [[Special:Contributions/$2|$2]] ([[User talk:$2|ܡܡܠܠܐ]])",
-       "cantcreateaccounttitle": "ܒܪܝܐ ܕܚܘܫܒܢܐ ܠܐ ܡܬܡܨܝܢܐ",
        "viewpagelogs": "ܚܙܝ ܣܓܠ̈ܐ ܕܦܐܬܐ ܗܕܐ",
        "nohistory": "ܠܝܬ ܬܫܥܝܬܐ ܕܫܘܚܠܦ̈ܐ ܠܦܐܬܐ ܗܕܐ",
        "currentrev": "ܬܢܝܬܐ ܗܫܝܬܐ",
        "activeusers": "ܡܟܬܒܘܬܐ ܕܗܕ̈ܡܐ ܙܪ̄ܝܙܐ",
        "activeusers-count": "$1 {{PLURAL:$1|ܥܒܕܐ|ܥܒܕ̈ܐ}} ܒ {{PLURAL:$3|ܝܘܡܐ ܐܚܪܝܐ|$3 ܝܘܡܬ̈ܐ ܐܚܪ̈ܝܐ}}",
        "activeusers-from": "ܚܘܝ ܡܦܠܚܢ̈ܐ ܕܫܪܐ ܥܡ:",
-       "activeusers-hidebots": "ܛܫܝ ܒܘܬ̈ܐ (bots)",
-       "activeusers-hidesysops": "ܛܫܝ ܡܕܒܪ̈ܢܐ",
        "activeusers-noresult": "ܠܐ ܐܫܬܟܚ ܡܦܠܚܢ̈ܐ ܐܢܫ̈ܝܢ.",
        "listgrouprights": "ܙܕ̈ܩܐ ܕܟܢܘܫܬܐ ܕܡܦܠܚܢ̈ܐ",
        "listgrouprights-group": "ܟܢܘܫܬܐ",
index 3dfb6ab..79fc096 100644 (file)
        "yourpasswordagain": "عاود كتبت كلمت السر:",
        "createacct-yourpasswordagain": "أكّد كلمت` السرّ",
        "createacct-yourpasswordagain-ph": "عاود دخّل كلمت` السرّ",
-       "remembermypassword": "اتفكر الدخول تاعي ب هاذ النافيكاتور (ب مدّة حدها{{PLURAL:$1||يوم واحد|يومين|$1 إيّام|$1 يوم}})",
        "userlogin-remembermypassword": "خلّيني مسجّل داخل",
        "userlogin-signwithsecure": "استعمل التوصال المأمون.",
        "yourdomainname": "الدومان تاعك:",
        "passwordreset-emailtext-user": "المستعملي $1 ف {{SITENAME}} راه طلب تبدال ف كلمت` السرّ تاعك ف {{SITENAME}}\n($4). {{PLURAL:$3|الحساب|الحسايات}} تاع المستعملي {{PLURAL:$3|راه مربوط|راهم مربوطين}} ب لادريسة تاع ليمال هادي:\n\n$2\n\n{{PLURAL:$3|هاد كلمت` السرّ المأقّتة|هادي كلمات` السرّ المأقّتة}} غادي يكمل صلوحها منّا على {{PLURAL:$5|نهار واحد|$5 إيّام}}.\nمادابيك تسجّل داخل ضركا و تختار كلمت` سرّ جديدة. يلا كان وحداخُر دار هاد المطلب، ولا راك ضركا تفكّرت كلمت` السرّ تاعك القديمة و ما بقيتش باغي تبدّلها، تنجم برك تتنسّا هاد الميساج و تدخُل ب كلمت` السرّ تاعك تاع مضاري.",
        "passwordreset-emailelement": "سميّت` المستعملي: \n$1\n\nكلمت` السرّ المأقّتة: \n$2",
        "passwordreset-emailsentemail": "راه نبعَت إيمال تاع تبدال كلمت` السرّ.",
-       "passwordreset-emailsent-capture": "راه اترسل إيمال تاع تبدال كلمت` السرّ، و راه محطوط هنا لتحت.",
-       "passwordreset-emailerror-capture": "راه اترسل الإيمال تاع تبدال كلمت` السرّ، الّي راح محطوط هنا لتحت، بصّح البعيت تاعهُ لل {{GENDER:$2|مستعملي}} ما نجحش: $1",
        "changeemail": "بدّل لادريسة تاع الإيمال",
        "changeemail-header": "كمّل الكتبة ف` الجدوال هادا باش تبدّل لادريسة تاع الإيمال تاعك. يلزم لك تدخّل كلمت` السرّ تاعك باش تأكّد هاد التبدال.",
        "changeemail-no-info": "لازم لك تكون مسجّل داخل باش توصَل ل هاد الپاجة بسّراح.",
index 74c6dec..dcab5ec 100644 (file)
        "yourname": "smiṫ l-mosṫĥdim:",
        "yourpassword": "Saroṫ:",
        "yourpasswordagain": "aaawd ktb lmot de passe dyalk",
-       "remembermypassword": "Ĝqel ĝla smiyṫ l-ḫsab dyali fe had l-ordinaṫør (ġir limoddaṫ {{PLURAL:$1|yom waḫed|$1 iyyam}})",
        "yourdomainname": "domain dyalk",
        "externaldberror": "kayn imma ċi ĥata' f-doĥol qaĝidaṫ l-bayanaṫ wlla rah ma msmoḫ-likċ baċ ṫḫddṫ l-ḫisab l-ĥariji taĝk.",
        "login": "Dĥel",
        "undo-failure": "ma ṣlaḫ-ċ ṫredd ṫ-ṫĝdil ḫiṫ tra ċi ṫĝdil mn morah.",
        "undo-norev": "ma ṣlaḫ-ċ ṫredd ṫ-ṫĝdil ḫiṫ ma kayn-ċ wlla ṫhyyed.",
        "undo-summary": "reḍḍ l-morajaĝa $1 d-[[Special:Contributions/$2|$2]] ([[User talk:$2|niqaċ]])",
-       "cantcreateaccounttitle": "lcont maymknch tnchaa",
        "viewpagelogs": "Ċof l-ĝamaliyaṫ dyal had ṣ-ṣefḫa",
        "nohistory": "ma kayn ḫṫṫa istorik d-ṫĝdilaṫ l-had ṣfḫa.",
        "currentrev": "Ċof l-versyon l-leĥĥra",
        "listusers-blocked": "(mbloki)",
        "activeusers": "lista dyal lmostkhdimin nachtin",
        "activeusers-from": "wrri l-mosṫĥdimin lli badyin mn:",
-       "activeusers-hidebots": "khbbi lbotat",
-       "activeusers-hidesysops": "Khbbi lidariyin",
        "activeusers-noresult": "ta mostakhdim matlgach.",
        "listgrouprights": "salahiyat mjmoat lmostkhdimin",
        "listgrouprights-key": "* <span class=\"listgrouprights-granted\">ḫoqoq mĝtiyya</span>\n* <span class=\"listgrouprights-revoked\">ḫoqoq mḫeyyda</span>",
        "htmlform-submit": "ṣift",
        "htmlform-reset": "rojoa an taadilat",
        "htmlform-selectorother-other": "okhra",
-       "sqlite-has-fts": "$1 maa imkaniyat lbaht f nass kaml",
-       "sqlite-no-fts": "$1 imkaniyat lbaht f nass kaml",
        "revdelete-restricted": "tḅḅq ḍ-ḍawaḅit ll-idariyyin",
        "revdelete-unrestricted": "ḫyyd ḍ-ḍawaḅit ll-idariyyin",
        "rightsnone": "(walo)",
index 0e51642..947d17d 100644 (file)
        "userlogin-yourpassword": "الباسورد:",
        "yourpasswordagain": "اكتب الباسورد تاني:",
        "createacct-yourpasswordagain": "أكد كلمه السر",
-       "remembermypassword": " (لمدة   $1 {{PLURAL:$1|يوم|يوم}})خليك فاكر دخولى على الكمبيوتر دا",
        "yourdomainname": "النطاق بتاعك:",
        "externaldberror": "يا إما فى حاجة غلط فى الدخول على قاعدة البيانات الخارجية أو انت مش مسموح لك تعمل تحديث لحسابك الخارجي.",
        "login": "دخول",
        "activeusers-intro": "دى قايمه اليوزرات اللى عملوا نشاط فى آخر $1 {{PLURAL:$1|يوم|يوم}}.",
        "activeusers-count": "$1 {{PLURAL:$1|تعديل|تعديل}} فى آخر {{PLURAL:$3|يوم|$3 يوم}}",
        "activeusers-from": "عرض اليوزرات بداية من:",
-       "activeusers-hidebots": "خبى البوتات",
-       "activeusers-hidesysops": "خبى السيسوبات",
        "activeusers-noresult": "مالقيناش اى يوزر",
        "listgrouprights": "حقوق مجموعات اليوزرز",
        "listgrouprights-summary": "دى لستة بمجموعات اليوزرز المتعرفة فى الويكى دا، بالحقوق اللى معاهم.\nممكن تلاقى معلومات زيادة عن الحقوق بتاعة كل واحد  [[{{MediaWiki:Listgrouprights-helppage}}|هنا]].",
index 8a8a45a..70a1442 100644 (file)
        "activeusers-intro": "যোৱা  {{PLURAL:$1|দিন|দিন}}ৰ ভিতৰত অৱদান আগবঢ়োৱা ব্যৱহাৰকাৰীৰ তালিকা",
        "activeusers-count": "যোৱা {{PLURAL:$3|দিনত|$3 দিনত}} সৰ্বমুঠ $1 {{PLURAL:$1|টা কাম}}",
        "activeusers-from": "ইয়াৰে আৰম্ভ হোৱা ব্যৱহাৰকাৰী সকল দেখুৱাওক:",
-       "activeusers-hidebots": "বট নেদেখুৱাব",
-       "activeusers-hidesysops": "প্ৰশাসক নেদেখুৱাব",
        "activeusers-noresult": "কোনো সদস্য পোৱা নগ'ল।",
        "listgrouprights": "ব্যৱহাৰকাৰী গোটৰ অধিকাৰ",
        "listgrouprights-summary": "এই ৱিকিত থকা গোটসমূহৰ তালিকা সেইবোৰৰ প্ৰৱেশাধিকাৰসহ তলত দিয়া হ’ল ।\nসুকীয়া অধিকাৰ সম্পৰ্কে [[{{MediaWiki:Listgrouprights-helppage}}|অধিক তথ্য]] থাকিব পাৰে ।",
index dde90d0..48ab3ee 100644 (file)
        "yourpasswordagain": "M535x523S14c50508x492S14c58469x492S22520503x477S22520465x477 M518x531S33b00482x483S1f711482x509 M516x515S10018484x485S1f010487x485 M528x514S15a39472x487S28802506x486S18250481x499 S38a00464x490",
        "createacct-yourpasswordagain": "M535x523S14c50508x492S14c58469x492S22520503x477S22520465x477 M518x531S33b00482x483S1f711482x509 M516x515S10018484x485S1f010487x485 M528x514S15a39472x487S28802506x486S18250481x499",
        "createacct-yourpasswordagain-ph": "M535x523S14c50508x492S14c58469x492S22520503x477S22520465x477 M518x531S33b00482x483S1f711482x509 M516x515S10018484x485S1f010487x485 M528x514S15a39472x487S28802506x486S18250481x499",
-       "remembermypassword": "M538x567S1f548504x543S1f520513x534S1f520513x481S22b04522x499S2ff00482x483 M514x514S15a01491x487S20500487x503 M538x521S2a200497x480S20b00462x508S11530523x482S15a37462x483S11551470x493 M536x521S2ff00482x483S10011515x491S28108515x461 M508x525S10004493x475S22a04494x510 M523x528S14011492x504S15a00477x495S2b800483x473 S38b00470x493 M536x521S2ff00482x483S10011515x491S28108515x461 M519x530S18210496x475S18218482x471S20b00496x483S22b00495x500 $1 {{PLURAL:$1|M526x534S15a1a499x522S10010507x467S28903478x486S37706474x522S37700520x495}} S38b04470x493",
        "userlogin-remembermypassword": "M521x526S1f750501x511S1f758480x511S26620493x474 M521x517S10043491x483S20500479x506 M538x521S2a200497x480S20b00462x508S11530523x482S15a37462x483S11551470x493",
        "password-change-forbidden": "M518x584S10004492x534S22a04493x569S30a00482x483 M518x633S19220493x614S14020479x583S19220493x561S18620491x530S30a00482x483 S38700463x496 M508x523S10040493x493S26500493x477 M527x521S10059473x479S10051497x479S20e00494x491S22a04493x506 M521x532S10609498x496S10621487x512S21100500x483S2df20479x468 M518x531S33b00482x483S1f711482x509 M516x515S10018484x485S1f010487x485 S38800464x496",
        "login": "M538x521S2a200497x480S20b00462x508S11530523x482S15a37462x483S11551470x493",
        "permissionserrorstext": "M508x523S10040493x493S26500493x477 M534x542S2ff00482x483S26500520x505S20e00521x526S1f540493x518 M531x528S15a40511x472S15a48478x472S2d200505x505S2d211470x505 {{PLURAL:$1|M547x518S30a00482x483S22124511x473S1c517522x483}} S38900464x493",
        "permissionserrorstext-withaction": "M508x523S10040493x493S26500493x477 M534x542S2ff00482x483S26500520x505S20e00521x526S1f540493x518 M531x528S15a40511x472S15a48478x472S2d200505x505S2d211470x505 $2 {{PLURAL:$1|M547x518S30a00482x483S22124511x473S1c517522x483}} S38900464x493",
        "log-fulllog": "M525x524S2ff00482x483S10e00507x494S26500511x474 M520x529S20e00493x504S20348493x486S15a51497x471S26503480x516 M518x536S15a37483x465S18550493x476S15a37483x509S15a51486x513",
-       "cantcreateaccounttitle": "M527x521S10059473x479S10051497x479S20e00494x491S22a04493x506 M532x519S20302493x485S2030a489x502S21100509x504S26900516x482S26910468x501 M518x517S15a30482x489S1f750484x484S20500496x506S22a04505x495",
        "viewpagelogs": "M525x524S2ff00482x483S10e00507x494S26500511x474 M531x512S15a37501x488S1f550507x495S20e00487x499S26502469x498 M518x536S15a37483x465S18550493x476S15a37483x509S15a51486x513",
        "currentrev-asof": "M521x524S1f740501x509S1f748479x498S20e00503x494S22a00502x476 M536x534S35610482x483S10601513x506S21600525x501 M521x532S10609498x496S10621487x512S21100500x483S2df20479x468 M557x536S36d00479x503S10001536x498S10009510x506S2b711518x476S2b700531x465 $1",
        "revisionasof": "M513x542S1ce50491x458S22a00492x492S14c50487x511 M519x539S14402488x485S1440a481x461S22b04503x509 M536x521S2ff00482x483S10011515x491S28108515x461 $1",
        "logentry-newusers-autocreate": "M526x522S15a56499x510S11520503x479S20e00489x496S26a02474x489 M518x517S15a30482x489S1f750484x484S20500496x506S22a04505x495 $1 M531x531S14c30506x469S2a204508x503S2a21c470x503S14c38470x469 {{GENDER:$2|M532x519S20302493x485S2030a489x502S21100509x504S26900516x482S26910468x501}} M520x525S15a18480x490S10a02483x476S23100494x508S20e00500x494",
        "log-name-managetags": "M519x514S15a28482x487S11502489x498 M530x529S10640507x503S10648479x489S26c08503x484S26c18470x471 M518x536S15a37483x465S18550493x476S15a37483x509S15a51486x513",
        "log-name-tag": "M519x514S15a28482x487S11502489x498 M518x536S15a37483x465S18550493x476S15a37483x509S15a51486x513",
-       "feedback-error-title": "M518x526S2ff00482x483S19a00487x506",
        "searchsuggest-search": "M546x525S2ff00482x483S16d10492x505S2e502519x502",
        "api-error-mustbeloggedin": "M539x579S10e27506x534S10e09480x534S22a07495x565S22a17469x564S21b00531x528S21b00504x528S30a00482x483 M520x576S14c19480x549S15a01497x550S20710483x530S30a00482x483 S38700463x496 M516x519S10651485x482S22a04493x504 M538x521S2a200497x480S20b00462x508S11530523x482S15a37462x483S11551470x493 S38800464x496",
        "api-error-unclassified": "M536x518S2ff00482x483S15a11513x486S28108513x453 M518x526S2ff00482x483S19a00487x506 M528x529S10030509x499S10038477x499S2a200505x472S2a218473x472",
index 51b24c5..c2dbc8e 100644 (file)
        "passwordreset-emaildisabled": "Les funciones de corréu electrónicu tan desactivaes nesta wiki.",
        "passwordreset-username": "Nome d'usuariu:",
        "passwordreset-domain": "Dominiu:",
-       "passwordreset-capture": "¿Ver el corréu electrónicu resultante?",
-       "passwordreset-capture-help": "Si marques esta caxella, podrás ver el corréu (cola contraseña temporal) amás d'unvialu al usuariu.",
        "passwordreset-email": "Direición de corréu electrónicu:",
        "passwordreset-emailtitle": "Detalles de la cuenta en {{SITENAME}}",
        "passwordreset-emailtext-ip": "Dalguién (seique vusté, dende la direición IP $1)solicitó'l reaniciu de la so contraseña de {{SITENAME}} ($4).\n{{PLURAL:$3|La cuenta d'usuariu siguiente ta asociada|Les cuentes d'usuariu siguientes tán asociaes}}\na esta direición de corréu electrónicu:\n\n$2\n\n{{PLURAL:$3|Esta contraseña provisional caduca|Estes contraseñes provisionales caduquen}} {{PLURAL:$5|nun día|en $5 díes}}.\nTendría d'aniciar sesión y escoyer una contraseña nueva agora. Si esta solicitú la fizo otra persona,\no si recordó la clave orixinal y yá nun quier camudala, pue escaecer esti mensaxe y siguir\nusando la contraseña antigua.",
        "passwordreset-emailelement": "Nome d'usuariu: \n$1\n\nContraseña temporal: \n$2",
        "passwordreset-emailsentemail": "Si esta direición de corréu electrónicu ta asociada cola to cuenta, unviaráse un corréu pa reaniciar la contraseña.",
        "passwordreset-emailsentusername": "Si hai una direición de corréu electrónicu asociada con esti nome d'usuariu, unviaráse un corréu electrónicu pa reaniciar la contraseña.",
-       "passwordreset-emailsent-capture2": "{{PLURAL:$1|Unvióse'l corréu|Unviáronse los correos}} de reaniciu de contraseña. {{PLURAL:$1|El nome d'usuariu y la contraseña|La llista de nomes d'usuarios y contraseñes}} amuésase equí.",
-       "passwordreset-emailerror-capture2": "Nun pudo unviase un corréu electrónicu {{GENDER:$2|al usuariu|a la usuaria}}: $1 {{PLURAL:$3|El nome d'usuariu y la contraseña|La llista de nomes d'usuarios y contraseñes}} amuésase equí.",
        "passwordreset-nocaller": "Tien d'apurrise un llamador",
        "passwordreset-nosuchcaller": "El llamador nun esiste: $1",
        "passwordreset-ignored": "Nun se llogró'l reaniciu de la contraseña. ¿Seique nun se configuró un proveedor?",
-       "passwordreset-invalideamil": "Direición de corréu inválida",
+       "passwordreset-invalidemail": "Direición de corréu inválida",
        "passwordreset-nodata": "Nun s'apurrió nin un nome d'usuariu nin una dirección de corréu electrónicu",
        "changeemail": "Camudar o desaniciar la dirección de corréu electrónicu",
        "changeemail-header": "Completa esti formulariu pa camudar la dirección de corréu electrónicu. Si quies desaniciar l'asociación de cualquier dirección de corréu electrónicu de la to cuenta, dexa en blancu la nueva dirección de corréu electrónicu cuando unvies el formulariu.",
        "prefs-watchlist-edits-max": "Númberu máximu: 1000",
        "prefs-watchlist-token": "Pase de la llista de siguimientu:",
        "prefs-misc": "Varios",
-       "prefs-resetpass": "Camudar la conseña",
+       "prefs-resetpass": "Camudar la contraseña",
        "prefs-changeemail": "Camudar o desaniciar la dirección de corréu electrónicu",
        "prefs-setemail": "Conseñar una direición de corréu electrónicu",
        "prefs-email": "Opciones de corréu",
        "prefs-help-gender": "Configurar esta preferencia ye opcional. El software usa esti valor pa dirixise a ti y pa mentate a terceros col xéneru gramatical correchu.\nEsta información sedrá pública.",
        "email": "Corréu",
        "prefs-help-realname": "El nome real ye opcional.\nSi se da, pue usase pa date reconocimientu pol to trabayu.",
-       "prefs-help-email": "La direición de corréu ye opcional, pero ye necesaria pa unviate una conseña nueva si escaeces la tuya.",
+       "prefs-help-email": "La direición de corréu ye opcional, pero ye necesaria pa unviate una contraseña nueva si escaeces la tuya.",
        "prefs-help-email-others": "Tamién pues escoyer permitir qu'otres persones contauten contigo pela to páxina d'usuariu o la d'alderique ensin necesidá de revelar la to identidá.",
        "prefs-help-email-required": "Necesítase una direición de corréu electrónicu.",
        "prefs-info": "Información básica",
        "right-siteadmin": "Candar y descandar la base de datos",
        "right-override-export-depth": "Esportar páxines, incluyendo páxines enllazaes fasta una fondura de 5",
        "right-sendemail": "Unviar corréu a otros usuarios",
-       "right-passwordreset": "Ver los correos de reestablecimientu de conseña",
        "right-managechangetags": "Crear y (des)activar [[Special:Tags|etiquetes]]",
        "right-applychangetags": "Aplicar [[Special:Tags|etiquetes]] xunto colos cambios propios",
        "right-changetags": "Amestar y desaniciar [[Special:Tags|etiquetes]] arbitraries en revisiones individuales y entraes del rexistru",
        "apisandbox-continue": "Siguir",
        "apisandbox-continue-clear": "Llimpiar",
        "apisandbox-continue-help": "{{int:apisandbox-continue}} [https://www.mediawiki.org/wiki/API:Query#Continuing_queries siguirá] cola última solicitú; {{int:apisandbox-continue-clear}} llimpiará los parámetros rellacionaos con siguir.",
+       "apisandbox-param-limit": "Escribe <kbd>max</kbd> pa usar la llende máxima.",
        "booksources": "Fontes de llibros",
        "booksources-search-legend": "Busca de fontes de llibros",
        "booksources-search": "Buscar",
        "tags-deactivate": "desactivar",
        "tags-hitcount": "$1 {{PLURAL:$1|cambiu|cambios}}",
        "tags-manage-no-permission": "Nun tienes permisu p'alministrar etiquetes de cambiu.",
-       "tags-manage-blocked": "Nun puedes xestionar etiquetes de cambiu mentanto teas bloquiáu.",
+       "tags-manage-blocked": "Nun puedes xestionar etiquetes de cambiu mentanto teas {{GENDER:$1|bloquiáu|bloquiada}}.",
        "tags-create-heading": "Crear una etiqueta nueva",
        "tags-create-explanation": "De mou predetermináu, les etiquetes nueves que se creen tarán disponibles pa que les usen los usuarios y bots.",
        "tags-create-tag-name": "Nome de la etiqueta:",
        "tags-deactivate-not-allowed": "Nun ye posible desactivar la etiqueta «$1».",
        "tags-deactivate-submit": "Desactivar",
        "tags-apply-no-permission": "Nun tienes permisu p'aplicar etiquetes de cambios xunto colos cambios.",
-       "tags-apply-blocked": "Nun puedes aplicar etiquetes de cambiu xunto colos cambios mentanto teas bloquiáu.",
+       "tags-apply-blocked": "Nun puedes aplicar etiquetes de cambiu xunto colos cambios mentanto teas {{GENDER:$1|bloquiáu|bloquiada}}.",
        "tags-apply-not-allowed-one": "Nun se permite aplicar manualmente la etiqueta «$1».",
        "tags-apply-not-allowed-multi": "{{PLURAL:$2|La siguiente etiqueta nun pue|Les siguientes etiquetes nun puen}} aplicase manualmente: $1",
        "tags-update-no-permission": "Nun tienes permisu p'amestar o desaniciar etiquetes de cambiu nes revisiones individuales o entraes del rexistru.",
-       "tags-update-blocked": "Nun puedes amestar o desaniciar etiquetes de cambiu mentanto teas bloquiáu.",
+       "tags-update-blocked": "Nun puedes amestar o desaniciar etiquetes de cambiu mentanto teas {{GENDER:$1|bloquiáu|bloquiada}}.",
        "tags-update-add-not-allowed-one": "Nun se permite amestar manualmente la etiqueta «$1».",
        "tags-update-add-not-allowed-multi": "{{PLURAL:$2|La siguiente etiqueta nun pue|Les siguientes etiquetes nun puen}} amestase manualmente: $1",
        "tags-update-remove-not-allowed-one": "Nun se permite desaniciar la etiqueta «$1».",
index dca9dfe..e2ea9aa 100644 (file)
        "yourpasswordagain": "Пароль такрар гьабе:",
        "createacct-yourpasswordagain": "Пароль ритIухъ гьабе",
        "createacct-yourpasswordagain-ph": "Пароль цоги нухалъ хъвай",
-       "remembermypassword": "Дир цIарги парольги гьаб компьютералда цIунизе (гIицIго $1 {{PLURAL:$1|къоялъ}})",
        "userlogin-remembermypassword": "Системаялда чӀезе",
        "yourdomainname": "Дур домен:",
        "password-change-forbidden": "Гьаб викиялда пароль хисизабун бажаруларо дуда.",
index 0081c7e..b8ca12d 100644 (file)
        "yourname": "Rinaf favesikyolt",
        "yourpassword": "Rinaf remravlem",
        "yourpasswordagain": "Va rinaf remravlem tolon bazel",
-       "remembermypassword": "Setikera va jinaf remravlem koe bati nedisiki (kali cugon $1 {{PLURAL:$1|viel|viel}})",
        "yourdomainname": "Rinaf ind",
        "externaldberror": "Ont divefa origakrokla va pilkomodara ont va rinafa divefa pata me ronuskel.",
        "login": "Pilkomodá",
        "undo-failure": "Betaks me zo rodimaskir golde kobodas walif betaks yo.",
        "undo-norev": "Dimbetara tir merotisa golde metira ok sulara.",
        "undo-summary": "Dimaskira va $1 betaks ke [[Special:Contributions/$2|$2]] ([[User talk:$2|Prilara]])",
-       "cantcreateaccounttitle": "Pataredura me tir",
        "cantcreateaccount-text": "Pataredura male bate IP ('''$1''') mane gan [[User:$3|$3]] zo elekayar.\n\nBazeyena lazava ke $3 tir ''$2''.",
        "viewpagelogs": "Wira va \"logs\" ke batu bu",
        "nohistory": "Nedoy izvot va batu bu.",
index 1a6b71d..96529ac 100644 (file)
        "yourpasswordagain": "गुप्त कुंजी एक दाँइ अउर लिखो:",
        "createacct-yourpasswordagain": "गुप्त कुंजी कय पुष्टि करो",
        "createacct-yourpasswordagain-ph": "गुप्त कुंजी फिर से लिखो",
-       "remembermypassword": "इ ब्राउज़र पे हमार लॉगिन याद रखो (अधिकतम $1 {{PLURAL:$1|दिन|दिन}} कय लिए)",
        "userlogin-remembermypassword": "हम्मै लॉग्ड इन रखो",
        "userlogin-signwithsecure": "सुरक्षित कनेक्शन कय प्रयोग करो",
        "yourdomainname": "आप कय डोमेन:",
        "passwordreset-emailtext-user": "{{SITENAME}} ($4) पे सदस्य $1 आपकय {{PLURAL:$3|खाता}} कय गुप्तकुंजी कय रीसेट करेक अनुरोध करे हैं। इ ई-मेल ठहर से इ {{PLURAL:$3|खाता जोडान है}}:\n\n$2\n\n{{PLURAL:$3|ई}} अस्थायी गुप्तकुंजी {{PLURAL:$5|दिन}} कय बाद काम नाइ करि।\nआप लॉग इन कइकै एकठु नँवा गुप्त कुंजी अभीन लै लेक चाहि। यदि इ अनुरोध केहु दुसर करे है, या फिर आप कय आपन गुप्त कुंजी याद आई गा है, अव आप {{PLURAL:$3|आपन}} गुप्तकुंजी नाई बदलेक चाहा जात है, आप इ संदेश कय अनदेखा कई कय आपन पुरान गुप्तकुंजी कय प्रयोग कइ सका जात है।",
        "passwordreset-emailelement": "सदस्यनाँव: \n$1\n\nअस्थायी गुप्तकुंजी: \n$2",
        "passwordreset-emailsentemail": "एक गुप्तकुंजी रीसेट ई-मेल भेज दिहा गा है।",
-       "passwordreset-emailsent-capture": "नीचे जवन देखावा है ओकर गुप्तकुंजी रीसेट ई-मेल भेज दिहा गा है।",
-       "passwordreset-emailerror-capture": "नीचे दिहा गुप्त कुंजी रीसेट ई-मेल पैदा भा रहा, लेकिन ओका {{GENDER:$2|सदस्य}} कय भेजब असफल रहा।\nत्रुटि: $1",
        "changeemail": "ईमेल ठाँव बदला जाय",
        "changeemail-header": "अपना ई-मेल पता परिवर्तित करने के लिए इस फ़ॉर्म को पूरा करें। इस बदलाव की पुष्टि करने के लिये आपको अपना कूटशब्द पुनः लिखना पड़ेगा।",
        "changeemail-no-info": "इ पन्ना कय सीधय प्रयोग करेक लिए आप कय लॉग इन करेक परि।",
        "undo-nochange": "अईसन लागत है की ई सम्पादन कय पहिलवे पहिले जैसन कई दीहा है ।",
        "undo-summary": "[[Special:Contributions/$2|$2]] ([[User talk:$2|बातचीत]]) कय करल बदलाव $1 कय पहिले जईसन कई गय",
        "undo-summary-username-hidden": "लुकुआवल सदस्यन् कय करल बदलाव $1 कय पहिले जईसन कई गय",
-       "cantcreateaccounttitle": "खाता नाई खोली सका जात है",
        "cantcreateaccount-text": "इ आइ॰पी ठहर ('''$1''') कय खाता बनावे कय [[User:$3|$3]] रोक लगाए हैँ।\n\nएकरे लिये $3 ''$2'' कारण दिहे हैं।",
        "cantcreateaccount-range-text": "<strong>$1</strong> कय श्रेणी में आवे वाला आई॰पी ठहर से, जवनेमें आप कय आई॰पी ठहर (<strong>$4</strong>) शामिल है, नँवा खाता बनावे कय लिए [[User:$3|$3]] अवरोधित कई गा है। \n\n$3 द्वारा दिया गया कारण है: \"$2\"",
        "viewpagelogs": "इस पन्ना कय लॉग देखा जाय",
        "activeusers-intro": "इ सक्रिय सदस्यन् कय सूची होय जे पिछला $1 {{PLURAL:$1|दिन}} में कुछ काम करें है।",
        "activeusers-count": "$1 {{PLURAL:$1|काम}} पिछला $3 {{PLURAL:$3|दिन}} में",
        "activeusers-from": "इ अक्षर से शुरु होय वाले सदस्य देखावा जाय:",
-       "activeusers-hidebots": "बॉट लुकुआवा जाय",
-       "activeusers-hidesysops": "प्रबंधक लुकुआवा जाय",
        "activeusers-noresult": "कवनो सदस्य नाइ मिलें ।",
        "listgrouprights": "सदस्य समूह अधिकार",
        "listgrouprights-summary": "नीचे इ विकि खर्तीन परिभाषित सदस्य समूहन् कय सूची होय, सथवे में हर समूह से जोड़ान अधिकारो है।\nहर अधिकार कय बारे में [[{{MediaWiki:Listgrouprights-helppage}}|ढेर जानकरीओ]] उपलब्ध है।",
        "htmlform-chosen-placeholder": "एक्ठु विकल्प चुना जाय",
        "htmlform-cloner-create": "अउर जोडा जाय",
        "htmlform-cloner-delete": "हटावा जाय",
-       "sqlite-has-fts": "$1 पूर्ण पाठ खोज समर्थन कय साथ",
-       "sqlite-no-fts": "$1पूर्ण-पाठ खोज समर्थन कय बिना",
        "logentry-delete-delete": "$1 ने पृष्ठ $3 {{GENDER:$2|हटा}} दिहा गय",
        "logentry-delete-restore": "$1 ने पृष्ठ $3 कय {{GENDER:$2|पुनर्स्थापित}} कै गय",
        "logentry-delete-event": "$1 ने $3 पृष्ठ की लॉग {{PLURAL:$5|प्रविष्टि|प्रविष्टियों}} की दृश्यता {{GENDER:$2|बदली}}: $4",
        "feedback-cancel": "रद्द करा जाय",
        "feedback-close": "होइ गवा",
        "feedback-dialog-title": "प्रतिक्रिया भेजा जाय",
-       "feedback-error-title": "त्रुटि",
        "feedback-error1": "त्रुटि: न पहचाना गया परिणाम एपीआई से",
        "feedback-error2": "त्रुटि: संपादन विफल रहा है",
        "feedback-error3": "त्रुटि: एपीआई से कोई प्रतिक्रिया नहीं",
index d16eafd..643cd67 100644 (file)
        "aboutpage": "Project:İzah",
        "copyright": "Bu məzmun $1 əhatəsindədir.",
        "copyrightpage": "{{ns:project}}:Müəllif",
-       "currentevents": "Güncəl hadisələr",
-       "currentevents-url": "Project:Güncəl hadisələr",
+       "currentevents": "Aktual hadisələr",
+       "currentevents-url": "Project:Aktual hadisələr",
        "disclaimers": "Məsuliyyətdən imtina",
        "disclaimerpage": "Project:Məsuliyyətdən imtina",
        "edithelp": "Redaktə kömək",
index 0f353de..8fd6b59 100644 (file)
        "virus-badscanner": "پیس تنظیملر: تانینمامیش ویروس یوخلایان: ''$1''",
        "virus-scanfailed": "یوخلاماق باشا چاتمادی (کود $1)",
        "virus-unknownscanner": "تانینمامیش آنتی‌ویروس:",
-       "logouttext": "<strong>سÛ\8cز Ø§Û\8cÙ\86دÛ\8c Ø³Û\8cستÙ\90Ù\85â\80\8cدÙ\86 Ú\86Û\8cخدÛ\8cÙ\86Û\8cز.</strong>\n\nبÙ\88Ù\86ا Ø¯Û\8cÙ\82ت Ø§Ø¦Ø¯Û\8cÙ\86 Ú©Û\8c Ù\88ب Ø­Ø§Ù\81Û\8cظÙ\87 Ù\86Û\8cزÛ\8c Ø³Û\8cÙ\84Ù\85Ù\87 Û\8cÙ\86Ø\8cبعضÛ\8c ØµØ­Û\8cÙ\81Ù\87â\80\8cÙ\84ر Ú©Ù\8eØ´-Û\8cÙ\86Û\8cزÛ\8c Ø³Û\8cÙ\84Ù\85Ù\87â\80\8cÙ\85Û\8cØ´ Ú©Û\8cÙ\85Û\8cØ\8c Ù\87Ù\84Ù\87 Ø¯Ù\87 Ø³Û\8cزÛ\8cÙ\86 Ú¯Û\8cرÛ\8cØ´ Ø§Ø¦ØªØ¯Û\8cÚ¯Û\8cÙ\86Û\8cز Ú©Û\8cÙ\85Û\8c Ú¯Ø¤Ø³ØªØ±Û\8cÙ\84Ù\87â\80\8cجکلر.",
+       "logouttext": "<strong>سÛ\8cز Ø§Û\8cÙ\86دÛ\8c Ø³Û\8cستÙ\90Ù\85â\80\8cدÙ\86 Ú\86Û\8cخدÛ\8cÙ\86Û\8cز.</strong>\n\nدÛ\8cÙ\82تï¼\9aÙ\88ب Ø­Ø§Ù\81Û\8cظÙ\87 Ù\86Û\8cزÛ\8c Ø³Û\8cÙ\84Ù\85Ù\87 Û\8cÙ\86Ù\87 Ù\82درØ\8cبعضÛ\8c ØµÙ\81Ø­Ù\87â\80\8cÙ\84ر Ù\87Ù\84Ù\87 Ø¯Ù\87 Ø³Û\8cستÙ\85دÛ\8cÙ\85Û\8cشسÛ\8cÙ\86ز Ú©Û\8cÙ\85Û\8c Ú¯Ø¤Ø±Ù\88Ù\86Ù\87 Ø¨Û\8cلر.",
        "cannotlogoutnow-title": "ایندی چیخیش اوْلونمازدیر",
        "cannotlogoutnow-text": "$1-ی ایشلدرکن چیخیش اوْلونمازدیر.",
        "welcomeuser": "خوش گلمیسینیز، $1!",
        "userlogin-yourpassword-ph": "رمزینیزی یازین",
        "createacct-yourpassword-ph": "رمزی یازین",
        "yourpasswordagain": "رمزی یئنی‌دن یازین:",
-       "createacct-yourpasswordagain": "رÙ\85زÛ\8c Ø¯Ù\88غرÙ\88Ù\84اÛ\8cین",
+       "createacct-yourpasswordagain": "رÙ\85زÛ\8c ØªØ£Û\8cÛ\8cد Ø§Ø¦Ø¯ین",
        "createacct-yourpasswordagain-ph": "رمزی یئنی‌دن یازین",
        "userlogin-remembermypassword": "منی ایچری‌ده ساخلا",
        "userlogin-signwithsecure": "آرخایین باغلانتی ایشلدین",
        "passwordreset-emaildisabled": "ایمیل اؤزل‌لیکلری بو ویکی‌ده باغلانیب‌دیر.",
        "passwordreset-username": "ایشلدن آدی:",
        "passwordreset-domain": "دامنه:",
-       "passwordreset-capture": "سون نتیجه ایمیل گؤستریلسین؟",
-       "passwordreset-capture-help": "بو قوطویا علامت قویساز، (گئچیجی رمزی اولان) ایمیل ایستیفاده‌چی‌یه گؤندریلن کیمی بوردا سیزه گؤستریله‌جکدیر.",
        "passwordreset-email": "ایمیل آدرسی:",
        "passwordreset-emailtitle": "{{SITENAME}}-ده حساب بیلگیلری",
        "passwordreset-emailtext-ip": "بیر کس (احتیمالاً سیز، $1 آی‌پی آدرسی‌له)، {{SITENAME}} ($4) سایتینداکی حسابینیز اوچون رمزی یئنیله‌مک ایسته‌ییب‌دیر. آشاغیداکی ایستیفاده‌چی {{PLURAL:$3|حسابی|حسابلاری}} بو ایمیل ایله ایلگی‌لی‌دیرلر:\n\n$2\n\nبو گئچیجی {{PLURAL:$3|رمز|رمزلر}}، {{PLURAL:$5|بیر گون|$5 گون}}‌ده {{PLURAL:$3|واختی|واختلاری}} قورتاراجاق‌دیر.\nسیز گرک ایندی سایتا گیریب و یئنی بیر رمز سئچه‌سینیز. باشقا آدام بو ایستَگی وئرمیش‌سه، یوخسا سیز اسکی رمزینیزی یادا گتیرمیشسینیزسه، و داها اونو چئویرمک ایسته‌میرسینیزسه، بو مئساژی سایماییب و اسکی رمزینیزی ایشلدمگه داوام ائده بیلرسینیز.",
        "currentrev-asof": "$1 تاریخینه کیمی سون حال",
        "revisionasof": "$1 نوسخه‌سی",
        "revision-info": "$1- یارادیلمیش نوسخه{{GENDER:$6|$2}}$7 الیله",
-       "previousrevision": "قاباق‌کی سۆروم",
+       "previousrevision": "قاباقکی نوسخه",
        "nextrevision": "داها یئنی نوسخه ←",
        "currentrevisionlink": "سون نوسخه",
        "cur": "ایندی",
        "page_last": "سون",
        "histlegend": "فرقلری سئچمه: موقاییسه ائتمک ایسته‌دیگینیز دییشیک‌لیکلرین یانینداکی گیرده دۆیمه‌لره علامت قویون و سوْنرا Enter-ی وۇروب یوْخسا آشاغیداکی دۆیمه‌نی وورون.<br />\nآچیقلاما:'''({{int:cur}})''' =سون نوسخه ایله فرقلر ، '''({{int:last}})''' = قاباقکی نوسخه ایله فرقلر، '''{{int:minoreditletter}}''' = کیچیک دییشیک‌لیک.",
        "history-fieldset-title": "گئچمیشی آختار",
-       "history-show-deleted": "یالنیز سیلینَنلر",
+       "history-show-deleted": "تکجه سیلینَنلر",
        "histfirst": "ان اسکی",
        "histlast": "ان یئنی",
        "historysize": "({{PLURAL:$1|بیر|$1}} بایت)",
        "difference-title-multipage": "«$1» و «$2» صحیفه‌لرین آراسینداکی فرقلر",
        "difference-multipage": "(صفحه‌لر آراسینداکی فرق‌لر)",
        "lineno": "خط $1:",
-       "compareselectedversions": "سئÚ\86Û\8cÙ\84Ù\85Û\8cØ´ Ù\86Ù\88سخÙ\87â\80\8cÙ\84رÛ\8c Ù\82ارشÛ\8cÙ\84اشدÛ\8cر",
+       "compareselectedversions": "سئÚ\86Û\8cÙ\84Ù\85Û\8cØ´ Ù\86Ù\88سخÙ\87â\80\8cÙ\84رÛ\8c Ù\85Ù\88Ù\82اÛ\8cسÙ\87 Ø§Ø¦Øª",
        "showhideselectedversions": "سئچیلمیش نوسخه‌لری گؤستر/گیزلد",
        "editundo": "قایتار",
        "diff-empty": "فرقیسیز",
        "searchprofile-advanced-tooltip": "تاپشیریلان آدفضالاریندا آختار",
        "search-result-size": "$1 ({{PLURAL:$2|۱ سؤزجوک|$2 سؤزجوک}})",
        "search-result-category-size": "{{PLURAL:$1|بیر|$1}} عوضو ({{PLURAL:$2|بیر|$}} آلت‌بؤلمه، {{PLURAL:$3|بیر|$3}} فایل)",
-       "search-redirect": "یول‌لاندیرما $1",
+       "search-redirect": "($1-دن يوْل‌لاندیریلمیش)",
        "search-section": "(بؤلوم $1)",
        "search-category": "(رده  $1)",
        "search-file-match": "(فایلین ایچری اوخشاری)",
        "right-siteadmin": "دیتابیسی قیفیل‌لا و قیفیلینی آچ",
        "right-override-export-depth": "ایچری باغلانتیلاری اولان صحیفه‌لری، چوخو ۵ درجه درینلیگی ایله، ایخراج ائت",
        "right-sendemail": "باشقا ایستیفاده‌چیلره ایمیل گؤندر",
-       "right-passwordreset": "رمز یئنی‌له‌مه ایمیل‌لرینه باخ",
        "grant-group-email": "ایمئیل گؤندر",
        "newuserlogpage": "ایشلدن یارادیلما ژورنالی",
        "newuserlogpagetext": "بۇ ایشلدن یارادماق لیستی‌دیر.",
        "action-edit": "بو صحیفه‌نی دَییشدیر",
        "action-createpage": "صفحه یارات",
        "action-createtalk": "دانیشیق صفحه‌سی یارات",
-       "action-createaccount": "بÙ\88 Ø§Û\8cستÛ\8cÙ\81ادÙ\87â\80\8cÚ\86Û\8c Ø­Ø³Ø§Ø¨Û\8cÙ\86Û\8c Û\8cاراد",
+       "action-createaccount": "بÙ\88 Ø§Û\8cØ´Ù\84دÙ\86 Ø­Ø³Ø§Ø¨Û\8cÙ\86Û\8c Û\8cارات",
        "action-history": "بو صفحه نین گئچمیشین گور",
        "action-minoredit": "بو دَییشیکلیگی، کیچیک اولاراق نیشانلا",
        "action-move": "بو صحیفه‌‌نین آدینی ديَیشدیر",
        "longpages": "اۇزون صفحه‌‌لر",
        "deadendpages": "کئچید وئرمه‌ين صحیفه‌‌لر",
        "deadendpagestext": "آشاغیداکی صحیفه‌‌لردن بو ویکیپئدیياداکی دیگر صحیفه‌‌لره هئچ بیر کئچید يوخدور.",
-       "protectedpages": "Ù\85حاÙ\81ظÙ\87â\80\8câ\80\8cÙ\84Û\8c ØµØ­Û\8cÙ\81ه‌‌لر",
+       "protectedpages": "Ù\82Ù\88Ù\92رÙ\88Ù\86اÙ\86 ØµÙ\81Ø­ه‌‌لر",
        "protectedpages-indef": "يالنیز مدتسیز محافظه‌‌لر",
        "protectedpages-summary": "بۇ صحیفه، ایندیکی قوْرونان موْجود اوْلان صحیفه‌لری لیست ائدیر. یارانماق‌دان قوْرونان باشلیقلارین لیستینی گؤرمک اۆچون [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]]-ه باخین.",
        "protectedpages-cascade": "یالنیز کاسکاد محافظه‌لر",
        "protectedpages-noredirect": "یوْل‌لاندیرمالاری گیزلت",
        "protectedpagesempty": "حال-حاضردا بو پارامئتره اویغون هئچ بیر محافظه‌لی صحیفه یوخ‌دور",
-       "protectedpages-timestamp": "واخت دامغاسی",
+       "protectedpages-timestamp": "چاغ اتیکتی",
        "protectedpages-page": "صفحه",
-       "protectedpages-expiry": "بیتمک تاریخی",
-       "protectedpages-performer": "Ù\82Ù\88Ù\92رÙ\88Û\8cاÙ\86 Ø§Û\8cستÛ\8cÙ\81ادÙ\87â\80\8cÚ\86Û\8c",
+       "protectedpages-expiry": "قورتارماق تاریخی",
+       "protectedpages-performer": "Ù\82Ù\88Ù\92رÙ\88Û\8cاÙ\86 Ø§Û\8cØ´Ù\84دÙ\86",
        "protectedpages-params": "قوْروماق پارامئترلری",
        "protectedpages-reason": "نَدَن‌لیگی",
        "protectedpages-unknown-timestamp": "بیلینمه‌ین",
        "rollbacklinkcount-morethan": "$1-دن چوْخ دییشدیرمه‌نی قایتار",
        "rollbackfailed": "گئری قایتارما اوغورسوزدور",
        "cantrollback": "دییشدیر گئری قایتاریلا بیلمز؛ آخیرینجی دییشدیر صحیفه‌ده اولان یئگانه فالیت‌دیر.",
-       "alreadyrolled": "[[User:$2|$2]] ([[User talk:$2|موزاکیره]] {{int:pipe-separator}} [[Special:Contributions/$2| {{int:contribslink}}]]) طرفین‌دن [[:$1]] صحیفه‌سینده ائدیلمیش سون دییشیک‌لیک گئرییه آلینا بیلمیر؛\nباشقا بیری صحیفه‌ده دییشیک‌لیک ائتدی یا دا صحیفنی گئرییه آلدی.\n\nسون دییشیک‌لیگی ائدن: [[User:$3|$3]] ([[User talk:$3|تالک]] {{int:pipe-separator}} [[Special:Contributions/$3| {{int:contribslink}}]] ).",
+       "alreadyrolled": "[[User:$2|$2]] ([[User talk:$2|دانیشیق]] {{int:pipe-separator}} [[Special:Contributions/$2| {{int:contribslink}}]]) طرفین‌دن [[:$1]] صفحه‌سینده ائدیلمیش سون دییشیک‌لیک قایتاریلمیر؛\nآیری بیری صفحه‌ده دییشیک‌لیک ائتدی یوخسا صفحه‌نی قایتاردی.\n\nسون دییشیک‌لیگی ائدن: [[User:$3|$3]] ([[User talk:$3|دانیشیق]] {{int:pipe-separator}} [[Special:Contributions/$3| {{int:contribslink}}]] ).",
        "editcomment": "دییشیک‌لیک خلاصه‌سی: ''\" $1''\" ایدی.",
        "revertpage": "[[Special:Contributions/$2|$2]] ([[User talk:$2|دانیشیق]]) طرفین‌دن ائدیلمیش دییشیک‌لیک‌لر [[User:$1|$1]] طرفین‌دن ائدیلمیش دییشیک‌لیک‌لره قایتاریلدی.",
        "revertpage-nouser": "{{GENDER:$1|[[User:$1|$1]]}} ایله ائدیلمیش سون نوسخه‌یه، بیر گیزلی ایشلدن طرفین‌دن قایتاریلان دییشیکلیک‌لر",
-       "rollback-success": "$1 Ø·Ø±Ù\81Û\8cÙ\86â\80\8cدÙ\86 Ø§Ø¦Ø¯Û\8cÙ\84Ù\85Û\8cØ´ Ø¯Û\8cÛ\8cشدÛ\8cرâ\80\8cÙ\84ر Ú¯Ø¦Ø±Û\8c Ù\82اÛ\8cتارÛ\8cÙ\84دÛ\8cØ\9b $2 Ø·Ø±Ù\81Û\8cÙ\86â\80\8cدÙ\86 Û\8cارادÛ\8cÙ\84Ù\85Û\8cØ´ Ø³Ù\88Ù\86 Ù\88ئرسÛ\8cا Ø¨Ø±Ù¾Ø§ Ø§Ù\88Ù\84Ù\88Ù\86دو.",
+       "rollback-success": "$1 Ø·Ø±Ù\81Û\8cÙ\86â\80\8cدÙ\86 Ø§Ø¦Ø¯Û\8cÙ\84Ù\85Û\8cØ´ Ø¯Û\8cÛ\8cشدÛ\8cرâ\80\8cÙ\85Ù\87 Ù\84ر Ù\82اÛ\8cتارÛ\8cÙ\84دÛ\8cØ\9b $2 Ø·Ø±Ù\81Û\8cÙ\86â\80\8cدÙ\86 Û\8cارادÛ\8cÙ\84Ù\85Û\8cØ´ Ø³Ù\88Ù\86 Ù\86Ù\88سخÙ\87 Ù\82Ù\88رÙ\88Ù\84دو.",
        "sessionfailure-title": "گیریش خطاسی",
        "sessionfailure": "گیریش اوتورومونوزلا ایلگی‌لی بیر سورون وار گیبی گؤرونویور؛\nبو ائیلئم، اوتوروم گاسپینا کارشی اؤنلئم اولاراک ایپتال ائدیلدی.\nلوتفن \"گئری\" گیدین و گئلدیغینیز سایفایی یئنی‌دئن یوکلئیین، سونرا تئکرار دئنئیین.",
        "changecontentmodel-title-label": "صحیفه باشلیقی",
        "sp-contributions-suppresslog": "باسدیریلمیش ایشلدن فعالیت‌لری",
        "sp-contributions-deleted": "سیلینمیش ایشلدن چالیشمالاری",
        "sp-contributions-uploads": "یوکله‌نَنلر",
-       "sp-contributions-logs": "قئیدلر",
+       "sp-contributions-logs": "ژورناللار",
        "sp-contributions-talk": "دانیشیق",
        "sp-contributions-userrights": "ایستیفاده‌چی حاقلارین ایداره‌ ائتمه‌سی",
        "sp-contributions-blocked-notice": "بو ایستیفاده‌چی حال-حاضردا بلوکلانمیش‌دیر.\nبلوکلاما قئیدلری‌نین سونونجوسو آشاغیدا گؤستریلمیش‌دیر:",
        "version-ext-license": "لیسانس",
        "version-ext-colheader-name": "اوزانتی",
        "version-skin-colheader-name": "قابیق",
-       "version-ext-colheader-version": "سۆروم",
+       "version-ext-colheader-version": "نوسخه",
        "version-ext-colheader-license": "لیسانس",
        "version-ext-colheader-description": "آچیقلاما",
        "version-ext-colheader-credits": "یازیچی‌لار",
        "intentionallyblankpage": "بو صحیفه خصوصیله بوش‌دور.",
        "external_image_whitelist": " #بو سطری اولدوغو کیمی بوراخین <pre>\n#دوزگون ایفاده (رِقولار اِکسپرِشِن) پارچالارینی (یالنیز // آراسیندا اولان قیسمی) آشاغی‌يا قویون\n#بونلار ائشیک‌ده‌کی عکسلرین آدرسلریله تطبیق اولاجاقلار\n#تطبیق اولانلار، عکس کیمی گؤستریله‌جکلر، اولمایانلارا یالنیز بیر باغلانتی گؤستریله‌جکدیر\n#بو # نیشانی ایله باشلایان سطرلر، شرح کیمی نظرده توتولاجاقلار\n#بو حرفلرین کیچیک/بؤیوک اولماغینا حساس دئییل\n\n#بوتون دوزگون ایفاده پارچالارینی، بو سطرین اوستونه قویون. بو سطری اولدوغو کیمی بوراخین</pre>",
        "tags": "مومکون دییشیک‌لیک ائتیکئت‌لری",
-       "tag-filter": "[[Special:Tags|اِتیکِت]] سۆزگُجی:",
+       "tag-filter": "[[Special:Tags|اِتیکِت]] فیلتری:",
        "tag-filter-submit": "سۆزگَج",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|اِتیکِت|اِتیکِتلر}}]]: $2)",
        "tags-title": "اِتیکتلر",
        "feedback-submit": "گؤندر",
        "feedback-thanks": "تشکورلر! سیزین گئری-بیلدیریمینیز «[$2 $1]» صحیفه‌سینه گؤندریلدی.",
        "feedback-thanks-title": "تشکورلر!",
-       "searchsuggest-search": "آختار",
+       "searchsuggest-search": "{{SITENAME}}-دا آختار",
        "searchsuggest-containing": "ساخلانیلیر...",
        "api-error-badaccess-groups": "سیزین بو ویکی‌یه فایل یوکله‌مک ایجازه‌نیز یوخدور.",
        "api-error-badtoken": "ایچری خطاسی: پیس کود.",
index 9a33968..4129d96 100644 (file)
        "passwordreset-emaildisabled": "Был викиҙа электрон почта функцияһы һүндерелгән.",
        "passwordreset-username": "Ҡулланыусы исеме:",
        "passwordreset-domain": "Домен:",
-       "passwordreset-capture": "Хәбәрҙең һуңғы хәлен ҡарарғамы?",
-       "passwordreset-capture-help": "Әгәр был билдәне ҡуйһағыҙ, ҡулланыусыға ебәрелгән ваҡытлыса серһүҙ һеҙгә күрһәтеләсәк.",
        "passwordreset-email": "Электрон почта адресы:",
        "passwordreset-emailtitle": "{{SITENAME}} иҫәп яҙыуы мәғлүмәттәре",
        "passwordreset-emailtext-ip": "Берәү (бәлки һәҙ, $1 IP-адресынан ) {{SITENAME}} ($4) проектындағы иҫәп яҙыуығыҙҙы хәтерләтеүҙе һоратты.\nКиләһе ҡулланыусы {{PLURAL:$3|1=иҫәп яҙыуы|иҫәп яҙыуҙары}} был электрон почта адресы менән бәйле:\n\n$2\n\nБыл ваҡытлыса {{PLURAL:$3|1=серһүҙ|серһүҙҙәр}} {{PLURAL:$5|$5 көн}} ғәмәлдә буласаҡ.\nҺеҙ системала танылырға һәм яңы серһүҙ һайларға тейешһегеҙ.\nӘгәр, һеҙ быны һоратмаған булһағыҙ йәки элекке серһүҙегеҙҙе киренән иҫләһәгеҙ һәм уны үҙгәртергә теләмәһәгеҙ, был хатҡа иғтибар итмәгеҙ һәм элекке серһүҙегеҙҙе ҡулланыуҙы дауам итегеҙ.",
        "passwordreset-emailelement": "Ҡулланыусы исеме: \n$1\n\nВаҡытлыса серһүҙ: \n$2",
        "passwordreset-emailsentemail": "Серһүҙҙе ташлау тураһындағы мәғлүмәт менән электрон почта аша хат ебәрелде.",
        "passwordreset-emailsentusername": "Әгәр был ҡатнашыусының исеменә бәйле  электрон почтаһының адресы булһа, ул саҡта  серһүҙҙе тергеҙеү өсөн  хат ебәреләсәк.",
-       "passwordreset-invalideamil": "Электрон почта адресы ҡабул ителмәй",
+       "passwordreset-invalidemail": "Электрон почта адресы ҡабул ителмәй",
        "changeemail": "Электрон почта адресын үҙгәртергә",
        "changeemail-header": "Электрон почта адресын үҙгәртеү",
        "changeemail-no-info": "Был биткә туранан ирешеү өсөн һеҙгә системала танылыу кәрәк.",
        "right-siteadmin": "Мәғлүмәттәр базаһын асыу һәм ябыу",
        "right-override-export-depth": "5-се тәрәнлеккә тиклем бәйле биттәре менән бергә биттәрҙе сығарыу",
        "right-sendemail": "Башҡа ҡатнашыусыларға электрон почта аша хат ебәреү",
-       "right-passwordreset": "Серһүҙҙе яңыртыу осраҡтарын ҡарау",
        "right-managechangetags": "[[Special:Tags|Билдәләрҙе]] төҙөү һәм (де)активация",
        "right-applychangetags": " [[Special:Tags|тамғаһын]] үҙегеҙҙең төҙөтеү менән ҡулланырға",
        "right-changetags": "Айырым үҙгәртеүҙәрҙә һәм журнал яҙмаланыда[[Special:Tags|тамғаһын]] өҫтәү һәм юйыу",
        "tags-deactivate-not-allowed": "«$1» тамғаһын һүндереп булмай.",
        "tags-deactivate-submit": "һүндерергә",
        "tags-apply-no-permission": "Һеҙҙең үҙгәртеү тамғаһы ҡуйыу хоҡуғы юҡ.",
-       "tags-apply-blocked": "Һеҙ бикле булғас, үҙгәртеүҙәргә тамға ҡуйырға һеҙҙең хоҡуҡ юҡ, һеҙ бикләнгән.",
+       "tags-apply-blocked": "Бикле булғансы, үҙгәртеүҙәргә тамға ҡуйырға хоҡуғығыҙ юҡ.",
        "tags-apply-not-allowed-one": " «$1» тамғаһын ҡулдан файҙаланып булмай",
        "tags-apply-not-allowed-multi": "Ҡулдан {{PLURAL:$2|түбәндәге тамғаны өҫтәп булмай}}: $1",
        "tags-update-no-permission": "Һеҙҙең айырым өлгөләрҙә һәм журнал яҙмаларында тамға йәки үҙгәртеү тамғаһы ҡуйырға хоҡуғығыҙ юҡ.",
-       "tags-update-blocked": "Һеҙгә блок ҡуйылған, үҙгәртеү тамғалары менән идара итә алмайһығыҙ.",
+       "tags-update-blocked": "Блок алынғансы, үҙгәртеү тамғалары менән идара итә алмайһығыҙ.",
        "tags-update-add-not-allowed-one": " «$1» тамғаһын ҡулдан файҙаланып булмай",
        "tags-update-add-not-allowed-multi": "{{PLURAL:$2|түбәндәге тег}} ҡулдан өҫтәлмәй: $1",
        "tags-update-remove-not-allowed-one": " «$1» тамғаһын юйып булмай",
index 76dcb87..585cb1e 100644 (file)
        "yourname": "pesengan penganggen",
        "yourpassword": "kruna sandi",
        "yourpasswordagain": "jumunin kruna sandi",
-       "remembermypassword": "elingang kruna sandi padewekan ring computer niki ( suwennyane $1{{PLURAL:$1|dina}})",
        "login": "malebu ring log",
        "nav-login-createaccount": "malebu log / ngawe pepalihan",
        "userlogin": "malebu log / ngawe pepalihan",
index fceddbc..3808477 100644 (file)
        "yourname": "Nutzanama:",
        "yourpassword": "Passwort:",
        "yourpasswordagain": "Es Passwort no amoi eigebm",
-       "remembermypassword": "Mitm Brausa dauahoft ogmejd bleibm (maximoi $1 {{PLURAL:$1|Dog|Dog}})",
        "yourdomainname": "Dei Domain:",
        "externaldberror": "Entweder es ligt a Feeler bai da externen Authentifiziarung vur oder du derfst dai externs Benytzerkonto ned aktualisirn.",
        "login": "Eilogga",
index c54c9eb..23b877e 100644 (file)
        "yourpasswordagain": "کلمه رمز دگه نویس",
        "createacct-yourpasswordagain": "چه دوبارگ پسوردء بلک ات",
        "createacct-yourpasswordagain-ph": "چه دوبارگ پسوردء بلک ات",
-       "remembermypassword": "می ورودءَ ته ای کامپیوتر بدار (په $1 {{PLURAL:$1|روچ|روچ}})",
        "userlogin-remembermypassword": "منء همک وهد برجاه بدار",
        "userlogin-signwithsecure": "چه ایمنین کنکشنء کارمرز بکن ات",
        "yourdomainname": "شمی دامین",
        "passwordreset-emailtext-user": "کاربر $1 چه {{SITENAME}} شمئی پسوردء واترء لوٹ مان {{SITENAME}} ($4) کتگ انت. {{PLURAL:$3|اکانت|اکانتان}} چیریگین کاربر گون ائ ایمیل ادرس همگرنچ انت:\n\n$2\n\n{{PLURAL:$3|ائ موکتین پسورد|ائ موکتین پسوردان}} رند چه {{PLURAL:$5|یک روچ|$5 روچ}} باطل بیت انت.\nشما ضرور انت انیگء لاگین کن ات ءُ نوکین پسوردء بزیر ات. اگان ادگر شهسء ائ لوٹء راهیگ کتگ انت، یانکه وتی اصلیگین پسوردء هیال کت ات ءُ رندء نلوٹ ات آئرا ٹگل دئیت، بیت که ائ پیگامء نگند بزان ات ءُ وتی پیسریگین پسوردء کارمرز کن ات.",
        "passwordreset-emailelement": "یوزرنام: \n$1\n\nموکتین پسورد: \n$2",
        "passwordreset-emailsentemail": "یک ایمیلء گون پسوردء واترء راهیگ بوت.",
-       "passwordreset-emailsent-capture": "یک ایمیلء پر پسورد واترء واسته که جهلیگء پیش دارگ بیت، راهیگ بیتگ انت.",
-       "passwordreset-emailerror-capture": "واترین ایمیل، که جهلیگء پیش دارگ بیت، اڈ بوت، بلئی آئی راهیگ پر {{GENDER:$2|کاربر}} پکا نبوت: $1",
        "changeemail": "ایمیل ادرسء ٹگل بدئ",
        "changeemail-header": "وتی اکانتء ایمیل ادرسء ٹگل بدئ",
        "changeemail-no-info": "پر یکپارگین دزرسی مان ائ تاکء پیکن لاگین کن ات.",
        "undo-nochange": "چوش که پیداگ انت ویرایش مان انیگء باطل بوتگ انت.",
        "undo-summary": "بازبینی برگردین $1 گون [[Special:مشارکتان/$2|$2]] ([[User talk:$2|گپ]] | [[Special:Contributions/$2|{{MediaWiki:Contribslink}}]])",
        "undo-summary-username-hidden": "بی اثر کتن نسخهٔ $1 گون یک نامالومین کاربرء واسته",
-       "cantcreateaccounttitle": "نه نونیت حساب شرکنت",
        "cantcreateaccount-text": "شرکتن حساب چی ای آدرس آی پی ('''$1''') محدود بوتت توسط [[User:$3|$3]].\n\nدلیلی داتگین توسط $3  شی انت ''$2''",
        "cantcreateaccount-range-text": "اکانتء اڈ کتن چه آی پی ادرسء مان ائ هوار <strong>$1</strong>، که شمئی آی پی (<strong>$4</strong>) مان آئی توکاانت، گون [[User:$3|$3]] متوقف بیتگ انت.\nدرشان کتگین دلیل گون $3، $2 انت.",
        "viewpagelogs": "آمار ای صفحه بچار",
index abacb5a..2fc4b3c 100644 (file)
        "yourpasswordagain": "Pakilaog giraray kan sekretong panlaog:",
        "createacct-yourpasswordagain": "Kumpirmaron an sekretong panlaog",
        "createacct-yourpasswordagain-ph": "Pakikaag otro an sekretong panlaog",
-       "remembermypassword": "Giromdoma an sakong paglaog sa kilyaw (browser) na ini (para sa maksimum na $1 {{PLURAL:$1|aldaw|mga aldaw}})",
        "userlogin-remembermypassword": "Dagos mo akong giromdomon na nakalaog",
        "userlogin-signwithsecure": "Gamiton an seguradong koneksyon",
        "yourdomainname": "An saimong kasakupan:",
        "activeusers-intro": "Iyo in an listahan kan mga paragamit na nagkaigwa nin mga ginibo sa laog kan nakaaging $1 {{PLURAL:$1|aldaw|mga aldaw}}.",
        "activeusers-count": "$1 {{PLURAL:$1|aksyon|mga aksyon}} sa nakaaging {{PLURAL:$3|aldaw|$3 mga aldaw}}",
        "activeusers-from": "Ipahiling an mga paragamit magpoon sa:",
-       "activeusers-hidebots": "Itago an mga panalnga",
-       "activeusers-hidesysops": "Itago an mga administrador",
        "activeusers-noresult": "Mayong mga paragamit na nanagboan.",
        "listgrouprights": "Mga karapatan kan grupo nin paragamit",
        "listgrouprights-summary": "An minasunod iyo an listahan kan mga grupo nin paragamit na pinaghunsay kaining wiki, kaiba an saindang asosyadong mga karapatan nin paggamit.\nPuwedeng magkakaigwa nin [[{{MediaWiki:Listgrouprights-helppage}}|kadagdagang impormasyon]] mapanungod sa indibidwal na mga karapatan.",
        "htmlform-chosen-placeholder": "Magpili nin sarong opsyon",
        "htmlform-title-not-creatable": "\"$1\" bako sarong maimumuknang titulo kan pahina",
        "htmlform-title-not-exists": "$1 bakong eksistido.",
-       "sqlite-has-fts": "$1 na igwang suporta sa kabilogang-teksto nin paghahanap",
-       "sqlite-no-fts": "$1 na mayong suporta sa kabilogang-teksto nin paghahanap",
        "logentry-delete-delete": "$1 {{GENDER:$2|pinagpura na}} pahina $3",
        "logentry-delete-restore": "$1 {{GENDER:$2|pinagbalik}} na pahina $3",
        "logentry-delete-event": "$1 {{GENDER:$2|pinagliwat}}an bisibilidad kan {{PLURAL:$5|sarong talaan nin pangyayari|$5 talaan nin mga pangyayari}} kan $3: $4",
index 30421d5..26db540 100644 (file)
        "passwordreset-emaildisabled": "Функцыі электроннай пошты ў гэтай вікі былі адключаныя.",
        "passwordreset-username": "Імя ўдзельніка:",
        "passwordreset-domain": "Дамэн:",
-       "passwordreset-capture": "Паказаць выніковы электронны ліст?",
-       "passwordreset-capture-help": "Калі Вы пазначыце гэтае поле, электронны ліст (з часовым паролем) будзе паказаны Вам, як толькі ён будзе дасланы ўдзельніку.",
        "passwordreset-email": "Адрас электроннай пошты:",
        "passwordreset-emailtitle": "Падрабязнасьці рахунку ў {{GRAMMAR:месны|{{SITENAME}}}}",
        "passwordreset-emailtext-ip": "Нехта (магчыма Вы, з IP-адрасу $1) зрабіў запыт на скіданьне вашага паролю ў {{GRAMMAR:месны|{{SITENAME}}}} ($4). {{PLURAL:$3|1=Наступны рахунак удзельніка зьвязаны|Наступныя рахункі ўдзельнікаў зьвязаныя}} з гэтым адрасам электроннай пошты:\n\n$2\n\n{{PLURAL:$3|1=Гэты часовы пароль будзе|Гэтыя часовыя паролі будуць}} дзейнічаць $5 {{PLURAL:$5|дзень|дні|дзён}}.\nЦяпер Вам неабходна ўвайсьці і выбраць новы пароль. Калі нехта іншы зрабіў гэты запыт, ці Вы ўспомнілі Ваш пачатковы пароль, які ня хочаце мяняць, Вы можаце праігнараваць гэтае паведамленьне, і працягваць выкарыстоўваць стары пароль.",
        "passwordreset-emailelement": "Імя ўдзельніка: \n$1\n\nЧасовы пароль: \n$2",
        "passwordreset-emailsentemail": "Калі гэты адрас электроннай пошты далучаны да вашага рахунку, тады будзе дасланы ліст пра скідваньне паролю.",
        "passwordreset-emailsentusername": "Калі ёсьць адрас электроннай пошты, злучаны з гэтым імем удзельніка, тады будзе дасланы ліст пра скідваньне паролю.",
-       "passwordreset-emailsent-capture2": "{{PLURAL:$1|1=Электронны ліст|Электронныя лісты}} скіданьня паролю {{PLURAL:$1|1=быў дасланы|былі дасланыя}}. {{PLURAL:$1|1=Імя ўдзельніка і пароль|Сьпіс імёнаў удзельнікаў і паролі}} паказаныя тут.",
-       "passwordreset-emailerror-capture2": "Не атрымалася даслаць {{GENDER:$2|удзельніку|удзельніцы}} ліст электроннай поштай: $1 {{PLURAL:$3|1=Імя ўдзельніка і пароль|Сьпіс імёнаў удзельнікаў і паролі}} паказаныя тут.",
        "passwordreset-nocaller": "Мусіць быць пададзены той, хто робіць выклік",
        "passwordreset-nosuchcaller": "Аўтар выкліку не існуе: $1",
        "passwordreset-ignored": "Скіданьне паролю не адбылося. Магчыма, ня быў наладжаны пастаўшчык?",
-       "passwordreset-invalideamil": "Няслушны адрас электроннай пошты",
+       "passwordreset-invalidemail": "Няслушны адрас электроннай пошты",
        "passwordreset-nodata": "Не былі пададзеныя ні імя ўдзельніка, ні адрас электроннай пошты",
        "changeemail": "Зьмяніць або выдаліць адрас электроннай пошты",
        "changeemail-header": "Запоўніце гэтую форму, каб зьмяніць ваш адрас электроннай пошты. Калі вы жадаеце выдаліць адрас электроннай пошты, далучаны да вашага рахунку, пакіньце поле новага адрасу электроннай пошты пустым пры запаўненьні формы.",
        "userjsyoucanpreview": "<strong>Падказка:</strong> выкарыстоўвайце кнопку «{{int:showpreview}}», каб паспрабаваць новы код JavaScript перад тым, як яго захаваць.",
        "usercsspreview": "<strong>Памятайце, што гэта толькі папярэдні прагляд вашага CSS. Ён яшчэ не запісаны!</strong>",
        "userjspreview": "<strong>Памятайце, што гэта толькі папярэдні прагляд Вашага JavaScript. Ён яшчэ не запісаны!</strong>",
-       "sitecsspreview": "'''Памятайце, што гэта толькі папярэдні прагляд гэтага CSS.'''\n'''Ён яшчэ не захаваны!'''",
-       "sitejspreview": "'''Памятайце, што гэта толькі папярэдні прагляд гэтага коду JavaScript.'''\n'''Ён яшчэ не захаваны!'''",
-       "userinvalidcssjstitle": "'''Папярэджаньне:''' няма тэмы афармленьня «$1».\nПамятайце, што ўласныя старонкі .css і .js павінны мець назву, якая складаецца з малых літараў, напрыклад, {{ns:user}}:Хтосьці/vector.css, а не {{ns:user}}:Хтосьці/Vector.css.",
+       "sitecsspreview": "<strong>Памятайце, што гэта толькі папярэдні прагляд гэтага CSS.\nЁн яшчэ не захаваны!</strong>",
+       "sitejspreview": "<strong>Памятайце, што гэта толькі папярэдні прагляд гэтага коду JavaScript.\nЁн яшчэ не захаваны!</strong>",
+       "userinvalidcssjstitle": "<strong>Папярэджаньне:</strong> няма тэмы афармленьня «$1».\nПамятайце, што ўласныя старонкі .css і .js павінны мець назву, якая складаецца з малых літараў, напрыклад, {{ns:user}}:Хтосьці/vector.css, а не {{ns:user}}:Хтосьці/Vector.css.",
        "updated": "(Абноўлена)",
-       "note": "'''Заўвага: '''",
-       "previewnote": "'''Гэта толькі папярэдні прагляд.'''\nВашыя зьмены яшчэ не былі захаваныя!",
+       "note": "<strong>Заўвага:</strong>",
+       "previewnote": "<strong>Гэта толькі папярэдні прагляд.</strong>\nВашыя зьмены яшчэ не былі захаваныя!",
        "continue-editing": "Перайсьці да рэдагаваньня",
        "previewconflict": "Гэта папярэдні прагляд тэксту зь верхняга вакна рэдагаваньня, так ён будзе выглядаць, калі Вы вырашыце яго захаваць.",
        "session_fail_preview": "Выбачайце! Мы не змаглі апрацаваць вашую праўку праз страту зьвестак сэсіі.\n\nМагчыма, вы выйшлі з сыстэмы. <strong>Калі ласка, праверце, што вы знаходзіцеся ў сыстэме і паспрабуйце яшчэ раз<strong>. Калі не спрацуе, паспрабуйце [[Special:UserLogout|выйсьці]] і ўвайсьці яшчэ раз, а таксама праверце, што ваш браўзэр дазваляе файлы-кукі з гэтага сайту.",
        "right-siteadmin": "блякаваньне і разблякаваньне базы зьвестак",
        "right-override-export-depth": "экспартаваньне старонак, уключаючы зьвязаныя старонкі з глыбінёй да 5",
        "right-sendemail": "адпраўка электронных лістоў іншым удзельнікам",
-       "right-passwordreset": "прагляд электронных лістоў з ачысткай паролю",
        "right-managechangetags": "стварэньне і (дэ)актывацыя [[Special:Tags|метак]]",
        "right-applychangetags": "дадаваць [[Special:Tags|меткі]] пры рэдагаваньні",
        "right-changetags": "дадаваць і выдаляць адвольныя [[Special:Tags|меткі]] да асобных вэрсіяў і запісаў у журнале падзеяў",
        "apisandbox-continue": "Працягнуць",
        "apisandbox-continue-clear": "Ачысьціць",
        "apisandbox-continue-help": "{{int:apisandbox-continue}} [https://www.mediawiki.org/wiki/API:Query#Continuing_queries працягне] апошні запыт; {{int:apisandbox-continue-clear}} ачысьціць парамэтры, зьвязаныя з працягам.",
+       "apisandbox-param-limit": "Увядзіце <kbd>max</kbd>, каб выкарыстаць максымальны ліміт.",
        "booksources": "Крыніцы кніг",
        "booksources-search-legend": "Пошук кніг",
        "booksources-isbn": "ISBN:",
        "magiclink-tracking-rfc-desc": "На гэтай старонцы ўжываюцца магічныя спасылкі RFC. Глядзіце [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org] пра тое, як зладзіць міграцыю.",
        "magiclink-tracking-pmid": "Старонкі, на якіх ужытыя магічныя спасылкі PMID",
        "magiclink-tracking-pmid-desc": "На гэтай старонцы ўжываюцца магічныя спасылкі PMID. Глядзіце [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org] пра тое, як зладзіць міграцыю.",
+       "magiclink-tracking-isbn": "Старонкі, на якіх ужытыя магічныя спасылкі ISBN",
+       "magiclink-tracking-isbn-desc": "На гэтай старонцы ўжываюцца магічныя спасылкі ISBN. Глядзіце [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org] пра тое, як зладзіць міграцыю.",
        "specialloguserlabel": "Выканаўца:",
        "speciallogtitlelabel": "Мэта (назва ці {{ns:user}}:імя_ўдзельніка для ўдзельніка):",
        "log": "Журналы падзеяў",
        "activeusers-intro": "Гэта сьпіс удзельнікаў, якія былі актыўнымі на працягу $1 {{PLURAL:$1|апошняга дня|апошніх дзён|апошніх дзён}}.",
        "activeusers-count": "$1 {{PLURAL:$1|дзеяньне|дзеяньні|дзеяньняў}} за $3 {{PLURAL:$3|апошні дзень|апошнія дні|апошніх дзён}}",
        "activeusers-from": "Паказваць ўдзельнікаў, пачынаючы з:",
+       "activeusers-groups": "Паказаць удзельнікаў, якія належаць да групаў:",
+       "activeusers-excludegroups": "Выключыць удзельнікаў, якія належаць да групаў:",
        "activeusers-noresult": "Удзельнікі ня знойдзеныя.",
        "activeusers-submit": "Паказаць актыўных удзельнікаў",
        "listgrouprights": "Правы групаў удзельнікаў",
        "modifiedarticleprotection": "зьменены ўзровень абароны старонкі «[[$1]]»",
        "unprotectedarticle": "зьнятая абарона з «[[$1]]»",
        "movedarticleprotection": "перанесеныя налады абароны з «[[$2]]» на «[[$1]]»",
+       "protectedarticle-comment": "{{GENDER:$2|Абараніў|Абараніла}} «[[$1]]»",
+       "modifiedarticleprotection-comment": "{{GENDER:$2|Зьмяніў узровень|Зьмяніла ўзровень}} абароны для «[[$1]]»",
+       "unprotectedarticle-comment": "{{GENDER:$2|Зьняў|Зьняла}} абарону з «[[$1]]»",
        "protect-title": "Абарона «$1»",
        "protect-title-notallowed": "Прагляд узроўню абароны «$1»",
        "prot_1movedto2": "[[$1]] перанесеная ў [[$2]]",
        "tags-deactivate": "адключыць",
        "tags-hitcount": "$1 {{PLURAL:$1|зьмена|зьмены|зьменаў}}",
        "tags-manage-no-permission": "Вы ня маеце правоў на зьмену метак.",
-       "tags-manage-blocked": "Вы ня можаце мяняць меткі, калі вы заблякаваныя.",
+       "tags-manage-blocked": "Вы ня можаце мяняць меткі, калі {{GENDER:$1|вы}} заблякаваныя.",
        "tags-create-heading": "Стварэньне новай меткі",
        "tags-create-explanation": "Па змоўчаньні, наваствораныя меткі будуць даступныя для выкарыстаньня ўдзельнікамі і робатамі.",
        "tags-create-tag-name": "Назва меткі:",
        "tags-deactivate-not-allowed": "Немагчыма дэактываваць метку «$1».",
        "tags-deactivate-submit": "Адключыць",
        "tags-apply-no-permission": "Вы ня маеце права прымяняць меткі да вашых рэдагаваньняў.",
-       "tags-apply-blocked": "Вы ня можаце мяняць меткі да вашых зьменаў, калі вы заблякаваныя.",
+       "tags-apply-blocked": "Вы ня можаце мяняць меткі да вашых зьменаў, калі {{GENDER:$1|вы}} заблякаваныя.",
        "tags-apply-not-allowed-one": "Метка «$1» ня можа быць прызначаная ўручную.",
        "tags-apply-not-allowed-multi": "{{PLURAL:$2|Наступную метку|Наступныя меткі}} нельга дадаваць уручную: $1",
        "tags-update-no-permission": "Вы ня маеце права на дадаваньне ці выдаленьне метак зьменаў для асобных вэрсіяў ці запісаў журналаў.",
-       "tags-update-blocked": "Ð\9fакÑ\83лÑ\8c Ð\92Ñ\8b Ð·Ð°Ð±Ð»Ñ\8fкаванÑ\8bÑ\8f, Ð\92Ñ\8b Ð½Ñ\8f Ð¼Ð¾Ð¶Ð°Ñ\86е Ð´Ð°Ð´Ð°Ð²Ð°Ñ\86Ñ\8c Ñ\96 Ð²Ñ\8bдалÑ\8fÑ\86Ñ\8c Ð¼ÐµÑ\82кÑ\96 Ð·Ñ\8cменаÑ\9e.",
+       "tags-update-blocked": "Ð\92Ñ\8b Ð½Ñ\8f Ð¼Ð¾Ð¶Ð°Ñ\86е Ð´Ð°Ð´Ð°Ð²Ð°Ñ\86Ñ\8c Ñ\96 Ð²Ñ\8bдалÑ\8fÑ\86Ñ\8c Ð¼ÐµÑ\82кÑ\96 Ð·Ñ\8cменаÑ\9e, Ð¿Ð°ÐºÑ\83лÑ\8c {{GENDER:$1|вÑ\8b}} Ð·Ð°Ð±Ð»Ñ\8fкаванÑ\8bÑ\8f.",
        "tags-update-add-not-allowed-one": "Метка «$1» ня можа быць дададзеная ўручную.",
        "tags-update-add-not-allowed-multi": "{{PLURAL:$2|1=Наступную метку|Наступныя меткі}} нельга дадаваць уручную: $1",
        "tags-update-remove-not-allowed-one": "Метка «$1» ня можа быць выдаленая.",
index 28112d1..d52668c 100644 (file)
        "passwordreset-emaildisabled": "Функцыі эл.пошты адключаны на гэтай Вікі.",
        "passwordreset-username": "Імя ўдзельніка:",
        "passwordreset-domain": "Дамен:",
-       "passwordreset-capture": "Праглядзець напісаны ліст?",
-       "passwordreset-capture-help": "Калі вы паставіце адзнаку, то вам будзе паказаны ліст з часовым паролем, які адпраўляецца ўдзельніку.",
        "passwordreset-email": "Адрас электроннай пошты:",
        "passwordreset-emailtitle": "Інфармацыя пра рахунак на сайце {{SITENAME}}",
        "passwordreset-emailtext-ip": "Нехта (магчыма вы, з IP-адрасу $1) запытаў скід  вашага пароля ў праекце {{SITENAME}} ($4).\n{{PLURAL:$3|Наступны ўліковы запіс звязаны|Наступныя ўліковыя запісы звязаны}} з гэтым адрасам электроннай пошты:\n\n$2\n\n{{PLURAL:$3|Гэты часовы пароль будзе|Гэтыя часовыя паролі будуць}} дзейнічаць {{PLURAL:$5|адзін дзень|$5 дні|$5 дзён}}.\nВы павінны зараз увайсці ў сістэму і абраць новы пароль. Калі вы не рабілі гэтага запыту, ці ўспомнілі свой зыходны пароль і не жадаеце яго мяняць, вы можаце праігнараваць гэтае паведамленне і працягнуць выкарыстоўваць свой стары пароль.",
        "passwordreset-emailelement": "Імя ўдзельніка: \n$1\n\nЧасовы пароль: \n$2",
        "passwordreset-emailsentemail": "Калі гэты адрас электроннай пошты злучаны з вашым уліковым запісам, будзе адпраўлены ліст пра скід пароля.",
        "passwordreset-emailsentusername": "Калі ёсць адрас электроннай пошты, злучаны з гэтым імем удзельніка, то будзе дасланы ліст пра скід пароля.",
-       "passwordreset-emailsent-capture2": "{{PLURAL:$1|Электронны ліст|электронныя лісты}} скіду пароля адпраўлены. {{PLURAL:$1|Імя ўдзельніка і пароль|Спіс імён удзельнікаў і паролі}} паказаны ніжэй.",
-       "passwordreset-emailerror-capture2": "Не ўдалося даслаць {{GENDER:$2|удзельніку|удзельніцы}} ліст электроннай поштай: $1 {{PLURAL:$3|Імя ўдзельніка і пароль|Спіс імён удзельнікаў і паролі}} паказаны ніжэй.",
        "passwordreset-nocaller": "Мусіць быць указана, хто выклікае",
        "passwordreset-nosuchcaller": "Аўтар выкліку не існуе: $1",
        "passwordreset-ignored": "Скід пароля не быў апрацаваны. Магчыма, не настроены пастаўшчык?",
-       "passwordreset-invalideamil": "Няслушны адрас электроннай пошты",
+       "passwordreset-invalidemail": "Няслушны адрас электроннай пошты",
        "passwordreset-nodata": "Не былі пададзены ні імя ўдзельніка, ні адрас электроннай пошты",
        "changeemail": "Змяніць або выдаліць адрас электроннай пошты",
        "changeemail-header": "Запоўніце гэтую форму, каб змяніць свой адрас электроннай пошты. Калі хочаце выдаліць адрас электроннай пошты, злучаны з вашым уліковым запісам, пакіньце поле новага адраса электроннай пошты пустым пры адпраўцы формы.",
        "userjsyoucanpreview": "<strong>Парада:</strong> Карыстайцеся кнопкай \"''{{int:showpreview}}''\", каб паспрабаваць новы код JavaScript перад тым, як яго запісваць.",
        "usercsspreview": "'''Памятайце, што гэта толькі папярэдні паказ вашага ўласнага CSS. Праўкі яшчэ не замацаваныя!'''",
        "userjspreview": "<strong>Памятайце, што гэта толькі выпрабаванне/папярэдні паказ вашага JavaScript. Праўкі яшчэ не замацаваныя!</strong>",
-       "sitecsspreview": "'''Памятайце, што гэта толькі папярэдні паказ вашага CSS.'''\n'''Праўкі яшчэ не замацаваныя!'''",
-       "sitejspreview": "'''Памятайце, што гэта толькі папярэдні паказ вашага JavaScript.'''\n'''Праўкі яшчэ не замацаваныя!'''",
-       "userinvalidcssjstitle": "'''Увага:''' Няма вокладкі з назвай \"$1\". Памятайце, што свае старонкі .css і .js называюцца толькі малымі літарамі, такім чынам, напр., {{ns:user}}:Foo/vector.css, а не {{ns:user}}:Foo/Vector.css.",
+       "sitecsspreview": "<strong>Памятайце, што гэта толькі папярэдні паказ вашага CSS.\nПраўкі яшчэ не замацаваныя!</strong>",
+       "sitejspreview": "<strong>Памятайце, што гэта толькі папярэдні паказ вашага JavaScript.\nПраўкі яшчэ не замацаваныя!</strong>",
+       "userinvalidcssjstitle": "<strong>Увага:</strong> Няма вокладкі з назвай \"$1\". Памятайце, што свае старонкі .css і .js называюцца толькі малымі літарамі, такім чынам, напр., {{ns:user}}:Foo/vector.css, а не {{ns:user}}:Foo/Vector.css.",
        "updated": "(Абноўлена)",
        "note": "<strong>Заўвага:</strong>",
        "previewnote": "<strong>Памятайце, гэта толькі папярэдні паказ.</strong> Праўкі яшчэ не замацаваныя!",
        "right-siteadmin": "Замыкаць і адмыкаць базу даных",
        "right-override-export-depth": "Экспартаваць старонкі, у тым ліку звязаныя, да глыбіні спасылак 5.",
        "right-sendemail": "Адпраўляць электронныя лісты іншым удзельнікам",
-       "right-passwordreset": "Бачыць электронныя лісты аб змяненні пароля",
        "right-managechangetags": "Ствараць і (дэ)актываваць [[Special:Tags|біркі]]",
        "right-applychangetags": "Прымяняць [[Special:Tags|біркі]] са сваімі праўкамі",
        "right-changetags": "Дадаваць і выдаляць адвольныя [[Special:Tags|біркі]] да асобных версій і запісаў у журнале падзей",
        "apisandbox-alert-field": "Значэнне гэтага поля недапушчальнае.",
        "apisandbox-continue": "Працягнуць",
        "apisandbox-continue-clear": "Ачысціць",
+       "apisandbox-param-limit": "Увядзіце <kbd>max</kbd>, каб выкарыстаць максімальны ліміт.",
        "booksources": "Кнігі",
        "booksources-search-legend": "Знайсці, дзе купіць кнігі",
        "booksources-search": "Пошук",
        "magiclink-tracking-rfc-desc": "На гэтай старонцы ўжываюцца чароўныя спасылкі RFC. Глядзіце [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org] аб тым, як перанесці.",
        "magiclink-tracking-pmid": "Старонкі, на якіх ужытыя чароўныя спасылкі PMID",
        "magiclink-tracking-pmid-desc": "На гэтай старонцы ўжываюцца чароўныя спасылкі PMID. Глядзіце [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org] пра тое, як перанесці.",
+       "magiclink-tracking-isbn": "Старонкі, на якіх ужытыя чароўныя спасылкі ISBN",
+       "magiclink-tracking-isbn-desc": "На гэтай старонцы ўжываюцца чароўныя спасылкі ISBN. Глядзіце [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org] пра тое, як перанесці.",
        "specialloguserlabel": "Выканаўца:",
        "speciallogtitlelabel": "Мэта (назва ці {{ns:user}}:імя_ўдзельніка для ўдзельніка):",
        "log": "Журналы",
        "activeusers-intro": "Гэта пералік удзельнікаў, якія нешта рабілі за апошнія $1 {{PLURAL:$1|дзень|дзён}}.",
        "activeusers-count": "$1 {{PLURAL:$1|дзеянне|дзеянні|дзеянняў}} за апошні{{PLURAL:$3| дзень|я $3 дні|я $3 дзён}}",
        "activeusers-from": "Паказ, пачынаючы з:",
+       "activeusers-groups": "Паказаць удзельнікаў, якія належаць да групаў:",
        "activeusers-noresult": "Няма такіх удзельнікаў.",
        "activeusers-submit": "Паказаць актыўных удзельнікаў",
        "listgrouprights": "Дазволы для груп удзельнікаў",
        "modifiedarticleprotection": "зменены ўзровень аховы \"[[$1]]\"",
        "unprotectedarticle": "знятая ахова з \"[[$1]]\"",
        "movedarticleprotection": "настройкі аховы перанесеныя з \"[[$2]]\" у \"[[$1]]\"",
+       "protectedarticle-comment": "{{GENDER:$2|Абараніў|Абараніла}} «[[$1]]»",
        "protect-title": "Ахова «$1»",
        "protect-title-notallowed": "Прагляд узроўня аховы «$1»",
        "prot_1movedto2": "[[$1]] перанесена ў [[$2]]",
        "tags-activate": "актываваць",
        "tags-deactivate": "адключыць",
        "tags-hitcount": "$1 {{PLURAL:$1|змена|змены|змен}}",
-       "tags-manage-blocked": "Вы не можаце мяняць меткі, калі вы заблакаваныя.",
+       "tags-manage-blocked": "Вы не можаце мяняць меткі, калі {{GENDER:$1|Вы}} заблакаваныя.",
        "tags-create-heading": "Стварыць новую бірку",
        "tags-create-explanation": "Калі не ўказана іншае, новыя біркі будуць даступны для выкарыстання ўдзельнікам і робатам.",
        "tags-create-tag-name": "Назва біркі:",
index 4d8d730..75266e8 100644 (file)
        "passwordreset-emailelement": "Потребителско име: \n$1\n\nВременна парола: \n$2",
        "passwordreset-emailsentemail": "Ако електронната Ви поща е свързана със сметката Ви, на нея е изпратено писмо за възстановяване на паролата.",
        "passwordreset-emailsentusername": "Ако това потребителско име е свързано с електронна поща, е изпратено писмо за възстановяване на паролата.",
-       "passwordreset-invalideamil": "Неправилен email адрес",
+       "passwordreset-invalidemail": "Неправилен email адрес",
        "changeemail": "Промяна или премахване на адреса за е-поща",
        "changeemail-header": "Попълнете формуляра, за да промените адреса на електронната си поща. Ако искате да премахнете адреса на електронната си поща, при попълване на формуляра оставете полето за новия адрес празно.",
        "changeemail-no-info": "За да достъпвате тази страница директно, необходимо е да влезете в системата.",
index 8182cc1..d8b5a55 100644 (file)
        "october-date": "$1 اکتوبر",
        "november-date": "$1 نوامبر",
        "december-date": "$1 ڈ\tسمبر",
+       "period-am": "سوب",
+       "period-pm": "دي‌گر/نواشام",
        "pagecategories": "{{PLURAL:$1|تهر|تهرئان}}",
        "category_header": "تهرِ تاکدیمان «$1»",
        "subcategories": "گونڈ\t تهرئان",
        "category-file-count-limited": "{{PLURAL:$1|جهلگین فایل|$1 جهلگین فایلان}} بی انونین تهرئ تا قرار دارنت.",
        "listingcontinuesabbrev": "(ادامه)",
        "index-category": "آ تاکدیمان که دیسته بوته گنت",
-       "noindex-category": "Ø¢ ØªØ§Ú©Ø¯Û\8cÙ\85اÙ\86 Ú©Ù\87 Ø¯Û\8cستÙ\87 Ù\86Ù\87 Ø¨Ù\88تÙ\87 Ú¯نت",
+       "noindex-category": "Ø¢ ØªØ§Ú©Ø¯Û\8cÙ\85اÙ\86 Ú©Ù\87 Ø§Û\8cÙ\86دÛ\8cکس Ù\86Ù\87 Ø¨Ù\88تÙ\87â\80\8cانت",
        "broken-file-category": "تاکدیمان گو خرابین لینکان بی فایلا",
        "about": "بی باره ها",
        "article": "محتوائین تاکدیم",
        "newwindow": "(نوکین دروازگئ تا پاچ بکنێت)",
        "cancel": "کنسیل",
        "moredotdotdot": "گیشتیر...",
-       "morenotlisted": "ای لڑ\t لیست کامل نه اینت.",
+       "morenotlisted": "ای لڑ\t لیست مومکین اینت که کامل مه‌بيت.",
        "mypage": "تاکدیم",
-       "mytalk": "گپ",
-       "anontalk": "اÛ\8c Ø¢Û\8c Ù¾Û\8c Ù\86شاÙ\86Û\8c Ø¦Û\8c Ø¨Ø§Ø±Ù\87 Ø¦Ø§ گپ",
+       "mytalk": "حبر/گپ",
+       "anontalk": "حبر/گپ",
        "navigation": "جهت یابي",
        "and": "&#32;و",
        "qbfind": "ودی کورتین",
        "unprotectthispage": "ای تاکدیمی قُلپئ ٹگل داتین",
        "newpage": "نوکین تاکدیم",
        "talkpage": "ای تاکدیم باره ئا هبر و گپ",
-       "talkpagelinktext": "گپ",
+       "talkpagelinktext": "حبر/گپ",
        "specialpage": "خاصین تاکدیم",
        "personaltools": "شخصین وسایل",
        "articlepage": "تاکدیمی محتوائانی نمایش",
        "talk": "هبر و گپ",
        "views": "دیستینین",
        "toolbox": "وسایللان",
+       "tool-link-userrights": "{{GENDER:$1|کار زوروکین}} گروپاني تغیر داتین",
+       "tool-link-emailuser": "په ای {{GENDER:$1|کار زوروکا}} ایمیلئ دیم داتین",
        "userpage": "کارزوروکین تاکدیمی دیستین",
        "projectpage": "پروژه ئی تاکدیمی دیستین",
        "imagepage": "فایلی تاکدیما نشان داتین",
        "nocookieslogin": "{{SITENAME}} په کارزوروکانی لوگین بوتینا شه کوکی ئان ایستیپاده ئه کننت.\nشما کوکی ئانه شه کار پرینته ایت.\nمهربانی بکنیت کوکی ئانه په کار بگریت و پدا کوشش بکنیت.",
        "nocookiesfornew": "کارزوروکی هیساب جۆڑ نه بوت، په خاتیریکه نتوانتن آیی منبه ئا تایید بکنن.\nموتمه ئین به یت که کوکی په ئال انت، آ وختا شه سری ن\tۆک بارگیری بکینت و پدا امتیهان بکنیت .",
        "noname": "شما یک موتبرین کار زوروکی ئین نامی ئا مشخص نه کورته ئیت.",
-       "loginsuccesstitle": "کامیابین لوگین",
+       "loginsuccesstitle": "لوگین بوتین",
        "loginsuccess": "'''شما انون گو «$1» ئی نا بی {{SITENAME}} ئی تا داخل بوته ایت.'''",
-       "nosuchuser": "کار زوروکئ گۆ «$1» ئی ناما موجود نه اینت.\nکار زورکئ نام گۆ گۆنڈی یا توُهی ئا هوروپ ئان هساس اینت.\nنامی املا ئا بگنیدیت، یا [[Special:CreateAccount|یک نوکین کار زورکی هسابئ جۆڑ بکنیت]].",
+       "nosuchuser": "کار زوروکئ گۆ «$1»‌ئی ناما موجود نه اینت.\nکار زورکئ نام گۆ گۆنڈین یا ٹوُهین حروفان حساس اینت.\nنامی املا ئا بگنیدیت، یا [[Special:CreateAccount|یک نوکین کار زورکی حسابئ جۆڑ بکنیت]].",
        "nosuchusershort": "هیچ کار زوروکئ بی نامئ  ''$1'' ئا وجود نداریت.\nوتئ املا ئا چیک بکنیت.",
        "nouserspecified": "باید یک کار زوروکئ نام مشخص بکنیت.",
        "login-userblocked": "ای کار زوروک بلاک بوته، په داخل بوتینا اجازه نه اینت.",
        "resetpass_submit": "پاسوردی تنظیم و داخل بوتین",
        "changepassword-success": "شمی پاسوردئ تغیر کامیاب بوت و پاسورد تغیر کورت",
        "changepassword-throttled": "شما بیخی باز وار په لوگین بوتینا کوشش کورته ایت.\nمهربانئ بکنیت دیم شه آیی که پدا کوشش بکنیت $1 صبر کنیت.",
+       "botpasswords-label-create": "جوڑ\t کورتین",
+       "botpasswords-label-update": "اپڈیٹ",
+       "botpasswords-label-cancel": "کنسیل",
+       "botpasswords-label-delete": "پاک کورتین",
+       "botpasswords-label-resetpassword": "پاسوردئ پاک کورتین",
        "resetpass_forbidden": "نه توانیت که پاسوردا تغیر بدهیت",
        "resetpass-no-info": "په ای تاکدیمی دسترسی ئی خاتیرا داخل بئیت.",
        "resetpass-submit-loggedin": "پاسوردی تغیر داتین",
        "passwordreset-emaildisabled": "ایمیلی گزینه بی ای یکی ئی تا پئال نه ونت.",
        "passwordreset-username": "کار زوروکین نام:",
        "passwordreset-domain": "دامنه:",
-       "passwordreset-capture": "ایمیلی آخیر نشان داته بیئت؟",
-       "passwordreset-capture-help": "اگه ای گزینه ئا بگیندیت ، ایمیل (گو موقتین پاسوردا) بی شما نشان داته ئه بیئت و په کار زوروکا هم دیم داته ئه بیئت.",
        "passwordreset-email": "ایمیل ادرس:",
        "passwordreset-emailtitle": "حسابئ مئلومات بی {{SITENAME}}",
        "passwordreset-emailelement": "کار زوروکئ نام: \n$1\n\nموقت ئین چیهرگال: \n$2",
        "revdelete-unsuppress": "محدودیتانئ پاک بوتین بئ پدا دیستین ئی تا ترمیم بوته",
        "revdelete-log": "دلیل:",
        "revdelete-submit": "اعمال بئ {{PLURAL:$1|نخسه|نخسه هان}} ئی سرا انتخاب بوته",
-       "revdelete-success": "'''نخسه ئی ودی بوتین گو کامیابیا اپڈیٹ بوت.'''",
+       "revdelete-success": "'''نخسه‌ئی ودي بوتین گو کامیابیا اپڈیٹ بوت.'''",
        "revdelete-failure": "'''نخسه ئی ودی بوتینئ اپڈیٹ بوتن امکان وجود نداریت :'''\n$1",
-       "logdelete-success": "Ù\84Ù\88Ú¯Û\8cÙ\86 Ø¦Û\8c Ù\82ابÙ\84Û\8cت Ø¯Û\8cست Ú¯Ù\88 Ú©Ø§Ù\85Û\8cابÛ\8cا انجام بوت.",
+       "logdelete-success": "Ù\85Ù\88رÛ\8cدئ Ù\88دÙ\8a Ø¨Ù\88تÛ\8cÙ\86 ØªØºÛ\8cر انجام بوت.",
        "logdelete-failure": "'''لوگین ئی قابلیت دیست تنظیم ئه نه بیئنت:'''\n$1",
        "revdel-restore": "نمایش/نهفتن",
        "pagehist": "تاکدیمی تاریخچه",
        "group-sysop-member": "{{GENDER:$1|مدیر}}",
        "group-bureaucrat-member": "{{GENDER:$1|دیوان‌سالار}}",
        "group-suppress-member": "{{GENDER:$1|نظارت}}",
-       "grouppage-user": "{{ns:project}}:کارزورک ئان",
+       "grouppage-user": "{{ns:project}}:کارزورکئان",
        "grouppage-autoconfirmed": "{{ns:project}}:تائید بُوته ئین کار زوروک ئان",
        "grouppage-bot": "{{ns:project}}:ربات‌ ئان",
        "grouppage-sysop": "{{ns:project}}:مدیر ئان",
        "right-userrights-interwiki": "دیگه ویکی ئی کار زوروکانئ اختیارانی ایڈیٹ کورتین",
        "right-siteadmin": "مئلومات ئین بانکئ قُلپ و یا پاچ کورتین",
        "right-sendemail": "دیم داتین ایمل په دیگه کار زوروکان",
-       "right-passwordreset": "پاسوردی نوک تنظیم کورتینی ایمیل",
        "right-managechangetags": "[[Special:Tags|برچسپ ئانی]] جۆڑ و پاک کورتین مه لوماتین بانکا",
        "newuserlogpage": "کار زوروکئ جوڑ کورتینی سیاه چال",
        "newuserlogpagetext": "ای سیاه چال شه نوکین کار زوروکئ ناما جوڑ بوته.",
        "all-logs-page": "عمومین موچین سیاه چال هان",
        "logempty": "شمی منطبقین آیتم بی سیاه چالئ تا ودی نه بوت.",
        "log-title-wildcard": "آ تاکدیمیانی پدا بگرد که آوانی ئنوان که گۆ ای ئبارت ئا شرو ئه بیئت",
+       "checkbox-all": "موچ",
        "allpages": "موچین تاکدیمان",
        "nextpage": "بعدین تاکدیم ($1)",
        "prevpage": "دیمی تاکدیم ($1)",
        "actionfailed": "کار نه بوت",
        "deletedtext": "«$1» پاک بوت.\nپه آخیرین پاک بوتینین سابقه ئا بئ $2 ئی تا مراجعه بکنیت.",
        "dellogpage": "پاک بوته‌ئانی کورم",
-       "dellogpagetext": "جهلگین لڑلیستا که گیندیت په آخیرئین پاک بوته‌ئین فابلاني خاتیرا اینت.\nموچین نشان داته بوته‌ئین وخت گو (گرینویچ‌ئی وختا) مطابق انت.",
+       "dellogpagetext": "جهلگین لڑلیستا که گیندیت په آخیرئین پاک بوته‌ئین فایلاني خاتیرا اینت.\nموچین نشان داته بوته‌ئین وخت گو (گرینویچ‌ئی وختا) مطابق انت.",
        "deletionlog": "پاک بوته‌ئانی کورم",
        "reverted": "بی دیمتیرین نخسه ئا بیئرگردینته بوت",
        "deletecomment": "دلیل:",
        "sp-contributions-newbies": "فقط نوکین مشارکتان نشان داته بیئنت",
        "sp-contributions-newbies-sub": "په نوک کاران",
        "sp-contributions-newbies-title": "په نوک کارین حسابانی خاتیرا کار زوروکئ شراکت ئان",
-       "sp-contributions-blocklog": "بلاک بوته ئین ئانی سیاهه",
+       "sp-contributions-blocklog": "بلاک بوته ئین‌ئانی کورم‌جاه",
        "sp-contributions-suppresslog": "کار زوروکئ کومک اوشتاته انت",
-       "sp-contributions-deleted": "کار زوروکئ پاک بوئین شراکت ئان",
-       "sp-contributions-uploads": "بُرز بوته هان",
-       "sp-contributions-logs": "سیاهه‌ها",
-       "sp-contributions-talk": "گپ",
-       "sp-contributions-userrights": "کار گیروکی اختیارانی مدیریت",
+       "sp-contributions-deleted": "{{GENDER:$1|کار زوروکئ}} پاک بوته‌ئین دستکاریان",
+       "sp-contributions-uploads": "بُرز بوته‌ئین فایلان",
+       "sp-contributions-logs": "کورم",
+       "sp-contributions-talk": "حبر/گپ",
+       "sp-contributions-userrights": "کار زوروکاني اختیاراني مدیریت کورتین",
        "sp-contributions-blocked-notice": "ای کار زوروکئ دسترسی بی انونین وختا بسته بوته.\nآخرین مورد شه دسترسی ئی سیستین به جهلگا آته:",
        "sp-contributions-blocked-notice-anon": "ای کار زوروکئ دسترسی بی انونین وختا بسته بوته.\nآخرین مورد شه دسترسی ئی سیستین به جهلگا آته:",
        "sp-contributions-search": "گشتین په شراکتان",
        "blocklist-nousertalk": "وتئ گپ ئی تاکدیما نتوان ایڈیٹ کورت",
        "ipblocklist-empty": "بسته بوته ئین ئانی لیست خالی اینت.",
        "blocklink": "بلاک یا بستین",
-       "unblocklink": "پاچ یا انبلاک بێت",
-       "change-blocklink": "بلاک ئی تغیرداتین",
+       "unblocklink": "پاچ کورتین",
+       "change-blocklink": "بلاک‌ئی تغیر داتین",
        "contribslink": "شراکت‌ئان",
        "emaillink": "ایمیلی دیم داتین",
        "blocklogpage": "بستینئ کورم",
        "javascripttest-qunit-intro": "[$1 آزمایشی مشتندانا] بئ mediawiki.org تا بگیندیت.",
        "tooltip-pt-userpage": "{{GENDER:|شمئ کار زُورۆکین}} تاکدیم",
        "tooltip-pt-mytalk": "{{GENDER:|شمئ}} حبر و گپئ تاکدیم",
+       "tooltip-pt-anontalk": "ای آی‌پی ادرس‌ئی دستکاریاني موریدا حبر/گپ",
        "tooltip-pt-preferences": "{{GENDER:|شمئ}} تنظیماتان",
        "tooltip-pt-watchlist": "آ دیمانی لیست که شما آوانی تغیرانا پدگیری ئا کنیت",
        "tooltip-pt-mycontris": "{{GENDER:|شمئ}} شراکتاني لڑ",
        "logentry-protect-modify-cascade": "$1 $3 $4 ئ قُلپئ اندازه گا په {{GENDER:$2|تغییر دات}}[آپشاری]",
        "logentry-rights-rights": "$1 ، $3 ئی عضویتا شه $4 ئی گروپا بئ $5 {{GENDER:$2|تغییر دات}}",
        "logentry-rights-rights-legacy": "$1 عضویتئ گروپا بئ $3 ئا {{GENDER:$2|تغییر دات}}",
-       "logentry-rights-autopromote": "$1 بئ اوتوماتیکین رکما وتر شه $4 بئ $5 {{GENDER:$2|ارتقاء دات}}",
+       "logentry-rights-autopromote": "$1 بِه اوتوماتیکین رقما شه $4 بِه $5‌ئا {{GENDER:$2|ارتقاء کورت}}",
        "logentry-upload-upload": "$1 $3 ئا {{GENDER:$2|بُرز کورت}}",
        "logentry-upload-overwrite": "$1 نوکین نخسه ئی شه $3 ئا {{GENDER:$2|بُرز کورت}}",
        "logentry-upload-revert": "$1 {{GENDER:$2|بُرز کورت}} $3 ئا",
        "special-characters-title-endash": "پاسیله خت",
        "special-characters-title-emdash": "تچکین پاسیله خت",
        "special-characters-title-minus": "منپی نشانگ",
-       "mw-widgets-titleinput-description-redirect": "گردینتین به $1 یی تا"
+       "mw-widgets-titleinput-description-redirect": "گردینتین به $1 یی تا",
+       "log-action-filter-delete": "پاک بوتین‌ئی رقم:",
+       "log-action-filter-all": "موچ"
 }
index 0fcddc3..e137ee9 100644 (file)
        "passwordreset-emailtext-user": "{{SITENAME}} ($4) पर सदस्य $1 राउर {{PLURAL:$3|खाता}} के गुप्तशब्द के पुनर्स्थापित करे के अनुरोध कइले बानी। इ ई-मेल पता से निम्न {{PLURAL:$3|खाता जुड़ल बा}}:\n\n$2\n\n{{PLURAL:$3|इ}} अस्थायी गुप्तशब्द {{PLURAL:$5|एक दिन|$5 दिन}} के बाद काम ना करी।\nरउआ खाता में प्रवेश करके एगो नया गुप्तशब्द अभीये चुन लेवे के चाहीं। यदि इ अनुरोध केहु अउर कइले बा, या फिर रउआ आपन मूल गुप्तशब्द याद आ गईल बा, अउर रउआ {{PLURAL:$3|आपन}} गुप्तशब्द नईखीं बदले के चाहत त, रउआ इ संदेश के अनदेखा कर के आपन पुरनका गुप्तशब्द के प्रयोग जारी रख सकत बानीं।",
        "passwordreset-emailelement": "सदस्यनाम: \n$1\n\nअस्थायी गुप्तशब्द: \n$2",
        "passwordreset-emailsentemail": "एगो गुप्तशब्द रिसेट ई-मेल भेजल जा चुकल बा।",
-       "passwordreset-invalideamil": "अवैध ईमेल पता",
+       "passwordreset-invalidemail": "अवैध ईमेल पता",
        "changeemail": "ई-मेल पता बदलीं",
        "changeemail-header": "खाता के ई-मेल पता बदलीं",
        "changeemail-no-info": "इ पन्ना के सिधे प्रयोग करे खातिर रउआ पहिले खाता में प्रवेश करे के पड़ी।",
index 8a0eb59..3e79912 100644 (file)
        "yourname": "Ngaran pamakai:",
        "yourpassword": "Katasunduk:",
        "yourpasswordagain": "Katik pulang katasunduk:",
-       "remembermypassword": "Ingatakan log babuat ulun dalam komputer naya (salawas $1 {{PLURAL:$1|hari|hari}})",
        "yourdomainname": "Domain Pian:",
        "password-change-forbidden": "Pian kada kawa ma-ubah kata sunduk pada wiki ngini.",
        "externaldberror": "Ada kasalahan apakah kacucukan basis data atawa Pian kada bulih mamutakhirakan akun luar.",
        "passwordreset-emailtext-user": "Ada urang (pinanya Pian, matan alamat IP $1) maminta sabuting pangingat hagan rarincian akun Pian gasan {{SITENAME}} ($4). Pamakai barikut {{PLURAL:$3|akun|akun}}\ntarait awan suril:\n\n$2\n\n{{PLURAL:$3|katasunduk pahadangan ngini|kakatasunduk pahadangan ngini}} akan kadaluarsa dalam {{PLURAL:$5|asa hari|$5 hari}}.\nPian parlu babuat log wan mamilih katasunduk hanyar wayah ini jua. Amun urang lain nang maminta ngini, atawa amun Pian sudah paingatan awan katasunduk Pian, wan Pian kada handak maubahnya, Pian kawa kada mahuwal pasan ngini wan manyambung mamuruk katasunduk lawas Pian.",
        "passwordreset-emailelement": "Ngaran pamakai: \n$1\n\nKatasunduk pahadangan: \n$2",
        "passwordreset-emailsentemail": "Sabuting suril pangingat sudah takirim.",
-       "passwordreset-emailsent-capture": "Sabuting suril pangingat sudah dikirim, nangkaya ditampaiakan di bawah.",
-       "passwordreset-emailerror-capture": "Suril paugingat, nang ditampaikan di bawah, hudah dihasilakan, tagal gagal mangirimakannya ka pamakai: $1",
        "changeemail": "Ganti alamat suril",
        "changeemail-header": "Ganti akun alamat suril",
        "changeemail-no-info": "Pian musti babuat log hagan babuat ka tungkaran ngini langsung.",
        "undo-failure": "Babakan ini kada kawa diwalangi karana ada cakutan di tangah babakan-babakan.",
        "undo-norev": "Babakan kada kawa diwalangi karana ini kadada atawa tahapus.",
        "undo-summary": "←Mawalangakan ralatan $1 ulih [[Special:Contributions/$2|$2]] ([[User talk:$2|Pandir]])",
-       "cantcreateaccounttitle": "Akun kada kawa diulah",
        "cantcreateaccount-text": "Paulahan akun matan alamat IP ('''$1''') sudah diblukir ulih [[User:$3|$3]].\n\nAlasan nang dibari ulih $3 adalah ''$2''",
        "viewpagelogs": "Tiringi log tungkaran ini",
        "nohistory": "Kadada halam babakan gasan tungkaran ini.",
        "activeusers-intro": "Ngini adalah sabuah daptar papamuruk sabuah bantuk kagiatan dalam tauncit $1 {{PLURAL:$1|hari|hahari}}.",
        "activeusers-count": "$1 {{PLURAL:$1|babak|babakan}} dalam tauncit {{PLURAL:$3|hari|$3 hahari}}",
        "activeusers-from": "Manampaiakan papamuruk mulai matan:",
-       "activeusers-hidebots": "Sungkupakan bot",
-       "activeusers-hidesysops": "Sungkupakan pambakal",
        "activeusers-noresult": "Kadada papamuruk tatamu.",
        "listgrouprights": "Galambang hak pamuruk",
        "listgrouprights-summary": "Barikut adalah sabuah daptar matan galambang pamuruk nang ada di wiki ngini, lawan hak ungkai masing-masing.\nAda di [[{{MediaWiki:Listgrouprights-helppage}}|tambahan panjalasan]] pasal hak par urangan.",
        "htmlform-submit": "Kirim",
        "htmlform-reset": "Walangi paubahan",
        "htmlform-selectorother-other": "Lain-lain",
-       "sqlite-has-fts": "$1 awan sukungan panggagaian naskah-hibak",
-       "sqlite-no-fts": "$1 kada-awan sukungan panggagaian naskah-hibak",
        "logentry-delete-delete": "$1 mahapus tungkaran $3",
        "logentry-delete-restore": "$1 dibulikakan tungkaran $3",
        "logentry-delete-event": "$1 mangganti kakawaan dijanaki {{PLURAL:$5|sabuah log kajadian|$5 log kajadian}} pintangan $3: $4",
index bcec78f..488dad2 100644 (file)
@@ -30,7 +30,8 @@
                        "Bodhisattwa",
                        "Matma Rex",
                        "আজিজ",
-                       "Kayser Ahmad"
+                       "Kayser Ahmad",
+                       "NahidSultan"
                ]
        },
        "tog-underline": "সংযোগগুলির নিচে দাগ দেখানো হোক:",
        "passwordreset-emaildisabled": "এই উইকিতে ইমেইল অপশনটি বন্ধ করা হয়েছে।",
        "passwordreset-username": "ব্যবহারকারী নাম:",
        "passwordreset-domain": "ডোমেইন:",
-       "passwordreset-capture": "অনুসন্ধানের ফলাফলের ইমেইল দেখুন?",
-       "passwordreset-capture-help": "আপনি যদি এই পরীক্ষা বক্সে ক্লিক করেন, তবে অস্থায়ী পাসওয়ার্ডসহ একটি ইমেইল আপনাকে দেখানো হবে ও সেইসাথে ব্যবহারকারীকে তা পাঠানো হবে।",
        "passwordreset-email": "ইমেইল ঠিকানা:",
        "passwordreset-emailtitle": "{{SITENAME}} সাইটে ব্যবহারকারীর বিস্তারিত তথ্যাদি",
        "passwordreset-emailtext-ip": "কেউ একজন (সম্ভবত আপনি, $1 আইপি ঠিকানা থেকে) {{SITENAME}} ($4) সাইটের জন্য আপনার\nপাসওয়ার্ড বদলের জন্য অনুরোধ করেছে। নিচের ব্যবহারকারী {{PLURAL:$3|অ্যাকাউন্টটি|অ্যাকাউন্টগুলো}}\nএই ই-মেইল ঠিকানার সাথে সংযুক্ত:\n\n$2\n\n{{PLURAL:$3|এই অস্থায়ী পাসওয়ার্ডটি|এই অস্থায়ী পাসওয়ার্ডগুলো}} আগামী {{PLURAL:$5|এক দিন|$5 দিন}} পর মেয়াদোত্তীর্ণ হয়ে যাবে।\nআপনার অবশ্যই লগ-ইন করে একটি নতুন পাসওয়ার্ড পছন্দ করা উচিত। যদি অন্য কেউ এই অনুরোধ করে থাকে,\nঅথবা আপনি যদি পুরোনো পাসওয়ার্ড মনে করতে পারেন, এবং আপনার সেটি পরিবর্তন করার কোনো ইচ্ছা না থাকে, তবে\nআপনি এই বার্তাটি উপেক্ষা করতে পারে, এবং আপনার পুরোনো পাসওয়ার্ড ব্যবহার করা চালিয়ে যেতে পারেন।",
        "passwordreset-emailelement": "ব্যবহারকারী নাম: \n$1\n\nঅস্থায়ী পাসওয়ার্ড: \n$2",
        "passwordreset-emailsentemail": "যদি এই ই-মেইল ঠিকানা আপনার অ্যাকাউন্টের সাথে সংযুক্ত করা থাকে, তাহলে একটি পাসওয়ার্ড বদলের ইমেইল পাঠানো হবে।",
        "passwordreset-emailsentusername": "যদি এই ব্যবহারকারী নামের সাথে ই-মেইল ঠিকানা সংযুক্ত করা থাকে, তাহলে একটি পাসওয়ার্ড বদলের ইমেইল পাঠানো হবে।",
-       "passwordreset-emailsent-capture2": "পাসওয়ার্ড পুনঃধার্যকরণের {{PLURAL:$1|ইমেইল পাঠানো}} হয়েছে। {{PLURAL:$1|ব্যবহারকারী নাম ও পাসওয়ার্ড|ব্যবহারকারী নাম ও পাসওয়ার্ডের তালিকা}} এখানে দেখা যাবে।",
-       "passwordreset-emailerror-capture2": "{{GENDER:$2|ব্যবহারকারীকে}} ইমেইল পাঠানো যায়নি: $1 {{PLURAL:$3|ব্যবহারকারী নাম ও পাসওয়ার্ড|ব্যবহারকারী নাম ও পাসওয়ার্ডের তালিকা}} এখানে দেখা যাবে।",
        "passwordreset-nocaller": "একটি আহ্বানকারী প্রদান করা আবশ্যক",
        "passwordreset-nosuchcaller": "আহ্বানকারীর অস্তিত্ব নেই: $1",
        "passwordreset-ignored": "পাসওয়ার্ড পুনঃধার্যকরণ করা যায়নি। হয়তো কোন প্রদানকারী কনফিগার করা হয়েনি?",
-       "passwordreset-invalideamil": "ভুল ইমেইল ঠিকানা",
+       "passwordreset-invalidemail": "ভুল ইমেইল ঠিকানা",
        "passwordreset-nodata": "একটি ব্যবহারকারীর নাম বা একটি ইমেল ঠিকানা দুটির একটিও সরবরা দেয়া হয়নি",
        "changeemail": "ই-মেইল ঠিকানা পরিবর্তন বা বাতিল",
        "changeemail-header": "আপনার ইমেল ঠিকানা পরিবর্তন করতে এই ফরমটি পূরণ করুন। আপনি যদি আপনার একাউন্ট থেকে যে কোন ইমেল ঠিকানার এসোসিয়েশন অপসারণ করতে চান, তাহলে ফরমটি জমা দেওয়ার সময় নতুন ইমেইল ঠিকানা খালি রাখুন।",
        "right-createpage": "পাতা তৈরি করো (আলাপের পাতা নয়)",
        "right-createtalk": "আলোচনা পাতা তৈরি করুন",
        "right-createaccount": "নতুন ব্যবহারকারীর অ্যাকাউন্ট তৈরি করুন",
+       "right-autocreateaccount": "স্বয়ংক্রিয়ভাবে একটি বাহ্যিক ব্যবহারকারী অ্যাকাউন্ট দিয়ে প্রবেশ করুন",
        "right-minoredit": "অনুল্লেখ্য সম্পাদনা হিসেবে চিহ্নিত",
        "right-move": "পাতা সরান",
        "right-move-subpages": "পাতাগুলোকে তার উপপাতাসহ সরিয়ে নিন",
        "right-siteadmin": "ডাটাবেজ বন্ধ এবং খুলুন",
        "right-override-export-depth": "৫ম স্তর পর্যন্ত সংযুক্তিসহ একটি পাতা রপ্তানী করুন",
        "right-sendemail": "অন্য ব্যবহারকারীকে ইমেইল পাঠান",
-       "right-passwordreset": "পাসওয়ার্ড পুনঃস্থাপনের ইমেইল দেখুন",
        "right-managechangetags": "[[Special:Tags|ট্যাগ]] তৈরি ও সক্রিয়/নিষ্ক্রিয় করুন",
        "right-applychangetags": "সম্পাদনার সাথে [[Special:Tags|ট্যাগ]] যুক্ত করুন",
        "right-changetags": "নির্দিষ্ট সংস্করণ এবং দীর্ঘ সম্পাদনাগুলোতে [[Special:Tags|ট্যাগ]] সংযোজন ও অপসারণ করুন",
        "right-deletechangetags": "ডাটাবেজ থেকে [[Special:Tags|ট্যাগ]] অপসারণ করা",
+       "grant-generic": "\"$1\" অধিকার স্তর",
        "grant-group-email": "ইমেইল পাঠান",
        "grant-group-customization": "অনুকূলকরণ ও পছন্দ",
        "grant-group-administration": "প্রশাসনিক কাজ সঞ্চালন করুন",
        "grant-editmywatchlist": "আপনার নজরতালিকা সম্পাদনা করুন",
        "grant-editpage": "বিদ্যমান পাতা সম্পাদনা করুন",
        "grant-editprotected": "সংরক্ষিত পাতা সম্পাদনা করুন",
+       "grant-highvolume": "উচ্চ-মাত্রার সম্পাদনা",
+       "grant-oversight": "ব্যবহারকারী লুকান ও ইতিহাস অপসারণ",
        "grant-privateinfo": "ব্যক্তিগত তথ্যে প্রবেশাধিকার",
+       "grant-protect": "পাতাসমূহ সুরক্ষা ও অরক্ষিত করুন",
        "grant-sendemail": "অন্য ব্যবহারকারীকে ইমেইল পাঠান",
        "grant-uploadeditmovefile": "ফাইল আপলোড, প্রতিস্থাপন এবং স্থানান্তর",
        "grant-uploadfile": "নতুন ফাইল আপলোড করুন",
        "apisandbox-dynamic-parameters-add-label": "প্যারামিটার যোগ করুন:",
        "apisandbox-dynamic-parameters-add-placeholder": "প্যারামিটারের নাম",
        "apisandbox-dynamic-error-exists": "\"$1\" নামক একটি প্যারামিটার আগে থেকেই বিদ্যমান।",
+       "apisandbox-deprecated-parameters": "অননুমোদিত প্যারামিটার",
+       "apisandbox-fetch-token": "স্বয়ংক্রিয়ভাবে টোকেন পূরণ করুন",
+       "apisandbox-submit-invalid-fields-title": "কিছু ঘর অবৈধ",
+       "apisandbox-submit-invalid-fields-message": "দয়া করে চিহ্নিত ঘরগুলো সংশোধন করে, পুনরায় চেষ্ঠা করুন।",
        "apisandbox-results": "ফলাফল",
        "apisandbox-sending-request": "API অনুরোধ পাঠানো হচ্ছে...",
        "apisandbox-loading-results": "API ফলাফল গ্রহণ করা হচ্ছে...",
        "apisandbox-request-url-label": "অনুরোধের URL:",
        "apisandbox-request-time": "অনুরোধের সময়: {{PLURAL:$1|$1 মি.সে.}}",
+       "apisandbox-results-fixtoken": "টোকেন সংশোধন ও পুনরায় জমা",
+       "apisandbox-alert-page": "এই পাতার ঘরগুলো বৈধ নয়।",
+       "apisandbox-alert-field": "এই ক্ষেত্রের মান বৈধ নয়।",
        "apisandbox-continue": "অব্যাহত",
        "apisandbox-continue-clear": "পরিস্কার",
        "booksources": "বইয়ের উৎস",
        "table_pager_prev": "পূর্ববর্তী পাতা",
        "table_pager_first": "প্রথম পাতা",
        "table_pager_last": "শেষ পাতা",
-       "table_pager_limit": "প্রতি পাতায় $1 গুলো বিষয়বস্তু দেখাও",
+       "table_pager_limit": "প্রতি পাতায় $1টি উপাদান দেখাও",
        "table_pager_limit_label": "প্রতি পাতায় আইটেম সংখ্যা:",
        "table_pager_limit_submit": "চলো",
        "table_pager_empty": "ফলাফল শূন্য",
index 5553398..085bd1f 100644 (file)
        "yourpassword": "ལམ་ཡིག",
        "userlogin-yourpassword-ph": "ཁྱེད་ཀྱི་གསང་བའི་ཨང་གྲངས་བླུག་རོགས།",
        "yourpasswordagain": "གསང་བའི་ཨང་ངོས་འཛིན་གནང་རོགས།",
-       "remembermypassword": "ངའི་ལམ་ཡིག་འདིར་(མང་མཐའ་ཉིན $1 {{PLURAL:$1}}) དྲན་པར་བྱས།",
        "yourdomainname": "ཁྱེད་ཀྱི་ཁྱབ་ཁུལ།",
        "login": "ནང་འཛུལ།",
        "nav-login-createaccount": "ནང་འཛུལ། / ཐོ་འགོད།",
index 152a1ec..0bdaf65 100644 (file)
        "yourname": "আতাকুরার নাংহান (Username)",
        "yourpassword": "খন্তাচাবিগ (password)",
        "yourpasswordagain": "খন্তাচাবিগ (password) আরাকমু ইকর",
-       "remembermypassword": "আহার গজে সেশনর কা খন্তাচাবি মনে থ(সর্বোচ্চ $1 {{PLURAL:$1|দিনর|দিনর}} কা)",
        "yourdomainname": "তর ডোমেইনগ",
        "externaldberror": "ডাটেবেজর মা বেসেপ আহান ইসে নাইলে তরতা বারেদের একাউন্ট বদালানির য়্যাথাং নেই।",
        "login": "হমানি",
        "post-expand-template-argument-warning": "' ' ' সিঙুইস: ' ' ' এরে পাতাহাত তিলসে টেম্পলেট এহার যুক্তি আহান লাম হেলসে। অহানে যুক্তি অহান বেলানি অইল।",
        "post-expand-template-argument-category": "পতাহাত পুসিসি মডেলর জর থা পরসেগা",
        "parser-template-loop-warning": "মডেলর তরিগ দেখরাং: [[$1]]",
-       "cantcreateaccounttitle": "একাউন্টহান হঙকরানি নাইব",
        "viewpagelogs": "পাতাহানর লগ চা",
        "nohistory": "পাতা এহান পতানির কোন ইতিহাস নেই।",
        "currentrev": "হাদিএহানর পতানি",
index e18bf6c..7fe1f34 100644 (file)
        "otherlanguages": "درزبانهای دیگر",
        "redirectedfrom": "(تصحیح مجدداز$1)",
        "redirectpagesub": "صفحه تصحیح وهدایت مجدد",
+       "redirectto": "ڤاگردۈنی سی:",
        "lastmodifiedat": "این صفحه اخیرا تغییر واصلاح شددر $1, در $2.",
        "viewcount": "این صفحه قابل دسترسی شده است {{PLURAL:$1|once|$1 times}}.",
        "protectedpage": "صفحه حمایت شده",
        "editing": "درحال اصلاح $1",
        "editingsection": "درحال اصلاح $1 (قسمت)",
        "copyrightwarning": "لطفاً دقت کنین که درنظر گریده ابوه که همه شراکتهای ایسا  {{SITENAME}} تحت «$2» منتشر ابون ).\n\n\n(سی دیدن  جزئیات بیشتر به $1 برین\n\nایر نه خوین نوشته‌هاتو بی‌رحمانه اصلاح بوه و به دلخواه ارسال بوه، ایچو نفرستن.<br />\nدرضمن ایسادارین به ایما قول ادین که خودتو یونه نوشتین یا هونه زه یک منبع آزاد با مالکیت عمومی یا مثل هو ورداشتین. '''کارهای دارای کارهای دارای حق کپی رایت را بی‌اجازه نفرستین!'''',",
-       "templatesused": "قالبهای استفاده شده من ای صفحه:",
+       "templatesused": "{{PLURAL:$1|چوٙأ|چوٙأیل}} ب کار گرهڌأ ڤابيڌإ مإن اي بألگأ:",
        "templatesusedpreview": "قالبها  یا الگوهای استفاده وابیده در ای پیش نمایش:",
        "template-protected": "(تحت حمایت)",
        "template-semiprotected": "(نیمه حمایت وابیده)",
        "viewpagelogs": "نشودادن نمایه ها سی ای صفحه",
        "currentrev": "نسخه جاری",
        "revisionasof": "اصلاح $1",
-       "revision-info": "یه نسخه اصلاح شده درتاریخ  $1 بوسیله $2",
+       "revision-info": "نوسقإ ڤانيأري ڤابيڌإ جۈر $1 ڤا $2",
        "previousrevision": "← اصلاح قبلی",
        "nextrevision": "نسخه بعدی →",
        "currentrevisionlink": "نسخه جاری",
        "histfirst": "کهنه ترین",
        "histlast": "تازه ترین",
        "history-feed-item-nocomment": "$1 در $2",
-       "history-title": "گزارش تاریخی نسخه زه \"$1\"",
+       "history-title": "دڤارتإ دیئن ڤيرگار $1",
        "lineno": "سطر $1:",
        "compareselectedversions": "مقایسه نسخه‌های انتخاب‌ وابیده",
        "editundo": "لغو اصلاح آخر",
        "rcnotefrom": "در زیر تغییرات زه تاریخ <b>$2</b> آمده‌اند (تا <b>$1</b> مورد نشو داده ابوه).",
        "rclistfrom": "نشودادن تغییرات تازه با شروع زه $3 $2",
        "rcshowhideminor": "اصلاحات کوچیک $1",
+       "rcshowhideminor-show": "نشون دائن",
        "rcshowhideminor-hide": "قام کردن",
        "rcshowhidebots": "$1 ربات‌ها یا بوتها",
        "rcshowhidebots-show": "نشون دائن",
+       "rcshowhidebots-hide": "قام کردن",
        "rcshowhideliu": "$1 کاریارا ثوت نام کرده",
        "rcshowhideliu-hide": "قام کئردئن",
        "rcshowhideanons": "$1 کاربران داخل نوابیده",
+       "rcshowhideanons-show": "نشون دائن",
        "rcshowhideanons-hide": "قام کئردئن",
        "rcshowhidepatr": "$1 اصلاحات پاسداری شده",
        "rcshowhidemine": "$1 اصلاحات مو",
+       "rcshowhidemine-show": "نشون دائن",
        "rcshowhidemine-hide": "قام کئردئن",
        "rclinks": "نشودادن آخرین $1 تغییر در $2 روز اخیر؛ $3",
        "diff": "تفاوت",
        "ancientpages": "کهنه ترین صفحات",
        "move": "جابجا کردن",
        "movethispage": "جابجایی ای صفحه",
+       "pager-older-n": "{{PLURAL:$1|گپسالتر 1|گپسالتر $1}}",
        "booksources": "منابع کتاب",
+       "booksources-search": "پی جۈري",
        "specialloguserlabel": "کاربر:",
        "speciallogtitlelabel": "عنوان:",
        "log": "نمایه ها",
        "deleteotherreason": "دیه/دلیل اضافی:",
        "deletereasonotherlist": "دلیل دیه",
        "rollbacklink": "عقب گرد",
+       "rollbacklinkcount": "چڤاسإ کردن $1 {{PLURAL:$1|ویرایشت|ویرایشتیا}}",
        "protectlogpage": "نمایه حفاظت وحمایت",
        "prot_1movedto2": "[[$1]] جابجا وابید به[[$2]]",
        "protectcomment": "دلیل:",
        "nolinkshere": "هیچ صفحه ای پیوند نداردبه '''[[:$1]]'''.",
        "isredirect": "صفحه تغییر مسیر",
        "istemplate": "استفاده‌ وابیده داخل صفحه",
+       "isimage": "جانیا هوم پیوند",
        "whatlinkshere-prev": "{{PLURAL:$1|قبلی |مورد قبلی$1}}",
        "whatlinkshere-next": "{{PLURAL:$1|بعدی |مورد بعدی $1}}",
        "whatlinkshere-links": "← لینکها",
        "metadata-help": " ای فایل دارای اطلاعات اضافه‌ای است که احتمالاً با دوربین دیجیتالی‌ یا پویشگری که سی ایجاد یا دیجیتالی‌کردن آن به کار رهده اضاف وابیده . ایر فایل زه وضعیت اولیه اس تغییر داده وابیده بوه ممکنه همه توضیحات موجود اطلاعات عکس را منعکس نکنه",
        "metadata-expand": "نشودادن جزئیات تفصیلی",
        "metadata-collapse": "قایم کردن جزئیات تفصیلی",
-       "metadata-fields": "فراداده EXIF نشو داده وابیده در این پیام وقتی جدول فراداده‌های تصویر جمع وابیده بوه هم نمایش داده ابوه.\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",
+       "metadata-fields": "رشنه یا یا گپ دونسمنیا که د ای پیغوم نومگه کاری بینه د ور گرته بلگه عسگ ن که گات وختی که جدول گپ دونسمنیا واز بوئه نشون دئیه بوئن.\nچی یا هنی سی یه که پیش فرضن قام بوئن.\n*راست کو\n*مدل\n*دم وخت اصل\n*وخت آشگار\n*اف ان شماره\n*ایزو نرخ من سرعت\n*فوکالنس\n*هنرمن\n*کپی رایت\n*حالت جی پی اس \n*جی پی اس گپ حالت\n*جی پی اس همه حالت",
        "exif-orientation": "سرچشمأ",
        "exif-xresolution": "گپ نما کردن اوفقي",
        "exif-yresolution": "گپ نما کردن ز وارو",
        "tag-filter": "[[Special:سرديسا|سرديس]] فيلتر:",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|سرديس|سرديسا}}]]: $2)",
        "logentry-delete-delete": "$1 بألگأ {{GENDER:$2|پاکسا ڤابيأ}} $3",
+       "logentry-upload-upload": "$1 {{GENDER:$2|سوڤار کرده}} $3",
        "searchsuggest-search": "جستن {{SITENAME}}"
 }
index c0c6e29..8962400 100644 (file)
        "activeusers-intro": "Setu aze ur roll eus an implijerien zo bet oberiant mui pe vui e-pad an $1 {{PLURAL:$1|deiz|deiz}} diwezhañ.",
        "activeusers-count": "$1 {{PLURAL:$1|oberiadenn}} abaoe an {{PLURAL:$3|deiz|$3 deiz}} diwezhañ",
        "activeusers-from": "Diskouez an implijerien adal :",
-       "activeusers-hidebots": "Kuzhat ar botoù",
-       "activeusers-hidesysops": "Kuzhat ar verourien",
        "activeusers-noresult": "N'eus bet kavet implijer ebet.",
        "listgrouprights": "Gwirioù ar strolladoù implijer",
        "listgrouprights-summary": "Da-heul ez eus ur roll eus ar strolladoù implijerien termenet war ar wiki-mañ, gant ar gwirioù moned stag outo.\nGallout a ra bezañ [[{{MediaWiki:Listgrouprights-helppage}}|titouroù ouzhpenn]] diwar-benn ar gwirioù hiniennel.",
        "feedback-bugornote": "Ma'z oc'h prest da zeskrivañ ur gudenn deknikel dre ar munud e c'hallit [$1 kemenn un draen].\nA-hend-all e c'hallit ober gant ar furmskrid eeunaet dindan. Ouzhpennet e vo hoc'h evezhiadenn d'ar bajenn \"[$3 $2]\", a-gevret gant hoc'h anv implijer hag anv ar merdeer a rit gantañ.",
        "feedback-cancel": "Nullañ",
        "feedback-close": "Graet",
-       "feedback-error-title": "Fazi",
        "feedback-error1": "Fazi : disoc'h dianav a-berzh an API",
        "feedback-error2": "Fazi : N'eus ket bet gallet degemer ar c'hemmoù",
        "feedback-error3": "Fazi : respont ebet a-berzh an API",
index 114b000..8ff64da 100644 (file)
        "nocookiesfornew": "Korisnički račun nije napravljen, jer nismo mogli da potvrdimo njegov izvor.\nProvjerite da li su cookies omogućeni, ponovo učitajte ovu stranicu i pokušajte ponovo.",
        "noname": "Niste izabrali ispravno korisničko ime.",
        "loginsuccesstitle": "Prijavljen",
-       "loginsuccess": "'''Sad ste prijavljeni na {{SITENAME}} kao \"$1\".'''",
+       "loginsuccess": "<strong>Prijavili ste se na {{GRAMMAR:akuzativ|{{SITENAME}}}} kao \"$1\".</strong>",
        "nosuchuser": "Ne postoji korisnik s imenom \"$1\".\nKorisnička imena razlikuju velika i mala slova.\nProvjerite jeste li ga tačno upisali ili [[Special:CreateAccount|otvorite novi račun]].",
        "nosuchusershort": "Ne postoji korisnik s imenom \"$1\".\nProvjerite jeste li dobro ukucali.",
        "nouserspecified": "Morate izabrati korisničko ime.",
        "passwordreset-emaildisabled": "E-pošta je onemogućena na ovom wikiju.",
        "passwordreset-username": "Korisničko ime:",
        "passwordreset-domain": "Domen:",
-       "passwordreset-capture": "Pogledati krajnji e-mail?",
-       "passwordreset-capture-help": "Ako označite ovu kućicu, e-poruka (s privremenom lozinkom) će biti prikazana i poslata korisniku.",
        "passwordreset-email": "Adresa e-pošte:",
        "passwordreset-emailtitle": "Detalji računa na {{SITENAME}}",
        "passwordreset-emailtext-ip": "Neko (vjerovatno Vi, s IP adrese $1) je zatražio podsjetnik Vaših detalja računa za {{SITENAME}} ($4). Sljedeći {{PLURAL:$3|račun korisnika je|računi korisnika su}} povezani s ovom e-mail adresom:\n\n$2\n\n{{PLURAL:$3|Ova privremena šifra|Ove privremene šifre}} će isteći za {{PLURAL:$5|jedan dan|$5 dana}}.\nTrebate se prijaviti i odabrati novu šifru. Ako je neko drugi napravio ovaj zahtjev, ili ako ste se sjetili Vaše početne šifre, a ne želite je promijeniti, možete zanemariti ovu poruku i nastaviti koristiti staru šifru.",
        "searchprofile-advanced-tooltip": "Traži u ostalim imenskim prostorima",
        "search-result-size": "$1 ({{PLURAL:$2|$2 riječ|$2 riječi}})",
        "search-result-category-size": "{{PLURAL:$1|1 član|$1 člana|$1 članova}} ({{PLURAL:$2|1 potkategorija|$2 potkategorije|$2 potkategorija}}, {{PLURAL:$3|1 datoteka|$3 datoteke|$3 datoteka}})",
-       "search-redirect": "(preusmjeravanje $1)",
+       "search-redirect": "(preusmjereno sa $1)",
        "search-section": "(sekcija $1)",
        "search-category": "(kategorija $1)",
        "search-file-match": "(podudara se sadržaj datoteke)",
        "right-siteadmin": "Zaključavanje i otključavanje baze podataka",
        "right-override-export-depth": "Izvoz stranica uključujući povezane stranice do dubine od 5 linkova",
        "right-sendemail": "Slanje e-maila drugim korisnicima",
-       "right-passwordreset": "Pogledaj e-mailove za obnavljanje šifre",
        "right-managechangetags": "Napravi i (de)aktiviraj [[Special:Tags|oznake]]",
        "right-applychangetags": "Primijeni [[Special:Tags|oznake]] na nečije izmjene",
        "right-changetags": "Dodavanje ili uklanjanje raznih [[Special:Tags|oznaka]] na pojedinačnim verzijama i unosima zapisnika",
        "modifiedarticleprotection": "{{GENDER:|promijenio|promijenila}} je stepen zaštite stranice \"[[$1]]\"",
        "unprotectedarticle": "uklonjena zaštita sa stranice \"[[$1]]\"",
        "movedarticleprotection": "podešavanja zaštite premještena sa \"[[$2]]\" na \"[[$1]]\"",
+       "protectedarticle-comment": "{{GENDER:$2|Zaštitio|Zaštitila}} je stranicu \"[[$1]]\"",
        "protect-title": "Mijenjate nivo zašite za \"$1\"",
        "protect-title-notallowed": "Pregled stepena zaštite za \"$1\"",
        "prot_1movedto2": "članak [[$1]] premješten na [[$2]]",
        "feedback-thanks": "Hvala! Vaša povratna informacija postavljena je na stranicu \"[$2 $1]\".",
        "feedback-thanks-title": "Hvala!",
        "feedback-useragent": "Korisnički agent:",
-       "searchsuggest-search": "Traži",
+       "searchsuggest-search": "Pretraži {{GRAMMAR:akuzativ|{{SITENAME}}}}",
        "searchsuggest-containing": "sadrži...",
        "api-error-badaccess-groups": "Nemate ovlasti da postavljate datoteke na ovoj wiki.",
        "api-error-badtoken": "Unutrašnja greška: token nije ispravan.",
index bf8c180..8bed43c 100644 (file)
        "content-model-text": "simpleng teksto",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
-       "cantcreateaccounttitle": "Diri makagibo sa account",
        "next": "sunod",
        "last": "sinundan",
        "page_first": "una",
        "deletedcontributions": "Napurang mga ambag ka user",
        "linksearch-ok": "Pag-anapon",
        "listusers-submit": "Ipabayad",
-       "activeusers-hidebots": "Itago a bots",
        "listgrouprights-group": "Grupo",
        "listgrouprights-addgroup": "Mairurugang a {{PLURAL:$2|grupo|mga grupo}}: $1",
        "listgrouprights-addgroup-all": "Irugang ngamin na mga grupo",
index f7d7d8b..3fc6bea 100644 (file)
        "passwordreset-emailsentemail": "Si aquesta adreça electrònica està associada al vostre compte, s’enviarà un missatge de restabliment de contrasenya.",
        "passwordreset-emailsentusername": "Si existeix una adreça electrònica associada a aquest nom d'usuari, s’hi enviarà un missatge de reestabliment de contrasenya.",
        "passwordreset-emailsent-capture2": "{{PLURAL:$1|S'ha enviat el correu|S'han enviat els correus}} de restabliment de {{PLURAL:$1|contrasenya|contrasenyes}}. A continuació es mostra {{PLURAL:$1|l'usuari i contrasenya|la llista d'usuaris i contrasenyes}}.",
-       "passwordreset-invalideamil": "Adreça de correu electrònic no vàlida",
+       "passwordreset-invalidemail": "Adreça de correu electrònic no vàlida",
        "passwordreset-nodata": "No s'ha proporcionat cap nom d'usuari ni adreça electrònica",
        "changeemail": "Canvia o elimina l’adreça electrònica",
        "changeemail-header": "Empleneu aquest formulari per canviar la vostra adreça electrònica. Si voleu eliminar qualssevol associacions d’adreces electròniques del vostre compte, deixeu en blanc el camp i envieu el formulari.",
        "booksources-search": "Cerca",
        "booksources-text": "A sota hi ha una llista d'enllaços d'altres llocs que venen llibres nous i de segona mà, i també podrien tenir més informació dels llibres que esteu cercant:",
        "booksources-invalid-isbn": "El codi ISBN donat no és vàlid. Comproveu si l'heu copiat correctament.",
+       "magiclink-tracking-rfc": "Pàgines que usen enllaços màgics RFC",
+       "magiclink-tracking-pmid": "Pàgines que usen enllaços màgics PMID",
+       "magiclink-tracking-isbn": "Pàgines que usen enllaços màgics d'ISBN",
        "specialloguserlabel": "Realitzador:",
        "speciallogtitlelabel": "Objectiu (títol o «{{ns:user}}:nom d’usuari» per a un usuari):",
        "log": "Registres",
index bde0e77..c5df957 100644 (file)
        "booksources-search-legend": "Жайнех лаьцна хаам лахар",
        "booksources-search": "Лахар",
        "booksources-text": "ХӀокху агӀонгахь гул бина сайтийн тӀе хьажоргийн могӀам оцу чохь шуна жайнах лаьцна хаам каро мега. И ю интернет-туьканаш а категорийн библиотекийн категорешкахь лахаран система а.",
+       "magiclink-tracking-rfc": "RFC хьажоргаш лелош йолу агӀонаш",
+       "magiclink-tracking-rfc-desc": "ХӀокху агӀогахь лелош ю RFC хьажоргаш. Хьажа [[https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org] дихьаяккхар муха кхочушдан деза дуьйцу.",
+       "magiclink-tracking-pmid": "PMID хьажоргаш лелош йолу агӀонаш",
+       "magiclink-tracking-pmid-desc": "ХӀокху агӀогахь лелош ю PMID хьажоргаш. Хьажа [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org] дихьаяккхар муха кхочушдан деза дуьйцу.",
+       "magiclink-tracking-isbn": "ISBN хьажоргаш лелош йолу агӀонаш",
+       "magiclink-tracking-isbn-desc": "ХӀокху агӀогахь лелош ю ISBN хьажоргаш. Хьажа [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org] дихьаяккхар муха кхочушдан деза дуьйцу.",
        "specialloguserlabel": "Декъашхо:",
        "speciallogtitlelabel": "Ӏалашо (цӀе я декъашхо):",
        "log": "Тéптарш",
        "activeusers-intro": "Лахахь гойтуш бу  {{PLURAL:$1|1=тӀаьхьара $1 динахь|тӀаьхьара $1 деношкахь}} хийцамаш бина декъашхой.",
        "activeusers-count": "{{PLURAL:$3|1=тӀаьхьарчу $3 динахь|тӀаьхьара $3 деношкахь}} $1 {{PLURAL:$1|1=нисдар|нисдарш}} дина",
        "activeusers-from": "Гучé баха декъашхой, болалуш болу тӀера:",
-       "activeusers-hidebots": "Къайлабаха боташ",
-       "activeusers-hidesysops": "Къайлабаха куьйгалхой",
        "activeusers-noresult": "Декъашхой цакарий.",
        "activeusers-submit": "Гайта жигара декъашхой",
        "listgrouprights": "Декъашхойн тобанийн бакъонаш",
index 8dccaba..2a9ecd5 100644 (file)
        "yourname": "Ngalan sa tiggamit:",
        "yourpassword": "Pasword:",
        "yourpasswordagain": "Itayp og usab ang pasword:",
-       "remembermypassword": "Hinumdomi ako niining brawser (sa kadugayon nga $1 {{PLURAL:$1|ka adlaw|ka mga adlaw}})",
        "yourdomainname": "Ang imong domain:",
        "externaldberror": "May nahitabong authentication database error o kaha wala ka tugoti nga mag-update sa imong eksternal nga akawnt.",
        "login": "Sulod",
        "undo-failure": "Ang pag-usab dili puyde mapa-way-bili tungod sa mga naka-conflict nga intermediate nga mga pag-usab.",
        "undo-norev": "Ang pag-usab dili puyde mapa-way-bili tungod kay wala pa ni mahimo o kaha natangtang na kini.",
        "undo-summary": "Giway-bili  ang rebisyon  $1 ni [[Special:Contributions/$2|$2]] ([[User talk:$2|Hisgot]])",
-       "cantcreateaccounttitle": "Dili makahimo og akawnt",
        "cantcreateaccount-text": "Ang paghimo og akawnt gikan niining IP address ('''$1''') gi-block ni [[User:$3|$3]].\n\nAng rason nga gihatag ni $3 mao nga ''$2''",
        "viewpagelogs": "Tan-awa ang mga log niining panid",
        "nohistory": "Walay kaagi sa pag-usab niining panid.",
index 4274025..b104745 100644 (file)
        "yourname": "Nå'an ni muna'setbi:",
        "yourpassword": "Password:",
        "yourpasswordagain": "Taip ta'lo i password:",
-       "remembermypassword": "Na'hasso iyo-ku login gi este na komputer (for a maximum of $1 {{PLURAL:$1|day|days}})",
        "yourdomainname": "Lugat-mu:",
        "login": "Log in",
        "nav-login-createaccount": "Hålom / fa'tinas kuenta-mu",
        "expensive-parserfunction-category": "Påhinas siha ni meggai mampos na inagang fungksion parser",
        "post-expand-template-inclusion-warning": "Adahi: Mampos dangkolo i mineddong muna'saonao plantiyas.\nTi para u na'saonao palu na plantiyas.",
        "post-expand-template-inclusion-category": "Påhina siha ni maloffan i mineddong muna'saonao plantiyas",
-       "cantcreateaccounttitle": "Ti siña mama'tinas kuenta",
        "cantcreateaccount-text": "Chinemma' mama'tinas kuenta ginen i IP ('''$1''') as [[User:$3|$3]].\n\nNina'i i rasion ''$2'' as $3",
        "viewpagelogs": "Atan i historian påhina",
        "nohistory": "Tåya' historian tinilaika este na påhina.",
index 71a2c6b..572b5e3 100644 (file)
        "passwordreset": "ڕێکخستنەوەی تێپەڕوشە",
        "passwordreset-username": "ناوی بەکارھێنەری:",
        "passwordreset-domain": "پاوان:",
-       "passwordreset-capture": "بینینی ئیمەیڵی ئەنجام؟",
        "passwordreset-email": "ناونیشانی ئیمەیل:",
        "passwordreset-emailtitle": "وردەکارییەکانی ھەژمار لە {{SITENAME}}",
        "passwordreset-emailtext-ip": "‫کەسێک (لەوانەیە خۆت، بە ناونیشانی ئایپیی $1) داوای ڕیسێتکردنەوەی تێپەڕوشەکەت لە {{SITENAME}}دا ($4) کردووە. {{PLURAL:$3|ھەژماری بەکارھێنەریی ژێرەوە پەیوەندیی ھەیە|ھەژمارە بەکارھێنەرییەکانی ژێرەوە پەیوەندییان ھەیە}} بەم ناونیشانەی ئیمەیلەوە:\n\n$2\n\n{{PLURAL:$3|ئەم تێپەڕوشە کاتییە|ئەم تێپەڕوشە کاتییانە}} لە {{PLURAL:$5|ڕۆژێک|$5 ڕۆژ}}دا بەسەردەچێت.\nدەبێ بچیتە ژوورەوە و ھەر ئێستا تێپەڕوشەیەکی نوێ ھەڵبژێریت. ئەگەر کەسێکی تر ئەم داواکارییەی کردووە،\nیان ئەگەر تێپەڕوشە سەرەتاییەکەت ھاتووەتەوە بیرت و ئیتر ناتەوێ بیگۆڕی، دەتوانی گوێ بەم پەیامە نەدەیت و ھەر لە تێپەڕوشە کۆنەکەت کەڵک وەربگریت.",
        "searchprofile-advanced-tooltip": "گەڕان لەناو بۆشایی‌ناوە دڵخوازەکان",
        "search-result-size": "$1 ({{PLURAL:$2|یەک وشە|$2 وشە}})",
        "search-result-category-size": "{{PLURAL:$1|١ ئەندام|$1 ئەندام}} ({{PLURAL:$2|١ ژێرپۆل|$2 ژێرپۆل}}, {{PLURAL:$3|١ پەڕگە|$3 پەڕگە}})",
-       "search-redirect": "(ڕەوانەکەر $1)",
+       "search-redirect": "(ڕەوانەکراوە لە $1ەوە)",
        "search-section": "(بەشی $1)",
        "search-category": "(پۆلی $1)",
        "search-suggest": "ئایا مەبەستت ئەمە بوو: $1",
        "right-siteadmin": "داخستن و کردنەوەی بنکەدراو",
        "right-override-export-depth": "هەناردنی لاپەڕەکان کە لاپەڕەکانی بەستەر پێ‌دراو تا قووڵایی 5 لەخۆ بگرێت",
        "right-sendemail": "ناردنی ئیمەیل بۆ بەکارھێنەرانی تر",
-       "right-passwordreset": "دیتنی ئیمەیلەکانی ڕێکخستنەوەی تێپەڕوشە",
        "right-managechangetags": "دروستکردن و سڕینەوەی [[Special:Tags|تاگەکان]] لە بنکەدراوە",
        "newuserlogpage": "لۆگی دروستکردنی بەکارھێنەر",
        "newuserlogpagetext": "ئەمە لۆگێکی دروستکردنی بەکارھێنەرە.",
        "activeusers-intro": "ئەمە لیستێکی ئەو بەکارھێنەرانەیە کە لە  $1 {{PLURAL:$1|ڕۆژ|ڕۆژ}}ی ڕابردوودا بە جۆرێک چالاکییەکیان ھەبووە.",
        "activeusers-count": "$1 {{PLURAL:$1|کردەوە}} لە دوایین {{PLURAL:$3|ڕۆژ|$3 ڕۆژ}}دا",
        "activeusers-from": "نیشاندانی بەکارھێنەران بە دەستپێکردن لە:",
-       "activeusers-hidebots": "بۆتەکان بشارەوە",
-       "activeusers-hidesysops": "بەڕێوبەران بشارەوە",
        "activeusers-noresult": "هیچ بەکارهێنەرێک نەدۆزرایەوە",
        "listgrouprights": "مافەکانی گرووپی بەکارھێنەر",
        "listgrouprights-summary": "ئەمە لیستێکە لە گرووپەکانی بەکارهێنەر لەسەر ئەم ویکی‌یە، دەگەڵ مافەکانی دەست‌پێ‌گەیشتنی هاوپەیوەندیان.\nلێرەدا لەوانەیە [[{{MediaWiki:Listgrouprights-helppage}}|زانیاری زیاترت]] دەست‌کەوێت سەبارەت بە مافە تاکەکەسیەکان.",
        "feedback-message": "پەیام:",
        "feedback-subject": "بابەت:",
        "feedback-submit": "ناردن",
-       "searchsuggest-search": "گەڕان",
+       "searchsuggest-search": "لە {{SITENAME}} بگەڕێ",
        "searchsuggest-containing": "بە لەبەرگرتنەوەی ...",
        "api-error-empty-file": "ئەو پەڕگەیە کە ناردووتە واڵا بوو.",
        "api-error-file-too-large": "ئەو پەڕگەیە ناردووتە زۆر گەورەیە.",
index 9eee086..457ee31 100644 (file)
        "post-expand-template-inclusion-warning": "'''Attenti:''' a dimensione di i mudelli inclusi è troppa maiò.\nParechji mudelli ùn seranu micca inclusi.",
        "post-expand-template-inclusion-category": "Pagine per e quale a dimensione di i mudelli inclusi supereghja a limita",
        "post-expand-template-argument-category": "Pagine cuntinenti argumenti di mudellu mancanti",
-       "cantcreateaccounttitle": "Registramentu micca pussibile",
        "currentrev": "Ultima revisione",
        "currentrev-asof": "Versione attuale di e $1",
        "revisionasof": "Versione di e $1",
index 9829a07..0899e65 100644 (file)
        "yourname": "Hayo (username):",
        "yourpassword": "Password:",
        "yourpasswordagain": "Liwata ka pindot ang password:",
-       "remembermypassword": "Dumduma ang pagsulod ko sa mini nga kompyuter (pinakadamu na ang $1 {{PLURAL:$1|adlaw|mga adlaw}})",
        "yourdomainname": "Imo domain:",
        "login": "Mag sulod",
        "nav-login-createaccount": "Magsulod / mag-ubra sang account",
index 4d8a73c..e48be9f 100644 (file)
        "yourpasswordagain": "Parolni bir daa yazıñız:",
        "createacct-yourpasswordagain": "Parolni tasdıqlav",
        "createacct-yourpasswordagain-ph": "Parolni bir daa yazıñız",
-       "remembermypassword": "Kirişimni bu kompyuterde hatırla (eñ çoq $1 {{PLURAL:$1|kün|kün}} içün)",
        "userlogin-remembermypassword": "Sistemada qalayım",
        "userlogin-signwithsecure": "Telükesiz bağlama qullanılsın",
        "yourdomainname": "Domen adıñız",
        "undo-failure": "Aradaki deñiştirmeler bir-birine kelişikli olmağanı içün deñiştirme lâğu etilip olamay.",
        "undo-norev": "Deñiştirme lâğu etilip olamaz, çünki o ya da yoq, ya da bar edi, amma yoq etilgen.",
        "undo-summary": "[[Special:Contributions/$2|$2]] ([[User talk:$2|muzakere]]) qullanıcısınıñ $1 nomeralı deñiştirmesini lâğu etüv.",
-       "cantcreateaccounttitle": "Esap yaratmaqnıñ iç çaresi yoq.",
        "cantcreateaccount-text": "Bu IP adresinden ('''$1''') esap yaratuv [[User:$3|$3]] tarafından blok etildi.\n\n$3 mına bu sebepni bildirdi: ''$2''",
        "viewpagelogs": "Bu saifeniñ jurnallarını köster",
        "nohistory": "Bu saifeniñ keçmiş versiyası yoq.",
index d3d8dbd..125ca30 100644 (file)
        "passwordreset-emaildisabled": "E-mailové funkce byly na této wiki vypnuty.",
        "passwordreset-username": "Uživatelské jméno:",
        "passwordreset-domain": "Doména:",
-       "passwordreset-capture": "Prohlédnout si výsledný e-mail?",
-       "passwordreset-capture-help": "Pokud zaškrtnete toto políčko, bude e-mail (s dočasným heslem) kromě zaslání uživateli zobrazen i vám.",
        "passwordreset-email": "E-mailová adresa:",
        "passwordreset-emailtitle": "Informace k účtu na {{grammar:6sg|{{SITENAME}}}}",
        "passwordreset-emailtext-ip": "Někdo (patrně vy, z IP adresy $1) zažádal na {{grammar:6sg|{{SITENAME}}}} ($4) o nastavení nového hesla k vašemu účtu. K této adrese {{PLURAL:$3|je přiřazen následující účet|jsou přiřazeny následující účty}}:\n\n$2\n\n{{PLURAL:$3|Toto dočasné heslo|Tato dočasná hesla}} vyprší za {{PLURAL:$5|jeden den|$5 dny|$5 dnů}}.\nNyní byste se měli přihlásit a zvolit si nové heslo. Pokud tento požadavek poslal někdo jiný nebo jste si na své staré heslo vzpomněli, a nechcete ho tedy změnit, můžete tuto zprávu ignorovat a nadále používat původní heslo.",
        "passwordreset-emailelement": "Uživatelské jméno: \n$1\n\nDočasné heslo: \n$2",
        "passwordreset-emailsentemail": "Pokud je u vašeho účtu nastavena tato e-mailová adresa, bude vám zaslán e-mail pro získání nového hesla.",
        "passwordreset-emailsentusername": "Pokud je u tohoto účtu nastavena e-mailová adresa, bude vám zaslán e-mail pro získání nového hesla.",
-       "passwordreset-emailsent-capture2": "{{PLURAL:$1|Byl odeslán e-mail|Byly odeslány e-maily}} pro získání nového hesla. Zde {{PLURAL:$1|jsou zobrazeny uživatelské jméno a heslo|je zobrazen seznam uživatelských jmen a hesel}}.",
-       "passwordreset-emailerror-capture2": "{{GENDER:$2|Uživateli|Uživatelce}} se nepodařilo odeslat e-mail: $1 Zde {{PLURAL:$3|jsou zobrazeny uživatelské jméno a heslo|je zobrazen seznam uživatelských jmen a hesel}}.",
        "passwordreset-nocaller": "Musí být uveden volající",
        "passwordreset-nosuchcaller": "Volající neexistuje: $1",
        "passwordreset-ignored": "Žádost o nové heslo nebyla zpracována. Možná není nakonfigurován žádný poskytovatel?",
-       "passwordreset-invalideamil": "Neplatná e-mailová adresa",
+       "passwordreset-invalidemail": "Neplatná e-mailová adresa",
        "passwordreset-nodata": "Nebylo zadáno uživatelské jméno ani e-mailová adresa",
        "changeemail": "Změna nebo odstranění e-mailové adresy",
        "changeemail-header": "Vyplněním tohoto formuláře můžete změnit svou e-mailovou adresu. Pokud chcete ze svého účtu odstranit vazbu na všechny e-mailové adresy, ponechte při odeslání formuláře novou e-mailovou adresu prázdnou.",
        "right-siteadmin": "Zamykání a odemykání databáze",
        "right-override-export-depth": "Exportovat stránky včetně odkazovaných stránek až do hloubky 5",
        "right-sendemail": "Odesílání e-mailů ostatním uživatelům",
-       "right-passwordreset": "Prohlížení e-mailů pro znovunastavení hesla",
        "right-managechangetags": "Vytváření a (de)aktivace [[Special:Tags|značek]]",
        "right-applychangetags": "Přidávání [[Special:Tags|značek]] k vlastním změnám",
        "right-changetags": "Přidávání libovolných [[Special:Tags|značek]] na jednotlivé revize a protokolovací záznamy a jejich odebírání",
        "apisandbox-continue": "Pokračovat",
        "apisandbox-continue-clear": "Vymazat",
        "apisandbox-continue-help": "{{int:apisandbox-continue}} bude [https://www.mediawiki.org/wiki/API:Query#Continuing_queries pokračovat] v posledním požadavku; {{int:apisandbox-continue-clear}} vymaže parametry související s pokračováním.",
+       "apisandbox-param-limit": "Pro použití maximálního limitu zadejte <kbd>max</kbd>.",
        "booksources": "Zdroje knih",
        "booksources-search-legend": "Vyhledat knižní zdroje",
        "booksources-search": "Hledat",
        "booksources-text": "Níže je seznam odkazů na servery prodávající knihy, nebo které mohou mít další informace o knihách, které hledáte.",
        "booksources-invalid-isbn": "Zadané ISBN se zdá být neplatné. Zkontrolujte jej s originálním zdrojem.",
-       "magiclink-tracking-rfc": "Stránky používající kouzelné odkazy RFC",
+       "magiclink-tracking-rfc": "Stránky obsahující kouzelné odkazy RFC",
        "magiclink-tracking-rfc-desc": "Tato stránka používá kouzelné odkazy RFC. Více informací k migraci najdete na [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org].",
-       "magiclink-tracking-pmid": "Stránky používající kouzelné odkazy PMID",
+       "magiclink-tracking-pmid": "Stránky obsahující kouzelné odkazy PMID",
        "magiclink-tracking-pmid-desc": "Tato stránka používá kouzelné odkazy PMID. Více informací k migraci najdete na [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org].",
-       "magiclink-tracking-isbn": "Stránky používající kouzelné odkazy ISBN",
+       "magiclink-tracking-isbn": "Stránky obsahující kouzelné odkazy ISBN",
        "magiclink-tracking-isbn-desc": "Tato stránka používá kouzelné odkazy ISBN. Více informací k migraci najdete na [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org].",
        "specialloguserlabel": "Původce:",
        "speciallogtitlelabel": "Cíl (název nebo {{ns:user}}:Jméno pro uživatele):",
        "activeusers-count": "$1 {{PLURAL:$1|akce|akce|akcí}} během {{PLURAL:$3|posledního dne|posledních $3 dnů}}",
        "activeusers-from": "Zobrazit uživatele počínaje od:",
        "activeusers-groups": "Zobrazit uživatele patřící do skupin:",
+       "activeusers-excludegroups": "Nezobrazovat uživatele patřící do skupin:",
        "activeusers-noresult": "Nenalezen žádný uživatel.",
        "activeusers-submit": "Zobrazit aktivní uživatele",
        "listgrouprights": "Práva skupin uživatelů",
        "tags-deactivate": "deaktivovat",
        "tags-hitcount": "$1 {{PLURAL:$1|změna|změny|změn}}",
        "tags-manage-no-permission": "Nemáte oprávnění spravovat značky pro změny.",
-       "tags-manage-blocked": "Nemůžete spravovat značky, když jste {{GENDER:|zablokován|zablokována|zablokováni}}.",
+       "tags-manage-blocked": "Nemůžete spravovat značky, když jste {{GENDER:$1|zablokován|zablokována|zablokováni}}.",
        "tags-create-heading": "Vytvořit novou značku",
        "tags-create-explanation": "Nově vytvořené značky jsou implicitně k dispozici uživatelům a botům.",
        "tags-create-tag-name": "Název značky:",
        "tags-deactivate-not-allowed": "Značku „$1“ nelze deaktivovat.",
        "tags-deactivate-submit": "Deaktivovat",
        "tags-apply-no-permission": "Nemáte oprávnění přidávat značky k vlastním změnám",
-       "tags-apply-blocked": "Nemůžete ke svým změnám přidávat značky, když jste {{GENDER:|zablokován|zablokována|zablokováni}}.",
+       "tags-apply-blocked": "Nemůžete ke svým změnám přidávat značky, když jste {{GENDER:$1|zablokován|zablokována|zablokováni}}.",
        "tags-apply-not-allowed-one": "Značku „$1“ není dovoleno ručně přidávat.",
        "tags-apply-not-allowed-multi": "Následující {{PLURAL:$2|značku|značky}} není dovoleno ručně přidávat: $1",
        "tags-update-no-permission": "Nemáte oprávnění přidávat libovolné značky na jednotlivé revize a protokolovací záznamy a odebírat je",
-       "tags-update-blocked": "Nemůžete přidávat nebo odebírat značky, když jste {{GENDER:|zablokován|zablokována|zablokováni}}.",
+       "tags-update-blocked": "Nemůžete přidávat nebo odebírat značky, když jste {{GENDER:$1|zablokován|zablokována|zablokováni}}.",
        "tags-update-add-not-allowed-one": "Značku „$1“ není dovoleno ručně přidávat.",
        "tags-update-add-not-allowed-multi": "Následující {{PLURAL:$2|značku|značky}} není dovoleno ručně přidávat: $1",
        "tags-update-remove-not-allowed-one": "Značku „$1“ není dovoleno odebírat.",
index 44f9503..8877f73 100644 (file)
        "yourname": "Miono brëkòwnika",
        "yourpassword": "Twòja parola",
        "yourpasswordagain": "Pòwtórzë parolã",
-       "remembermypassword": "Spamiãtôj mòją parolã na tim kòmpùtrze (maksymalno przez $1 {{PLURAL:$1|dzéń|dni|dniów}})",
        "yourdomainname": "Twòjô domena",
        "login": "Wlogùjë mie",
        "nav-login-createaccount": "Logòwanié",
index d614209..7b44e84 100644 (file)
        "userlogin-yourname": "Усă куракан ят",
        "yourpassword": "Вăрттăн сăмах:",
        "yourpasswordagain": "Вăрттăн сăмах тепре çырăр:",
-       "remembermypassword": "Ку компьютер çинче мана астуса хăвармалла (for a maximum of $1 {{PLURAL:$1|1=day|days}})",
        "yourdomainname": "Сирĕн доменă:",
        "login": "Кĕрĕр",
        "nav-login-createaccount": "Сайта кĕр / регистрацилен",
        "post-expand-template-argument-category": "Шаблон аргуменчĕсене сиктерсе хăварнă страницăсем",
        "undo-norev": "Ку тӳрлетĕве пăрахăçлама май çук — вăл е пулман та, е ăна кăларса пăрахнă.",
        "undo-summary": "[[Special:Contributions/$2|$2]] ([[User talk:$2|сӳтсе яв]]) $1 улăштарнине тавăрчĕ",
-       "cantcreateaccounttitle": "Хутшăнакана кĕртме май çук",
        "viewpagelogs": "Ку страницăн журналĕсене пăхмалли",
        "nohistory": "Ку страницăн улшăнусен журналĕ çук.",
        "currentrev": "Хальхи верси",
        "listusers-noresult": "Хутшăнакансем тупăнмарĕç.",
        "listusers-blocked": "(чарса хунă)",
        "activeusers-count": "$1 {{PLURAL:$1|тӳрлетни|тӳрлетнисем}} юлашки {{PLURAL:$3|кун|$3 кунсенче}}",
-       "activeusers-hidesysops": "Администраторĕсене пытар",
        "listgrouprights-group": "Ушкăн",
        "listgrouprights-helppage": "Help:Ушкăн прависем",
        "listgrouprights-members": "(хутшăнакансен списокĕ)",
index ceb726e..1ef05f9 100644 (file)
        "passwordreset-emailelement": "Enw'r defnyddiwr: \n$1\n\nY cyfrinair dros dro: \n$2",
        "passwordreset-emailsentemail": "Anfonwyd e-bost i ailosod eich cyfrinair atoch.",
        "passwordreset-ignored": "Ailosod y cyfrinair nad ymdriniwyd â. Efallai y nid y darparwr yn osod?",
-       "passwordreset-invalideamil": "Cyfeiriad e-bost annilys",
+       "passwordreset-invalidemail": "Cyfeiriad e-bost annilys",
        "changeemail": "Newid y cyfeiriad e-bost",
        "changeemail-header": "Cwbwlhewch y ffurflen hon i newid cyfeiriad e-bost y cyfrifi. I ddileu pob cysylltiad i bob cyfeiriad ebost, gadewch e'n wag.",
        "changeemail-no-info": "Ni allwch fynd at y dudalen hon heblaw eich bod wedi mewngofnodi.",
        "activeusers-intro": "Dyma restr y defnyddwyr a fuont yn weithgar o fewn y {{PLURAL:$1|diwrnod|diwrnod|deuddydd|tridiau|$1 diwrnod|$1 diwrnod}} diwethaf.",
        "activeusers-count": "$1 {{PLURAL:$1|golygiad|golygiad|olygiad|golygiad}} yn ystod y {{PLURAL:$3|diwrnod|diwrnod|deuddydd|tridiau|$3 diwrnod}} diwethaf",
        "activeusers-from": "Rhestru'r defnyddwyr gan ddechrau gyda:",
-       "activeusers-hidebots": "Cuddio botiau",
-       "activeusers-hidesysops": "Cuddio gweinyddwyr",
        "activeusers-noresult": "Dim defnyddwyr i'w cael.",
        "activeusers-submit": "Dangos defnyddwyr byw",
        "listgrouprights": "Galluoedd grwpiau defnyddwyr",
index 792991a..0e27491 100644 (file)
        "passwordreset-emaildisabled": "Die E-Mail-Funktionen wurden auf diesem Wiki deaktiviert.",
        "passwordreset-username": "Benutzername:",
        "passwordreset-domain": "Domain:",
-       "passwordreset-capture": "Die E-Mail-Nachricht ansehen?",
-       "passwordreset-capture-help": "Wenn du dieses Kästchen ankreuzt, wird die E-Mail-Nachricht mit dem temporären Passwort sowohl dir angezeigt als auch dem Benutzer zugesandt.",
        "passwordreset-email": "E-Mail-Adresse:",
        "passwordreset-emailtitle": "Benutzerkontoinformationen auf {{SITENAME}}",
        "passwordreset-emailtext-ip": "Jemand mit der IP-Adresse $1, wahrscheinlich du selbst, hat eine Zurücksetzung deines Passworts bei {{SITENAME}} angefordert ($4). {{PLURAL:$3|Das folgende Benutzerkonto ist|Die folgenden Benutzerkonten sind}} mit dieser E-Mail-Adresse verknüpft:\n\n$2\n\n{{PLURAL:$3|Dieses temporäre Passwort läuft|Diese temporären Passwörter laufen}} innerhalb von {{PLURAL:$5|einem Tag|$5 Tagen}} ab.\nDu solltest dich anmelden und ein neues Passwort vergeben. Falls jemand anderes diese Anfrage getätigt hat oder du dich wieder an dein ursprüngliches Passwort erinnern kannst und es nicht länger ändern möchtest, kannst du diese Nachricht ignorieren und weiterhin dein altes Passwort benutzen.",
        "passwordreset-emailelement": "Benutzername: \n$1\n\nTemporäres Passwort: \n$2",
        "passwordreset-emailsentemail": "Falls diese E-Mail-Adresse mit deinem Benutzerkonto verknüpft ist, wird eine Passwort-Zurücksetzungs-E-Mail versandt.",
        "passwordreset-emailsentusername": "Falls es eine E-Mail-Adresse gibt, die mit diesem Benutzernamen verknüpft ist, wird eine Passwort-Zurücksetzungs-E-Mail versandt.",
-       "passwordreset-emailsent-capture2": "Die Passwort-Zurücksetzungs-{{PLURAL:$1|E-Mail wurde|E-Mails wurden}} versandt. {{PLURAL:$1|Der Benutzername und das Passwort|Die Liste der Benutzernamen und Passwörter}} wird hier angezeigt.",
-       "passwordreset-emailerror-capture2": "Das Senden der E-Mail an {{GENDER:$2|den Benutzer|die Benutzerin}} ist fehlgeschlagen: $1 {{PLURAL:$3|Der Benutzername und das Passwort|Die Liste der Benutzernamen und Passwörter}} wird hier angezeigt.",
        "passwordreset-nocaller": "Es muss ein Rufer angegeben werden",
        "passwordreset-nosuchcaller": "Rufer ist nicht vorhanden: $1",
        "passwordreset-ignored": "Die Passwortzurücksetzung konnte nicht verarbeitet werden. Vielleicht wurde kein Dienstanbieter konfiguriert?",
-       "passwordreset-invalideamil": "Ungültige E-Mail-Adresse",
+       "passwordreset-invalidemail": "Ungültige E-Mail-Adresse",
        "passwordreset-nodata": "Weder ein Benutzername noch eine E-Mail-Adresse wurde angegeben",
        "changeemail": "E-Mail-Adresse ändern oder entfernen",
        "changeemail-header": "Fülle dieses Formular vollständig aus, um deine E-Mail-Adresse zu ändern. Falls du die Zuweisung einer E-Mail-Adresse zu deinem Benutzerkonto entfernen möchtest, lasse beim Übermitteln des Formulars das Feld für die neue E-Mail-Adresse leer.",
        "right-siteadmin": "Datenbank sperren und entsperren",
        "right-override-export-depth": "Exportiere Seiten einschließlich verlinkter Seiten bis zu einer Tiefe von 5",
        "right-sendemail": "E-Mails an andere Benutzer senden",
-       "right-passwordreset": "Passwort eines Benutzers zurücksetzen und die dazu verschickte E-Mail einsehen",
        "right-managechangetags": "[[Special:Tags|Markierungen]] erstellen und (de)aktivieren",
        "right-applychangetags": "[[Special:Tags|Markierungen]] zusammen mit den Änderungen anwenden",
        "right-changetags": "Beliebige [[Special:Tags|Markierungen]] zu einzelnen Versionen und Logbucheinträgen hinzufügen und entfernen",
        "apisandbox-continue": "Fortfahren",
        "apisandbox-continue-clear": "Löschen",
        "apisandbox-continue-help": "Mit „{{int:apisandbox-continue}}“ kann man die letzte Anfrage [https://www.mediawiki.org/wiki/API:Query#Continuing_queries fortfahren]; „{{int:apisandbox-continue-clear}}“ löscht fortsetzungsbezogene Parameter.",
+       "apisandbox-param-limit": "Gib <kbd>max</kbd> ein, um das maximale Limit zu verwenden.",
        "booksources": "ISBN-Suche",
        "booksources-search-legend": "Suche nach Bezugsquellen für Bücher",
        "booksources-search": "Suchen",
        "activeusers-count": "$1 {{PLURAL:$1|Aktion|Aktionen}} in den {{PLURAL:$3|letzten 24 Stunden|vergangenen $3 Tagen}}",
        "activeusers-from": "Zeige Benutzer ab:",
        "activeusers-groups": "Benutzer anzeigen, die zu diesen Gruppen gehören:",
+       "activeusers-excludegroups": "Benutzer ausschließen, die zu diesen Gruppen gehören:",
        "activeusers-noresult": "Keine Benutzer gefunden.",
        "activeusers-submit": "Aktive Benutzer anzeigen",
        "listgrouprights": "Benutzergruppenrechte",
        "tags-deactivate": "deaktivieren",
        "tags-hitcount": "$1 {{PLURAL:$1|Änderung|Änderungen}}",
        "tags-manage-no-permission": "Du hast keine Berechtigung, Änderungsmarkierungen zu verwalten.",
-       "tags-manage-blocked": "Du kannst keine Änderungsmarkierungen verwalten, während du gesperrt bist.",
+       "tags-manage-blocked": "Du kannst keine Änderungsmarkierungen verwalten, während {{GENDER:$1|du}} gesperrt bist.",
        "tags-create-heading": "Eine neue Markierung erstellen",
        "tags-create-explanation": "Standardmäßig werden neu erstellte Markierungen für die Verwendung durch Benutzer und Bots verfügbar gemacht.",
        "tags-create-tag-name": "Name der Markierung:",
        "tags-deactivate-not-allowed": "Es ist nicht möglich, die Markierung „$1“ zu deaktivieren.",
        "tags-deactivate-submit": "Deaktivieren",
        "tags-apply-no-permission": "Du hast keine Berechtigung, um Änderungsmarkierungen zusammen mit deinen Änderungen anzuwenden.",
-       "tags-apply-blocked": "Du kannst keine Änderungsmarkierungen zusammen mit deinen Änderungen anwenden, während du gesperrt bist.",
+       "tags-apply-blocked": "Du kannst keine Änderungsmarkierungen zusammen mit deinen Änderungen anwenden, während {{GENDER:$1|du}} gesperrt bist.",
        "tags-apply-not-allowed-one": "Die Markierung „$1“ darf nicht manuell angewendet werden.",
        "tags-apply-not-allowed-multi": "Die {{PLURAL:$2|folgende Markierung darf|folgenden Markierungen dürfen}} nicht manuell angewendet werden: $1",
        "tags-update-no-permission": "Du hast keine Berechtigung, um Änderungsmarkierungen von einzelnen Versionen oder Logbucheinträgen hinzuzufügen oder zu entfernen.",
-       "tags-update-blocked": "Du kannst keine Änderungsmarkierungen hinzufügen oder entfernen, während du gesperrt bist.",
+       "tags-update-blocked": "Du kannst keine Änderungsmarkierungen hinzufügen oder entfernen, während {{GENDER:$1|du}} gesperrt bist.",
        "tags-update-add-not-allowed-one": "Die Markierung „$1“ darf nicht manuell hinzugefügt werden.",
        "tags-update-add-not-allowed-multi": "Die {{PLURAL:$2|folgende Markierung darf|folgenden Markierungen dürfen}} nicht manuell hinzugefügt werden: $1",
        "tags-update-remove-not-allowed-one": "Die Markierung „$1“ darf nicht entfernt werden.",
index d5a49eb..6b68453 100644 (file)
        "specialpage": "Pela xısusiye",
        "personaltools": "Hacetê şexsiy",
        "articlepage": "Pera zerreki bıvin",
-       "talk": "Werênayış",
+       "talk": "Behs",
        "views": "Asayışi",
        "toolbox": "Haceti",
        "tool-link-userrights": "Grubanê {{GENDER:$1|karberi}} bıvırnë",
        "passwordreset-emaildisabled": "Na wikid hısusiyeté e-posta dewera vıcyayé",
        "passwordreset-username": "Nameyê karberi:",
        "passwordreset-domain": "Domain:",
-       "passwordreset-capture": "neticey e-postay bıasne yo?",
-       "passwordreset-capture-help": "Şıma na dorek morkerê se, e-posta (idareten eposta ya) şıma rê yana karbera rê rışêno.",
        "passwordreset-email": "Adresa e-postey:",
        "passwordreset-emailtitle": "Hesab timarê {{SITENAME}}",
        "passwordreset-emailtext-ip": "Jeweri, {{SITENAME}} ra (ma heta şımayê, $1 IP adresi ra) ($4) teferuatê hesabdê şıma  va wa biyaro xo viri. Karbero ke cêrdeyo {{PLURAL:$3|hesaba|eno hesaba}} ena e-posta adresiya aleqey cı esto:\n\n$2\n\n{{PLURAL:$3|ena parola idaretena|ena parola idareten}} {{PLURAL:$5|jew roc|$5  roca}}rêya.\nEna parolaya deqewe de u xorê ju parolaya newi bıweçine. Parolaya şıma emaya şıma viri se  yana  ena e-posta şıma nê weştase u şıma qayıl niye parolaya xo bıvurnese, ena mesacer peygoş bıkerê.",
        "passwordreset-emailtext-user": "$1 enê karberi, {{SITENAME}}  ra ($4) teferuatê hesab dê şıma  va wa biyaro xo viri. Karbero ke cêrdeyo {{PLURAL:$3|hesaba|eno hesaba}} ena e-posta adresiya aleqey cı esto:\n\n$2\n\n{{PLURAL:$3|ena parola idaretena|ena parola idareten}} {{PLURAL:$5|jew roc|$5  roca}}rêya.\nEna parolaya deqewe de u xorê ju parolaya newi bıweçine. Parolaya şıma emaya şıma viri se  yana  ena e-posta şıma nê weştase u şıma qayıl niye parolaya xo bıvurnese, ena mesacer peygoş bıkerê.",
        "passwordreset-emailelement": "Nameyê karberi: \n$1\n\nParolaya vêrdiye: \n$2",
        "passwordreset-emailsentemail": "Eger kı ena e-posta şıma rê se, yew e-posta do bırışiyo eno hesab.",
-       "passwordreset-invalideamil": "Adresê eposta raşt niya",
+       "passwordreset-invalidemail": "Adresê eposta raşt niya",
        "changeemail": "E-posta adresa xo wedarne",
        "changeemail-header": "E-posta adresa xo vuriyayışi rë ena former pır kerë. Eger kı şıma qayılë kı e postay adresi ra wedarnë se formi rıştış dı heruna e posta veng verdë",
        "changeemail-no-info": "Şıma gani bıkewê pele ke derdest bıresê na pele.",
        "right-siteadmin": "Database kilit bike u a bike",
        "right-override-export-depth": "Peleyanê ke tede linkanê 5 ra zafyer estê ay export bike",
        "right-sendemail": "Karberanê binî ra e-mail bişirav",
-       "right-passwordreset": "E-postayanê parola reset kerdışa vineno",
        "right-managechangetags": "[[Special:Tags|Etiketi]] vıraz u aktiv (me)ke",
        "right-applychangetags": "[[Special:Tags|Etiketa]]  vurnayışana piya dezge fi.",
        "grant-group-page-interaction": "Peran na tesiri",
index cf025f0..f59d719 100644 (file)
        "yourpasswordagain": "Šćitne gronidło hyšći raz zapódaś:",
        "createacct-yourpasswordagain": "Gronidło wobkšuśiś",
        "createacct-yourpasswordagain-ph": "Zapódaj gronidło hyšći raz",
-       "remembermypassword": "Na toś tom licadle pśizjawjony wóstaś (za maksimalnje $1 {{PLURAL:$1|źeń|dnja|dny|dnjow}})",
        "userlogin-remembermypassword": "Pśizjawjony wóstaś",
        "userlogin-signwithsecure": "Wěsty zwisk wužywaś",
        "yourdomainname": "Twója domejna",
        "activeusers-intro": "To jo lisćina wužywarjow, kotrež su byli aktiwne za {{PLURAL:$1|slědny źeń|slědnej $1 dnja|slědne $1 dny|slědnych $1 dnjow}}.",
        "activeusers-count": "$1 {{PLURAL:$1|akcija|akciji|akcije|akcijow}} w {{PLURAL:$3|slědnem dnju|slědnyma $3 dnjoma|slědnych $3 dnjach}}",
        "activeusers-from": "Wužywarjow zwobrazniś, zachopinajucy z:",
-       "activeusers-hidebots": "Boty schowaś",
-       "activeusers-hidesysops": "Administratorow schowaś",
        "activeusers-noresult": "Žedne wužywarje namakane.",
        "listgrouprights": "Pšawa wužywarskeje kupki",
        "listgrouprights-summary": "To jo lisćina wužywarskich kupkow definěrowanych w toś tom wikiju z jich zwězanymi pśistupnymi pšawami. Móžo [[{{MediaWiki:Listgrouprights-helppage}}|pśidatne informacije]] wó jadnotliwych pšawach daś.",
        "htmlform-cloner-create": "Wěcej pśidaś",
        "htmlform-cloner-delete": "Wótpóraś",
        "htmlform-cloner-required": "Nanejmjenjej jadna gódnota jo trěbna.",
-       "sqlite-has-fts": "Wersija $1 z pódpěru za połnotekstowe pytanje",
-       "sqlite-no-fts": "Wersija $1 bźez pódpěry za połnotekstowe pytanje",
        "logentry-delete-delete": "$1 jo bok $3 {{GENDER:$2|wulašował|wulašowała}}",
        "logentry-delete-restore": "$1 jo bok $3 {{GENDER:$2|wótnowił|wótnowiła}}",
        "logentry-delete-event": "$1 jo {{GENDER:$2|změnił|změniła}} widobnosć {{PLURAL:$5|protokolowego zapiska|$5 protokoloweju zapiskowu|$5 protokolowych zapiskow}} na $3: $4",
index e40e405..68ce13c 100644 (file)
        "yourpasswordagain": "Mintaipo kaatalib:",
        "createacct-yourpasswordagain": "Kompomo borospanalib",
        "createacct-yourpasswordagain-ph": "Posuango kaagu borospanalib",
-       "remembermypassword": "Soroho ot loginku id popogihuman diti (gisom solinaid do $1 {{PLURAL:$1|tadau|madau}})",
        "userlogin-remembermypassword": "Potilombuso oku do poinsuang log",
        "userlogin-signwithsecure": "Gunoo noputan noumoligan",
        "yourdomainname": "Damin nu:",
        "passwordreset-emailtitle": "Kointalangan takaun id {{SITENAME}}",
        "passwordreset-emailelement": "Ngaranmoguno: \n$1\n\nKaatalib daamot: \n$2",
        "passwordreset-emailsentemail": "Surat-i pononsorou nakaatod noh.",
-       "passwordreset-emailsent-capture": "Surat-i pononsorou nakaatod noh, miagal id siriba diti.",
-       "passwordreset-emailerror-capture": "Surat-i pononsorou nopudali noh, miagal id siriba diti, nga awu kaatod id momomoguno: $1",
        "changeemail": "Alanai porikatan surat-i",
        "changeemail-header": "Alanai akaun porikatan surat-i",
        "changeemail-no-info": "Mositi sumuang log ko do mongoguno monilombus id bolikon diti.",
index 2a4bf50..2685328 100644 (file)
        "passwordreset-emailtitle": "{{SITENAME}}मा खाता विवरण",
        "passwordreset-emailelement": "प्रयोगकर्ताको नाम: \n$1\n\nअस्थाई पासवर्ड: \n$2",
        "passwordreset-emailsentemail": "यदि यो इमेल ठेगाना तम सित सम्बन्धित छ भण्या, तब यक पासवर्ड रिसेट इमेल पठाएलो।",
-       "passwordreset-invalideamil": "अबैध ई-मेल ठेगाना",
+       "passwordreset-invalidemail": "अबैध ई-मेल ठेगाना",
        "changeemail": "इमेल ठेगाना बदेल वा हटा",
        "changeemail-header": "तमरो इमेल ठेगाना बदेल्लाइ एइ फाराम पुराइ भरऽ। यदि तम तमरा खाता बठेइ कसै लै इमेल ठेगाना सितोऽ सम्बन्ध हटौन चाहन्छऽ भण्या, फाराम बुजौन्ज्याँ नौलो इमेल ठेगाना भण्ण्या ठौर खालि छाण्याऽ।",
        "changeemail-oldemail": "अईलको इमेल-ठेगाना:",
        "activeusers-intro": "यो सूची ती प्रयोगकर्तानको हो जनले विगत $1 {{PLURAL:$1|दिन| दिन}}मी  गतिविधि देखायाकाछन्।",
        "activeusers-count": "विगत {{PLURAL:$3|दिनमी|$3 दिनहरूमी}}  $1 {{PLURAL:$1|सम्पादन गरियो|सम्पादनहरू गरिया}}",
        "activeusers-from": "यहाँबठे सुरु हुन्या प्रयोगकर्ताहरू धेकाओ:",
-       "activeusers-hidesysops": "प्रवन्धकहरू लुकाउन्या",
        "activeusers-noresult": "प्रयोगकर्ताहरू भेटियानन्",
        "mailnologintext": "तमीले अरु प्रयोगकर्तानलाई ईमेल पठाउनको लागि आफु पहिली [[Special:UserLogin|प्रवेश(लगइन)गर्याको]] हुनुपडन्छ र [[Special:Preferences|आफ्नो रोजाइहरूमी]] एउटा वैध ईमेल ठेगाना भयाको हुनुपडन्छ ।",
        "emailpagetext": "तल दियाको फार्मले तमी यै {{GENDER:$1|प्रयोगकर्ता}}लाई इमेल पठाउन सक्द्या हौ । तमीले जो ठेगाना [[Special:Preferences|आफ्नो प्रयोगकर्ता रोजाईहरू]]मी दियाका छियौ त्यो यै इमेललाई \"पठाउने\" को रूपमी आउन्याछ, अतः प्राप्तकर्ता तमीलाई सिधै जवाफ दिनसक्द्याछ ।",
index 8e70898..40d6931 100644 (file)
        "categories": "ގިސްމުތައް",
        "categoriespagetext": "ތިރީގައި މިވާ ގިސްމުތައް ވިކީ ގައި މައުޖޫދުވެގެން ވެއެވެ.\n[[Special:UnusedCategories|Unused categories]] are not shown here.\nAlso see [[Special:WantedCategories|wanted categories]].",
        "activeusers": "ހަރަކާތްތެރި މެމްބަރުންގެ ލިސްޓު",
-       "activeusers-hidebots": "ބޮޓް ފޮރުއްވާ",
-       "activeusers-hidesysops": "އެޑްމިނިސްޓްރޭޓަރުން ފޮރުއްވާ",
        "listgrouprights-members": "(މެމްބަރުންގެ ލިސްޓު)",
        "emailuser": "މި މެންބަރަށް އީމޭލު ފޮނުއްވާ",
        "watchlist": "މަގޭ ނަޒަރު",
index dcb9f4c..e582ee9 100644 (file)
        "cannotloginnow-title": "Δεν μπορείτε να συνδεθείτε τώρα",
        "cannotloginnow-text": "Η σύνδεση δεν είναι δυνατή όταν χρησιμοποιείτε την $1.",
        "cannotcreateaccount-title": "Αδυναμία δημιουργίας λογαριασμού",
+       "cannotcreateaccount-text": "Άμεση δημιουργία λογαριασμού δεν είναι ενεργοποιημένη σε αυτό το wiki.",
        "yourdomainname": "Το domain σας:",
        "password-change-forbidden": "Δεν μπορείτε να αλλάξετε τους κωδικούς πρόσβασης σε αυτό το βίκι.",
        "externaldberror": "Είτε συνέβη κάποιο σφάλμα εξωτερικής πιστοποίησης της βάσης δεδομένων είτε δεν σας έχει επιτραπεί να ενημερώσετε τον εξωτερικό σας λογαριασμό.",
        "botpasswords-newpassword": "Ο νέος κωδικός πρόσβασης για να συνδεθείτε με το <strong>$1</strong> είναι <strong>$2</strong>. <em>Παρακαλούμε σημειώστε το για μελλοντική αναφορά.</em><br />(Για παλιά bot που απαιτούν το όνομα σύνδεσης να είναι το ίδιο με το τελικό όνομα χρήστη, μπορείτε επίσης να χρησιμοποιήσετε το  <strong>$3</strong> ως όνομα χρήστη και <strong>$4</strong> ως κωδικό.)",
        "botpasswords-no-provider": "BotPasswordsSessionProvider δεν είναι διαθέσιμο.",
        "botpasswords-restriction-failed": "Περιορισμοί κωδικών πρόσβασης bot εμποδίζουν τη συγκεκριμένη σύνδεση.",
+       "botpasswords-invalid-name": "Το όνομα χρήστη που ορίζεται δεν περιέχει το διαχωριστικό κωδικό πρόσβασης bot (\"$1\").",
+       "botpasswords-not-exist": "Ο χρήστης \"$1\" δεν έχει κωδικό bot με όνομα \"$2\"",
        "resetpass_forbidden": "Οι κωδικοί πρόσβασης δεν μπορούν να αλλαχθούν",
        "resetpass_forbidden-reason": "Οι κωδικοί πρόσβασης δεν μπορούν να αλλαχθούν: $1",
        "resetpass-no-info": "Πρέπει να είστε συνδεδεμένος για να δείτε αυτήν την σελίδα απευθείας",
        "passwordreset-emaildisabled": "Τα χαρακτηριστικά ηλεκτρονικού ταχυδρομείου έχουν απενεργοποιηθεί σ' αυτό το wiki.",
        "passwordreset-username": "Όνομα χρήστη:",
        "passwordreset-domain": "Domain:",
-       "passwordreset-capture": "Προβολή του μηνύματος ηλεκτρονικού ταχυδρομείου που δημιουργήθηκε;",
-       "passwordreset-capture-help": "Εάν μαρκάρετε αυτό το πλαίσιο, το μήνυμα ηλεκτρονικού ταχυδρομείου (με το προσωρινό κωδικό πρόσβασης) θα εμφανιστεί σε σας καθώς θα αποσταλεί στο χρήστη.",
        "passwordreset-email": "Διεύθυνση ηλεκτρονικού ταχυδρομείου:",
        "passwordreset-emailtitle": "Λεπτομέρειες λογαριασμού για {{SITENAME}}",
        "passwordreset-emailtext-ip": "Κάποιος (πιθανώς εσείς, από την διεύθυνση IP $1) ζήτησε την επαναφορά του κωδικού σας σε {{SITENAME}} ($4).  {{PLURAL:$3|Ο ακόλουθος λογαριασμός|Οι ακόλουθοι λογαριασμοί}} χρήστη συνδέονται με αυτή τη διεύθυνση e-mail:\n\n$2\n\n{{PLURAL:$3|Αυτός ο προσωρινός κωδικός πρόσβασης θα λήξει|Αυτοί οι προσωρινοί κωδικοί πρόσβασης θα λήξουν}} σε {{PLURAL:$5|μία ημέρα|$5 ημέρες}}.\nΘα πρέπει να συνδεθείτε τώρα και να επιλέξετε ένα νέο κωδικό. Αν κάποιος άλλος έκανε αυτό το αίτημα ή αν έχετε θυμηθεί τον αρχικό κωδικό πρόσβασής σας, και δεν επιθυμείτε πια να τον αλλάξετε, μπορείτε να αγνοήσετε αυτό το μήνυμα και να συνεχίσετε να χρησιμοποιείτε τον παλιό σας κωδικό πρόσβασης.",
        "passwordreset-emailelement": "Όνομα χρήστη: \n$1\n\nΠροσωρινός κωδικός πρόσβασης:\n$2",
        "passwordreset-emailsentemail": "Αν αυτή η διεύθυνση ηλεκτρονικού ταχυδρομείου συνδέεται με το  λογαριασμό σας, τότε  θα σας αποσταλεί μήνυμα ηλεκτρονικού ταχυδρομείου για την επαναφορά του κωδικού πρόσβασης.",
        "passwordreset-emailsentusername": "Αν υπάρχει μια διεύθυνση ηλεκτρονικού ταχυδρομείου που συνδέεται με αυτό το όνομα χρήστη, τότε θα σας αποσταλεί ένα μήνυμα ηλεκτρονικού ταχυδρομείου για την επαναφορά του κωδικού πρόσβασης.",
-       "passwordreset-invalideamil": "Μη έγκυρη διεύθυνση ηλεκτρονικού ταχυδρομείου",
+       "passwordreset-invalidemail": "Μη έγκυρη διεύθυνση ηλεκτρονικού ταχυδρομείου",
        "changeemail": "Αλλαγή ή αφαίρεση της διεύθυνσης ηλεκτρονικού ταχυδρομείου",
        "changeemail-header": "Συμπληρώστε αυτήν τη φόρμα για να αλλάξετε τη διεύθυνσή σας ηλεκτρονικού ταχυδρομείου. Αν θέλετε να καταργήσετε τη σύνδεση οποιασδήποτε διεύθυνσης ηλεκτρονικού ταχυδρομείου με το λογαριασμό σας, αφήστε τη νέα διεύθυνση ηλεκτρονικού ταχυδρομείου κενή κατά την υποβολή της φόρμας.",
        "changeemail-no-info": "Πρέπει να έχετε συνδεθεί για άμεση πρόσβαση σε αυτήν τη σελίδα.",
        "right-siteadmin": "Κλείδωμα και ξεκλείδωμα της βάσης δεδομένων",
        "right-override-export-depth": "Εξαγωγή σελίδων συμπεριλαμβάνοντας συνδεδεμένες σελίδες έως ένα βάθος 5 επιπέδων",
        "right-sendemail": "Αποστολή ηλεκτρονικού μηνύματος σε άλλους χρήστες",
-       "right-passwordreset": "Εμφάνιση email επαναφοράς κωδικού πρόσβασης",
        "right-managechangetags": "Δημιουργία και (απ)ενεργοποίηση [[Special:Tags|ετικετών]]",
        "right-applychangetags": "Εφαρμόστε [[Special:Tags|ετικέτες]] μαζί με τις αλλαγές",
        "right-changetags": "Προσθέστε και αφαιρέστε αυθαίρετες [[Special:Tags|ετικέτες]] σε μεμονωμένες εκδόσεις και καταχωρήσεις καταγραφών",
        "activeusers-intro": "Αυτή είναι μια λίστα από χρήστες που είχαν κάποιου είδους δραστηριότητα {{PLURAL:$1|την τελευταία $1 μέρα|τις τελευταίες $1 μέρες}}.",
        "activeusers-count": "$1 {{PLURAL:$1|ενέργεια|ενέργειες}} {{PLURAL:$3|την τελευταία μέρα|τις τελευταίες $3 μέρες}}",
        "activeusers-from": "Προβολή χρηστών ξεκινώντας από:",
-       "activeusers-hidebots": "Απόκρυψη bots",
-       "activeusers-hidesysops": "Απόκρυψη διαχειριστών",
        "activeusers-noresult": "Δεν βρέθηκε χρήστης.",
        "activeusers-submit": "Προβολή ενεργών χρηστών",
        "listgrouprights": "Δικαιώματα ομάδων χρηστών",
        "feedback-thanks": "Ευχαριστούμε! Τα σχόλιά σας έχουν καταχωρηθεί στη σελίδα \"[$2 $1]\".",
        "feedback-thanks-title": "Σας ευχαριστούμε!",
        "feedback-useragent": "User agent:",
-       "searchsuggest-search": "Αναζήτηση",
+       "searchsuggest-search": "Αναζήτηση σε {{SITENAME}}",
        "searchsuggest-containing": "περιέχει...",
        "api-error-badaccess-groups": "Δεν επιτρέπεται να ανεβάσετε αρχεία σε αυτό το wiki.",
        "api-error-badtoken": "Εσωτερικό σφάλμα: εσφαλμένο διακριτικό.",
index a033edd..9d16ea1 100644 (file)
        "passwordreset-emaildisabled": "Email features have been disabled on this wiki.",
        "passwordreset-username": "Username:",
        "passwordreset-domain": "Domain:",
-       "passwordreset-capture": "View the resulting email?",
-       "passwordreset-capture-help": "If you check this box, the email (with the temporary password) will be shown to you as well as being sent to the user.",
        "passwordreset-email": "Email address:",
        "passwordreset-emailtitle": "Account details on {{SITENAME}}",
        "passwordreset-emailtext-ip": "Someone (probably you, from IP address $1) requested a reset of your\npassword for {{SITENAME}} ($4). The following user {{PLURAL:$3|account is|accounts are}}\nassociated with this email address:\n\n$2\n\n{{PLURAL:$3|This temporary password|These temporary passwords}} will expire in {{PLURAL:$5|one day|$5 days}}.\nYou should log in and choose a new password now. If someone else made this\nrequest, or if you have remembered your original password, and you no longer\nwish to change it, you may ignore this message and continue using your old\npassword.",
        "passwordreset-emailelement": "Username:\n$1\n\nTemporary password:\n$2",
        "passwordreset-emailsentemail": "If this email address is associated with your account, then a password reset email will be sent.",
        "passwordreset-emailsentusername": "If there is an email address associated with this username, then a password reset email will be sent.",
-       "passwordreset-emailsent-capture2": "The password reset {{PLURAL:$1|email has|emails have}} been sent. The {{PLURAL:$1|username and password|list of usernames and passwords}} is shown here.",
-       "passwordreset-emailerror-capture2": "Emailing the {{GENDER:$2|user}} failed: $1 The {{PLURAL:$3|username and password|list of usernames and passwords}} is shown here.",
        "passwordreset-nocaller": "A caller must be provided",
        "passwordreset-nosuchcaller": "Caller does not exist: $1",
        "passwordreset-ignored": "The password reset was not handled. Maybe no provider was configured?",
-       "passwordreset-invalideamil": "Invalid email address",
+       "passwordreset-invalidemail": "Invalid email address",
        "passwordreset-nodata": "Neither a username nor an email address was supplied",
        "changeemail": "Change or remove email address",
        "changeemail-summary": "",
        "right-siteadmin": "Lock and unlock the database",
        "right-override-export-depth": "Export pages including linked pages up to a depth of 5",
        "right-sendemail": "Send email to other users",
-       "right-passwordreset": "View password reset emails",
        "right-managechangetags": "Create and (de)activate [[Special:Tags|tags]]",
        "right-applychangetags": "Apply [[Special:Tags|tags]] along with one's changes",
        "right-changetags": "Add and remove arbitrary [[Special:Tags|tags]] on individual revisions and log entries",
        "apisandbox-continue": "Continue",
        "apisandbox-continue-clear": "Clear",
        "apisandbox-continue-help": "{{int:apisandbox-continue}} will [https://www.mediawiki.org/wiki/API:Query#Continuing_queries continue] the last request; {{int:apisandbox-continue-clear}} will clear continuation-related parameters.",
+       "apisandbox-param-limit": "Enter <kbd>max</kbd> to use the maximum limit.",
+       "apisandbox-multivalue-all-namespaces": "$1 (All namespaces)",
+       "apisandbox-multivalue-all-values": "$1 (All values)",
        "booksources": "Book sources",
        "booksources-summary": "",
        "booksources-search-legend": "Search for book sources",
        "activeusers-count": "$1 {{PLURAL:$1|action|actions}} in the last {{PLURAL:$3|day|$3 days}}",
        "activeusers-from": "Display users starting at:",
        "activeusers-groups": "Display users belonging to groups:",
+       "activeusers-excludegroups": "Exclude users belonging to groups:",
        "activeusers-noresult": "No users found.",
        "activeusers-submit": "Display active users",
        "listgrouprights": "User group rights",
        "tags-deactivate": "deactivate",
        "tags-hitcount": "$1 {{PLURAL:$1|change|changes}}",
        "tags-manage-no-permission": "You do not have permission to manage change tags.",
-       "tags-manage-blocked": "You cannot manage change tags while you are blocked.",
+       "tags-manage-blocked": "You cannot manage change tags while {{GENDER:$1|you}} are blocked.",
        "tags-create-heading": "Create a new tag",
        "tags-create-explanation": "By default, newly created tags will be made available for use by users and bots.",
        "tags-create-tag-name": "Tag name:",
        "tags-deactivate-not-allowed": "It is not possible to deactivate the tag \"$1\".",
        "tags-deactivate-submit": "Deactivate",
        "tags-apply-no-permission": "You do not have permission to apply change tags along with your changes.",
-       "tags-apply-blocked": "You cannot apply change tags along with your changes while you are blocked.",
+       "tags-apply-blocked": "You cannot apply change tags along with your changes while {{GENDER:$1|you}} are blocked.",
        "tags-apply-not-allowed-one": "The tag \"$1\" is not allowed to be manually applied.",
        "tags-apply-not-allowed-multi": "The following {{PLURAL:$2|tag is|tags are}} not allowed to be manually applied: $1",
        "tags-update-no-permission": "You do not have permission to add or remove change tags from individual revisions or log entries.",
-       "tags-update-blocked": "You cannot add or remove change tags while you are blocked.",
+       "tags-update-blocked": "You cannot add or remove change tags while {{GENDER:$1|you}} are blocked.",
        "tags-update-add-not-allowed-one": "The tag \"$1\" is not allowed to be manually added.",
        "tags-update-add-not-allowed-multi": "The following {{PLURAL:$2|tag is|tags are}} not allowed to be manually added: $1",
        "tags-update-remove-not-allowed-one": "The tag \"$1\" is not allowed to be removed.",
        "mw-widgets-dateinput-placeholder-month": "YYYY-MM",
        "mw-widgets-titleinput-description-new-page": "page does not exist yet",
        "mw-widgets-titleinput-description-redirect": "redirect to $1",
+       "mw-widgets-categoryselector-add-category-placeholder": "Add a category...",
        "sessionmanager-tie": "Cannot combine multiple request authentication types: $1.",
        "sessionprovider-generic": "$1 sessions",
        "sessionprovider-mediawiki-session-cookiesessionprovider": "cookie-based sessions",
index b4df263..31f0641 100644 (file)
        "passwordreset-nocaller": "Vokanto devas esti provizita",
        "passwordreset-nosuchcaller": "Vokanto ne ekzistas: $1",
        "passwordreset-ignored": "La pasvorta reensignado ne estis pritraktita. Eble neniu provizanto estis formita?",
-       "passwordreset-invalideamil": "Nevalida retpoŝta adreso",
+       "passwordreset-invalidemail": "Nevalida retpoŝta adreso",
        "passwordreset-nodata": "Nek salutnomo nek retpoŝta adreso estis provizita",
        "changeemail": "Ŝanĝi aŭ forigi retpoŝtadreson",
        "changeemail-header": "Plenigu ĉi tiun formularon por ŝanĝi vian retpoŝtadreson. Se vi volas forigi la difinon de retpoŝtadreso por via uzantokonto, lasu la kampon por la nova retpoŝtadreso malplena ĉe la transigo.",
index c39a7f7..59b72e9 100644 (file)
        "passwordreset-emaildisabled": "Se han desactivado las funciones de correo electrónico en este wiki.",
        "passwordreset-username": "Nombre de usuario:",
        "passwordreset-domain": "Dominio:",
-       "passwordreset-capture": "¿Ver el mensaje resultante?",
-       "passwordreset-capture-help": "Si marcas esta casilla, se te mostrará el correo electrónico (con la contraseña temporal) además de enviarse al usuario.",
        "passwordreset-email": "Dirección de correo electrónico:",
        "passwordreset-emailtitle": "Detalles de la cuenta en {{SITENAME}}",
        "passwordreset-emailtext-ip": "Alguien (probablemente tú, desde la dirección IP $1) ha solicitado el restablecimiento de tu contraseña en {{SITENAME}} ($4). {{PLURAL:$3|La siguiente cuenta está asociada|Las siguientes cuentas están asociadas}}\na esta dirección de correo electrónico:\n\n$2\n\n{{PLURAL:$3|Esta contraseña temporal|Estas contraseñas temporales}} caducarán en {{PLURAL:$5|un día|$5 días}}.\nAhora puedes iniciar sesión y establecer una nueva contraseña. Si fue otra persona la que realizó esta solicitud, o si ya recuerdas tu contraseña original y, por tanto, no deseas cambiarla, puedes ignorar este mensaje y continuar usando tu contraseña anterior.",
        "passwordreset-emailelement": "Nombre de {{GENDER:$1|usuario|usuaria}}: \n$1\n\nContraseña temporal: \n$2",
        "passwordreset-emailsentemail": "Si esta dirección de correo electrónico está asociada a tu cuenta, entonces se enviará un correo electrónico para restablecer la contraseña.",
        "passwordreset-emailsentusername": "Si existe una dirección de correo electrónico asociada a este nombre de usuario, entonces se enviará un correo para restablecer la contraseña.",
-       "passwordreset-emailsent-capture2": "{{PLURAL:$1|Se ha enviado el mensaje de restablecimiento de contraseña|Se han enviado los mensajes de restablecimiento de contraseña}}. {{PLURAL:$1|El nombre de usuario y la contraseña|La lista de nombres de usuarios y contraseñas}} se muestra aquí.",
-       "passwordreset-emailerror-capture2": "No fue posible mandar un correo electrónico {{GENDER:$2|al usuario|a la usuaria}}: $1 {{PLURAL:$3|El nombre de usuario y la contraseña|La lista de nombres de usuarios y contraseñas}} se muestra aquí.",
        "passwordreset-nocaller": "Debe de proporcionarse un interlocutor",
        "passwordreset-nosuchcaller": "La persona que llama no existe: $1",
        "passwordreset-ignored": "No se logró el reestablecimiento de la contraseña. ¿Tal vez no se configuró un proveedor?",
-       "passwordreset-invalideamil": "Dirección de correo electrónico no válida.",
+       "passwordreset-invalidemail": "Dirección de correo electrónico no válida.",
        "passwordreset-nodata": "No se ha proporcionado ni un nombre de usuario ni una dirección de correo electrónico",
        "changeemail": "Cambiar o eliminar la dirección de correo electrónico",
        "changeemail-header": "Completa este formulario para cambiar tu dirección de correo electrónico. Si quieres eliminar la asociación de cualquier dirección de correo electrónico con tu cuenta, deja en blanco la nueva dirección de correo electrónico cuando envíes el formulario.",
        "right-siteadmin": "Bloquear y desbloquear la base de datos",
        "right-override-export-depth": "Exportar páginas, incluyendo aquellas enlazadas hasta una profundidad de 5",
        "right-sendemail": "Enviar correo electrónico a otros usuarios",
-       "right-passwordreset": "Ver los mensajes de restablecimiento de contraseña",
        "right-managechangetags": "Crear y (des)activar [[Special:Tags|etiquetas]]",
        "right-applychangetags": "Aplicar [[Special:Tags|etiquetas]] junto con los cambios propios",
        "right-changetags": "Agregar y quitar [[Special:Tags|etiquetas]] arbitrarias a revisiones individuales y entradas del registro",
        "apisandbox-alert-field": "El valor de este campo no es válido.",
        "apisandbox-continue": "Continuar",
        "apisandbox-continue-clear": "Vaciar",
+       "apisandbox-param-limit": "Escribe <kbd>max</kbd> para usar el límite máximo.",
        "booksources": "Fuentes de libros",
        "booksources-search-legend": "Buscar fuentes de libros",
        "booksources-search": "Buscar",
        "activeusers-count": "$1 {{PLURAL:$1|acción|acciones}} en {{PLURAL:$3|el último día|los últimos $3 días}}",
        "activeusers-from": "Mostrar los usuarios que empiezan por:",
        "activeusers-groups": "Mostrar los usuarios que pertenecen a los grupos:",
+       "activeusers-excludegroups": "Excluir a los usuarios que pertenezcan a los grupos:",
        "activeusers-noresult": "No se encontraron usuarios.",
        "activeusers-submit": "Mostrar usuarios activos",
        "listgrouprights": "Permisos de los grupos de usuarios",
        "tags-deactivate": "desactivar",
        "tags-hitcount": "$1 {{PLURAL:$1|cambio|cambios}}",
        "tags-manage-no-permission": "No tienes permiso para gestionar las etiquetas de cambios.",
-       "tags-manage-blocked": "No puedes gestionar el cambio de etiquetas mientras estés bloqueado.",
+       "tags-manage-blocked": "No puedes gestionar etiquetas de cambio mientras estés {{GÉNERO:$1|bloqueado|bloqueada}}.",
        "tags-create-heading": "Crear una etiqueta",
        "tags-create-explanation": "De manera predeterminada, las etiquetas nuevas estarán disponibles para su uso por usuarios y bots.",
        "tags-create-tag-name": "Nombre de la etiqueta:",
        "tags-deactivate-not-allowed": "No es posible desactivar la etiqueta «$1».",
        "tags-deactivate-submit": "Desactivar",
        "tags-apply-no-permission": "No tienes permiso para aplicar etiquetas de cambios, junto con tus cambios.",
-       "tags-apply-blocked": "No puedes aplicar etiquetas de cambio con tus cambios mientras estés {{GENDER:|bloqueado|bloqueada}}.",
+       "tags-apply-blocked": "No puedes aplicar etiquetas de cambio junto a tus cambios mientras estés {{GENDER:$1|bloqueado|bloqueada}}.",
        "tags-apply-not-allowed-one": "No se permite aplicar manualmente la etiqueta «$1».",
        "tags-apply-not-allowed-multi": "{{PLURAL:$2|La siguiente etiqueta no se puede|Las siguientes etiquetas no se pueden}} aplicar manualmente: $1",
        "tags-update-no-permission": "No tienes permiso para agregar o quitar etiquetas de cambio de las revisiones individuales o las entradas del registro.",
-       "tags-update-blocked": "No puedes añadir o eliminar etiquetas de cambio mientras estés {{GENDER:|bloqueado|bloqueada}}.",
+       "tags-update-blocked": "No puedes añadir o eliminar etiquetas de cambio mientras estés {{GENDER:$1|bloqueado|bloqueada}}.",
        "tags-update-add-not-allowed-one": "No se permite la adición manual de la etiqueta «$1».",
        "tags-update-add-not-allowed-multi": "{{PLURAL:$2|La siguiente etiqueta no se puede|Las siguientes etiquetas no se pueden}} agregar manualmente: $1",
        "tags-update-remove-not-allowed-one": "No se permite eliminar la etiqueta «$1».",
index ec27ab5..612aee9 100644 (file)
        "passwordreset-emaildisabled": "E-posti funktsioonid on selles vikis keelatud.",
        "passwordreset-username": "Kasutajanimi:",
        "passwordreset-domain": "Domeen:",
-       "passwordreset-capture": "Näita lähetatavat e-kirja?",
-       "passwordreset-capture-help": "Kui valid selle märkeruudu, näidatakse sulle ajutist parooli sisaldavat e-kirja, mis ühtlasi kasutajale saadetakse.",
        "passwordreset-email": "E-posti aadress:",
        "passwordreset-emailtitle": "{{GRAMMAR:genitive|{{SITENAME}}}} konto andmed",
        "passwordreset-emailtext-ip": "Keegi, arvatavasti sina ise, IP-aadressilt $1 palus lähtestada sinu {{GRAMMAR:genitive|{{SITENAME}}}} ($4) parooli. Selle e-posti aadressiga on seotud {{PLURAL:$3|järgmine konto|järgmised kontod}}:\n\n$2\n\n{{PLURAL:$3|See ajutine parool aegub|Need ajutised paroolid aeguvad}} {{PLURAL:$5|ühe|$5}} päeva pärast.\nPeaksid nüüd sisse logima ja uue parooli valima. Kui selle palve esitas keegi teine või kui sulle meenus su parool ja sa ei soovi seda enam muuta, võid teadet eirata ja jätkata vana parooli kasutamist.",
        "content-model-css": "CSS",
        "content-json-empty-object": "Tühi objekt",
        "content-json-empty-array": "Tühi massiiv",
+       "deprecated-self-close-category": "Vigaste endassesuletud HTML-siltidega leheküljed",
        "duplicate-args-warning": "<strong>Hoiatus:</strong> [[:$1]] kutsub malli [[:$2]] nii, et parameetrile \"$3\" vastab rohkem kui üks väärtus. Väärtustest kasutatakse ainult viimast.",
        "duplicate-args-category": "Leheküljed, kus mallikutses on topeltargument",
        "duplicate-args-category-desc": "Lehekülg sisaldab mallikutseid, kus mõnd argumenti on kasutatud mitu korda, näiteks <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> või <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "right-siteadmin": "Panna lukku ja lukust lahti teha andmebaasi",
        "right-override-export-depth": "Eksportida lehekülgi, kaasates viidatud leheküljed kuni viienda tasemeni",
        "right-sendemail": "Saata teistele kasutajatele e-kirju",
-       "right-passwordreset": "Vaadata parooli lähtestamise e-kirju",
        "right-managechangetags": "Koostada ja (in)aktiveerida [[Special:Tags|märgiseid]]",
        "right-applychangetags": "Rakendada [[Special:Tags|märgiseid]] enda muudatuste suhtes",
        "right-changetags": "Lisada ja eemaldada käsitsi rakendatavaid [[Special:Tags|märgiseid]] üksikute redaktsioonide ja logisissekannete juures",
        "statistics-files": "Üleslaaditud faile",
        "statistics-edits": "Redigeerimisi alates {{GRAMMAR:genitive|{{SITENAME}}}} loomisest",
        "statistics-edits-average": "Keskmiselt redigeerimisi lehekülje kohta",
-       "statistics-users": "Registreeritud [[Special:ListUsers|kasutajaid]]",
-       "statistics-users-active": "Aktiivseid kasutajaid",
+       "statistics-users": "Registreeritud [[Special:ListUsers|kasutajad]]",
+       "statistics-users-active": "Aktiivsed kasutajad",
        "statistics-users-active-desc": "Kasutajad, kes on viimase {{PLURAL:$1|päeva|$1 päeva}} jooksul tegutsenud",
        "pageswithprop": "Leheatribuudiga leheküljed",
        "pageswithprop-legend": "Leheatribuudiga leheküljed",
        "booksources-search": "Otsi",
        "booksources-text": "Allpool on linke teistele lehekülgedele, kus müüakse uusi ja kasutatud raamatuid. Lehekülgedel võib olla ka lisainfot raamatute kohta:",
        "booksources-invalid-isbn": "Antud ISBN-number ei ole korrektne; kontrolli algallikast kopeerides vigu.",
+       "magiclink-tracking-rfc": "RFC-võlulingiga leheküljed",
+       "magiclink-tracking-pmid": "PMID-võlulingiga leheküljed",
+       "magiclink-tracking-isbn": "ISBN-võlulingiga leheküljed",
        "specialloguserlabel": "Täitja:",
        "speciallogtitlelabel": "Objekt (pealkiri või {{ns:user}}:kasutajanimi):",
        "log": "Logid",
        "trackingcategories-msg": "Süsteemikategooria",
        "trackingcategories-name": "Sõnumi nimi",
        "trackingcategories-desc": "Kategooriasse arvamise kriteeriumid",
+       "restricted-displaytitle-ignored": "Eiratava kuvapealkirjaga leheküljed",
        "noindex-category-desc": "Robotid ei indekseeri lehekülge, sest sellel on võlusõna <code><nowiki>__NOINDEX__</nowiki></code> ja lehekülg on nimeruumis, kus see silt on lubatud.",
        "index-category-desc": "Leheküljel on <code><nowiki>__INDEX__</nowiki></code> ja lehekülg on nimeruumis, kus see silt on lubatud ning seetõttu indekseerivad robotid lehekülge seal, kus nad muidu seda ei teeks.",
        "post-expand-template-inclusion-category-desc": "Kõigi mallide hõrendamise järel on lehekülg suurem kui <code>$wgMaxArticleSize</code>, mistõttu jäid mõned mallid hõrendamata.",
        "pageinfo-category-pages": "Lehekülgi",
        "pageinfo-category-subcats": "Alamkategooriaid",
        "pageinfo-category-files": "Faile",
+       "pageinfo-user-id": "Kasutaja identifikaator",
        "markaspatrolleddiff": "Märgi kontrollituks",
        "markaspatrolledtext": "Märgi see leht kontrollituks",
        "markaspatrolledtext-file": "Märgi see failiversioon kontrollituks",
        "patrol-log-header": "See on kontrollitud redaktsioonide logi.",
        "log-show-hide-patrol": "$1 kontrollimislogi",
        "log-show-hide-tag": "$1 märgiste logi",
+       "confirm-markpatrolled-button": "Sobib",
        "deletedrevision": "Kustutatud vanem versioon $1",
        "filedeleteerror-short": "Tõrge faili kustutamisel: $1",
        "filedeleteerror-long": "Faili kustutamisel esines tõrkeid:\n\n$1",
        "tags-deactivate": "keela",
        "tags-hitcount": "$1 {{PLURAL:$1|muudatus|muudatust}}",
        "tags-manage-no-permission": "Sul pole õigust muudatusmärgiseid hallata.",
-       "tags-manage-blocked": "Muudatusmärgiseid ei saa hallata, kui oled blokeeritud.",
+       "tags-manage-blocked": "Muudatusmärgiseid ei saa hallata, kui {{GENDER:$1|oled}} blokeeritud.",
        "tags-create-heading": "Uue märgise koostamine",
        "tags-create-explanation": "Vaikimisi on vastkoostatud märgised kasutajate ja robotite jaoks kasutatavad.",
        "tags-create-tag-name": "Märgise nimi:",
        "tags-deactivate-not-allowed": "Märgist \"$1\" pole võimalik keelata.",
        "tags-deactivate-submit": "Keela",
        "tags-apply-no-permission": "Sul pole lubatud rakendada muudatusmärgiseid enda muudatuste suhtes.",
-       "tags-apply-blocked": "Muudatusmärgiseid ei saa enda muudatustele rakendada, kui oled blokeeritud.",
+       "tags-apply-blocked": "Muudatusmärgiseid ei saa enda muudatustele rakendada, kui {{GENDER:$1|oled}} blokeeritud.",
        "tags-apply-not-allowed-one": "Märgist \"$1\" pole lubatud käsitsi rakendada.",
        "tags-apply-not-allowed-multi": "{{PLURAL:$2|Järgmist märgist|Järgmiseid märgiseid}} pole lubatud käsitsi rakendada: $1",
        "tags-update-no-permission": "Sul pole lubatud üksikute redaktsioonide ega logisissekannete juures muudatusmärgiseid lisada ega eemaldada.",
-       "tags-update-blocked": "Muudatusmärgiseid ei saa lisada ega eemaldada, kui oled blokeeritud.",
+       "tags-update-blocked": "Muudatusmärgiseid ei saa lisada ega eemaldada, kui {{GENDER:$1|oled}} blokeeritud.",
        "tags-update-add-not-allowed-one": "Märgist \"$1\" pole lubatud käsitsi lisada.",
        "tags-update-add-not-allowed-multi": "{{PLURAL:$2|Järgmist märgist|Järgmiseid märgiseid}} pole lubatud käsitsi lisada: $1",
        "tags-update-remove-not-allowed-one": "Märgist \"$1\" pole lubatud eemaldada.",
        "special-characters-group-ipa": "IPA-laiendid",
        "special-characters-group-symbols": "Sümbolid",
        "special-characters-group-greek": "Kreeka",
+       "special-characters-group-greekextended": "Kreeka (laiendatud)",
        "special-characters-group-cyrillic": "Kirillitsa",
        "special-characters-group-arabic": "Araabia",
        "special-characters-group-arabicextended": "Araabia (laiendatud)",
        "mw-widgets-titleinput-description-redirect": "ümbersuunamine leheküljele \"$1\"",
        "randomrootpage": "Juhuslik juurlehekülg",
        "log-action-filter-block": "Blokeeringu tüüp:",
+       "log-action-filter-delete": "Kustutamise tüüp:",
        "log-action-filter-all": "Kõik",
        "log-action-filter-block-block": "Blokeerimine",
        "log-action-filter-block-reblock": "Blokeeringu muutmine",
        "log-action-filter-block-unblock": "Blokeeringu tühistamine",
+       "log-action-filter-delete-delete": "Lehekülje kustutamine",
+       "log-action-filter-delete-restore": "Lehekülje taastamine",
+       "log-action-filter-delete-event": "Logi kustutamine",
+       "log-action-filter-delete-revision": "Redaktsiooni kustutamine",
        "authmanager-provider-password": "Paroolipõhine autentimine",
        "authmanager-provider-password-domain": "Parooli- ja domeenipõhine autentimine",
        "authmanager-provider-temporarypassword": "Ajutine parool",
index 187d68c..ac48dd7 100644 (file)
        "passwordreset-emaildisabled": "E-posta aukerak ez daude eskuragarri wiki honetan.",
        "passwordreset-username": "Lankide izena:",
        "passwordreset-domain": "Domeinua:",
-       "passwordreset-capture": "Bidaliko den e-posta ikusi nahi?",
-       "passwordreset-capture-help": "Kutxa hau hautatzen baduzu behin-behineko pasahitza duen e-posta erakutsiko zatzaizu, eta erabiltzaileari bidaliko zaio.",
        "passwordreset-email": "E-mail helbidea:",
        "passwordreset-emailtitle": "{{SITENAME}}-rako kontuaren xehetasunak",
        "passwordreset-emailelement": "Erabiltzaile izena: \n$1\n\nBehin-behineko pasahitza: \n$2",
        "right-siteadmin": "Blokeatu eta desblokeatu datu basea blokeatu",
        "right-override-export-depth": "5eko sakonerararteko loturiko orrialdeak barne esportatu",
        "right-sendemail": "Beste erabiltzaileei e-posta bidali",
-       "right-passwordreset": "Ikusi pasahitza berrezartze e-postak",
        "grant-group-email": "E-posta bidali",
        "grant-createaccount": "Kontuak sortu",
        "grant-editmycssjs": "Zure CSS/JavaScript aldatu",
        "feedback-subject": "Gaia:",
        "feedback-submit": "Bidali",
        "feedback-thanks-title": "Eskerrik asko!",
-       "searchsuggest-search": "Bilatu",
+       "searchsuggest-search": "{{SITENAME}} wikian bilatu",
        "searchsuggest-containing": "edukian...",
        "api-error-badaccess-groups": "Ez duzu baimendik fitxategi hauek wiki honetara igotzeko.",
        "api-error-badtoken": "Barne akatsa: token okerra.",
index c435b73..4bffbc9 100644 (file)
        "passwordreset-nocaller": "فراخواننده می‌بايست مشخص شده باشد",
        "passwordreset-nosuchcaller": "اين فراخواننده وجود ندارد:$1",
        "passwordreset-ignored": "به بازنشانی گذرواژه پرداخته نشد. آیا ممکن است که هيچ مهياکننده‌ای برای این کار تنظيم نشده باشد؟",
-       "passwordreset-invalideamil": "آدرس ایمیل نامعتبر",
+       "passwordreset-invalidemail": "آدرس ایمیل نامعتبر",
        "passwordreset-nodata": "یک نام کاربری و یا یک آدرس ايميل، هيچکدام ارائه نشده",
        "changeemail": "تغییر یا حذف نشانی ایمیل",
        "changeemail-header": "برای تغییر ایمیلتان این فرم را کامل کنید. برای حذف ایملیتان کافی است بخش ایمیل را خالی رها کنید و فرم را ارسال کنید.",
        "prefs-advancedwatchlist": "گزینه‌های پیشرفته",
        "prefs-displayrc": "گزینه‌های نمایش",
        "prefs-displaywatchlist": "گزینه‌های نمایش",
-       "prefs-tokenwatchlist": "نشانه",
+       "prefs-tokenwatchlist": "بلیط",
        "prefs-diffs": "تفاوت‌ها",
        "prefs-help-prefershttps": "تأثیر این ترجیح بعد از ورود بعدی شما اعمال خواهد شد.",
        "prefswarning-warning": "تغییراتتان به ترجیحات هنوز ذحیره نشده است.\nاگر این صفحه بدون کلیک بر «$1» ترک کنید ترجیحاتتان ذخیره نخواهد شد.",
        "activeusers-intro": "در زیر فهرستی از کاربرانی را می‌بینید که در $1 {{PLURAL:$1|روز|روز}} گذشته فعالیتی داشته‌اند.",
        "activeusers-count": "$1 {{PLURAL:$1|فعالیت|فعالیت}} در {{PLURAL:$3|روز|$3 روز}} اخیر",
        "activeusers-from": "نمایش کاربران با آغاز از:",
-       "activeusers-hidebots": "نهفتن ربات‌ها",
-       "activeusers-hidesysops": "نهفتن مدیران",
        "activeusers-noresult": "کاربری پیدا نشد.",
        "activeusers-submit": "نمایش کاربران فعال",
        "listgrouprights": "اختیارات گروه‌های کاربری",
index 3a8baf3..8cf7922 100644 (file)
        "passwordreset-emaildisabled": "Sähköpostitoiminnot on poistettu käytöstä tässä wikissä.",
        "passwordreset-username": "Käyttäjätunnus:",
        "passwordreset-domain": "Verkkotunnus:",
-       "passwordreset-capture": "Näytä lähetettävä sähköpostiviesti?",
-       "passwordreset-capture-help": "Jos valitset tämän, sähköposti (tilapäisellä salasanalla) näytetään sinulle sekä lähetetään käyttäjälle.",
        "passwordreset-email": "Sähköpostiosoite:",
        "passwordreset-emailtitle": "Tunnuksen tiedot {{GRAMMAR:inessive|{{SITENAME}}}}",
        "passwordreset-emailtext-ip": "Joku (todennäköisesti sinä, IP-osoitteesta $1) pyysi salasanasi\nvaihtamista sivustolla {{SITENAME}} ($4). {{PLURAL:$3|Seuraava käyttäjätunnus on|Seuraavat käyttäjätunnukset ovat}}\nyhdistettynä tähän sähköpostiosoitteeseen:\n\n$2\n\n{{PLURAL:$3|Tämä väliaikainen salasana vanhentuu|Nämä väliaikaiset salasanat vanhentuvat}} {{PLURAL:$5|yhden päivän|$5 päivän}} kuluttua.\nKirjaudu sisään nyt ja valitse uusi salasana heti. Jos joku toinen teki tämän pyynnön \ntai jos muistitkin vanhan salasanasi etkä halua enää muuttaa sitä,\nvoit jättää tämän viestin huomiotta ja jatkaa vanhan salasanasi käyttämistä.",
        "passwordreset-emailelement": "Käyttäjätunnus: \n$1\n\nVäliaikainen salasana: \n$2",
        "passwordreset-emailsentemail": "Jos tämä on sinun tunnuksellesi rekisteröity sähköpostiosoite, salasanan uudistamisesta kertova viesti lähetetään.",
        "passwordreset-emailsentusername": "Jos on olemassa vastaava rekisteröity sähköpostiosoite, salasanan uudistamisesta kertova viesti lähetetään.",
-       "passwordreset-emailsent-capture2": "Salasananpalautus{{PLURAL:$1|sähköposti|sähköpostit}} on lähetetty. {{PLURAL:$1|Käyttäjä ja salasana|Luettelo käyttäjistä ja salasanoista}} näytetään alapuolella.",
-       "passwordreset-emailerror-capture2": "Sähköpostin lähettäminen {{GENDER:$2|käyttäjälle}} epäonnistui: $1 {{PLURAL:$3|Käyttäjänimi ja salasana|Luettelo käyttäjänimistä ja salasanoista}} näytetään alla.",
        "passwordreset-ignored": "Salasanan palauttamista ei käsitelty. Ehkä tarjoajaa ei ollut määritetty?",
-       "passwordreset-invalideamil": "Virheellinen sähköpostiosoite",
+       "passwordreset-invalidemail": "Virheellinen sähköpostiosoite",
        "passwordreset-nodata": "Käyttäjätunnusta ja salasanaa ei annettu",
        "changeemail": "Muuta tai poista sähköpostiosoite",
        "changeemail-header": "Täydennä tämä lomake, jolla voit muuttaa sähköpostiosoitettasi. Jos haluat poistaa sähköpostiosoitteesi kokonaan tunnuksesi yhteydestä, älä kirjoita uudeksi osoitteeksi mitään vaan jätä se tyhjäksi.",
        "right-siteadmin": "Lukita tietokanta",
        "right-override-export-depth": "Viedä sivuja sisältäen viitatut sivut viiden syvyydellä",
        "right-sendemail": "Lähettää sähköpostia muille käyttäjille",
-       "right-passwordreset": "Tarkastella salasanan alustusviestejä",
        "right-managechangetags": "Luoda ja ottaa käyttöön [[Special:Tags|merkkauksia]]",
        "right-applychangetags": "Asettaa [[Special:Tags|merkkauksia]] omien muutosten yhteyteen",
        "right-changetags": "Lisätä ja poistaa satunnaisia [[Special:Tags|merkkauksia]] yksittäisissä sivuversioissa tai lokimerkinnöissä",
index 7ae303f..6762c18 100644 (file)
        "passwordreset-emaildisabled": "Les fonctionnalités de courriel ont été désactivées sur ce wiki.",
        "passwordreset-username": "Nom d'utilisateur :",
        "passwordreset-domain": "Domaine :",
-       "passwordreset-capture": "Voir le courriel résultant ?",
-       "passwordreset-capture-help": "Si vous cochez cette case, le courriel (avec le mot de passe temporaire) vous sera affiché en même temps qu’il sera envoyé à l’utilisateur.",
        "passwordreset-email": "Adresse de courriel :",
        "passwordreset-emailtitle": "Détails du compte sur {{SITENAME}}",
        "passwordreset-emailtext-ip": "Quelqu’un (probablement vous, depuis l’adresse IP $1) a demandé une réinitialisation de votre mot de passe pour {{SITENAME}} ($4). {{PLURAL:$3|Le compte utilisateur suivant est associé|Les comptes utilisateurs suivants sont associés}} à cette adresse de courriel :\n\n$2\n\n{{PLURAL:$3|Ce mot de passe temporaire expirera|Ces mots de passe temporaires expireront}} dans {{PLURAL:$5|un jour|$5 jours}}. \nVous devez maintenant vous connecter et choisir un nouveau mot de passe. Si cette demande ne provient pas de vous, ou si vous avez retrouvé votre mot de passe initial, et ne souhaitez plus le modifier, vous pouvez ignorer ce message et continuer à utiliser votre ancien mot de passe.",
        "passwordreset-emailelement": "Nom d’utilisateur : \n$1\n\nMot de passe temporaire : \n$2",
        "passwordreset-emailsentemail": "Si cette adresse de courriel est associée à votre compte, alors un courriel de réinitialisation de mot de passe sera envoyé.",
        "passwordreset-emailsentusername": "S’il y a une adresse de courriel associée à ce nom d’utilisateur, alors un courriel de réinitialisation de mot de passe sera envoyé.",
-       "passwordreset-emailsent-capture2": "{{PLURAL:$1|Le courriel de réinitialisation du mot de passe a été envoyé|Les courriels de réinitialisation du mot de passe ont été envoyés}}. {{PLURAL:$1|Le nom d’utilisateur et le mot de passe sont affichés|La liste des noms d’utilisateur et mots de passe est affichée}} ici.",
-       "passwordreset-emailerror-capture2": "L’envoi de courriel à {{GENDER:$2|l’utilisateur|l’utilisatrice}} a échoué : $1 {{PLURAL:$3|Le nom d’utilisateur et le mot de passe sont affichés|La liste des noms d’utilisateur et des mots de passe est affichée}} ici.",
        "passwordreset-nocaller": "Un appelant doit être fourni",
        "passwordreset-nosuchcaller": "L’appelant n’existe pas : $1",
        "passwordreset-ignored": "La réinitialisation du mot de passe n’a pas été gérée. Peut-être qu’aucun fournisseur n’a été configuré ?",
-       "passwordreset-invalideamil": "Adresse de messagerie non valide",
+       "passwordreset-invalidemail": "Adresse de messagerie non valide",
        "passwordreset-nodata": "Aucun nom d’utilisateur ou adresse de messagerie n’a été fourni",
        "changeemail": "Changer ou supprimer l’adresse de courriel",
        "changeemail-header": "Complétez ce formulaire pour modifier votre adresse de courriel. Si vous voulez supprimer l’association d’une adresse de courriel avec votre compte, laissez la nouvelle adresse de courriel vide lors de la soumission du formulaire.",
        "right-move-rootuserpages": "Renommer la page principale d'un utilisateur",
        "right-move-categorypages": "Renommer des pages de catégorie",
        "right-movefile": "Renommer des fichiers",
-       "right-suppressredirect": "Ne pas créer de redirection depuis le titre d'origine en renommant les pages",
+       "right-suppressredirect": "Ne pas créer de redirection depuis le titre dorigine en renommant les pages",
        "right-upload": "Importer des fichiers",
        "right-reupload": "Écraser un fichier existant",
        "right-reupload-own": "Écraser un fichier que l'on a soi-même importé",
        "right-siteadmin": "Verrouiller ou déverrouiller la base de données",
        "right-override-export-depth": "Exporter les pages en incluant les pages liées jusqu'à une profondeur de 5 niveaux",
        "right-sendemail": "Envoyer un courriel aux autres utilisateurs",
-       "right-passwordreset": "Voir les courriels de réinitialisation des mots de passe",
        "right-managechangetags": "Créer et (dés)activer des [[Special:Tags|balises]]",
        "right-applychangetags": "Appliquer [[Special:Tags|les balises]] avec ses propres modifications",
        "right-changetags": "Ajouter et supprimer de façon arbitraire [[Special:Tags|des balises]] sur des révisions individuelles et des entrées de journal",
        "emptyfile": "Le fichier que vous voulez importer semble vide.\nCeci peut être dû à une erreur dans le nom du fichier.\nVeuillez vérifier que vous désirez vraiment importer ce fichier.",
        "windows-nonascii-filename": "Ce wiki ne prend pas en charge les noms de fichiers avec des caractères spéciaux.",
        "fileexists": "Un fichier existe déjà sous ce nom.\nMerci de vérifier <strong>[[:$1]]</strong> si vous n'êtes pas certain{{GENDER:||e|}} de vouloir le remplacer.\n[[$1|thumb]]",
-       "filepageexists": "La page de description pour ce fichier a déjà été créée ici <strong>[[:$1]]</strong>, mais aucun fichier n'existe actuellement sous ce nom.\nLe résumé que vous allez spécifier n'apparaîtra pas sur la page de description.\nPour que ce soit le cas, vous devrez modifier manuellement la page. \n[[$1|thumb]]",
+       "filepageexists": "La page de description pour ce fichier a déjà été créée ici <strong>[[:$1]]</strong>, mais aucun fichier n’existe actuellement sous ce nom.\nLe résumé que vous allez spécifier n’apparaîtra pas sur la page de description.\nPour que ce soit le cas, vous devrez modifier manuellement la page.\n[[$1|thumb]]",
        "fileexists-extension": "Un fichier existe avec un nom proche : [[$2|thumb]]\n* Nom du fichier à importer : <strong>[[:$1]]</strong>\n* Nom du fichier existant : <strong>[[:$2]]</strong>\nPeut-être voulez-vous utiliser un nom plus explicite ?",
        "fileexists-thumbnail-yes": "Le fichier semble être une image en taille réduite <em>(vignette)</em>. \n[[$1|thumb]]\nVeuillez vérifier le fichier <strong>[[:$1]]</strong>.\nSi le fichier vérifié est la même image avec la taille initiale, il n'y a pas besoin d'importer une version réduite.",
        "file-thumbnail-no": "Le nom du fichier commence par <strong>$1</strong>.\nIl est possible qu'il s'agisse d'une version réduite <em>(vignette)</em>.\nSi vous disposez du fichier en haute résolution, importez-le, sinon veuillez modifier son nom.",
        "apisandbox-continue": "Continuer",
        "apisandbox-continue-clear": "Effacer",
        "apisandbox-continue-help": "{{int:apisandbox-continue}} [https://www.mediawiki.org/wiki/API:Query#Continuing_queries continuera] la dernière requête ; {{int:apisandbox-continue-clear}} effacera les paramètres relatifs à la continuation.",
+       "apisandbox-param-limit": "Saisir <kbd>max</kbd> pour utiliser la limite maximale.",
        "booksources": "Ouvrages de référence",
        "booksources-search-legend": "Rechercher parmi des ouvrages de référence",
        "booksources-isbn": "ISBN :",
        "activeusers-count": "$1 {{PLURAL:$1|action|actions}} lors {{PLURAL:$3|du dernier jour|des $3 derniers jours}}",
        "activeusers-from": "Afficher les utilisateurs depuis :",
        "activeusers-groups": "Afficher les utilisateurs appartenant aux groupes :",
+       "activeusers-excludegroups": "Exclure les utilisateurs appartenant aux groupes :",
        "activeusers-noresult": "Aucun utilisateur trouvé.",
        "activeusers-submit": "Afficher les utilisateurs actifs",
        "listgrouprights": "Droits des groupes d'utilisateurs",
        "movepagebtn": "Renommer la page",
        "pagemovedsub": "Renommage réussi",
        "movepage-moved": "<strong>« $1 » a été renommée en « $2 »</strong>",
-       "movepage-moved-redirect": "Une redirection depuis l'ancien nom a été créée.",
-       "movepage-moved-noredirect": "La création d'une redirection depuis l'ancien nom a été annulée.",
+       "movepage-moved-redirect": "Une redirection depuis lancien nom a été créée.",
+       "movepage-moved-noredirect": "La création d’une redirection depuis l’ancien nom a été annulée.",
        "articleexists": "Il existe déjà une page portant ce titre, ou le titre que vous avez choisi n'est pas correct.\nVeuillez en choisir un autre.",
        "cantmove-titleprotected": "Vous ne pouvez pas déplacer une page vers cet emplacement car la création de page avec ce nouveau titre a été protégée.",
        "movetalk": "Renommer aussi la page de discussion associée",
        "tags-deactivate": "désactiver",
        "tags-hitcount": "$1 modification{{PLURAL:$1||s}}",
        "tags-manage-no-permission": "Vous n'avez pas la permission de gérer les modifications de balises.",
-       "tags-manage-blocked": "Vous ne pouvez pas accéder à l’interface de modification des balises lorsque vous êtes bloqué{{GENDER:||e}}.",
+       "tags-manage-blocked": "Vous ne pouvez pas accéder à l’interface de modification des balises lorsque vous êtes bloqué{{GENDER:$1||e}}.",
        "tags-create-heading": "Créer une nouvelle balise",
        "tags-create-explanation": "Par défaut, les nouvelles balises créées seront disponibles pour les utilisateurs et les robots.",
        "tags-create-tag-name": "Nom de la balise :",
        "tags-deactivate-reason": "Motif :",
        "tags-deactivate-not-allowed": "Il n'est pas possible de désactiver la balise « $1 ».",
        "tags-deactivate-submit": "Désactiver",
-       "tags-apply-no-permission": "Vous n’avez pas le droit d’appliquer des balises de changement avec vos modifications.",
-       "tags-apply-blocked": "Vous ne pouvez pas appliquer les modifications de balises et vos modifications lorsque vous êtes bloqué{{GENDER:||e}}.",
+       "tags-apply-no-permission": "Vous n’avez pas le droit d’appliquer des balises de changement en même temps que vos modifications.",
+       "tags-apply-blocked": "Vous ne pouvez pas appliquer les modifications de balises et vos modifications lorsque vous êtes bloqué{{GENDER:$1||e}}.",
        "tags-apply-not-allowed-one": "La balise « $1 » n’est pas autorisée à être appliquée manuellement.",
        "tags-apply-not-allowed-multi": "{{PLURAL:$2|La balise suivante n’est pas autorisée à être appliquée|Les balises suivantes ne sont pas autorisées à être appliquées}} manuellement : $1",
-       "tags-update-no-permission": "Vous n’avez pas le droit d’ajouter ou de supprimer des balises de modification des révisions individuelles ou des entrées de journal.",
-       "tags-update-blocked": "Vous ne pouvez pas ajouter ou supprimer des balises de modifications lorsque vous êtes bloqué{{GENDER:||e}}.",
+       "tags-update-no-permission": "Vous n’avez pas le droit d’ajouter ou de supprimer \nles balises de modification des révisions individuelles ou des entrées de journal.",
+       "tags-update-blocked": "Vous ne pouvez pas ajouter ou supprimer des balises de modifications lorsque vous êtes bloqué{{GENDER:$1||e}}.",
        "tags-update-add-not-allowed-one": "La balise « $1 » ne peut pas être ajoutée manuellement.",
        "tags-update-add-not-allowed-multi": "{{PLURAL:$2|La balise suivante ne peut pas être ajoutée|Les balises suivantes ne peuvent pas être ajoutées}} manuellement : $1",
        "tags-update-remove-not-allowed-one": "La balise « $1 » ne peut pas être enlevée.",
        "dberr-info": "(Accès à la base de données impossible : $1)",
        "dberr-info-hidden": "(Accès à la base de données impossible)",
        "dberr-usegoogle": "Vous pouvez essayer de chercher avec Google pendant ce temps.",
-       "dberr-outofdate": "Notez que leurs index de notre contenu peuvent être dépassés.",
-       "dberr-cachederror": "Ceci est une copie cachée de la page demandée et peut être dépassée.",
-       "htmlform-invalid-input": "Des problèmes sont survenus avec certaines valeurs",
+       "dberr-outofdate": "Notez que leurs index de notre contenu peuvent ne plus être actuels.",
+       "dberr-cachederror": "Ceci est une copie cachée de la page demandée et peut ne plus être actuelle.",
+       "htmlform-invalid-input": "Des problèmes sont survenus avec certaines de vos valeurs.",
        "htmlform-select-badoption": "La valeur que vous avez spécifiée n'est pas une option valide.",
        "htmlform-int-invalid": "La valeur que vous avec spécifiée n'est pas un entier.",
        "htmlform-float-invalid": "La valeur que vous avez spécifiée n'est pas un nombre.",
        "htmlform-time-invalid": "La valeur que vous avez spécifiée n’est pas une heure reconnue. Essayez en utilisant le format HH:MM:SS.",
        "htmlform-datetime-invalid": "La valeur que vous avez spécifiée n’est pas un horodatage reconnu. Essayez en utilisant le format AAAA-MM-JJ HH:MM:SS.",
        "htmlform-date-toolow": "La valeur que vous avez spécifiée est antérieure à la date autorisée la plus ancienne, qui est $1.",
-       "htmlform-date-toohigh": "La valeur que vous avez spécifiée est postérieure à la date autorisée la plus lointaine, qui est $1.",
+       "htmlform-date-toohigh": "La valeur que vous avez spécifiée est postérieure à la plus grande date autorisée qui est $1.",
        "htmlform-time-toolow": "La valeur que vous avez spécifiée est antérieure à la plus petite heure autorisée, qui est $1.",
        "htmlform-time-toohigh": "La valeur que vous avez spécifiée est postérieure à la plus grande heure autorisée, qui est $1.",
        "htmlform-datetime-toolow": "La valeur que vous avez spécifiée est antérieure à l’horodatage autorisé le plus ancien, qui est $1.",
        "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}} $5 $6",
        "logentry-suppress-block": "$1 {{GENDER:$2|a bloqué}} {{GENDER:$4|$3}} $5 $6",
-       "logentry-suppress-reblock": "$1 {{GENDER:$2|a modifié}} les paramètres de blocage pour {{GENDER:$4|$3}} $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échargement de fichier",
        "logentry-import-upload-details": "$1 {{GENDER:$2|a importé}} $3 par téléchargement de fichier ($4 {{PLURAL:$4|révision|révisions}})",
        "logentry-import-interwiki": "$1 {{GENDER:$2|a importé}} $3 depuis un autre wiki",
index 8e542fb..3ae9648 100644 (file)
        "yourpasswordagain": "Mot de passe encore:",
        "createacct-yourpasswordagain": "Confirmes le mot de passe",
        "createacct-yourpasswordagain-ph": "Entres à nouveau le mot de passe",
-       "remembermypassword": "Garder mon mot de passe dans cette browser (pour un maximum of $1 {{PLURAL:$1|jour|jours}})",
        "yourdomainname": "Votre domaine:",
        "externaldberror": "Soit y avait une erreur avec la base d'information de certification extérieur, soit vous avez pas la permission de renouveler votre compte extérieur.",
        "login": "Connecter",
        "undo-success": "Le changement peut être renversé.  Regardez donc la comparaison en bas pour être sûr que c'est comme vous voulez, et puis sauvez les changements en bas pour finir le renversage du changement.",
        "undo-failure": "Le changement pouvait pas être renversé à cause d'une dispute de changements.",
        "undo-summary": "Défaire la révision $1 par [[Special:Contributions/$2|$2]] ([[User talk:$2|Discussion]])",
-       "cantcreateaccounttitle": "Impossible de créer le compte",
        "viewpagelogs": "Voir les notes pour cette page",
        "nohistory": "Y a pas de changements pour cette page.",
        "currentrev": "Version courante",
index d3828ca..006492e 100644 (file)
        "yourpasswordagain": "Confirmâd lo contresegno :",
        "createacct-yourpasswordagain": "Confirmâd lo contresegno",
        "createacct-yourpasswordagain-ph": "Tornâd buchiér lo contresegno",
-       "remembermypassword": "Sè rapelar de mon contresegno sur cél navegator (por lo més $1 jorn{{PLURAL:$1||s}})",
        "userlogin-remembermypassword": "Gouardar ma sèssion activa",
        "userlogin-signwithsecure": "Empleyér un branchement sècurisâ",
        "cannotloginnow-title": "Ora y at pas moyen de sè branchiér",
        "botpasswords-label-resetpassword": "Rebetar a zérô lo contresegno",
        "botpasswords-label-grants": "Drêts aplicâblos :",
        "botpasswords-help-grants": "Châque drêt balye accès ux drêts d’utilisator listâs qu’at ja un comptio. Vêde la [[Special:ListGrants|grelye des drêts]] por més d’enformacions.",
-       "botpasswords-label-restrictions": "Rèstriccions d’usâjo :",
        "botpasswords-label-grants-column": "Acordâ",
        "botpasswords-bad-appid": "Lo nom de robot « $1 » est pas justo.",
        "botpasswords-insert-failed": "Falyita de l’aponsa du nom de robot « $1 ». Est-o qu’il est ja étâ apondu ?",
        "passwordreset-emailelement": "Nom d’utilisator :\n$1\n\nContresegno temporèro :\n$2",
        "passwordreset-emailsentemail": "Se cel’adrèce èlèctronica est associyêe a voutron comptio, adonc un mèssâjo de remês’a zérô de contresegno serat mandâ.",
        "passwordreset-emailsentusername": "S’y at un’adrèce èlèctronica associyêe a cél nom d’utilisator, adonc un mèssâjo de remês’a zérô de contresegno serat mandâ.",
-       "passwordreset-emailsent-capture": "Un mèssâjo de remês’a zérô de contresegno est étâ mandâ, qu’il est montrâ ce-desot.",
-       "passwordreset-emailerror-capture": "Un mèssâjo de remês’a zérô de contresegno est étâ fêt, qu’il est montrâ ce-desot, mas l’èxpèdicion a l’utilisat{{GENDER:$2|or|rice}} at pas reussi : $1",
        "changeemail": "Changiér enlevar l’adrèce èlèctronica",
        "changeemail-header": "Complètâd cél formulèro por changiér voutron adrèce èlèctronica. Se vos voléd enlevar l’associacion d’un’adrèce èlèctronica avouéc voutron comptio, lèssiéd la novèl’adrèce èlèctronica voueda pendent la somission du formulèro.",
-       "changeemail-passwordrequired": "Vos devréd buchiér voutron contresegno por confirmar cél changement.",
        "changeemail-no-info": "Vos dête étre branchiê por arrevar tot drêt a cela pâge.",
        "changeemail-oldemail": "Adrèce èlèctronica d’ora :",
        "changeemail-newemail": "Novèl’adrèce èlèctronica :",
        "undo-nochange": "Semble que lo changement seye ja étâ dèfêt.",
        "undo-summary": "Dèfêta du changement $1 de [[Special:Contributions/$2|$2]] ([[User talk:$2|discutar]])",
        "undo-summary-username-hidden": "Dèfêta du changement $1 d’un utilisator cachiê",
-       "cantcreateaccounttitle": "Y at pas moyen de fâre lo comptio",
        "cantcreateaccount-text": "La crèacion de comptio dês cel’adrèce IP (<strong>$1</strong>) est étâye blocâye per [[User:$3|$3]].\n\nLa rêson balyêe per $3 ére <em>$2</em>",
        "cantcreateaccount-range-text": "La crèacion de comptio dês les adrèces IP dedens la plage <strong>$1</strong>, que comprend voutron adrèce IP (<strong>$4</strong>), sont étâye blocâyes per [[User:$3|$3]].\n\nLa rêson balyêe per $3 ére <em>$2</em>",
        "viewpagelogs": "Vêde los jornâls de cela pâge",
        "activeusers-intro": "O est na lista des utilisators qu’ant ègzèrciê un’activitât quinta que seye pendent {{PLURAL:$1|lo jorn passâ|los $1 jorns passâs}}.",
        "activeusers-count": "$1 accion{{PLURAL:$1||s}} pendent {{PLURAL:$3|lo jorn passâ|los $3 jorns passâs}}",
        "activeusers-from": "Fâre vêre los utilisators dês :",
-       "activeusers-hidebots": "Cachiér los robots",
-       "activeusers-hidesysops": "Cachiér los administrators",
        "activeusers-noresult": "Nion utilisator est étâ trovâ.",
        "activeusers-submit": "Fâre vêre los utilisators actifs",
        "listgrouprights": "Drêts de les tropes d’utilisators",
        "htmlform-submit": "Sometre",
        "htmlform-reset": "Dèfâre los changements",
        "htmlform-selectorother-other": "Ôtro",
-       "sqlite-has-fts": "$1 avouéc rechèrche en tèxto complèt recognua",
-       "sqlite-no-fts": "$1 sen rechèrche en tèxto complèt recognua",
        "logentry-delete-delete": "$1 {{GENDER:$2|at suprimâ}} la pâge $3",
        "logentry-delete-restore": "$1 at refêt la pâge $3",
        "logentry-delete-event": "$1 at changiê la visibilitât {{PLURAL:$5|d’un èvènement|de $5 èvènements}} du jornal dessus $3 : $4",
index d361eae..a9446ce 100644 (file)
        "yourpasswordagain": "Skriiw det paaswurd noch ans weder hen:",
        "createacct-yourpasswordagain": "Paaswurd gudkään",
        "createacct-yourpasswordagain-ph": "Du det paaswurd noch ans iin",
-       "remembermypassword": "Üüb diheer reegner üüb düür uunmelde (maksimaal för $1 {{PLURAL:$1|dai|daar}})",
        "userlogin-remembermypassword": "Uunmeldet bliiw",
        "userlogin-signwithsecure": "Seeker ferbinjang brük",
        "yourdomainname": "Din domain:",
        "botpasswords-label-resetpassword": "Paaswurd turagsaat",
        "botpasswords-label-grants": "Mögelk brükerrochten:",
        "botpasswords-help-grants": "Mä arke brükerrocht könst dü üüb ööder brükerrochten faan en brükerkonto tugrip. Luke iin uun det [[Special:ListGrants|tabel]] am muar informatjuun.",
-       "botpasswords-label-restrictions": "Kört brükerrochten:",
        "botpasswords-label-grants-column": "Tugestenen",
        "botpasswords-bad-appid": "Di bot-nööm \"$1\" gongt ei.",
        "botpasswords-insert-failed": "Di bot-nööm \"$1\" küd ei apnimen wurd. Ferlicht as hi al diar?",
        "passwordreset-emailtext-user": "Di brüker $1 üüb {{SITENAME}} hää am brükerinformatsjuunen för {{SITENAME}} uunfraaget ($4). {{PLURAL:$3|Detdiar brükerkonto as|Jodiar brükerkontos san}} mä detdiar E-Mail-Adres ferbünjen:\n\n$2\n\n{{PLURAL:$3|Detheer tidjwiis paaswurd lääpt|Joheer tidjwiis paaswurden luup}} efter {{PLURAL:$5|ään dai|$5 daar}} uf. Dü skulst di uunmelde an en nei paaswurd iinracht. Wan hoker ööders detheer uunfraag steld hää of dü din ual paaswurd käänst, säärst dü niks widjer onernem. Melde di ianfach mä din ual paaswurd uun.",
        "passwordreset-emailelement": "Brükernööm: \n$1\n\nTidjwiis paaswurd: \n$2",
        "passwordreset-emailsentemail": "Diar as en E-Mail tu di onerwais.",
-       "passwordreset-emailsent-capture": "Detdiar E-Mail, wat oner uunwiset woort, as tu di onerwais.",
-       "passwordreset-emailerror-capture": "Detdiar E-Mail, wat oner uunwiset woort, wiar tu di onerwais, oober küd ei tu di {{GENDER:$2|brüker}} ufsjüürd wurd: $1",
        "changeemail": "Feranre det E-Mail-adres",
        "changeemail-header": "Feranre det E-Mail-adres",
        "changeemail-no-info": "Dü möist önjmälded weese am ju sid diräkt tu tu gripen.",
        "undo-nochange": "Detdiar feranrang as wel al ans turagsaat wurden.",
        "undo-summary": "Feranrang $1 faan [[Special:Contributions/$2|$2]] ([[User talk:$2|Diskuschuun]]) turagsaat.",
        "undo-summary-username-hidden": "Feranrang $1 faan en ferbürgenen brüker turagsaat",
-       "cantcreateaccounttitle": "Det brükerkonto koon ei iinracht wurd",
        "cantcreateaccount-text": "Det iinrachten faan en brükerkonto faan det IP-adres '''($1)''' as faan [[User:$3|$3]] speret wurden.\n\nGrünj för det sper: ''$2''",
        "cantcreateaccount-range-text": "Det iinrachten faan brükerkontos uun det IP-adresfial <strong>$1</strong>, huar uk din IP (<strong>$4</strong>) uun as, as faan [[User:$3|$3]] speret wurden.\n\nDi grünj faan $3 wiar: <em>$2</em>",
        "viewpagelogs": "Logbuken faan detdiar sidj uunwise",
        "activeusers-intro": "Jodiar brükern wiar {{PLURAL:$1|di leetst dai| a leetst $1 daar}} aktiif.",
        "activeusers-count": "$1 {{PLURAL:$1|aktjuun|aktjuunen}} uun a {{PLURAL:$3|leetst 24 stünj|leetst $3 daar}}",
        "activeusers-from": "Wise brükern mä began üüb:",
-       "activeusers-hidebots": "Bots fersteeg",
-       "activeusers-hidesysops": "Administratooren fersteeg",
        "activeusers-noresult": "Nään brükern fünjen.",
        "listgrouprights": "Brükersköölrochten",
        "listgrouprights-summary": "Jodiar brükersköölen an hör rochten san uun detheer Wiki fäästlaanj wurden.\nMuar diartu fanjst dü üüb  [[{{MediaWiki:Listgrouprights-helppage}}|detdiar sidj]].",
        "htmlform-title-not-exists": "$1 jaft at ei.",
        "htmlform-user-not-exists": "<strong>$1</strong> jaft at ei.",
        "htmlform-user-not-valid": "<strong>$1</strong> as nään tuläät brükernööm",
-       "sqlite-has-fts": "Werjuun $1 mä halep för't schüken uun di hialer tekst.",
-       "sqlite-no-fts": "Werjuun $1 saner halep för't schüken uun di hialer tekst.",
        "logentry-delete-delete": "$1 {{Gender:$2}} hää det sidj $3 stregen",
        "logentry-delete-restore": "$1 {{GENDER:$2}} hää det sidj $3 weder iinsteld",
        "logentry-delete-event": "$1 {{GENDER:$2}} hää det uunsicht feranert faan {{PLURAL:$5|en logbuk iindrach|$5 logbuk iindracher}} üüb $3: $4",
        "feedback-external-bug-report-button": "En technisk apgoow iinschüür",
        "feedback-dialog-title": "Komentaar ufsjüür",
        "feedback-dialog-intro": "Dü könst det ianfach formulaar diar oner för dan komentaar brük. Dan komentaar komt tuup mä dan brükernööm tu det sidj „$1“.",
-       "feedback-error-title": "Diar as wat skiaf gingen",
        "feedback-error1": "Feeler: Ünbekäänd API-bööd",
        "feedback-error2": "Feeler: Bewerkin as skiaf gingen.",
        "feedback-error3": "Feeler: Nian API-oonswaar",
index 20c4d1c..159834d 100644 (file)
        "yourpasswordagain": "Torne a scrivile",
        "createacct-yourpasswordagain": "Conferme la password",
        "createacct-yourpasswordagain-ph": "Torne a scrivi la tô password",
-       "remembermypassword": "Visiti di me di une session a chê altre (fin a $1 {{PLURAL:$1|zornade|zornadis}})",
        "userlogin-remembermypassword": "Tegnimi colegât",
        "yourdomainname": "Il to domini",
        "login": "Jentre",
        "activeusers-intro": "Cheste e je une liste dai utents che a àn vût cualchi gjenar di ativitât {{PLURAL:$1|te ultime dì|tai ultins $1 diis}}.",
        "activeusers-count": "$1 {{PLURAL:$1|cambiament|cambiaments}} {{PLURAL:$3|te ultime dì|tai ultins $3 diis}}",
        "activeusers-from": "Mostre i utents scomençant di:",
-       "activeusers-hidebots": "Plate i bots",
-       "activeusers-hidesysops": "Plate i aministradôrs",
        "activeusers-noresult": "Nissun utent cjatât.",
        "listgrouprights": "Dirits dai grups di utents",
        "listgrouprights-group": "Grup",
index 93caec8..e10b921 100644 (file)
        "yourpasswordagain": "Jo wachtwurd (nochris)",
        "createacct-yourpasswordagain": "Befêstigje wachtwurd",
        "createacct-yourpasswordagain-ph": "Befêstigje wachtwurd nochris",
-       "remembermypassword": "Oare kear fansels oanmelde (maksimaal $1 {{PLURAL:$1|dei|dagen}})",
        "userlogin-remembermypassword": "Ynlogd bliuwe",
        "userlogin-signwithsecure": "Feilige ferbining brûke",
        "yourdomainname": "Jo domein:",
        "undo-failure": "De feroarings kinne net werom set wurde troch in konflikt mei oare feroarings tuskentroch.",
        "undo-norev": "De feroaring kin werom set wurde, omdat it net bestiet of is wiske.",
        "undo-summary": "Werom sette fan ferzje $1 fan [[Special:Contributions/$2|$2]] ([[User talk:$2|Oerlis]])",
-       "cantcreateaccounttitle": "Registrearjen is mislearre.",
        "cantcreateaccount-text": "Registraasje fan in brûker fia dit IP-adres ('''$1''') is blokkearre troch [[User:$3|$3]].\n\nDe fan $3 opjûne reden is ''$2''",
        "viewpagelogs": "Lochboek foar dizze side sjen litte",
        "nohistory": "Dit is de earste ferzje fan de side.",
        "listusers-blocked": "(blokkearre)",
        "activeusers": "Aktive meidoggers",
        "activeusers-count": "$1 {{PLURAL:$1|aksje|aksjes}} yn de lêste {{PLURAL:$3|dei|$3 dagen}}",
-       "activeusers-hidebots": "Bots ferbergje",
-       "activeusers-hidesysops": "Behearders ferbergje",
        "activeusers-noresult": "Gjin meidoggers fûn.",
        "listgrouprights": "Rjochten fan brûkersgroepen",
        "listgrouprights-summary": "Op dizze side steane de brûkersgroepen yn dizze wiki beskreaun, mei har derby hearrende rjochten.\nDer kin [[{{MediaWiki:Listgrouprights-helppage}}|ekstra ynformaasje]] oer yndividuele rjochten oanwêzich wêze.",
        "feedback-back": "Foarige",
        "feedback-cancel": "Annulearje",
        "feedback-close": "Dien",
-       "feedback-error-title": "Flater",
        "feedback-message": "Berjocht:",
        "feedback-subject": "Ûnderwerp:",
        "feedback-submit": "Ferstjoere",
index 25c12fd..8509a8a 100644 (file)
        "tog-hidepatrolled": "Folaigh giotaí eagartha smachtaithe sna athruithe is déanaí",
        "tog-newpageshidepatrolled": "Folaigh leathanaigh smachtaithe ó liosta leathanaigh úire",
        "tog-extendwatchlist": "Leathnaigh an liosta faire chun gach athrú cuí a thaispeáint",
-       "tog-usenewrc": "Stíl nua do na hathruithe is déanaí (JavaScript riachtanach)",
+       "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í eagair (JavaScript)",
-       "tog-editondblclick": "Déghliogáil chun leathanaigh a chur in eagar (JavaScript)",
-       "tog-editsectiononrightclick": "Cumasaigh mír-eagarthóireacht le deaschliceáil<br /> ar cheannteidil (JavaScript)",
+       "tog-showtoolbar": "Taispeáin an barra uirlisí eagair",
+       "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",
-       "tog-watchdefault": "Déan faire ar leathanaigh a athraím",
-       "tog-watchmoves": "Cuir ar mo liosta faire leathanaigh a athainmnaím",
-       "tog-watchdeletion": "Cuir ar mo liosta faire leathanaigh a scriosaim",
+       "tog-watchdefault": "Cuir leathanaigh agus comhaid a athraím le mo liosta faire",
+       "tog-watchmoves": "Cuir ar mo liosta faire leathanaigh agus comhaid a bhogaim",
+       "tog-watchdeletion": "Cuir ar mo liosta faire leathanaigh agus comhaid a scriosaim",
        "tog-minordefault": "Déan mionathruithe de gach aon athrú, mar réamhshocrú",
        "tog-previewontop": "Cuir an réamhamharc os cionn an bhosca eagair, <br />agus ná cuir é taobh thíos de",
        "tog-previewonfirst": "Taispeáin réamhamharc don chéad athrú",
-       "tog-enotifwatchlistpages": "Cuir ríomhphost chugam nuair a athraítear leathanaigh",
+       "tog-enotifwatchlistpages": "Cuir ríomhphost chugam nuair a athraítear leathanach nó comhad atá ar mo liosta faire",
        "tog-enotifusertalkpages": "Cuir ríomhphost chugam nuair a athraítear mo leathanach phlé úsáideora",
        "tog-enotifminoredits": "Cuir ríomhphost chugam nuair a dhéantar mionathruithe chomh maith",
        "tog-enotifrevealaddr": "Taispeáin mo sheoladh ríomhphoist i dteachtaireachtaí fógra",
        "tog-shownumberswatching": "Taispeán an méid úsáideoirí atá ag faire",
-       "tog-oldsig": "Réamhamharc ar an síniú atá ann:",
+       "tog-oldsig": "An síniú atá agat faoi láthair:",
        "tog-fancysig": "Sínithe bunúsacha mar vicítéacs (gan nasc uathoibríoch)",
-       "tog-uselivepreview": "Bain úsáid as réamhamharc beo (JavaScript) (Turgnamhach)",
+       "tog-uselivepreview": "Bain úsáid as réamhamharc beo",
        "tog-forceeditsummary": "Cuir in iúl dom nuair a chuirim isteach achoimre eagair folamh",
        "tog-watchlisthideown": "Folaigh mo chuid athruithe ón liosta faire",
        "tog-watchlisthidebots": "Folaigh athruithe de chuid róbat ón liosta faire",
        "moredotdotdot": "Tuilleadh...",
        "mypage": "Leathanach",
        "mytalk": "Plé",
-       "anontalk": "Plé don seoladh IP seo",
+       "anontalk": "Plé",
        "navigation": "Nascleanúint",
        "and": "&#32;agus",
        "qbfind": "Aimsigh",
        "protect": "Glasáil",
        "protect_change": "athraigh",
        "protectthispage": "Glasáil an lch seo",
-       "unprotect": "Díghlasáil",
-       "unprotectthispage": "Díghlasáil an lch seo",
+       "unprotect": "Athraigh an chosaint",
+       "unprotectthispage": "Athraigh an chosaint atá ag an lch seo",
        "newpage": "Leathanach nua",
        "talkpage": "Pléigh an lch seo",
        "talkpagelinktext": "Plé",
        "pool-errorunknown": "Earráid anaithnid",
        "aboutsite": "Maidir leis an {{SITENAME}}",
        "aboutpage": "Project:Maidir leis",
-       "copyright": "Tá an t-ábhar le fáil faoin $1.",
+       "copyright": "Tá an t-ábhar le fáil faoin $1 mura sonraítear a mhalairt.",
        "copyrightpage": "{{ns:project}}:Cóipchearta",
        "currentevents": "Cúrsaí reatha",
        "currentevents-url": "Project:Cúrsaí reatha",
        "laggedslavemode": "Rabhadh: B'fhéidir nach bhfuil na nuashonrúcháin is déanaí le feiceáil ar an leathanach seo.",
        "readonly": "Bunachar sonraí faoi ghlas",
        "enterlockreason": "Iontráil cúis don glasáil, agus meastachán\nden uair a díghlasálfar an bunachar sonraí.",
-       "readonlytext": "Tá an bunachar sonraí {{GRAMMAR:genitive|{{SITENAME}}}} glasáilte anois do iontráilí agus athruithe nua\n(is dócha go bhfuil sé do gnáthchothabháil).\nTar éis seo, díghlasálfar an bunachar sonraí arís.\nTugadh an míniú seo ag an riarthóir a ghlasáil é:\n$1",
+       "readonlytext": "Tá an bunachar sonraí glasáilte anois agus ní féidir iontrálacha nua ná athruithe eile a dhéanamh. Gach seans go bhfuil gnáthchothabháil ar siúl, agus beidh gach rud ar ais mar a bhí nuair a bheidh sin thart.\n\nThug an riarthóir a ghlasáil é an míniú seo:\n$1",
        "missing-article": "Ní bhfuarthas téacs an leathanaigh ceart, darbh ainm \"$1\" $2.\n\nDe ghnáth, tarlaíonn sé seo nuair a leantar nasc stáire nó difr chuig leathanach a scriosadh.\n\nMurab fhíor é seo, is féidir go bhfuair tú fabht sa bhogearraí. Beimid buíoch duit é a chur in iúl do [[Special:ListUsers/sysop|riarthóir]], chomh maith le URL an suíoimh.",
        "missingarticle-rev": "(leagan#: $1)",
        "missingarticle-diff": "(Dif: $1, $2)",
        "cannotdelete": "Ní féidir an leathanach nó comhad \"$1\" a scriosadh.\nB'fhéidir gur scrios duine eile é cheana féin.",
        "badtitle": "Teideal neamhbhailí",
        "badtitletext": "Bhí teideal an leathanaigh a d'iarr tú ar neamhbhailí, folamh, nó\nteideal idirtheangach nó idirvicí nasctha go mícheart.",
-       "perfcached": "Fuarthas na sonraí a leanas as taisce, agus is dócha go bhfuil siad as dáta. A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.",
+       "perfcached": "Fuarthas na sonraí a leanas as taisce, agus seans go bhfuil siad as dáta. Tá {{PLURAL:$1|aon toradh amháin|$1 thoradh}} ar fáil sa taisce.",
        "perfcachedts": "Tá na sonraí seo a leanas sa taisce, nuashonraithe $1. A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.",
        "viewsource": "Féach ar fhoinse",
        "actionthrottled": "Gníomh scóigthe",
-       "actionthrottledtext": "Mar theicníc frithurscair, ní féidir lear an gníomh seo a dhéanamh barraíocht taobh istigh de thréimhse ghairid ama, agus tá an méid sáraithe agat.\nBain trial arís as i gcionn cúpla bomaite más é do thoil é.",
+       "actionthrottledtext": "Mar theicníc frithurscair, ní féidir lear an gníomh seo a dhéanamh barraíocht taobh istigh de thréimhse ghairid ama, agus tá an méid sáraithe agat.\nBain triail arís as i gcionn cúpla bomaite más é do thoil é.",
        "protectedpagetext": "Tá an leathanach seo glasáilte chun coisc ar eagarthóireacht.",
        "viewsourcetext": "Is féidir foinse an leathanach seo a fheiceáil ná a cóipeáil:",
        "editinginterface": "'''Rabhadh:''' Tá tú ag athrú leathanaigh a bhfuil téacs comhéadain do na bogearraí air. Cuirfear athruithe ar an leathanach seo i bhfeidhm ar an gcomhéadan úsáideora.\nMás maith leat MediaWiki a aistriú, cuimhnigh ar [https://translatewiki.net/wiki/Main_Page?setlang=ga translatewiki.net] (tionscadal logánaithe MediaWiki) a úsáid.",
        "nocookieslogin": "Úsáideann {{SITENAME}} fianáin chun úsáideoirí a logáil isteach.\nTá fianáin díchumasaithe agat.\nCumasaigh iad agus bain triail eile as, le do thoil.",
        "nocookiesforlogin": "{{int:nocookieslogin}}",
        "noname": "Níor thug tú ainm úsáideora bailí.",
-       "loginsuccesstitle": "Logáladh isteach thú",
+       "loginsuccesstitle": "Logáilte isteach",
        "loginsuccess": "'''Tá tú logáilte isteach anois sa {{SITENAME}} mar \"<nowiki>$1</nowiki>\".'''",
-       "nosuchuser": "Níl aon úsáideoir ann leis an ainm \"$1\".\nTá ainmneacha úsáideoir cásíogair.\nCinntigh do litriú, nó [[Special:CreateAccount|bain úsáid as an foirm thíos]] chun cuntas úsáideora nua a chruthú.",
+       "nosuchuser": "Níl aon úsáideoir ann darb ainm \"$1\".\nTá ainmneacha úsáideoir cásíogair.\nSeiceáil an litriú, nó [[Special:CreateAccount|cruthaigh cuntas nua]].",
        "nosuchusershort": "Níl aon úsáideoir ann leis an ainm \"$1\". Cinntigh do litriú.",
        "nouserspecified": "Caithfidh ainm úsáideoir a shonrú.",
        "login-userblocked": "Tá an t-úsáideoir seo faoi bhac. Níl cead aige/aici logáil isteach.",
        "wrongpassword": "D'iontráil tú focal faire mícheart.<br />\nBain triail eile as.",
        "wrongpasswordempty": "Níor iontráil tú focal faire. Bain triail eile as.",
        "passwordtooshort": "Is riachtanach go bhfuil {{PLURAL:$1|carachtar amháin|$1 carachtair}} ann ar a laghad i bhfocal faire.",
-       "mailmypassword": "Seol m'fhocal faire chugam.",
+       "mailmypassword": "Focal faire a athshocrú",
        "passwordremindertitle": "Cuimneachán an fhocail faire ó {{SITENAME}}",
        "passwordremindertext": "D'iarr duine éigin (tusa de réir cosúlachta, ón seoladh IP $1) go sheolfaimis focal faire {{GRAMMAR:genitive|{{SITENAME}}}} nua  ($4).\n\"$3\" an focal faire don úsáideoir \"$2\" anois. Ba chóir duit lógail isteach anois agus d'fhocal faire a athrú.\n\nRachaidh d'fhocail faire sealadach as feidhm i gceann {{PLURAL:$5|lá amháin|$5 lae}}.",
        "noemail": "Níl aon seoladh ríomhphoist i gcuntas don úsáideoir \"$1\".",
        "search-section": "(gearradh $1)",
        "search-suggest": "An raibh $1 á lorg agat?",
        "search-interwiki-caption": "Comhthionscadail",
-       "search-interwiki-default": "$1 torthaí:",
+       "search-interwiki-default": "Torthaí ó $1:",
        "search-interwiki-more": "(níos mó)",
        "search-relatedarticle": "Gaolmhar",
        "searchrelated": "gaolmhara",
        "prefs-rc": "Athruithe is déanaí",
        "prefs-watchlist": "Liosta faire",
        "prefs-watchlist-days": "Líon na laethanta le taispeáint sa liosta faire:",
-       "prefs-watchlist-days-max": "Maximum $1 {{PLURAL:$1|day|days}}",
+       "prefs-watchlist-days-max": "$1 {{PLURAL:$1|lá}} ar a mhéad",
        "prefs-watchlist-edits": "Líon na n-athruithe le taispeáint sa liosta leathnaithe faire:",
        "prefs-watchlist-edits-max": "Uasmhéid: 1000",
        "prefs-misc": "Éagsúla",
        "savedprefs": "Sábháladh do chuid sainroghanna.",
        "timezonelegend": "Crios ama:",
        "localtime": "An t-am áitiúil:",
-       "timezoneuseserverdefault": "Úsáid am réamhshocraithe an fhreastalaí",
+       "timezoneuseserverdefault": "Úsáid am réamhshocraithe an vicí ($1)",
        "timezoneuseoffset": "Eile (cuir isteach an difear)",
        "servertime": "Am an fhreastalaí:",
        "guesstimezone": "Líon ón mbrabhsálaí",
index e6cbbcb..42b617f 100644 (file)
        "yourname": "Kullanıcı adınız",
        "yourpassword": "Parol",
        "yourpasswordagain": "Parolu enidän yaz",
-       "remembermypassword": "Parolu hatırla (en fazla $1 {{PLURAL:$1|gün|gün}} için)",
        "yourdomainname": "Domen adınız",
        "login": "Gir",
        "nav-login-createaccount": "Gir / esap yarat",
        "permissionserrors": "İzin yannışları",
        "permissionserrorstext-withaction": "Aşaadaki {{PLURAL:$1|sebep|sebepler}}ä deyni yok $2 kuvediniz:",
        "recreate-moveddeleted-warn": "'''Bak: Siz yarattınız o sayfayı angısı ilerdän silindi.'''\n\nLäazım düşünmää bu sayfayı redaktat etmää devam etmää deyni.\nSayfanın silmää jurnalı raatlık için yazılêr burada:",
-       "cantcreateaccounttitle": "Yok nicä esap yaratılsın",
        "viewpagelogs": "Bu yaprak için jurnalları göster",
        "currentrev": "Şindiki versiya",
        "currentrev-asof": "$1 sayfanın şindiki halı",
index d6b8a34..e3a2daf 100644 (file)
        "yourname": "用户名:",
        "yourpassword": "密码:",
        "yourpasswordagain": "输过道密码:",
-       "remembermypassword": "记定我𠮶密码(顶多$1{{PLURAL:$1|日|日}})",
        "yourdomainname": "倷𠮶域名:",
        "externaldberror": "外部验证数据库出错,或倷更新伓正倷𠮶外部帐户。",
        "login": "登入",
        "undo-success": "个只编辑可以拖取销。请检查吖以确定个系倷想扤𠮶,接到保存修改去完成撤销编辑。",
        "undo-failure": "半中𠮶编辑有人挭仗,个只编辑伓可以拖取销。",
        "undo-summary": "取消由[[Special:Contributions/$2|$2]] ([[User talk:$2|对话]])所修订𠮶 $1",
-       "cantcreateaccounttitle": "新开伓正帐户",
        "cantcreateaccount-text": "IP 地址伓能 ('''$1''') 新开帐户。个可能系因为经常有来自倷𠮶学堂或网络供应商 (ISP)故意𠮶破坏扤得。",
        "viewpagelogs": "眵吖个页𠮶日志",
        "nohistory": "个页冇修改历史。",
index 1cb2ad7..3a58c92 100644 (file)
        "yourname": "用戶名:",
        "yourpassword": "密碼:",
        "yourpasswordagain": "輸過道密碼:",
-       "remembermypassword": "記定我嗰密碼(頂多$1{{PLURAL:$1|日|日}})",
        "yourdomainname": "倷嗰域名:",
        "externaldberror": "外部驗證資料庫出錯,或倷更新伓正倷嗰外部帳戶。",
        "login": "登入",
        "undo-success": "箇隻編輯可以拕取銷。請檢查吖以確定箇係倷想扤嗰,接到保存修改去完成撤銷編輯。",
        "undo-failure": "半中嗰編輯有人挭仗,箇隻編輯伓可以拕取銷。",
        "undo-summary": "取消由[[Special:Contributions/$2|$2]] ([[User talk:$2|對話]])所修訂嗰 $1",
-       "cantcreateaccounttitle": "新開伓正帳戶",
        "cantcreateaccount-text": "IP 位址伓能 ('''$1''') 新開帳戶。箇可能係因為經常有來自倷嗰學堂或網絡供應商 (ISP)故意嗰破壞扤得。",
        "viewpagelogs": "眵吖箇頁嗰日誌",
        "nohistory": "箇頁冇修改歷史。",
index c658811..93fb479 100644 (file)
        "yourpasswordagain": "Ath-sgrìobh facal-faire",
        "createacct-yourpasswordagain": "Dearbhaich am facal-faire",
        "createacct-yourpasswordagain-ph": "Cuir a-steach am facal-faire a-rithist",
-       "remembermypassword": "Cuimhnich gu bheil mi air logadh a-steach air a' choimpiutair seo (suas gu $1 {{PLURAL:$1|latha|latha|làithean|latha}})",
        "userlogin-remembermypassword": "Cum air logadh a-steach mi",
        "userlogin-signwithsecure": "Cleachd ceangal tèarainte",
        "yourdomainname": "An àrainn-lìn agad:",
        "activeusers-intro": "Seo liosta dhe na cleachdaichean a rinn gnìomh air choireigin am broinn {{PLURAL:$1|an $1 latha|an $1 latha|nan $1 làithean|an $1 latha}} mu dheireadh.",
        "activeusers-count": "$1 {{PLURAL:$1|ghnìomh|ghnìomh|gnìomhan|gnìomh}} am broinn {{PLURAL:$3|an $3 latha|an $3 latha|nan $3 làithean|an $3 latha}} mu dheireadh.",
        "activeusers-from": "Seall cleachdaichean o seo a-mach:",
-       "activeusers-hidebots": "Falaich na botaichean",
-       "activeusers-hidesysops": "Falaich na rianairean",
        "activeusers-noresult": "Cha deach cleachdaiche a lorg.",
        "listgrouprights": "Ceadan nam buidhnean chleachdaichean",
        "listgrouprights-summary": "chì thu liosta dhe na buidhnean chleachdaichean a tha san uicidh seo 's na ceadan inntrigidh aca.\nDh'fhaoidte gu bheil [[{{MediaWiki:Listgrouprights-helppage}}|barrachd fiosrachaidh]] mu cheadan fa leth ann.",
        "htmlform-cloner-create": "Cuir barrachd ris",
        "htmlform-cloner-delete": "Thoir air falbh",
        "htmlform-cloner-required": "Tha luach a dhìth.",
-       "sqlite-has-fts": "$1 le taic ri lorg teacsa shlàin",
-       "sqlite-no-fts": "$1 gun taic ri lorg teacsa shlàin",
        "logentry-delete-delete": "Sguab $1 às duilleag $3",
        "logentry-delete-restore": "Dh'aisig $1 duilleag $3",
        "logentry-delete-event": "Dh'atharraich $1 an fhaicsinneachd aig $5 {{PLURAL:$5|tachartas|thachartas|tachartasan|tachartas}} an loga air $3: $4",
index e8675d5..cfc1093 100644 (file)
        "laggedslavemode": "'''Aviso:''' A páxina pode non conter as actualizacións recentes.",
        "readonly": "Base de datos pechada",
        "enterlockreason": "Dea unha razón para o peche, incluíndo unha estimación de até cando se manterá",
-       "readonlytext": "Nestes intres a base de datos está pechada a novas entradas e outras modificacións, probablemente debido a procesos de mantemento, tras os que volverá á normalidade.\n\nO administrador de sistemas que a pechou deu esta explicación: $1",
+       "readonlytext": "Nestes intres a base de datos está pechada a novas entradas e outras modificacións, probablemente debido a procesos de mantemento, tralos que volverá á normalidade.\n\nO administrador do sistema que a pechou deu esta explicación: $1",
        "missing-article": "A base de datos non atopou o texto da páxina chamada \"$1\" $2, que debera ter atopado.\n\nNormalmente, isto está causado por seguir unha ligazón cara a unha diferenza vella ou a unha páxina que foi borrada.\n\nSe este non é o caso, poida que atopase un erro no software.\nPor favor, comuníquello a un [[Special:ListUsers/sysop|administrador]] tomando nota do enderezo URL.",
        "missingarticle-rev": "(nº de revisión: $1)",
        "missingarticle-diff": "(dif: $1, $2)",
        "readonly_lag": "A base de datos bloqueouse automaticamente mentres os servidores levan a cabo a sincronización co servidor principal",
-       "nonwrite-api-promise-error": "A cabeceira HTTP  'Promise-Non-Write-API-Action' foi enviada pero a petición foi feita a un módulo de escritura da API.",
+       "nonwrite-api-promise-error": "Enviouse a cabeceira HTTP \"Promise-Non-Write-API-Action\", pero a petición fíxose a un módulo de escritura da API.",
        "internalerror": "Erro interno",
        "internalerror_info": "Erro interno: $1",
        "internalerror-fatal-exception": "Excepción grave de tipo \"$1\"",
        "no-null-revision": "Non se puido crear a nova revisión nula para a páxina \"$1\"",
        "badtitle": "Título incorrecto",
        "badtitletext": "O título da páxina pedida non era válido, estaba baleiro ou proviña dunha ligazón interlingüística ou interwiki incorrecta.\nPoida que conteña un ou máis caracteres dos que non se poden empregar nos títulos.",
-       "title-invalid-empty": "O título de páxina solicitado está baleiro ou só contén o nome do espazo de nomes.",
+       "title-invalid-empty": "O título de páxina solicitado está baleiro ou só contén o nome dun espazo de nomes.",
        "title-invalid-utf8": "O título de páxina solicitado contén unha secuencia UTF-8 inválida.",
-       "title-invalid-interwiki": "O título da páxina solicitada contén unha ligazón interwiki que non pode usarse nos títulos.",
-       "title-invalid-talk-namespace": "O título de páxina solicitado refírese a unha páxina de conversa que pode non existir.",
+       "title-invalid-interwiki": "O título de páxina solicitado contén unha ligazón interwiki que non se pode utilizar nos títulos.",
+       "title-invalid-talk-namespace": "O título de páxina solicitado fai referencia a unha páxina de conversa que pode non existir.",
        "title-invalid-characters": "O título de páxina solicitado contén caracteres inválidos: \"$1\".",
-       "title-invalid-relative": "O título ten unha ruta relativa. Os títulos de páxina relativos (./, ../) son inválidos, porque non van ser accesibles cando se consulten co navegador do usuario.",
+       "title-invalid-relative": "O título ten unha ruta relativa. Os títulos de páxina relativos (./, ../) son inválidos, porque a miúdo non son accesibles cando se consultan desde o navegador do usuario.",
        "title-invalid-magic-tilde": "O título de páxina solicitado contén unha secuencia con tiles inválida (<nowiki>~~~</nowiki>).",
-       "title-invalid-too-long": "O título de páxina solicitado é moi longo. Non pode ser maior de {{PLURAL:$1|byte|bytes}} en codificación UTF-8.",
-       "title-invalid-leading-colon": "O título de páxina solicitado contén un punto e coma inválido ó comezo.",
+       "title-invalid-too-long": "O título de páxina solicitado é moi longo. Non pode ser maior de $1 {{PLURAL:$1|byte|bytes}} en codificación UTF-8.",
+       "title-invalid-leading-colon": "O título de páxina solicitado contén un carácter de dous puntos non permitido ao comezo.",
        "perfcached": "Esta información é da memoria caché e pode ser que non estea completamente actualizada. Hai un máximo de {{PLURAL:$1|$1 resultado dispoñible|$1 resultados dispoñibles}} na caché.",
        "perfcachedts": "Esta información é da memoria caché. Última actualización: $2 ás $3. Hai un máximo de {{PLURAL:$4|$4 resultado dispoñible|$4 resultados dispoñibles}} na caché.",
        "querypage-no-updates": "Neste momento están desactivadas as actualizacións nesta páxina. O seu contido non se modificará.",
        "viewsource": "Ver o código fonte",
        "viewsource-title": "Ver o código fonte de \"$1\"",
        "actionthrottled": "Acción limitada",
-       "actionthrottledtext": "Como medida contra os abusos, a acción que está realizando está limitada a un número determinado de veces nun periodo curto de tempo, e superou ese límite.\nInténteo de novo nuns minutos.",
+       "actionthrottledtext": "Como medida contra os abusos, ten limitada a acción que está realizando a un número determinado de veces nun período curto de tempo, e vostede superou ese límite.\nInténteo de novo nuns minutos.",
        "protectedpagetext": "Esta páxina foi protexida para evitar a edición e outras accións.",
        "viewsourcetext": "Pode ver e copiar o código fonte desta páxina.",
        "viewyourtext": "Pode ver e copiar o código fonte <strong>das súas edicións</strong> nesta páxina.",
        "mypreferencesprotected": "Non ten os permisos necesarios para editar as súas preferencias.",
        "ns-specialprotected": "Non se poden editar as páxinas no espazo de nomes \"{{ns:special}}\".",
        "titleprotected": "Este título foi protexido da creación por [[User:$1|$1]].\nO motivo achegado é <em>$2</em>.",
-       "filereadonlyerror": "Non se puido modificar o ficheiro \"$1\" porque o repositorio \"$2\" está en modo de só lectura.\n\nO administrador de sistemas que bloqueou o repositorio achegou este motivo: \"$3\".",
+       "filereadonlyerror": "Non se puido modificar o ficheiro \"$1\" porque o repositorio \"$2\" está en modo de só lectura.\n\nO administrador do sistema que bloqueou o repositorio achegou este motivo: \"$3\".",
        "invalidtitle-knownnamespace": "Título inválido co espazo de nomes \"$2\" e o texto \"$3\"",
        "invalidtitle-unknownnamespace": "Título inválido cun número de espazo de nomes, $1, descoñecido e o texto \"$2\"",
        "exception-nologin": "Non accedeu ao sistema",
        "exception-nologin-text": "Acceda ao sistema para poder realizar esa acción ou acceder a esa páxina.",
        "exception-nologin-text-manual": "Debe $1 para poder realizar esa acción ou acceder a esa páxina.",
-       "virus-badscanner": "Configuración errónea: escáner de virus descoñecido: ''$1''",
+       "virus-badscanner": "Configuración errónea: Escáner de virus descoñecido: <em>$1</em>",
        "virus-scanfailed": "fallou o escaneado (código $1)",
        "virus-unknownscanner": "antivirus descoñecido:",
        "logouttext": "'''Agora está fóra do sistema.'''\n\nTeña en conta que algunhas páxinas poden continuar aparecendo como se aínda estivese dentro do sistema, ata que limpe a caché do seu navegador.",
        "cannotlogoutnow-title": "Non se pode saír da sesión agora mesmo",
        "cannotlogoutnow-text": "Non é posible saír da sesión cando se usa $1.",
        "welcomeuser": "Reciba a nosa benvida, $1!",
-       "welcomecreation-msg": "A súa conta foi creada correctamente.\nNon esqueza personalizar as súas [[Special:Preferences|preferencias de {{SITENAME}}]].",
+       "welcomecreation-msg": "A súa conta creouse correctamente.\nNon esqueza personalizar as súas [[Special:Preferences|preferencias]] de {{SITENAME}}.",
        "yourname": "Nome de usuario:",
        "userlogin-yourname": "Nome de usuario",
        "userlogin-yourname-ph": "Insira o seu nome de usuario",
        "createacct-yourpasswordagain-ph": "Insira o contrasinal outra vez",
        "userlogin-remembermypassword": "Manter a miña conexión",
        "userlogin-signwithsecure": "Utilizar a conexión segura",
-       "cannotlogin-title": "Non se pode acceder ó sistema",
-       "cannotlogin-text": "O acceso ó sistema non está dispoñible.",
+       "cannotlogin-title": "Non se pode acceder ao sistema",
+       "cannotlogin-text": "O acceso ao sistema non está dispoñible.",
        "cannotloginnow-title": "Non se pode iniciar a sesión agora mesmo",
        "cannotloginnow-text": "Non é posible iniciar a sesión cando se usa $1.",
        "cannotcreateaccount-title": "Non se poden crear contas de usuario",
-       "cannotcreateaccount-text": "A creación directa de contas de usuario non está habilitada nesta wiki.",
+       "cannotcreateaccount-text": "A creación directa de contas de usuario non está activada neste wiki.",
        "yourdomainname": "O seu dominio:",
        "password-change-forbidden": "Non pode mudar os contrasinais neste wiki.",
        "externaldberror": "Ou ben se produciu un erro da base de datos na autenticación externa ou ben non se lle permite actualizar a súa conta externa.",
        "userlogin-resetpassword-link": "Esqueceu o contrasinal?",
        "userlogin-helplink2": "Axuda co rexistro",
        "userlogin-loggedin": "Xa accedeu ao sistema como {{GENDER:$1|$1}}.\nUtilice o formulario inferior para acceder como outro usuario.",
-       "userlogin-reauth": "Debe conectarse de novo para verificar que é {{GENDER:$1|$1}}.",
+       "userlogin-reauth": "Debe conectarse de novo para verificar que vostede é {{GENDER:$1|$1}}.",
        "userlogin-createanother": "Crear outra conta",
        "createacct-emailrequired": "Enderezo de correo electrónico",
        "createacct-emailoptional": "Enderezo de correo electrónico (opcional)",
        "createaccountreason": "Motivo:",
        "createacct-reason": "Motivo",
        "createacct-reason-ph": "Por que crea outra conta?",
-       "createacct-reason-help": "Mensaxe que se mostra no rexistro de creación de contas",
+       "createacct-reason-help": "Mensaxe mostrada no rexistro de creación de contas",
        "createacct-submit": "Crear a conta",
        "createacct-another-submit": "Crear a conta",
        "createacct-continue-submit": "Continuar a creación da conta",
        "nocookiesnew": "A conta de usuario foi creada, pero non accedeu ao sistema.\n{{SITENAME}} para rexistrar os usuarios.\nVostede ten as cookies deshabilitadas.\nPor favor, habilíteas e logo acceda ao sistema co seu novo nome de usuario e contrasinal.",
        "nocookieslogin": "{{SITENAME}} usa cookies para rexistrar os usuarios.\nVostede ten as cookies deshabilitadas.\nPor favor, habilíteas e inténteo de novo.",
        "nocookiesfornew": "Non se creou a conta de usuario porque non puidemos confirmar a súa orixe.\nAsegúrese de que ten as cookies habilitadas, volva cargar a páxina e inténteo de novo.",
-       "createacct-loginerror": "A conta creouse correctamente, pero non se puido conectar automaticamente. Proceda ó [[Special:UserLogin|acceso manual]].",
+       "createacct-loginerror": "A conta creouse correctamente, pero non se puido conectar automaticamente. Vaia ao [[Special:UserLogin|acceso manual]].",
        "noname": "Non especificou un nome de usuario válido.",
-       "loginsuccesstitle": "Conectado",
+       "loginsuccesstitle": "Accedeu ao sistema",
        "loginsuccess": "<strong>Accedeu ao sistema de {{SITENAME}} como \"$1\".</strong>",
        "nosuchuser": "Non existe ningún usuario chamado \"$1\".\nOs nomes de usuario diferencian entre maiúsculas e minúsculas.\nVerifique a ortografía ou [[Special:CreateAccount|cree unha nova conta]].",
        "nosuchusershort": "Non existe ningún usuario chamado \"$1\".\nVerifique o nome que inseriu.",
        "wrongpassword": "O contrasinal escrito é incorrecto.\nPor favor, insira outro.",
        "wrongpasswordempty": "O campo do contrasinal estaba en branco.\nPor favor, inténteo de novo.",
        "passwordtooshort": "Os contrasinais deben conter, como mínimo, {{PLURAL:$1|1 carácter|$1 caracteres}}.",
-       "passwordtoolong": "Os contrasinais non deben ser máis longo de {{PLURAL:$1|1 carácter|$1 caracteres}}.",
-       "passwordtoopopular": "Os contrasinais escollidos máis habitualmente non poden usarse. Por favor, escolle un contrasinal máis único.",
+       "passwordtoolong": "Os contrasinais non poden ser máis longo de {{PLURAL:$1|1 carácter|$1 caracteres}}.",
+       "passwordtoopopular": "Non pode utilizar un contrasinal dos habitualmente elixidos pola xente. Por favor, escolla un contrasinal máis orixinal.",
        "password-name-match": "O seu contrasinal debe ser diferente do seu nome de usuario.",
        "password-login-forbidden": "O uso deste nome de usuario e contrasinal foi prohibido.",
        "mailmypassword": "Restablecer o contrasinal",
        "passwordremindertitle": "Novo contrasinal temporal para {{SITENAME}}",
-       "passwordremindertext": "Alguén (probablemente vostede, desde o enderezo IP $1) solicitou un novo\ncontrasinal para acceder a {{SITENAME}} ($4). Un contrasinal temporal para o usuario\n\"$2\" foi creado e fixado como \"$3\". Se esa foi a súa\nintención, necesitará acceder ao sistema e escoller un novo contrasinal agora.\nO seu contrasinal temporal caducará {{PLURAL:$5|nun día|en $5 días}}.\n\nSe foi alguén diferente o que fixo esta solicitude ou se xa se lembra do seu contrasinal\ne non o quere modificar, pode ignorar esta mensaxe e\ncontinuar a utilizar o seu contrasinal vello.",
+       "passwordremindertext": "Alguén (probablemente vostede, desde o enderezo IP $1) solicitou un novo\ncontrasinal para acceder a {{SITENAME}} ($4). Creouse un contrasinal temporal para o usuario\n\"$2\" e quedou establecido como \"$3\". Se esa foi a súa\nintención, terá que acceder ao sistema e escoller un novo contrasinal agora.\nO seu contrasinal temporal caducará {{PLURAL:$5|nun día|en $5 días}}.\n\nSe foi outra persoa a que fixo esta solicitude ou se xa se lembra do seu contrasinal\ne non o quere modificar, pode ignorar esta mensaxe e\ncontinuar a utilizar o seu contrasinal vello.",
        "noemail": "O usuario \"$1\" non posúe ningún enderezo de correo electrónico rexistrado.",
        "noemailcreate": "Ten que proporcionar un enderezo de correo electrónico válido",
        "passwordsent": "Enviouse un contrasinal novo ao enderezo de correo electrónico rexistrado de \"$1\".\nPor favor, acceda ao sistema de novo tras recibilo.",
-       "blocked-mailpassword": "O seu enderezo IP está bloqueado para editar. Tampouco se lle permite usar a función de recuperación do contrasinal para evitar abusos do sistema.",
+       "blocked-mailpassword": "O seu enderezo IP está bloqueado fronte á edición. Tampouco se lle permite usar a función de recuperación do contrasinal para evitar abusos do sistema.",
        "eauthentsent": "Envióuselle un correo electrónico de confirmación ao enderezo especificado.\nAntes de que se lle envíe calquera outro correo a esta conta terá que seguir as instrucións que aparecen nesa mensaxe para confirmar que a conta é realmente súa.",
        "throttled-mailpassword": "Enviouse un correo electrónico de restablecemento do contrasinal {{PLURAL:$1|na última hora|nas últimas $1 horas}}.\nPara evitar o abuso do sistema só se enviará unha mensaxe de restablecemento cada {{PLURAL:$1|hora|$1 horas}}.",
        "mailerror": "Produciuse un erro ao enviar o correo electrónico: $1",
-       "acct_creation_throttle_hit": "Alguén que visitou este wiki co seu enderezo IP creou {{PLURAL:$1|unha conta|$1 contas}} nos últimos ̩$2 días, que é o máximo permitido neste período de tempo.\nComo resultado, os visitantes que usen este enderezo IP non poden crear máis contas nestes intres.",
+       "acct_creation_throttle_hit": "Alguén que visitou este wiki co seu enderezo IP creou {{PLURAL:$1|unha conta|$1 contas}} nun breve período de tempo ($2), que é o máximo permitido neste período de tempo.\nComo resultado, os visitantes que usen este enderezo IP non poden crear máis contas nestes intres.",
        "emailauthenticated": "O seu enderezo de correo electrónico foi confirmado o $2 ás $3.",
        "emailnotauthenticated": "O seu enderezo de correo electrónico aínda non foi confirmado.\nNon se enviará ningunha mensaxe por ningunha das seguintes características.",
        "noemailprefs": "Especifique un enderezo de correo electrónico se quere que funcione esta opción.",
        "createacct-another-realname-tip": "O nome real é opcional.\nSe escolle dalo utilizarase para atribuír ao usuario o seu traballo.",
        "pt-login": "Acceder ao sistema",
        "pt-login-button": "Acceder ao sistema",
-       "pt-login-continue-button": "Continuar a conexión",
+       "pt-login-continue-button": "Continuar co inicio de sesión",
        "pt-createaccount": "Crear unha conta",
        "pt-userlogout": "Saír",
        "php-mail-error-unknown": "Erro descoñecido na función mail() do PHP.",
        "newpassword": "Contrasinal novo:",
        "retypenew": "Insira outra vez o novo contrasinal:",
        "resetpass_submit": "Establecer o contrasinal e acceder ao sistema",
-       "changepassword-success": "O seu contrasinal foi modificado!",
+       "changepassword-success": "Modificouse o seu contrasinal!",
        "changepassword-throttled": "Fixo demasiados intentos de acceder ao sistema.\nPor favor, agarde $1 antes de probar outra vez.",
        "botpasswords": "Contrasinais de bots",
        "botpasswords-summary": "Os <em>contrasinais de bots</em> permiten acceder a unha conta de usuario por medio da API sen usar as crecenciais de acceso da conta principal. Os dereitos de usuario dispoñibles cando se accede ao sistema cun contrasinal de bot poden estar restrinxidos.\n\nSe non sabe por que quere facer isto, probablemente signifique que non o queira facer. Ningunha persoa debería pedirlle a vostede que xere unha destas claves para entregarlla.",
        "botpasswords-label-delete": "Borrar",
        "botpasswords-label-resetpassword": "Restablecer o contrasinal",
        "botpasswords-label-grants": "Permisos aplicables:",
-       "botpasswords-help-grants": "Cada permiso dá acceso aos permisos de usuario listados que a conta xa teña. Consulte a [[Special:ListGrants|táboa de permisos]] para obter máis información.",
+       "botpasswords-help-grants": "As concesións permiten o acceso aos dereitos que xa teña a conta de usuario. A activación dunha concesión non dá acceso a ningún dereito que a súa conta de usuario non tivese doutro xeito. Consulte a [[Special:ListGrants|táboa de permisos]] para obter máis información.",
        "botpasswords-label-grants-column": "Concedido",
        "botpasswords-bad-appid": "O nome de bot \"$1\" non é válido.",
        "botpasswords-insert-failed": "Erro ao engadir o nome de bot \"$1\". Revise se xa foi engadido previamente.",
        "resetpass-abort-generic": "Unha extensión cancelou a modificación do contrasinal.",
        "resetpass-expired": "O seu contrasinal caducou. Defina un novo contrasinal para acceder.",
        "resetpass-expired-soft": "O seu contrasinal caducou e debe restablecelo. Escolla un novo contrasinal ou prema en \"{{int:authprovider-resetpass-skip-label}}\" para restablecelo máis tarde.",
-       "resetpass-validity-soft": "O seu contrasinal non é válido: $1\n\nEscolla un novo contrasinal ou prema en \"{{int:authprovider-resetpass-skip-label}}\" para restablecelo máis tarde.",
+       "resetpass-validity-soft": "O seu contrasinal non é válido: $1\n\nEscolla un novo contrasinal agora ou prema en \"{{int:authprovider-resetpass-skip-label}}\" para restablecelo máis tarde.",
        "passwordreset": "Restablecer o contrasinal",
        "passwordreset-text-one": "Encha este formulario para restablecer o seu contrasinal.",
        "passwordreset-text-many": "{{PLURAL:$1|Encha un dos campos para recibir por correo electrónico un contrasinal temporal.}}",
        "passwordreset-emaildisabled": "As funcións do correo electrónico están desactivadas neste wiki.",
        "passwordreset-username": "Nome de usuario:",
        "passwordreset-domain": "Dominio:",
-       "passwordreset-capture": "Quere ollar o correo electrónico?",
-       "passwordreset-capture-help": "Se marca esta caixa, poderá ver o correo electrónico (co contrasinal temporal) que se envía ao usuario.",
        "passwordreset-email": "Enderezo de correo electrónico:",
        "passwordreset-emailtitle": "Detalles da conta de {{SITENAME}}",
        "passwordreset-emailtext-ip": "Alguén (probablemente vostede, desde o enderezo IP $1) solicitou o restablecemento do seu\ncontrasinal de {{SITENAME}} ($4). {{PLURAL:$3|A seguinte conta de usuario está asociada|As seguintes contas de usuarios están asociadas}}\na este enderezo de correo electrónico:\n\n$2\n\n{{PLURAL:$3|Este contrasinal temporal caducará|Estes contrasinais temporais caducarán}} {{PLURAL:$5|nun día|en $5 días}}.\nDebería acceder ao sistema e elixir un novo contrasinal agora. Se outra persoa fixo esta\nsolicitude ou se lembrou o seu contrasinal orixinal e xa non o quere cambiar,\nignore esta mensaxe e continúe empregando o seu contrasinal vello.",
        "passwordreset-emailtext-user": "O usuario $1 solicitou o restablecemento do contrasinal de {{SITENAME}}\n($4). {{PLURAL:$3|A seguinte conta de usuario está asociada|As seguintes contas de usuarios están asociadas}}\na este enderezo de correo electrónico:\n\n$2\n\n{{PLURAL:$3|Este contrasinal temporal caducará|Estes contrasinais temporais caducarán}} {{PLURAL:$5|nun día|en $5 días}}.\nDebería acceder ao sistema e elixir un novo contrasinal agora. Se outra persoa fixo esta\nsolicitude ou se lembrou o seu contrasinal orixinal e xa non o quere cambiar,\nignore esta mensaxe e continúe empregando o seu contrasinal vello.",
        "passwordreset-emailelement": "Nome de usuario: \n$1\n\nContrasinal temporal: \n$2",
-       "passwordreset-emailsentemail": "Se esta é unha dirección de correo electrónico asociada á súa conta, entón enviarase un correo electrónico para o restablecemento do seu contrasinal.",
-       "passwordreset-emailsentusername": "Se hai unha dirección de correo electrónico asociada con este nome de usuario, entón enviarase un correo electrónico para o restablecemento do contrasinal.",
-       "passwordreset-emailsent-capture2": "{{PLURAL:$1|O correo de reinicialización do contrasinal foi enviado|Os correos de reinicialización do contrasinal foron enviados}}. {{PLURAL:$1|O nome de usuario e contrasinal móstrase aquí|A lista de nomes de usuarios e contrasinais móstranse aquí}}.",
-       "passwordreset-emailerror-capture2": "O envío do correo {{GENDER:$2|ó usuario|á usuaria}} fallou: $1 {{PLURAL:$3|O nome de usuario e contrasinal móstrase aquí|A lista de usuarios e contrasinais móstranse aquí}}.",
+       "passwordreset-emailsentemail": "Se este enderezo de correo electrónico está asociado á súa conta, entón enviarase un correo electrónico para o restablecemento do seu contrasinal.",
+       "passwordreset-emailsentusername": "Se hai un enderezo de correo electrónico asociado a este nome de usuario, entón enviarase un correo electrónico para o restablecemento do contrasinal.",
        "passwordreset-nocaller": "Cómpre proporcionar un chamador",
        "passwordreset-nosuchcaller": "O chamador non existe: $1",
-       "passwordreset-ignored": "A reinicialización do contrasinal non puido realizarse. Quizais non configurou o provedor?",
-       "passwordreset-invalideamil": "O enderezo de correo electrónico non é válido",
-       "passwordreset-nodata": "Non se indicou o nome de usuario ou a dirección de correo electrónico",
+       "passwordreset-ignored": "Non se puido completar o restablecemento do contrasinal. Quizais non configurou o provedor?",
+       "passwordreset-invalidemail": "O enderezo de correo electrónico non é válido",
+       "passwordreset-nodata": "Non se indicou nin un nome de usuario nin un enderezo de correo electrónico",
        "changeemail": "Cambiar ou eliminar o enderezo de correo electrónico",
-       "changeemail-header": "Encha este formulario para cambiar o seu enderezo de correo electrónico. Se vostede quere eliminar a asociación da dirección de correo electrónico da súa conta, deixe en branco a nova dirección de correo electrónico cando envíe o formulario.",
+       "changeemail-header": "Encha este formulario para cambiar o seu enderezo de correo electrónico. Se quere eliminar a asociación do enderezo de correo electrónico á súa conta, deixe en branco o novo enderezo de correo electrónico cando envíe o formulario.",
        "changeemail-no-info": "Debe rexistrarse para acceder directamente a esta páxina.",
        "changeemail-oldemail": "Enderezo de correo electrónico actual:",
        "changeemail-newemail": "Novo enderezo de correo electrónico:",
-       "changeemail-newemail-help": "Este campo debe deixarse en branco se quere eliminar o seu enderezo de correo electrónico. Non será capaz de redefinir a súa clave nin recibir mensaxes electrónicas desta wiki se elimina o correo electrónico.",
+       "changeemail-newemail-help": "Este campo debe deixarse en branco se quere eliminar o seu enderezo de correo electrónico. Non poderá restablecer o seu contrasinal se o esquece nin recibir mensaxes de correo electrónico desde este wiki se elimina o enderezo.",
        "changeemail-none": "(ningún)",
        "changeemail-password": "O seu contrasinal en {{SITENAME}}:",
        "changeemail-submit": "Cambiar o correo electrónico",
        "anoneditwarning": "<strong>Aviso:</strong> Non accedeu ao sistema. O seu enderezo IP será visible se fai algunha edición. Se <strong>[$1 accede ao sistema]</strong> ou <strong>[$2 crea unha conta]</strong>, as súas edicións serán atribuídas ao seu nome de usuario e obterá outros beneficios.",
        "anonpreviewwarning": "''Non accedeu ao sistema. Se garda a páxina, o seu enderezo IP quedará rexistrado no historial de edicións.''",
        "missingsummary": "'''Aviso:''' Esqueceu incluír o texto do campo resumo.\nSe preme en \"{{int:savearticle}}\" a súa edición gardarase sen ningunha descrición da edición.",
-       "selfredirect": "<strong>Atención:</strong> Está redirecionando esta páxina a ela mesma. Vostede pode ter especificado a páxina incorrecta para a redireción, ou pode que estea a editar a páxina incorrecta. Se preme \"{{int:savearticle}}\" de novo, crearase a redireción de tódolos xeitos.",
+       "selfredirect": "<strong>Atención:</strong> Está redirixindo esta páxina a si mesma.\nQuizais especificou incorrectamente a páxina de destino ou poida que estea a editar unha páxina errónea.\nSe preme en \"{{int:savearticle}}\" de novo, crearase a redireción de calquera xeito.",
        "missingcommenttext": "Por favor, escriba un comentario a continuación.",
-       "missingcommentheader": "<strong>Aviso:</strong> Non escribiu ningún texto no asunto deste comentario.\nSe preme sobre \"{{int:savearticle}}\", a súa edición gardarase sen el.",
+       "missingcommentheader": "<strong>Aviso:</strong> Non escribiu ningún texto no asunto deste comentario.\nSe preme en \"{{int:savearticle}}\" de novo, a súa edición gardarase sen el.",
        "summary-preview": "Vista previa do resumo:",
        "subject-preview": "Vista previa do asunto:",
        "previewerrortext": "Produciuse un erro ao intentar previsualizar os cambios.",
        "blockedtitle": "O usuario está bloqueado",
-       "blockedtext": "'''O seu nome de usuario ou enderezo IP foi bloqueado.'''\n\nO bloqueo foi realizado por $1.\nA razón que deu foi ''$2''.\n\n* Inicio do bloqueo: $8\n* Caducidade do bloqueo: $6\n* Pretendeuse bloquear: $7\n\nPode contactar con $1 ou con calquera outro [[{{MediaWiki:Grouppage-sysop}}|administrador]] para discutir este bloqueo.\nNon pode empregar a característica \"Enviar un correo electrónico a este usuario\" a non ser que dispoña dun enderezo electrónico válido rexistrado nas súas [[Special:Preferences|preferencias de usuario]] e que o seu uso non fose bloqueado.\nO seu enderezo IP actual é $3 e o ID do bloqueo é #$5.\nPor favor, inclúa eses datos nas consultas que faga.",
+       "blockedtext": "<strong>Bloqueouse o seu nome de usuario ou enderezo IP.</strong>\n\n$1 estableceu o bloqueo.\nO motivo que achegou foi <em>$2</em>.\n\n* Inicio do bloqueo: $8\n* Caducidade do bloqueo: $6\n* Pretendeuse bloquear: $7\n\nPode contactar con $1 ou con calquera outro [[{{MediaWiki:Grouppage-sysop}}|administrador]] para discutir este bloqueo.\nNon pode empregar a característica \"Enviar un correo electrónico a este usuario\" a non ser que dispoña dun enderezo electrónico válido rexistrado nas súas [[Special:Preferences|preferencias de usuario]] e que o seu uso non fose bloqueado.\nO seu enderezo IP actual é $3 e o identificador do bloqueo é #$5.\nPor favor, inclúa todos estes datos nas consultas que faga.",
        "autoblockedtext": "O seu enderezo IP foi bloqueado automaticamente porque foi empregado por outro usuario que foi bloqueado por $1.\nA razón que deu foi a seguinte:\n\n:''$2''\n\n* Inicio do bloqueo: $8\n* Caducidade do bloqueo: $6\n* Pretendeuse bloquear: $7\n\nPode contactar con $1 ou con calquera outro [[{{MediaWiki:Grouppage-sysop}}|administrador]] para discutir este bloqueo.\n\nTeña en conta que non pode empregar a característica \"Enviar un correo electrónico a este usuario\" a non ser que dispoña dun enderezo electrónico válido rexistrado nas súas [[Special:Preferences|preferencias de usuario]] e e que o seu uso non fose bloqueado.\n\nO seu enderezo IP actual é $3 e o ID do bloqueo é #$5.\nPor favor, inclúa eses datos nas consultas que faga.",
        "blockednoreason": "non se deu ningunha razón",
        "whitelistedittext": "Debe $1 para poder editar páxinas.",
        "userpage-userdoesnotexist": "A conta de usuario \"$1\" non está rexistrada.\nComprobe se desexa crear/editar esta páxina.",
        "userpage-userdoesnotexist-view": "A conta de usuario \"$1\" non está rexistrada.",
        "blocked-notice-logextract": "Este usuario está bloqueado.\nVelaquí está a última entrada do rexistro de bloqueos, por se quere consultala:",
-       "clearyourcache": "<strong>Nota:</strong> Despois de gardar, cómpre limpar a memoria caché do seu navegador para ver os cambios.\n* <strong>Firefox/Safari:</strong> Prema <em>Maiúsculas</em> á vez que en <em>Recargar</em>, ou prema en <em>Ctrl-F5</em> ou <em>Ctrl-R</em> (<em>⌘-R</em> nos Mac)\n* <strong>Google Chrome:</strong> Prema en <em>Ctrl-Maiús-R</em> (<em>⌘-Maiús-R</em> nos Mac)\n* <strong>Internet Explorer:</strong> Prema <em>Ctrl</em> ao tempo que fai clic en <em>Refrescar</em>, ou prema en <em>Ctrl-F5</em>\n* <strong>Opera:<strong> Vaia a  <em>Menú → Configuración</em> (<em>Opera → Preferencias</em> nun Mac) e logo a <em>Privacidade & seguridade → Limpar datos de navegación → Ficheiros e imaxes na caché</em>.",
+       "clearyourcache": "<strong>Nota:</strong> Despois de gardar, cómpre limpar a memoria caché do seu navegador para ver os cambios.\n* <strong>Firefox/Safari:</strong> Prema <em>Maiúsculas</em> á vez que en <em>Recargar</em>, ou prema en <em>Ctrl-F5</em> ou <em>Ctrl-R</em> (<em>⌘-R</em> nos Mac).\n* <strong>Google Chrome:</strong> Prema en <em>Ctrl-Maiús-R</em> (<em>⌘-Maiús-R</em> nos Mac).\n* <strong>Internet Explorer:</strong> Prema <em>Ctrl</em> ao tempo que fai clic en <em>Refrescar</em>, ou prema en <em>Ctrl-F5</em>.\n* <strong>Opera:</strong> Vaia a <em>Menú → Configuración</em> (<em>Opera → Preferencias</em> nos Mac) e logo a <em>Privacidade e seguridade → Limpar os datos de navegación → Ficheiros e imaxes na caché</em>.",
        "usercssyoucanpreview": "'''Nota:''' Use o botón \"{{int:showpreview}}\" para verificar o novo CSS antes de gardalo.",
        "userjsyoucanpreview": "<strong>Nota:</strong> Use o botón \"{{int:showpreview}}\" para verificar o novo JavaScript antes de gardalo.",
        "usercsspreview": "'''Lembre que só está vendo a vista previa do seu CSS de usuario.'''\n'''Este aínda non foi gardado!'''",
        "userinvalidcssjstitle": "<strong>Aviso:</strong> Non hai ningunha aparencia chamada \"$1\".\nLembre que as páxinas .css e .js personalizadas utilizan un título en minúsculas, como por exemplo \"{{ns:user}}:Exemplo/vector.css\" no canto de \"{{ns:user}}:Exemplo/Vector.css\".",
        "updated": "(Actualizado)",
        "note": "'''Nota:'''",
-       "previewnote": "'''Lembre que esta é só unha vista previa e que aínda non gardou os seus cambios!'''",
+       "previewnote": "<strong>Lembre que esta é só unha vista previa.</strong>\nAínda non gardou os seus cambios!",
        "continue-editing": "Ir ata a caixa de edición",
        "previewconflict": "Esta vista previa mostra o texto na área superior tal e como aparecerá se escolle gardar.",
-       "session_fail_preview": "Sentímolo! Non puidemos procesar a súa edición porque se perderon os datos de inicio da sesión.\n\nPoida que se pechase a súa sesión. <strong>Por favor, verifique que ten a sesión aberta e probe de novo.</strong>\nEn caso de que siga sen funcionar, intente [[Special:UserLogout|saír]] e volver entrar na súa conta e verifique que o seu navegador permite o uso de cookies neste sitio.",
-       "session_fail_preview_html": "Sentímolo! Non foi posible procesar a edición debido á pérdida de datos da súa sesión.\n\n<em>Como a wiki {{SITENAME}} posibilita o uso de HTML puro, a vista previa está oculta por precaución contra ataques con JavaScript.</em>\n\n<strong>Se este é un intento lexítimo de edición probe de novo, por favor</strong>. \nEn caso de que continúe sen funcionar, intente [[Special:UserLogout|saír]] e volver a entrar na súa conta, e verifique se o seu navegador permite o uso de ''cookies'' deste sitio.",
+       "session_fail_preview": "Sentímolo! Non puidemos procesar a súa edición porque se perderon os datos de inicio da sesión.\n\nPoida que se pechase a súa sesión. <strong>Por favor, comprobe que ten a sesión aberta e probe de novo.</strong>\nEn caso de que siga sen funcionar, intente [[Special:UserLogout|saír]] e volver entrar na súa conta e verifique que o seu navegador permite o uso de cookies neste sitio.",
+       "session_fail_preview_html": "Sentímolo! Non foi posible procesar a edición debido á perda dos datos da súa sesión.\n\n<em>Dado que {{SITENAME}} ten activado o uso de HTML puro, a vista previa está oculta por precaución contra ataques mediante JavaScript.</em>\n\n<strong>Se este é un intento lexítimo de edición, probe de novo.</strong>\nEn caso de que siga sen funcionar, intente [[Special:UserLogout|saír]] e volver entrar na súa conta e verifique que o seu navegador permite o uso de cookies neste sitio.",
        "token_suffix_mismatch": "'''Rexeitouse a súa edición porque o seu cliente confundiu os signos de puntuación na edición.'''\nRexeitouse a edición para evitar que se corrompa o texto do artigo.\nIsto pode acontecer porque estea a empregar un servizo de proxy anónimo defectuoso baseado na web.",
        "edit_form_incomplete": "'''Algunhas partes do formulario de edición non chegaron ao servidor; comprobe que a súa modificación está intacta e inténteo de novo.'''",
        "editing": "Editando \"$1\"",
        "nonunicodebrowser": "'''Atención: O seu navegador non soporta o Unicode.'''\nExiste unha solución que lle permite editar páxinas con seguridade: os caracteres non incluídos no ASCII aparecerán na caixa de edición como códigos hexadecimais.",
        "editingold": "'''Atención: Está editando unha revisión vella desta páxina.'''\nSe a garda, perderanse os cambios realizados tras esta revisión.",
        "yourdiff": "Diferenzas",
-       "copyrightwarning": "Por favor, teña en conta que todas as contribucións a {{SITENAME}} considéranse publicadas baixo a $2 (vexa $1 para máis detalles). Se non quere que o que escriba se edite sen piedade e se redistribúa sen límites, entón non o envíe aquí.<br />\nAo mesmo tempo, prométanos que o que escribiu é da súa autoría ou que está copiado dun recurso do dominio público ou que permite unha liberdade semellante.\n'''NON ENVÍE MATERIAL CON DEREITOS DE AUTOR SEN PERMISO!'''",
-       "copyrightwarning2": "Por favor, decátese de que todas as súas contribucións a {{SITENAME}} poden ser editadas, alteradas ou eliminadas por outras persoas. Se non quere que os seus escritos sexan editados sen piedade, non os publique aquí.<br />\nDo mesmo xeito, comprométese a que o que vostede escriba sexa da súa autoría ou copiado dunha fonte de dominio público ou recurso público semellante (vexa $1 para detalles).\n'''NON ENVÍE SEN PERMISO TRABALLOS CON DEREITOS DE COPIA!'''",
+       "copyrightwarning": "Por favor, teña en conta que todas as contribucións feitas en {{SITENAME}} se consideran publicadas baixo a $2 (consulte $1 para obter máis detalles).\nSe non quere que os seus escritos sexan editados sen piedade e redistribuídos sen límites, entón non os publique aquí.<br />\nDo mesmo xeito, comprométese a que o que vostede escriba é da súa autoría ou está copiado dun recurso de dominio público ou que procede dunha fonte libre.\n<strong>Non envíe material con dereitos de autoría sen permiso!</strong>",
+       "copyrightwarning2": "Por favor, teña en conta que todas as contribucións feitas en {{SITENAME}} poden ser editadas, alteradas ou eliminadas por outras persoas.\nSe non quere que os seus escritos sexan editados sen piedade, entón non os publique aquí.<br />\nDo mesmo xeito, comprométese a que o que vostede escriba é da súa autoría ou está copiado dun recurso de dominio público ou que procede dunha fonte libre (consulte $1 para obter máis detalles).\n<strong>Non envíe material con dereitos de autoría sen permiso!</strong>",
        "editpage-cannot-use-custom-model": "O modelo de contido desta páxina non se pode modificar.",
        "longpageerror": "'''Erro: O texto que pretende gardar ocupa {{PLURAL:$1|$1 kilobyte|$1 kilobytes}}, e existe un límite dun máximo de {{PLURAL:$2|$2 kilobyte|$2 kilobytes}}.'''\nPolo tanto, non se pode gardar.",
-       "readonlywarning": "<strong>Atención: A base de datos foi pechada para facer mantemento, polo que non vai poder gardar as súas edicións polo de agora.</strong>\nSe cadra, pode cortar e pegar o texto nun ficheiro de texto e gardalo para despois.\n\nO administrador de sistemas que a pechou deu esta explicación: $1",
+       "readonlywarning": "<strong>Atención: Pechouse a base de datos para facer mantemento, polo que non vai poder gardar as súas edicións polo de agora.</strong>\nSe cadra, pode cortar e pegar o texto nun ficheiro de texto e gardalo para despois.\n\nO administrador do sistema que a pechou deu esta explicación: $1",
        "protectedpagewarning": "'''Aviso: Esta páxina foi protexida de xeito que só os usuarios con privilexios de administrador a poidan editar.'''\nVelaquí está a última entrada no rexistro, por se quere consultala:",
        "semiprotectedpagewarning": "'''Nota:''' Esta páxina foi protexida de xeito que só os usuarios rexistrados a poidan editar.\nVelaquí está a última entrada no rexistro, por se quere consultala:",
-       "cascadeprotectedwarning": "<strong>Aviso:</strong> Esta páxina foi protexida de xeito que só a poden editar os usuarios con privilexios de administrador debido a que está transcluída {{PLURAL:$1|na seguinte páxina protexida|nas seguintes páxinas protexidas}} coa opción \"protección en serie\" activada:",
+       "cascadeprotectedwarning": "<strong>Atención:</strong> Protexeuse esta páxina de xeito que só a poden editar os usuarios con privilexios de administrador debido a que está transcluída {{PLURAL:$1|na seguinte páxina protexida|nas seguintes páxinas protexidas}} coa opción \"protección en serie\" activada:",
        "titleprotectedwarning": "'''Aviso: Esta páxina foi protexida de xeito que [[Special:ListGroupRights|só algúns usuarios]] a poidan crear.'''\nVelaquí está a última entrada no rexistro, por se quere consultala:",
        "templatesused": "{{PLURAL:$1|Modelo usado|Modelos usados}} nesta páxina:",
        "templatesusedpreview": "{{PLURAL:$1|Modelo usado|Modelos usados}} nesta vista previa:",
        "template-semiprotected": "(semiprotexido)",
        "hiddencategories": "Esta páxina forma parte {{PLURAL:$1|dunha categoría oculta|de $1 categorías ocultas}}:",
        "edittools": "<!-- O texto que apareza aquí mostrarase por debaixo dos formularios de edición e envío. -->",
-       "nocreatetext": "{{SITENAME}} ten restrinxida a posibilidade de crear páxinas novas.\nPode volver e editar unha páxina que xa existe ou, se non, [[Special:UserLogin|rexistrarse ou crear unha conta]].",
+       "nocreatetext": "{{SITENAME}} ten restrinxida a posibilidade de crear páxinas novas.\nPode volver e editar unha páxina que xa existe ou ben [[Special:UserLogin|acceder ao sistema ou crear unha conta]].",
        "nocreate-loggedin": "Non ten os permisos necesarios para crear páxinas novas.",
        "sectioneditnotsupported-title": "A edición de seccións non está soportada",
        "sectioneditnotsupported-text": "A edición de seccións non está soportada nesta páxina.",
        "permissionserrors": "Erro de permisos",
        "permissionserrorstext": "Non ten os permisos necesarios para facelo {{PLURAL:$1|pola seguinte razón|polas seguintes razóns}}:",
        "permissionserrorstext-withaction": "Non ten os permisos necesarios para $2, {{PLURAL:$1|pola seguinte razón|polas seguintes razóns}}:",
-       "contentmodelediterror": "Non pode editar esta revisión porque o seu modelo de contido é <code>$1</code>, o cal difire do modelo de contido actual da páxina <code>$2</code>.",
+       "contentmodelediterror": "Non pode editar esta revisión porque o seu modelo de contido é \"<code>$1</code>\", o cal difire do modelo de contido \"<code>$2</code>\", que é o actual da páxina.",
        "recreate-moveddeleted-warn": "'''Atención: Vai volver crear unha páxina que xa foi eliminada anteriormente.'''\n\nDebería considerar se é apropiado continuar a editar esta páxina.\nVelaquí están o rexistro de borrados e mais o de traslados desta páxina, por se quere consultalos:",
        "moveddeleted-notice": "Esta páxina foi borrada.\nA continuación pódese ver o rexistro de borrados e traslados desta páxina, por se quere consultalos.",
-       "moveddeleted-notice-recent": "Sentímolo, esta página foi borrada recentemente (dentro das últimas 24 horas).\nO rexistro de borrado e traslado da páxina amósanse abaixo como referencia.",
+       "moveddeleted-notice-recent": "Sentímolo, borrouse esta páxina recentemente (nas últimas 24 horas).\nVelaquí están o rexistro de borrados e traslados da páxina, por se os quere consultar.",
        "log-fulllog": "Ver o rexistro completo",
        "edit-hook-aborted": "A edición foi abortada polo asociador.\nEste non deu ningunha explicación.",
        "edit-gone-missing": "Non se pode actualizar a páxina.\nSemella que foi borrada.",
        "invalid-content-data": "Datos de contido inválidos",
        "content-not-allowed-here": "O contido \"$1\" non está permitido na páxina \"[[$2]]\"",
        "editwarning-warning": "Deixar esta páxina pode causar a perda de calquera cambio feito.\nSe accedeu ao sistema, pode desactivar esta mensaxe de advertencia na sección \"{{int:prefs-editing}}\" das súas preferencias.",
-       "editpage-invalidcontentmodel-title": "Modelo de contido non válido",
-       "editpage-invalidcontentmodel-text": "O modelo de contido \"$1\" non é válido.",
+       "editpage-invalidcontentmodel-title": "O modelo de contido non está soportado",
+       "editpage-invalidcontentmodel-text": "O modelo de contido \"$1\" non está soportado.",
        "editpage-notsupportedcontentformat-title": "Formato de contido non admitido",
        "editpage-notsupportedcontentformat-text": "O formato de contido $1 non é compatible co modelo de contido $2.",
        "content-model-wikitext": "texto wiki",
        "content-json-empty-object": "Obxecto baleiro",
        "content-json-empty-array": "Matriz baleira",
        "deprecated-self-close-category": "Páxinas que usan etiquetas HTML de auto-pechado non válidas",
-       "deprecated-self-close-category-desc": "Páxinas que conteñen unha etiqueta HTML de auto-pechado non válida, como <code>&lt;b/></code> ou <code>&lt;span/></code>. O comportamento destas etiquetas vai cambiar para gardar a consistencia coa especificación HTML5, polo que o seu uso no texto wiki está desbotado.",
-       "duplicate-args-warning": "<strong>Advertencia:</strong> [[:$1]] está chamando a [[:$2]] con máis dun valor para o parámetro \"$3\". Só se usará o último valor proporcionado.",
+       "deprecated-self-close-category-desc": "A páxina contén algunha etiqueta HTML de auto-pechado non válida, como <code>&lt;b/></code> ou <code>&lt;span/></code>. O comportamento destas etiquetas vai cambiar axiña para gardar a consistencia coa especificación HTML5, polo que cómpre desbotar o seu uso no texto wiki.",
+       "duplicate-args-warning": "<strong>Atención:</strong> \"[[:$1]]\" está chamando a \"[[:$2]]\" con máis dun valor para o parámetro \"$3\". Só se usará o último valor proporcionado.",
        "duplicate-args-category": "Páxinas con argumentos duplicados nas chamadas aos modelos",
        "duplicate-args-category-desc": "Esta páxina contén as chamadas aos modelos que utilizan argumentos duplicados, como <code><nowiki>{{exemplo|bar=1|bar=2}}</nowiki></code> ou <code><nowiki>{{exemplo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "'''Aviso:''' Esta páxina contén demasiadas chamadas a funcións analíticas custosas.\n\nDebe ter menos {{PLURAL:$2|dunha chamada|de $2 chamadas}}, e agora hai $1.",
        "undo-summary": "Desfíxose a edición $1 de [[Special:Contributions/$2|$2]] ([[User talk:$2|conversa]])",
        "undo-summary-username-hidden": "Desfíxose a edición $1 dun usuario agochado",
        "cantcreateaccount-text": "A creación de contas desde este enderezo IP ('''$1''') foi bloqueada por [[User:$3|$3]].\n\nA razón dada por $3 foi ''$2''",
-       "cantcreateaccount-range-text": "O usuario [[User:$3|$3]] bloqueou a creación de contas desde enderezos IP no rango <strong>$1</strong>, no que se inclúe o seu enderezo IP (<strong>$4</strong>).\n\nA razón que deu $3 foi <em>$2</em>.",
+       "cantcreateaccount-range-text": "O usuario [[User:$3|$3]] bloqueou a creación de contas desde enderezos IP no rango <strong>$1</strong>, no que se atopa o seu enderezo IP (<strong>$4</strong>).\n\nA razón que deu $3 foi <em>$2</em>.",
        "viewpagelogs": "Ver os rexistros desta páxina",
        "nohistory": "Esta páxina non posúe ningún historial de edicións.",
        "currentrev": "Revisión actual",
        "history-feed-title": "Historial de revisións",
        "history-feed-description": "Historial de revisións desta páxina no wiki",
        "history-feed-item-nocomment": "$1 o $2",
-       "history-feed-empty": "A páxina solicitada non existe.\nPuido borrarse ou moverse a outro nome.\nProbe a [[Special:Search|buscar no wiki]] para atopar as páxinas relacionadas.",
+       "history-feed-empty": "A páxina solicitada non existe.\nPoida que se borrase do wiki ou que se trasladase a outro nome.\nProbe a [[Special:Search|buscar no wiki]] para atopar as páxinas novas relevantes.",
        "history-edit-tags": "Editar as etiquetas das revisións seleccionadas",
        "rev-deleted-comment": "(resumo de edición eliminado)",
        "rev-deleted-user": "(nome de usuario eliminado)",
        "rows": "Filas:",
        "columns": "Columnas:",
        "searchresultshead": "Procurar",
-       "stub-threshold": "Límite superior de tamaño para o formato das ligazóns cara bosquexos ($1):",
+       "stub-threshold": "Límite superior de tamaño para o formato das ligazóns cara bosquexos ($1):",
        "stub-threshold-sample-link": "exemplo",
        "stub-threshold-disabled": "Desactivado",
        "recentchangesdays": "Número de días a mostrar nos cambios recentes:",
        "prefs-help-recentchangescount": "Isto inclúe os cambios recentes, os historiais e mais os rexistros.",
        "prefs-help-watchlist-token2": "Esta é a clave secreta da fonte de novas web para a súa lista de vixilancia.\nCalquera persoa que a saiba poderá ler a súa lista de vixilancia; non comparta esta clave.\n[[Special:ResetTokens|Prema aquí se necesita restablecela]].",
        "savedprefs": "Gardáronse as súas preferencias.",
-       "savedrights": "Gardáronse os permisos de {{GENDER:$1|$1}}.",
+       "savedrights": "Gardáronse os dereitos de {{GENDER:$1|usuario|usuaria}} de $1.",
        "timezonelegend": "Fuso horario:",
        "localtime": "Hora local:",
        "timezoneuseserverdefault": "Usar a hora do servidor por defecto ($1)",
        "prefs-help-variant": "A variante ou ortografía preferida na que mostrar o contido das páxinas deste wiki.",
        "yournick": "Sinatura:",
        "prefs-help-signature": "Os comentarios feitos nas páxinas de conversa deben asinarse con catro tiles (\"<nowiki>~~~~</nowiki>\"), que se converterán na súa sinatura con data e hora.",
-       "badsig": "Sinatura non válida; comprobe o código HTML utilizado.",
+       "badsig": "A sinatura non é válida.\nComprobe as etiquetas HTML.",
        "badsiglength": "A súa sinatura é demasiado longa.\nHa de ter menos {{PLURAL:$1|dun carácter|de $1 caracteres}}.",
        "yourgender": "Cal das seguintes oracións referidas a vostede é a máis axeitada?",
        "gender-unknown": "Ao facer mención á súa persoa, o software empregará verbas de xénero neutro sempre que sexa posible",
        "right-siteadmin": "Pechar e abrir a base de datos",
        "right-override-export-depth": "Exportar páxinas incluíndo as páxinas ligadas ata unha profundidade de 5",
        "right-sendemail": "Enviar correos electrónicos a outros usuarios",
-       "right-passwordreset": "Ver os correos electrónicos de restablecemento de contrasinais",
        "right-managechangetags": "Crear e (des)activar [[Special:Tags|etiquetas]]",
        "right-applychangetags": "Aplicar [[Special:Tags|etiquetas]] xunto coas modificacións propias",
        "right-changetags": "Engadir e quitar [[Special:Tags|etiquetas]] arbitrarias a revisións individuais e entradas do rexistro",
        "grant-basic": "Dereitos básicos",
        "grant-viewdeleted": "Ver ficheiros e páxinas eliminados",
        "grant-viewmywatchlist": "Ver a súa lista de vixilancia",
-       "grant-viewrestrictedlogs": "Ver as entradas de rexistro confidenciais",
+       "grant-viewrestrictedlogs": "Ver as entradas de rexistro restrinxidas",
        "newuserlogpage": "Rexistro de creación de usuarios",
        "newuserlogpagetext": "Este é un rexistro de creación de contas de usuario.",
        "rightslog": "Rexistro de dereitos de usuario",
        "uploadstash-badtoken": "A acción fallou, probablemente porque caducou a información de acceso. Por favor, inténteo de novo.",
        "uploadstash-errclear": "Fallou o borrado de ficheiros.",
        "uploadstash-refresh": "Actualizar a lista de ficheiros",
-       "uploadstash-thumbnail": "ver miniatura",
+       "uploadstash-thumbnail": "ver miniatura",
        "uploadstash-exception": "Imposible gardar a subida na reserva ($1): \"$2\".",
        "invalid-chunk-offset": "Desprazamento inválido do fragmento",
        "img-auth-accessdenied": "Acceso rexeitado",
        "http-bad-status": "Houbo un problema durante a solicitude HTTP: $1 $2",
        "upload-curl-error6": "Non se puido acceder ao enderezo URL",
        "upload-curl-error6-text": "Non se puido acceder ao enderezo URL especificado.\nComprobe que ese enderezo URL é correcto e que o sitio está activo.",
-       "upload-curl-error28": "Rematou o tempo de espera",
+       "upload-curl-error28": "Rematou o tempo de espera da subida",
        "upload-curl-error28-text": "O sitio tardou demasiado en responder.\nPor favor, comprobe que está activo, agarde un anaco e inténteo de novo.\nTamén pode reintentalo cando haxa menos actividade.",
        "license": "Licenza:",
        "license-header": "Licenza",
        "filerevert-defaultcomment": "Volveuse á versión do $1 ás $2 ($3)",
        "filerevert-submit": "Reverter",
        "filerevert-success": "Reverteuse \"'''[[Media:$1|$1]]'''\" á [$4 versión do $2 ás $3].",
-       "filerevert-badversion": "Non existe unha versión local anterior deste ficheiro coa data e hora indicadas.",
-       "filerevert-identical": "A versión actual do ficheiro é igual á seleccionada.",
+       "filerevert-badversion": "Non existe ningunha versión local anterior deste ficheiro coa data e hora indicadas.",
+       "filerevert-identical": "A versión actual do ficheiro é idéntica á seleccionada.",
        "filedelete": "Borrar \"$1\"",
        "filedelete-legend": "Eliminar un ficheiro",
        "filedelete-intro": "Está a piques de eliminar o ficheiro \"'''[[Media:$1|$1]]'''\" xunto con todo o seu historial.",
        "apisandbox-jsonly": "É preciso activar o JavaScript para usar a zona de probas.",
        "apisandbox-api-disabled": "API está desactivado neste sitio.",
        "apisandbox-intro": "Use esta páxina para experimentar co <strong>servizo web da API de MediaWiki</strong>.\nConsulte a [[mw:API:Main page| documentación da API]] para obter máis información sobre o uso da API. Exemplo: [https://www.mediawiki.org/wiki/API#A_simple_example obter o contido dunha páxina de inicio]. Seleccione unha acción para ollar máis exemplos.\n\nTeña en conta que, aínda que esta é unha páxina de probas, as accións que realice nesta páxina poden modificar o wiki.",
-       "apisandbox-fullscreen": "Expandir panel",
+       "apisandbox-fullscreen": "Expandir panel",
        "apisandbox-fullscreen-tooltip": "Expande o panel da zona de probas para encher a pantalla do navegador.",
        "apisandbox-unfullscreen": "Mostrar a páxina",
-       "apisandbox-unfullscreen-tooltip": "Reduce o panel da zona de probas, así as ligazóns de navegación MediaWiki están dispoñibles.",
+       "apisandbox-unfullscreen-tooltip": "Reduce o panel da zona de probas para que as ligazóns de navegación de MediaWiki estean dispoñibles.",
        "apisandbox-submit": "Facer a solicitude",
        "apisandbox-reset": "Limpar",
        "apisandbox-retry": "Reintentar",
-       "apisandbox-loading": "Cargando información para módulo de API \"$1\"...",
-       "apisandbox-load-error": "Houbo un erro mentres se cargaba a información do módulo API \"$1\": $2",
-       "apisandbox-no-parameters": "O módulo de API non ten parámetros.",
+       "apisandbox-loading": "Cargando a información para módulo \"$1\" da API...",
+       "apisandbox-load-error": "Produciuse un erro mentres se cargaba a información do módulo \"$1\" da API: $2",
+       "apisandbox-no-parameters": "Este módulo da API non ten parámetros.",
        "apisandbox-helpurls": "Ligazóns de axuda",
        "apisandbox-examples": "Exemplos",
        "apisandbox-dynamic-parameters": "Parámetros adicionais",
-       "apisandbox-dynamic-parameters-add-label": "Engadir parámetro:",
+       "apisandbox-dynamic-parameters-add-label": "Engadir un parámetro:",
        "apisandbox-dynamic-parameters-add-placeholder": "Nome do parámetro",
        "apisandbox-dynamic-error-exists": "Xa existe un parámetro co nome \"$1\".",
        "apisandbox-deprecated-parameters": "Parámetros obsoletos",
-       "apisandbox-fetch-token": "Auto-enchido do identificador",
+       "apisandbox-fetch-token": "Encher automaticamente o identificador",
        "apisandbox-submit-invalid-fields-title": "Algúns campos non son válidos",
        "apisandbox-submit-invalid-fields-message": "Por favor, amañe os campos marcados e inténteo de novo.",
        "apisandbox-results": "Resultados",
        "apisandbox-sending-request": "Enviando a petición á API...",
        "apisandbox-loading-results": "Recibindo os resultados da API...",
-       "apisandbox-results-error": "Houbo un erro mentres se cargaba a resposta á consulta da API: $1.",
+       "apisandbox-results-error": "Produciuse un erro mentres se cargaba a resposta da petición á API: $1.",
        "apisandbox-request-url-label": "URL da solicitude:",
        "apisandbox-request-time": "Duración da solicitude: {{PLURAL:$1|$1 ms}}",
-       "apisandbox-results-fixtoken": "Correxir identificador e reenviar",
-       "apisandbox-results-fixtoken-fail": "Erro ó recuperar o identificador \"$1\".",
-       "apisandbox-alert-page": "Os campos nesta páxina non son válidos.",
+       "apisandbox-results-fixtoken": "Corrixir o identificador e reenviar",
+       "apisandbox-results-fixtoken-fail": "Erro ao recuperar o identificador \"$1\".",
+       "apisandbox-alert-page": "Os campos desta páxina non son válidos.",
        "apisandbox-alert-field": "O valor deste campo non é válido.",
        "apisandbox-continue": "Continuar",
        "apisandbox-continue-clear": "Limpar",
-       "apisandbox-continue-help": "{{int:apisandbox-continue}} [https://www.mediawiki.org/wiki/API:Query#Continuing_queries continuará] a última petición; {{int:apisandbox-continue-clear}} limpará os parámetros relativos á continuación.",
+       "apisandbox-continue-help": "\"{{int:apisandbox-continue}}\" [https://www.mediawiki.org/wiki/API:Query#Continuing_queries continuará] a última petición; \"{{int:apisandbox-continue-clear}}\" limpará os parámetros relativos á continuación.",
+       "apisandbox-param-limit": "Indicar <kbd>max</kbd> para usar o límite máximo.",
        "booksources": "Fontes bibliográficas",
        "booksources-search-legend": "Procurar fontes bibliográficas",
        "booksources-search": "Procurar",
-       "booksources-text": "A continuación aparece unha lista de ligazóns cara a outros sitios web que venden libros novos e usados, neles tamén pode obter máis información sobre as obras que está a buscar:",
-       "booksources-invalid-isbn": "O ISBN inserido parece non ser válido; comprobe que non haxa erros ao copialo da fonte orixinal.",
+       "booksources-text": "A continuación aparece unha lista de ligazóns cara a outros sitios web que venden libros novos e usados; neles tamén pode obter máis información sobre as obras que está a buscar:",
+       "booksources-invalid-isbn": "O ISBN inserido semella non ser válido; comprobe que non se producisen erros ao copialo da fonte orixinal.",
        "magiclink-tracking-rfc": "Páxinas que usan ligazóns máxicas RFC",
        "magiclink-tracking-rfc-desc": "Esta páxina utiliza ligazóns máxicas RFC. Consulte [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org] para descubrir como facer a migración.",
        "magiclink-tracking-pmid": "Páxinas que usan ligazóns máxicas PMID",
        "magiclink-tracking-isbn": "Páxinas que usan ligazóns máxicas ISBN",
        "magiclink-tracking-isbn-desc": "Esta páxina utiliza ligazóns máxicas ISBN. Consulte [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org] para descubrir como facer a migración.",
        "specialloguserlabel": "Executante:",
-       "speciallogtitlelabel": "Obxectivo (título ou {{ns:user}}:nome de usuario):",
+       "speciallogtitlelabel": "Obxectivo (título ou \"{{ns:user}}:nome de usuario\" para un usuario):",
        "log": "Rexistros",
        "logeventslist-submit": "Mostrar",
        "all-logs-page": "Todos os rexistros públicos",
        "logempty": "Non se atopou ningún elemento relacionado no rexistro.",
        "log-title-wildcard": "Procurar os títulos que comecen con este texto",
        "showhideselectedlogentries": "Mostrar/agochar as entradas do rexistro seleccionadas",
-       "log-edit-tags": "Editar as etiquetas das entradas do registro seleccionadas",
+       "log-edit-tags": "Editar as etiquetas das entradas de rexistro seleccionadas",
        "checkbox-select": "Seleccionar: $1",
        "checkbox-all": "Todos",
        "checkbox-none": "Ningún",
        "activeusers-intro": "Esta é unha lista cos usuarios que tiveron algún tipo de actividade {{PLURAL:$1|no último día|nos últimos $1 días}}.",
        "activeusers-count": "$1 {{PLURAL:$1|acción|accións}} {{PLURAL:$3|no último día|nos últimos $3 días}}",
        "activeusers-from": "Mostrar os usuarios que comecen por:",
-       "activeusers-groups": "Mostrar os usuarios que pertencen ós grupos:",
+       "activeusers-groups": "Mostrar os usuarios que pertencen aos grupos:",
+       "activeusers-excludegroups": "Excluír ós usuarios que pertenzan ós grupos:",
        "activeusers-noresult": "Non se atopou ningún usuario.",
-       "activeusers-submit": "Mostrar usuarios activos",
+       "activeusers-submit": "Mostrar os usuarios activos",
        "listgrouprights": "Dereitos dun usuario segundo o seu grupo",
        "listgrouprights-summary": "A seguinte lista mostra os grupos de usuario definidos neste wiki, cos seus dereitos de acceso asociados.\nSe quere máis información acerca dos dereitos individuais, pode atopala [[{{MediaWiki:Listgrouprights-helppage}}|aquí]].",
        "listgrouprights-key": "Lenda:\n* <span class=\"listgrouprights-granted\">Dereito concedido</span>\n* <span class=\"listgrouprights-revoked\">Dereito revogado</span>",
        "listgrouprights-namespaceprotection-namespace": "Espazo de nomes",
        "listgrouprights-namespaceprotection-restrictedto": "Dereito(s) que permite(n) ao usuario editar",
        "listgrants": "Permisos",
-       "listgrants-summary": "Esta é unha lista de permisos cos seus accesos asoaciados aos permisos de usuario. Os usuarios poden autorizar aplicacións para usar a súa conta, pero con permisos limitados baseados nos permisos que o usuario dá á aplicación. Porén, unha aplicación que actúa no lugar do usuario non pode empregar permisos que o propio usuario non posúe.\nPode ver máis información sobre dereitos individuais [[{{MediaWiki:Listgrouprights-helppage}}|aquí]].",
+       "listgrants-summary": "Esta é unha lista de permisos cos seus accesos asociados aos permisos de usuario. Os usuarios poden autorizar aplicacións para que usen a súa conta, pero con acceso limitado en función dos permisos que o usuario concede á aplicación. Porén, unha aplicación que actúa no nome dun usuario non pode empregar permisos que o propio usuario non posúe.\nPode obter máis información sobre os dereitos individuais [[{{MediaWiki:Listgrouprights-helppage}}|nesta páxina]].",
        "listgrants-grant": "Outorgar",
        "listgrants-rights": "Dereitos",
        "trackingcategories": "Categorías de seguimento",
        "hidden-category-category-desc": "A categoría contén a palabra máxica <code><nowiki>__HIDDENCAT__</nowiki></code>, que impide que se mostre por defecto na caixa de categorías das páxinas.",
        "trackingcategories-nodesc": "Non hai ningunha descrición dispoñible.",
        "trackingcategories-disabled": "A categoría está desactivada",
-       "mailnologin": "Non existe enderezo para o envío",
+       "mailnologin": "Non hai enderezo de envío",
        "mailnologintext": "Debe [[Special:UserLogin|acceder ao sistema]] e ter rexistrado un enderezo de correo electrónico válido nas súas [[Special:Preferences|preferencias]] para enviar correos electrónicos a outros usuarios.",
        "emailuser": "Enviar un correo electrónico a {{GENDER:{{BASEPAGENAME}}|este usuario|esta usuaria}}",
        "emailuser-title-target": "Enviar un correo electrónico a {{GENDER:$1|este usuario|esta usuaria}}",
        "defemailsubject": "Correo electrónico do usuario $1 de {{SITENAME}}",
        "usermaildisabled": "O correo electrónico do usuario está desactivado",
        "usermaildisabledtext": "Non pode enviar correos electrónicos a outros usuarios deste wiki",
-       "noemailtitle": "Sen enderezo de correo electrónico",
+       "noemailtitle": "Non hai enderezo de correo electrónico",
        "noemailtext": "Este usuario non especificou un enderezo de correo electrónico válido.",
        "nowikiemailtext": "Este usuario elixiu non recibir correos electrónicos doutros usuarios.",
        "emailnotarget": "O nome de usuario do destinatario non existe ou é incorrecto.",
        "emailsubject": "Asunto:",
        "emailmessage": "Mensaxe:",
        "emailsend": "Enviar",
-       "emailccme": "Enviar unha copia da mensaxe para min.",
+       "emailccme": "Enviar unha copia da mensaxe ao meu enderezo de correo electrónico.",
        "emailccsubject": "Copia da súa mensaxe para $1: $2",
        "emailsent": "Mensaxe enviada",
        "emailsenttext": "A súa mensaxe de correo electrónico foi enviada.",
-       "emailuserfooter": "Este correo electrónico foi {{GENDER:$1|enviado}} por $1 a {{GENDER:$2|$2}} mediante a función \"{{int:emailuser}}\" en {{SITENAME}}.",
+       "emailuserfooter": "$1 {{GENDER:$1|enviou}} este correo electrónico a {{GENDER:$2|$2}} mediante a función \"{{int:emailuser}}\" de {{SITENAME}}.",
        "usermessage-summary": "Mensaxe deixada polo sistema.",
        "usermessage-editor": "Editor das mensaxes do sistema",
        "watchlist": "Lista de vixilancia",
        "watchnologin": "Non accedeu ao sistema",
        "addwatch": "Engadir á lista vixilancia",
        "addedwatchtext": "A páxina \"[[:$1]]\" e mais a súa conversa foron engadidas á súa [[Special:Watchlist|lista de vixilancia]].",
-       "addedwatchtext-talk": "\"[[:$1]]\" xunto coa súa páxina asociada foron engadidas á túa [[Special:Watchlist|lista de vixilancia]].",
+       "addedwatchtext-talk": "\"[[:$1]]\" e a súa páxina asociada engadíronse á súa [[Special:Watchlist|lista de vixilancia]].",
        "addedwatchtext-short": "A páxina \"$1\" foi engadida á súa lista de vixilancia.",
        "removewatch": "Eliminar da lista de vixilancia",
        "removedwatchtext": "A páxina \"[[:$1]]\" e mais a súa conversa foron eliminadas da súa [[Special:Watchlist|lista de vixilancia]].",
-       "removedwatchtext-talk": "\"[[:$1]]\" xunto coa súa páxina asociada foron eliminadas da túa [[Special:Watchlist|lista de vixilancia]].",
+       "removedwatchtext-talk": "\"[[:$1]]\" e a súa páxina asociada elimináronse da súa [[Special:Watchlist|lista de vixilancia]].",
        "removedwatchtext-short": "A páxina \"$1\" foi eliminada da súa lista de vixilancia.",
        "watch": "Vixiar",
        "watchthispage": "Vixiar esta páxina",
        "wlshowlast": "Mostrar as últimas $1 horas e os últimos $2 días",
        "watchlist-hide": "Agochar",
        "watchlist-submit": "Mostrar",
-       "wlshowtime": "Periodo de tempo a amosar:",
+       "wlshowtime": "Período de tempo a mostrar:",
        "wlshowhideminor": "edicións menores",
        "wlshowhidebots": "bots",
        "wlshowhideliu": "usuarios rexistrados",
        "deletepage": "Borrar a páxina",
        "confirm": "Confirmar",
        "excontent": "o contido era: \"$1\"",
-       "excontentauthor": "o contido era: \"$1\", e o único editor foi \"[[Special:Contributions/$2|$2]]\" ([[User talk:$2|conversa]])",
+       "excontentauthor": "o contido era \"$1\", e o único editor foi [[Special:Contributions/$2|$2]] ([[User talk:$2|conversa]])",
        "exbeforeblank": "o contido antes do baleirado era: \"$1\"",
        "delete-confirm": "Borrar \"$1\"",
        "delete-legend": "Borrar",
        "historywarning": "<strong>Atención:</strong> A páxina que está a piques de borrar ten un historial con $1 {{PLURAL:$1|revisión|revisións}}:",
        "historyaction-submit": "Mostrar",
-       "confirmdeletetext": "Está a piques de borrar de xeito permanente unha páxina ou imaxe con todo o seu historial na base de datos.\nPor favor, confirme que é realmente a súa intención, que comprende as consecuencias e que está obrando de acordo coas regras [[{{MediaWiki:Policy-url}}|da política e normas]].",
+       "confirmdeletetext": "Está a piques de borrar de xeito permanente unha páxina con todo o seu historial.\nPor favor, confirme que é realmente a súa intención, que comprende as consecuencias e que está obrando de acordo coas [[{{MediaWiki:Policy-url}}|políticas]].",
        "actioncomplete": "Completouse a acción",
        "actionfailed": "Fallou a acción",
        "deletedtext": "Borrouse a páxina \"$1\".\nNo $2 pode ver unha lista cos borrados máis recentes.",
        "rollbacklinkcount-morethan": "reverter máis de $1 {{PLURAL:$1|edición|edicións}}",
        "rollbackfailed": "Houbo un erro ao reverter as edicións",
        "rollback-missingparam": "Faltan parámetros obrigatorios na solicitude.",
-       "rollback-missingrevision": "Non se poden cargar datos da revisión.",
+       "rollback-missingrevision": "Non se poden cargar os datos da revisión.",
        "cantrollback": "Non se pode desfacer a edición; o último colaborador é o único autor desta páxina.",
        "alreadyrolled": "Non se pode desfacer a edición en \"[[:$1]]\" feita por [[User:$2|$2]] ([[User talk:$2|conversa]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]); alguén máis editou ou desfixo os cambios desta páxina.\n\nA última edición fíxoa [[User:$3|$3]] ([[User talk:$3|conversa]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
        "editcomment": "O resumo de edición foi: <em>$1</em>.",
        "revertpage": "Desfixéronse as edicións de [[Special:Contributions/$2|$2]] ([[User talk:$2|conversa]]); cambiado á última versión feita por [[User:$1|$1]]",
        "revertpage-nouser": "Desfixéronse as edicións dun usuario agochado; cambiado á última versión feita por {{GENDER:$1|[[User:$1|$1]]}}",
        "rollback-success": "Desfixéronse as edicións de $1;\nvolveuse á última edición, feita por $2.",
-       "rollback-success-notify": "Modificacións anuladas por $1; restaurado á última revisión de $2. [$3 Mostrar os cambios]",
+       "rollback-success-notify": "Revertéronse as edicións de $1;\nrestaurouse a última revisión de $2. [$3 Mostrar os cambios]",
        "sessionfailure-title": "Erro de sesión",
        "sessionfailure": "Parece que hai un problema co rexistro da súa sesión;\nesta acción cancelouse como precaución fronte ao secuestro de sesións.\nPrema no botón \"atrás\", volva cargar a páxina da que proviña e inténteo de novo.",
-       "changecontentmodel": "Cambiar o modelo do contido dunha páxina",
-       "changecontentmodel-legend": "Cambiar o modelo do contido",
+       "changecontentmodel": "Cambiar o modelo de contido dunha páxina",
+       "changecontentmodel-legend": "Cambiar o modelo de contido",
        "changecontentmodel-title-label": "Título da páxina",
        "changecontentmodel-model-label": "Novo modelo de contido",
        "changecontentmodel-reason-label": "Motivo:",
        "changecontentmodel-submit": "Cambiar",
-       "changecontentmodel-success-title": "O modelo de contido foi modificado",
-       "changecontentmodel-success-text": "O tipo de contido de [[:$1]] foi modificado.",
-       "changecontentmodel-cannot-convert": "O contido en [[:$1]] non pode converterse ó tipo de $2.",
-       "changecontentmodel-nodirectediting": "O modelo de contido $1 non permite a modificación directa",
+       "changecontentmodel-success-title": "Modificouse o modelo de contido",
+       "changecontentmodel-success-text": "Modificouse o tipo de contido de \"[[:$1]]\".",
+       "changecontentmodel-cannot-convert": "O contido de \"[[:$1]]\" non se pode converter ao tipo \"$2\".",
+       "changecontentmodel-nodirectediting": "O modelo de contido \"$1\" non permite a modificación directa",
        "changecontentmodel-emptymodels-title": "Non hai modelos de contido dispoñibles",
-       "changecontentmodel-emptymodels-text": "O contido de [[:$1]] non pode converterse a ningún tipo.",
-       "log-name-contentmodel": "Rexistro de cambios de modelo de contido",
+       "changecontentmodel-emptymodels-text": "O contido de \"[[:$1]]\" non se pode converter a ningún tipo.",
+       "log-name-contentmodel": "Rexistro de cambios no modelo de contido",
        "log-description-contentmodel": "Eventos relacinados cos modelos de contido dunha páxina",
-       "logentry-contentmodel-new": "$1 {{GENDER:$2|creou}} a páxina $3 usando un modelo de contido non predeterminado \"$5\"",
-       "logentry-contentmodel-change": "$1 {{GENDER:$2|cambiou}} o modelo de contido da páxina $3 de \"$4\" a \"$5\"",
+       "logentry-contentmodel-new": "$1 {{GENDER:$2|creou}} a páxina \"$3\" usando o modelo de contido non predeterminado \"$5\"",
+       "logentry-contentmodel-change": "$1 {{GENDER:$2|cambiou}} o modelo de contido da páxina \"$3\" de \"$4\" a \"$5\"",
        "logentry-contentmodel-change-revertlink": "reverter",
        "logentry-contentmodel-change-revert": "reverter",
        "protectlogpage": "Rexistro de proteccións",
        "modifiedarticleprotection": "modificou o nivel de protección de \"[[$1]]\"",
        "unprotectedarticle": "eliminou a protección de \"[[$1]]\"",
        "movedarticleprotection": "cambiou as características da protección de \"[[$2]]\" a \"[[$1]]\"",
-       "protectedarticle-comment": "{{GENDER:$2|Protexido}} \"[[$1]]\"",
-       "modifiedarticleprotection-comment": "{{GENDER:$2|Cambiado o nivel de protección}} para \"[[$1]]\"",
-       "unprotectedarticle-comment": "{{GENDER:$2|Eliminada a protección}} para \"[[$1]]\"",
+       "protectedarticle-comment": "{{GENDER:$2|Protexo}} \"[[$1]]\"",
+       "modifiedarticleprotection-comment": "{{GENDER:$2|Cambio o nivel de protección}} de \"[[$1]]\"",
+       "unprotectedarticle-comment": "{{GENDER:$2|Elimino a protección}} de \"[[$1]]\"",
        "protect-title": "Cambiar o nivel de protección de \"$1\"",
        "protect-title-notallowed": "Ollar o nivel de protección de \"$1\"",
        "prot_1movedto2": "moveu \"[[$1]]\" a \"[[$2]]\"",
        "protectcomment": "Motivo:",
        "protectexpiry": "Caducidade:",
        "protect_expiry_invalid": "O tempo de duración da protección non é válido.",
-       "protect_expiry_old": "O momento de remate da protección corresponde ao pasado.",
+       "protect_expiry_old": "A data de caducidade da protección corresponde ao pasado.",
        "protect-unchain-permissions": "Desbloquear as opcións de protección adicionais",
-       "protect-text": "Aquí é onde pode ver e cambiar os niveis de protección da páxina chamada \"'''$1'''\".",
-       "protect-locked-blocked": "Non pode modificar os niveis de protección mentres exista un bloqueo. Velaquí a configuración actual da páxina  '''$1''':",
-       "protect-locked-dblock": "Os niveis de protección non se poden modificar debido a un bloqueo da base de datos activa.\nVelaquí a configuración actual da páxina '''$1''':",
-       "protect-locked-access": "A súa conta non dispón de permisos para mudar os niveis de protección.\nVelaquí a configuración actual da páxina '''$1''':",
+       "protect-text": "Aquí pode ver e modificar o nivel de protección da páxina \"<strong>$1</strong>\".",
+       "protect-locked-blocked": "Non pode modificar o nivel de protección durante un bloqueo.\nVelaquí está a configuración actual da páxina \"<strong>$1</strong>\":",
+       "protect-locked-dblock": "Os niveis de protección non se poden modificar debido a un bloqueo activo da base de datos.\nVelaquí está a configuración actual da páxina \"<strong>$1</strong>\":",
+       "protect-locked-access": "A súa conta non dispón dos permisos necesarios para modificar os niveis de protección.\nVelaquí está a configuración actual da páxina \"<strong>$1</strong>\":",
        "protect-cascadeon": "Esta páxina está protexida actualmente porque está transcluída {{PLURAL:$1|na seguinte páxina, que foi protexida|nas seguintes páxinas, que foron protexidas}} coa opción \"protección en serie\" activada.\nOs cambios no nivel de protección desta páxina non afectarán á protección en serie.",
        "protect-default": "Permitir a todos os usuarios",
        "protect-fallback": "Permitir só aos usuarios con permisos de \"$1\"",
        "sp-contributions-username": "Enderezo IP ou nome de usuario:",
        "sp-contributions-toponly": "Mostrar só as últimas revisións",
        "sp-contributions-newonly": "Mostrar só as edicións que crearon páxinas",
-       "sp-contributions-hideminor": "Ocultar edicións menores",
+       "sp-contributions-hideminor": "Agochar as edicións pequenas",
        "sp-contributions-submit": "Procurar",
        "whatlinkshere": "Páxinas que ligan con esta",
        "whatlinkshere-title": "Páxinas que ligan con \"$1\"",
        "whatlinkshere-hideredirs": "$1 as redireccións",
        "whatlinkshere-hidetrans": "$1 as inclusións",
        "whatlinkshere-hidelinks": "$1 as ligazóns",
-       "whatlinkshere-hideimages": "$1 ligazóns ao ficheiro",
+       "whatlinkshere-hideimages": "$1 as ligazóns ao ficheiro",
        "whatlinkshere-filters": "Filtros",
        "whatlinkshere-submit": "Ir",
        "autoblockid": "Bloqueo automático nº$1",
        "unblock-hideuser": "Non pode desbloquear o usuario porque o seu nome foi agochado.",
        "ipb_cant_unblock": "Erro: Non se atopa o identificador do bloqueo $1. Posiblemente xa foi desbloqueado.",
        "ipb_blocked_as_range": "Erro: O enderezo IP $1 non está bloqueado directamente e non se pode desbloquear. Porén, está bloqueado por estar no rango $2, que si se pode desbloquear.",
-       "ip_range_invalid": "Rango IP non válido.",
+       "ip_range_invalid": "Rango de enderezos IP non válido.",
        "ip_range_toolarge": "Non están permitidos os rangos de bloqueo maiores que /$1.",
        "proxyblocker": "Bloqueador de proxy",
        "proxyblockreason": "O seu enderezo IP foi bloqueado porque é un proxy aberto.\nPor favor, contacte co seu fornecedor de acceso á Internet ou co seu soporte técnico e informe deste grave problema de seguridade.",
        "allmessages": "Mensaxes do sistema",
        "allmessagesname": "Nome",
        "allmessagesdefault": "Texto predeterminado",
-       "allmessagescurrent": "Texto actual",
-       "allmessagestext": "Esta é unha lista de todas as mensaxes dispoñibles no espazo de nomes MediaWiki.\nPor favor, visite a páxina de [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation localización de MediaWiki] e [https://translatewiki.net translatewiki.net] se quere contribuír á localización xenérica de MediaWiki.",
+       "allmessagescurrent": "Texto actual da mensaxe",
+       "allmessagestext": "Esta é unha lista de todas as mensaxes dispoñibles no espazo de nomes MediaWiki.\nPor favor, visite a páxina de [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation localización] e [https://translatewiki.net translatewiki.net] se quere contribuír á localización xenérica de MediaWiki.",
        "allmessagesnotsupportedDB": "Esta páxina non está dispoñible porque '''$wgUseDatabaseMessages''' está desactivado.",
        "allmessages-filter-legend": "Filtrar",
        "allmessages-filter": "Filtrar por estado de personalización:",
        "import-interwiki-text": "Seleccione o wiki e o título da páxina que queira importar.\nAs datas das revisións e os nomes dos editores manteranse.\nTodas as importacións doutros wikis poden consultarse no [[Special:Log/import|rexistro de importacións]].",
        "import-interwiki-sourcewiki": "Wiki de orixe:",
        "import-interwiki-sourcepage": "Páxina de orixe:",
-       "import-interwiki-history": "Copiar todas as versións que hai no historial desta páxina",
+       "import-interwiki-history": "Copiar todas as revisións do historial desta páxina",
        "import-interwiki-templates": "Incluír todos os modelos",
        "import-interwiki-submit": "Importar",
        "import-mapping-default": "Importar aos lugares predeterminados",
        "import-revision-count": "$1 {{PLURAL:$1|revisión|revisións}}",
        "importnopages": "Non hai páxinas para importar.",
        "imported-log-entries": "{{PLURAL:$1|Importouse unha entrada|Importáronse $1 entradas}} do rexisto.",
-       "importfailed": "A importación fallou: $1",
-       "importunknownsource": "Fonte de importación descoñecida",
+       "importfailed": "Fallou a importación: <nowiki>$1</nowiki>",
+       "importunknownsource": "Descoñécese o tipo de fonte de importación",
        "importcantopen": "Non se pode abrir o ficheiro importado",
        "importbadinterwiki": "Ligazón interwiki incorrecta",
-       "importsuccess": "A importación rematou!",
+       "importsuccess": "Rematou a importación!",
        "importnosources": "Non se defininiu ningún wiki desde o que importar e os envíos directos dos historiais están desactivados.",
-       "importnofile": "Non se enviou ningún ficheiro de importación.",
-       "importuploaderrorsize": "Fallou o envío do ficheiro de importación. O ficheiro é máis grande que o tamaño de envío permitido.",
-       "importuploaderrorpartial": "Fallou o envío do ficheiro de importación. O ficheiro só se enviou parcialmente.",
-       "importuploaderrortemp": "Fallou o envío do ficheiro de importación. Falta un cartafol temporal.",
-       "import-parse-failure": "Fallo de análise da importación de XML",
-       "import-noarticle": "Ningunha páxina para importar!",
+       "importnofile": "Non se subiu ningún ficheiro de importación.",
+       "importuploaderrorsize": "Fallou o envío do ficheiro de importación.\nO ficheiro é máis grande que o tamaño de envío permitido.",
+       "importuploaderrorpartial": "Fallou o envío do ficheiro de importación.\nO ficheiro só se enviou parcialmente.",
+       "importuploaderrortemp": "Fallou o envío do ficheiro de importación.\nFalta un cartafol temporal.",
+       "import-parse-failure": "Fallo na análise da importación dos datos XML",
+       "import-noarticle": "Non hai ningunha páxina para importar!",
        "import-nonewrevisions": "Non se importou ningunha revisión (xa estaban todas presentes ou saltáronse por erros).",
        "xml-error-string": "$1 na liña $2, columna $3 (byte $4): $5",
        "import-upload": "Cargar datos XML",
-       "import-token-mismatch": "Perda de datos da sesión.\n\nA súa sesión puido ser pechada. <strong>Por favor, verifique se aínda está conectado e probe de novo</strong>. \nEn caso de que continúe sen funcionar, intente [[Special:UserLogout|saír]] e volver a entrar na súa conta, e verifique se o seu navegador permite o uso de ''cookies'' deste sitio.",
+       "import-token-mismatch": "Perda dos datos da sesión.\n\nPoida que se pechase a súa sesión. <strong>Por favor, comprobe que ten a sesión aberta e probe de novo.</strong>\nEn caso de que siga sen funcionar, intente [[Special:UserLogout|saír]] e volver entrar na súa conta e verifique que o seu navegador permite o uso de cookies neste sitio.",
        "import-invalid-interwiki": "Non se pode importar desde o wiki escificado.",
        "import-error-edit": "Non foi posible importar a páxina \"$1\" porque non ten os permisos necesarios para editala.",
        "import-error-create": "Non foi posible importar a páxina \"$1\" porque non ten os permisos necesarios para creala.",
        "import-logentry-upload-detail": "{{PLURAL:$1|Importouse $1 revisión|Importáronse $1 revisións}}",
        "import-logentry-interwiki-detail": "{{PLURAL:$1|Importouse $1 revisión|Importáronse $1 revisións}} desde $2",
        "javascripttest": "Proba de JavaScript",
-       "javascripttest-pagetext-unknownaction": "Acción descoñecida \"$1\".",
+       "javascripttest-pagetext-unknownaction": "Descoñécese a acción \"$1\".",
        "javascripttest-qunit-intro": "Bótelle unha ollada á [$1 documentación das probas] en mediawiki.org.",
        "tooltip-pt-userpage": "A súa páxina de {{GENDER:|usuario|usuaria}}",
        "tooltip-pt-anonuserpage": "A páxina de usuario do enderezo IP desde o que está a editar",
        "tooltip-pt-preferences": "{{GENDER:|As súas}} preferencias",
        "tooltip-pt-watchlist": "A lista de páxinas cuxas modificacións está a seguir",
        "tooltip-pt-mycontris": "Lista das súas contribucións",
-       "tooltip-pt-anoncontribs": "Unha lista de modificacións feitas desde esta dirección IP",
+       "tooltip-pt-anoncontribs": "Unha lista das modificacións feitas desde este enderezo IP",
        "tooltip-pt-login": "Recoméndaselle rexistrarse, se ben non é obrigatorio",
        "tooltip-pt-logout": "Saír ao anonimato",
        "tooltip-pt-createaccount": "Recoméndaselle crear unha conta e acceder ao sistema, se ben non é obrigatorio",
        "tooltip-ca-protect": "Protexer esta páxina",
        "tooltip-ca-unprotect": "Cambiar a protección desta páxina",
        "tooltip-ca-delete": "Eliminar esta páxina",
-       "tooltip-ca-undelete": "Restaurar as edicións feitas nesta páxina antes de que fose eliminada",
+       "tooltip-ca-undelete": "Restaurar as edicións feitas nesta páxina antes de que fose borrada",
        "tooltip-ca-move": "Mover esta páxina",
        "tooltip-ca-watch": "Engadir esta páxina á lista de vixilancia",
        "tooltip-ca-unwatch": "Eliminar esta páxina da lista de vixilancia",
        "tooltip-ca-nstab-template": "Ver o modelo",
        "tooltip-ca-nstab-help": "Ver a páxina de axuda",
        "tooltip-ca-nstab-category": "Ver a páxina da categoría",
-       "tooltip-minoredit": "Marcar isto coma unha edición pequena",
+       "tooltip-minoredit": "Marcar isto como unha edición pequena",
        "tooltip-save": "Gravar os seus cambios",
        "tooltip-publish": "Publicar os seus cambios",
        "tooltip-preview": "Vista previa dos seus cambios; por favor, úsea antes de gravalos!",
        "patrol-log-page": "Rexistro de revisións patrulladas",
        "patrol-log-header": "Este é un rexistro das revisións patrulladas.",
        "log-show-hide-patrol": "$1 o rexistro de patrullas",
-       "log-show-hide-tag": "$1 rexistro de etiquetas",
-       "confirm-markpatrolled-button": "OK",
-       "confirm-markpatrolled-top": "Marcar a revisión $3 de $2 como patrullada?",
-       "deletedrevision": "A revisión vella $1 foi borrada.",
+       "log-show-hide-tag": "$1 rexistro de etiquetas",
+       "confirm-markpatrolled-button": "Aceptar",
+       "confirm-markpatrolled-top": "Quere marcar a revisión $3 de \"$2\" como patrullada?",
+       "deletedrevision": "Revisión vella e borrada de \"$1\"",
        "filedeleteerror-short": "Erro ao eliminar o ficheiro: $1",
        "filedeleteerror-long": "Atopáronse erros ao eliminar o ficheiro:\n\n$1",
        "filedelete-missing": "Non se pode eliminar o ficheiro \"$1\" porque non existe.",
        "svg-long-error": "Ficheiro SVG non válido: $1",
        "show-big-image": "Ficheiro orixinal",
        "show-big-image-preview": "Tamaño desta vista previa: $1.",
-       "show-big-image-preview-differ": "Tamaño desta revisión $3 do ficheiro $2: $1.",
+       "show-big-image-preview-differ": "Tamaño desta vista previa en $3 do ficheiro en formato $2: $1.",
        "show-big-image-other": "{{PLURAL:$2|Outra resolución|Outras resolucións}}: $1.",
        "show-big-image-size": "$1 × $2 píxeles",
        "file-info-gif-looped": "en bucle",
        "newimages-legend": "Filtro",
        "newimages-label": "Nome do ficheiro (ou parte del):",
        "newimages-showbots": "Mostrar as cargas feitas por bots",
-       "newimages-hidepatrolled": "Ocultar as subas verificadas",
-       "noimages": "Non hai imaxes para ver.",
-       "gallery-slideshow-toggle": "Intercambiar miniaturas",
+       "newimages-hidepatrolled": "Agochar as subidas patrulladas",
+       "noimages": "Non hai imaxes que mostrar.",
+       "gallery-slideshow-toggle": "Intercambiar as miniaturas",
        "ilsubmit": "Procurar",
        "bydate": "por data",
        "sp-newimages-showfrom": "Mostrar os novos ficheiros comezando polo $1 ás $2",
        "exif-imagelength": "Alto",
        "exif-bitspersample": "Bits por compoñente",
        "exif-compression": "Esquema de compresión",
-       "exif-photometricinterpretation": "Composición do píxel",
+       "exif-photometricinterpretation": "Composición de píxeles",
        "exif-orientation": "Orientación",
        "exif-samplesperpixel": "Número de compoñentes",
        "exif-planarconfiguration": "Disposición dos datos",
        "exif-stripoffsets": "Localización dos datos da imaxe",
        "exif-rowsperstrip": "Número de filas por tira",
        "exif-stripbytecounts": "Bytes por tira comprimida",
-       "exif-jpeginterchangeformat": "Distancia ao inicio (SOI) do JPEG",
+       "exif-jpeginterchangeformat": "Desprazamento do SOI do JPEG",
        "exif-jpeginterchangeformatlength": "Bytes de datos JPEG",
-       "exif-whitepoint": "Coordenadas cromáticas de referencia do branco",
+       "exif-whitepoint": "Cromacidade do punto branco",
        "exif-primarychromaticities": "Cromacidades primarias",
        "exif-ycbcrcoefficients": "Coeficientes da matriz de transformación do espazo de cores",
        "exif-referenceblackwhite": "Par de valores de referencia branco e negro",
        "exif-relatedsoundfile": "Ficheiro de son relacionado",
        "exif-datetimeoriginal": "Data e hora de xeración do ficheiro",
        "exif-datetimedigitized": "Data e hora de dixitalización",
-       "exif-subsectime": "DataHora subsegundos",
-       "exif-subsectimeoriginal": "DataHoraOrixinal subsegundos",
-       "exif-subsectimedigitized": "DataHoraDixitalización subsegundos",
+       "exif-subsectime": "Subsegundo da data e hora",
+       "exif-subsectimeoriginal": "Subsegundo da data e hora orixinais",
+       "exif-subsectimedigitized": "Subsegundo da data e hora de dixitalización",
        "exif-exposuretime": "Tempo de exposición",
        "exif-exposuretime-format": "$1 segundos ($2)",
        "exif-fnumber": "Número f",
        "exif-exposureprogram": "Programa de exposición",
        "exif-spectralsensitivity": "Sensibilidade espectral",
-       "exif-isospeedratings": "Relación da velocidade ISO",
+       "exif-isospeedratings": "Relación de velocidade ISO",
        "exif-shutterspeedvalue": "Velocidade de obturación APEX",
        "exif-aperturevalue": "Apertura APEX",
        "exif-brightnessvalue": "Brillo APEX",
-       "exif-exposurebiasvalue": "Corrección da exposición",
+       "exif-exposurebiasvalue": "Corrección da exposición mediante APEX",
        "exif-maxaperturevalue": "Máxima apertura do diafragma",
        "exif-subjectdistance": "Distancia do suxeito",
        "exif-meteringmode": "Modo de medida da exposición",
        "exif-sensingmethod": "Tipo de sensor",
        "exif-filesource": "Fonte do ficheiro",
        "exif-scenetype": "Tipo de escena",
-       "exif-customrendered": "Procesamento da imaxe personalizado",
+       "exif-customrendered": "Procesamento de imaxe personalizado",
        "exif-exposuremode": "Modo de exposición",
        "exif-whitebalance": "Balance de brancos",
        "exif-digitalzoomratio": "Valor do zoom dixital",
        "exif-saturation": "Saturación",
        "exif-sharpness": "Nitidez",
        "exif-devicesettingdescription": "Descrición da configuración do dispositivo",
-       "exif-subjectdistancerange": "Distancia ao suxeito",
+       "exif-subjectdistancerange": "Rango de distancia ao suxeito",
        "exif-imageuniqueid": "ID único da imaxe",
        "exif-gpsversionid": "Versión da etiqueta GPS",
        "exif-gpslatituderef": "Latitude norte ou sur",
        "exif-gpstrack": "Dirección do movemento",
        "exif-gpsimgdirectionref": "Referencia para a dirección da imaxe",
        "exif-gpsimgdirection": "Dirección da imaxe",
-       "exif-gpsmapdatum": "Usados datos xeodésicos de enquisas",
+       "exif-gpsmapdatum": "Datos xeodésicos usados",
        "exif-gpsdestlatituderef": "Referencia para a latitude do destino",
        "exif-gpsdestlatitude": "Latitude do destino",
        "exif-gpsdestlongituderef": "Referencia para a lonxitude do destino",
        "exif-gpsdestlongitude": "Lonxitude do destino",
-       "exif-gpsdestbearingref": "Referencia para a coordenada de destino",
-       "exif-gpsdestbearing": "Coordenada de destino",
+       "exif-gpsdestbearingref": "Referencia para a orientación de destino",
+       "exif-gpsdestbearing": "Orientación de destino",
        "exif-gpsdestdistanceref": "Referencia para a distancia ao destino",
        "exif-gpsdestdistance": "Distancia ao destino",
        "exif-gpsprocessingmethod": "Nome do método de procesamento GPS",
        "exif-orientation-6": "Rotada 90° en sentido antihorario",
        "exif-orientation-7": "Rotada 90° en sentido horario e volteada verticalmente",
        "exif-orientation-8": "Rotada 90° en sentido horario",
-       "exif-planarconfiguration-1": "Formato de paquete de píxeles",
-       "exif-planarconfiguration-2": "Formato de planos",
+       "exif-planarconfiguration-1": "formato de paquete de píxeles",
+       "exif-planarconfiguration-2": "formato de planos",
        "exif-colorspace-65535": "Sen calibrar",
-       "exif-componentsconfiguration-0": "non hai",
+       "exif-componentsconfiguration-0": "non existe",
        "exif-exposureprogram-0": "Sen definir",
        "exif-exposureprogram-1": "Manual",
        "exif-exposureprogram-2": "Programa normal",
        "exif-exposureprogram-3": "Prioridade da apertura",
-       "exif-exposureprogram-4": "Prioridade da obturación",
+       "exif-exposureprogram-4": "Prioridade do obturador",
        "exif-exposureprogram-5": "Programa creativo (preferencia pola profundidade de campo)",
-       "exif-exposureprogram-6": "Programa de acción (preferencia por unha velocidade de exposición máis rápida)",
+       "exif-exposureprogram-6": "Programa de acción (preferencia por unha velocidade do obturador máis rápida)",
        "exif-exposureprogram-7": "Modo retrato (para primeiros planos co fondo desenfocado)",
        "exif-exposureprogram-8": "Modo paisaxe (para paisaxes co fondo enfocado)",
        "exif-subjectdistance-value": "$1 metros",
        "exif-meteringmode-0": "Descoñecido",
        "exif-meteringmode-1": "Media",
-       "exif-meteringmode-2": "Ponderado no centro",
-       "exif-meteringmode-3": "Un punto",
-       "exif-meteringmode-4": "Varios puntos",
-       "exif-meteringmode-5": "Patrón de medición",
+       "exif-meteringmode-2": "Media ponderada no centro",
+       "exif-meteringmode-3": "Puntual",
+       "exif-meteringmode-4": "Multipuntual",
+       "exif-meteringmode-5": "Patrón",
        "exif-meteringmode-6": "Parcial",
        "exif-meteringmode-255": "Outro",
        "exif-lightsource-0": "Descoñecida",
        "exif-lightsource-9": "Bo tempo",
        "exif-lightsource-10": "Tempo anubrado",
        "exif-lightsource-11": "Sombra",
-       "exif-lightsource-12": "Fluorescente luz de día (D 5700 – 7100K)",
-       "exif-lightsource-13": "Fluorescente branco día (N 4600 – 5400K)",
-       "exif-lightsource-14": "Fluorescente branco frío (W 3900 – 4500K)",
+       "exif-lightsource-12": "Fluorescente de luz de día (D 5700 – 7100K)",
+       "exif-lightsource-13": "Fluorescente de branco diurno (N 4600 – 5400K)",
+       "exif-lightsource-14": "Fluorescente de branco frío (W 3900 – 4500K)",
        "exif-lightsource-15": "Fluorescente branco (WW 3200 – 3700K)",
        "exif-lightsource-17": "Luz estándar A",
        "exif-lightsource-18": "Luz estándar B",
        "exif-sensingmethod-2": "Sensor da área de cor dun chip",
        "exif-sensingmethod-3": "Sensor da área de cor de dous chips",
        "exif-sensingmethod-4": "Sensor da área de cor de tres chips",
-       "exif-sensingmethod-5": "Sensor secuencial da área de cor",
-       "exif-sensingmethod-7": "Sensor trilineal",
-       "exif-sensingmethod-8": "Sensor secuencial da liña de cor",
+       "exif-sensingmethod-5": "Sensor da área de cor secuencial",
+       "exif-sensingmethod-7": "Sensor trilinear",
+       "exif-sensingmethod-8": "Sensor da cor linear secuencial",
        "exif-filesource-3": "Cámara fotográfica dixital",
        "exif-scenetype-1": "Unha imaxe fotografada directamente",
        "exif-customrendered-0": "Procesamento normal",
        "exif-customrendered-1": "Procesamento personalizado",
        "exif-exposuremode-0": "Exposición automática",
        "exif-exposuremode-1": "Exposición manual",
-       "exif-exposuremode-2": "Compensación de exposición automática",
+       "exif-exposuremode-2": "Compensación automática da exposición",
        "exif-whitebalance-0": "Balance de brancos automático",
        "exif-whitebalance-1": "Balance de brancos manual",
        "exif-scenecapturetype-0": "Estándar",
        "exif-subjectdistancerange-0": "Descoñecida",
        "exif-subjectdistancerange-1": "Macro",
        "exif-subjectdistancerange-2": "Primeiro plano",
-       "exif-subjectdistancerange-3": "Paisaxe",
+       "exif-subjectdistancerange-3": "Vista distante",
        "exif-gpslatitude-n": "Latitude norte",
        "exif-gpslatitude-s": "Latitude sur",
        "exif-gpslongitude-e": "Lonxitude leste",
        "confirmemail_body_set": "Alguén, probablemente vostede, desde o enderezo IP $1,\nestableceu este enderezo de correo electrónico como o da conta \"$2\" en {{SITENAME}}.\n\nPara confirmar que realmente esta conta lle pertence a vostede e activar\nas características do correo electrónico en {{SITENAME}}, abra esta ligazón no seu navegador:\n\n$3\n\nSe a conta *non* é súa, siga estoutra ligazón\npara cancelar a confirmación do enderezo de correo electrónico:\n\n$5\n\nO código de confirmación caduca o $6 ás $7.",
        "confirmemail_invalidated": "A confirmación do enderezo de correo electrónico foi cancelada",
        "invalidateemail": "Cancelar a confirmación do correo electrónico",
-       "notificationemail_subject_changed": "A dirección de correo rexistrada en {{SITENAME}} foi modificada",
-       "notificationemail_subject_removed": "A dirección de correo rexistrada en {{SITENAME}} foi eliminada",
-       "notificationemail_body_changed": "Alguén, probablemente vostede, dende a dirección IP $1, cambiou a dirección de correo electrónico da conta \"$2\" a \"$3\" en {{SITENAME}}.\n\nSe non foi vostede, contacte cun administrador inmediatamente.",
-       "notificationemail_body_removed": "Alguén, probablemente vostede, dende a dirección IP $1, eliminou a dirección de correo electrónico da conta \"$2\" en {{SITENAME}}.\n\nSe non foi vostede, contacte cun administrador inmediatamente.",
+       "notificationemail_subject_changed": "Modificouse o enderezo de correo electrónico rexistrado en {{SITENAME}}",
+       "notificationemail_subject_removed": "Eliminouse o enderezo de correo electrónico rexistrado en {{SITENAME}}",
+       "notificationemail_body_changed": "Alguén, probablemente vostede, dende o enderezo IP $1,\ncambiou o enderezo de correo electrónico da conta \"$2\" a \"$3\" en {{SITENAME}}.\n\nSe non foi vostede, contacte cun administrador inmediatamente.",
+       "notificationemail_body_removed": "Alguén, probablemente vostede, dende o enderezo IP $1,\neliminou o enderezo de correo electrónico da conta \"$2\" en {{SITENAME}}.\n\nSe non foi vostede, contacte cun administrador inmediatamente.",
        "scarytranscludedisabled": "[A transclusión interwiki está desactivada]",
        "scarytranscludefailed": "[Fallou a busca do modelo \"$1\"]",
        "scarytranscludefailed-httpstatus": "[Fallou a busca do modelo \"$1\": HTTP $2]",
        "scarytranscludetoolong": "[O enderezo URL é demasiado longo]",
        "deletedwhileediting": "'''Aviso:''' Esta páxina foi borrada despois de que comezase a editala!",
-       "confirmrecreate": "O usuario [[User:$1|$1]] ([[User talk:$1|conversa]]) {{GENDER:$1|borrou}} esta páxina despois de que vostede comezara a editala, dando o seguinte motivo:\n: <em>$2</em>\nPor favor, confirme que realmente quere recrear esta páxina.",
-       "confirmrecreate-noreason": "O usuario [[User:$1|$1]] ([[User talk:$1|conversa]]) {{GENDER:$1|borrou}} esta páxina despois de que vostede comezara a editala. Por favor, confirme que realmente quere recrear esta páxina.",
+       "confirmrecreate": "O usuario [[User:$1|$1]] ([[User talk:$1|conversa]]) {{GENDER:$1|borrou}} esta páxina despois de que vostede comezase a editala, achegando o seguinte motivo:\n: <em>$2</em>\nPor favor, confirme que realmente quere recrear esta páxina.",
+       "confirmrecreate-noreason": "O usuario [[User:$1|$1]] ([[User talk:$1|conversa]]) {{GENDER:$1|borrou}} esta páxina despois de que vostede comezase a editala. Por favor, confirme que realmente quere recrear esta páxina.",
        "recreate": "Recrear",
        "confirm_purge_button": "Aceptar",
        "confirm-purge-top": "Quere limpar a memoria caché desta páxina?",
        "confirm-unwatch-button": "Aceptar",
        "confirm-unwatch-top": "Quere eliminar esta páxina da lista de vixilancia?",
        "confirm-rollback-button": "Aceptar",
-       "confirm-rollback-top": "Reverter as edicións desta páxina?",
+       "confirm-rollback-top": "Quere reverter as edicións desta páxina?",
        "colon-separator": ":&#32;",
        "quotation-marks": "\"$1\"",
        "imgmultipageprev": "← páxina anterior",
        "version-variables": "Variables",
        "version-antispam": "Prevención contra spam",
        "version-other": "Outros",
-       "version-mediahandlers": "Executadores de multimedia",
+       "version-mediahandlers": "Manipuladores de ficheiros multimedia",
        "version-hooks": "Asociadores",
        "version-parser-extensiontags": "Etiquetas das extensións do analizador",
-       "version-parser-function-hooks": "Asociadores da función do analizador",
+       "version-parser-function-hooks": "Asociadores das funcións do analizador",
        "version-hook-name": "Nome do asociador",
        "version-hook-subscribedby": "Subscrito por",
        "version-version": "($1)",
        "version-software": "Software instalado",
        "version-software-product": "Produto",
        "version-software-version": "Versión",
-       "version-entrypoints": "Enderezos URL de punto de entrada",
+       "version-entrypoints": "Enderezos URL do punto de entrada",
        "version-entrypoints-header-entrypoint": "Punto de entrada",
        "version-entrypoints-header-url": "URL",
        "version-entrypoints-articlepath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgArticlePath Ruta dos artigos]",
        "version-libraries-license": "Licenza",
        "version-libraries-description": "Descrición",
        "version-libraries-authors": "Autores",
-       "redirect": "Redirixir por nome de ficheiro, usuario, páxina, modificación ou identificador de rexistro",
-       "redirect-summary": "Esta páxina especial redirixe cara a un ficheiro (dado o nome), unha páxina (dado o ID da páxina ou o dunha revisión) ou unha páxina de usuario (dado o ID dun usuario), ou unha entrada do rexistro (dada polo ID do rexistro). Utilización: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]] ou [[{{#Special:Redirect}}/user/101]], ou [[{{#Special:Redirect}}/logid/186]].",
+       "redirect": "Redirixir por nome de ficheiro, ID de usuario, ID de páxina, ID de revisión ou ID de rexistro",
+       "redirect-summary": "Esta páxina especial redirixe cara a un ficheiro (dado o nome), unha páxina (dado o ID da páxina ou o dunha revisión), unha páxina de usuario (dado o ID dun usuario) ou unha entrada do rexistro (dada o ID do rexistro). Utilización: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], [[{{#Special:Redirect}}/user/101]] ou [[{{#Special:Redirect}}/logid/186]].",
        "redirect-submit": "Continuar",
        "redirect-lookup": "Procurar:",
        "redirect-value": "Valor:",
-       "redirect-user": "ID de usuario",
-       "redirect-page": "ID de páxina",
+       "redirect-user": "Identificador de usuario",
+       "redirect-page": "Identificador de páxina",
        "redirect-revision": "Revisión de páxina",
        "redirect-file": "Nome de ficheiro",
        "redirect-logid": "Identificador de rexistro",
        "tags-deactivate": "desactivar",
        "tags-hitcount": "$1 {{PLURAL:$1|modificación|modificacións}}",
        "tags-manage-no-permission": "Non ten os permisos necesarios para modificar etiquetas.",
-       "tags-manage-blocked": "Non pode acceder á interface de modificación de etiquetas mentres estea bloqueado.",
+       "tags-manage-blocked": "Non pode acceder á interface de modificación de etiquetas mentres estea {{GENDER:$1|bloqueado|bloqueada}}.",
        "tags-create-heading": "Crear unha nova etiqueta",
        "tags-create-explanation": "Por defecto, as etiquetas creadas recentemente poderán ser empregadas polos usuarios e os bots.",
        "tags-create-tag-name": "Nome da etiqueta:",
        "tags-deactivate-not-allowed": "Non é posible reactivar a páxina \"$1\".",
        "tags-deactivate-submit": "Desactivar",
        "tags-apply-no-permission": "Non ten permisos para aplicar etiquetas de cambios xunto cos seus tus cambios.",
-       "tags-apply-blocked": "Non pode aplicar os cambios das etiquetas cos seus cambios mentras estea bloqueado.",
+       "tags-apply-blocked": "Non pode aplicar os cambios nas etiquetas nin as súas modificacións mentras estea {{GENDER:$1|bloqueado|bloqueada}}.",
        "tags-apply-not-allowed-one": "A etiqueta \"$1\" non se puede aplicar manualmente.",
        "tags-apply-not-allowed-multi": "{{PLURAL:$2|A seguinte etiqueta non se pode|As seguintes etiquetas non se poden}} aplicar manualmente: $1",
        "tags-update-no-permission": "Non ten permisos para engadir ou quitar etiquetas de cambio das revisións individuais ou das entradas do rexistro.",
-       "tags-update-blocked": "Non pode engadir nin quitar de modificación etiquetas mentras estea bloqueado.",
+       "tags-update-blocked": "Non pode engadir nin eliminar etiquetas mentras estea {{GENDER:$1|bloqueado|bloqueada}}.",
        "tags-update-add-not-allowed-one": "A etiqueta \"$1\" non se pode engadir manualmente.",
        "tags-update-add-not-allowed-multi": "{{PLURAL:$2|A seguinte etiqueta non se pode|As seguintes etiquetas non se poden}} engadir manualmente: $1",
        "tags-update-remove-not-allowed-one": "A etiqueta \"$1\" non se pode eliminar.",
        "expand_templates_generate_xml": "Mostrar a árbore de análise XML",
        "expand_templates_generate_rawhtml": "Mostrar o HTML en bruto",
        "expand_templates_preview": "Vista previa",
-       "expand_templates_preview_fail_html": "<em>Dado que o código HTML puro está activado en {{SITENAME}} e produciuse unha perda dos datos da sesión, a vista previa está oculta como precaución contra ataques mediante código JavaScript.</em>\n\n<strong>Se este é un intento lexítimo de acceso á vista previa, inténteo de novo.</strong>\nSe segue sen funcionar, probe a [[Special:UserLogout|saír]] e volver a entrar coa súa conta, e revise que o seu navegador permite o uso de \"cookies\" deste sitio.",
+       "expand_templates_preview_fail_html": "<em>Dado que o código HTML puro está activado en {{SITENAME}} e se produciu unha perda dos datos da sesión, a vista previa está oculta como precaución contra ataques mediante código JavaScript.</em>\n\n<strong>Se este é un intento lexítimo de acceso á vista previa, probe de novo.</strong>\nEn caso de que siga sen funcionar, intente [[Special:UserLogout|saír]] e volver entrar na súa conta e verifique que o seu navegador permite o uso de cookies neste sitio.",
        "expand_templates_preview_fail_html_anon": "<em>Dado que o código HTML puro está activado en {{SITENAME}} e produciuse unha perda dos datos da sesión, a vista previa está oculta como precaución contra ataques mediante código JavaScript.</em>\n\n<strong>Se este é un intento lexítimo de acceso á vista previa, probe a [[Special:UserLogout|saír]] e volver a entrar coa súa conta.</strong>",
        "expand_templates_input_missing": "Necesita proporcionar polo menos algún texto de entrada.",
        "pagelanguage": "Cambiar a lingua da páxina",
index 2dc66a3..4e4e804 100644 (file)
        "yourpasswordagain": "رمزه دۊمارته بنويس",
        "createacct-yourpasswordagain": "رمزه تأىيد بکۊن",
        "createacct-yourpasswordagain-ph": "هندئه رمزه بنويس",
-       "remembermypassword": "رمزه (تا حدأکثر $1 {{PLURAL:$1|رۊز|رۊزؤن}}) اي وبمجˇ مئن ىاد بدأر.",
        "userlogin-remembermypassword": "مره دۊيرين بمأ بدأر",
        "cannotloginnow-title": "هسأ دۊيرين أمأ منين",
        "cannotloginnow-text": "وختي $1 کاردره، نشأنه دۊيرين أمأن.",
        "categories": "جرگه'ن",
        "listusers-noresult": "هيچ کارگيري پىدا نۊبؤ.",
        "activeusers": "فعال کارگيرؤنˇ ليست",
-       "activeusers-hidesysops": "کيا'نه جيگا دأن",
        "activeusers-noresult": "هيچ کارگيري پىدا نۊبؤ.",
        "listgrouprights": "کارگيري پأره دسفأرسؤن",
        "listgrouprights-group": "پأره",
index d4040cb..a12ef51 100644 (file)
        "yourpasswordagain": "गुपीत उतर परतें टायप करात",
        "createacct-yourpasswordagain": "गुपीतउतराची खात्री कर",
        "createacct-yourpasswordagain-ph": "गुपितउतर परत घालात",
-       "remembermypassword": "ह्या ब्राउजराचेर म्हजें लॉग इन याद दवरात (चडांतचड $1 {{PLURAL:$1|दिस|दिसां}} खातीर)",
        "userlogin-remembermypassword": "म्हजें सत्र चालू दवर",
        "userlogin-signwithsecure": "सुरक्षित कनेक्शन वापर",
        "yourdomainname": "तुमचो डोमेन:",
index 975cb88..a3d9b83 100644 (file)
        "yourpasswordagain": "Gupit utor porot boroi:",
        "createacct-yourpasswordagain": "Gupitutrachi khatri kor",
        "createacct-yourpasswordagain-ph": "Gupitutor porot boroi",
-       "remembermypassword": "Hea internet browseran mhojem sotrachem ugdas dovor (chodan chod $1 {{PLURAL:$1|disak|disank}})",
        "userlogin-remembermypassword": "Mhojem sotr chalu dovor",
        "userlogin-signwithsecure": "Surokxit onubondh vapor",
        "yourdomainname": "Tuzo domain:",
index 2aa61b6..1006cc8 100644 (file)
@@ -35,7 +35,7 @@
        "tog-enotifminoredits": "Lawoli surel olo wa'u to'u lo'ubawa ngo'idi halaamani wawu berkas",
        "tog-enotifrevealaddr": "Popobilohe alamati lo surel ola'u to surel lopo'ota",
        "tog-shownumberswatching": "Popobilohe jumula lo ta he'awasiyalo",
-       "tog-oldsig": "Pali lo ulu'u masatiya",
+       "tog-oldsig": "Pali lo ulu'umu masatiya",
        "tog-fancysig": "Popopasiya pali lo'ulu'u odelo tuladuwiki (diyalu tuwawu pranala otomatis)",
        "tog-uselivepreview": "Popohunawa mopobilohu langsung",
        "tog-forceeditsummary": "Popo'eelawa wa'u wonu dosi monguba diipo otuwa",
@@ -52,7 +52,7 @@
        "tog-showhiddencats": "Popobilehe kategori u hewanto'a",
        "tog-norollbackdiff": "Japopobilohe u beda yilapato pilopohalingo",
        "tog-useeditwarning": "Popo'ingatiya wa'u wonu molola halaman he'ubalo wonu dipo tilahu",
-       "tog-prefershttps": "Layito momake koneksi amaani wonu mo maso log",
+       "tog-prefershttps": "Layito momake koneksi aamani wonu tumuwato log",
        "underline-always": "Layito",
        "underline-never": "Dila ta",
        "underline-default": "Alipo meyalo browser dudelo",
        "category-file-count-limited": "Woluwo {{PLURAL:$1|berkas|S1 berkas}} to delomo kategori.",
        "listingcontinuesabbrev": "wumb",
        "index-category": "Halaman to indeks",
-       "noindex-category": "Haalaman dila to indeks",
+       "noindex-category": "Halaman diila to indeks",
        "broken-file-category": "Halaamani wolo pranala berkas ma lorusa",
        "about": "Tomimbihu",
        "article": "Tuwango halaman",
        "newwindow": "hu'owa to janela bohu",
        "cancel": "Batali",
        "moredotdotdot": "Uweewo",
-       "morenotlisted": "Daputari boti dipo ganapu",
+       "morenotlisted": "Daputari boti kira-kira diipo ganapu",
        "mypage": "Halaamani",
        "mytalk": "Lo'iya",
        "anontalk": "Bisala",
        "invalidtitle-knownnamespace": "Judul u ja sah wolo huwali tanggulo \"$2\" wawu teks \"$3\"",
        "exception-nologin": "Diipo tilumuwoto log",
        "exception-nologin-text": "Toduwolo tumuwoto log alihu mowali mokalaja to halaman botiye meyalo huhutu botiye.",
-       "exception-nologin-text-manual": "Toduwolo tumuwoto alihu mowali mohutu halaman meyalo huhutu uweewo.",
+       "exception-nologin-text-manual": "Toduwoolo $1 tumuwoto alihu mowali mohutu halaman meyalo uweewo.",
        "virus-badscanner": "Tilala konfigurasi: pemindai virus ja iloonuhe: ''$1''",
        "virus-scanfailed": "Pemindaian ja lowali (kode $1)",
        "virus-unknownscanner": "antivirus ja'otaawa",
        "loginlanguagelabel": "Bahasa: $1",
        "pt-login": "Tumuwoto log",
        "pt-login-button": "Tumuwoto log",
+       "pt-login-continue-button": "Turusi tumuwoto log",
        "pt-createaccount": "Mohutu akun",
        "pt-userlogout": "Lumuwalo log",
        "botpasswords-label-create": "Mohutu",
        "searchprofile-everything-tooltip": "Mololohe nga'amila tuwango situs (wolo halaman polo'iyalo)",
        "searchprofile-advanced-tooltip": "Mololohu to huwali lo tanggulo biasa",
        "search-result-size": "$1 ({{PLURAL:$2|1 tahe|$2 tahe}})",
-       "search-redirect": "(mopobale $1)",
+       "search-redirect": "(pilobale lonto $1)",
        "search-section": "(tayadu) $1",
        "search-suggest": "Patujumu yito:$1",
        "searchall": "nga'amila",
index 06bfece..99c0a74 100644 (file)
        "yourpasswordagain": "Ἀνατυπῶσαι σύνθημα:",
        "createacct-yourpasswordagain": "Ἐπιβεβαιώσειν σῆμα",
        "createacct-yourpasswordagain-ph": "Παρέχειν σῆμα πάλιν",
-       "remembermypassword": "Μίμνῃσκε ἐνθάδε συνδεῖσθαι (μέγιστον $1 {{PLURAL:$1|ἡμέρα|ἡμέραι}})",
        "userlogin-remembermypassword": "Διατήρησις συνδέσεως",
        "yourdomainname": "Ὁ τομεύς σου:",
        "externaldberror": "Συνέβη εἴτε σφάλμα τι πιστοποιήσεως τῆς βάσεως δεδομένων εἴτε οὐκ ἔξεστί σοι ἐνημεροῦν τὸν ἐξωτερικὸν λογισμόν σου.",
        "undo-failure": "Ἀδύνατος ἡ μεταστροφὴ λόγῳ ἀντικρουομένων ἐνδιαμέσων μεταγραφῶν.",
        "undo-norev": "Ἀδύνατος ἡ μεταστροφὴ τῆσδε τῆς μεταγραφῆς λόγῳ μὴ ὑπάρξεως ἢ προτέρας διαγραφῆς ταύτης.",
        "undo-summary": "Ἀναίρεσις μεταγραφῆς $1 ὑπὸ τὸν/τὴν [[Special:Contributions/$2|$2]] ([[User talk:$2|Διάλεξις]])",
-       "cantcreateaccounttitle": "Μὴ δυνατὴ ἡ ποίησις λογισμοῦ",
        "viewpagelogs": "Ὁρᾶν καταλόγους διὰ ταύτην τὴν δέλτον",
        "nohistory": "Οὐκ ἔστι ἱστορικὸν μεταγραφῶν διὰ τήνδε τὴν δέλτον.",
        "currentrev": "Τὸ νῦν",
        "activeusers": "Κατάλογος ἐνεργῶν χρωμένων",
        "activeusers-count": "$1 {{PLURAL:$1|μεταγραφή|μεταγραφαὶ}} κατὰ {{PLURAL:$3|τὴν πρόσφατον ἡμέραν|τὰς προσφάτους $3 ἡμέρας}}",
        "activeusers-from": "Δεικνύειν χρωμένους ἐκκινήσει ἐκ:",
-       "activeusers-hidebots": "Κρύπτειν αὐτόματα",
-       "activeusers-hidesysops": "Κρύπτειν ἐπιτρόπους",
        "activeusers-noresult": "Οὐδεὶς χρώμενος εὑρέθη.",
        "listgrouprights": "Δικαιώματα ὁμάδος χρωμένου",
        "listgrouprights-group": "Ὁμάς",
index 7639217..4a3207f 100644 (file)
        "activeusers-intro": "Des isch e Lischt vu Benutzer, wu irgedebis bearbeitet hän {{PLURAL:$1|am letschte Tag|in dr letschte $1 Täg}}.",
        "activeusers-count": "$1 {{PLURAL:$1|Aktion|Aktione}} {{PLURAL:$3|am letschte Tag|in dr letschte $3 Täg}}",
        "activeusers-from": "Zeig Benutzer ab:",
-       "activeusers-hidebots": "Bötli uusblände",
-       "activeusers-hidesysops": "Ammanne (Administratore) uusblände",
        "activeusers-noresult": "Kei Benutzer gfunde.",
        "listgrouprights": "Benutzergruppe-Rächt",
        "listgrouprights-summary": "Des isch e Liste vu dr Benutzergruppe, wu in däm Wiki definiert sin, un dr Rächt, wu dermit verbunde sin.\nZuesätzligi Informatione iber einzelni Rächt git s [[{{MediaWiki:Listgrouprights-helppage}}|doo]].",
        "feedback-external-bug-report-button": "E technischi Ufgab yreiche",
        "feedback-dialog-title": "Rückmäldig gä",
        "feedback-dialog-intro": "Du chasch ds eifache Formular unde bruuche, für’ne Rückmäldig z gä. Dy Kommentar chunt zäme mit dym Benutzernamen uf d Syte «$1».",
-       "feedback-error-title": "Fähler",
        "feedback-error1": "Fäälermäldig: Unbekannts Ergebniss vo de API",
        "feedback-error2": "Fääler: Bearbeitig fehlgschlo",
        "feedback-error3": "Fäälermäldig: Kei Antwort vo de API",
index c1757c9..7c47068 100644 (file)
        "yourname": "Dt'ennym ymmydeyr:",
        "yourpassword": "Fockle yn arrey:",
        "yourpasswordagain": "Aascreeu dt'ockle arrey:",
-       "remembermypassword": "Cooinnee m'ockle arrey (rish wheesh as $1 {{PLURAL:$1|laa|laa|laa|laaghyn}})",
        "login": "Log stiagh",
        "nav-login-createaccount": "Log stiagh / croo coontys",
        "userlogin": "Log stiagh / croo coontys",
        "passwordreset-email": "Enmys post-L:",
        "passwordreset-emailelement": "Ennym ymmydeyr: \n$1\n\nFockle arrey shallidagh: \n$2",
        "passwordreset-emailsentemail": "Ta post-l cur gys cooinaghtyn er ny chur dhyt.",
-       "passwordreset-emailsent-capture": "Ta post-l cur gys cooinaghtyn er ny chur dhyt, as eshyn heese.",
-       "passwordreset-emailerror-capture": "Ta post-l cur gys cooinaghtyn er ny chur dhyt, as eshyn heese, agh cha rosh eh yn ymmydeyr: $1",
        "changeemail-none": "(gyn)",
        "bold_sample": "Clou trome",
        "bold_tip": "Clou trome",
        "permissionserrorstext-withaction": "Cha nel kiart ayd $2, er {{PLURAL:$1|y fa|y fa|y fa|ny faghyn}} heese:",
        "recreate-moveddeleted-warn": "'''Raaue: T’ou aachroo duillag as eh er ve scrysst hannah hene.'''\n\nBy chair dhyt smooinagh vel eh kiart goll er oai lesh reaghey yn duillag shoh.<br />\nTa lioar ny scryssaghyn magh kiarit ayns shoh rere dty chaays hene:",
        "editwarning-warning": "My faagys oo y duillag, hed caghlaaghyn erbee er coayl, foddee.\nMy t'ou uss loggalt stiagh, foddee oo lhiettal y raaue shoh 'sy tosheeaghtyn ayd, 'sy rheynn \"Reaghey\".",
-       "cantcreateaccounttitle": "Cha nod coontys y chroo",
        "viewpagelogs": "Jeeagh er ny lioaryn cooishyn son y duillag shoh",
        "currentrev": "Aavriwnys roie",
        "currentrev-asof": "Aavriwnys s'noa er $1",
index 2de6b59..5dcfbd5 100644 (file)
        "yourpasswordagain": "E kikokiko hou i ka ʻōlelo hūnā:",
        "createacct-yourpasswordagain": "E hōʻoia i ka ʻōlelo hūnā",
        "createacct-yourpasswordagain-ph": "E kikokiko hou i ka ʻōlelo hūnā",
-       "remembermypassword": "Hoʻomanaʻo iaʻu ma kēia lolo uila (no ka palena nui o $1 {{PLURAL:$1|lā|mau lā}})",
        "userlogin-remembermypassword": "Hoʻomanaʻo iaʻu",
        "login": "ʻEʻe",
        "nav-login-createaccount": "ʻEʻe / Kāinoa",
index 3af5f05..a747166 100644 (file)
        "passwordreset-emaildisabled": "שירותי הדוא\"ל בוטלו באתר ויקי זה.",
        "passwordreset-username": "שם משתמש:",
        "passwordreset-domain": "תחום:",
-       "passwordreset-capture": "לצפות בדוא\"ל הנשלח?",
-       "passwordreset-capture-help": "אם תסמנו תיבה זו, הדואר האלקטרוני (יחד עם הסיסמה הזמנית) יוצג לכם במקביל לשליחתו למשתמש.",
        "passwordreset-email": "כתובת דוא\"ל:",
        "passwordreset-emailtitle": "פרטי חשבון ב{{grammar:תחילית|{{SITENAME}}}}",
        "passwordreset-emailtext-ip": "מישהו (ככל הנראה אתם, מכתובת ה־IP מספר $1) ביקש איפוס של\nהסיסמה שלכם ב{{grammar:תחילית|{{SITENAME}}}} ($4). {{PLURAL:$3|חשבון המשתמש הבא שייך|חשבונות המשתמש הבאים שייכים}}\nלכתובת הדואר האלקטרוני הזאת:\n\n$2\n\n{{PLURAL:$3|סיסמה זמנית זו תפקע|סיסמאות זמניות אלה יפקעו}} תוך {{PLURAL:$5|יום|יומיים|$5 ימים}}.\nעליכם להיכנס ולבחור סיסמה חדשה עכשיו. אם מישהו אחר ביצע בקשה זו, או שנזכרתם בסיסמתכם\nהמקורית ואינכם רוצים עוד לשנות אותה, באפשרותכם להתעלם מהודעה זו ולהמשיך להשתמש בסיסמה\nהישנה.",
        "passwordreset-emailelement": "שם משתמש:\n$1\n\nסיסמה זמנית:\n$2",
        "passwordreset-emailsentemail": "אם כתובת הדואר האלקטרוני הזאת משויכת לחשבון שלך, אז יישלח דואר אלקטרוני לאיפוס הסיסמה.",
        "passwordreset-emailsentusername": "אם יש כתובת דואר אלקטרוני שמשויכת לשם המשתמש הזה, אז יישלח דואר אלקטרוני לאיפוס הסיסמה.",
-       "passwordreset-emailsent-capture2": "{{PLURAL:$1|דוא\"ל איפוס הסיסמה נשלח|הודעות דוא\"ל של איפוס הסיסמה נשלחו}}. {{PLURAL:$1|שם המשתמשים והסיסמה מוצגים|רשימה של שמות המשתמשים והסיסמאות מוצגת}} כאן.",
-       "passwordreset-emailerror-capture2": "לא ניתן היה לשלוח דוא\"ל ל{{GENDER:$2|משתמש|משתמשת}}: $1 {{PLURAL:$3|שם המשתמש והסיסמה מוצגים|רשימה של שמות המשתמשים והסיסמאות מוצגת}} כאן.",
        "passwordreset-nocaller": "לא סופק הקורא הנדרש",
        "passwordreset-nosuchcaller": "הקורא אינו קיים: $1",
        "passwordreset-ignored": "איפוס הסיסמה לא בוצע. ייתכן שלא הוגדר ספק.",
-       "passwordreset-invalideamil": "כתובת דוא\"ל לא תקינה",
+       "passwordreset-invalidemail": "כתובת דוא\"ל לא תקינה",
        "passwordreset-nodata": "לא סופק שם משתמש או כתובת דוא\"ל",
        "changeemail": "שינוי או הסרת כתובת דוא\"ל",
        "changeemail-header": "יש למלא את הטופס הזה כדי לשנות את כתובת הדוא\"ל שלך. אם ברצונך להימנע משיוך כתובת דוא\"ל כלשהי לחשבון שלך, יש להשאיר את שדה כתובת הדוא\"ל החדשה ריק בעת שליחת הטופס.",
        "right-siteadmin": "נעילה וביטול נעילה של בסיס הנתונים",
        "right-override-export-depth": "ייצוא דפים כולל הדפים המקושרים (עד עומק של 5 דפים)",
        "right-sendemail": "שליחת דואר אלקטרוני למשתמשים אחרים",
-       "right-passwordreset": "צפייה בדואר אלקטרוני של איפוס סיסמה",
        "right-managechangetags": "יצירה, הפעלה וביטול של [[Special:Tags|תגיות]]",
        "right-applychangetags": "החלת [[Special:Tags|תגיות]] יחד עם שינויים",
        "right-changetags": "הוספה והסרה של [[Special:Tags|תגיות]] לגרסאות ולרשומות יומן",
        "apisandbox-continue": "המשך",
        "apisandbox-continue-clear": "ניקוי",
        "apisandbox-continue-help": "\"{{int:apisandbox-continue}}\" [https://www.mediawiki.org/wiki/API:Query#Continuing_queries ימשיך] את הבקשה האחרונה; \"{{int:apisandbox-continue-clear}}\" ינקה את הפרמטרים הקשורים להמשך.",
+       "apisandbox-param-limit": "יש לכתוב <kbd>max</kbd> כדי להשתמש בערך המרבי האפשרי.",
        "booksources": "משאבי ספרות חיצוניים",
        "booksources-search-legend": "חיפוש משאבי ספרות חיצוניים",
        "booksources-isbn": "מסת\"ב (ISBN):",
        "activeusers-count": "{{PLURAL:$1|פעולה אחת|$1 פעולות}} ב{{PLURAL:$3|יום האחרון|יומיים האחרונים|־$3 הימים האחרונים}}",
        "activeusers-from": "הצגת משתמשים החל מ:",
        "activeusers-groups": "הצגת משתמשים השייכים לקבוצות:",
+       "activeusers-excludegroups": "הסתרת משתמשים השייכים לקבוצות:",
        "activeusers-noresult": "לא נמצאו משתמשים.",
        "activeusers-submit": "הצגת משתמשים פעילים",
        "listgrouprights": "רשימת הרשאות לקבוצה",
        "tags-deactivate": "ביטול הפעלה",
        "tags-hitcount": "{{PLURAL:$1|שינוי אחד|$1 שינויים}}",
        "tags-manage-no-permission": "אין לך הרשאה לנהל תגיות שינויים.",
-       "tags-manage-blocked": "×\9c×\90 × ×\99ת×\9f ×\9c× ×\94×\9c ×ª×\92×\99×\95ת ×©×\99× ×\95×\99×\99×\9d ×\9e×\97ש×\91×\95×\9f ×\9eשת×\9eש חסום.",
+       "tags-manage-blocked": "×\90×\99× ×\9a ×\9e×\95רש×\94 ×\9c× ×\94×\9c ×ª×\92×\99×\95ת ×©×\99× ×\95×\99×\99×\9d ×\9b×\90שר ×\97ש×\91×\95×\9f ×\94×\9eשת×\9eש {{GENDER:$1|ש×\9c×\9a}} חסום.",
        "tags-create-heading": "יצירת תגית חדשה",
        "tags-create-explanation": "כברירת מחדל, תגיות חדשות שנוצרות יהיו זמינות לשימושם של משתמשים ובוטים.",
        "tags-create-tag-name": "שם התגית:",
        "tags-deactivate-not-allowed": "לא ניתן לבטל את הפעלת התגית \"$1\".",
        "tags-deactivate-submit": "ביטול הפעלה",
        "tags-apply-no-permission": "אין לך הרשאה להחיל תגיות שינויים יחד עם השינויים שלך.",
-       "tags-apply-blocked": "×\9c×\90 × ×\99ת×\9f ×\9c×\94×\97×\99×\9c ×ª×\92×\99×\95ת ×©×\99× ×\95×\99×\99×\9d ×\99×\97×\93 ×¢×\9d ×\94ש×\99× ×\95×\99×\99×\9d ×©×\9c×\9a ×\9e×\97ש×\91×\95×\9f ×\9eשת×\9eש חסום.",
+       "tags-apply-blocked": "×\90×\99× ×\9a ×\9e×\95רש×\94 ×\9c×\94×\97×\99×\9c ×ª×\92×\99×\95ת ×©×\99× ×\95×\99×\99×\9d ×\99×\97×\93 ×¢×\9d ×\94ש×\99× ×\95×\99×\99×\9d ×©×\9c×\9a ×\9b×\90שר ×\97ש×\91×\95×\9f ×\94×\9eשת×\9eש {{GENDER:$1|ש×\9c×\9a|ש×\9c×\9a}} חסום.",
        "tags-apply-not-allowed-one": "לא ניתן להחיל את התגית \"$1\" ידנית.",
        "tags-apply-not-allowed-multi": "לא ניתן להחיל את {{PLURAL:$2|התגית הבאה|התגיות הבאות}} ידנית: $1",
        "tags-update-no-permission": "אין לך הרשאה להוסיף או להסיר תגיות שינויים לגרסאות מסוימות או לרשומות יומן.",
-       "tags-update-blocked": "×\9c×\90 × ×\99ת×\9f ×\9c×\94×\95ס×\99×£ ×\90×\95 ×\9c×\94ס×\99ר ×ª×\92×\99×\95ת ×©×\99× ×\95×\99×\99×\9d ×\9e×\97ש×\91×\95×\9f ×\9eשת×\9eש חסום.",
+       "tags-update-blocked": "×\90×\99× ×\9a ×\9e×\95רש×\94 ×\9c×\94×\95ס×\99×£ ×\90×\95 ×\9c×\94ס×\99ר ×ª×\92×\99×\95ת ×©×\99× ×\95×\99×\99×\9d ×\9b×\90שר ×\97ש×\91×\95×\9f ×\94×\9eשת×\9eש {{GENDER:$1|ש×\9c×\9a|ש×\9c×\9a}} חסום.",
        "tags-update-add-not-allowed-one": "לא ניתן להוסיף את התגית \"$1\" ידנית.",
        "tags-update-add-not-allowed-multi": "לא ניתן להוסיף את {{PLURAL:$2|התגית הבאה|התגיות הבאות}} ידנית: $1",
        "tags-update-remove-not-allowed-one": "לא ניתן להסיר את התגית \"$1\".",
        "mw-widgets-dateinput-no-date": "לא נבחר תאריך",
        "mw-widgets-titleinput-description-new-page": "הדף עדיין לא קיים",
        "mw-widgets-titleinput-description-redirect": "הפניה ל{{GRAMMAR:תחילית|$1}}",
+       "mw-widgets-categoryselector-add-category-placeholder": "הוספת קטגוריה...",
        "sessionmanager-tie": "לא ניתן לצרף מספר סוגי אימות זהות: $1.",
        "sessionprovider-generic": "התחברויות של $1",
        "sessionprovider-mediawiki-session-cookiesessionprovider": "התחברויות המבוססות על עוגיות",
index 3c7cc5b..da13ea0 100644 (file)
        "tog-enotifminoredits": "छोटे परिवर्तनों के लिए भी मुझे ईमेल भेजें",
        "tog-enotifrevealaddr": "अधिसूचना ईमेल में मेरा ईमेल पता दर्शायें",
        "tog-shownumberswatching": "ध्यान रखने वाले सदस्यों की संख्या दिखायें",
-       "tog-oldsig": "वर्तमान हस्ताक्षर:",
+       "tog-oldsig": "à¤\86पà¤\95ा à¤µà¤°à¥\8dतमान à¤¹à¤¸à¥\8dताà¤\95à¥\8dषर:",
        "tog-fancysig": "हस्ताक्षर का विकिपाठ के समान मानें (बिना स्वचालित कड़ी के)",
        "tog-uselivepreview": "सजीवन झलक का उपयोग करें",
        "tog-forceeditsummary": "यदि सम्पादन सारांश ना दिया गया हो तो मुझे सूचित करें",
        "category-file-count-limited": "इस श्रेणी में निम्नलिखित {{PLURAL:$1|फ़ाइल है।|फ़ाइलें हैं।}}",
        "listingcontinuesabbrev": "जारी",
        "index-category": "सूचीबद्ध पृष्ठ",
-       "noindex-category": "असूचीबद्ध पृष्ठों",
+       "noindex-category": "असूचीबद्ध पृष्ठ",
        "broken-file-category": "टूटी हुई फ़ाइल कड़ियों वाले पृष्ठ",
        "about": "के बारे में",
        "article": "सामग्री लेख",
        "newwindow": "(नई विंडो में खुलता है)",
        "cancel": "रद्द करें",
        "moredotdotdot": "और...",
-       "morenotlisted": "यह सूची पूर्ण नहीं है।",
+       "morenotlisted": "शायद à¤¯à¥\87 सूची पूर्ण नहीं है।",
        "mypage": "पृष्ठ",
        "mytalk": "वार्ता",
        "anontalk": "वार्ता",
        "passwordreset-emaildisabled": "इस विकि पर ई-मेल सुविधा अक्षम कर दी गयी है।",
        "passwordreset-username": "सदस्यनाम:",
        "passwordreset-domain": "डोमेन:",
-       "passwordreset-capture": "परिणामस्वरूप बना ई-मेल देखें?",
-       "passwordreset-capture-help": "अगर आप इस चेकबॉक्स को टिक करते हैं तो ई-मेल (अस्थायी कूटशब्द के साथ) आप को दिखया जाएगा और सदस्य को भेजा भी जयेगा।",
        "passwordreset-email": "ई-मेल पता:",
        "passwordreset-emailtitle": "{{SITENAME}} पर खाते का विवरण",
        "passwordreset-emailtext-ip": "किसी ने (शायद आपने ही, $1 आइ॰पी पते से) {{SITENAME}} ($4) पर अपने {{PLURAL:$3|कूटशब्द|कूटशब्दों}} को रीसेट करने का अनुरोध किया है। इस ई-मेल पते से निम्न {{PLURAL:$3|खाता जुड़ा है|खाते जुड़े हैं}}:\n\n$2\n\n{{PLURAL:$3|यह|ये}} अस्थायी कूटशब्द {{PLURAL:$5|एक दिन|$5 दिनों}} के बाद काम नहीं करेंगे। आपको लॉग इन करके एक नया कूटशब्द अभी चुन लेना चाहिए। यदि यह अनुरोध किसी और ने किया है, या फिर आपको अपना मूल कूटशब्द याद आ गया है, और आप {{PLURAL:$3|अपना|अपने}} कूटशब्द नहीं बदलना चाहते, आप इस संदेश को अनदेखा कर के अपने पुराने कूटशब्द का प्रयोग जारी रख सकते हैं।",
        "passwordreset-emailelement": "सदस्यनाम: \n$1\n\nअस्थायी कूटशब्द: \n$2",
        "passwordreset-emailsentemail": "यदि आपका यह ईमेल आपके खाते के साथ जोड़ा गया है तो पासवर्ड बदलने का ईमेल इसमें भेज दिया गया है।",
        "passwordreset-emailsentusername": "यदि कोई ईमेल इस खाते से जुड़ी है तो पासवर्ड आपके ईमेल में भेज दिया जाएगा।",
-       "passwordreset-emailerror-capture2": "{{GENDER:$2|सदस्य}} को ईमेल भेजना विफल : $1 {{PLURAL:$3|सदस्य नाम और पासवर्ड|सदस्य नाम और पासवर्ड की सूची}} नीचे दिया गया है।",
-       "passwordreset-invalideamil": "अवैध ईमेल पता",
+       "passwordreset-invalidemail": "अवैध ईमेल पता",
        "changeemail": "ई-मेल पता परिवर्तित करें",
        "changeemail-header": "अपना ईमेल पता परिवर्तन हेतु इसे पूरा करें। यदि आप अपना वर्तमान ईमेल पता हटाना चाहते हैं, तो इसे खाली छोड़ दें और इसे भेजें।",
        "changeemail-no-info": "इस पृष्ठ का सीधे प्रयोग करने के लिए आपको लॉग इन करना होगा।",
        "right-siteadmin": "डाटाबेस को ताला लगायें या खोलें",
        "right-override-export-depth": "पृष्ठ निर्यात करें, पाँच स्तर की गहराई तक जुड़े हुए पृष्ठों समेत",
        "right-sendemail": "अन्य सदस्यों को ई-मेल भेजें",
-       "right-passwordreset": "कूटशब्द रीसेट ई-मेल देखें",
        "right-managechangetags": "डेटाबेस से [[Special:Tags|चिप्पियाँ]] बनायें और हटायें",
        "right-applychangetags": "प्रयोग में लाइये [[Special:Tags|tags]] किसी के बदलाव के साथ।",
        "right-changetags": "जमा करो और हटाओ स्वतंत्र [[Special:Tags|टैग]] व्यक्तिगत अवतरणों और लॉग प्रविक्तियों पर",
        "grant-group-high-volume": "उच्च कार्य गतिविधि करें",
        "grant-group-customization": "पसंद और तय",
        "grant-group-administration": "प्रबंधकीय कार्य करें",
+       "grant-group-private-information": "अपने बारे में निजी जानकारी देखें",
        "grant-group-other": "अन्य गतिविधि",
        "grant-blockusers": "प्रतिबंधित और अप्रतिबंधित करना",
        "grant-createaccount": "खाता बनाएँ",
        "grant-highvolume": "अत्यधिक तेजी से सम्पादन",
        "grant-oversight": "सदस्य को छुपाना और अवतरण हटाना",
        "grant-patrol": "पृष्ठों को जांचा हुआ चिन्हित करना",
+       "grant-privateinfo": "निजी जानकारी देखें",
        "grant-protect": "पृष्ठों को सुरक्षित व असुरक्षित करना",
        "grant-rollback": "पृष्ठ से सम्पादन वापस लेना",
        "grant-sendemail": "अन्य सदस्यों को ई-मेल भेजें",
        "rightslogtext": "यह सदस्य अधिकारों में हुए बदलावों की सूची है।",
        "action-read": "इस पृष्ठ को पढ़ने",
        "action-edit": "इस पृष्ठ को सम्पादित करने",
-       "action-createpage": "पà¥\83षà¥\8dठ à¤¬à¤¨à¤¾à¤¨à¥\87",
-       "action-createtalk": "वारà¥\8dता à¤ªà¥\83षà¥\8dठ à¤¬à¤¨à¤¾à¤¨à¥\87",
+       "action-createpage": "à¤\87स à¤ªà¤¨à¥\8dनà¥\87 à¤\95à¥\8b à¤¬à¤¨à¤¾à¤¯à¥\87à¤\82",
+       "action-createtalk": "à¤\87स à¤µà¤¾à¤°à¥\8dता à¤ªà¤¨à¥\8dनà¥\87 à¤\95à¥\8b à¤¬à¤¨à¤¾à¤¯à¥\87à¤\82",
        "action-createaccount": "यह सदस्य खाता खोलने",
        "action-autocreateaccount": "स्वतः ही बाहरी सदस्य खाता बनायें",
        "action-history": "इस पृष्ठ का इतिहास देखने",
        "action-managechangetags": "डेटाबेस से चिप्पि बनायें और हटायें",
        "action-applychangetags": "अपमे बदलाव के साथ टैग जोड़ें।",
        "action-changetags": "जमा करें और हटाएँ स्वतंत्र टैग व्यक्तिगत अवतरणों और लॉग प्रविक्तियों पर",
+       "action-purge": "पृष्ठ ताजा करें",
        "nchanges": "$1 {{PLURAL:$1|बदलाव}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|अंतिम बार देखने के बाद से}}",
        "enhancedrc-history": "इतिहास",
        "upload-foreign-cant-upload": "यह विकि अन्य फ़ाइल संग्रह में अपलोड हेतु तय नहीं किया गया है।",
        "upload-dialog-title": "फ़ाइल डालें",
        "upload-dialog-button-cancel": "रद्द करें",
+       "upload-dialog-button-back": "पीछे",
        "upload-dialog-button-done": "पूर्ण हुआ",
        "upload-dialog-button-save": "सहेजें",
        "upload-dialog-button-upload": "डालें",
        "apisandbox-results-fixtoken-fail": "टोकन \"$1\" डालने में विफल",
        "apisandbox-alert-page": "इस पृष्ठ के जगह अमान्य है।",
        "apisandbox-alert-field": "जगह में डाला गया जानकारी अमान्य है।",
+       "apisandbox-continue": "जारी रखें",
+       "apisandbox-continue-clear": "खाली करें",
        "booksources": "पुस्तकों के स्रोत",
        "booksources-search-legend": "पुस्तकों के स्रोत खोजें",
        "booksources-isbn": "आइ॰एस॰बी॰एन:",
        "activeusers-intro": "यह सक्रिय सदस्यों की सूची है जिन्होंने पिछले $1 {{PLURAL:$1|दिन|दिनों}} में कुछ गतिविधि करी है।",
        "activeusers-count": "$1 {{PLURAL:$1|कार्य}} पिछले $3 {{PLURAL:$3|दिन|दिनों}} में",
        "activeusers-from": "इस अक्षर से शुरू होने वाले सदस्य दिखाएँ:",
-       "activeusers-hidebots": "बॉट छुपाएँ",
-       "activeusers-hidesysops": "प्रबंधक छुपाएँ",
        "activeusers-noresult": "कोई सदस्य नहीं मिले।",
        "activeusers-submit": "सक्रिय सदस्यों को दिखायें",
        "listgrouprights": "सदस्य समूह अधिकार",
        "sp-contributions-username": "आईपी पता या सदस्यनाम:",
        "sp-contributions-toponly": "केवल उन सम्पादनों को दिखाएँ जो नवीनतम संशोधन हैं",
        "sp-contributions-newonly": "केवल वे सम्पादन दिखाएँ जिनसे पृष्ठ निर्मित हुए हों",
+       "sp-contributions-hideminor": "छोटे सम्पादन छुपाएँ",
        "sp-contributions-submit": "खोजें",
        "whatlinkshere": "यहाँ के हवाले कहाँ कहाँ हैं",
        "whatlinkshere-title": "$1 से जुड़े हुए पृष्ठ",
        "pageinfo-category-pages": "पृष्ठ संख्या",
        "pageinfo-category-subcats": "उपश्रेणियों की संख्या",
        "pageinfo-category-files": "फ़ाइलों की संख्या",
+       "pageinfo-user-id": "सदस्य पता",
        "markaspatrolleddiff": "जाँचा हुआ चिन्हित करें",
        "markaspatrolledtext": "इस पृष्ठ को जाँचा हुआ चिन्हित करें",
        "markaspatrolledtext-file": "इस फ़ाइल संस्करण को जांचा हुआ चिन्हित करें",
        "patrol-log-header": "यह परीक्षित अवतरणों की लॉग है।",
        "log-show-hide-patrol": "परीक्षण लॉग $1",
        "log-show-hide-tag": "$1 टैग लॉग",
+       "confirm-markpatrolled-button": "ठीक है",
        "deletedrevision": "पुराना अवतरण $1 हटा दिया",
        "filedeleteerror-short": "फ़ाईल हटानेमें समस्या: $1",
        "filedeleteerror-long": "फ़ाईल हटानेमें आईं समस्यायें:\n\n$1",
        "htmlform-cloner-create": "अधिक जोड़ें",
        "htmlform-cloner-delete": "हटाएँ",
        "htmlform-cloner-required": "कम से कम एक मूल्य की आवश्यकता है।",
+       "htmlform-date-placeholder": "वववव-मम-दद",
+       "htmlform-time-placeholder": "घघ:मम:सस",
        "htmlform-title-badnamespace": "[[:$1]] अभी \"{{ns:$2}}\" नामस्थान में नहीं है।",
        "htmlform-title-not-creatable": "\"$1\" निर्माण करने लायक शीर्षक नहीं है।",
        "htmlform-title-not-exists": "$1 नहीं बना है।",
        "feedback-thanks": "धन्यवाद! आपकी प्रतिक्रिया पृष्ठ में नियुक्त किया गया है \"[ $2  $1 ]\"।",
        "feedback-thanks-title": "धन्यवाद!",
        "feedback-useragent": "सदस्य कर्ता:",
-       "searchsuggest-search": "खोज",
+       "searchsuggest-search": "खोजें {{SITENAME}}",
        "searchsuggest-containing": "...से युक्त",
        "api-error-autoblocked": "आपका आईपी पता अपने आप अवरोधित हो गया, क्योंकि यह किसी अवरोधित सदस्य द्वारा उपयोग किया गया था।",
        "api-error-badaccess-groups": "आपको इस विकि के लिए फ़ाइलें अपलोड करने की अनुमति नहीं है.",
        "log-action-filter-delete-restore": "पृष्ठ न हटाना",
        "log-action-filter-delete-event": "पृष्ठ हटाने का लॉग",
        "log-action-filter-delete-revision": "अवतरण हटाना",
+       "log-action-filter-import-interwiki": "अंतरविकि आयात",
+       "log-action-filter-import-upload": "एक्सएमएल अपलोड द्वारा आयात",
        "log-action-filter-managetags-create": "चिप्पि निर्मित",
        "log-action-filter-newusers-create": "अज्ञात सदस्य द्वारा निर्मित",
        "log-action-filter-newusers-create2": "पंजीकृत सदस्य द्वारा निर्मित",
        "linkaccounts-success-text": "खाता जुड़ गया।",
        "linkaccounts-submit": "खाता जोड़ें",
        "unlinkaccounts": "खाता अलग करें",
-       "unlinkaccounts-success": "खाता अलग हो गया।"
+       "unlinkaccounts-success": "खाता अलग हो गया।",
+       "edit-error-short": "त्रुटि: $1",
+       "edit-error-long": "त्रुटि:\n\n$1"
 }
index 9197873..f694e21 100644 (file)
        "yourpasswordagain": "Password fir se type karo:",
        "createacct-yourpasswordagain": "Aapan password ke confirm karo",
        "createacct-yourpasswordagain-ph": "Hame lagged in rahan do",
-       "remembermypassword": "Ii computer pe hamaar login yaad rakho (jaada se jaada $1 {{PLURAL:$1|din|din}} talak)",
        "userlogin-remembermypassword": "Secure connection ke kaam me lao",
        "userlogin-signwithsecure": "Secure connection ke kaam me lao",
        "yourdomainname": "Aap ke domain:",
        "passwordreset-emailelement": "Sadasya ke naam: \n$1\n\nKuchh din ke khatir password: \n$2",
        "passwordreset-emailsentemail": "Agar ii email aap ke account se associated hai tab ek password reset email ke bheja jaai.",
        "passwordreset-emailsentusername": "Agar ii email aap ke username se associated hai tab ek password reset email ke bheja jaai.",
-       "passwordreset-emailsent-capture": "Ek password yaad karae waala e-mail, jiske niche dekhawa jaawe hae, ke bhej dewa gais hae.",
-       "passwordreset-emailerror-capture": "Ek password yaad karae waala e-mail ke banawa gais hae, jiske niche dekhawa jaawe hae, lekin jiske {{GENDER:$2|user}} ke lage bheje nai jawa sake hae: $1",
        "changeemail": "E-mail address ke badlo, nai to, hatao",
        "changeemail-header": "Aapan email ke badle ke khatir ii form ke bharo. Agar aap koi email ke aapan account se nai associate kare mangtaa hai tab form ke submit kare ke time email address ke blank chhorr do.",
-       "changeemail-passwordrequired": "Ii badlao ke confirm kare ke khatir aap ke aapan password ke enter kare ke parri.",
        "changeemail-no-info": "Ii panna ke sidha dekhe ke khaatir, aap ke login kare ke parri.",
        "changeemail-oldemail": "Abhi ke E-mail address:",
        "changeemail-newemail": "Nawaa E-mail address:",
        "undo-nochange": "Janae hae ki badlao ke pahile delete kar dewa gais hae.",
        "undo-summary": "$1 badlao [[Special:Contributions/$2|$2]] se, ke pahile jaise karo ([[User talk:$2|Talk]])",
        "undo-summary-username-hidden": "Hidden sadasya ke badalo $1 ke pahile jaise karo",
-       "cantcreateaccounttitle": "Account nai banae sakta hai",
        "cantcreateaccount-text": "Ii IP address ('''$1''') se nawaa account banae ke [[User:$3|$3]] block kar diis hai.\n\nIske kaaran, jon ki $3 diis hai, ''$2'' hai",
        "cantcreateaccount-range-text": "Nawaa account banae ke IP addresses range <strong>$1</strong>, jisme aap ke IP address (<strong>$4</strong>) hae, ke[[User:$3|$3]] block kar diis hae.\n\n$3 ke kaaran hae <em>$2</em>",
        "viewpagelogs": "Ii panna ke suchi dekho",
        "activeusers-intro": "Ii suchi uu sadasya ke hae jon ki pahile {{PLURAL:$1|din|din}} me kuchh karin hae.",
        "activeusers-count": "$1 haali ke {{PLURAL:$1|badlao}} pichhle {{PLURAL:$3|din}} me",
        "activeusers-from": "Sadasya jon ki hian se suruu hoe hai ke dekhao:",
-       "activeusers-hidebots": "Bots ke lukao",
-       "activeusers-hidesysops": "Administrator log ke lukao",
        "activeusers-noresult": "koi sadasya ke pawa nai gais hai.",
        "listgrouprights": "Sadasya  ke group adhikar",
        "listgrouprights-summary": "Niche likha hai ek suchi hai groups ke jon ki ii wiki me defined hai, aapan  associated access rights ke saathe\n[[{{MediaWiki:Listgrouprights-helppage}}|additional information]] individual rights ke baare me sait hoi.",
        "htmlform-cloner-create": "Aur add karo",
        "htmlform-cloner-delete": "Remove karo",
        "htmlform-cloner-required": "Kamti se kamti ek value ke jaruri hae",
-       "sqlite-has-fts": "$1 with full-text search support",
-       "sqlite-no-fts": "$1 without full-text search support",
        "logentry-delete-delete": "$1 {{GENDER:$2|deleted}} panna $3",
        "logentry-delete-restore": "$1 {{GENDER:$2|restored}} panna $3",
        "logentry-delete-event": "$1 {{GENDER:$2|changed}} visibility of {{PLURAL:$5|a log event|$5 log events}} on $3: $4",
index 0869b55..59ff3f2 100644 (file)
        "userlogin-yourname-ph": "Ipasulod ang imo nga ngalan-taggamit",
        "yourpassword": "Kontra-senyas:",
        "yourpasswordagain": "Suliton ang kontra-senyas:",
-       "remembermypassword": "Dumdumon ang akon pagsulod sa sini nga brawser (para sa indi magsobra $1 {{PLURAL:$1|nga adlaw|nga mga adlaw}})",
        "yourdomainname": "Imo dominyo",
        "password-change-forbidden": "Indi ka mahimo nga makailis sang pasword sa sini nga wiki.",
        "externaldberror": "Mahimo nga may ara sang sala sa pagpamatood sang database ukon wala ka sa lugar nga magbag-o sang imo pang-guha nga akawnt.",
        "passwordreset-emailtext-user": "Ang manuggamit nga si $1 sa {{SITENAME}} nagpangabay sang pahanumdom sang mga detalye sang imo akawnt para sa {{SITENAME}} \n($4). Ang masunod nga {{PLURAL:$3|akawnt|mga akawnt}} sang manuggamit may kabahin sa sini nga adres sang e-mail:\n\n$2\n\n{{PLURAL:$3|Ang ini nga temporaryo nga pasword|Ang mga ini nga temporaryo nga pasword}} indi na magamit sa {{PLURAL:$5|isa ka adlaw|$5 ka adlaw}}.\nKinahanglan mo nga magsulod kag magpili sang bag-o nga pasword subong. Kon lain nga tawo ang nagbuhat sini\nnga pagpangabay, ukon nadumduman mo na ang imo pasword, kag indi mo na kinahanglan nga ini\npaga-ilisan, mahimo mo nga pabay-an ang ini nga pahanumdom kag magpadayon sa paggamit sang imo daan nga pasword.",
        "passwordreset-emailelement": "Gamit-pangalan: \n$1\n\nTemporaryo nga pasword: \n$2",
        "passwordreset-emailsentemail": "May pahanumdom nga e-mail nga ginpadala.",
-       "passwordreset-emailsent-capture": "May e-mail nga nagapahanumdum, nga ginapakita sa idalom.",
-       "passwordreset-emailerror-capture": "May e-mail nga nagapahanumdom nga ginbuhat, nga ginapakita sa idalom, apang ang pagpadala sa manuggamit indi madinalag-on: $1",
        "changeemail": "Ilisan ang E-mail adres",
        "changeemail-header": "Ilisan ang e-mail adres sang akawnt",
        "changeemail-no-info": "Kinahanglan nga nakasulod ka agod nga makadtoan ang ini nga panid sing derecho.",
        "undo-failure": "Ang pag-ilis indi na maliwat pa tungod sang nagakonplikto nga mga pang-tunga nga pag-ilis.",
        "undo-norev": "Ang pag-ilis indii na maliwat pa tungod kay ini wala naga-eksister ukon ginpanas na.",
        "undo-summary": "Liwaton ang pagbag-o sang $1 sa [[Special:Contributions/$2|$2]] ([[User talk:$2|$2]])",
-       "cantcreateaccounttitle": "Indi mabuhat ang akawnt",
        "cantcreateaccount-text": "Ang pagbuhat sang akawnt sang sini nga adres sang IP ('''$1''') ginpunggan ni [[User:$3|$3]].\n\nAng rason nga ginhatag ni $3 amo ang ''$2''",
        "viewpagelogs": "Tan-awon ang mga log para sa sini nga pahina",
        "nohistory": "Wala sang kasaysayan sang pag-ilis sang sini nga panid.",
index 7d15d79..64e958a 100644 (file)
        "passwordreset-emaildisabled": "Funkcija e-pošte je onemogućena na ovom wikiju.",
        "passwordreset-username": "Suradničko ime:",
        "passwordreset-domain": "Domena:",
-       "passwordreset-capture": "Pogledati krajnju poruku?",
-       "passwordreset-capture-help": "Ako označite ovu kućicu, e-poruka s privremenom lozinkom će biti prikazana i poslana korisniku.",
        "passwordreset-email": "E-mail adresa:",
        "passwordreset-emailtitle": "Pojedinosti o računu na {{SITENAME}}",
        "passwordreset-emailtext-ip": "Netko (vjerojatno Vi, s IP adrese $1) zatražio je podsjetnik za Vaše detalje računa\nza {{SITENAME}} ($4). Sljedeći {{PLURAL:$3|račun suradnika je|računi suradnika su}}\npovezani s ovom e-mail adresom:\n\n$2\n\n{{PLURAL:$3|Ova privremena zaporka|Ove privremene zaporke}} će isteći u {{PLURAL:$5|jedan dan|$5 dana}}.\nTrebate se prijaviti i odabrati novu zaporku. Ukoliko je netko drugi napravio ovaj\nzahtjev, ili ako ste se sjetili Vaše izvorne zaporke, a više je ne želite promijeniti, \nmožete zanemariti ovu poruku i nastavite koristiti staru zaporku.",
        "right-siteadmin": "Zaključavanje i otključavanje baze podataka",
        "right-override-export-depth": "Izvezi stranice uključujući i povezane stranice do dubine od 5",
        "right-sendemail": "Slanje e-pošte drugim suradnicima",
-       "right-passwordreset": "Vidi poruku e-pošte o ponovnom postavljanju lozinke",
        "grant-group-email": "Pošalji e-mail",
        "grant-blockusers": "Blokiraj i odblokiraj korisnike",
        "grant-createaccount": "Otvori račune",
        "booksources-search": "Traži",
        "booksources-text": "Ovdje je popis vanjskih poveznica na internetskim stranicama koje prodaju nove i rabljene knjige, ali mogu sadržavati i ostale podatke o knjigama koje tražite:",
        "booksources-invalid-isbn": "Čini se da dani ISBN nije valjan; provjerite greške kopirajući iz izvornika.",
+       "magiclink-tracking-isbn": "Stranice s čarobnim ISBN poveznicama",
+       "magiclink-tracking-isbn-desc": "Ova stranica rabi čarobne ISBN poveznice. Za njihovu migraciju vidi [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org].",
        "specialloguserlabel": "Suradnik:",
        "speciallogtitlelabel": "Cilj (naslov ili suradnik):",
        "log": "Evidencije",
        "pageinfo-robot-index": "Stranicu je moguće indeksirati",
        "pageinfo-robot-noindex": "Indeksiranje stranice onemogućeno",
        "pageinfo-watchers": "Broj pratitelja stranice",
+       "pageinfo-visiting-watchers": "Broj suradnika pratitelja ove stranice koji su posjetili nedavne promjene",
        "pageinfo-few-watchers": "Manje od $1 {{PLURAL:$1|suradnika koji prate ovu stranicu|suradnika koji prate ovu stranicu}}",
        "pageinfo-redirects-name": "Broj preusmjeravanja na ovu stranicu",
        "pageinfo-subpages-name": "Podstranice",
        "patrol-log-page": "Evidencija pregledavanja promjena",
        "patrol-log-header": "Ovo su evidencije ophođenih izmjena.",
        "log-show-hide-patrol": "$1 evidenciju patroliranja",
+       "confirm-markpatrolled-button": "U redu",
+       "confirm-markpatrolled-top": "Označiti izmjenu $3 stranice $2 pregledanom?",
        "deletedrevision": "izbrisana stara inačica $1",
        "filedeleteerror-short": "Pogrješka u brisanju datoteke: $1",
        "filedeleteerror-long": "Dogodila se pogrješka prilikom brisanja datoteke:\n\n$1",
        "confirm-watch-top": "Dodajte ovu stranicu na Vaš popis praćenih stranica",
        "confirm-unwatch-button": "U redu",
        "confirm-unwatch-top": "Ukloni ovu stranicu s popisa praćenja?",
+       "confirm-rollback-button": "U redu",
+       "confirm-rollback-top": "Ukloniti uređivanja na ovoj stranici?",
        "quotation-marks": "\"$1\"",
        "imgmultipageprev": "← prethodna slika",
        "imgmultipagenext": "sljedeća slika →",
index 70d984b..6bc52f5 100644 (file)
        "yourpasswordagain": "Passwort repetiere:",
        "createacct-yourpasswordagain": "Passwort bestätiche",
        "createacct-yourpasswordagain-ph": "Geb das Passwort erneit ren",
-       "remembermypassword": "Mit dem Browser dauerhaft oongemeldet bleiwe (maximal $1 {{PLURAL:$1|Tooch|Tooche}})",
        "userlogin-remembermypassword": "Oongemeldt bleiwe",
        "userlogin-signwithsecure": "Sichre Verbinnung verwenne",
        "yourdomainname": "Dein Domain:",
        "passwordreset-emailtext-user": "Benutzer $1 bei {{SITENAME}} hot en Zurücksetzung von dein Passwort bei {{SITENAME}} oongefordert ($4). {{PLURAL:$3|Das follichend Benutzerkonto ist|Die follichend Benutzerkonte sind}} mit der E-Mail-Adress verknüpft:\n\n$2\n\n{{PLURAL:$3|Das temporär Passwort looft|Die temporäre Passwörter loofe}} innerhalb von {{PLURAL:$5|em Tooch|$5 Tooche}} ab. Du sollst dich oonmelde und en neies Passwort vergewe. Falls jemand annres die Oonfroch getäticht hot orrer du dich wieder an den ursprüngliches Passwort erinnre kannst und das net ännre möchst, kannst du die Nachricht ignoriere und weiterhin dein altes Passwort benutze.",
        "passwordreset-emailelement": "Benutzernoome: \n$1\n\nTemporäres Passwort: \n$2",
        "passwordreset-emailsentemail": "En Passwortzurücksetzung-E-Mail woard versandt.",
-       "passwordreset-emailsent-capture": "En Passwortzurücksetzung-E-Mail woard versandt, die unne oongezeicht weard.",
-       "passwordreset-emailerror-capture": "Die unne oongezeichte Passwortzurücksetzungs-E-Mail woard generiert, awer der Versand an {{GENDER:$2|den Benutzer|die Benutzrin}} ist gescheitert: $1",
        "changeemail": "E-Mail-Adress ännre",
        "changeemail-header": "E-Mail-Adress ännre",
        "changeemail-no-info": "Du musst dich oonmelde, um uff die Seit direkt zuzugreife.",
        "undo-nochange": "Anscheinnd woard die Beoorbeitung schon rückgängich gemacht.",
        "undo-summary": "Ändrung $1 von [[Special:Contributions/$2|$2]] ([[User talk:$2|Diskussion]]) rückgängich gemacht.",
        "undo-summary-username-hidden": "Ännrung $1 von en versteckte Benutzer rückgängich gemacht.",
-       "cantcreateaccounttitle": "Das Benutzerkonto kann net erstellt sin",
        "cantcreateaccount-text": "Die Erstellung von en Benutzerkonto raus von der IP-Adresse '''($1)''' woor doorrich [[User:$3|$3]] gesperrt.\n\nGrund der Sperr: ''$2''",
        "cantcreateaccount-range-text": "Das Erstell von Benutzerkonte von IP-Adressen im Bereich <strong>$1</strong>, wo dein IP-Adress (<strong>$4</strong>) enthält, woor von [[User:$3|$3]] gesperrt.\n\nDer oongebne Grund von $3 laut: <em>$2</em>",
        "viewpagelogs": "Logbücher von der Seit oonzeiche",
        "activeusers-intro": "Das ist en List von Benutzer, wo innerhalleb {{PLURAL:$1|vom letzte Tooch|von der letzte $1 Tooch}} Aktivitäte uffwies.",
        "activeusers-count": "$1 {{PLURAL:$1|Aktion|Aktione}} in den {{PLURAL:$3|letzte 24 Stunne|vergangene $3 Tooche}}",
        "activeusers-from": "Zeich Benutzer ab:",
-       "activeusers-hidebots": "Bots ausblende",
-       "activeusers-hidesysops": "Administratore ausblende (verstecke)",
        "activeusers-noresult": "Kene Benutzer gefund.",
        "listgrouprights": "Benutzergrupperechte",
        "listgrouprights-summary": "Das ist ein List vom in dem Wiki definierte Benutzergruppe und ehre damit verbündne Rechte.\nZusätzliche Informatione üwer einzelne Rechte könne [[{{MediaWiki:Listgrouprights-helppage}}|hier]] gefund sin.",
        "htmlform-cloner-create": "Weitre dozu tun",
        "htmlform-cloner-delete": "Entferne",
        "htmlform-cloner-required": "Es ist minschtens en Weart erforderlich.",
-       "sqlite-has-fts": "Version $1 mit Unnerstützung für die Volltextsuch",
-       "sqlite-no-fts": "Version $1 ohne Unnerstützung für die Volltextsuch",
        "logentry-delete-delete": "$1 {{GENDER:$2|löschte}} Seit $3",
        "logentry-delete-restore": "$1 {{GENDER:$2|stellte}} Seit $3 wieder her",
        "logentry-delete-event": "$1 {{GENDER:$2|ännerte}}  die Sichtbarkeit {{PLURAL:$5|von ein Logbucheintrooch|von $5 Logbucheinträch}} uff $3: $4",
        "feedback-bugornote": "Soweit du ganz detalhiert en technisches Problem beschreiben möchst, meld bittschön [$1 en Fehler].\nAnnerfalls kannst du ooch das do unne stehende ganz enfache Formular benutze. Dein Kommentar weard, zusammer mit deinem Benutzernoome und der Version von der von dir verwenndt Webbrowsers sowie Betriebssystems, uff der Seit \"[$3 $2]\" hinzugefücht.",
        "feedback-cancel": "Abbreche",
        "feedback-close": "Erledicht (fertich)",
-       "feedback-error-title": "Fehler",
        "feedback-error1": "Fehler: Unbekanntes Ergebnis von der API",
        "feedback-error2": "Fehler: Beoorbeitung gescheitert",
        "feedback-error3": "Fehler: Ken Antwort von der API",
index 007eada..558b166 100644 (file)
        "yourpasswordagain": "Hesło znowa zapodać:",
        "createacct-yourpasswordagain": "Hesło wobkrućić",
        "createacct-yourpasswordagain-ph": "Zapodaj hesło hišće raz",
-       "remembermypassword": "Na tutym ličaku přizjewjeny wostać (za maksimalnje $1 {{PLURAL:$1|dźeń|dnjej|dny|dnjow}})",
        "userlogin-remembermypassword": "Přizjewjeny wostać",
        "userlogin-signwithsecure": "Wěsty zwisk wužiwać",
        "yourdomainname": "Twoja domejna:",
        "activeusers-intro": "To je lisćina wužiwarjow, kotřiž běchu aktiwni za {{PLURAL:$1|posledni dźeń|poslednjej $1 dnjej|poslednje $1 dny|poslednich $1 dnjow}}:",
        "activeusers-count": "$1 {{PLURAL:$1|akcija|akciji|akcije|akcijow}} w {{PLURAL:$3|zańdźenej dnju|zańdźenymaj $3 dnjomaj|zańdźenych $3 dnjach}}",
        "activeusers-from": "Wužiwarjow zwobraznić, započinajo z:",
-       "activeusers-hidebots": "Boćiki schować",
-       "activeusers-hidesysops": "Administratorow schować",
        "activeusers-noresult": "Žani wužiwarjo namakani.",
        "listgrouprights": "Prawa wužiwarskeje skupiny",
        "listgrouprights-summary": "Slěduje lisćina wužiwarskich skupinow na tutej wikiju z jich wotpowědnymi přistupnymi prawami. Tu móžeš [[{{MediaWiki:Listgrouprights-helppage}}|dalše informacije]] wo jednotliwych prawach namakać.",
        "htmlform-cloner-create": "Wjace přidać",
        "htmlform-cloner-delete": "Wotstronić",
        "htmlform-cloner-required": "Znjamjeńša jedna hódnota je trěbna.",
-       "sqlite-has-fts": "$1 połnotekstowe pytanje podpěruje.",
-       "sqlite-no-fts": "$1 połnotekstowe pytanje njepodpěruje",
        "logentry-delete-delete": "$1 je stronu $3 {{GENDER:$1|zhašał|zhašała}}",
        "logentry-delete-restore": "$1 je stronu $3 {{GENDER:$1wobnowił|wobnowiła}}",
        "logentry-delete-event": "$1 je widźomnosć {{PLURAL:$5|protokoloweho zapiska|$5 protokoloweju zapiskow|$5 protokolowych zapiskow}} na $3 {{GENDER:$2|změnił|změniła}}: $4",
        "feedback-close": "Dokónčeny",
        "feedback-external-bug-report-button": "Techniski nadawk zapodać",
        "feedback-dialog-title": "Komentar pósłać",
-       "feedback-error-title": "Zmylk",
        "feedback-error1": "Zmylk: Njepřipóznaty wuslědk wot API",
        "feedback-error2": "Zmylk: Wobdźěłanje je so njeporadźiło",
        "feedback-error3": "Zmylk: Žana wotmołwa wot API",
index 17df2d7..edb8a7c 100644 (file)
        "yourpasswordagain": "Mete mopas ou an ankò :",
        "createacct-yourpasswordagain": "Konfime modpas la",
        "createacct-yourpasswordagain-ph": "Rantre modpas la ankò",
-       "remembermypassword": "Sonje mopas mwen an nan òdinatè mwen an (pou yon maximum de $1 {{PLURAL:$1|jou|jou}})",
        "userlogin-remembermypassword": "Pa dekonekte m",
        "userlogin-signwithsecure": "Sèvi ak yon koneksyon sekirize",
        "yourdomainname": "Domèn ou an",
index 0b91499..ce3aaba 100644 (file)
        "passwordreset-nocaller": "A hívó megadása kötelező",
        "passwordreset-nosuchcaller": "A hívó nem létezik: $1",
        "passwordreset-ignored": "A jelszó-visszaállítás nem lett kezelve. Talán nincs konfigurálva szolgáltató?",
-       "passwordreset-invalideamil": "Érvénytelen e-mail cím",
+       "passwordreset-invalidemail": "Érvénytelen e-mail cím",
        "passwordreset-nodata": "Se felhasználónevet, sem e-mail-címet nem adtál meg",
        "changeemail": "E-mail cím megváltoztatása vagy eltávolítása",
        "changeemail-header": "Töltsd ki ezt az űrlapot az e-mail-címed megváltoztatásához. Ha nem szeretnél semmilyen e-mail-címet kapcsolni a fiókodhoz, hagyd üresen az új e-mail-cím mezőjét az űrlap elküldésekor.",
index b272913..ea3fd1e 100644 (file)
        "userlogin-signwithsecure": "Օգտագործել անվտանգ միացում",
        "cannotloginnow-title": "Այժմ դուրս գալ անհնար է",
        "cannotloginnow-text": "$1 օգտագործելիս դուրս գալն անհնար է:",
+       "cannotcreateaccount-title": "Անհնար է ստեղծել հաշիվներ",
+       "cannotcreateaccount-text": "Հաշիվների ուղղակի ստեղծումը ներառված է այս վիքիյում",
        "yourdomainname": "Ձեր դոմենը՝",
        "password-change-forbidden": "Այս վիքիում չեք կարող փոխել գաղտնաբառ։",
        "externaldberror": "Տեղի է ունեցել վավերացման արտաքին տվյալների բազայի սխալ, կամ դուք չունեք բավարար իրավունքներ ձեր արտաքին հաշվի փոփոխման համար։",
        "login": "Մտնել համակարգ",
+       "login-security": "Հաստատեք Ձեր ինքնությունը",
        "nav-login-createaccount": "Մտնել / Գրանցվել",
        "userlogin": "Մտնել / Գրանցվել",
        "userloginnocreate": "Մտնել",
        "userlogin-resetlink": "Մոռացե՞լ եք Ձեր հաշվի տվյալները։",
        "userlogin-resetpassword-link": "Մոռացե՞լ եք գաղտնաբառը",
        "userlogin-helplink2": "Մուտք գործելու օգնություն",
+       "userlogin-loggedin": "Դուք արդեն մտել է որպես {{GENDER:$1|$1}}.\nՕգտագործեք ստորև բերված ձևը մուտք գործելու համար այլ հաշից",
+       "userlogin-reauth": "Դուք պետք է կրկին համակարգ մուտք գործեք  հաստատելու որ դուք դուք եք {{GENDER:$1|$1}}.",
        "userlogin-createanother": "Ստեղծել այլ հաշիվ",
        "createacct-emailrequired": "Էլ–փոստի հասցե",
        "createacct-emailoptional": "Էլ–փոստի հասցե (ոչ պարտադիր)",
        "createacct-reason-ph": "Ինչո՞ւ եք փորձում ստեղծել մեկ այլ հաշիվ",
        "createacct-submit": "Ստեղծել ձեր հաշիվը",
        "createacct-another-submit": "Ստեղծել հաշիվ",
+       "createacct-continue-submit": "Շարունակել ստեղծել հաշիվ",
+       "createacct-another-continue-submit": "Շարունակել ստեղծել հաշիվ",
        "createacct-benefit-heading": "{{SITENAME}}՝ ստեղծվում է ձեր պես մարդկանց կողմից։",
        "createacct-benefit-body1": "{{PLURAL:$1|խմբագրում}}",
        "createacct-benefit-body2": "{{PLURAL:$1|էջ}}",
        "createacct-benefit-body3": "վերջերս ակտիվ {{PLURAL:$1|մասնակից}}",
        "badretype": "Ձեր մուտքագրած գաղտնաբառերը չեն համընկնում։",
+       "usernameinprogress": "Տվյալ մասնակցի համար հաշվի ստեղծումը  արդեն իրականացվում է:\nԽնդրում ենք սպասել:",
        "userexists": "Այս մասնակցի անունը արդեն զբաղված է։ Խնդրում ենք ընտրել մեկ այլ անուն։",
        "loginerror": "Մուտքի սխալ",
        "createacct-error": "Հաշվի ստեղծման սխալ",
        "defaultmessagetext": "Լռելյան տեքստը",
        "editwarning-warning": "Այս էջը լքելով դուք կարող եք կորցնել ձեր կատարած փոփոխությունները։\nԵթե դուք գրանցված եք համակարգում, կարող եք անջատել այս նախազգուշացումը ձեր նախընրությունների «{{int:prefs-editing}}» բաժնում։",
        "content-model-wikitext": "վիքիտեքստ",
+       "content-model-text": "պարզ տեքստ",
        "content-model-javascript": "ՋավաՍկրիպտ",
        "content-model-css": "ՍիԷսԷս",
+       "content-json-empty-object": "Դատարկ օբյեկտ",
        "duplicate-args-category": "Կաղապարներում կրկնվող արգումենտներով էջեր",
        "undo-success": "Խմբագրումը կարող է հետ շրջվել։ Ստուգեք տարբերակների համեմատությունը ստորև, որպեսզի համոզվեք, որ դա է ձեզ հետաքրքրող փոփոխությունը և մատնահարեք «Հիշել էջը»՝ գործողությունն ավարտելու համար։",
        "undo-failure": "Խմբագրումը չի կարող հետ շրջվել միջանկյալ խմբագրումների ընդհարման պատճառով։",
        "prefs-timeoffset": "Ժամային տարբերություն",
        "prefs-advancedediting": "Ընդլայնված ընրանքներ",
        "prefs-editor": "Խմբագիր",
+       "prefs-preview": "Նախադիտել",
        "prefs-advancedrc": "Ընդլայնված ընրանքներ",
        "prefs-advancedrendering": "Ընդլայնված ընրանքներ",
        "prefs-advancedsearchoptions": "Ընդլայնված ընրանքներ",
        "right-writeapi": "API գրի օգտագործումը",
        "right-delete": "Էջերի ջնջում",
        "right-rollback": "Արագ հետ գլորել տվյալ էջը վերջին անգամ խմբագրած մասնակցի խմբագրումները",
+       "grant-group-email": "Ուղարկել էլ. նամակ",
        "grant-createaccount": "Ստեղծել հաշիվներ",
        "grant-createeditmovepage": "Ստեղծել․ խմբագրել և տեղափոխել էջեր",
+       "grant-basic": "Հիմնական իրավունքներ",
        "newuserlogpage": "Մասնակիցների գրանցման տեղեկամատյան",
        "newuserlogpagetext": "Սա նոր մասնակիցների գրանցման տեղեկամատյանն է.",
        "rightslog": "Մասնակցի իրավունքների տեղեկամատյան",
        "tags-activate-submit": "Ակտիվացնել",
        "tags-deactivate-reason": "Պատճառ՝",
        "tags-deactivate-submit": "Ապաակտիվացնել",
+       "tags-update-blocked": "Դուք չեք կարող ավելացնել կամ հեռացնել թեգեր, քանի դեռ {{GENDER:$1|դուք}} արգելափակված եք",
        "comparepages": "Համեմատել էջեր",
        "compare-page1": "Էջ 1",
        "compare-page2": "Էջ 2",
index ad6acb0..8094f6d 100644 (file)
        "passwordreset-emaildisabled": "Le functionalitate de e-mail ha essite disactivate in iste wiki.",
        "passwordreset-username": "Nomine de usator:",
        "passwordreset-domain": "Dominio:",
-       "passwordreset-capture": "Vider le e-mail resultante?",
-       "passwordreset-capture-help": "Si tu marca iste quadrato, le e-mail (con le contrasigno temporari) non solmente essera inviate al usator, ma anque monstrate a te.",
        "passwordreset-email": "Adresse de e-mail:",
        "passwordreset-emailtitle": "Detalios del conto in {{SITENAME}}",
        "passwordreset-emailtext-ip": "Un persona (probabilemente tu, ab le adresse IP $1) requestava le reinitialisation de tu\ncontrasigno de {{SITENAME}} ($4). Le {{PLURAL:$3|conto|contos}} de usator sequente es\nassociate con iste adresse de e-mail:\n\n$2\n\nIste {{PLURAL:$3|contrasigno|contrasignos}} temporari expirara post {{PLURAL:$5|un die|$5 dies}}.\nTu deberea ora aperir session e eliger un nove contrasigno. Si un altere persona faceva iste\nrequesta, o si tu te ha rememorate tu contrasigno original e non plus\nvole cambiar lo, tu pote ignorar iste message e continuar a usar le ancian\ncontrasigno.",
        "passwordreset-emailelement": "Nomine de usator: \n$1\n\nContrasigno temporari: \n$2",
        "passwordreset-emailsentemail": "Si iste adresse es associate a tu conto, alora un e-mail pro reinitialisar le contrasigno essera inviate.",
        "passwordreset-emailsentusername": "Si il ha un adresse de e-mail associate a iste conto, alora un e-mail pro reinitialisar le contrasigno essera inviate.",
-       "passwordreset-emailsent-capture2": "Le {{PLURAL:$1|message|messages}} de e-mail pro reinitialisation de contrasigno ha essite inviate. Le {{PLURAL:$1|nomine de usator e contrasigno|lista de nomines de usator e contrasignos}} es monstrate hic.",
-       "passwordreset-emailerror-capture2": "Le invio de e-mail al {{GENDER:$2|usator}} ha fallite: $1 Le {{PLURAL:$3|nomine de usator e contrasigno|lista de nomines de usator e contrasignos}} es monstrate hic.",
        "passwordreset-nocaller": "Un appellator debe esser fornite",
        "passwordreset-nosuchcaller": "Appellator non existe: $1",
        "passwordreset-ignored": "Le reinitialisation del contrasigno non ha essite realisate. Es possibile que nulle fornitor ha essite configurate?",
-       "passwordreset-invalideamil": "Adresse de e-mail invalide",
+       "passwordreset-invalidemail": "Adresse de e-mail invalide",
        "passwordreset-nodata": "Ni un nomine de usator ni un adresse de e-mail ha essite fornite",
        "changeemail": "Cambiar o remover adresse de e-mail",
        "changeemail-header": "Completa iste formulario pro cambiar tu adresse de e-mail. Si tu vole remover le association de omne adresse de e-mail ab tu conto, lassa le campo pro le nove adresse de e-mail vacue quando tu submitte le formulario.",
        "right-siteadmin": "Blocar e disblocar le base de datos",
        "right-override-export-depth": "Exportar paginas includente paginas ligate usque a un profunditate de 5",
        "right-sendemail": "Inviar e-mail a altere usatores",
-       "right-passwordreset": "Vider le e-mails pro reinitialisar le contrasigno",
        "right-managechangetags": "Crear e (de)activar [[Special:Tags|etiquettas]]",
        "right-applychangetags": "Applicar [[Special:Tags|etiquettas]] al proprie modificationes",
        "right-changetags": "Adder e remover qualcunque [[Special:Tags|etiquettas]] sur individual versiones e entratas de registro",
        "apisandbox-continue": "Continuar",
        "apisandbox-continue-clear": "Rader",
        "apisandbox-continue-help": "{{int:apisandbox-continue}} [https://www.mediawiki.org/wiki/API:Query#Continuing_queries continuara] le ultime requesta; {{int:apisandbox-continue-clear}} radera le parametros relative al continuation.",
+       "apisandbox-param-limit": "Scribe <kbd>max</kbd> pro usar le limite maxime.",
        "booksources": "Fontes de libros",
        "booksources-search-legend": "Cercar fontes de libros",
        "booksources-search": "Cercar",
        "activeusers-count": "$1 {{PLURAL:$1|action|actiones}} in le ultime {{PLURAL:$3|die|$3 dies}}",
        "activeusers-from": "Presentar usatores a partir de:",
        "activeusers-groups": "Monstrar usatores pertinente a gruppos:",
+       "activeusers-excludegroups": "Excluder usatores pertinente a gruppos:",
        "activeusers-noresult": "Nulle usator trovate.",
        "activeusers-submit": "Monstrar usatores active",
        "listgrouprights": "Derectos del gruppos de usatores",
        "movedarticleprotection": "displaciava le configurationes de protection ab \"[[$2]]\" verso \"[[$1]]\"",
        "protectedarticle-comment": "{{GENDER:$2|Protegeva}} \"[[$1]]\"",
        "modifiedarticleprotection-comment": "{{GENDER:$2|Cambiar nivello de protection}} pro \"[[$1]]\"",
+       "unprotectedarticle-comment": "{{GENDER:$2|Removeva le protection}} de \"[[$1]]\"",
        "protect-title": "Cambiar nivello de protection de \"$1\"",
        "protect-title-notallowed": "Vider nivello de protection de \"$1\"",
        "prot_1movedto2": "displaciava [[$1]] verso [[$2]]",
        "movelogpagetext": "Infra es un lista de paginas renominate.",
        "movesubpage": "{{PLURAL:$1|Subpagina|Subpaginas}}",
        "movesubpagetext": "Iste pagina ha $1 {{PLURAL:$1|subpagina, le qual|subpaginas, le quales}} se monstra infra.",
+       "movesubpagetalktext": "Le pagina de discussion correspondente ha $1 {{PLURAL:$1|subpagina|subpaginas}} monstrate infra.",
        "movenosubpage": "Iste pagina non ha subpaginas.",
        "movereason": "Motivo:",
        "revertmove": "reverter",
        "pageinfo-category-pages": "Numero de paginas",
        "pageinfo-category-subcats": "Numero de subcategorias",
        "pageinfo-category-files": "Numero de files",
+       "pageinfo-user-id": "ID de usator",
        "markaspatrolleddiff": "Marcar como patruliate",
        "markaspatrolledtext": "Marcar iste pagina como patruliate",
        "markaspatrolledtext-file": "Marcar iste version del file como patruliate",
        "patrol-log-header": "Isto es un registro de versiones patruliate.",
        "log-show-hide-patrol": "$1 le registro de versiones patruliate",
        "log-show-hide-tag": "$1 registro de etiquettas",
+       "confirm-markpatrolled-button": "OK",
+       "confirm-markpatrolled-top": "Marcar le version $3 de $2 como patruliate?",
        "deletedrevision": "Deleva le ancian version $1",
        "filedeleteerror-short": "Error durante le deletion del file: $1",
        "filedeleteerror-long": "Se incontrava errores durante le deletion del file:\n\n$1",
        "tags-deactivate": "disactivar",
        "tags-hitcount": "$1 {{PLURAL:$1|modification|modificationes}}",
        "tags-manage-no-permission": "Tu non ha le permission de gerer le etiquettas de modification.",
-       "tags-manage-blocked": "Tu non pote gerer etiquettas de cambiamento durante que tu es blocate.",
+       "tags-manage-blocked": "Tu non pote gerer etiquettas de cambiamento durante que {{GENDER:$1|tu}} es blocate.",
        "tags-create-heading": "Crear un nove etiquetta",
        "tags-create-explanation": "Per configuration predefinite, le etiquettas novemente create essera disponibile pro le uso per usatores e robots.",
        "tags-create-tag-name": "Nomine del etiquetta:",
        "tags-deactivate-not-allowed": "Non es possibile disactivar le etiquetta \"$1\".",
        "tags-deactivate-submit": "Disactivar",
        "tags-apply-no-permission": "Tu non ha le permission de adjunger etiquettas de cambiamento a tu cambiamentos.",
-       "tags-apply-blocked": "Tu non pote applicar etiquettas de cambiamento con tu cambiamentos durante que tu es blocate.",
+       "tags-apply-blocked": "Tu non pote applicar etiquettas de cambiamento con tu cambiamentos durante que {{GENDER:$1|tu}} es blocate.",
        "tags-apply-not-allowed-one": "Non es permittite applicar le etiquetta \"$1\" manualmente.",
        "tags-apply-not-allowed-multi": "Le sequente {{PLURAL:$2|etiquetta|etiquettas}} non es autorisate a esser manualmente applicate: $1",
        "tags-update-no-permission": "Tu non ha le permission de adder o remover etiquettas de cambiamento sur individual versiones o entratas de registro.",
-       "tags-update-blocked": "Tu non pote adder o remover etiquettas de cambiamento durante que tu es blocate.",
+       "tags-update-blocked": "Tu non pote adder o remover etiquettas de cambiamento durante que {{GENDER:$1|tu}} es blocate.",
        "tags-update-add-not-allowed-one": "Non es permittite adjunger le etiquetta \"$1\" manualmente.",
        "tags-update-add-not-allowed-multi": "Le sequente {{PLURAL:$2|etiquetta|etiquettas}} non es autorisate a esser manualmente adjungite: $1",
        "tags-update-remove-not-allowed-one": "Non es permittite remover le etiquetta \"$1\".",
        "authmanager-authn-autocreate-failed": "Le creation automatic de un conto local ha fallite: $1",
        "authmanager-change-not-supported": "Le credentiales fornite non pote esser cambiate perque nihil los usarea.",
        "authmanager-create-disabled": "Le creation de contos es disactivate.",
-       "authmanager-create-from-login": "Pro crear tu conto, completa le campos hic infra.",
+       "authmanager-create-from-login": "Pro crear tu conto, completa le campos.",
        "authmanager-create-not-in-progress": "Nulle creation de conto es in curso, o le datos del session ha essite perdite. Per favor, recomencia ab initio.",
        "authmanager-create-no-primary": "Le credentiales fornite non pote esser usate pro crear un conto.",
        "authmanager-link-no-primary": "Le credentiales fornite non pote esser usate pro ligar un conto.",
        "usercssispublic": "Nota ben: Subpaginas CSS non debe continer datos confidential perque altere usatores pote vider los.",
        "restrictionsfield-badip": "Adresse o intervallo IP non valide: $1",
        "restrictionsfield-label": "Intervallos IP permittite:",
-       "restrictionsfield-help": "Un adresse IP o intervallo CIDR per linea. Pro activar toto, usa<br><code>0.0.0.0/0</code><br><code>::/0</code>"
+       "restrictionsfield-help": "Un adresse IP o intervallo CIDR per linea. Pro activar toto, usa<br><code>0.0.0.0/0</code><br><code>::/0</code>",
+       "edit-error-short": "Error: $1",
+       "edit-error-long": "Errores:\n\n$1"
 }
index 69ad3b6..12bd6a7 100644 (file)
@@ -49,7 +49,8 @@
                        "Mbrt",
                        "Beeyan",
                        "Bonaditya",
-                       "Irus"
+                       "Irus",
+                       "Presidenvolksraad"
                ]
        },
        "tog-underline": "Garis bawahi pranala:",
        "createacct-yourpasswordagain-ph": "Masukkan lagi kata sandi",
        "userlogin-remembermypassword": "Biarkan saya tetap masuk",
        "userlogin-signwithsecure": "Gunakan server aman",
-       "cannotlogin-title": "Tidak dapat masuk",
-       "cannotlogin-text": "Login ini tidak mungkin.",
+       "cannotlogin-title": "Tidak dapat log masuk",
+       "cannotlogin-text": "Log masuk tidak mungkin.",
        "cannotloginnow-title": "Tidak dapat masuk log saat ini",
        "cannotloginnow-text": "Masuk log tidak memungkinkan ketika menggunakan $1.",
        "cannotcreateaccount-title": "Akun tak dapat dibuat",
        "passwordreset-emaildisabled": "Fitur surel telah dinonaktifkan pada wiki ini.",
        "passwordreset-username": "Nama pengguna:",
        "passwordreset-domain": "Domain:",
-       "passwordreset-capture": "Lihat surel yang dihasilkan?",
-       "passwordreset-capture-help": "Jika Anda mencentang kotak ini, surel (dengan kata sandi sementara) akan ditampilkan ke Anda dan juga dikirim ke pengguna.",
        "passwordreset-email": "Alamat surel:",
        "passwordreset-emailtitle": "Detail akun di {{SITENAME}}",
        "passwordreset-emailtext-ip": "Seseorang (mungkin Anda, dari alamat IP $1) meminta pengingat\ndetail akun untuk {{SITENAME}} ($4). {{PLURAL:$3|Akun|Akun-akun}} berikut\nterkait dengan alamat surel ini:\n\n$2\n\n{{PLURAL:$3|Sandi sementara}} berikut akan kedaluwarsa dalam {{PLURAL:$5|$5 hari}}.\nAnda harus masuk dan memilih sandi baru sekarang. Jika orang lain membuat\npermintaan ini atau jika Anda ingat sandi asli dan tidak lagi\ningin mengubahnya, Anda dapat mengabaikan pesan ini dan terus menggunakan sandi lama.",
        "passwordreset-emailelement": "Nama pengguna: \n$1\n\nSandi sementara: \n$2",
        "passwordreset-emailsentemail": "Jika alamat surel ini berkaitan dengan akun Anda, maka surel untuk menyetel ulang kata sandi akan dikirim.",
        "passwordreset-emailsentusername": "Jika ada alamat surel yang berkaitan dengan nama pengguna ini, maka surel untuk menyetel ulang kata sandi akan dikirim.",
-       "passwordreset-emailsent-capture2": "Pemulihan kata sandi {{PLURAL:$1|surel|surel}} telah dikirim. {{PLURAL:$1|Nama pengguna dan kata sandi|Daftar nama pengguna dan kata sandi}} ditampilkan di bawah.",
-       "passwordreset-emailerror-capture2": "Pengiriman surel kepada {{GENDER:$2|pengguna}} gagal: $1 {{PLURAL:$3|Nama pengguna dan kata sandi|Daftar nama pengguna dan kata sandi}} ditampilkan di bawah.",
        "passwordreset-nocaller": "Pemanggil harus diberikan",
        "passwordreset-nosuchcaller": "Pemanggil tidak ada: $1",
        "passwordreset-ignored": "Pemulihan kata sandi tidak tertangani. Mungkin penyedia tidak diatur?",
-       "passwordreset-invalideamil": "Alamat surel tidak sah",
+       "passwordreset-invalidemail": "Alamat surel tidak sah",
        "passwordreset-nodata": "Nama pengguna ataupun alamat surel tidak diberikan",
        "changeemail": "Ubah atau hapus alamat surel",
        "changeemail-header": "Lengkapi formulir ini untuk mengubah alamat surel Anda. Jika Anda ingin menghapus seluruh alamat surel yang berkaitan dengan akun Anda, kosongkan alamat surel ketika mengirim formulir.",
        "savearticle": "Simpan halaman",
        "savechanges": "Simpan perubahan",
        "publishpage": "Terbitkan halaman",
+       "publishchanges": "Terbitkan perubahan",
        "preview": "Pratayang",
        "showpreview": "Lihat pratayang",
        "showdiff": "Lihat perubahan",
        "right-siteadmin": "Mengunci dan membuka kunci basis data",
        "right-override-export-depth": "Ekspor halaman termasuk halaman-halaman terkait hingga kedalaman 5",
        "right-sendemail": "Mengirim surel ke pengguna lain",
-       "right-passwordreset": "Lihat surel pengaturulangan kata sandi",
        "right-managechangetags": "Buat dan matikan [[Special:Tags|tag]]",
        "right-applychangetags": "Terapkan [[Special:Tags|tags]] bersamaan dengan perubahan pengguna",
        "right-changetags": "Tambah dan hapus [[Special:Tags|tag]] arbitrari pada revisi masing-masing dan entri log",
        "upload-http-error": "Kesalahan HTTP terjadi: $1",
        "upload-copy-upload-invalid-domain": "Unggahan salinan tidak tersedia dari domain ini.",
        "upload-foreign-cant-upload": "Wiki ini tidak diatur untuk mengunggah berkas ke gudang penyimpangan asing.",
-       "upload-dialog-disabled": "Upload file menggunakan dialog ini dinonaktifkan pada wiki ini.",
+       "upload-dialog-disabled": "Unggah berkas menggunakan dialog ini dinonaktifkan pada wiki ini.",
        "upload-dialog-title": "Unggah berkas",
        "upload-dialog-button-cancel": "Batalkan",
+       "upload-dialog-button-back": "Kembali",
        "upload-dialog-button-done": "Selesai",
        "upload-dialog-button-save": "Simpan",
        "upload-dialog-button-upload": "Unggah",
        "apisandbox-results-fixtoken-fail": "Gagal mendapatkan token \"$1\".",
        "apisandbox-alert-page": "Kolom dalam halaman ini tidak valid.",
        "apisandbox-alert-field": "Nilai dalam kolom ini tidak valid.",
+       "apisandbox-continue": "Lanjutkan",
+       "apisandbox-continue-clear": "Kosongkan",
        "booksources": "Sumber buku",
        "booksources-search-legend": "Cari di sumber buku",
        "booksources-isbn": "ISBN:",
index 53a910d..62abac0 100644 (file)
        "yourname": "Nómine de usator:",
        "yourpassword": "Parol-clave:",
        "yourpasswordagain": "Parol-clave denov:",
-       "remembermypassword": "Memorar mi parol-clave in ti navigator (por un maxim de $1 {{PLURAL:$1|die|dies}})",
        "yourdomainname": "Tui dominia:",
        "login": "Aperter session",
        "nav-login-createaccount": "Crear un conto o intrar",
index f379ef2..81b98c5 100644 (file)
        "yourname": "Áhà ọ'bànifé:",
        "yourpassword": "Okwúngáfè:",
        "yourpasswordagain": "Detuari mkpurụ okwu ejị a gafẹ:",
-       "remembermypassword": "Chetá edemede éjim a banyé na orunótuá (nke ukwu nke rürü {{PLURAL:$1|chi|chi}} $1)",
        "yourdomainname": "Obí gi:",
        "login": "Banyé",
        "nav-login-createaccount": "Banyé / ké buwá",
        "content-model-wikitext": "wikitext",
        "parser-template-loop-warning": "Etemete àtụ dị: [[$1]]",
        "undo-summary": "Emekwàlà orübà $1 shí [[Special:Contributions/$2|$2]] ([[User talk:$2|talk]])",
-       "cantcreateaccounttitle": "Enwéghịkị ke buwá",
        "viewpagelogs": "Zi ndetu ncheta màkà ihü a",
        "nohistory": "Ákíkó mbu màkà orü àdíghị màkà ihüá.",
        "currentrev": "Kuwaria nke ubüwạ",
        "listusers-submit": "Zi",
        "listusers-noresult": "Ọ hügị ọ'bànifé.",
        "listusers-blocked": "(kwàchịrị)",
-       "activeusers-hidebots": "Zonari bot",
-       "activeusers-hidesysops": "Zonari ndi íshí",
        "activeusers-noresult": "Ọ hügị ọ'bànifé.",
        "listgrouprights-group": "Ọtú",
        "listgrouprights-rights": "Nkwènyé",
index 46a2e24..904956e 100644 (file)
        "botpasswords-label-resetpassword": "Isaad manen ti kontrasenias",
        "botpasswords-label-grants": "Dagiti sagut a maipakat:",
        "botpasswords-help-grants": "Ti tunggal maysa a sagut ket mangited iti panagserrek kadagiti nailista a karbengan nga addan iti pakabilangan ti agar-aramat. Kitaen ti [[Special:ListGrants|tabla dagiti sagut]] para iti adu pay a pakaammo.",
-       "botpasswords-label-restrictions": "Dagiti panangigawid iti panagusar:",
        "botpasswords-label-grants-column": "Naisaguten",
        "botpasswords-bad-appid": "Saan nga umisu ti nagan ti bot iti \"$1\".",
        "botpasswords-insert-failed": "Napaay iti pananginayon ti nagan ti bot iti \"$1\". Nainayon kadi idin?",
        "passwordreset-nocaller": "Nasken a maited ti maysa nga agtawtawag",
        "passwordreset-nosuchcaller": "Awan ti agtawtawag: $1",
        "passwordreset-ignored": "Saan a natengngel ti panangisaad manen ti kontrasenias. Mabalin a saan a nakompigura ti mangited?",
-       "passwordreset-invalideamil": "Imbalido nga adres ti esurat",
+       "passwordreset-invalidemail": "Imbalido nga adres ti esurat",
        "passwordreset-nodata": "Saan a naited ti nagan ti agar-aramat wenno maysa nga adres ti esurat",
        "changeemail": "Sukatan wenno ikkaten ti adres ti esurat",
        "changeemail-header": "Kompletuen daytoy a porma tapno masukatan ti adres ti esuratmo. No kayatmo a maikkat ti pannakainaig iti ania man nga adres ti esurat manipud iti pakabilangam, ibati a blanko ti baro nga adres ti esurat no ited ti porma.",
        "activeusers-intro": "Daytoy ti listaan dagiti agar-aramat nga adda inar-aramid iti kaunegan dagiti napalabas a $1 {{PLURAL:$1|nga aldaw|nga al-aldaw}}.",
        "activeusers-count": "$1 a {{PLURAL:$1|tignay|tigtignay}} iti napalabas {{PLURAL:$3|nga aldaw|a $3 nga al-aldaw}}",
        "activeusers-from": "Iparang dagiti agar-aramat a mangrugi iti:",
-       "activeusers-hidebots": "Ilemmeng dagiti bot",
-       "activeusers-hidesysops": "Ilemmeng dagiti administrador",
        "activeusers-noresult": "Awan ti nasarakan nga agar-aramat.",
        "activeusers-submit": "Ipakita dagiti aktibo nga agar-aramat",
        "listgrouprights": "Dagiti karbengan ti grupo ti agar-aramat",
        "feedback-bugornote": "No sisasagakan nga agibaga ti teknikal a pakirut a naisalaysay pangngaasi nga [$1 ireporta ti parikut].\nNupay kasta, mausarmo ti nalaka a porma dita baba. Ti komentario nga itedmo ket mainayon iti panid \"[$3 $2], a mairaman ti naganmo nga agar-aramat ken no ania ti pagbasabasa nga us-sarem.",
        "feedback-cancel": "Ukasen",
        "feedback-close": "Nalpasen",
-       "feedback-error-title": "Biddut",
        "feedback-error1": "Biddut: Saan a malasin dagiti nagbanagan manipud ti API",
        "feedback-error2": "Biddut: Napaay ti panagurnos",
        "feedback-error3": "Biddut: Awan ti sungbat manipud ti API",
index d735991..4184353 100644 (file)
        "yourpasswordagain": "Юхаязде къайладIоагIа:",
        "createacct-yourpasswordagain": "Бакъйе пароль",
        "createacct-yourpasswordagain-ph": "Кхы цхьаькхаза Iочуязъе пароль",
-       "remembermypassword": "ДагайоагIаш хилийта са дагара йоазув укх компьютер тӀа (цхьан $1 {{PLURAL:$1|дийнахь}})",
        "userlogin-remembermypassword": "Система чу виса",
        "yourdomainname": "Хьа нана-цIа:",
        "login": "Чувала/яла",
index 02312cc..a6344cc 100644 (file)
        "activeusers-intro": "Þetta er listi yfir notendur sem hafa verið virkir {{PLURAL:$1|síðasta|síðustu}} $1 {{PLURAL:$1|dag|daga}}.",
        "activeusers-count": "$1 {{PLURAL:$1|aðgerð|aðgerðir}} á {{PLURAL:$3|síðasta $3 degi|síðustu $3 dögum}}",
        "activeusers-from": "Sýna notendur sem byrja á:",
-       "activeusers-hidebots": "Fela vélmenni",
-       "activeusers-hidesysops": "Fela möppudýr",
        "activeusers-noresult": "Enginn notandi fannst.",
        "activeusers-submit": "Sýna virka notendur",
        "listgrouprights": "Notandahópréttindi",
index e3e042c..f46446a 100644 (file)
        "passwordreset-emaildisabled": "Le funzionalità di posta elettronica sono state disabilitate su questa wiki.",
        "passwordreset-username": "Nome utente:",
        "passwordreset-domain": "Dominio:",
-       "passwordreset-capture": "Visualizzare il contenuto del messaggio e-mail?",
-       "passwordreset-capture-help": "Se si seleziona questa casella, l'indirizzo e-mail (con la password temporanea), verrà mostrato a voi, oltre ad essere inviato all'utente.",
        "passwordreset-email": "Indirizzo email:",
        "passwordreset-emailtitle": "Dettagli dell'utente su {{SITENAME}}",
        "passwordreset-emailtext-ip": "Qualcuno (probabilmente tu, con indirizzo IP $1) ha richiesto l'invio di una nuova password per l'accesso a {{SITENAME}} ($4). {{PLURAL:$3|L'utente associato|Gli utenti associati}} a questo indirizzo email sono:\n\n$2\n\n{{PLURAL:$3|Questa password temporanea scadrà|Queste password temporanee scadranno}} dopo {{PLURAL:$5|un giorno|$5 giorni}}.\nDovresti accedere e scegliere una nuova password ora. \n\nSe non sei stato tu a fare la richiesta, o se ti sei ricordato la password originale e non vuoi più cambiarla, puoi ignorare questo messaggio e continuare ad utilizzare la tua vecchia password.",
        "passwordreset-emailelement": "Nome utente: \n$1\n\nPassword temporanea: \n$2",
        "passwordreset-emailsentemail": "Se questo indirizzo di posta elettronica è associato con la tua utenza, allora verrà inviata una email per reimpostare la password.",
        "passwordreset-emailsentusername": "Se c'è un indirizzo di posta elettronica associato con questo nome utente, allora verrà inviata una email per reimpostare la password.",
-       "passwordreset-emailsent-capture2": "L'email di reimpostazione della password {{PLURAL:$1|è stata inviata|sono state inviate}}. {{PLURAL:$1|Il nome|L'elenco di nomi}} utente e password è mostrato qui.",
-       "passwordreset-emailerror-capture2": "Invio di email {{GENDER:$2|all'utente}} non riuscito: $1. {{PLURAL:$3|Il nome|L'elenco di nomi}} utente e password è mostrato qui.",
        "passwordreset-nocaller": "Un chiamante deve essere fornito",
        "passwordreset-nosuchcaller": "Chiamante non esiste: $1",
        "passwordreset-ignored": "La reimpostazione della password non è stata gestita. Forse nessun provider è configurato?",
-       "passwordreset-invalideamil": "Indirizzo di posta elettronica non valido",
+       "passwordreset-invalidemail": "Indirizzo di posta elettronica non valido",
        "passwordreset-nodata": "Non è stato fornito né un nome utente né un indirizzo di posta elettronica",
        "changeemail": "Modifica o rimuovi indirizzo di posta elettronica",
        "changeemail-header": "Completa questo modulo per cambiare il tuo indirizzo email. Se vuoi rimuovere l'associazione di qualsiasi indirizzo email dalla tua utenza, lascia il nuovo indirizzo email vuoto quando invii il modulo.",
        "right-siteadmin": "Blocca e sblocca il database",
        "right-override-export-depth": "Esporta le pagine includendo le pagine collegate fino ad una profondità di 5",
        "right-sendemail": "Invia email ad altri utenti",
-       "right-passwordreset": "Vede i messaggi di reimpostazione della password",
        "right-managechangetags": "Crea e attiva/disattiva le [[Special:Tags|etichette]]",
        "right-applychangetags": "Applica delle [[Special:Tags|etichette]] alle proprie modifiche",
        "right-changetags": "Aggiunge e rimuove specifiche [[Special:Tags|etichette]] su singole versioni o voci di registro",
        "apisandbox-alert-field": "Il valore di questo campo non è valido.",
        "apisandbox-continue": "Continua",
        "apisandbox-continue-clear": "Pulisci",
+       "apisandbox-param-limit": "Inserisci <kbd>max</kbd> per utilizzare il limite massimo.",
        "booksources": "Fonti librarie",
        "booksources-search-legend": "Ricerca di fonti librarie",
        "booksources-isbn": "Codice ISBN:",
        "activeusers-count": "$1 {{PLURAL:$1|azione|azioni}} {{PLURAL:$3|nell'ultimo giorno|negli ultimi $3 giorni}}",
        "activeusers-from": "Mostra gli utenti a partire da:",
        "activeusers-groups": "Visualizza gli utenti appartenenti ai gruppi:",
+       "activeusers-excludegroups": "Escludi gli utenti appartenenti ai gruppi:",
        "activeusers-noresult": "Nessun utente risponde ai criteri impostati.",
        "activeusers-submit": "Mostra utenti attivi",
        "listgrouprights": "Diritti del gruppo utente",
        "tags-deactivate": "disattiva",
        "tags-hitcount": "$1 {{PLURAL:$1|modifica|modifiche}}",
        "tags-manage-no-permission": "Non si dispone dei permessi necessari per gestire le etichette di modifica.",
-       "tags-manage-blocked": "Non puoi gestire le etichette alle modifiche mentre sei bloccato.",
+       "tags-manage-blocked": "Non puoi gestire le etichette alle modifiche mentre sei {{GENDER:$1|bloccato|bloccata}}.",
        "tags-create-heading": "Crea un nuovo tag",
        "tags-create-explanation": "Per impostazione predefinita, i tag appena creati saranno disponibili per l'utilizzo di utenti e bot.",
        "tags-create-tag-name": "Nome del tag:",
        "tags-deactivate-not-allowed": "Non è possibile disattivare il tag \"$1\".",
        "tags-deactivate-submit": "Disattiva",
        "tags-apply-no-permission": "Non disponi dell'autorizzazione per applicare la modifica di tag insieme con le tue modifiche.",
-       "tags-apply-blocked": "Non puoi applicare le etichette alle modifiche mentre sei bloccato.",
+       "tags-apply-blocked": "Non puoi applicare le etichette alle modifiche mentre sei {{GENDER:$1|bloccato|bloccata}}.",
        "tags-apply-not-allowed-one": "L'etichetta \"$1\" non può essere applicata manualmente.",
        "tags-apply-not-allowed-multi": "{{PLURAL:$2|La seguente etichetta non può essere applicata|Le seguenti etichette non possono essere applicate}}  manualmente: $1",
        "tags-update-no-permission": "Non si dispone dei permessi necessari per aggiungere o rimuovere le etichette di modifica dalle singole versioni o voci di registro.",
-       "tags-update-blocked": "Non puoi aggiungere o rimuovere le etichette alle modifiche mentre sei bloccato.",
+       "tags-update-blocked": "Non puoi aggiungere o rimuovere le etichette alle modifiche mentre sei {{GENDER:$1|bloccato|bloccata}}.",
        "tags-update-add-not-allowed-one": "Il tag \"$1\" non può essere aggiunto manualmente.",
        "tags-update-add-not-allowed-multi": "{{PLURAL:$2|Il seguente tag non può essere aggiunto|I seguenti tag non possono essere aggiunti}} manualmente: $1",
        "tags-update-remove-not-allowed-one": "Il tag \"$1\" non può essere rimosso.",
index 27fe191..459ed7c 100644 (file)
@@ -73,7 +73,8 @@
                        "Waiesu",
                        "Matma Rex",
                        "組曲師",
-                       "Foresttttttt"
+                       "Foresttttttt",
+                       "ネイ"
                ]
        },
        "tog-underline": "リンクの下線:",
        "botpasswords-label-delete": "削除",
        "botpasswords-label-resetpassword": "パスワードをリセット",
        "botpasswords-label-grants": "該当する権限群",
-       "botpasswords-help-grants": "各権限群は、一覧にある利用者権限で現在の利用者アカウントが既に有している権限を付与します。詳細については、[[Special:ListGrants|権限群の表]]をご覧ください。",
+       "botpasswords-help-grants": "権限群は、現在の利用者アカウントが既に有している権限を付与します。ここで権限群を付与しても、あなたの利用者アカウントが有していない権限を付与しません。詳しくは[[Special:ListGrants|権限群の表]]をご覧ください。",
        "botpasswords-label-grants-column": "付与",
        "botpasswords-bad-appid": "ボット「$1」は有効ではありません。",
        "botpasswords-insert-failed": "ボット「$1」の追加に失敗しました。既に追加されていないか確認してください。",
        "botpasswords-updated-body": "利用者「$2」のボット名「$1」のためのパスワードが更新されました。",
        "botpasswords-deleted-title": "ボット用パスワードが削除されました",
        "botpasswords-deleted-body": "利用者「$2」のボット名「$1」のためのパスワードが削除されました。",
-       "botpasswords-newpassword": "<strong>$1</strong> 用の新しいパスワードは <strong>$2</strong> です。 <em>後で参照するために、この情報を控えておいてください</em>",
+       "botpasswords-newpassword": "<strong>$1</strong>用の新しいパスワードは<strong>$2</strong>です。<em>後で参照するために、この情報を控えておいてください。</em><br />(古いボットの制約などでログイン名と利用者名が同じでなければならない場合は、<strong>$3</strong>を利用者名とし、<strong>$4</strong>をパスワードとしてください。)",
        "botpasswords-no-provider": "BotPasswordsSessionProvider が有効ではありません。",
        "botpasswords-invalid-name": "指定された利用者名には、ボット用パスワードの区切りである「$1」 が含まれていません。",
        "botpasswords-not-exist": "利用者「$1」はボット「$2」のパスワードを所持していません。",
        "passwordreset-emaildisabled": "メール機能は、このウィキでは無効化されています。",
        "passwordreset-username": "利用者名:",
        "passwordreset-domain": "ドメイン:",
-       "passwordreset-capture": "お送りするメールの内容を表示しますか?",
-       "passwordreset-capture-help": "このボックスにチェックを入れると、利用者に送信されるメールの内容 (仮パスワードを含む) をあなたも閲覧できます。",
        "passwordreset-email": "メールアドレス:",
        "passwordreset-emailtitle": "{{SITENAME}}上のアカウントの詳細",
        "passwordreset-emailtext-ip": "誰か (おそらくあなた、IP アドレス $1) が {{SITENAME}} ($4)\nでのパスワードを再設定するよう申請しました。\n以下の利用者{{PLURAL:$3|アカウント|アカウント群}}がこのメールアドレスと紐付けられています。\n\n$2\n\n{{PLURAL:$3|この仮パスワード|これらの仮パスワード}}は {{PLURAL:$5|$5 日|$5 日間}}で有効期限が切れます。\nあなたはすぐにログインして新しいパスワードを設定する必要があります。\nこれが他の誰かによる申請である場合、あるいはあなたが自分の元のパスワードを\n覚えていてそれを変更したくない場合には、このメッセージを無視して以前のパスワードを\n使用し続けることができます。",
        "passwordreset-emailelement": "利用者名: \n$1\n\n仮パスワード: \n$2",
        "passwordreset-emailsentemail": "このメールアドレスがあなたのアカウントに関連付けられている場合は、パスワードリセットのメールが送信されます。",
        "passwordreset-emailsentusername": "この利用者名に関連付けられたメールアドレスがある場合は、パスワードリセットのメールが送信されます。",
-       "passwordreset-emailsent-capture2": "パスワードリセットの{{PLURAL:$1|メール}}が送信されました。{{PLURAL:$1|利用者名とパスワード|利用者名とパスワードの一覧}}は以下のとおりです。",
-       "passwordreset-emailerror-capture2": "{{GENDER:$2|利用者}}へのメール送信に失敗しました: $1{{PLURAL:$3|利用者名とパスワード|利用者名とパスワードの一覧}}は以下のとおりです。",
        "passwordreset-ignored": "パスワードのリセットが処理されませんでした。プロバイダーが設定されていない可能性があります。",
-       "passwordreset-invalideamil": "無効なメールアドレスです",
+       "passwordreset-invalidemail": "無効なメールアドレスです",
        "changeemail": "メールアドレスの変更または除去",
        "changeemail-header": "あなたのメールアドレスを変更するには、このフォームを完成させます。もし、あなたのアカウントから任意のメールアドレスの関連付けを削除したい場合は、フォームの送信時に、新しいメールアドレスを空白のままにします。",
        "changeemail-no-info": "このページに直接アクセスするためにはログインしている必要があります。",
        "right-siteadmin": "データベースをロックおよびロック解除",
        "right-override-export-depth": "リンク先ページを5階層まで含めて書き出す",
        "right-sendemail": "他の利用者にメールを送信",
-       "right-passwordreset": "パスワード再設定メールを閲覧",
        "right-managechangetags": "[[Special:Tags|タグ]]の作成、有効化および無効化",
        "right-applychangetags": "自分の編集に[[Special:Tags|タグ]]を適用する",
        "right-changetags": "個々の版と記録項目の任意の[[Special:Tags|タグ]]の追加と削除",
        "right-deletechangetags": "データベースから[[Special:Tags|タグ]]を削除します",
        "grant-group-email": "メールの送信",
        "grant-group-customization": "カスタマイズと個人設定",
-       "grant-group-private-information": "君の個人情報にアクセスする。",
+       "grant-group-private-information": "あなたの個人情報にアクセスする",
        "grant-group-other": "その他の活動",
        "grant-blockusers": "利用者をブロックおよびブロック解除",
        "grant-createaccount": "アカウントを作成",
        "patrol-log-header": "以下は巡回された版の記録です。",
        "log-show-hide-patrol": "巡回記録を$1",
        "log-show-hide-tag": "タグ記録を$1",
+       "confirm-markpatrolled-top": "ページ$2の$3の版を巡回済みにマークしますか?",
        "deletedrevision": "古い版 $1 を削除しました",
        "filedeleteerror-short": "ファイルの削除エラー: $1",
        "filedeleteerror-long": "ファイルの削除中にエラーが発生しました:\n\n$1",
        "exif-compression-6": "JPEG (旧式)",
        "exif-copyrighted-true": "著作権あり",
        "exif-copyrighted-false": "著作権情報未設定",
-       "exif-photometricinterpretation-0": "黒と白 (白が0)",
+       "exif-photometricinterpretation-0": "黒と白(白が0です)",
        "exif-photometricinterpretation-1": "黒と白(黒が0)",
        "exif-photometricinterpretation-9": "CIE L*a*b* (ICC エンコード)",
        "exif-photometricinterpretation-10": "CIE L*a*b* (ITU エンコード)",
        "tags-deactivate": "無効化",
        "tags-hitcount": "$1 {{PLURAL:$1|回の変更}}",
        "tags-manage-no-permission": "変更タグを管理する権限がありません。",
-       "tags-manage-blocked": "ブロックされているため、変更タグを管理できません",
+       "tags-manage-blocked": "{{GENDER:$1|あなた}}はブロックされているため、変更タグを管理できません。",
        "tags-create-heading": "新しいタグを作成",
        "tags-create-explanation": "既定では、新しく作られたタグは利用者とボットによる使用が可能となります。",
        "tags-create-tag-name": "タグ名:",
        "tags-deactivate-not-allowed": "タグ「$1」は無効化できません。",
        "tags-deactivate-submit": "無効化",
        "tags-apply-no-permission": "あなたには変更と同時に変更タグを適応する権限がありません。",
-       "tags-apply-blocked": "ブロックされているため、変更タグの変更を適用できません。",
+       "tags-apply-blocked": "{{GENDER:$1|あなた}}はブロックされているため、変更タグを適用できません。",
        "tags-apply-not-allowed-one": "タグ \"$1\" の手動適用は認められていません。",
        "tags-apply-not-allowed-multi": "以下の {{PLURAL:$2|タグ}} は手動適用が認められていません: $1",
        "tags-update-no-permission": "あなたには個々の版または記録項目のタグの追加または除去を行う権限がありません。",
-       "tags-update-blocked": "ブロックされているため、変更タグを追加または除去できません。",
+       "tags-update-blocked": "{{GENDER:$1|あなた}}はブロックされているため、変更タグの追加と除去ができません。",
        "tags-update-add-not-allowed-one": "タグ \"$1\" の手動追加は認められていません。",
        "tags-update-add-not-allowed-multi": "以下の {{PLURAL:$2|タグ}} は手動追加が認められていません: $1",
        "tags-update-remove-not-allowed-one": "タグ \"$1\" の除去は認められていません。",
        "htmlform-date-placeholder": "YYYY-MM-DD",
        "htmlform-time-placeholder": "HH:MM:SS",
        "htmlform-datetime-placeholder": "YYYY-MM-DD HH:MM:SS",
-       "htmlform-date-invalid": "君が入力した値は識別できない日付です。YYYY-MM-DD形式で試してください。",
+       "htmlform-date-invalid": "あなたが入力した日付を識別できませんでした。YYYY-MM-DD形式で試してください。",
        "htmlform-title-badnamespace": "[[:$1]]は、\"{{ns:$2}}\"名前空間にありません。",
        "htmlform-title-not-creatable": "\"$1\" は、作成可能なページ名では、ありません。",
        "htmlform-title-not-exists": "$1 は存在しません。",
        "authmanager-authn-autocreate-failed": "ローカルアカウントの自動作成が失敗しました: $1",
        "authmanager-change-not-supported": "一切利用されないであろう情報のため、指定された証明情報を変更することはできません。",
        "authmanager-create-disabled": "アカウントの作成は禁止されています。",
-       "authmanager-create-from-login": "アカウントを作成するには、以下の入力欄に記入してください。",
+       "authmanager-create-from-login": "アカウントを作成するには、入力欄に記入してください。",
        "authmanager-create-not-in-progress": "アカウントの作成が行われていない、またはセッションデータが失われました。最初からやり直してください。",
        "authmanager-create-no-primary": "指定された証明情報は、アカウントの作成に使用できませんでした。",
        "authmanager-link-no-primary": "指定された証明情報は、アカウントの関連付けに使用できませんでした。",
index 38a261f..2b14bfc 100644 (file)
        "yourpasswordagain": "Ritaip paaswod:",
        "createacct-yourpasswordagain": "Kanfoerm paaswod",
        "createacct-yourpasswordagain-ph": "Enta paaswod agen",
-       "remembermypassword": "Memba mi lagiin pan dis brouza (fi a maximom a $1 {{PLURAL:$1|die|die}})",
        "userlogin-remembermypassword": "Kip mi lagiin‎",
        "yourdomainname": "Yu domien:",
        "externaldberror": "Aida aatentikieshan dietabies era okor ar yu no lou fi opdiet yu extoernal akount.",
        "permissionserrorstext-withaction": "Yu no ab no poermishan fi $2, fi di falarin {{PLURAL:$1|riizn|riizndem}}:",
        "moveddeleted-notice": "Dis piej eh diliit.\nDi diliishan ah muuv lag fi di piej provaid biluo fi refrans.‎",
        "edit-conflict": "Hedit kanflik: $1",
-       "cantcreateaccounttitle": "Cyannat mek di hakkount",
        "viewpagelogs": "Vyuu lagdem fi dis piej",
        "currentrev-asof": "Lietis rivijan az av $1",
        "revisionasof": "Rivijan az av $1",
index 57d4099..48cf4aa 100644 (file)
        "yourpasswordagain": "Djentast adgångskode:",
        "createacct-yourpasswordagain": "Bekräft adgångskode",
        "createacct-yourpasswordagain-ph": "Intast adgångskode idjen",
-       "remembermypassword": "Husk min brugenaun i denn browser (hyest $1 {{PLURAL:$1|daw}})",
        "userlogin-remembermypassword": "Husk mej",
        "userlogin-signwithsecure": "Brug siker forbinjels",
        "yourdomainname": "Det domænnaun:",
index f4e4631..4474661 100644 (file)
        "activeusers-intro": "Iki daptar panganggo sing katon lakuné ing $1 {{PLURAL:$1|dina|dina}} kapungkur.",
        "activeusers-count": "$1 {{PLURAL:$1|suntingan|suntingan}} ing {{PLURAL:$3|dina|$3 dina}} pungkasan",
        "activeusers-from": "Tampilna panganggo wiwit saka:",
-       "activeusers-hidebots": "Delikna bot",
-       "activeusers-hidesysops": "Delikna pangurus",
        "activeusers-noresult": "Naraguna ora ana.",
        "listgrouprights": "Hak-hak grup panganggo",
        "listgrouprights-summary": "Ing ngisor iki kapacak dhaftar grup panganggo sing didéfinisi ing wiki iki, kanthi hak-hak aksès gandhèngané.\nInformasi tambahan perkara hak-hak individual bisa ditemokaké ing [[{{MediaWiki:Listgrouprights-helppage}}|kéné]].",
index 38d9bdb..a2fd8c9 100644 (file)
        "passwordreset-nocaller": "გამომძახებელი უნდა იყოს მიწოდებული",
        "passwordreset-nosuchcaller": "გამომძახებელი არ არსებობს: $1",
        "passwordreset-ignored": "პაროლის გაუქმება არ იქნა შესრულებული. შეიძლება კონფიგურაციაში პროვაიდერი არ იყო გათვალისწინებული?",
-       "passwordreset-invalideamil": "ელ-ფოსტის არასწორი მისამართი",
+       "passwordreset-invalidemail": "ელ-ფოსტის არასწორი მისამართი",
        "passwordreset-nodata": "არც მომხმარებლის სახელი და არც ელ-ფოსტის მისამართი არ იყო მოწოდებული",
        "changeemail": "ელ-ფოსტის მისამართის შეცვლა ან წაშლა",
        "changeemail-header": "შეავსეთ ეს ფორმა მეილის შესაცვლელად. თუ გსურთ თქვენი ანგარიში არ იყოს დაკავშირებული არცერთ მეილთან, ახალი მეილის მისამართის ველი დატოვეთ ცარიელი.",
        "activeusers-intro": "ეს არის მომხმარებელთა სია, რომელთაც აქვს წვლილი უკანასკნელი $1 {{PLURAL:$1|დღის|დღის}} განმავლობაში.",
        "activeusers-count": "$1 {{PLURAL:$1|მოქმედება|მოქმედება}} {{PLURAL:$3|დღის|$3 დღის}} განმავლობაში.",
        "activeusers-from": "მომხმარებელთა ჩვენება, დაწყებული:",
-       "activeusers-hidebots": "რობოტების დამალვა",
-       "activeusers-hidesysops": "ადმინისტრატორების დამალვა",
        "activeusers-noresult": "მომხმარებლები არ არიან ნაპოვნი.",
        "activeusers-submit": "აქტიური მომხმარებლების ჩვენება",
        "listgrouprights": "მომხმარებელთა ჯგუფების უფლებები",
index 0dba198..3397906 100644 (file)
        "yourname": "Paydalanıwshı atı:",
        "yourpassword": "Parol:",
        "yourpasswordagain": "Paroldi qayta kiritin':",
-       "remembermypassword": "Menin' kirgenimdi usı kompyuterde saqlap qal (en' ko'bi menen $1 {{PLURAL:$1|ku'nge|ku'nge}} shekem)",
        "yourdomainname": "Sizin' domen:",
        "login": "Kiriw",
        "nav-login-createaccount": "Kiriw / akkaunt jaratıw",
        "moveddeleted-notice": "Bul bet o'shirilgen.\nTo'mende mag'lıwmat ushın bettin' o'shiriw ha'm ko'shiriw jurnalı ko'rsetilgen.",
        "edit-conflict": "O'zgerislerdegi konflikt.",
        "parser-template-loop-warning": "Shablonlarda qaytalanıw tabıldı: [[$1]]",
-       "cantcreateaccounttitle": "Akkaunt jaratılmadı",
        "cantcreateaccount-text": "[[User:$3|$3]] usı IP adresten ('''$1''') akkaunt jaratıwın blokladı.\n\n$3 keltirilgen sebebi: ''$2''",
        "viewpagelogs": "Usı bettin' jurnalın ko'riw",
        "nohistory": "Bul bettin' o'zgertiw tariyxı joq.",
index cd5ff53..3faa3a8 100644 (file)
        "yourpasswordagain": "Ɛiwed ssekcem awal n tbaḍnit",
        "createacct-yourpasswordagain": "Sergeg awal n uɛeddi",
        "createacct-yourpasswordagain-ph": "Sekcem awal n uɛeddi tikelt nniḍen",
-       "remembermypassword": "Cfu ɣef wawal n tbaḍnit inu di uselkim-agi (i afellay n $1 {{PLURAL:$1|ass|ussan}})",
        "userlogin-remembermypassword": "Eǧǧ taɣimit inu turmidt",
        "userlogin-signwithsecure": "Seqdec tuqqna yettwaḥerzen",
        "yourdomainname": "Taɣult inek",
        "passwordreset-emailtext-user": "Aseqdac $1 ɣef {{SITENAME}} yessutered awennez n awal n uɛaddi i {{SITENAME}} ($4). {{PLURAL:$3|Amiḍan n useqdac agi yeqqen|imiḍanen n iseqdacen agi qqenen}} s tansa e-mail agi :\n\n$2\n\n{{PLURAL:$3|Awal n uɛaddi uɛḍil agi ad i aff tasewti-s|Awalen n uɛaddi uɛḍilen agi ad affen taseweti nsen}} deg {{PLURAL:$5|yiwen ass|$5 ussan}}. Ilaq tura ad qqeneḍ dɣa ad freneḍ awal n uɛaddi amaynut. Lukan mačči d kečč/kem i xedmen asuter agi, naɣ tecfiḍ tura i awal n uɛaddi inek/inem, tzemreḍ ad eǧǧeḍ izen agi.",
        "passwordreset-emailelement": "Isem n useqdac : \n$1\n\nAwal n uɛddi akudan : \n$2",
        "passwordreset-emailsentemail": "Tirawt n uwennez n awal n uɛaddi tetwaceggaɛ.",
-       "passwordreset-emailsent-capture": "Tirawt n uwennez n awal n uɛaddi tetwaceggaɛ, ẓeṛ-itt ddaw agi.",
-       "passwordreset-emailerror-capture": "Tirawt n uwennez n awal n uɛaddi t-arewed, ẓeṛ-itt ddaw agi, lamaɛna aceggaɛ i {{GENDER:$2|umseqdac}} yefkad anezri : $1",
        "changeemail": "Beddel tansa n e-mail",
        "changeemail-header": "Beddel tansa n e-mail n umiḍan",
        "changeemail-no-info": "Ilaq ad qqeneḍ iwakken ad ẓṛeḍ asebter agi.",
        "undo-norev": "Abeddel ur yezmer ara ad yetwekkes acku ulac-itt naɣ tetwekkes yakan",
        "undo-summary": "Ssefsu tasiwelt $1 sɣur [[Special:Contributions/$2|$2]] ([[User talk:$2|Meslay]])",
        "undo-summary-username-hidden": "Semmewet tacaggart $1 sɣur amseqdac yeffren",
-       "cantcreateaccounttitle": "Ur yezmir ara ad yexleq isem n wemseqdac",
        "cantcreateaccount-text": "Asnulfu n umiḍan seg tansa IP (<b>$1</b>) tekyef sɣur [[User:$3|$3]].\n\nTaɣẓint n $3 : ''$2''",
        "cantcreateaccount-range-text": "Asnulfu n umiḍan seg tansiwin IP deg tagrumma <strong>$1</strong>, i sseddan tansa inek/inem IP (<strong>$4</strong>), twawḥelen sɣur [[User:$3|$3]].\n\nTaɣẓint i-d yefka/tefka $3 : <em>$2</em>",
        "viewpagelogs": "Ẓer aɣmis n usebter-agi",
        "activeusers-intro": "Wagi d umuɣ n iseqdacen yexedmen armud deg {{PLURAL:$1|ass agi aneggaru|$1 ussan agi ineggura}}.",
        "activeusers-count": "$1 {{PLURAL:$1|tigawt|tigawin}} deg {{PLURAL:$3|ass aneggaru|$3 ussan ineggura}}",
        "activeusers-from": "Ssken iseqdacen seg :",
-       "activeusers-hidebots": "Ffer iṛubuten",
-       "activeusers-hidesysops": "Ffer inedbalen",
        "activeusers-noresult": "Ur yufi aseqdac.",
        "listgrouprights": "Izerfan n igrawen n iseqdacen",
        "listgrouprights-summary": "Asebter agi yesɛa yiwen umuɣ n igrawen i sengelen deg wiki agi dɣa izerfan n wadduf i qqenen.\nZemrent ad ilint [[{{MediaWiki:Listgrouprights-helppage}}|tilɣa nniḍen]] ɣef izerfan n yiwen.",
        "htmlform-no": "Ala",
        "htmlform-yes": "Ih",
        "htmlform-chosen-placeholder": "Fren taxtiṛit",
-       "sqlite-has-fts": "$1 s anadi deg uḍris ummid yezmer",
-       "sqlite-no-fts": "$1 war anadi deg uḍris ummid yezmer",
        "logentry-delete-delete": "$1 {{GENDER:$2|yemḥa}} asebtar $3",
        "logentry-delete-restore": "$1 {{GENDER:$2|yerred|terred}} asebtar $3",
        "logentry-delete-event": "$1 {{GENDER:$2|yebeddel|tebeddel}} tabanit {{PLURAL:$5|n tadyant n uɣmis|n $5 tidyanin n uɣmis}} ɣef $3: $4",
index ffff096..9dd1e0d 100644 (file)
        "yourname": "Уи цӀэр:",
        "yourpassword": "Пэролыр:",
        "yourpasswordagain": "Иджыри зэ пэролыр:",
-       "remembermypassword": "Сызэрихьэр компьютерым щыIыгъын (махуэу $1 {{PLURAL:$1|щIимыгъуу|щIимыгъуу}})",
        "yourdomainname": "Уи доменыр:",
        "externaldberror": "Щэуэгъуэ хъуа, аутентификациэ щекӀуэкӀым иэ апхуэдиз пӀалъэ уиӀу щыткъым, уи нэкугъуэ аккаунтыр зэпхъуэкӀын.",
        "login": "Системэм зыкъегъэцIыхуын",
        "undo-failure": "Гъэтэрэзыгъуэр хэхыжа хъунукъым, гъэтэрэзыгъуэхэм я зэпхыгъуэр зэремыкӀуэкӀыфым щхьэкӀэ",
        "undo-norev": "Гъэтэрэзыгъуэр хэхыжа хъунукъым зэрщымыӀэм щхьэкӀэ иэ хэхыжагъыху щытщ.",
        "undo-summary": "Гъэтэрэзыгъуэ хэхыжыныр $1 цӀыхухэт [[Special:Contributions/$2|$2]] ([[User talk:$2|тепсэлъыхьыгъуэ]])",
-       "cantcreateaccounttitle": "Аккаунтыр щӀыфынукъым",
        "cantcreateaccount-text": "Аккаунт щӀыныр мы IP-адресыкӀэ (<b>$1</b>) триубыдауэ щытщ [[User:$3|цӀыхухэт $3]].\n\n$3 ар зтеухуауэ къитхыр: ''$2''",
        "viewpagelogs": "Мы напэкӀуэцIым щхьэкӀэ тхылъыр гъэлъэгъуэн",
        "nohistory": "Мы напэкӀуэцӀым и зэхъуэкӀыгъуэхэм я тхыдэ иӀэкъым.",
index b01984c..9275e71 100644 (file)
        "yourpasswordagain": "کلمۂ شناخت(پاسورڈو)دوبارہ نیویشے",
        "createacct-yourpasswordagain": "کلمۂ اجازتو تصدیق کورے",
        "createacct-yourpasswordagain-ph": "پاس ورڈو وا داخل کورے",
-       "remembermypassword": "ھیہ براوزیرا مہ داخلِ نوشتگی معلوماتن یاد لاکھے (زیاتاری زیات $1 {{PLURAL:$1|بس|بسان}} بچے)",
        "userlogin-remembermypassword": "مہ داخل بہچاوے",
        "yourdomainname": "تہ ڈومین",
        "password-change-forbidden": "تتے ھیہ ویکیپیڈیا تان پاس روڈو تبدیل کوریکو اختیار نیکی",
        "listusers-noresult": "ھیہ صارف ملاو نو ہوئے",
        "activeusers": "متحرک صارفینان فہرست",
        "activeusers-from": "مطلوبہ حرفاری شروع باک صفحاتن نمائش:",
-       "activeusers-hidebots": "کھوشت خود کار صارف",
-       "activeusers-hidesysops": "کھوشت منتظمان",
        "activeusers-noresult": "ھیہ صارف ملاو نو ہوئے",
        "listgrouprights-group": "گروہ",
        "listgrouprights-rights": "اختیارات",
index b2a514f..5f62837 100644 (file)
        "yourname": "قاتىسۋشى اتىڭىز:",
        "yourpassword": "قۇپىييا ٴسوزىڭىز:",
        "yourpasswordagain": "قۇپىييا ٴسوزدى قايتالاڭىز:",
-       "remembermypassword": "مەنىڭ كىرگەنىمدى بۇل كومپيۋتەردە ۇمىتپا (for a maximum of $1 {{PLURAL:$1|day|days}})",
        "yourdomainname": "جەلى ۇيشىگىڭىز:",
        "externaldberror": "وسى ارادا نە شەتتىك راستاۋ دەرەكقورىندا قاتە بولدى, نەمەسە شەتتىك تىركەلگىڭىزدى جاڭالاۋ رۇقساتى جوق.",
        "login": "كىرۋ",
        "undo-failure": "بۇل وڭدەمە جوققا شىعارىلمايدى, سەبەبى ارادا قاقتىعىستى وڭدەمەلەر بار.",
        "undo-norev": "بۇل وڭدەمە جوققا شىعارىلمايدى, سەبەبى بۇل جوق نەمەسە جويىلعان.",
        "undo-summary": "[[Special:Contributions/$2|$2]] ([[User_talk:$2|تالقىلاۋى]]) ىستەگەن ٴنومىر $1 نۇسقاسىن جوققا شىعاردى",
-       "cantcreateaccounttitle": "جاڭا تىركەلگى جاسالمادى",
        "cantcreateaccount-text": "بۇل IP جايدان ('''$1''') جاڭا تىركەلگى جاساۋىن [[User:$3|$3]] بۇعاتتاعان.\n\n$3 كەلتىرىلگەن سەبەبى: ''$2''",
        "viewpagelogs": "بۇل بەت ٴۇشىن جۋرنال وقىيعالارىن قاراۋ",
        "nohistory": "مىندا بۇل بەتتىنىڭ تۇزەتۋ تارىيحى جوق.",
index 39773cc..c25c9ae 100644 (file)
@@ -5,7 +5,8 @@
                        "GaiJin",
                        "Kaztrans",
                        "아라",
-                       "Macofe"
+                       "Macofe",
+                       "Zpizza"
                ]
        },
        "tog-underline": "Siltemeniñ astın sız:",
        "yourname": "Qatıswşı atıñız:",
        "yourpassword": "Qupïya söziñiz:",
        "yourpasswordagain": "Qupïya sözdi qaýtalañız:",
-       "remembermypassword": "Meniñ kirgenimdi bul komp′ywterde umıtpa (for a maximum of $1 {{PLURAL:$1|day|days}})",
        "yourdomainname": "Jeli üýşigiñiz:",
        "externaldberror": "Osı arada ne şettik rastaw derekqorında qate boldı, nemese şettik tirkelgiñizdi jañalaw ruqsatı joq.",
        "login": "Kirw",
        "undo-failure": "Bul öñdeme joqqa şığarılmaýdı, sebebi arada qaqtığıstı öñdemeler bar.",
        "undo-norev": "Bul öñdeme joqqa şığarılmaýdı, sebebi bul joq nemese joýılğan.",
        "undo-summary": "[[Special:Contributions/$2|$2]] ([[User_talk:$2|talqılawı]]) istegen nömir $1 nusqasın joqqa şığardı",
-       "cantcreateaccounttitle": "Jaña tirkelgi jasalmadı",
        "cantcreateaccount-text": "Bul IP jaýdan ('''$1''') jaña tirkelgi jasawın [[User:$3|$3]] buğattağan.\n\n$3 keltirilgen sebebi: ''$2''",
        "viewpagelogs": "Bul bet üşin jwrnal oqïğaların qaraw",
        "nohistory": "Mında bul bettiniñ tüzetw tarïxı joq.",
        "listusersfrom": "Mına qatıswşıdan bastap körsetw:",
        "listusers-submit": "Körset",
        "listusers-noresult": "Qatıswşı tabılğan joq.",
+       "activeusers-excludegroups": "Toptarğa jatatın paydalanwşılardı qospaw:",
        "listgrouprights": "Qatıswşı tobı quqıqtarı",
        "listgrouprights-summary": "Kelesi tizimde bul wïkïde tağaýındalğan qatıswşı quqıqtarı (baýlanıstı qatınaw quqıqtarımen birge) körsetiledi.\nJeke quqıqtar twralı köbirek aqparattı [[{{MediaWiki:Listgrouprights-helppage}}|mında]] taba alasız.",
        "listgrouprights-group": "Top",
index 282444d..89564eb 100644 (file)
        "yourpasswordagain": "វាយពាក្យសម្ងាត់ម្តងទៀត៖",
        "createacct-yourpasswordagain": "អះអាង​ពាក្យ​សម្ងាត់",
        "createacct-yourpasswordagain-ph": "បញ្ចូលពាក្យសម្ងាត់ម្ដងទៀត",
-       "remembermypassword": "ចងចាំកំណត់ឈ្មោះចូលរបស់ខ្ញុំក្នុងកុំព្យូទ័រនេះ (សំរាប់រយៈពេលយូរបំផុត $1 {{PLURAL:$1|ថ្ងៃ|ថ្ងៃ}})",
        "userlogin-remembermypassword": "រក្សាស្ថានភាពកត់ឈ្មោះចូលរបស់ខ្ញុំ",
        "userlogin-signwithsecure": "ប្រើការតភ្ជាប់មានសុវត្ថិភាព",
        "yourdomainname": "ដូម៉ែនរបស់អ្នក៖",
        "activeusers-intro": "នេះជាបញ្ជីរាយនាមអ្នកប្រើប្រាស់ដែលមានសកម្មភាពក្នុងរូបភាពណាមួយក្នុងរយៈពេល $1 {{PLURAL:$1|ថ្ងៃ|ថ្ងៃ}}ចុងក្រោយ។",
        "activeusers-count": "{{PLURAL:$1|សកម្មភាព|សកម្មភាព}}ចំនួន$1 ក្នុងរយៈពេល{{PLURAL:$3|១ថ្ងៃ|$3 ថ្ងៃ}}ចុងក្រោយ",
        "activeusers-from": "បង្ហាញអត្តនាមផ្ដើមដោយ៖",
-       "activeusers-hidebots": "លាក់រូបយន្ត",
-       "activeusers-hidesysops": "លាក់អភិបាល",
        "activeusers-noresult": "អ្នកប្រើប្រាស់​រកមិនឃើញ​។​",
        "listgrouprights": "សិទ្ធិនិងក្រុមអ្នកប្រើប្រាស់",
        "listgrouprights-summary": "ខាងក្រោមនេះជាបញ្ជីរាយឈ្មោះក្រុមអ្នកប្រើប្រាស់ដែលបានកំណត់ជាមួយនឹងសិទ្ធិរបស់គេនៅលើវិគីនេះ។ មាន[[{{MediaWiki:Listgrouprights-helppage}}|ព័ត៌មានបន្ថែម]] អំពីសិទ្ធិផ្ទាល់ខ្លួន។",
index 9e78e75..d250510 100644 (file)
@@ -63,7 +63,8 @@
                        "HDNua",
                        "Ykhwong",
                        "Matma Rex",
-                       "Tursetic"
+                       "Tursetic",
+                       "Jerrykim306"
                ]
        },
        "tog-underline": "링크에 밑줄:",
        "tog-diffonly": "편집 차이를 비교할 때 문서 내용을 보지 않기",
        "tog-showhiddencats": "숨은 분류 보이기",
        "tog-norollbackdiff": "되돌리기 후 차이를 보지 않기",
-       "tog-useeditwarning": "바꾼 내용을 저장하지 않고 편집 페이지를 벗어날 때 내게 경고하기",
+       "tog-useeditwarning": "바꾼 내용을 저장하지 않고 편집 페이지를 벗어날 때 내게 알리기",
        "tog-prefershttps": "로그인하는 동안 항상 보안 연결 사용",
        "underline-always": "항상",
        "underline-never": "항상 치지 않기",
        "passwordreset-emaildisabled": "이 위키에서 이메일 기능이 비활성화되어 있습니다.",
        "passwordreset-username": "사용자 이름:",
        "passwordreset-domain": "도메인:",
-       "passwordreset-capture": "발송 결과 이메일을 보시겠습니까?",
-       "passwordreset-capture-help": "이 상자에 체크하면 이메일이 발송된 즉시 임시 비밀번호가 담긴 이메일을 볼 수 있습니다.",
        "passwordreset-email": "이메일 주소:",
        "passwordreset-emailtitle": "{{SITENAME}} 계정에 대한 자세한 정보",
        "passwordreset-emailtext-ip": "당신일 수도 있는 $1 IP 주소를 사용하는 사용자가 {{SITENAME}} ($4)의 비밀번호 재설정을 요청하였습니다.\n이 이메일 주소와 연관된 사용자 {{PLURAL:$3|계정}}의 목록입니다:\n\n$2\n\n{{PLURAL:$3|이 임시 비밀번호}}는 {{PLURAL:$5|1일|$5일}} 후에 만료됩니다.\n이 비밀번호로 로그인한 후 비밀번호를 바꾸십시오. 만약 당신이 아닌 다른 사람이 요청하였거나,\n원래의 비밀번호를 기억해냈다면, 이 메시지를 무시하고\n이전의 비밀번호를 계속 사용할 수 있습니다.",
        "passwordreset-emailelement": "사용자 이름: \n$1\n\n임시 비밀번호: \n$2",
        "passwordreset-emailsentemail": "당신의 계정과 연결된 이메일 주소가 있다면, 비밀번호 재설정 메일이 전해질 것입니다.",
        "passwordreset-emailsentusername": "이 사용자 이름과 연결된 이메일 주소가 있다면 비밀번호 초기화 이메일이 전송됩니다.",
-       "passwordreset-emailsent-capture2": "비밀번호 재설정 이메일을 보냈습니다. {{PLURAL:$1|사용자 이름과 비밀번호는|사용자 이름과 비밀번호의 목록은}} 아래에 나타납니다.",
-       "passwordreset-emailerror-capture2": "{{GENDER:$2|사용자}} 이메일 보내기 실패: $1 {{PLURAL:$3|사용자 이름과 비밀번호가|사용자 이름과 비밀번호의 목록이}} 아래에 나타납니다.",
        "passwordreset-nocaller": "호출자를 지정해야 합니다",
        "passwordreset-nosuchcaller": "호출자가 존재하지 않습니다: $1",
        "passwordreset-ignored": "비밀번호 재설정을 처리하지 못했습니다. 제공자가 구성되지 않았기 때문일 수 있습니다.",
-       "passwordreset-invalideamil": "잘못된 이메일 주소",
+       "passwordreset-invalidemail": "잘못된 이메일 주소",
        "passwordreset-nodata": "사용자 이름이나 이메일 주소가 지정되지 않았습니다",
        "changeemail": "이메일 주소를 바꾸거나 제거하기",
        "changeemail-header": "이메일 주소를 바꾸려면 이 양식을 채우세요. 계정에서 이메일 연동을 취소하고 싶다면 양식을 제출할 때 새 이메일 주소를 공란으로 두세요.",
        "right-siteadmin": "데이터베이스를 잠그거나 잠금 해제",
        "right-override-export-depth": "5단계로 링크된 문서를 포함하여 문서를 내보내기",
        "right-sendemail": "다른 사용자에게 이메일 보내기",
-       "right-passwordreset": "비밀번호 재설정 이메일을 보기",
        "right-managechangetags": "데이터베이스에서 [[Special:Tags|태그]]를 만들거나 지우기",
        "right-applychangetags": "자신이 편집할 때 [[Special:Tags|태그]]를 적용하기",
        "right-changetags": "문서의 특정 판과 특정 기록 항목에 임의의 [[Special:Tags|태그]]를 추가하거나 제거하기",
        "apisandbox-alert-field": "이 필드의 값이 유효하지 않습니다.",
        "apisandbox-continue": "계속",
        "apisandbox-continue-clear": "지우기",
+       "apisandbox-param-limit": "최대 한계치를 사용하려면 <kbd>max</kbd>를 입력하십시오.",
        "booksources": "책 찾기",
        "booksources-search-legend": "책 원본 검색",
        "booksources-isbn": "ISBN:",
        "modifiedarticleprotection": "님이 \"[[$1]]\" 문서의 보호 설정을 바꿨습니다",
        "unprotectedarticle": "\"[[$1]]\" 문서를 보호 해제했습니다",
        "movedarticleprotection": "님이 문서의 보호 설정을 \"[[$2]]\"에서 \"[[$1]]\"(으)로 이동했습니다",
+       "protectedarticle-comment": "{{GENDER:$2|보호됨}} \"[[$1]]\"",
+       "modifiedarticleprotection-comment": "\"[[$1]]문서의 {{GENDER:$2|보호 수준 변경하기}}",
+       "unprotectedarticle-comment": "\"[[$1]]'문서의 {{GENDER:$2|보호 해제하기}}",
        "protect-title": "\"$1\" 보호하기",
        "protect-title-notallowed": "\"$1\" 문서의 보호 수준 보기",
        "prot_1movedto2": "[[$1]] 문서를 [[$2]] 문서로 이동함",
        "log-show-hide-patrol": "점검 기록을 $1",
        "log-show-hide-tag": "태그 기록을 $1",
        "confirm-markpatrolled-button": "확인",
+       "confirm-markpatrolled-top": "$2의 $3 판을 점검한 것으로 표시하시겠습니까?",
        "deletedrevision": "예전 $1 판이 삭제되었습니다.",
        "filedeleteerror-short": "파일 삭제 오류: $1",
        "filedeleteerror-long": "파일을 삭제하는 도중 오류가 발생했습니다:\n\n$1",
        "tags-deactivate": "비활성화",
        "tags-hitcount": "$1개 {{PLURAL:$1|바뀜}}",
        "tags-manage-no-permission": "태그를 변경할 권한이 없습니다.",
-       "tags-manage-blocked": "당신이 차단된 상태에서는 변경 태그를 관리할 수 없습니다.",
+       "tags-manage-blocked": "{{GENDER:$1|당신이}} 차단된 상태에서는 변경 태그를 관리할 수 없습니다.",
        "tags-create-heading": "태그 생성",
        "tags-create-explanation": "기본적으로 새로 생성된 태그는 사용자와 봇이 사용할 수 있습니다.",
        "tags-create-tag-name": "태그 이름:",
        "tags-deactivate-not-allowed": "\"$1\" 태그를 비활성화할 수 없습니다.",
        "tags-deactivate-submit": "비활성화",
        "tags-apply-no-permission": "사용자의 변경 사항과 변경 태그를 적용할 권한이 없습니다.",
-       "tags-apply-blocked": "당신이 차단된 상태에서는 사용자의 변경 사항과 변경 태그를 적용할 수 없습니다.",
+       "tags-apply-blocked": "{{GENDER:$1|당신이}} 차단된 상태에서는 사용자의 변경 사항과 변경 태그를 적용할 수 없습니다.",
        "tags-apply-not-allowed-one": "\"$1\" 태그를 수동으로 추가하는 것은 허용되지 않습니다.",
        "tags-apply-not-allowed-multi": "다음 {{PLURAL:$2|태그를}} 수동으로 추가하는 것은 허용되지 않습니다: $1",
        "tags-update-no-permission": "태그를 문서 판이나 로그 기록에서 추가하거나 삭제할 권한이 없습니다.",
-       "tags-update-blocked": "당신이 차단된 상태에서는 변경 태그를 추가하거나 제거할 수 없습니다.",
+       "tags-update-blocked": "{{GENDER:$1|당신이}} 차단된 상태에서는 변경 태그를 추가하거나 제거할 수 없습니다.",
        "tags-update-add-not-allowed-one": "\"$1\" 태그를 수동으로 추가하는 것은 허용되지 않습니다.",
        "tags-update-add-not-allowed-multi": "다음 {{PLURAL:$2|태그는}} 수동으로 추가하는 것이 허용되지 않습니다: $1",
        "tags-update-remove-not-allowed-one": "\"$1\" 태그를 제거하는 것은 허용되지 않습니다.",
index 18976ba..557bc61 100644 (file)
        "yourpasswordagain": "Паролну джангыдан джаз:",
        "createacct-yourpasswordagain": "Паролну бегит",
        "createacct-yourpasswordagain-ph": "Паролну энтда бир кере джаз",
-       "remembermypassword": "Бу компьютерде мени тергеў джазыўуму сакълаб тур (эм кёб: $1 {{PLURAL:$1|бир кюн|кюн}})",
        "userlogin-remembermypassword": "Системада туруу",
        "userlogin-signwithsecure": "Джакъланнган байлам",
        "yourdomainname": "Сизни доменигиз:",
        "passwordreset-emailtitle": "{{SITENAME}} сайтдагъы тергеу джазыуну юсюнден билгиле",
        "passwordreset-emailelement": "Къошулуучуну аты: \n$1\n\nБолджаллы пароль: \n$2",
        "passwordreset-emailsentemail": "Пароль бла e-mail ийилди.",
-       "passwordreset-emailsent-capture": "Ийилген пароль эсгертиу e-mail тюбюрекде берилибди.",
-       "passwordreset-emailerror-capture": "Пароль эсгертиу e-mail генерация этилди (тюбюрекде берилибди), аны {{GENDER:$2|къошулуучугъа}} ашырыу джетишимсиз болду, чурум: $1",
        "changeemail": "Электрон почтаны адресин ауушдур",
        "changeemail-header": "Электрон почтаны адресин ауушдуруу",
        "changeemail-no-info": "Бу бетни кёрюр ючюн сиз системагъа тергеу джазыуугъуз (аккаунтугъуз) бла кирирге керексиз.",
        "undo-failure": "Бир-бирине келишмегени себебли, тюрлениу ызына алынамады.",
        "undo-norev": "Болмагъаны неда кетерилгени ючюн, тюрлениу ызына алыналлыкъ тюлдю.",
        "undo-summary": "$1 тюрлениу [[Special:Contributions/$2|$2]] ([[User talk:$2|сюзюу]]) ызына алынды.",
-       "cantcreateaccounttitle": "Акууант къурар мадар джокъду",
        "cantcreateaccount-text": "Бу IP-адресден ('''$1''') хайырланыучу къошулуу, [[User:$3|$3]] джанындан тыйылгъанды.\n\n\n$3 джанындан берилген сылтау: ''$2''",
        "viewpagelogs": "Бу бетни журналларына къара",
        "nohistory": "Бу бетни тюрлениулерини тарихи джокъду.",
        "activeusers-intro": "Бу, ахыр $1 {{PLURAL:$1|1=кюнде|кюнде}} къаллайда болсун ишлетме кёргюзген къошлуучуланы тизмесиди.",
        "activeusers-count": "Ахыр {{PLURAL:$3|1=кюнде|$3 кюнде}} $1 {{PLURAL:$1|1=тюрлендириу|тюрлендириу}}",
        "activeusers-from": "Бу бла башланнган къошлуучуланы кёргюз:",
-       "activeusers-hidebots": "Ботланы джашыр",
-       "activeusers-hidesysops": "Администраторланы джашыр",
        "activeusers-noresult": "Къошлуучу табылмады.",
        "listgrouprights": "Къошулуучуланы къауумуну хакълары",
        "listgrouprights-summary": "Тюбюндеги бу викиде танылгъан къошулуучу къауумланы эмда аланы хакъларыны тизмеси.\nЭнчи хакъла бла байламлы [[{{MediaWiki:Listgrouprights-helppage}}|асламыракъ билги]] болургъа болур.",
        "htmlform-chosen-placeholder": "Вариантны сайлагъыз",
        "htmlform-cloner-create": "Энтда къош",
        "htmlform-cloner-delete": "Кетер",
-       "sqlite-has-fts": "$1 толу текст излеуню хайырландыргъан",
-       "sqlite-no-fts": "$1 толу текст излеуню хайырландыра билмеген",
        "logentry-delete-delete": "$3 бетни $1 {{GENDER:$2|кетерди}}",
        "logentry-delete-restore": "$3 бетни $1 {{GENDER:$2|ызына салды}}",
        "revdelete-content-hid": "ичиндегиси джашырылыбды",
index 3586530..7d67c36 100644 (file)
        "yourpasswordagain": "Noch ens dat Passwood",
        "createacct-yourpasswordagain": "Noch ens dat Paßwoot",
        "createacct-yourpasswordagain-ph": "Jivv_et Paßwoot norrens en!",
-       "remembermypassword": "Op Duur aanmelde (hält {{PLURAL:$1|för eine Daach|bes op $1 Dääsch|bloß för hück}})",
        "userlogin-remembermypassword": "Op Duur enlogge",
        "userlogin-signwithsecure": "Verschlößeld enlogge",
        "cannotloginnow-title": "Ennlogge jeiht jrahd nit",
        "botpasswords-label-resetpassword": "Paßwoot neu säze",
        "botpasswords-label-grants": "Aanwändba Rääschte:",
        "botpasswords-help-grants": "Jehde Ennwellejong deihjd e Räsch wigger jävve, wad enem Metmaacher övver singe Zohjang alld zohschteihjt.\nLoor op de Sigg met de [[Special:ListGrants|Tabäll met de Rääschde un Enwellejonge]], wann De mih weße wells.",
-       "botpasswords-label-restrictions": "Beschränkonge:",
        "botpasswords-label-grants-column": "Zohjelohße",
        "botpasswords-bad-appid": "„$1“ es keine jölltejje Nahme för ene Bot.",
        "botpasswords-insert-failed": "Kunnt keine Bot mem Nahme „$1“ derbei donn. Wohr velleijsch ald doh.",
        "passwordreset-emailerror-capture2": "{{GENDER:$2|Däm|Däm|Däm Metmaacher|Dä|Däm}} $1 en <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"„de eläktrohnesche Poß“\">e-mail</i> ze scheke hät nit jeflupp: {{PLURAL:$3|Dä Nahme vum Metmaacher un dat Paßwood|Di Leß met dä Nahme un Paßwööter|Nix weed}} heh noh aanjezeijsch.",
        "passwordreset-nocaller": "Entärne Fähler: Ene Oprohfer moß aanjejovve sin.",
        "passwordreset-nosuchcaller": "Entärne Fähler: Dä Oprohfer „$1“ känne mer nit.",
-       "passwordreset-invalideamil": "Dat es en onjöltejje Addräß fö de <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"„de eläktrohnesche Poß“\">e-mail</i>",
+       "passwordreset-invalidemail": "Dat es en onjöltejje Addräß fö de <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"„de eläktrohnesche Poß“\">e-mail</i>",
        "passwordreset-nodata": "Keine Metmaacher_Nahme un kein Adräß för de <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"„de eläktrohnesche Poß“\">e-mail</i> es aanjejovve woode.",
        "changeemail": "Donn en Adräß för de <i lang=\"en\">e-mail</i> ändere udder fott schmiiße",
        "changeemail-header": "Donn heh dat Fommulaa ußfölle, öm Ding Adräß för de <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"„de eläktrohnesche Poß“\">e-mail</i> ze ändere. Wann De en Adräß loß wähde wells, maach dat Fäld läddesch, ih dat De dat Fommolaa loß scheks.",
        "activeusers-intro": "Dat heh es en Leß met dä Metmaacher, di {{PLURAL:$1|zick jäßtere|en de läzde $1 Dääsch|hück}} ööhnsjät jemaat han.",
        "activeusers-count": "{{PLURAL:$1|ein Änderong|$1 Änderonge|kein Änderonge}} {{PLURAL:$3|aam lezde Daach|en de lezte $3 Dääsch|hück}}",
        "activeusers-from": "Donn de Metmaacher zeije aff:",
-       "activeusers-hidebots": "De Bots fott lohße",
-       "activeusers-hidesysops": "De Wiki_Köbesse fott lohße",
        "activeusers-noresult": "Kein Metmaacher jefonge.",
        "activeusers-submit": "Lohß jonn!",
        "listgrouprights": "Metmaacher_Jroppe-Rääschte",
        "htmlform-title-not-exists": "$1 jidd_et nit.",
        "htmlform-user-not-exists": "<strong>$1</strong> jidd_et nit.",
        "htmlform-user-not-valid": "<strong>$1</strong> es keine jöltejje Nahme för ene Metmaacher.",
-       "sqlite-has-fts": "Version $1 (un kann en janze Täxte söhke)",
-       "sqlite-no-fts": "Version $1 (kann ävver nit en janze Täxte söhke)",
        "logentry-delete-delete": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät di Sigg „$3“ fottjeschmeße.",
        "logentry-delete-restore": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät di vörmohls fottjeschmeße Sigg „$3“ wider zeröck jehollt.",
        "logentry-delete-event": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät för {{PLURAL:$5|eine Logboochendraach|$5 Logboochendrääsh|keine Logboochendraach}} vun dä Sigg „$3“ $4.",
        "feedback-external-bug-report-button": "Donne ene Fähler mällde, ene Wonsch för en Verbäßerong ennreische, udder anndere täschneche Idee opbränge.",
        "feedback-dialog-title": "En Rökmäldong jävve",
        "feedback-dialog-intro": "Dat Fommolaa kam_mer för en Rökmäldong bruche. Di kütt zesamme met Dingem Metmaacher_Nahme op di Sigg „$1“.",
-       "feedback-error-title": "Fähler",
        "feedback-error1": "Fähler: dat <i lang=\"en\">API</i> säät jät, wat mer nit kenne",
        "feedback-error2": "Fähler: de Sigg ze ändere es donävve jejange",
        "feedback-error3": "Fähler: dat <i lang=\"en\">API</i> joov kein Antwoot",
index fac8e0b..d0d2336 100644 (file)
@@ -37,6 +37,7 @@
        "tog-watchdefault": "Rûpelên min guhertin û dosyeyên min barkirin, têxe nav lîsteya min a şopandinê",
        "tog-watchmoves": "Rûpel û dosyeyên ku ez navên wan diguherînim, têxe nav lîsteya min a şopandinê",
        "tog-watchdeletion": "Rûpel û dosyeyên min jêbirin, têxe nav lîsteya min a şopandinê",
+       "tog-watchuploads": "Dosyeyên ku ez bar dikim tevlî lîsteya min a şopandinê bike",
        "tog-minordefault": "Her guhertinekê weke guhertineke biçûk nîşan bide",
        "tog-previewontop": "Pêşdîtina gotarê li jorî cihê guherandinê nîşan bide",
        "tog-previewonfirst": "Li cem guherandinê hertim yekemîn pêşdîtinê nîşan bide",
        "newwindow": "(di pencereyeke din de wê were nîşandan)",
        "cancel": "Betal bike",
        "moredotdotdot": "Bêhtir...",
-       "morenotlisted": "Ev lîste nehatiye temamkirin.",
+       "morenotlisted": "Dibe ku ev lîste neqediyaye.",
        "mypage": "Rûpela min",
        "mytalk": "Gotûbêja min",
        "anontalk": "Gotûbêj",
        "passwordreset-emailtitle": "Hûragahiyên hesab li ser {{SITENAME}}",
        "passwordreset-emailelement": "Navê bikarhêner:\n$1\n\nŞîfreya niha:\n$2",
        "passwordreset-emailsentemail": "E-nameyeke bibîrxistinê hate şandin.",
-       "passwordreset-invalideamil": "Navnîşana enameyê ya nederbasdar",
+       "passwordreset-invalidemail": "Navnîşana enameyê ya nederbasdar",
        "changeemail": "Navnîşana enameya xwe biguherîne an rabike",
        "changeemail-oldemail": "Navnîşana e-nameya niha:",
        "changeemail-newemail": "Navnîşana e-nameya nû:",
index 6b316da..e4f1e44 100644 (file)
        "yourpasswordagain": "Jynnskrifewgh agas ger tremena arta:",
        "createacct-yourpasswordagain": "Afydhyewgh an ger tremena",
        "createacct-yourpasswordagain-ph": "Entrewgh an ger tremena arta",
-       "remembermypassword": "Perthi kov a'm omgelmi war an jynn amontya-ma (rag $1 {{PLURAL:$1|dydh}} dhe'n moyha)",
        "userlogin-remembermypassword": "Perthi kov a'm omgelmi",
        "userlogin-signwithsecure": "Devnydhya junyans diogel",
        "yourdomainname": "Agas tiredh:",
        "passwordreset-email": "Trigva ebost:",
        "passwordreset-emailtitle": "Manylyon agas akont war {{SITENAME}}",
        "passwordreset-emailsentemail": "Ebost dassettya ger tremena re beu danvenys.",
-       "passwordreset-emailsent-capture": "Ebost dassettya ger tremena re beu danvenys, hag y hyllir y weles a-woles.",
        "changeemail": "Chanjya trigva ebost",
        "changeemail-header": "Chanjya trigva ebost an akont",
        "changeemail-oldemail": "Agas trigva ebost a-lemmyn:",
        "editwarning-warning": "Mar kesowgh an folen ma, hwi a allsa kelli chanjyow gwrys genowgh.\nMars owgh hwi omgelmys, hwi a yll diallosegi an gwarnyans ma yn tregh \"{{int:prefs-editing}}\" agas dewisyow.",
        "undo-success": "Y hyllir diswul an chanj-ma.\nCheckyewgh mar pleg an kehevelyans a-woles rag gwirya bos hemma an pyth a vynnowgh, hag ena gwithewgh an chanjyow a-woles rag gorfenna diswul an chanj.",
        "undo-summary": "Amendyans $1 gans [[Special:Contributions/$2|$2]] ([[User talk:$2|keskows]]) diswrys",
-       "cantcreateaccounttitle": "Ny yllir gwruthyl an akont",
        "viewpagelogs": "Gweles kovnotennow an folen ma",
        "currentrev": "Amendyans diwettha",
        "currentrev-asof": "An amendyans diwettha a-dhia $1",
        "activeusers": "Rol a dhevnydhyoryon vyw",
        "activeusers-intro": "Hemm yw rol a dhevnydhyoryon re wrug gwrians war an wiki-ma y'n $1 {{PLURAL:$1|jydh|dydh}} diwettha.",
        "activeusers-count": "$1 {{PLURAL:$1|wrians|gwrians}} y'n {{PLURAL:$3|jydh|$3 dydh}} diwettha",
-       "activeusers-hidebots": "Kudha botow",
-       "activeusers-hidesysops": "Kudha menystroryon",
        "listgrouprights-members": "(rol eseli)",
        "emailuser": "Ebostya an devnydhyer-ma",
        "defemailsubject": "Ebost danvenys dre {{SITENAME}} gans an devnydhyer \"$1\"",
index ee793ef..171a911 100644 (file)
        "listusers-blocked": "(obstructus)",
        "activeusers": "Index usorum activorum",
        "activeusers-count": "{{PLURAL:$1|una recensio {{PLURAL:$3|hodie|his $3 diebus}} facta|$1 recensiones {{PLURAL:$3|hodie|his $3 diebus}} factae}}",
-       "activeusers-hidebots": "Celare automata",
-       "activeusers-hidesysops": "Celare magistratus",
        "activeusers-noresult": "Nullus usor inventus.",
        "listgrouprights": "Gregum usorum potestates",
        "listgrouprights-group": "Grex",
index 4f3f53a..db6cd9f 100644 (file)
        "yourpasswordagain": "Entra de muevo el kóddiche:",
        "createacct-yourpasswordagain": "Konfirme contrasenya",
        "createacct-yourpasswordagain-ph": "Eskrive la kontrasenya de muevo",
-       "remembermypassword": "Acódrate de mi entrada de kullaneador en este navigador (por un maksimum de {{PLURAL:$1|día|días}})",
        "yourdomainname": "Tu dominyo:",
        "password-change-forbidden": "No se puede kambiar contrasenyas en este viki.",
        "login": "Entrar",
        "post-expand-template-inclusion-category": "Hojas con sovrecarga de şablones",
        "post-expand-template-argument-warning": "'''Aviso:''' Esta oja tiene kuanto menos un kampo enel xablon muy lungo.\nEste o estos kampos no van ser amostrados",
        "post-expand-template-argument-category": "Ojas ke tienen xablones kon parametros no uzados",
-       "cantcreateaccounttitle": "No se puede krear el kuento",
        "viewpagelogs": "Ver los registros de esta hoja",
        "currentrev": "Enderechamiento d'al cavo",
        "currentrev-asof": "Enderechamiento dalcavo de $2 a las $3 la ora",
        "linksearch-line": "Atamiento para $1 en la hoja $2",
        "listusers-submit": "Amostrar",
        "listusers-noresult": "No se topo usuario",
-       "activeusers-hidebots": "Eskonder bots",
        "activeusers-noresult": "No se toparon usuario.",
        "listgrouprights": "Derechos del grupo de usuario",
        "listgrouprights-group": "Grupo",
index 7e2c967..08cc8b0 100644 (file)
        "passwordreset-emaildisabled": "D'E-Mail-Funktioune goufen op dëser Wiki ausgeschalt.",
        "passwordreset-username": "Benotzernumm:",
        "passwordreset-domain": "Domaine:",
-       "passwordreset-capture": "D'Mail kucken?",
-       "passwordreset-capture-help": "Wann Dir dës Këscht ukräizt, gëtt de Mail (mam temporäre Passwuert) Iech gewisen an dem Benotzer geschéckt.",
        "passwordreset-email": "E-Mail-Adress:",
        "passwordreset-emailtitle": "Detailer vum Benotzerkont op{{SITENAME}}",
        "passwordreset-emailtext-ip": "Iergendee mat der IP-Adress $1, wahrscheinlech Dir selwer, huet d'Zrécksetze vun Ärem Passwuert op {{SITENAME}} gefrot ($4). {{PLURAL:$3|De Benotzerkont ass|D'Benutzerkonte si}} mat dëser E-Mail-Adress verbonn:\n\n$2\n\n{{PLURAL:$3|Dëst temporärt Passwuert leeft|Dës temporär Passwierder lafe}} bannent {{PLURAL:$5|engem Dag|$5 Deeg}} of.\nDir sollt Iech aloggen an een neit Passwuert festleeën. Wann een Aneren déi Ufro gemaach huet oder Dir Iech erëm un Äert Passwuert erënnere kënnt an et net ännere wëllt, kënnt Dir dës Noriicht ignoréieren an Äert aalt Passwuert weider benotzen.",
        "passwordreset-emailelement": "Benotzernumm: \n$1\n\nTemporärt Passwuert: \n$2",
        "passwordreset-emailsentemail": "Wann dës E-Mailadress mat Ärem Benotzerkont assoziéiert ass, da gëtt Eng E-Mail fir d'Passwuert zréckzesetze geschéckt.",
        "passwordreset-emailsentusername": "Wann eng E-Mailadress mat dësem Benotzernumm associéiert ass, da gëtt Eng E-Mail fir d'Passwuert zeréckzesetze geschéckt.",
-       "passwordreset-invalideamil": "Net-valabel E-Mail-Adress",
+       "passwordreset-invalidemail": "Net-valabel E-Mail-Adress",
        "passwordreset-nodata": "Et gouf weder e Benotzernumm nach e Passwuert uginn",
        "changeemail": "E-Mail-Adress änneren oder ewechhuelen",
        "changeemail-header": "Fëllt dëse Formulaire aus fir Är E-Mailadress z'änneren.  Wann Dir d'Verbindung tëscht Ärer E-Mailadress an Ärem Benotzerkont ewechhuele wëllt, da loosst d'Feld e-Mailadress eidel wann Dir de Formulaire späichert.",
        "right-siteadmin": "Datebank spären an d'Spär ophiewen",
        "right-override-export-depth": "Säiten exportéieren inklusiv de verlinkte Säite bis zu enger Déift vu 5",
        "right-sendemail": "Anere Benotzer E-Maile schécken",
-       "right-passwordreset": "Maile vum Zrécksetze vum Passwuert weisen",
        "grant-group-page-interaction": "Mat Säiten interagéieren",
        "grant-group-watchlist-interaction": "Mat Ärer Iwwerwaachungslëscht interagéieren",
        "grant-group-email": "E-Mail schécken",
        "apisandbox-alert-field": "De wäert vun dësem Feld ass net valabel.",
        "apisandbox-continue": "Virufueren",
        "apisandbox-continue-clear": "Eidel maachen",
+       "apisandbox-param-limit": "Gitt <kbd>max</kbd> fir déi maximal Limite ze benotzen.",
        "booksources": "Bicherreferenzen",
        "booksources-search-legend": "No Bicherreferenze sichen",
        "booksources-search": "Sichen",
        "activeusers-count": "$1 {{PLURAL:$1|Aktioun|Aktiounen}} {{PLURAL:$3|gëschter|an de leschten $3 Deeg}}",
        "activeusers-from": "Benotzer weisen, ugefaange bei:",
        "activeusers-groups": "Benotzer weisen déi zu de Gruppe gehéieren:",
+       "activeusers-excludegroups": "Benotzer ausschléissen déi zu de Gruppe gehéieren:",
        "activeusers-noresult": "Keng Benotzer fonnt.",
        "activeusers-submit": "Aktiv Benotzer weisen",
        "listgrouprights": "Rechter vun de Benotzergruppen",
        "newimages-legend": "Filter",
        "newimages-label": "Numm vum Fichier (oder en Deel dovun):",
        "newimages-showbots": "Vu Botten eropgeluede Fichiere weisen",
+       "newimages-hidepatrolled": "Nogekuckt Fichiere verstoppen",
        "noimages": "Keng Biller fonnt.",
        "ilsubmit": "Sichen",
        "bydate": "no Datum",
        "tags-edit-add": "Dës Markéierungen (tags) dobäisetzen:",
        "tags-edit-remove": "Dës Markéierungen (tags) ewechhuelen:",
        "tags-edit-remove-all-tags": "(all Markéierungen ewechhuelen)",
+       "tags-edit-chosen-placeholder": "E puer Markéierungen (tags) eraussichen",
        "tags-edit-chosen-no-results": "Keng Markéierunge fonnt déi passen",
        "tags-edit-reason": "Grond:",
        "tags-edit-revision-submit": "Ännerungen op {{PLURAL:$1|dës Versioun|$1 Versiounen}} uwennen",
        "mediastatistics-summary": "Statistike vun den Type vun den eropgeluedene Fichieren. Dobäi gëtt nëmmen déi lescht Versioun vun engem Fichier gezielt, al oder geläscht Versioune vu Fichiere sinn ausgeschloss.",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 Byte|$1 Byten}} ($2; $3%)",
        "mediastatistics-bytespertype": "Gesamtgréisst vun de Fichiere vun dësem Abschnitt:  {{PLURAL:$1|$1 Byte|$1 Bytes}} ($2; $3%).",
-       "mediastatistics-allbytes": "Gesamtgréisst vun alle Fichieren: {{PLURAL:$1|$1 Byte|$1 Bytes}} ($2; $3%).",
+       "mediastatistics-allbytes": "Gesamtgréisst vun alle Fichieren: {{PLURAL:$1|$1 Byte|$1 Bytes}} ($2).",
        "mediastatistics-table-mimetype": "MIME-Typ",
        "mediastatistics-table-extensions": "Méiglech Erweiderungen",
        "mediastatistics-table-count": "Zuel vun de Fichieren",
        "special-characters-group-thai": "Thai",
        "special-characters-group-lao": "Lao",
        "special-characters-group-khmer": "Khmer",
+       "special-characters-title-endash": "en dash",
+       "special-characters-title-emdash": "em dash",
        "special-characters-title-minus": "Minus-Zeechen",
        "mw-widgets-dateinput-no-date": "Keen Datum erausgesicht",
        "mw-widgets-dateinput-placeholder-day": "JJJJ-MM-DD",
        "linkaccounts": "Benotzerkonte verbannen",
        "linkaccounts-success-text": "De Benotzerkont gouf verlinkt.",
        "linkaccounts-submit": "Benotzerkonte verbannen",
+       "unlinkaccounts": "Benotzerkonten trennen",
+       "unlinkaccounts-success": "De Benotzerkont gouf getrennt.",
        "userjsispublic": "DEnkt drun: Op JavaScript-Ënnersäite solle keng vertraulech Informatioune stoe well se vun anere Benotzer kënne gesi ginn.",
        "restrictionsfield-badip": "Net valabel IP-Adress oder Beräich: $1",
        "restrictionsfield-label": "Zougeloossen IP-Beräicher:",
index dd1e9d4..3a8e61b 100644 (file)
        "yourname": "Nom de usor:",
        "yourpassword": "Sinia de entra:",
        "yourpasswordagain": "Retape la sinia:",
-       "remembermypassword": "Memora me sinia de entra a esta computador (for a maximum of $1 {{PLURAL:$1|day|days}})",
        "yourdomainname": "Tu domina:",
        "login": "Identifia",
        "nav-login-createaccount": "Sinia per entra",
index af7f9be..7afd6f8 100644 (file)
        "yourname": "Ery'obwa memba",
        "yourpassword": "Ekigambo ekikuumi",
        "yourpasswordagain": "Ddamu ekigambo ekikuumi",
-       "remembermypassword": "Tereka ekigambo kyange ekikuumi ku kompyuta eno (okumala {{PLURAL:$1|olunaku|ennaku ezitasukka mu}} $1)",
        "yourdomainname": "Linnya lya twale lya kayungirizi lyo:",
        "externaldberror": "Waliwo kiremya mu ggwanika lya data ekozesebwa okukakasa bamemba oba tokkirizibwa okukyusa ku akawunti yo ey'awalala.",
        "login": "Yingira",
index 8cc7e7d..a82bd16 100644 (file)
        "activeusers-intro": "Dit is 'n lies mit gebroekers die aktief zeen gewaes in de aafgeloupe {{PLURAL:$1|daag|$1 daag}}.",
        "activeusers-count": "$1 {{PLURAL:$1|bewèrking|bewèrkinger}} inne {{PLURAL:$3|lèsten daag|lès $3 daag}}",
        "activeusers-from": "Tuin gebroekers vanaaf:",
-       "activeusers-hidebots": "Verberg bots",
-       "activeusers-hidesysops": "Verberg admins",
        "activeusers-noresult": "Gein gebroekers gevónje.",
        "listgrouprights": "Rechte van gebroekersgróppe",
        "listgrouprights-summary": "Op dees pazjena sjtaon de gebroekersgróppe in deze wiki besjreve, mit zien biebehurende rechte.\nInfermasie daoreuver èn de individueel rechter vinjs te [[{{MediaWiki:Listgrouprights-helppage}}|hie]].",
index dd2620b..c8a107c 100644 (file)
        "templatepage": "Vizualizza o modello",
        "viewhelppage": "Vizualizza a paggina d'agiutto",
        "categorypage": "Veddi a paggina da categoria",
-       "viewtalkpage": "Veddi o ciæto",
+       "viewtalkpage": "Amia a paggina de discuscion",
        "otherlanguages": "In âtre lengoe",
        "redirectedfrom": "(Rendirissou da $1)",
        "redirectpagesub": "Paggina de rindirissamento",
        "nstab-category": "Categorîa",
        "mainpage-nstab": "Paggina prinçipâ",
        "nosuchaction": "No se poeu",
-       "nosuchactiontext": "L'açion specificâ inta URL a no l'è vallida.\nO che t'hæ scrito mâ, o che donque l'ea sbaliou o colegamento.\nO magara gh'è 'na cammoa into software doeuviou da {{SITENAME}}.",
+       "nosuchactiontext": "L'açion specificâ inta URL a no l'è vallida.\nÒ che t'hæ scrito mâ, ò che donque l'ea sbaliou l'ingancio.\nÒ magara gh'è 'na cammoa into software dœuviou da {{SITENAME}}.",
        "nosuchspecialpage": "Sta paggina speciale a no gh'è",
        "nospecialpagetext": "<strong>A paggina speciale domandâ a no l'è stæta riconosciua.</strong>\n\nA lista de paggine speciale vallide a se treuva in [[Special:SpecialPages|Lista de paggine speciale]].",
        "error": "Errô",
        "yourpasswordagain": "Riscrivi a pòula segrétta:",
        "createacct-yourpasswordagain": "Conferma a password",
        "createacct-yourpasswordagain-ph": "Conferma a password un'atra votta",
-       "userlogin-remembermypassword": "Mantegnime collegou",
+       "userlogin-remembermypassword": "Mantegnime conligou",
        "userlogin-signwithsecure": "Adoeuvia una conescion segua",
        "cannotlogin-title": "Imposcibbile intrâ",
        "cannotlogin-text": "L'accesso o no l'è poscibbile.",
        "cannotloginnow-text": "Quande s'adoeuvia $1 no se poeu intrâ.",
        "cannotcreateaccount-title": "Imposcibbile creâ di utençe",
        "cannotcreateaccount-text": "A creaçion diretta de l'utença a no l'è attivâ insce questo wiki.",
-       "yourdomainname": "Indirisso do scito:",
+       "yourdomainname": "Adresso do scito:",
        "password-change-forbidden": "No ti peu cangiâ poula segretta in questa wiki.",
        "externaldberror": "Gh'è stæto un aro co-o server de aotenticaçion esterno, oppû no ti g'hæ i aotorizzaçioin pe aggiornâ o to accesso esterno.",
        "login": "Intra",
        "passwordreset-emaildisabled": "E funçionalitæ de posta elettronnica son stæte disabilitæ in sce sta wiki.",
        "passwordreset-username": "Nomme utente",
        "passwordreset-domain": "Dominnio:",
-       "passwordreset-capture": "Visualizzâ o contegnuo do messaggio e-mail?",
-       "passwordreset-capture-help": "Se ti seleçion-i sta casella, l'e-mail (co-a poula segretta temporannia), o saiâ mostròu a ti, oltre ch'a ese inviòu a l'utente.",
        "passwordreset-email": "Addresso e-mail:",
        "passwordreset-emailtitle": "Dettaggi account sciu {{SITENAME}}",
        "passwordreset-emailtext-ip": "Quarcun (probabilmente ti, con adresso IP $1) o l'ha domandòu l'invio de 'na neuva poula segretta per l'accesso a {{SITENAME}} ($4). {{PLURAL:$3|L'utente associòu|I utenti associæ}} a sto addresso e-mail son:\n\n$2\n\n{{PLURAL:$3|Questa poula segretta temporannia a descazziâ|Queste poule segrette temporannie descazzian}} doppo {{PLURAL:$5|un giorno|$5 giorni}}.\nTi doviesci accede e çerne una neuva poula segretta oua. \n\nSe no t'ê stæto ti a fâ a domanda, ò se ti t'hæ aregordòu a poula segretta originale e no ti veu ciù cangiâla, ti peu ignorâ sto messaggio e continuâ a deuviâ a teu vegia poula segretta.",
        "passwordreset-emailelement": "Nomme utente: \n$1\n\nPoula segretta temporannia: \n$2",
        "passwordreset-emailsentemail": "Se questo addresso de posta elettronnica o l'è associou a-a teu utença, alloa saiâ inviou un'e-mail pe rempostâ a poula segretta.",
        "passwordreset-emailsentusername": "Se gh'è un adreçço de posta elettronica associou con questo nomme utente, alloa saiâ inviou una email pe rempostâ a password.",
-       "passwordreset-emailsent-capture2": "{{PLURAL:$1|L'|E }}e-mail de rempostaçion da password {{PLURAL:$1|a l'è stæta inviâ|son stæte inviæ}}. {{PLURAL:$1|O nomme|L'elenco di nommi}} utente e password o l'è mostrou chì.",
-       "passwordreset-emailerror-capture2": "Invio d'e-mail {{GENDER:$2|a l'utente}} non ariescio: $1. {{PLURAL:$3|O nomme|L'elenco di nommi}} utente e password o l'è mostrou chì de sotta.",
        "passwordreset-nocaller": "Un chi ciamma ti g'hæ da dâlo",
        "passwordreset-nosuchcaller": "O ciamante o no l'existe: $1",
        "passwordreset-ignored": "A reimpostaçion da password a no l'è stæta gestia. Foscia n'è stæto configuou nisciun provider ?",
-       "passwordreset-invalideamil": "Addresso e-mail non vallido",
+       "passwordreset-invalidemail": "Addresso e-mail non vallido",
        "passwordreset-nodata": "No è stæto fornio ni un nomme utente ni un adreçço de posta elettronica",
        "changeemail": "Cangia o elimmina l'adresso e-mail",
        "changeemail-header": "Completa sto formulaio pe cangiâ o to adresso e-mail. Se ti veu rimeuve l'associaçion de quasesegge addresso e-mail da-a teu utensa, lascia io neuvo addresso e-mail veuo quande ti invii o formulaio.",
        "image_sample": "Exempio.jpg",
        "image_tip": "Incorpora file",
        "media_sample": "Exempio.ogg",
-       "media_tip": "Colegaménto a file moltimediâ",
+       "media_tip": "Ingancio a file moltimediâ",
        "sig_tip": "Firma con dæta e ôa",
        "hr_tip": "Linnia orizontâ",
        "summary": "Oggetto:",
        "previewnote": "'''Questa chì a l'è solo 'n'anteprimma; i cangiamenti no son ancon stæti sarvæ!'''",
        "continue-editing": "Vanni a l'area de modiffica",
        "previewconflict": "L'anteprimma a mostra o scrito presente inta casella de modiffica de d'ato coscì comme o l'apaiâ se ti çerni de sarvalo òua.",
-       "session_fail_preview": "Spiaxenti. No è stæto poscibile elaboâ a modifica perché son andæti persci i dæti relativi a-a sescion.\n\nFoscia t'ê stæto disconnesso. <strong>Verifica d'ese ancon collegou e riproeuva</strong>.\nSe o problema o persciste, ti poeu provâ a [[Special:UserLogout|scollegate]] e effettuâ un nuoeuvo accesso, controllando che o to browser o l'açette i cookie da questo scito.",
+       "session_fail_preview": "Spiaxenti. No l'è stæto poscibile elaboâ a modiffica pe via da pèrdia di dæti relativi a-a sescion.\n\nFoscia t'ê stæto disconesso. <strong>Veifica d'ese ancon conligou e prœuva torna</strong>.\nSe o problema o persciste, ti pœu provâ a [[Special:UserLogout|scollegate]] e effetoâ un nœuvo accesso, controlando che o to navegatô o l'açette i cookie da questo scito.",
        "session_fail_preview_html": "Spiaxenti. No è stæto poscibbile elaboâ a modifica perché son anæti persci i dæti relativi a-a sescion.\n\n<em>Scicomme {{SITENAME}} o g'ha de l'HTML sgroeuzzo attivou e gh'è stæto una perdia di dæti da sescion, l'anteprimma a l'è ascosa comme precaoçion contra i attacchi JavaScript.</em>\n\n<strong>Se se tratta de un normale tentativo d'anteprimma, riproeuva.</strong> \nSe o problema o persciste, ti poeu provâ a [[Special:UserLogout|scollegati]] e effettuâ un noeuvo accesso, controllando che o to browser o l'açette i cookie da questo scito.",
        "token_suffix_mismatch": "'''A modiffica a no l'è stæta sarvâ perché o to client o l'ha mostrou de gestî in moddo errou i carattei de puntezatua into token associou a-a mæxima. Pe evitâ una poscibile corruçion do testo da pagina, l'è stæto refuou l'intrega modiffica. Questa scituaçion a poeu veificase, de votte, quande s'adoeuvia di serviççi de proxy anonnimi via web che presentan di bug.'''",
        "edit_form_incomplete": "'''De parte do formulaio de modiffica n'han razonto o server; controlla che e modiffiche seggian intatte e ripreuva.'''",
        "right-siteadmin": "Abbrocca e sbrocca o database",
        "right-override-export-depth": "Esporta e paggine includendo e pagine collegæ scin a 'na profonditæ de 5",
        "right-sendemail": "Manda de email a di atri utenti",
-       "right-passwordreset": "Vedde i messaggi de rempostaçion da password",
        "right-managechangetags": "Crea e attiva/disattiva i [[Special:Tags|etichette]]",
        "right-applychangetags": "Apprica di [[Special:Tags|etichette]] a-e proppie modiffiche",
        "right-changetags": "Azonze e leva de specifiche [[Special:Tags|etichette]] insce scingole verscioin o voxe de registro",
        "grant-generic": "Pacchetto diritti \"$1\"",
        "grant-group-page-interaction": "Interagisce co-e paggine",
        "grant-group-file-interaction": "Interagisce co-i file murtimediali",
-       "grant-group-watchlist-interaction": "Interagisce con i to oservæ speçiali",
+       "grant-group-watchlist-interaction": "A l'interagisce co-i to oservæ speciali",
        "grant-group-email": "Invia email",
        "grant-group-high-volume": "Esegue açioin mascive",
        "grant-group-customization": "Personalizzaçion e preferençe",
        "recentchangeslinked-feed": "Cangiamenti correlæ",
        "recentchangeslinked-toolbox": "Cangiaménti corelæ",
        "recentchangeslinked-title": "Modiffiche correlæ a \"$1\"",
-       "recentchangeslinked-summary": "Sta pàgina a fa védde i cangiaménti ciù reçenti a-e pàgine colegæ a questa.\nE pàgine che t'æ in oservaçion inti [[Special:Watchlist|oservæ speciâli]] son in '''grascetto'''.",
+       "recentchangeslinked-summary": "Sta paggina a fa védde i cangiaménti ciù reçenti a-e pàggine conligæ a questa.\nE pàggine che t'hæ in oservaçion inti [[Special:Watchlist|oservæ speciâli]] son in '''grascetto'''.",
        "recentchangeslinked-page": "Nómme da pàgina:",
-       "recentchangeslinked-to": "Fanni védde sôlo i cangiaménti a-e pàgine colegæ a-a pàgina specificâ",
+       "recentchangeslinked-to": "Fanni védde sôlo i cangiaménti a-e pàggine conligæ a-a pàggina specificâ",
        "recentchanges-page-added-to-category": "[[:$1]] azonto a-a categoria",
        "recentchanges-page-added-to-category-bundled": "[[:$1]] azonta a-a categoria, [[Special:WhatLinksHere/$1|questa pagina a l'è inclusa a l'interno di atre pagine]]",
        "recentchanges-page-removed-from-category": "[[:$1]] rimosso da-a categoria",
        "uploaded-script-svg": "Trovou elemento de script \"$1\" into file caregou in formato SVG.",
        "uploaded-hostile-svg": "Trovou CSS no seguo inte l'elemento de stile do file in formato SVG caregou.",
        "uploaded-event-handler-on-svg": "Impostâ i attributi de gestion di eventi <code>$1=\"$2\"</code> no l'è consentio inti file SGV",
-       "uploaded-href-attribute-svg": "i attributi href inti file SVG poeuan collegâse solo verso e destinaçioin http:// o https://, trovou <code>&lt;$1 $2=\"$3\"&gt;</code>.",
+       "uploaded-href-attribute-svg": "i attributi href inti file SVG pœuan ese inganciæ solo ch'a-e destinaçioin http:// o https://, trovou <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploaded-href-unsafe-target-svg": "Trovou href a dæti non segui: destinaçion URI <code>&lt;$1 $2=\"$3\"&gt;</code> caregou into file SVG",
        "uploaded-animate-svg": "Trovou o tag \"animate\" ch'o poriæ cangiâ href, doeuviando l'attributo \"from\" <code>&lt;$1 $2=\"$3\"&gt;</code> into file SVG caregou.",
        "uploaded-setting-event-handler-svg": "A configuaçion di attributi pe-o gestô di eventi a l'è bloccâ, trovou <code>&lt;$1 $2=\"$3\"&gt;</code> into file SVG caregou.",
        "imagelinks": "Ûzo do file",
        "linkstoimage": "{{PLURAL:$1|A segoente pàgina a contegne|E segoenti $1 pàgine contegnan}} colegaménti a-o file:",
        "linkstoimage-more": "Ciù de $1 {{PLURAL:$1|pagina aponta|pagine apontan}} a questo file.\nA seguente lista a mostra {{PLURAL:$1|a primma paggina ch'a l'aponta|e primme $1 paggine ch'apontan}} a sto file.\nL'è disponibile un [[Special:WhatLinksHere/$2|elenco completo]].",
-       "nolinkstoimage": "No gh'è nisciûnn-a pàgina collegâ con 'sto file.",
+       "nolinkstoimage": "No gh'è nisciun-a paggina inganciâ a sto file.",
        "morelinkstoimage": "Vixualizza [[Special:WhatLinksHere/$1|di atri inganci]] a questo file.",
        "linkstoimage-redirect": "$1 (rendriççamento file) $2",
        "duplicatesoffile": "{{PLURAL:$1|O seguente file o l'è un dupricou|I seguenti $1 file son di dupricæ}} de questo file ([[Special:FileDuplicateSearch/$2|urteioî detaggi]]):",
        "mimetype": "Tipo MIME:",
        "download": "scarrega",
        "unwatchedpages": "Paggine non öservæ",
-       "listredirects": "Lista de rindirissamenti",
+       "listredirects": "Lista di rendriççi",
        "listduplicatedfiles": "Lista di file doggi",
        "listduplicatedfiles-summary": "Questo o l'è un elenco di file, donde a verscion ciù reçente de 'n file a l'è un dupricou da verscion ciù reçente de 'n atro file. Se piggia in  conscideraçion solo che i file locali.",
        "listduplicatedfiles-entry": "[[:File:$1|$1]] o g'ha [[$3|{{PLURAL:$2|un duplicou|$2 duplicæ}}]].",
        "pageswithprop-submit": "Vanni",
        "pageswithprop-prophidden-long": "valô testoale longo da propietæ ascoso ($1)",
        "pageswithprop-prophidden-binary": "valô binaio da propietæ ascoso ($1)",
-       "doubleredirects": "Rindirissamenti doggi",
+       "doubleredirects": "Rendriççi doggi",
        "doubleredirectstext": "In questa pagina gh'è elencou e paggine che rendiriççan a di atre paggine de redirect.\nOgni riga a conten i collegamenti a-o primmo e a-o segondo redirect, oltre a-a primma riga de testo do segondo redirect che a l'uso o conten a paggina de destinaçion \"corretta\" a-a quæ doviæ puntâ o primmo redirect ascì.\nI redirect <del>scassæ</del> son stæti corretti.",
        "double-redirect-fixed-move": "[[$1]] o l'è stæto mesciou.\nO l'è stato aggiornou aotomaticamente e oua o l'è un redirect a [[$2]].",
        "double-redirect-fixed-maintenance": "Corretto aotomaticamente o redirect doggio da [[$1]] a [[$2]] into travaggio de manutençion.",
        "double-redirect-fixer": "Correttô di redirect",
        "brokenredirects": "Rindirissamenti sballiæ",
-       "brokenredirectstext": "I rendriççi chì de sotta colegan a de paggine inexistente:",
+       "brokenredirectstext": "I rendriççi chì de sotta apontan a de paggine inexistente:",
        "brokenredirects-edit": "cangia",
        "brokenredirects-delete": "scassa",
        "withoutinterwiki": "Paggine sensa interwiki",
        "ntransclusions": "Doeuviou inte $1 {{PLURAL:$1|paggina|paggine}}",
        "specialpage-empty": "Questa paggina speciale a l'è attualmente voeua.",
        "lonelypages": "Paggine orfane",
-       "lonelypagestext": "E seguente paggine no son incluse ni colegæ a di atre paggine de {{SITENAME}}.",
+       "lonelypagestext": "E seguente paggine no son incluse ni conligæ a di atre paggine de {{SITENAME}}.",
        "uncategorizedpages": "Paggine sensa categorîa",
        "uncategorizedcategories": "Categorîe sensa categorîa",
        "uncategorizedimages": "Immaggini sensa categorîa",
        "unusedimages": "File inutilizæ",
        "wantedcategories": "Categorîe domandæ",
        "wantedpages": "Paggine domandæ",
-       "wantedpages-summary": "Lista de paggine inexistente co-o ciu gran nummero de collegamenti a lô, escludendo e pagine ch'han solo che i rendiriççi che-e collegan. Pe 'n elenco de pagine inexistente che g'han di rendriççi che-e collegan, amia [[{{#special:BrokenRedirects}}|a lista di rendriççi erræ]].",
+       "wantedpages-summary": "Lista de paggine inexistente co-o ciu gran nummero d'inganci a lô, escludendo e pagine inganciæ solo che da di rendriççi. Pe 'na lista de pagine inexistente inganciæ da di rendriççi, amia [[{{#special:BrokenRedirects}}|a lista di rendriççi erræ]].",
        "wantedpages-badtitle": "Tittolo invallido into groppo di risultæ: $1",
        "wantedfiles": "File domandæ",
        "wantedfiletext-cat": "I seguenti file son in doeuvia, ma no existan. I file ospitæ inte di repository esterni porieivan esighe elencæ sciben che existan. Questi fasci poxitivi saian <del>barræ</del>. E pagine che incòrpoan i file che no existan son elencæ in [[:$1]].",
        "ancientpages": "Paggine ciû vëgie",
        "move": "Mescia",
        "movethispage": "Mescia 'sta paggina",
-       "unusedimagestext": "I seguenti file existan ma no son doeuviæ inte nisciun-a paggina.\nNotta che di atri sciti web porieivan ese colegæ a 'n file co-in URL diretto, e coscì o poriæ ese inte sta lista sciuben ch'o segge in doeuvia.",
+       "unusedimagestext": "I seguenti file existan ma no son doeuviæ inte nisciun-a paggina.\nNotta che di atri sciti web porieivan ese conligæ a 'n file co-in URL diretto, e coscì o poriæ ese inte sta lista sciuben ch'o segge in doeuvia.",
        "unusedcategoriestext": "E seguente paggine de categoria existan, sciben che nisciun'atra paggina o categoria a-e doeuvie.",
        "notargettitle": "Dæti mancanti",
        "notargettext": "No t'hæ indicou una pagina o un utente con chi eseguî sta fonçion.",
        "rollbackfailed": "Rollback fallio",
        "rollback-missingparam": "Parammetri obrigatoi mancanti inta recesta.",
        "rollback-missingrevision": "Imposcibile caregâ i dæti da verscion.",
-       "cantrollback": "No se peu tornâ inderê; l'utente ch'o l'ha fæto quelle modiffiche o l'è stæto l'unico contribuente.",
+       "cantrollback": "No se poeu tornâ inderê; l'utente ch'o l'ha fæto quelle modiffiche o l'è stæto l'unico contributô.",
        "alreadyrolled": "No l'è poscibbile annullâ e modiffiche apportæ a-a pagina [[:$1]] da parte de [[User:$2|$2]] ([[User talk:$2|discuscion]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]); un atro utente o l'ha zà modificou a pagina oppù o l'ha effettuou o rollback.\n\nA modifica ciù reçente a.a paggina a l'è stæta apportâ da [[User:$3|$3]] ([[User talk:$3|discuscion]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
        "editcomment": "L'ogetto da modiffica o l'ea: <em>$1</em>.",
        "revertpage": "Annullou e modiffiche de [[Special:Contributions/$2|$2]] ([[User talk:$2|discuscion]]), riportâ a-a verscion precedente de [[User:$1|$1]]",
        "nolinkshere-ns": "Pagine ch'apontan a '''[[:$1]]''' into namespace seleçionou no ghe n'è.",
        "isredirect": "Paggina de rindirissamento",
        "istemplate": "Incluxon",
-       "isimage": "Colegamento a file",
+       "isimage": "Ingancio a-o file",
        "whatlinkshere-prev": "{{PLURAL:$1|precedente|precedenti $1}}",
        "whatlinkshere-next": "{{PLURAL:$1|sûccescivo|sûccescivi $1}}",
        "whatlinkshere-links": "← colegaménti",
        "export-addns": "Azonzi",
        "export-download": "Sarva comme file",
        "export-templates": "Inciodi i template",
-       "export-pagelinks": "Includdi paggine colegæ scin a 'na profonditæ de:",
+       "export-pagelinks": "Includdi paggine conligæ scin a 'na profonditæ de:",
        "export-manual": "Azonzi paggine manoalmente:",
        "allmessages": "Messaggi do scistema",
        "allmessagesname": "Nomme",
        "import-nonewrevisions": "Nisciun-a verscion importâ (ean zà tutte presente, ò satæ pe via di erroî)",
        "xml-error-string": "$1 a-a riga $2, colonna $3 (byte $4): $5",
        "import-upload": "Carrega dæti XML",
-       "import-token-mismatch": "I dæti relativi a-a sescion son anæti persci. Riproeuva.\nFoscia t'ê stæto disconnesso. <strong>Verifica d'ese ancon collegou e riproeuva</strong>.\nSe o problema o persciste, ti poeu provâ a [[Special:UserLogout|scollegate]] e effettuâ un nuoeuvo accesso, controllando che o to browser o l'açette i cookie da questo scito.",
+       "import-token-mismatch": "I dæti relativi a-a sescion son anæti persci. Riprœuva.\nFoscia t'ê stæto disconnesso. <strong>Verifica d'ese ancon conligou e riprœuva</strong>.\nSe o problema o persciste, ti pœu provâ a [[Special:UserLogout|sconligâte]] e effettuâ un nœuvo accesso, controlando che o to navegatô o l'açette i cookie da questo scito.",
        "import-invalid-interwiki": "Imposcibbile importâ da-o progetto wiki indicou.",
        "import-error-edit": "A paggina \"$1\" a no l'è stæta importâ perché no t'ê aotorizzou a modificâla.",
        "import-error-create": "A paggina \"$1\" a no l'è stæta importâ perché no t'ê aotorizzou a creâla.",
        "tooltip-n-recentchanges": "I ùrtimi cangiaménti into scîto",
        "tooltip-n-randompage": "Fanni vedde 'na pagina a brettio.",
        "tooltip-n-help": "Pagine d'agiùtto",
-       "tooltip-t-whatlinkshere": "Lista de tùtte e pagine che son colegæ a sta chì.",
-       "tooltip-t-recentchangeslinked": "Ùrtimi càngi de pàgine colegæ a quésta",
+       "tooltip-t-whatlinkshere": "Lista de tùtte e paggine ch'en conligæ a sta chì.",
+       "tooltip-t-recentchangeslinked": "Ùrtimi càngi de pàggine conligæ a questa",
        "tooltip-feed-rss": "Feed RSS pe questa paggina",
        "tooltip-feed-atom": "Feed Atom pe sta pàgina",
        "tooltip-t-contributions": "Lista de contribûssioin de {{GENDER:$1|questo|questa}} utente",
        "newimages-hidepatrolled": "Ascondi i caregamenti controlæ",
        "noimages": "No gh'è ninte da vedde.",
        "ilsubmit": "Çerca",
-       "bydate": "pe dâta",
+       "bydate": "pe dæta",
        "sp-newimages-showfrom": "Mostra i file ciù reçenti a partî da-e oe $2 do $1",
        "seconds": "{{PLURAL:$1|un segondo|$1 segondi}}",
        "minutes": "{{PLURAL:$1|un menuto|$1 menuti}}",
        "exif-pixelxdimension": "Largheçça immaggine",
        "exif-pixelydimension": "Ateçça immaggine",
        "exif-usercomment": "Notte de l'utente",
-       "exif-relatedsoundfile": "File audio collegou",
+       "exif-relatedsoundfile": "File audio conligou",
        "exif-datetimeoriginal": "Dæta e oa de creassion di dæti",
        "exif-datetimedigitized": "Dæta e oa de digitalizzaçion",
        "exif-subsectime": "Dæta e oa, fraçioin de segondo",
        "exif-originaldocumentid": "ID univvoco do documento origin*a",
        "exif-licenseurl": "URL pe-a liçença do copyright",
        "exif-morepermissionsurl": "Informaçioin insce e liçençe alternative",
-       "exif-attributionurl": "Se quest'oeuvia ti l'adoeuvi torna, pe piaxei coleghite a",
+       "exif-attributionurl": "Se quest'œuvia ti l'adœuvi torna, pe piaxei metti 'n ingancio a",
        "exif-preferredattributionname": "Se quest'oeuvia ti l'adoeuvi torna, pe piaxei attribuiscine a paternitæ a",
        "exif-pngfilecomment": "Commento do file JPEG",
        "exif-disclaimer": "Avertençe",
        "confirmemail_loggedin": "L'adreçço e-mail o l'è stæto confermou.",
        "confirmemail_subject": "{{SITENAME}}: recesta de conferma de l'adreççoo",
        "confirmemail_body": "Quarcun, foscia ti mæximo da l'adreçço IP $1, o l'ha registrou l'utença \"$2\" insce {{SITENAME}} indicando questo adreçço e-mail.\n\nPe confermâ che l'utença a t'apparten da vei e attivâ e fonçioin relative a l'invio di e-mail insce {{SITENAME}}, arvi o collegamento seguente co-o to navegatô:\n\n$3\n\nSe *no* t'ê stæto ti a registrâ l'utença, segui sto colegamento pe annulâ a conferma de l'adreçço e-mail:\n\n$5\n\nQuesto coddiçe de conferma o descaziâ aotomaticamente a $4.",
-       "confirmemail_body_changed": "Quarcun, foscia ti mæximo da l'adreçço IP $1, o l'ha modificou l'adreçço e-mail de l'utença \"$2\" insce {{SITENAME}} indicando questo adreçço e-mail.\n\nPe confermâ che l'utença a t'apparten da vei e riattivâ e fonçioin relative a l'invio di e-mail insce {{SITENAME}}, arvi o collegamento seguente co-o to navegatô:\n\n$3\n\nSe l'utença a *no* t'aparten, segui sto colegamento pe annulâ a conferma de l'adreçço e-mail:",
-       "confirmemail_body_set": "Quarcun, foscia ti mæximo da l'adreçço IP $1, o l'ha impostcou l'adreçço e-mail de l'utença \"$2\" insce {{SITENAME}} indicando questo adreçço e-mail.\n\nPe confermâ che l'utença a t'apparten da vei e attivâ e fonçioin relative a l'invio di e-mail insce {{SITENAME}}, arvi o collegamento seguente co-o to navegatô:\n\n$3\n\nSe l'utença a *no* t'aparten, segui sto colegamento pe annulâ a conferma de l'adreçço e-mail:",
+       "confirmemail_body_changed": "Quarcun, foscia ti mæximo da l'adresso IP $1, o l'ha modificou l'adresso e-mail de l'utença \"$2\" insce {{SITENAME}} indicando questo adresso e-mail.\n\nPe confermâ che l'utença a t'apparten davei e riattivâ e fonçioin relative a l'invio di e-mail insce {{SITENAME}}, arvi l'ingancio seguente co-o to navegatô:\n\n$3\n\nSe l'utença a *no* t'aparten, segui st'ingancio pe annulâ a conferma de l'adresso e-mail:",
+       "confirmemail_body_set": "Quarcun, foscia ti mæximo da l'adresso IP $1, o l'ha impostou l'adresso e-mail de l'utença \"$2\" insce {{SITENAME}} indicando questo adresso e-mail.\n\nPe confermâ che l'utença a t'aparten davei e attivâ e fonçioin relative a l'invio di e-mail insce {{SITENAME}}, arvi l'ingancio seguente co-o to navegatô:\n\n$3\n\nSe l'utença a *no* t'aparten, segui st'ingancio pe annulâ a conferma de l'adresso e-mail:",
        "confirmemail_invalidated": "Recesta de conferma adreçço e-mail annulâ",
        "invalidateemail": "Annulla a recesta de conferma e-mail",
        "notificationemail_subject_changed": "L'adreçço de posta elettronica registrou insce {{SITENAME}} o l'è stæto modificou",
        "json-error-recursion": "Un o ciù rifeimenti ricorscivi into valô da codificâ",
        "json-error-inf-or-nan": "Un ò ciu valoî NAN o INF into valô da codificâ",
        "json-error-unsupported-type": "L'è stæto fornio un valô de un tipo ch'o no poeu ese codificou",
-       "headline-anchor-title": "Colegamento a questa seçion",
+       "headline-anchor-title": "Ingancio a questa seçion",
        "special-characters-group-latin": "Latin",
        "special-characters-group-latinextended": "Latin esteiso",
        "special-characters-group-ipa": "IPA",
        "authmanager-authn-not-in-progress": "L'aotenticaçion a no l'è in corso ò i dæti da sescion son anæti persci. Se prega de recomençâ da cavo.",
        "authmanager-authn-no-primary": "E credençiæ fornie no poeuan ese aotenticæ.",
        "authmanager-authn-no-local-user": "E credençiæ fornie no son associæ a nisciun utente de questo wiki.",
-       "authmanager-authn-no-local-user-link": "E credençiæ fornie son vallide ma no son associæ a nisciun utente de questa wiki. Accedi inte 'n atro moddo ò crea un noeuvo utente, e ti gh'aviæ 'n'opçion pe collegâ e to credençiæ precedente a quell'utença.",
+       "authmanager-authn-no-local-user-link": "E credençiæ fornie son vallide ma no son associæ a nisciun utente de questa wiki. Accedi inte 'n atro moddo ò crea un nœuvo utente, e ti gh'aviæ 'n'opçion pe conligâ e to credençiæ precedente a quell'utença.",
        "authmanager-authn-autocreate-failed": "Creaçion aotomattica de 'n'utença locale fallia: $1",
        "authmanager-change-not-supported": "E credençiæ fornie no poeuan ese modificæ, dæto che no saieivan doeuviæ da ninte.",
        "authmanager-create-disabled": "A creaçion di utençe a l'è disabilitâ.",
        "authmanager-create-from-login": "Pe creâ a to utença, completa i campi chì de sotta.",
        "authmanager-create-not-in-progress": "A creaçion de un'utença a no l'è in corso ò i dæti da sescion son anæti perdui. Se prega de recomençâ da cavo.",
        "authmanager-create-no-primary": "E credençiæ fornie no poeuan ese doeuviæ pe-a creaçion de l'utença.",
-       "authmanager-link-no-primary": "E credençiæ fornie no poeuan ese doeuviæ pe-o colegamento de l'utença.",
-       "authmanager-link-not-in-progress": "O colegamento de l'utença o no procede ò i dæti da sescion so-anæti perdui. Se prega de recomençâ da cavo.",
+       "authmanager-link-no-primary": "E credençiæ fornie no pœuan ese dœuviæ pe conligâ l'utença.",
+       "authmanager-link-not-in-progress": "O conligamento de l'utença o no procede ò i dæti da sescion so-anæti perdui. Se prega de recomençâ da cavo.",
        "authmanager-authplugin-setpass-failed-title": "Modiffica da password fallia",
        "authmanager-authplugin-setpass-failed-message": "O plugin d'aotenticaçion o l'ha impedio a modiffica da password.",
        "authmanager-authplugin-create-fail": "O plugin d'aotenticaçion o l'ha impedio a creaçion de l'utença.",
        "authmanager-provider-temporarypassword": "Password temporannia",
        "authprovider-confirmlink-message": "Basandose insce di reçenti tentativi d'accesso, e seguente utençe poeuan ese collegæ a-o to account wiki. Collegandole ti poeu effettuâ l'accesso con quelle ascì. Se prega de seleçionâ quelle che devan ese collegæ.",
        "authprovider-confirmlink-request-label": "Utençe che dovieivan ese collegæ",
-       "authprovider-confirmlink-success-line": "$1: collegou correttamente.",
+       "authprovider-confirmlink-success-line": "$1: inganciou correttamente.",
        "authprovider-confirmlink-failed": "O collegamento de l'utença o no l'è pin-amente ariescio: $1",
        "authprovider-confirmlink-ok-help": "Continnoa doppo a visualizzaçion di messaggi de errô de collegamento.",
        "authprovider-resetpass-skip-label": "Sata",
        "authprovider-resetpass-skip-help": "Sata a rempostaçion da password.",
-       "authform-nosession-login": "L'aotenticaçion a l'ha avuo successo, ma o to navegatô o no l'è in graddo de \"aregordâ\" che t'ê collegou.\n\n$1",
-       "authform-nosession-signup": "L'utença a l'è stæta creâ, ma o to navegatô o no l'è in graddo de \"aregordâ\" che t'ê collegou.\n$1",
+       "authform-nosession-login": "L'aotenticaçion a l'ha avuo successo, ma o to navegatô o no l'è in graddo de \"aregordâ\" che t'ê conligou.\n\n$1",
+       "authform-nosession-signup": "L'utença a l'è stæta creâ, ma o to navegatô o no l'è in graddo d'\"aregordâ\" che t'ê conligou.\n$1",
        "authform-newtoken": "Token mancante. $1",
        "authform-notoken": "Token mancante",
        "authform-wrongtoken": "Token errou",
        "cannotlink-no-provider-title": "Utençe collegabbile no ghe n'è",
        "cannotlink-no-provider": "Utençe colegabbile no ghe n'è.",
        "linkaccounts": "Collega utençe",
-       "linkaccounts-success-text": "L'utença a l'è stæta colegâ.",
+       "linkaccounts-success-text": "L'utença a l'è stæta inganciâ.",
        "linkaccounts-submit": "Collega utençe",
        "unlinkaccounts": "Scollega utençe",
        "unlinkaccounts-success": "L'utença a l'è stæta scollegâ.",
index 0eec9c6..c906996 100644 (file)
        "yourname": "Kȭlbatijiznim:",
        "yourpassword": "Sallisõnä:",
        "yourpasswordagain": "Kēratigid sallisõnā ūtstõ:",
-       "remembermypassword": " Mǟdlõgid sallisõnā (kuņtš $1 {{PLURAL:$1|päuvõ|päuvõ}})",
        "login": "Log sīezõ",
        "nav-login-createaccount": "Log sīezõ agā registrīer kȭlbatijizõks",
        "userlogin": "Sīezõ loggimi agā kȭlbatijiz-konto lūomi",
index 74b2357..8c5fa41 100644 (file)
        "yourpasswordagain": "تکرار گذرواژه:",
        "createacct-yourpasswordagain": "گذرواژه را دوباره وارد کنید",
        "createacct-yourpasswordagain-ph": "گذرواژه را وارد کنید برای بار دوم",
-       "remembermypassword": "رمزعبورت وة ئئ رایانة ئةویرت/یادت بو(تابیشترإژ$1{{PLURAL:$1|رووژةل|رووژ}})",
        "userlogin-remembermypassword": "مإ وارد  بی بیل",
        "userlogin-signwithsecure": "إژ ورود امن استفاده کةن",
        "cannotloginnow-title": "ایسه نمه‌تونین باینه نوم",
        "activeusers-intro": "در زیر فهرستی از کاربرانی را می‌بینید که در $1 {{PLURAL:$1|روز|روزها}} گذشته فعالیتی داشته‌اند.",
        "activeusers-count": "$1 {{PLURAL:$1|فعالیت|فعالیت ها}} در {{PLURAL:$3|روز|$3 روز}} اخیر",
        "activeusers-from": "نمایش کاربران با آغاز از:",
-       "activeusers-hidebots": "نهفتن ربات‌ها",
-       "activeusers-hidesysops": "نهفتن مدیران",
        "activeusers-noresult": "کاربری پیدا نشد.",
        "activeusers-submit": "نمایش کاربةرةل فعال/کارکةر",
        "listgrouprights": "اختیارات گروه‌های کاربری",
        "htmlform-title-not-exists": "$1 وجود ندارد.",
        "htmlform-user-not-exists": "<strong>$1</strong> وجود ندارد.",
        "htmlform-user-not-valid": "حساوو کاربةری <strong>$1</strong> معتبر نیة.",
-       "sqlite-has-fts": "$1 با پشتیبانی از جستجو در متن کامل",
-       "sqlite-no-fts": "$1 بدون پشتیبانی از جستجو در متن کامل",
        "logentry-delete-delete": "$1 VALGA $3{{GENDER:$2|HAZF Kerdi}}",
        "logentry-delete-restore": "$1 وةڵگة $3 را {{GENDER:$2|احیا کرد}}",
        "logentry-delete-event": "$1 پیدایی {{PLURAL:$5|یک مورد سیاهه|$5 مورد سیاهه}} را در $3 {{GENDER:$2|تغییر داد}}: $4",
        "feedback-external-bug-report-button": "پرونده‌سازی یک عمل فنی",
        "feedback-dialog-title": "ارسال یک بازخورد",
        "feedback-dialog-intro": "شما می توانید از فرم زیر برای بازخورد استفاده کنید. متن شما همراه با نام کاربریتان به وةڵگة \"$1\" افزوده خواهد شد.",
-       "feedback-error-title": "خطا",
        "feedback-error1": "خطا: پاسخ‌های ناشناخته از رابط برنامه‌نویسی نرم‌افزار",
        "feedback-error2": "خطا: شکست در ویرایش",
        "feedback-error3": "خطا: عدم پاسخ از رابط برنامه‌نویسی نرم‌افزار",
index 822718f..0555632 100644 (file)
        "yourpasswordagain": "Tùrna a scrìer la password",
        "createacct-yourpasswordagain": "Conférma la password",
        "createacct-yourpasswordagain-ph": "Tùrna a mèter dét la password",
-       "remembermypassword": "Regordass la mé password (per mìa de piö de {{PLURAL:$1|dé|dé}})",
        "userlogin-remembermypassword": "Tègnem colegàt",
        "userlogin-signwithsecure": "Dòpra 'na conesiù sigüra",
        "yourdomainname": "Specificà 'l domini",
        "passwordreset-emailtitle": "Detài de l'ütènsa sö {{SITENAME}}",
        "passwordreset-emailelement": "Nòm ütènt: \n$1\n\nPassword temporànea: \n$2",
        "passwordreset-emailsentemail": "Gh'è stat mandàt vià 'na e-mail de redefinisiù de la password.",
-       "passwordreset-emailsent-capture": "Gh'è stat mandàt vià chèsta e-mail de redefinisiù de la password:",
        "changeemail": "Càmbia l'indirìs e-mail",
        "changeemail-header": "Càmbia l'indirìs e-mail de l'ütènsa",
        "changeemail-none": "(nisü)",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
        "undo-summary": "Scancelada la mudifega $1 de [[Special:Contributions/$2|$2]] ([[User talk:$2|Ciciarada]])",
-       "cantcreateaccounttitle": "Impusìbol creà 'n ütènt",
        "cantcreateaccount-text": "La creasiù de ütènse de part de chèsto indirìs IP (<strong>$1</strong>) l'è stàda blocàda de l'ütènt [[User:$3|$3]]. El mutìf specificàt de $3 l'è <em>$2</em>",
        "cantcreateaccount-range-text": "La creasiù de ütènse de part de indirìs IP endèl interval <strong>$1</strong>, del qual el fà part apò a 'l tò (<strong>$4</strong>), l'è stàda blocàda de [[User:$3|$3]].\n\nEl mutìf specificàt de $3 l'è <em>$2</em>.",
        "viewpagelogs": "Varda i register de quela pagina chì",
        "listusers-submit": "Fà ved",
        "activeusers": "Lìsta dei ütèncc atìf",
        "activeusers-from": "Fàm vedè i dupradur a partì da:",
-       "activeusers-hidebots": "Scond i bot",
-       "activeusers-hidesysops": "Scond i aministradur",
        "activeusers-noresult": "Nisü ütènt troàt",
        "listgrouprights": "Diricc del grüp dei ütèncc",
        "listgrouprights-group": "Grüp",
index 690b149..47791ce 100644 (file)
@@ -4,33 +4,39 @@
                        "Passawuth",
                        "Tuinui",
                        "아라",
-                       "Iberia2011"
+                       "Iberia2011",
+                       "Aefgh39622"
                ]
        },
-       "tog-underline": "ຂີດເສັ້ນກ້ອງລິງກ໌:",
-       "tog-hideminor": "ເຊື່ອງການດັດແກ້ເລັກນ້ອຍ ໃນ ການປ່ຽນແປງຫຼ້າສຸດ",
-       "tog-hidepatrolled": "ເຊື່ອງ ການລາດຕະເວນດັດແກ້ ໃນ ການດັດແກ້ຫຼ້າສຸດ",
-       "tog-newpageshidepatrolled": "ເຊື່ອງ ການລາດຕະເວນດັດແກ້ ໃນ ລາຍການໜ້າໃໝ່",
-       "tog-extendwatchlist": "ຂະຫຍາຍ ລາຍການຕິດຕາມ ເພື່ອ ສະແດງທຸກໆການປ່ຽນແປງ",
-       "tog-usenewrc": "ສະແດງ ການປ່ຽນແປງຫຼ້າສຸດ ເປັນສີເຂັ້ມ (JavaScript)",
-       "tog-numberheadings": "ໜາຍເລກຫົວຂໍ້ແບບອັດຕະໂນມັດ",
-       "tog-showtoolbar": "ສະແດງ ທູລບາດັດແກ້ (JavaScript)",
-       "tog-editondblclick": "ໃຫ້ສາມາດດັດແກ້ ໂດຍ ດັບເບິລ໌ ຄລິກ (JavaScript)",
-       "tog-editsectiononrightclick": "ໃຫ້ສາມາດ ດັດແກ້ ໂດຍກົດປຸ່ມຂວາ ຂອງເມົາສ໌ ຢູ່ <br /> ຫົວຂໍ້ຂອງພາກ (JavaScript)",
-       "tog-watchcreations": "ເພີ່ມ ໜ້າທີ່ຂ້ອຍສ້າງ ເຂົ້າໃນ ລາຍການຕິດຕາມ ຂອງ ຂ້ອຍ",
-       "tog-watchdefault": "ເພີ່ມໜ້າ ທີ່ ຂ້ອຍດັດແກ້ ໃສ່ ລາຍຕິດຕາມ ຂອງ ຂ້ອຍ",
-       "tog-watchmoves": "ເພີ່ມ ໜ້າທີ່ຂອ້ຍຍ້າຍ ໃສ່ ລາຍການຕິດຕາມຂອງຂ້ອຍ",
-       "tog-watchdeletion": "ເພີ່ມ ໜ້າ ທີ່ຂ້ອຍລຶບ ໃສ່ ລາຍການຕິດຕາມ ຂອງ ຂ້ອຍ",
-       "tog-minordefault": "ຖ້າບໍ່ມີການຕັ້ງ ກຳໜົດໃຫ້ທຸກໆການດັດແກ້ ເປັນ ການດັດແກ້ເລັກນ້ອຍ",
-       "tog-previewontop": "ສະແດງ ຜົນການດັດແກ້ ເທິງ ຊ່ອງດັດແກ້",
-       "tog-previewonfirst": "ສະແດງ ຜົນການດັດແກ້ ໃນ ເວລາດັດແກ້ເທື່ອທຳອິດ",
-       "tog-enotifwatchlistpages": "ສົ່ງອີເມລມາໃຫ້ຂ້ອຍ ເມື່ອ ໜ້າທີ່ຂ້ອຍຕິດຕາມໄດ້ຖືກປ່ຽນແປງ",
-       "tog-enotifusertalkpages": "ສົ່ງ ອີເມລ ມາໃຫ້ ຂ້ອຍ ເວລາ ໜ້າສົນທະນາຂ້ອຍ ມີການປ່ຽນແປງ",
-       "tog-enotifminoredits": "ສົ່ງ ອີເມລ ໃຫ້ຂ້ອຍ ເວລາມີການດັດແກ້ເລັກນ້ອຍນຳ",
-       "tog-enotifrevealaddr": "ສະແດງ ອີເມລ ຂອງຂ້ອຍ ໃນ ການແຈ້ງວ່າມີຂໍ້ຄວາມອີເມລ",
-       "tog-shownumberswatching": "ສະແດງ ຈຳນວນຜູ້ໃຊ້ ຕິດຕາມໝ້ານີ້",
-       "tog-forceeditsummary": "ເຕື່ອນຂ້ອຍ ຖ້າບໍ່ໄດ້ຂຽນຫຍັງໃສ່ ຊ່ອງ ສະຫຼຸບການດັດແກ້",
-       "tog-watchlisthideown": "ເຊື່ອງ ການດັດແກ້ໂດຍຂ້ອຍ ໃນ ລາຍການຕິດຕາມຂອງຂ້ອຍ",
+       "tog-underline": "ການຂີດເສັ້ນກ້ອງລິງກ໌:",
+       "tog-hideminor": "ເຊື່ອງການດັດແກ້ເລັກນ້ອຍໃນໜ້າປັບປຸງລ້າສຸດ",
+       "tog-hidepatrolled": "ເຊື່ອງການແກ້ໄຂທີ່ກວດສອບແລ້ວໃນໜ້າປັບປຸງລ້າສຸດ",
+       "tog-newpageshidepatrolled": "ເຊື່ອງໜ້າທີ່ກວດສອບແລ້ວໃນລາຍການໜ້າໃໝ່",
+       "tog-hidecategorization": "ເຊື່ອງການຈັດໝວດໝູ່ໜ້າ",
+       "tog-extendwatchlist": "ຂະຫຍາຍລາຍການຕິດຕາມໃຫ້ສະແດງການປ່ຽນແປງທັງໝົດ, ບໍ່ແມ່ນພຽງການປ່ຽນແປງລ້າສຸດ",
+       "tog-usenewrc": "ຈັດກຸ່ມການປ່ຽນແປງແບ່ງຕາມໜ້າຢູ່ໃນລາຍການປັບປຸງລ້າສຸດແລະລາຍການຕິດຕາມ",
+       "tog-numberheadings": "ກຳນົດເລກຫົວເລື່ອງອັດຕະໂນມັດ",
+       "tog-showtoolbar": "ສະແດງແຖບເຄື່ອງມືແກ້ໄຂ",
+       "tog-editondblclick": "ແກ້ໄຂໜ້າເມື່ອຄລິກສອງເທື່ອ",
+       "tog-editsectiononrightclick": "ເປີດໃຊ້ງານການແກ້ໄຂສ່ວນໂດຍຄລິກຂວາຢູ່ເທິງຊື່ເລື່ອງຂອງສ່ວນນັ້ນ",
+       "tog-watchcreations": "ເພີ່ມໜ້າທີ່ຂ້ອຍສ້າງແລະໄຟລ໌ທີ່ຂ້ອຍອັບໂຫຼດເຂົ້າໃນລາຍການຕິດຕາມ",
+       "tog-watchdefault": "ເພີ່ມໜ້າແລະໄຟລ໌ທີ່ຂ້ອຍແກ້ໄຂເຂົ້າໃນລາຍການຕິດຕາມ",
+       "tog-watchmoves": "ເພີ່ມໜ້າແລະໄຟລ໌ທີ່ຂ້ອຍຍ້າຍເຂົ້າໃນລາຍການຕິດຕາມ",
+       "tog-watchdeletion": "ເພີ່ມໜ້າແລະໄຟລ໌ທີ່ຂ້ອຍລຶບເຂົ້າໃນລາຍການຕິດຕາມ",
+       "tog-watchuploads": "ເພີ່ມໄຟລ໌ໃໝ່ທີ່ຂ້ອຍອັບໂຫຼດເຂົ້າໃນລາຍການຕິດຕາມ",
+       "tog-watchrollback": "ເພີ່ມໜ້າທີ່ຂ້ອຍໄດ້ກັບຄືນຢ່າງສຸກເສີນເຂົ້າໃນລາຍການຕິດຕາມ",
+       "tog-minordefault": "ກຳນົດການແກ້ໄຂທຸກຄັ້ງເປັນການແກ້ໄຂເລັກນ້ອຍໂດຍປະລິຍາຍ",
+       "tog-previewontop": "ສະແດງໂຕຢ່າງກ່ອນກ່ອງແກ້ໄຂ",
+       "tog-previewonfirst": "ສະແດງໂຕຢ່າງໃນການແກ້ໄຂຄັ້ງທຳອິດ",
+       "tog-enotifwatchlistpages": "ອີເມລຫາເມື່ອໜ້າຫຼືໄຟລ໌ໃນລາຍການຕິດຕາມປ່ຽນແປງ",
+       "tog-enotifusertalkpages": "ອີເມລຫາເມື່ອມີການປ່ຽນແປງໜ້າສົນທະນາກັບຜູ້ໃຊ້ຂອງຂ້ອຍ",
+       "tog-enotifminoredits": "ອີເມລຫາເຊັ່ນກັນສຳລັບການແກ້ໄຂໜ້າແລະໄຟລ໌ເລັກນ້ອຍ",
+       "tog-enotifrevealaddr": "ເປີດເຜີຍທີ່ຢູ່ອີເມລຂອງຂ້ອຍໃນອີເມລແຈ້ງເຕືອນ",
+       "tog-shownumberswatching": "ສະແດງຈຳນວນຜູ້ໃຊ້ທີ່ຕິດຕາມ",
+       "tog-fancysig": "ຖືລາຍເຊັນເປັນຂໍ້ຄວາມວິກິ (ໂດຍບໍ່ມີລິງຄ໌ອັດຕະໂນມັດ)",
+       "tog-uselivepreview": "ໃຊ້ການສະແດງໂຕຢ່າງແບບສົດ",
+       "tog-forceeditsummary": "ເຕືອນເມື່ອຊ່ອງຄຳອະທິບາຍໂດຍຫຍໍ້ວ່າງເປົ່າ",
+       "tog-watchlisthideown": "ເຊື່ອງການແກ້ໄຂຂອງຂ້ອຍຈາກລາຍການຕິດຕາມ",
        "tog-watchlisthidebots": "ເຊື່ອງ ການດັດແກ້ ໂດຍ ບອທ໌ ໃນລາຍການຕິດຕາມຂອງຂ້ອຍ",
        "tog-watchlisthideminor": "ເຊື່ອງ ການດັດແກ້ເລັກນ້ອຍ ໃນ ລາຍການຕິດຕາມຂອງຂ້ອຍ",
        "tog-watchlisthideliu": "ເຊື່ອງການດັດແກ້ ໂດຍ ຜູ້ໃຊ້ໄດ້ເຊັນເຂົາ ໃນ ລາຍການຕິດຕາມ",
@@ -41,7 +47,7 @@
        "tog-showhiddencats": "ສະແດງໝວດເຊື່ອງ",
        "underline-always": "ທຸກຄັ້ງ",
        "underline-never": "ບໍ່ຂີດ",
-       "underline-default": "àº\84à»\88າàº\95ັà»\89àº\87à»\80àº\94ີມ àº\82ອàº\87 ບຣາວເຊີ",
+       "underline-default": "ສະàº\81ິàº\99ຫຼືàº\84à»\88າàº\97ີà»\88àº\96ືàº\81àº\81ຳàº\99ົàº\94à»\84ວà»\89àº\82ອàº\87ບຣາວເຊີ",
        "sunday": "ວັນອາທິດ",
        "monday": "ວັນຈັນ",
        "tuesday": "ວັນອັງຄານ",
        "subcategories": "ໝວດຍ່ອຍ",
        "category-media-header": "ໜ້າຕ່າງ າ ໃນ \"$1\"",
        "category-empty": "''ບໍ່ມີໜ້າໃດຢູ່ໃນໝວດນີ້''",
-       "hidden-categories": "{{PLURAL:$1|à»\9cວàº\94à»\80àº\8aືà»\88ອàº\87|à»\9cວàº\94ເຊື່ອງ}}",
+       "hidden-categories": "{{PLURAL:$1|à»\9cວàº\94àº\97ີà»\88àº\96ືàº\81à»\80àº\8aືà»\88ອàº\87|à»\9cວàº\94àº\97ີà»\88àº\96ືàº\81ເຊື່ອງ}}",
        "hidden-category-category": "ບັນດາໜວດເຊື່ອງ",
        "category-subcat-count-limited": "ໜວດນີ້ ມີ ໜວດຍ່ອຍ ດັ່ງຕໍ່ໄປນີ້ {{PLURAL:$1|ໜວດຍ່ອຍ|$1 ໜວດຍ່ອຍ}}.",
        "category-article-count": "{{PLURAL:$2|ໝວດນີ້ມີໜ້າຢູ່ພຽງໜ້າດຽວ|ມີ {{PLURAL:$1|ໜ້າດຽວ|$1 ໜ້າ}} ໃນໝວດນີ້ ເຕັມ $2}}",
        "newwindow": "(ເປີດເປັນ ປ່ອງຢ້ຽມ(ວິນໂດ)ໃໝ່ )",
        "cancel": "ລົບລ້າງ",
        "moredotdotdot": "ຕື່ມ...",
-       "mypage": "ໜ້າຂ້ອຍ",
+       "mypage": "ໜ້າ",
        "mytalk": "ສົນທະນາ",
-       "anontalk": "ສົນທະນາ ສຳຫຼັບ IP ນີ້",
+       "anontalk": "ສົນທະນາ",
        "navigation": "ນຳທິດ",
        "and": "&#32;ແລະ",
        "qbfind": "ຊອກຫາ",
        "qbedit": "ດັດແກ້",
        "qbpageoptions": "ໜ້ານີ້",
        "qbmyoptions": "ໝ້າຂ້ອຍ",
+       "navigation-heading": "ເມນູນຳທາງ",
        "errorpagetitle": "ຜິດພາດ",
        "returnto": "ກັບໄປ  $1.",
        "tagline": "ຈາກ {{SITENAME}}",
        "help": "ຊ່ວຍເຫຼືອ",
-       "search": "àº\8aອàº\81ຫາ",
-       "searchbutton": "àº\8aອàº\81ຫາ",
+       "search": "àº\84ົà»\89àº\99ຫາ",
+       "searchbutton": "àº\84ົà»\89àº\99ຫາ",
        "go": "ໄປ",
        "searcharticle": "ໄປ",
        "history": "ປະຫວັດ",
        "history_short": "ປະຫວັດການດັດແກ້",
        "printableversion": "ສະບັບພິມໄດ້",
-       "permalink": "ລິà»\89àº\87àº\84à»\8càº\96າວອàº\99",
+       "permalink": "ລິງຄ໌ຖາວອນ",
        "print": "ພິມ",
-       "edit": "àº\94ັàº\94à»\81àº\81à»\89",
+       "edit": "à»\81àº\81à»\89à»\84àº\82",
        "create": "ສ້າງ",
        "editthispage": "ດັດແກ້ໜ້ານີ້",
        "create-this-page": "ສ້າງໜ້ານີ້",
        "delete": "ລຶບ",
        "deletethispage": "ລຶບໜ້ານີ້",
        "protect": "ປົກປ້ອງ",
-       "protect_change": "àº\9bà»\88ຽàº\99ຮູàº\9aà»\81àº\9aàº\9aàº\81າàº\99àº\9bົàº\81àº\9bà»\89ອງ",
+       "protect_change": "àº\81າàº\99àº\9bà»\88ຽàº\99à»\81àº\9bງ",
        "protectthispage": "ປ້ອງກັນໜ້ານີ້",
-       "unprotect": "à»\80àº\8aົາàº\9bົàº\81àº\9bà»\89ອàº\87",
+       "unprotect": "àº\9bà»\88ຽàº\99à»\81àº\9bàº\87àº\81າàº\99àº\9bà»\89ອàº\87àº\81ັàº\99",
        "newpage": "ໜ້າໃໝ່",
        "talkpage": "ປຶກສາຫາລືໜ້ານີ້",
        "talkpagelinktext": "ສົນທະນາ",
        "specialpage": "ໝ້າພິເສດ",
-       "personaltools": "à»\80àº\84ືà»\88ອàº\87ມືສà»\88ວàº\99àº\95ົວ",
+       "personaltools": "à»\80àº\84ືà»\88ອàº\87ມືສà»\88ວàº\99àº\9aຸàº\81àº\84ົàº\99",
        "articlepage": "ເບິ່ງໜ້າເນື້ອໃນ",
        "talk": "ສົນທະນາ",
        "views": "ເທື່ອເບິ່ງ",
-       "toolbox": "àº\81ັàº\9aອຸàº\9aàº\9bະàº\81ອàº\99",
+       "toolbox": "à»\80àº\84ືà»\88ອàº\87ມື",
        "userpage": "ເບິ່ງໜ້າສົນທະນາຂອງຜູ້ໃຊ້",
        "projectpage": "ເບິ່ງໝ້າໂຄງການ",
        "mediawikipage": "ເບິ່ງ ໝ້າຂໍ້ຄວາມ",
        "viewcount": "ໜ້ານີ້ຖືກເຂົ້າເບິ່ງ {{PLURAL:$1|ເທື່ອໜຶ່ງ|$1 ເທື່ອ}}.",
        "protectedpage": "ໜ້າຖືກປົກປ້ອງ",
        "jumpto": "ໄປຫາ:",
-       "jumptonavigation": "àº\99ຳàº\97ິàº\94",
+       "jumptonavigation": "àº\9bà»\89າàº\8dàº\9aອàº\81àº\97າàº\87",
        "jumptosearch": "ຄົ້ນຫາ",
        "aboutsite": "ກ່ຽວກັບ{{SITENAME}}",
        "aboutpage": "Project:ກ່ຽວກັບ",
-       "copyright": "ເນື້ອໃນ ສະໜອງໃຫ້ ພາຍໃຕ້ $1.",
+       "copyright": "ເນື້ອໃນແມ່ນສາມາດໃຊ້ໄດ້ພາຍໃຕ້ $1 ຖ້າບໍ່ແມ່ນຢ່າງອື່ນໃດທີ່ລະບຸໄວ້.",
        "copyrightpage": "{{ns:project}}:ລິຂະສິດ",
-       "currentevents": "àº\81ິàº\94àº\88ະàº\81ຳàº\9eວມàº\94ຳà»\80àº\99ີນ",
-       "currentevents-url": "Project:àº\81ິàº\94àº\88ະàº\81ຳàº\9eວມàº\94ຳà»\80àº\99ີນ",
+       "currentevents": "à»\80ຫàº\94àº\81າàº\99àº\9bັàº\94àº\88ຸàº\9aັນ",
+       "currentevents-url": "Project:à»\80ຫàº\94àº\81າàº\99àº\9bັàº\94àº\88ຸàº\9aັນ",
        "disclaimers": "ຂໍ້ປະຕິເສດຄວາມຮັບຜິດຊອບ",
        "disclaimerpage": "Project:ຂໍ້ປະຕິເສດຄວາມຮັບຜິດຊອບ",
        "edithelp": "ວິທີດັດແກ້ໜ້າ",
        "badaccess-group0": "ທ່ານ ບໍ່ໄດ້ຮັບອະນຸຍາດ ໃຫ້ປະຕິບັດການ ທີ່ ທ່ານ ສັ່ງ.",
        "versionrequired": "ຕ້ອງການເວີຣ໌ຊັ່ນ $1 ຂອງມີເດຍວິກິ",
        "ok": "ຕົກລົງ",
-       "retrievedfrom": "àº\96ອàº\99ມາຈາກ \"$1\"",
+       "retrievedfrom": "àº\94ຶàº\87àº\82à»\8dà»\89ມູàº\99ຈາກ \"$1\"",
        "youhavenewmessages": "ທ່ານ ມີ $1 ($2).",
        "youhavenewmessagesmulti": "ທ່ານມີຂໍ້ຄວາມໃໝ່ ຢູ່ $1",
-       "editsection": "àº\94ັàº\94à»\81àº\81à»\89",
+       "editsection": "à»\81àº\81à»\89à»\84àº\82",
        "editold": "ດັດແກ້",
        "viewsourceold": "ເບິ່ງ ຊອສ",
        "editlink": "ດັດແກ້",
-       "editsectionhint": "àº\94ັàº\94à»\81àº\81à»\89 ພາກ: $1",
+       "editsectionhint": "à»\81àº\81à»\89à»\84àº\82ພາກ: $1",
        "toc": "ເນື້ອໃນ",
        "showtoc": "ສະແດງ",
        "hidetoc": "ເຊື່ອງ",
        "viewdeleted": "ເບິ່ງ $1 ບໍ?",
        "site-rss-feed": "$1 RSS ຟີດ",
-       "site-atom-feed": "$1 Atom ຟີດ",
+       "site-atom-feed": "ອະຕອມຟີດ $1",
        "page-rss-feed": "\"$1\" RSS ຟີດ",
-       "red-link-title": "$1 (àº\8dັàº\87àº\9aà»\8dà»\88à»\84àº\94à»\89ສà»\89າàº\87)",
-       "nstab-main": "àº\9aົàº\94àº\84ວາມ",
+       "red-link-title": "$1 (àº\9aà»\8dà»\88ມີà»\9cà»\89າàº\99ີà»\89)",
+       "nstab-main": "à»\9cà»\89າ",
        "nstab-user": "ໜ້າຜູ້ໃຊ້",
-       "nstab-special": "ພິເສດ",
+       "nstab-special": "à»\9cà»\89າàº\9eິà»\80ສàº\94",
        "nstab-project": "ໜ້າໂຄງການ",
        "nstab-image": "ໄຟລ໌",
        "nstab-mediawiki": "ຂໍ້ຄວາມ",
        "nstab-template": "ແມ່ແບບ",
        "nstab-help": "ໜ້າຊ່ອຍເຫຼືອ",
        "nstab-category": "ໝວດ",
+       "mainpage-nstab": "ໜ້າຫຼັກ",
        "nosuchspecialpage": "ບໍ່ມີໝ້າພິເສດຊື່ນັ້ນ",
        "databaseerror": "ມີຄວາມຜິດພາດ ດ້ານ ຖານຂໍ້ມູນ",
        "readonly": "ຖານຂໍ້ມູນຖືກລອັກ",
        "missingarticle-diff": "(ສ່ວນຕ່າງ: $1, $2)",
        "internalerror": "ມີຄວາມຜິດພາດພາຍໃນ",
        "filerenameerror": "ບໍ່ສາມາດ ປ່ຽນ ຊື່ໄຟລ໌  \"$1\" ໄປເປັນ  \"$2\" ໄດ້.",
-       "cannotdelete": "ບໍ່ສາມາດລຶບໜ້າ ຫຼື ໄຟລ໌ ໄດ້. (ມັນອາດຈະຖືກລຶບໂດຍໃຜຜູ້ໜຶ່ງແລ້ວ.)",
+       "cannotdelete": "ບໍ່ສາມາດລຶບໜ້າຫຼືໄຟລ໌ \"$1\" ໄດ້.\nມັນອາດຈະຖືກລຶບໂດຍໃຜຜູ້ໜຶ່ງແລ້ວ.",
        "badtitle": "ຫົວຂໍ້ບໍ່ຖືກຕ້ອງ",
        "viewsource": "ເບິ່ງຊອສ໌",
        "namespaceprotected": "ທ່ານບໍ່ໄດ້ຮັບອະນຸຍາດ ໃຫ້ ດັດແກ້ ໜ້າ ໃນ  '''$1'''.",
-       "logouttext": "'''ທ່່ານ ໄດ້ ເຊັນອອກແລ້ວ.'''\n\nທ່ານ ສາມາດສືບຕໍ່ໃຊ້ {{SITENAME}} ແບບບໍ່ສະແດງຊື່, ຫຼື ທ່ານ ສາມາດ ເຊັນເຂົ້າ ອີກ ໂດຍ ຊື່ຜູ້ໃຊ້ ເກົ່າ ຫຼື ໃໝ່ ກໍ່ໄດ້.\nກະລຸນາ ຮັບຊາບວ່າ ບາງໜ້າ ອາດຈະສືບຕໍ່ ສະແດງ ຄືວ່າ ທ່ານ ຍັງເຊັນເຂົ້າຢູ່ ຈົນກວ່າ ທ່ານ ຂໍ້ມູນບັນທຶກຊົ່ວຄາວ ໃນ ໂປຣແກຣມທ່ອງເວັບ ຂອງ ທ່ານ ຈະຖືກລຶບ.",
+       "logouttext": "<strong>ທ່່ານໄດ້ອອກຈາກລະບົບແລ້ວ.<strong>\n\nກະລຸນາຮັບຊາບວ່າບາງໜ້າຈະຍັງຄົງສະແດງຜົນຕໍ່ໄປເຖິງແມ້ວ່າທ່ານຈະເຂົ້າສູ່ລະບົບແລ້ວ, ຈົນກວ່າທ່ານຈະລ້າງແຄຊໃນບຣາວເຊີຂອງທ່ານທັງໝົດ.",
        "yourname": "ຊື່ຜູ້ໃຊ້",
        "yourpassword": "ລະຫັດຜ່ານ",
        "yourpasswordagain": "ພິມລະຫັດຜ່ານອີກ",
-       "remembermypassword": "ຈົດຈໍາການເຊັນເຂົ້າຂອງຂ້ອຍ ຢູ່ ຄອມພິວເຕີໜ່ວຍນີ້ (for a maximum of $1 {{PLURAL:$1|day|days}})",
        "yourdomainname": "ໂດເມນ ຂອງ ທ່ານ",
        "login": "ເຊັນເຂົ້າ",
        "nav-login-createaccount": "ເຊັນເຂົ້າ / ສ້າງບັນຊີ",
        "userlogin": "ເຊັນເຂົ້າ / ສ້າງບັນຊີ",
        "logout": "ເຊັນອອກ",
        "userlogout": "ເຊັນອອກ",
-       "nologin": "àº\9aà»\8dà»\88ມີàº\9aັàº\99àº\8aີà»\80àº\97ືà»\88ອàº\9aà»\8d? '''$1'''.",
+       "nologin": "àº\8dັàº\87àº\9aà»\8dà»\88ມີàº\9aັàº\99àº\8aີà»\80àº\97ືà»\88ອàº\9aà»\8dà»\88? $1.",
        "nologinlink": "ສ້າງບັນຊີໃໝ່",
        "createaccount": "ສ້າງບັນຊີ",
        "gotaccount": "ມີ ບັນຊີແລ້ວບໍ? '''$1'''.",
        "gotaccountlink": "ເຊັນເຂົ້າ",
-       "createaccountmail": "à»\82àº\94àº\8d àº­àºµà»\80ມລ",
+       "createaccountmail": "à»\83àº\8aà»\89ລະຫັàº\94àº\9cà»\88າàº\99à»\81àº\9aàº\9aສຸà»\88ມàº\8aົà»\88ວàº\84າວà»\81ລະສົà»\88àº\87ມັàº\99à»\84àº\9bà»\83ຫà»\89àº\97ີà»\88ຢູà»\88ອີà»\80ມວàº\97ີà»\88ລະàº\9aຸ",
        "badretype": "ລະຫັດຜ່ານ ທີ່ ທ່ານພິມຄືນ ບໍ່ຖືກກັບ ທີ່ພິມກ່ອນ.",
        "loginerror": "ມີບັນຫາໃນການເຊັນເຂົ້າ",
-       "loginsuccesstitle": "à»\80àº\8aັàº\99à»\80àº\82ົà»\89າສຳà»\80ລັàº\94",
+       "loginsuccesstitle": "à»\80àº\82ົà»\89າສູà»\88ລະàº\9aົàº\9aà»\81ລà»\89ວ",
        "loginsuccess": "'''ທ່ານ ເຊັນເຂົ້າ  {{SITENAME}} ໃນນາມ \"$1\".'''",
        "wrongpassword": "ລະຫັດຜ່ານບໍ່ຖືກ. ກະລຸນາເຮັດຄືນໃໝ່.",
        "wrongpasswordempty": "ບໍ່ມີລະຫັດຜ່ານຖືກພິມເຂົ້າ. ກະລຸນາເຮັດຄືນໃໝ່.",
-       "mailmypassword": "àº\82à»\8dລະຫັàº\94àº\9cà»\88າàº\99àº\97າàº\87ອີà»\80ມລ",
+       "mailmypassword": "àº\95ັà»\89àº\87àº\84à»\88າລະຫັàº\94àº\9cà»\88າàº\99à»\83à»\9dà»\88",
        "acct_creation_throttle_hit": "ຂໍໂທດຫຼາຍໆ, ທ່ານ ໄດ້ສ້າງ $1 ບັນຊີແລ້ວ. ທ່ານ ບໍ່ສາມາດ ສ້ງບັນຊີໄດ້ອີກ.",
-       "emailauthenticated": "ອີເມລ ຂອງ ທ່ານ ຖືກຢືນຢັນ ເມື່ອ $1.",
+       "emailauthenticated": "ອີເມລຂອງທ່ານໄດ້ຖືກຢືນຢັນແລ້ວເມື່ອວັນທີ່ $2 ເວລາ $3.",
        "emailconfirmlink": "ຢືນຢັນ ທີ່ຢູ່ ອີເມລ ຂອງ ທ່ານ",
        "accountcreated": "ບັນຊີ ໄດ້ຖືກສ້າງ ແລ້ວ",
        "accountcreatedtext": "ບັນຊີ ຂອງ  $1 ໄດ້ ຖືກສ້າງແລ້ວ.",
+       "pt-login": "ເຂົ້າສູ່ລະບົບ",
+       "pt-createaccount": "ສ້າງບັນຊີ",
        "changepassword": "ປ່ຽນລະຫັດຜ່ານ",
        "oldpassword": "ລະຫັດຜ່ານເກົ່າ:",
        "newpassword": "ລະຫັດຜ່ານໃໝ່:",
        "retypenew": "ພິມລະຫັດຜ່ານໃໝ່ອີກ:",
        "resetpass_submit": "ຕັ້ງລະຫັດຜ່ານ ແລະ ເຊັນເຂົ້າ",
        "changepassword-success": "ສຳເລັດການປ່ຽນແປງ ລະຫັດຜ່ານຂອງທ່ານແລ້ວ! ດຽວນີ້ ທ່ານ ເຊັ່ນເຂົ້າ ໃນ ...",
+       "passwordreset-invalidemail": "ທີ່ຢູ່ອີເມລບໍ່ຖືກຕ້ອງ",
        "bold_sample": "ໂຕໜັງສືເຂັ້ມ",
        "bold_tip": "ໂຕໜັງສືເຂັ້ມ",
        "italic_sample": "ໂຕເນີ້ງ",
        "template-protected": "(ປົກປ້ອງ)",
        "template-semiprotected": "(ເຄິ່ງປົກປ້ອງ)",
        "nocreatetext": "{{SITENAME}} ໄດ້ຈຳກັດການສ້າງໜ້າໃໝ່.\nທ່ານສາມາດກັບໄປ ດັດແກ້ ໜ້າທີ່ມີແລ້ວ ຫຼື [[Special:UserLogin|ເຊັນເຂົ້າ ຫຼື ສ້າງບັນຊີ]].",
-       "cantcreateaccounttitle": "ບໍ່ສາມາດສ້າງ ບັນຊີ ໄດ້",
        "cantcreateaccount-text": "ການສ້າງບັນຊີ ຈາກ IP ນີ້ (<b>$1</b>) ໄດ້ຖືກຫ້າມ ໂດຍ [[User:$3|$3]].\n\nເຫດຜົນ ໃຫ້ໄວ້ ໂດຍ $3 ແມ່ນ ''$2''",
        "viewpagelogs": "ເບິ່ງບັນທຶກ ຂອງ ໜ້ານີ້",
        "nohistory": "ຍັງບໍ່ມີ ປະຫວັດການດັດແກ້ໜ້ານີ້ເທື່ອ.",
        "currentrev": "ສະບັບປະຈຸບັນ",
-       "revisionasof": "à»\80àº\99ືà»\89ອà»\83àº\99ສະàº\9aັàº\9aເມື່ອ $1",
-       "previousrevision": "â\86\90 àºªàº°àº\9aັàº\9aເກົ່າກວ່າ",
+       "revisionasof": "ລຸà»\89àº\99à»\81àº\81à»\89à»\84àº\82à»\80àº\81ົà»\88າເມື່ອ $1",
+       "previousrevision": "â\86\90 àº¥àº¸à»\89àº\99ເກົ່າກວ່າ",
        "nextrevision": "ສະບັບກ່ອນ",
        "currentrevisionlink": "ສະບັບປະຈຸບັນ",
        "cur": "ດຽວນີ້",
        "show": "ສະແດງ",
        "minoreditletter": "ລ",
        "newpageletter": "ມ",
+       "rc-change-size-new": "$1 {{PLURAL:$1|byte|bytes}} ຫຼັງການປ່ຽນແປງ",
        "recentchangeslinked": "ການດັດແກ້ທີ່ກ່ຽວຂ້ອງ",
        "recentchangeslinked-feed": "ການດັດແກ້ທີ່ກ່ຽວຂ້ອງ",
-       "recentchangeslinked-toolbox": "àº\81າàº\99àº\94ັàº\94à»\81àº\81à»\89ທີ່ກ່ຽວຂ້ອງ",
+       "recentchangeslinked-toolbox": "àº\81າàº\99àº\9bà»\88ຽàº\99à»\81àº\9bàº\87ທີ່ກ່ຽວຂ້ອງ",
        "recentchangeslinked-title": "ການປ່ຽນແປງກ່ຽວຂ້ອງກັບ \"$1\"",
        "upload": "ອັບໂຫຼດໄຟລ໌",
        "filedesc": "ສະຫຼຸບ",
        "sharedupload": "ໄຟລ໌ນີ້ແມ່ນການອັບໂຫຼດຣ່ວມ ແລະ ອາດຖືກໃຊ້ໂດຍໂຄງການອື່ນໆ.",
        "listredirects": "ລາຍການການໂອນໜ້າ",
        "unusedtemplates": "ແມ່ແບບບໍ່ໄດ້ໃຊ້",
-       "randompage": "ໜ້າໃດໜຶ່ງ",
+       "randompage": "ສຸà»\88ມà»\9cà»\89າà»\83àº\94à»\9cຶà»\88àº\87",
        "randomredirect": "ໂອນໄປໜ້າໃດໜຶ່ງ",
        "statistics": "ສະຖິຕິ",
        "doubleredirects": "ໂອນໜ້າ 2 ຄັ້ງ",
        "sp-contributions-search": "ຊອກຫາ ການປະກອບສ່ວນ",
        "sp-contributions-username": "ທີ່ຢູ່ IP ຫຼື ຊື່ຜູ້ໃຊ້:",
        "sp-contributions-submit": "ຊອກຫາ",
-       "whatlinkshere": "ໜ້າທີ່ເຊື່ອມຕໍ່ມາ",
+       "whatlinkshere": "ໜ້າທີ່ເຊື່ອມຕໍ່ມາໜ້ານີ້",
        "whatlinkshere-title": "ໜ້າທີ່ເຊື່ອມຕໍ່ຫາ $1",
        "linkshere": "ບັນດາໜ້າຕໍ່ໄປ ລິ້ງຄ໌ ຫາ ''[[:$1]]''':",
        "nolinkshere": "ບໍ່ມີໜ້າລິ້ງຄ໌ ຫາ '''[[:$1]]'''.",
        "blockipsuccesssub": "ຫ້າມສຳເລັດ",
        "ipblocklist": "ລາຍການ ທີ່ຢູ່ IP ແລະ ຊື່ຜູ້ໃຊ້ ທີ່ຖືກຫ້າມ",
        "blocklink": "ຫ້າມ",
-       "contribslink": "àº\9bະàº\81ອàº\9aສà»\88ວນ",
+       "contribslink": "à»\80ລືà»\88ອàº\87àº\97ີà»\88àº\82ຽນ",
        "autoblocker": "ຫ້າມໂດຍອັດຕາໂນມັດ ຍ້ອນ ທີ່ຢູ່ IP ຂອງທ່ານ ຖືກໃຊ້ໂດຍ \"[[User:$1|$1]]\" ໃນໄລຍະຫຼັງ. ເຫດຜົນໃນການຫ້າມ  $1 ແມ່ນ : \"$2\"",
        "blocklogpage": "ບັນທຶກການຫ້າມ",
        "blocklogentry": "ໄດ້ຫ້າມ \"[[$1]]\" ຈົນຮອດ $2 $3",
        "tooltip-pt-preferences": "ຕັ້ງຄ່າ",
        "tooltip-pt-watchlist": "ລາຍການໜ້າທີ່ທ່ານຕິດຕາມການປ່ຽນແປງ",
        "tooltip-pt-mycontris": "ລາຍການປະກອບສ່ວນຂອງຂ້ອຍ",
-       "tooltip-pt-login": "ມັàº\99àº\9aà»\8dà»\88à»\81ມà»\88àº\99àº\81າàº\99àº\9aັàº\87àº\84ັàº\9a à»\81àº\95à»\88 àº\97à»\88າàº\99àº\84ວàº\99à»\80àº\8aັàº\99à»\80àº\82ົà»\89າ",
+       "tooltip-pt-login": "àº\99ີà»\89àº\9aà»\8dà»\88à»\81ມà»\88àº\99àº\81າàº\99àº\9aັàº\87àº\84ັàº\9a. à»\81àº\95à»\88ຢà»\88າàº\87à»\83àº\94àº\81à»\8dàº\95າມ, àº\97à»\88າàº\99àº\84ວàº\99àº\97ີà»\88àº\88ະà»\80àº\82ົà»\89າສູà»\88ລະàº\9aົàº\9a.",
        "tooltip-pt-logout": "ເຊັນອອກ",
-       "tooltip-ca-talk": "ສົນທະນາ ກ່ຽວກັບ ເນື້ອໃນຂອງໜ້າ",
-       "tooltip-ca-edit": "ທ່ານສາມາດດັດແກ້ໜ້ານີ້ໄດ້. ກະລຸນາໃຊ້ປຸ່ມ ລອງເບິ່ງຜົນ ກ່ອນກົດປຸ່ມບັນທຶກ.",
+       "tooltip-pt-createaccount": "ນີ້ິບໍ່ແມ່ນການບັງຄັບ. ແຕ່ຢ່າງໃດກໍຕາມ, ທ່ານຄວນທີ່ຈະສ້າງບັນຊີແລະເຂົ້າສູ່ລະບົບ.",
+       "tooltip-ca-talk": "ສົນທະນາກ່ຽວກັບເນື້ອໃນຂອງໜ້າ",
+       "tooltip-ca-edit": "ແກ້ໄຂໜ້ານີ້",
        "tooltip-ca-addsection": "ເພີ່ມ ຄຳເຫັນ ໃສ່ ການສົນທະນານີ້.",
        "tooltip-ca-viewsource": "ໜ້ານີ້ຖືກປົກປ້ອງ. ທ່ານສາມາດເບິ່ງຊອສ.",
+       "tooltip-ca-history": "ລຸ້ນແກ້ໄຂເກົ່າຂອງໜ້ານີ້",
        "tooltip-ca-protect": "ປົກປ້ອງໜ້ານີ້",
        "tooltip-ca-delete": "ລຶບໜ້ານີ້",
        "tooltip-ca-move": "ຍ້າຍໜ້ານີ້",
        "tooltip-ca-watch": "ເພີ່ມໜ້ານີ້ໃສ່ລາຍການຕິດຕາມຂອງທ່ານ",
        "tooltip-ca-unwatch": "ເອົາໜ້ານີ້ອອກຈາກລາຍການຕິດຕາມ ຂອງ ທ່ານ",
        "tooltip-search": "ຄົ້ນຫາ {{SITENAME}}",
-       "tooltip-p-logo": "ໜ້າຫຼັກ",
+       "tooltip-search-go": "ໄປຫາໜ້າທີ່ມີຊື່ທີ່ແນ່ນອນນີ້ຖ້າມັນມີຢູ່",
+       "tooltip-search-fulltext": "ຄົ້ນຫາຂໍ້ຄວາມນີ້ໃນໜ້າ",
+       "tooltip-p-logo": "ເຂົ້າສູ່ໜ້າຫຼັກ",
        "tooltip-n-mainpage": "ໄປເບິ່ງໜ້າຫຼັກ",
-       "tooltip-n-portal": "ກ່ຽວກັບໂຄງການ, ທ່ານສາມາດເຮັດຫຍັງ, ແລະ ຈະຊອກຫາຫຍັງໄດ້ຢູ່ໃສ",
-       "tooltip-n-currentevents": "ຊອກຂໍ້ມູນກ່ຽວກັບກິດຈະກຳພວມດຳເນີນ",
-       "tooltip-n-randompage": "ໂຫຼດໜ້າໃດໜຶ່ງ",
-       "tooltip-n-help": "ບ່ອນຊອກ.",
-       "tooltip-t-whatlinkshere": "ລາຍການຂອງທຸກໆໜ້າວິກິ ທີ່ເຊື່ອມຕໍ່ມາ",
+       "tooltip-n-mainpage-description": "ເຂົ້າສູ່ໜ້າຫຼັກ",
+       "tooltip-n-portal": "ກ່ຽວກັບໂຄງການ, ສິ່ງທີ່ທ່ານເຮັດໄດ້, ແລະບ່ອນທີ່ສາມາດຫາສິ່ງຕ່າງໆໄດ້",
+       "tooltip-n-currentevents": "ຄົ້ນຫາມູນກ່ຽວກັບກິດຈະກຳທີ່ກຳລັງດຳເນີນ",
+       "tooltip-n-recentchanges": "ລາຍການການປ່ຽນແປງລ້າສຸດໃນວິກິ",
+       "tooltip-n-randompage": "ສຸ່ມໂຫຼດໜ້າໃດໜຶ່ງ",
+       "tooltip-n-help": "ບ່ອນທີ່ຕ້ອງການຄົ້ນຫາ",
+       "tooltip-t-whatlinkshere": "ລາຍການຂອງທຸກໆໜ້າໃນວິກິທີ່ເຊື່ອມຕໍ່ມາໜ້ານີ້",
+       "tooltip-t-recentchangeslinked": "ການແກ້ໄຂລ້າສຸດໃນໜ້າທີ່ເຊື່ອມຕໍ່ມາຈາກໜ້ານີ້",
        "tooltip-t-contributions": "ເບິ່ງລາຍການປະກອບສ່ວນໂດຍຜູ້ໃຊ້ນີ້",
        "tooltip-t-emailuser": "ສົ່ງອີເມລຫາຜູ້ໃຊ້ນີ້",
        "tooltip-t-upload": "ອັບໂຫຼດໄຟລ໌",
        "tooltip-t-specialpages": "ລາຍການໜ້າພິເສດທັງໝົດ",
+       "tooltip-t-print": "ສະບັບທີ່ພິມໄດ້ຂອງໜ້ານີ້",
+       "tooltip-t-permalink": "ລິງຄ໌ຖາວອນມາລຸ້ນແກ້ໄຂເກົ່າຂອງໜ້ານີ້",
+       "tooltip-ca-nstab-main": "ເບິ່ງໜ້າເນື້ອໃນ",
        "tooltip-ca-nstab-user": "ເບິ່ງໜ້າຜູ້ໃຊ້",
        "tooltip-ca-nstab-project": "ເບິ່ງໜ້າໂຄງການ",
        "tooltip-ca-nstab-image": "ເບິງໜ້າໄຟລ໌",
        "tooltip-compareselectedversions": "ເບິ່ງສ່ວນຕ່າງລະຫວ່າງ ສອງ ສະບັບເລືອກ.",
        "tooltip-watch": "ເພີ່ມໜ້ານີ້ໃສ່ລາຍການຕິດຕາມຂອງທ່ານ",
        "anonymous": "ຜູ້ໃຊ້ ບໍ່ສະແດງຊື່ ຈາກ {{SITENAME}}",
+       "pageinfo-toolboxlink": "ຂໍ້ມູນໜ້າ",
+       "confirm-markpatrolled-button": "ຕົກລົງ",
        "previousdiff": "ສ່ວນຕ່າງກ່ອນ",
        "nextdiff": "ສ່ວນຕ່າງຕໍ່ໄປ →",
        "imagemaxsize": "ກຳນົດຄວາມໃຫຍ່ຂອງ ຮູບ ຫຼື ໜ້າອະທິບາຍຮູບ ບໍ່ໃຫ້ກາຍ:",
        "file-info-size": "$1 × $2  ປິກເຊລ, ຂະໜາດໄຟລ໌: $3, MIME type: $4",
        "file-nohires": "ບໍ່ມີຂະໜາດລະອຽດກວ່າ",
        "show-big-image": "ເຕັມຂະໜາດ",
+       "show-big-image-size": "$1 × $2 ພິກເຊວ",
        "newimages": "ໄຟລ໌ຮູບໃໝ່",
        "newimages-summary": "ໜ້າພິເສດນີ້ສະແດງໄຟລ໌ທີ່ຖຶກອັປໂຫຼດຫຼ້າສຸດ",
        "noimages": "ບໍ່ມີຫຍັງເບິ່ງ.",
        "watchlisttools-edit": "ເບິ່ງ ແລະ ດັດແກ້ ລາຍການຕິດຕາມ",
        "version": "ສະບັບ",
        "specialpages": "ໜ້າພິເສດ",
+       "searchsuggest-search": "ຄົ້ນຫາ {{SITENAME}}",
        "expandtemplates": "ຂະຫຍາຍແມ່ແບບ"
 }
index 4a0cbcc..3b90e11 100644 (file)
        "yourname": "Sebelu:",
        "yourpassword": "Sebu dafi:",
        "yourpasswordagain": "Ritapi sebu dafi:",
-       "remembermypassword": "Askevusize zwa menuhile kwa bye kompyuta (for a maximum of $1 {{PLURAL:$1|day|days}})",
        "yourdomainname": "Zwa domeni:",
        "login": "Menuhile",
        "nav-login-createaccount": "Menuhile / ipupezi sebelu",
        "template-semiprotected": "(bukelezi di pagafi)",
        "nocreatetext": "{{SITENAME}} sa simplekile petulo.\nA afi e kenki/[[Special:UserLogin|menuhile]].",
        "recreate-moveddeleted-warn": "'''!: A sa hloli petulo dy sa afi kulobala.'''\n\nA sa luku a kenki dyangitubilinisize petulo.\nDesu dafi kulobala di petulo sa gi di informasi:",
-       "cantcreateaccounttitle": "Ni sa hloli di sebelu",
        "viewpagelogs": "Kamukile desu di petulo",
        "currentrev": "Selt nca",
        "revisionasof": "Selt di $1",
index 7aed884..996551b 100644 (file)
        "yourpasswordagain": "یئ گئل هأنی رازینە گوڤاردئن نە بأزە",
        "createacct-yourpasswordagain": "رازینە گوڤاردئن نە پوشت راس کو",
        "createacct-yourpasswordagain-ph": "یئ گئل هأنی رازینە گوڤاردئن نە بأزە",
-       "remembermypassword": "ئوٙمائن ڤامین مئنە د ئی دوڤارتە نیأر د ڤیر داشتوٙ (سی بیشتئروٙنە $1{{PLURAL:$1|روٙز|روٙزیا}})",
        "userlogin-remembermypassword": "مئنە د ساموٙنە ڤادار",
        "userlogin-signwithsecure": "ڤأصل بییئن أمن نە ڤئ کار بئیر",
        "yourdomainname": "پوشگئر شوما:",
        "passwordreset-emailtext-user": "کاریار $1 د {{SITENAME}} د نۊ زئنە کئردئن رازینە گوڤاردئن شومانە د{{SITENAME}} ($4) حاستە. {{PLURAL:$3|حئساڤ|حئساڤیا}} کاریاری کئ هان د هار و ڤا ئی تیرنئشوٙن أنجومانامە هان د ئرتئڤاط:\n\n$2\n\n رازینە گوڤاردئن {{PLURAL:$3|ئی رازینە یا گوڤاردئن موڤأقأتی|ئی رازینە یا گوڤاردئن موڤأقأتی}} شوما د گات {{PLURAL:$5|یئ روٙ|$5 روٙ}} باطئل بوٙە.\nأر کأسی هأنی چئن حاستی داشتە یا یە کئ رازینە گوڤاردئن دئمایی شوما د ڤیرئتوٙ ئوٙما و دە نئمیهایت ڤئنە آلئشت کاری بأکیت، می توٙنیت د ئی پئیغوم تیە پوٙشی بأکیت و هأموٙ رازینە گوڤاردئن دئمایی نە بونیت د کار.",
        "passwordreset-emailelement": "نوم کاریاری: \n$1\n\nرازینە گوڤاردئن موڤأقتی: \n$2",
        "passwordreset-emailsentemail": "یئ گئل رازینە گوڤاردئن هأنی سی أنجومانامە کئل بییە.",
-       "passwordreset-emailsent-capture": "رازینە گوڤاردئن تازە توٙ سی أنجومانامە توٙ کئ ها د هار کئل بییە.",
-       "passwordreset-emailerror-capture": "رازینە گوڤاردئن د أنجومانامە د نۊ زئنە کون کئل بییە،و ڤئ د هار دیاری میکە، ڤألی کئل بییئن ڤئ سی {{GENDER:$2|کاریار}} ناخوش سأرنجوم بییە:$1",
        "changeemail": "أنجومانامە توٙنە آلئشت کاری بأکیت",
        "changeemail-header": "ئی فورمئ نە سی آلئشتکاری أنجومانامە توٙ پور بأکیت. أر میھایت ھأر جوٙر أنجومانامە یی نە د مینجا حئساڤئتوٙ پاکسا بأکیت، جاگە دأئن أنجومانامە نئ د چئنی فورمی حالی بأنیت.",
-       "changeemail-passwordrequired": "شوما سی پوشت راستکاری ئی آلئشت بایأد یئ گئل رازینە گوڤاردئن بأزئنیت.",
        "changeemail-no-info": "شوما سی یە کئ د ئی بألگە دأسرئسی داشتوٙییت باس بیاییت ڤامین.",
        "changeemail-oldemail": "تیرنئشوٙن أنجومانامە ئیسئنی:",
        "changeemail-newemail": "تیرنئشوٙن أنجومانامە تازە:",
        "undo-nochange": "وه نظر میا که ای ویرایشت د ایسنیا خومثی بیه.",
        "undo-summary": "خومثی بیئن وانئری وا $1 [[Special:Contributions/$2|$2]] ([[User talk:$2|چک چنه]])",
        "undo-summary-username-hidden": "خومثی بیئن وانئری $1 وا یه گل کاریار قام بیه",
-       "cantcreateaccounttitle": "نأبوٙە حئساڤ راس بأکیت",
        "cantcreateaccount-text": "حساو دروس بیه و ا ای تیرنشون آی پی(<strong>$1</strong>) وه دس ای [[کاریار:$3|$3]] قلف بیه.\n\n\nدلیل دئه بیه وا $3 ها د<em>$2</em>",
        "cantcreateaccount-range-text": "حساو دروس بیه وا تیرنشون آی پی که د پوشینه <strong>$1</strong> ، که وه ئم مینونه دار تیرنشون آی پی شما ئم هئ(<strong>$4</strong>)، وه دس [[کاریار:$3|$3]]قلف بیه.\n\nدلیل دئه بیه وا $3، \"$2\" ئه.",
        "viewpagelogs": "سئیل پئرئستنوٙمە یا ئی بألگە بأکیت",
        "activeusers-intro": "شما د هار یه گل نومگه د کاریاریایی نه مینیت که د $1 {{PLURAL:$1|رو|رو}} دماتر کنشتگر بینه.",
        "activeusers-count": "$1 {{PLURAL:$1|کنشت|کنشت}} در {{PLURAL:$3|رو|$3 رو}} دماتر",
        "activeusers-from": "کاریاریایی که د شرو بینه نشو بیه:",
-       "activeusers-hidebots": "بوتیا قام کو",
-       "activeusers-hidesysops": "دیوون داریا نه قام کو",
        "activeusers-noresult": "هیچ کاروری پیدا نبی",
        "listgrouprights": "حقوق گرو کاریاری",
        "listgrouprights-summary": "نومگه های گرته د ور گرویا کاریاری تعریف بیه د ای ویکی و اختیارات دئه بیه د ونونه.\nدونسمنیا بیشتر دباره هرکوم د اختیارات نه د   [[{{MediaWiki:Listgrouprights-helppage}}]] پیدا بکیت.",
        "htmlform-cloner-create": "هنی اضاف بکیت",
        "htmlform-cloner-delete": "ؤرداشتن",
        "htmlform-cloner-required": "سی کمترونه یه گل ارزایشت لازمه",
-       "sqlite-has-fts": "$1 وا حامینداری پی جوری تمام نیسسه یی",
-       "sqlite-no-fts": "$1 وا بی حامینداری پی جوری تمام نیسسه یی",
        "logentry-delete-delete": "$1 بلگه {{GENDER:$2|پاکسا بیه}} $3",
        "logentry-delete-restore": "$1 {{GENDER:$2|}} بلگه $3 د نو زنه کرده",
        "logentry-delete-event": "$1 دیاری {{PLURAL:$5|یه گل رخ ون د پهرستنومه|$5 رخ ونیا د پهرستنومه}} نه $3 {{GENDER:$2|آلشتکاری کرد}}: $4",
        "feedback-external-bug-report-button": "جانیا سازی یه گل کنشتیاری کسمدار",
        "feedback-dialog-title": "دیار بیین نهاحردیاری",
        "feedback-dialog-intro": "شما می تونیت نوم بلگه هاری نه سی دماداری هوال حونتو وه کار بئریت.نیسسه شما واگرد نوم کاریاریتو د بلگه \"$1\" اضاف موئه.",
-       "feedback-error-title": "خطا",
        "feedback-error1": "خطا: جواویا نادیار د پیوندکار برنامه نیسی نرم افزار",
        "feedback-error2": "خطا:ویرایشت خو نبی",
        "feedback-error3": "خطا: جواو ندئن د پیوندکار برنامه نیسی نرم افزار",
index 0a995ad..25c81ba 100644 (file)
        "talk": "Aptarimas",
        "views": "Peržiūros",
        "toolbox": "Įrankiai",
-       "tool-link-userrights": "Keisti {{GENDER:$1|vartotojo|vartotojos}} grupes",
-       "tool-link-emailuser": "Siusti el. laišką {{GENDER:$1|šiam vartotojui|šiai vartotojai}}",
+       "tool-link-userrights": "Keisti {{GENDER:$1|naudotojo|naudotojos}} grupes",
+       "tool-link-emailuser": "Siųsti {{GENDER:$1|šiam naudotojui|šiai naudotojai}} el. laišką",
        "userpage": "Rodyti naudotojo puslapį",
        "projectpage": "Rodyti projekto puslapį",
        "imagepage": "Žiūrėti failo puslapį",
        "ok": "Gerai",
        "retrievedfrom": "Gauta iš „$1“",
        "youhavenewmessages": "Jūs turite $1 ($2).",
-       "youhavenewmessagesfromusers": "Jūs gavote $1 nuo {{PLURAL:$3|kito vartotojo|$3 vartotojų}} ($2).",
+       "youhavenewmessagesfromusers": "Jūs gavote $1 nuo {{PLURAL:$3|kito naudotojo|$3 naudotojų}} ($2).",
        "youhavenewmessagesmanyusers": "Jūs turite $1 iš daugelio vartotojų ( $2 ) .",
        "newmessageslinkplural": "{{PLURAL:$1|nauja žinutė|999=naujos žinutės}}",
        "newmessagesdifflinkplural": "paskutinis {{PLURAL:$1|pakeitimas|999=pakeitimai}}",
        "passwordreset-emaildisabled": "El. pašto funkcijos uždraustos šiame wiki.",
        "passwordreset-username": "Naudotojo vardas:",
        "passwordreset-domain": "Domenas:",
-       "passwordreset-capture": "Peržiūrėti galutinį e-mail laišką?",
-       "passwordreset-capture-help": "Jei jūs čia pažymėsite, tai e-mail laiškas (su laikinuoju slaptažodžiu) bus parodytas jums prieš išsiunčiant jį naudotojui.",
        "passwordreset-email": "E-pašto adresas:",
        "passwordreset-emailtitle": "Paskyros informacija apie {{sitename}}",
        "passwordreset-emailtext-ip": "Kažkas (tikriausiai jūs, iš IP adreso $1) paprašė priminti jūsų slaptažodį svetainėje {{SITENAME}} ($4). Šio naudotojo {{PLURAL:$3|paskyra|paskyros}} yra susietos su šiuo elektroninio pašto adresu:\n\n$2\n\n{{PLURAL:$3|Šis laikinas slaptažodis|Šie laikini slaptažodžiai}} baigs galiot po {{PLURAL:$5|vienos dienos|$5 dienų}}. \n\nJūs turėtumėte prisijungti ir pasirinkti naują slaptažodį. Jei priminti slaptažodį paprašė kažkas kitas arba jūs prisiminėte savo pirminį slaptažodį ir jums nebereikia jo pakeisti, galite ignoruoti šį pranešimą ir toliau naudotis savo senuoju slaptažodžiu.",
        "passwordreset-emailelement": "Naudotojo vardas: \n$1\n\nLaikinas slaptažodis: \n$2",
        "passwordreset-emailsentemail": "Jeigu šis el. pašto adresas yra susietas su jūsų paskyra, tada slaptažodžio atkūrimo laiškas bus išsiųstas.",
        "passwordreset-emailsentusername": "Jeigu buvo el. paštas susietas su šiuo naudotojo vardu, tai slaptažodžio atkūrimo el. laiškas bus išsiųstas.",
-       "passwordreset-emailsent-capture2": "Slaptažodžio keitimo {{PLURAL:$1|el. laiškas buvo išsiųstas|el. laiškai buvo išsiųsti}}. {{PLURAL:$1|vartotojo vardas ir slaptažodis rodomi|vartotojų vardų ir slaptažodžių sąrašas rodomas}} čia.",
-       "passwordreset-emailerror-capture2": "El. laiško siuntimas {{GENDER:$2|vartotojui}} nepavyko: $1 {{PLURAL:$3|vartotojo vardas ir slaptažodis rodomi|vartotojų vardų ir slaptažodžių sąrašas rodomas}} čia.",
        "passwordreset-nocaller": "Skambinantysis turi būti nurodytas",
        "passwordreset-nosuchcaller": "Skambinantysis neegzistuoja: $1",
-       "passwordreset-invalideamil": "Neteisingas el. pašto adresas",
+       "passwordreset-invalidemail": "Neteisingas el. pašto adresas",
        "passwordreset-nodata": "Vartotojo vardas ir el. paštas buvo nepateikti",
        "changeemail": "Pakeisti ar pašalinti el. pašto adresą",
        "changeemail-header": "Užpildykite šią formą, kad pakeistumėte savo el. pašto adresą. Jeigu norite pašalinti bet kurio el. pašto adreso susiejimą su savo paskyra, palikite naujojo el. pašto adreso lauką tuščią, kai pateiksite formą.",
        "right-siteadmin": "Atrakinti ir užrakinti duomenų bazę",
        "right-override-export-depth": "Eksportuoti puslapius įtraukiant susietus puslapius iki 5 lygio gylio",
        "right-sendemail": "Siųsti el. laišką kitiems naudotojams",
-       "right-passwordreset": "Peržiūrėti slaptažodžio pakeitimo e-mail laiškus",
        "right-managechangetags": "Kurti ir (de)aktyvuoti [[Special:Tags|žymes]]",
        "right-applychangetags": "Taikyti [[Special:Tags|žymes]] kartu su pokyčiais",
        "right-changetags": "Pridėti ir ištrinti savavališkus [[Special:Tags|žymes]] individualiuose pakeitimuose ir žurnalo įrašuose",
        "activeusers-count": "$1 {{PLURAL:$1|keitimas|keitimai|keitimų}} per {{PLURAL:$3|paskutinę dieną|$3 paskutines dienas|$3 paskutinių dienų}}",
        "activeusers-from": "Rodyti naudotojus, pradedant:",
        "activeusers-groups": "Rodyti vartotojus, priklausančius grupėms:",
+       "activeusers-excludegroups": "Išskirti vartotojus, priklausančius grupėms:",
        "activeusers-noresult": "Nerasta jokių naudotojų.",
        "activeusers-submit": "Rodyti aktyvius vartotojus",
        "listgrouprights": "Naudotojų grupių teisės",
index 7f67c7c..78695da 100644 (file)
        "viewsource": "Apsavērt kodu",
        "yourname": "Slāgvuords:",
        "yourpassword": "Paroļs:",
-       "remembermypassword": "Atguoduot muni  iz ituo datora (na vaira kai $1 {{PLURAL:$1|dīnu|dīnom|dīnom}})",
        "login": "Dasaslāgt",
        "nav-login-createaccount": "Dasaslāgt / sataiseit jaunu lītuotuoju",
        "userlogin": "Dasaslāgt / sataiseit jaunu lītuotuoju",
index 2b001c6..d0fc2b3 100644 (file)
        "yourname": "Hmangtuhming:",
        "yourpassword": "Thurûk:",
        "yourpasswordagain": "Thurûk ziak nawn leh rawh le:",
-       "remembermypassword": "He ka rangpuifanna hman mék (browser)-ah hian ka luhna (a rei berah ni {{PLURAL:$1||}}$1) min vawnsak rawh, thurûk ziah nawn ngai lo tùrin.",
        "yourdomainname": "I ram:",
        "password-change-forbidden": "Hë wiki-ah hian thurûk i thlâk thei lo.",
        "externaldberror": "Insawifiahna felfai lo a awm lo a nih loh vëk pawhin i pawnlam siangchan tihdanglam phalsak i ni lo a ni ang.",
        "passwordreset-emailtitle": "{{SITENAME}}-a siangchan chanchin kim",
        "passwordreset-emailelement": "Hmangtuhming: \n$1\n\nThurûk lailâwk: \n$2",
        "passwordreset-emailsentemail": "Hriat nawntirna e-lehkha thawn fel a ni.",
-       "passwordreset-emailsent-capture": "Hriat nawntirna e-lehkha thawn a ni, a hnuaia tarlan ang khuan.",
-       "passwordreset-emailerror-capture": "Hriat nawntirna e-lehkha siam chhuah a ni a, a hnuaia tarlan ang khuan; mahsé thawn hlawhchham a ni: $1",
        "changeemail": "E-chenhmun thlâk rawh",
        "changeemail-header": "Siangchan e-chenhmun thlâk rawh",
        "changeemail-no-info": "He phêk lut mai tùr chuan i inziahluh a ngai.",
        "node-count-exceeded-warning": "Suihbawl theih chin pèl phêkte",
        "expansion-depth-exceeded-category": "Tihchiam theih chin pèl phêkte",
        "expansion-depth-exceeded-warning": "Tihchiam theih chin phêkin a pèl",
-       "cantcreateaccounttitle": "Siangchan siam theih loh",
        "viewpagelogs": "He phêk chanchin hi en rawh",
        "nohistory": "Hë phêk siamṭhatna chanchin ziak a awm lo tlat.",
        "currentrev": "Ennawnna hnuhnung ber",
        "listusers-noresult": "Hmangtu an awm lo.",
        "listusers-blocked": "(danbeh)",
        "activeusers": "Hmangtu hlun tlarna",
-       "activeusers-hidebots": "Khawlmi thupna",
-       "activeusers-hidesysops": "Roreltu thupna",
        "activeusers-noresult": "Hmangtu awm lo.",
        "listgrouprights": "Hmangtu pawl dikna-chanvote",
        "listgrouprights-key": "* <span class=\"listgrouprights-granted\">Dikna-chanvo phalsak</span>\n* <span class=\"listgrouprights-revoked\">Dikna-chanvo hnuhkirsak</span>",
        "special-characters-group-lao": "Lao",
        "special-characters-group-khmer": "Khmer",
        "mw-widgets-dateinput-placeholder-day": "KKKK-TT-NN",
-       "mw-widgets-dateinput-placeholder-month": "KKKK-TT",
-       "api-error-blacklisted": "Hming dang, chiang zâwk deuh thlang hräm rawh le."
+       "mw-widgets-dateinput-placeholder-month": "KKKK-TT"
 }
index fe7a8e3..0b8c8c4 100644 (file)
        "passwordreset-emailelement": "Lietotājvārds: \n$1\n\nPagaidu parole: \n$2",
        "passwordreset-emailsentemail": "Paroles atiestatīšanas e-pasts ir nosūtīts.",
        "passwordreset-nosuchcaller": "Izsaucējs nepastāv: $1",
-       "passwordreset-invalideamil": "Nederīga e-pasta adrese",
+       "passwordreset-invalidemail": "Nederīga e-pasta adrese",
        "changeemail": "Mainīt vai noņemt e-pasta adresi",
        "changeemail-header": "Mainīt konta e-pasta adresi",
        "changeemail-oldemail": "Pašreizējā e-pasta adrese:",
index 153ab06..81906f6 100644 (file)
        "yourpasswordagain": "復核節",
        "createacct-yourpasswordagain": "訂子符節",
        "createacct-yourpasswordagain-ph": "復告符節",
-       "remembermypassword": "吾之簿通越(達至$1日)",
        "userlogin-remembermypassword": "保我簿登",
        "userlogin-signwithsecure": "以安全伺服登簿",
        "yourdomainname": "汝之網域",
        "undo-failure": "中審之異,此審無返也。",
        "undo-norev": "其審無存或刪,此審無返也。",
        "undo-summary": "返[[Special:Contributions/$2|$2]]([[User talk:$2|書]])之審$1",
-       "cantcreateaccounttitle": "新簿謝焉",
        "cantcreateaccount-text": "[[User:$3|S3]]因''$2''故,封子IP <b>$1</b>。",
        "viewpagelogs": "覽誌",
        "nohistory": "此題無誌",
        "activeusers-intro": "此乃為近$1天內之躍簿也。",
        "activeusers-count": "$3天內之$1易",
        "activeusers-from": "示簿始於:",
-       "activeusers-hidebots": "藏僕",
-       "activeusers-hidesysops": "藏有秩",
        "activeusers-noresult": "無簿矣。",
        "listgrouprights": "權任一覽",
        "listgrouprights-summary": "此所列述,諸職所司也,各有異同。欲知其詳,請閱[[{{MediaWiki:Listgrouprights-helppage}}|此文]]。",
        "htmlform-submit": "呈",
        "htmlform-reset": "復",
        "htmlform-selectorother-other": "他",
-       "sqlite-has-fts": "$1 含全文之尋",
-       "sqlite-no-fts": "$1 不含全文之尋",
        "revdelete-restricted": "應限至有秩",
        "revdelete-unrestricted": "除限自有秩",
        "logentry-newusers-create": "簿$1已{{GENDER:$2|增}}。",
index a5ceb17..c997386 100644 (file)
        "passwordreset-emailtext-user": "प्रयोक्ता $1 {{अन्तर्जाल}} पर अहाँक खाता विवरणक {{SITENAME}} लेल फेरसँ ($4) आग्रह केने छथि। ई प्रयोक्ता {{PLURAL:$3|खाता अछि|खाता सभ अछि}} ऐ ई-पत्र संकेतसँ जुड़ल: $2\n{{PLURAL:$3| ई अस्थायी कूटशब्द|ई सभ अस्थायी कूटशब्द}} खतम भऽ जाएत {{PLURAL:$5|एक दिन|$5 दिन}} मे।\nअहाँ सम्प्रवेश करू आ एकटा नव कूटशब्द आब चुनू। जँ कियो दोसर ई आग्रह केने छथि, वा जँ अहाँकेँ अपन मूल कूटशब्द मोन पड़ि गेल अछि, आ अहाँ आब ओइ कूटशब्दकेँ नै बदलऽ चाहै छी, अहाँ ऐ संदेशकेँ बिसरि सकै छी आ अपन पुरान कूटशब्दक प्रयोग जारी राखि सकै छी।",
        "passwordreset-emailelement": "प्रयोक्ता: \n$1\n\nअस्थायी कूटशब्द: \n$2",
        "passwordreset-emailsentemail": "एकटा ई-पत्र मोन पाड़बा लेल पठाओल गेल अछि।",
-       "passwordreset-invalideamil": "अवैध इमेल ठेगान",
+       "passwordreset-invalidemail": "अवैध इमेल ठेगान",
        "passwordreset-nodata": "प्रयोगकर्ता नाम वा इमेल ठेगान नै देल गेल छल",
        "changeemail": "ई-मेल पता परिवर्तित करी",
        "changeemail-header": "अपन ईमेल पता परिवर्तन हेतु एकरा पुरा करी। यदि अहाँ अपन वर्तमान ईमेल पता हटाबैलेल चाहैत छी, तँ एकरा खाली छोडि दी आ एकरा भेजी।",
index 2cc972a..fe20055 100644 (file)
        "yourpasswordagain": "Balèni tembung sandhi:",
        "createacct-yourpasswordagain": "Konfirmasi tembung sandhi",
        "createacct-yourpasswordagain-ph": "Lebokna tembung sandhi maning",
-       "remembermypassword": "Emutna data login-ne inyong nang peramban kiye (kanggo paling suwe $1 {{PLURAL:$1|dina|dina}})",
        "userlogin-remembermypassword": "Jorna ben Inyong tetep mlebu log",
        "userlogin-signwithsecure": "Gunakna koneksi aman",
        "cannotloginnow-title": "Ora teyeng mlebu siki",
index 31ca464..3a309a5 100644 (file)
        "yourname": "Тиить лемоц:",
        "yourpassword": "Сувама валце:",
        "yourpasswordagain": "Сёрматк сувама валце омбоцекс:",
-       "remembermypassword": "Ванфтомс монь сувама лемозе тя содам машинаса (максимум $1 {{PLURAL:$1|шис|шис}})",
        "yourdomainname": "Тонь доменце:",
        "password-change-forbidden": "Сувама валхне тя викить эса аф полафтовихть",
        "externaldberror": "Лиссь эльбятькс ушеширень датабазонь вельде кемокстакшнембачк эли тондейть аф мярьгови полафнемс тонь ушеширень сёрматфтомацень.",
        "undo-failure": "Тя петнемать аш кода валхтомс ётконь петнематнень карань-каршек арафтомаснон сюнеда.",
        "undo-norev": "Тя петнемать аш кода мърдафтомс сяс мес сонь аш эли сон нардафоль.",
        "undo-summary": "Валхтт петнемась $1 конань тизе [[Special:Contributions/$2|$2]] ([[User talk:$2|Корхнема]])",
-       "cantcreateaccounttitle": "Аш кода сёрматфтомать тиемс",
        "cantcreateaccount-text": "Сёрматфтомась тя IP адреста ('''$1''') пякстазе [[User:$3|$3]].\n\n$3 макссь туфталсь - ''$2''",
        "viewpagelogs": "Няфтемс тя лопать историянц",
        "nohistory": "Тя лопать петнемань историяц аш.",
index 94699ba..74f57ae 100644 (file)
        "yourpasswordagain": "Avereno ampidirina eto ny tenimiafina",
        "createacct-yourpasswordagain": "Hamarino ny tenimiafinao",
        "createacct-yourpasswordagain-ph": "Mbola ampidiro fanindroany ny tenimiafinao",
-       "remembermypassword": "{{PLURAL:}}Tadidio ny tenimiafiko (mandritry ny $1 andro fara-fahabetsany)",
        "userlogin-remembermypassword": "Tadidio aho",
        "userlogin-signwithsecure": "Fidirana amin'ny alalan'ny fanohizana azo antoka",
        "cannotloginnow-title": "Tsy afaka miditra izao",
        "botpasswords-label-delete": "Fafàna",
        "botpasswords-label-resetpassword": "Hamerina ny tenimiafina",
        "botpasswords-label-grants": "Zo mihatra:",
-       "botpasswords-label-restrictions": "Fetran'ny fampiasana:",
        "botpasswords-label-grants-column": "Nomena",
        "botpasswords-bad-appid": "Tsy azo raisina ny anarana rôbô \"$1\".",
        "botpasswords-insert-failed": "Tsy afaka nanampy ny anarana rôbô \"$1\". Tsy efa nampiana ve ilay izy?",
        "activeusers-intro": "Ity ny lisitry ny mpikambana izay nanao zavatra iray nandritry ny andro $1 farany. {{PLURAL:}}",
        "activeusers-count": "Tao $1{{PLURAL:}} tanatin'ny $3 andro",
        "activeusers-from": "Aseho ny mpikambana hatry ny :",
-       "activeusers-hidebots": "Asitriho ny robo",
-       "activeusers-hidesysops": "Asitriho ny mpandrindra",
        "activeusers-noresult": "Tsy nahitana mpikambana.",
        "activeusers-submit": "Hanseho ny mpikambana mavitrika",
        "listgrouprights": "Fahefan'ny vondrom-pikambana",
        "htmlform-title-not-exists": "Tsy misy $1.",
        "htmlform-user-not-exists": "Tsy misy ny <strong>$1</strong>.",
        "htmlform-user-not-valid": "Tsy anaram-pikambana azo raisina <strong>$1</strong>.",
-       "sqlite-has-fts": "$1 misy fikarohan-dahatsoratra tanteraka",
-       "sqlite-no-fts": "$1 tsy misy fikarohan-dahatsoratra tanteraka",
        "logentry-delete-delete": "nofafan'i $1 ny pejy $3",
        "logentry-delete-restore": "Namerina ny pejy $3 i $1{{GENDER:$2|}}",
        "logentry-delete-event": "Nanova ny fahitana {{PLURAL:$5|laogy iray|laogy $5}} tamin'i $3 i $1: $4",
index 868df89..a41205a 100644 (file)
        "yourpasswordagain": "Ulang baliak kato sandi:",
        "createacct-yourpasswordagain": "Konfirmasi kato sandi",
        "createacct-yourpasswordagain-ph": "Masuakan lai kato sandi",
-       "remembermypassword": "Ingek log masuak denai di paramban ko (salamo $1 {{PLURAL:$1|hari}})",
        "userlogin-remembermypassword": "Biakan ambo tetap masuak",
        "userlogin-signwithsecure": "Gunoan server aman",
        "yourdomainname": "Domain Sanak:",
        "listusers-blocked": "(tasakek)",
        "activeusers": "Daftar pangguno aktif",
        "activeusers-from": "Tunjuakan pangguno mulai dari:",
-       "activeusers-hidebots": "Suruakan bot",
-       "activeusers-hidesysops": "Suruakan panguruih",
        "activeusers-noresult": "Pangguno indak basobok",
        "listgrouprights": "Daftar kalompok pangguno",
        "listgrouprights-summary": "Barikuik ko adolah daftar kalompok pangguno nan ado di wiki ko, jo daftar hak aksesnyo masiang-masiang. Informasi labih lanjuik masalah hak masiang-masiang dapek dijumpoi di [[{{MediaWiki:Listgrouprights-helppage}}|laman bantuan hak pangguno]].",
index bfb6fee..b36ec74 100644 (file)
        "passwordreset-emaildisabled": "Можностите за е-пошта се исклучени на ова вики",
        "passwordreset-username": "Корисничко име:",
        "passwordreset-domain": "Домен:",
-       "passwordreset-capture": "Да ја прикажам пораката?",
-       "passwordreset-capture-help": "Ако го штиклирате кутивчево, ќе ви се прикаже пораката (со привремената лозинка) и истата ќе му биде испратена на корисникот.",
        "passwordreset-email": "Е-пошта:",
        "passwordreset-emailtitle": "Најавни податоци за {{SITENAME}}",
        "passwordreset-emailtext-ip": "Некој (веројатно вие, од IP-адресата $1) побара измена на вашата\nлозинка за {{SITENAME}} ($4). Оваа е-поштенска адреса е наведена во\n{{PLURAL:$3|следнава корисничка сметка|следниве кориснички сметки}}:\n\n$2\n\n{{PLURAL:$3|Оваа привремена лозинка ќе истече|Овие привремени лозинки ќе истечат}} во рок од {{PLURAL:$5|еден ден|$5 дена}}.\nСега треба да се најавите и да внесете нова лозинка. Ако ова барање го\nпоставил некој друг, или пак во меѓувреме сте се сетиле на лозинката, и не сакате\nда ја менувате, тогаш слободно занемарете ја поракава и продолжете да ја користите старата.",
        "passwordreset-emailelement": "Корисничко име: \n$1\n\nПривремена лозинка: \n$2",
        "passwordreset-emailsentemail": "Ако ова е регистрираната е-пошта поврзана со вашата сметка, тогаш ќе ви биде испратено писмо за задавање на нова лозинка.",
        "passwordreset-emailsentusername": "Ако има соодветна регистрирана е-пошта поврзана со ова корисничко име, тогаш ќе ви биде испратена порака за промена на лозинката.",
-       "passwordreset-emailsent-capture2": "{{PLURAL:$1|Е-поштата за задавање на нова лозинка|Е-поштата за задавање на нови лозинки}} е испратена. Тука е {{PLURAL:$1|е прикажано корисничкото име и лозинката|прикажан список на кориснички имиња и лозинки}}.",
-       "passwordreset-emailerror-capture2": "Испраќањето е-пошта на {{GENDER:$2|корисникот}} не успеа: $1 Тука е {{PLURAL:$3|прикажано корисничкото име и лозинката|прикажан список на кориснички имиња и лозинки}}.",
        "passwordreset-nocaller": "Мора да се укаже повикувач",
        "passwordreset-nosuchcaller": "Повикувачот не постои: $1",
        "passwordreset-ignored": "Менувањето на лозинката не успеа. Можеби не е поставен услужник?",
-       "passwordreset-invalideamil": "Неважечка е-пошта",
+       "passwordreset-invalidemail": "Неважечка е-пошта",
        "passwordreset-nodata": "Немате укажано ни корисничко име, ни е-пошта.",
        "changeemail": "Смени или отстрани е-пошта",
        "changeemail-header": "Пополнете го образецов за да ја смените е-поштата. Ако сакате да ја отстраните адресата од вашата сметка, оставете го празно полето за нова е-пошта.",
        "right-siteadmin": "Заклучување и отклучување на базата на податоци",
        "right-override-export-depth": "Извезување на страници вклучувајќи поврзани страници со длабочина до 5",
        "right-sendemail": "Испраќање на е-пошта до други корисници",
-       "right-passwordreset": "Преглед на пораки по е-пошта за промена на лозинка",
        "right-managechangetags": "Создавање и (де)активирање на [[Special:Tags|ознаки]]",
        "right-applychangetags": "Задавање на [[Special:Tags|ознаки]] заедно со направените измени",
        "right-changetags": "Додавате и отстранување на произволни [[Special:Tags|ознаки]] во поединечни преработки и дневнички записи",
        "apisandbox-continue": "Продолжи",
        "apisandbox-continue-clear": "Исчисти",
        "apisandbox-continue-help": "{{int:apisandbox-continue}} ќе [https://www.mediawiki.org/wiki/API:Query#Continuing_queries продолжи] со последното барање; „{{int:apisandbox-continue-clear}}“ ќе ги исчисти параметрите поврзани со продолжување.",
+       "apisandbox-param-limit": "Внесете <kbd>max</kbd> за да ја користите најгорната граница.",
        "booksources": "Печатени извори",
        "booksources-search-legend": "Пребарување на извори за книга",
        "booksources-isbn": "ISBN:",
        "activeusers-count": "$1 {{PLURAL:$1|дејство|дејства}} {{PLURAL:$3|денес|во последните $3 дена}}",
        "activeusers-from": "Прикажи корисници почнувајќи од:",
        "activeusers-groups": "Прикажи ги корисниците кои членуваат во групите:",
+       "activeusers-excludegroups": "Изземи ги корисниците што членуваат во групите:",
        "activeusers-noresult": "Не пронајдов ниеден корисник.",
        "activeusers-submit": "Прикажи активни корисници",
        "listgrouprights": "Права на кориснички групи",
        "tags-deactivate": "деактивирај",
        "tags-hitcount": "$1 {{PLURAL:$1|промена|промени}}",
        "tags-manage-no-permission": "Немате дозвола за раководење со ознаки за промени.",
-       "tags-manage-blocked": "Не можете да раководите со ознаки за промени додека сте блокирани.",
+       "tags-manage-blocked": "Не можете да раководите со ознаки за промени додека {{GENDER:$1|сте}} блокирани.",
        "tags-create-heading": "Создај нова ознака",
        "tags-create-explanation": "Новосоздадните ознаки по основно ќе се стават на располагање за употреба од корисници и ботови.",
        "tags-create-tag-name": "Име на ознаката:",
        "tags-deactivate-not-allowed": "Не можам да ја деактивирам ознаката „$1“.",
        "tags-deactivate-submit": "Декативирај",
        "tags-apply-no-permission": "Немате дозвола да ставате ознаки за промени заедно со измените што ги правите.",
-       "tags-apply-blocked": "Не можете да задавате ознаки за промени додека сте блокирани.",
+       "tags-apply-blocked": "Не можете да задавате ознаки за промени додека {{GENDER:$1|сте}} блокирани.",
        "tags-apply-not-allowed-one": "Не е дозволено ознаката „$1“ да се става рачно.",
        "tags-apply-not-allowed-multi": "Не е дозволено {{PLURAL:$2|следнава ознака да се става рачно|следниве ознаки да се ставаат рачно}}: $1",
        "tags-update-no-permission": "Немате дозвола да додавате или отстранувате ознаки за промена од поединечни преработки или дневнички записи.",
-       "tags-update-blocked": "Не можете да додавате и отстранувате ознаки за промени додека сте блокирани.",
+       "tags-update-blocked": "Не можете да додавате и отстранувате ознаки за промени додека {{GENDER:$1|сте}} блокирани.",
        "tags-update-add-not-allowed-one": "Не е дозволено ознаката „$1“ да се додава рачно.",
        "tags-update-add-not-allowed-multi": "Не е дозволено {{PLURAL:$2|следнава ознака да се додава рачно|следниве ознаки да се додаваат рачно}}: $1",
        "tags-update-remove-not-allowed-one": "Не е дозволено да се отстранува ознаката „$1“.",
index 022f07f..cbb7d06 100644 (file)
        "activeusers-intro": "ഇത് കഴിഞ്ഞ {{PLURAL:$1|ദിവസം|$1 ദിവസങ്ങളിൽ}} ഏതെങ്കിലും വിധത്തിലുള്ള പ്രവർത്തനങ്ങൾ ചെയ്ത ഉപയോക്താക്കളുടെ പട്ടികയാണ്.",
        "activeusers-count": "കഴിഞ്ഞ {{PLURAL:$3|ഒരു ദിവസം|$3 ദിവസങ്ങളിൽ}} {{PLURAL:$1|ഒരു പ്രവൃത്തി|$1 പ്രവൃത്തികൾ}}",
        "activeusers-from": "ഇങ്ങനെ തുടങ്ങുന്ന ഉപയോക്താക്കളെ കാട്ടുക:",
-       "activeusers-hidebots": "യന്ത്രങ്ങളെ മറയ്ക്കുക",
-       "activeusers-hidesysops": "കാര്യനിർവാഹകരെ മറയ്ക്കുക",
        "activeusers-noresult": "ഉപയോക്താക്കളില്ല",
        "activeusers-submit": "സജീവ ഉപയോക്താക്കളെ പ്രദർശിപ്പിക്കുക",
        "listgrouprights": "ഉപയോക്തൃവിഭാഗത്തിന്റെ അവകാശങ്ങൾ",
index 3e85f15..ddc46f0 100644 (file)
        "activeusers-intro": "शेवटच्या $1 {{PLURAL:$1|दिवसात}} काम केलेल्या सदस्यांची यादी येथे मिळेल",
        "activeusers-count": "शेवटच्या {{PLURAL:$3|दिवसात|$3 दिवसांत}} $1 {{PLURAL:$1|क्रिया}}",
        "activeusers-from": "पुढील शब्दापासून सुरू होणारे सदस्य दाखवा:",
-       "activeusers-hidebots": "सांगकामे लपवा",
-       "activeusers-hidesysops": "प्रचालक लपवा",
        "activeusers-noresult": "एकही सदस्य सापडला नाही.",
        "activeusers-submit": "सक्रिय सदस्य दर्शवा",
        "listgrouprights": "सदस्य गट अधिकार",
index 305228d..0a5267d 100644 (file)
        "yourpasswordagain": "Ulangi kata laluan:",
        "createacct-yourpasswordagain": "Sahkan kata laluan",
        "createacct-yourpasswordagain-ph": "Isikan kata laluan semula",
-       "remembermypassword": "Ingat log masuk saya pada pelayar ini (tidak melebihi $1 {{PLURAL:$1|hari|hari}})",
        "userlogin-remembermypassword": "Biar saya kekal log masuk",
        "userlogin-signwithsecure": "Gunakan sambungan terlindung",
        "yourdomainname": "Domain anda:",
        "activeusers-intro": "Yang berikut ialah senarai pengguna yang bergiat sejak {{PLURAL:$1|semalam|$1 hari lalu}}.",
        "activeusers-count": "$1 tindakan sejak {{PLURAL:$3|semalam|$3 hari lalu}}",
        "activeusers-from": "Tunjukkan pengguna bermula pada:",
-       "activeusers-hidebots": "Sorokkan bot",
-       "activeusers-hidesysops": "Sorokkan penyelia",
        "activeusers-noresult": "Tiada pengguna dijumpai.",
        "listgrouprights": "Hak kumpulan pengguna",
        "listgrouprights-summary": "Berikut adalah senarai kumpulan pengguna yang ditubuhkan di wiki ini, dengan hak-hak mereka masing-masing.\nMungkin terdapat [[{{MediaWiki:Listgrouprights-helppage}}|maklumat tambahan]] mengenai setiap hak.",
        "htmlform-cloner-create": "Tambah lebih",
        "htmlform-cloner-delete": "Buang",
        "htmlform-cloner-required": "Sekurang-kurangnya satu nilai diperlukan.",
-       "sqlite-has-fts": "$1 dengan sokongan carian teks penuh",
-       "sqlite-no-fts": "$1 tanpa sokongan carian teks penuh",
        "logentry-delete-delete": "$1 telah {{GENDER:$2|menghapuskan}} laman $3",
        "logentry-delete-restore": "$1 telah {{GENDER:$2|memulihkan}} laman $3",
        "logentry-delete-event": "$1 telah {{GENDER:$2|mengubah}} keterlihatan $5 peristiwa log di $3: $4",
        "feedback-external-bug-report-button": "Failkan tugas teknikal",
        "feedback-dialog-title": "Hantar maklum balas",
        "feedback-dialog-intro": "Anda boleh menggunakan borang yang mudah di bawah untuk menyerahkan maklum balas. Ulasan anda akan disiarkan pada laman \"$1\" di samping nama pengguna anda.",
-       "feedback-error-title": "Ralat",
        "feedback-error1": "Perhatian: Hasil dari API tidak dikenali",
        "feedback-error2": "Perhatian: Penyuntingan gagal",
        "feedback-error3": "Perhatian: Tiada gerak balas dari API",
index 56e90a0..41c6a59 100644 (file)
        "yourname": "Nome de Outelizador",
        "yourpassword": "Palabra chabe",
        "yourpasswordagain": "Repite la tue palabra-chabe",
-       "remembermypassword": "Lhembrar-se de mi neste cumputador (for a maximum of $1 {{PLURAL:$1|day|days}})",
        "yourdomainname": "L tou domínio",
        "login": "Antrar",
        "nav-login-createaccount": "Antrar / criar cuonta",
index e2b8e1b..f0376cb 100644 (file)
        "activeusers": "တက်ကြွလှုပ်ရှားသည့် အသုံးပြုသူစာရင်း",
        "activeusers-intro": "ဤသည်မှာ နောက်ဆုံး $1 {{PLURAL:$1|ရက်|ရက်}}အတွင်း တက်ကြွလှုပ်ရှားသည့် အသုံးပြုသူများ စာရင်း ဖြစ်သည်။",
        "activeusers-from": "ဤမှစသော အသုံးပြုသူများကို ပြရန် -",
-       "activeusers-hidebots": "ဘော့များကို ဝှက်ရန်",
-       "activeusers-hidesysops": "အက်ဒမင်များကို ဝှက်ရန်",
        "activeusers-noresult": "အသုံးပြုသူ မတွေ့ပါ။",
        "listgrouprights": "အသုံးပြုသူအုပ်စု အခွင့်အရေးများ",
        "listgrouprights-group": "အုပ်စု",
index 7bae28c..2a102ec 100644 (file)
        "listusers-noresult": "Совицязо а муеви",
        "listusers-blocked": "(саймас саезь)",
        "activeusers": "Активной теицятнеде списка",
-       "activeusers-hidebots": "Кекшемс ботатнень",
-       "activeusers-hidesysops": "Кекшемс администратортнэнь",
        "activeusers-noresult": "Якинзэ-пакинзэ арасть",
        "listgrouprights": "Теиця куронть видечинзэ",
        "listgrouprights-group": "Куро",
index dc66e13..a3b7c7e 100644 (file)
        "yourpasswordagain": "پسورد ره دِباره بنویس",
        "createacct-yourpasswordagain": "پسورد ره دِباره باوّین",
        "createacct-yourpasswordagain-ph": "پسورد ره دِباره باوّین",
-       "remembermypassword": "مه رمز ره (تا حداکثر $1 {{PLURAL:$1|روز|روز}}) این مرورگر سر یاد نکان",
        "userlogin-remembermypassword": "مه ره سایت دله دار",
        "yourdomainname": "شمه کاروری نوم",
        "login": "دله بوردن",
        "api-error-unknown-error": "خطای داخلی: زمونی که شما تلاش کاردنی باربی‌یشتن پرونده ره انجوم هادین، اتا چی اشتباه پیش بورده.",
        "api-error-unknown-warning": "اخطار نشناسی‌یه: $1",
        "api-error-uploaddisabled": "باربی‌یشتن این ویکی دله غیرفعاله.",
-       "api-error-verification-error": "ممکن هسته که پرونده رِقِد بورد بائه یا پسوند غلط داره.",
-       "api-error-blacklisted": "اتا عنوان توصیفی دیگه انتخاب هاکنین."
+       "api-error-verification-error": "ممکن هسته که پرونده رِقِد بورد بائه یا پسوند غلط داره."
 }
index 6d21b41..5cb16cb 100644 (file)
        "botpasswords-label-resetpassword": "Riabbìa 'a password",
        "botpasswords-label-grants": "Assegnaziune apprecabbele:",
        "botpasswords-help-grants": "Ogne assegnazione dà acciesso a 'e deritte utente elencate ca n'utenza avesse già. Vedite 'a [[Special:ListGrants|tabbella 'e ll'assegnaziune]] pe' ne mòvere cchiù nfurmaziune.",
-       "botpasswords-label-restrictions": "Restriziune d'uso:",
        "botpasswords-label-grants-column": "Assegnaziune date",
        "botpasswords-bad-appid": "'O nomme bot \"$1\" nun è bbuono.",
        "botpasswords-insert-failed": "Nun se pò azzeccà 'o nomme bot \"$1\". Fosse stato già azzeccato?",
        "passwordreset-nocaller": "Nu chiammate s'avess'a dà",
        "passwordreset-nosuchcaller": "'O chiammante nun esiste: $1",
        "passwordreset-ignored": "'A reimpustazione d' 'a password nun s'è gistita. Fosse ca nisciunu fornitore è stato mpustato?",
-       "passwordreset-invalideamil": "Indirizzo 'e posta email nun valido",
+       "passwordreset-invalidemail": "Indirizzo 'e posta email nun valido",
        "passwordreset-nodata": "Nun è stato fornito né nomme utente né indirizzo 'e posta email",
        "changeemail": "Cagna o lèva l'indirizzo e-mail",
        "changeemail-header": "Ghienchete stu modulo pe' puté cagnà 'o indirizzo e-mail d' 'o vuosto. Si vuje vulite luvà e 'o scucchià l'associazione 'e cocche cunto mail d' 'o cunto vuosto, lassate 'o cunto e-mail nuovo abbacante quanno mannarrate stu modulo.",
        "activeusers-intro": "Chest'è n'elenco d'utente c'hanno fatto cierti tipe d'attività nfin'a $1 {{PLURAL:$1|juorno|ghiuorne}} fa.",
        "activeusers-count": "$1 {{PLURAL:$1|cagnamiento|cagnamiente}} int'a l'urdeme {{PLURAL:$3|ghiuorne}}",
        "activeusers-from": "Fà vedè l'utente partenno 'a:",
-       "activeusers-hidebots": "Annascunne 'e bot",
-       "activeusers-hidesysops": "Annascunne l'ammenistrature",
        "activeusers-noresult": "Nisciun'utente truvato.",
        "activeusers-submit": "Mmusta cunte attive",
        "listgrouprights": "Deritte d' 'e gruppe utente",
        "feedback-external-bug-report-button": "Archivia na fatica tecnica",
        "feedback-dialog-title": "Manna 'o feedback",
        "feedback-dialog-intro": "Putite ausà sempricemente 'o modulo ccà abbascio pe' putè mannà 'o feedback vuosto. 'O cummento sarrà azzeccato â paggena \"$1\", nziem' 'o nomme vuosto.",
-       "feedback-error-title": "Errore",
        "feedback-error1": "Errore: Risultato nun aspettato 'a ll'API",
        "feedback-error2": "Errore: Cagnamiento scassato",
        "feedback-error3": "Errore: Ll'API nun risponne",
index 6b2192d..5f49249 100644 (file)
        "passwordreset-emaildisabled": "E-posttjenester er slått av på denne wikien.",
        "passwordreset-username": "Brukernavn:",
        "passwordreset-domain": "Domene:",
-       "passwordreset-capture": "Vise resulterende e-post?",
-       "passwordreset-capture-help": "Hvis du krysser av her, vil du se e-posten (med foreløpig passord) i tillegg til at den blir sendt til brukeren.",
        "passwordreset-email": "E-postadresse:",
        "passwordreset-emailtitle": "Kontodetaljer på {{SITENAME}}",
        "passwordreset-emailtext-ip": "Noen (sannsynligvis deg fra IP-adressen $1) ba om en tilbakestilling av ditt passord for {{SITENAME}} ($4). {{PLURAL:$3|Den følgende brukerkontoen|De følgende brukerkontoene}} er\ntilknyttet denne e-postadressen:\n\n$2\n\n{{PLURAL:$3|Dette midlertidige passordet|Disse midlertidige passordene}} utløper om {{PLURAL:$5|én dag|$5 dager}}.\nDu bør logge på og velge et nytt passord nå. Dersom noen andre kom med denne\nforespørselen, eller du har kommet på ditt opprinnelige passord, og ikke lenger\nønsker å endre det, kan du ignorere denne meldingen og fortsette å bruke ditt gamle\npassord.",
        "passwordreset-emailelement": "Brukernavn: \n$1\n\nMidlertidig passord: \n$2",
        "passwordreset-emailsentemail": "Hvis denne epostadressen er koblet til din konto, så vil det bli sendt en epost om tilbakestilling av passord.",
        "passwordreset-emailsentusername": "Hvis det finnes en epostadresse knyttet til dette brukernavnet, vil en epost med informasjon om tilbakestilling av passord bli sendt.",
-       "passwordreset-emailsent-capture2": "{{PLURALS:$1|E-posten|E-postene}} om passordtilbakestilling har blitt sendt. {{PLURAL:$1|Brukernavnet og passordet|Listen over brukernavn og passord}} vises under.",
-       "passwordreset-emailerror-capture2": "Kunne ikke sende e-post til {{GENDER:$2|brukeren}}: $1 {{PLURAL:$3|Brukernavnet og passordet|Listen over brukernavn og passord}} vises her.",
        "passwordreset-nocaller": "En bruker må angis",
        "passwordreset-nosuchcaller": "Brukeren finnes ikke: $1",
        "passwordreset-ignored": "Passordtilbakestillingen ble ikke håndtert. Har ingen leverandør blitt konfigurert?",
-       "passwordreset-invalideamil": "Ugyldig e-postadresse",
+       "passwordreset-invalidemail": "Ugyldig e-postadresse",
        "passwordreset-nodata": "Verken et brukernavn eller en e-postadresse ble oppgitt",
        "changeemail": "Endre eller fjerne epostadresse",
        "changeemail-header": "Fyll ut dette skjemaet for å bytte din epost-adresse. Hvis du vil fjerne epostadressen fra din konto, kan du la ny epostadresse-feltet være tomt når.",
        "right-siteadmin": "Låse og låse opp databasen",
        "right-override-export-depth": "Eksporter sider inkludert lenkede sider til en dypde på 5",
        "right-sendemail": "Send e-post til andre brukere",
-       "right-passwordreset": "Vis e-poster over tilbakestilte passord",
        "right-managechangetags": "Opprette og (de)aktivere [[Special:Tags|tagger]]",
        "right-applychangetags": "Legg til [[Special:Tags|merker]] sammen med ens endringer",
        "right-changetags": "Legg til og fjern vilkårlige [[Special:Tags|merker]] på individuelle revisjoner og loggposter",
        "apisandbox-continue": "Fortsett",
        "apisandbox-continue-clear": "Tøm",
        "apisandbox-continue-help": "{{int:apisandbox-continue}} vil [https://www.mediawiki.org/wiki/API:Query#Continuing_queries fortsette] forrige forespørsel; {{int:apisandbox-continue-clear}} vil tømme fortsettelsesrelaterte parametre.",
+       "apisandbox-param-limit": "Skriv <kbd>max</kbd> for å bruke maksgrensa.",
        "booksources": "Bokkilder",
        "booksources-search-legend": "Søk etter bokkilder",
        "booksources-search": "Søk",
        "tags-deactivate": "deaktiver",
        "tags-hitcount": "{{PLURAL:$1|én endring|$1 endringer}}",
        "tags-manage-no-permission": "Du har ikke tillatelse til å behandle tagger.",
-       "tags-manage-blocked": "Du kan ikke behandle endringstagger mens du er blokkert.",
+       "tags-manage-blocked": "Du kan ikke behandle endringstagger mens {{GENDER:$1|du}} er blokkert.",
        "tags-create-heading": "Opprett ny tagg",
        "tags-create-explanation": "Som standard vil nyopprettede tagger være tilgjengelige for brukere og roboter.",
        "tags-create-tag-name": "Taggnavn:",
        "tags-deactivate-not-allowed": "Det er ikke mulig å deaktivere taggen «$1».",
        "tags-deactivate-submit": "Deaktiver",
        "tags-apply-no-permission": "Du har ikke tilgang til å legge til merker sammen med dine endringer.",
-       "tags-apply-blocked": "Du kan ikke bruke endringstagger med endringene dine mens du er blokkert.",
+       "tags-apply-blocked": "{{GENDER:$1|Du}} kan ikke bruke endringstagger med endringene dine mens du er blokkert.",
        "tags-apply-not-allowed-one": "Merket «$1» kan ikke legges til manuelt.",
        "tags-apply-not-allowed-multi": "{{PLURAL:$2|Det følgende merket|De følgende merkene}} kan ikke legges til manuelt: $1",
        "tags-update-no-permission": "Du har ikke tilgang til å legge til eller fjerne merker fra individuelle revisjoner eller loggposter.",
-       "tags-update-blocked": "Du kan ikke legge til eller fjerne endringstagger mens du er blokkert.",
+       "tags-update-blocked": "{{GENDER:$1|Du}} kan ikke legge til eller fjerne endringstagger mens du er blokkert.",
        "tags-update-add-not-allowed-one": "Merket «$1» kan ikke legges til manuelt.",
        "tags-update-add-not-allowed-multi": "{{PLURAL:$2|Det følgende merket|De følgende merkene}} kan ikke legges til manuelt: $1",
        "tags-update-remove-not-allowed-one": "Merket «$1» kan ikke fjernes.",
index 7beefc3..14f05dc 100644 (file)
        "yourpasswordagain": "Opniej invoeren",
        "createacct-yourpasswordagain": "Wachtwoord bevestigen",
        "createacct-yourpasswordagain-ph": "Geef t wachtwoord opniej op",
-       "remembermypassword": "Vanzelf anmelden (hooguut $1 {{PLURAL:$1|dag|dagen}})",
        "userlogin-remembermypassword": "Vanzelf anmelden",
        "userlogin-signwithsecure": "Beveiligde verbiending gebruken",
        "yourdomainname": "Joew domein",
        "passwordreset-emailtext-user": "De gebruker $1 van {{SITENAME}} hef n anvraag edaon um joew wachtwoord veur {{SITENAME}} ($4) opniej in te stellen. \nDe volgende {{PLURAL:$3|gebruker is|gebrukers bin}} ekoppeld an dit netpostadres:\n\n$2\n\n{{PLURAL:$3|Dit tiejelike wachtwoord vervölt|Disse tiejelike wachtwoorden vervallen}} over {{PLURAL:$5|één dag|$5 dagen}}.\nMeld je eigen noen an en wiezig t wachtwoord. A'j dit verzeuk niet zelf edaon hebben, of a'j t oorspronkelike wachtwoord nog kennen en t niet wiezigen willen, negeer dit bericht dan en blief joew ouwe wachtwoord gebruken.",
        "passwordreset-emailelement": "Gebrukersnaam: \n$1\n\nTiedelik wachtwoord: \n$2",
        "passwordreset-emailsentemail": "As dit netpostadres an joew gebrukerskonto ekoppeld is, dan wördt der n netbericht estuurd um joew wachtwoord opniej in te stellen.",
-       "passwordreset-emailsent-capture": "Der is n bericht verstuurd um joew wachtwoord opniej in te stellen. Dit ku'j hieronder lezen.",
-       "passwordreset-emailerror-capture": "Der is n bericht veur t opniej opstellen van joew wachwoord an-emaakt, dit ku'j hieronder lezen. t Versturen naor de {{GENDER:$2|gebruker}} is mislokt um de volgende reden: $1",
        "changeemail": "Netpostadres wiezigen of vorthaolen",
        "changeemail-header": "Vul dit formulier in um joew netpostadres te wiezigen. A'j t netpostadres van disse gebrukerskonto ontkoppelen willen, laot t netpostadres dan leeg a'j t formulier opslaon.",
        "changeemail-no-info": "Je mutten an-emeld ween um drekt toegang te hebben tot disse zied.",
        "undo-norev": "De bewarking kon niet weerummedreid wörden, umdat t niet besteet of vortedaon is.",
        "undo-summary": "Versie $1 van [[Special:Contributions/$2|$2]] ([[User talk:$2|overleg]]) weerummedreid",
        "undo-summary-username-hidden": "Versie $1 deur n verbörgen gebruker weerummedreid",
-       "cantcreateaccounttitle": "Anmaken van n gebrukersprofiel is niet meugelik",
        "cantcreateaccount-text": "t Anmaken van gebrukers van dit IP-adres (<b>$1</b>) is eblokkeerd deur [[User:$3|$3]].\n\nDe deur $3 op-egeven reden is ''$2''",
        "viewpagelogs": "Bekiek logboeken veur disse zied",
        "nohistory": "Der bin gien eerdere versies van disse zied.",
        "activeusers-intro": "Dit is n lieste van gebrukers die de aofgeleupen $1 {{PLURAL:$1|dag|dagen}} enigszins aktief ewest hebben.",
        "activeusers-count": "$1 leste {{PLURAL:$1|haandeling|haandelingen}} in de aofeleupen {{PLURAL:$3|dag|$3 dagen}}",
        "activeusers-from": "Laot gebrukers zien vanaof:",
-       "activeusers-hidebots": "Bots verbargen",
-       "activeusers-hidesysops": "Beheerders verbargen",
        "activeusers-noresult": "Gien aktieve gebrukers evunnen.",
        "activeusers-submit": "Bekiek",
        "listgrouprights": "Rechten van gebrukersgroepen",
        "htmlform-no": "Nee",
        "htmlform-yes": "Ja",
        "htmlform-chosen-placeholder": "Kies n opsie",
-       "sqlite-has-fts": "Versie $1 mit ondersteuning veur \"full-text\" zeuken",
-       "sqlite-no-fts": "Versie $1 zonder ondersteuning veur \"full-text\" zeuken",
        "logentry-delete-delete": "$1 hef de zied $3 {{GENDER:$2|vortedaon}}",
        "logentry-delete-restore": "$1 hef de zied $3 {{GENDER:$2|weerummezet}}",
        "logentry-delete-event": "$1 hef de zichtbaorheid van {{PLURAL:$5|n logboekregel|$5 logboekregels}} van $3 {{GENDER:$2|ewiezigd}}: $4",
index 3fc66f5..b99b7eb 100644 (file)
        "userlogin-yourpassword-ph": "Passwoort ingeven",
        "createacct-yourpassword-ph": "Passwoort ingeven",
        "yourpasswordagain": "Passwoort nochmal ingeven",
-       "remembermypassword": "Mit dissen Browser duersam inloggen (för maximal $1 {{PLURAL:$1|Dag|Daag}})",
        "yourdomainname": "Diene Domään:",
        "externaldberror": "Dat geev en Fehler bi de externe Authentifizerungsdatenbank oder du dröffst dien extern Brukerkonto nich ännern.",
        "login": "Anmellen",
        "activeusers-intro": "Dit is en List von Brukers, de {{PLURAL:$1|den verleden Dag|de verleden $1 Daag}} aktiv wesen sünd.",
        "activeusers-count": "$1 {{PLURAL:$1|Ännern|Ännern}} {{PLURAL:$3|den verleden Dag|in de verleden $3 Daag}}",
        "activeusers-from": "Brukers wiesen vanaf:",
-       "activeusers-hidebots": "Bots nich wiesen",
-       "activeusers-hidesysops": "Administraters nich wiesen",
        "activeusers-noresult": "Keen Brukers funnen.",
        "listgrouprights": "Brukergruppen-Rechten",
        "listgrouprights-summary": "Dit is en List vun de Brukergruppen, de in dit Wiki defineert sünd, un de Rechten, de dor mit verbunnen sünd.\nMehr Informatschonen över enkelte Rechten staht ünner [[{{MediaWiki:Listgrouprights-helppage}}]].",
        "htmlform-submit": "Afspiekern",
        "htmlform-reset": "Ännern trüchsetten",
        "htmlform-selectorother-other": "Annere",
-       "sqlite-has-fts": "$1 mit Stöhn för Vulltext-Söök",
-       "sqlite-no-fts": "$1 ahn Stöhn för Vulltext-Söök",
        "logentry-delete-delete": "$1 {{GENDER:$2|wegsmeten}} Siet $3",
        "revdelete-restricted": "Inschränkungen för Administraters instellt",
        "revdelete-unrestricted": "Inschränkungen för Administraters rutnahmen",
index 3babc10..f5f497e 100644 (file)
        "passwordreset-emaildisabled": "इमेल सुविधा यस विकिमा निस्क्रिय बनाइएको छ ।",
        "passwordreset-username": "प्रयोगकर्ता नाम:",
        "passwordreset-domain": "डोमेन",
-       "passwordreset-capture": "निस्कने इमेलको नमुना हेर्ने ?",
-       "passwordreset-capture-help": "यदि तपाईंले यो कोठामा दाग दिनुभयो भनें यो इमेल (अस्थायी पासवर्ड सहित) तपाईंलाई देखा पर्नेछ साथै प्रयोगकर्तालाई पनि पठाइनेछ।",
        "passwordreset-email": "इमेल ठेगाना:",
        "passwordreset-emailtitle": "{{SITENAME}}मा खाता विवरण",
        "passwordreset-emailtext-ip": "कसैले (सायद तपाईंले, $1 आईपि ठेगानाबाट) {{SITENAME}} ($4)मा तपाईंको खाता विवरणको निम्ति एउटा अनुस्मारकको अनुरोध गरेको छ। निम्न प्रयोगकर्ता {{PLURAL:$3|खाता यस इमेल ठेगानासित सम्बन्धित छ|खाताहरू यस इमेल ठेगानासित सम्बन्धित छन्}}:\n\n$2\n\n{{PLURAL:$3|यो अस्थाई पासवर्डको|यी अस्थाई पासवर्डहरुको}} समय {{PLURAL:$5|एक दिन|$5 दिन}}मा सकिनेछ।\nतपाईंले प्रवेश गरेर अहिले नैं नयाँ पासवर्ड छान्नुहोस्। यदि अरु कसैले अनुरोध गरेको भए अथवा यदि तपाईंलाई मूल पासवर्ड याद भए अनि यसलाई परिवर्तन गर्न चाहनुहुन्न भने, तपाईंले यस सन्देशलाई अनदेखा गर्नुहोस् र पुरानै पासवर्डलाई चालू राख्नुहोस्।",
        "saveprefs": "संग्रह",
        "restoreprefs": "सबै पूर्वनिर्धारित स्थिती कायम गर्ने(सबै खण्डहरूमा)",
        "prefs-editing": "सम्पादन",
-       "rows": "हरफहरà¥\81 :",
-       "columns": "सà¥\8dतमà¥\8dभहरà¥\81 :",
+       "rows": "हरफहरà¥\82 :",
+       "columns": "सà¥\8dतमà¥\8dभहरà¥\82 :",
        "searchresultshead": "खोज",
        "stub-threshold": "<a href=\"#\" class=\"stub\">ठूटो</a> को लागि थ्रेसहोल्ड स्वरूपण (बाइट):",
        "stub-threshold-sample-link": "उदाहरण",
        "right-siteadmin": "डेटाबेसको ताल्चामार्ने र ताल्चाखोल्ने",
        "right-override-export-depth": "गहिराइ ५ सम्मको लिंक गरिएका पृष्ठहरू सहित निर्यात गर्ने",
        "right-sendemail": "अन्य प्रयोगकर्ताहरूलाई इमेल पठाउने",
-       "right-passwordreset": "पासवर्ड परिवर्तन गर्ने ईमेलहरु हेर्नुहोस",
        "right-managechangetags": "डाटाबेसबाट [[Special:Tags|tags]] बनाउने र हटाउने",
        "right-applychangetags": "एकको परिवर्तन सहित [[Special:Tags|tags]] लागु गर्ने",
        "right-changetags": "जोड्ने र हटाउने स्वतन्त्र [[Special:Tags|ट्याग]] व्यक्तिगत अवतरणहरू र लग इन्ट्रीहरूमा",
index 0663e7b..dd24539 100644 (file)
        "botpasswords-label-delete": "Verwijderen",
        "botpasswords-label-resetpassword": "Het wachtwoord opnieuw instellen",
        "botpasswords-label-grants": "Van toepassing zijnde rechten:",
-       "botpasswords-help-grants": "Iedere toestemming geeft toegang tot de opgegeven gebruikersrechten die de gebruiker al heeft. Zie [[Special:ListGrants|overzicht van rechten]] voor meer informatie.",
+       "botpasswords-help-grants": "Toestemmingen geven toegang tot gebruikersrechten die u al heeft. Het geven van een toestemming op deze plek geeft u geen toegang tot gebruikersrechten die u anders niet zou hebben. Zie het [[Special:ListGrants|overzicht van toestemmingen]] voor meer informatie.",
        "botpasswords-label-grants-column": "Toegewezen",
        "botpasswords-bad-appid": "De botnaam \"$1\" is niet geldig.",
        "botpasswords-insert-failed": "Toevoegen van botnaam \"$1\" mislukt. Is deze misschien al toegevoegd?",
        "passwordreset-emaildisabled": "E-mailmogelijkheden zijn uitgeschakeld op deze wiki.",
        "passwordreset-username": "Gebruikersnaam:",
        "passwordreset-domain": "Domein:",
-       "passwordreset-capture": "De resulterende e-mail bekijken?",
-       "passwordreset-capture-help": "Als u dit vakje aanvinkt, wordt de e-mail (met het tijdelijke wachtwoord) naar de gebruiker verzonden en ook aan u weergegeven.",
        "passwordreset-email": "E-mailadres:",
        "passwordreset-emailtitle": "Accountgegevens op {{SITENAME}}",
        "passwordreset-emailtext-ip": "Iemand, waarschijnlijk u, heeft vanaf het IP-adres $1 een aanvraag gedaan om uw wachtwoord voor {{SITENAME}} ($4) opnieuw in te stellen. De volgende {{PLURAL:$3|gebruiker is|gebruikers zijn}} gekoppeld aan dit e-mailadres:\n\n$2\n\n{{PLURAL:$3|Dit tijdelijke wachtwoord vervalt|Deze tijdelijke wachtwoorden vervallen}} over {{PLURAL:$5|een dag|$5 dagen}}. Meld u aan en wijzig het wachtwoord nu. Als u dit verzoek niet zelf heeft gedaan, of als u het oorspronkelijke wachtwoord nog kent en het niet wilt wijzigen, negeer dit bericht dan en blijf uw oude wachtwoord gebruiken.",
        "passwordreset-emailelement": "Gebruikersnaam: \n$1\n\nTijdelijk wachtwoord: \n$2",
        "passwordreset-emailsentemail": "Als dit e-mailadres aan uw account gekoppeld is, dan wordt er een e-mail verzonden om uw wachtwoord opnieuw in te stellen.",
        "passwordreset-emailsentusername": "Als er een e-mailadres geregistreerd is voor die gebruikersnaam, dan wordt er een e-mail verzonden om uw wachtwoord opnieuw in te stellen.",
-       "passwordreset-emailsent-capture2": "De wachtwoordherstel-{{PLURAL:$1|e-mail is|e-mails zijn}} verzonden. {{PLURAL:$1|De gebruikersnaam en het wachtwoord worden|De lijst van gebruikersnamen en wachtwoorden wordt}} hier weergegeven.",
-       "passwordreset-emailerror-capture2": "Het e-mailen naar de {{GENDER:$2|gebruiker}} is mislukt: $1 {{PLURAL:$3|De gebruikersnaam en het wachtwoord|De lijst met gebruikersnamen en wachtwoorden}} wordt hieronder weergegeven.",
        "passwordreset-nocaller": "Een aanroeper moet worden opgegeven",
        "passwordreset-nosuchcaller": "Aanroeper bestaat niet: $1",
        "passwordreset-ignored": "Opnieuw instellen van het wachtwoord niet is afgehandeld. Misschien is er geen provider geconfigureerd?",
-       "passwordreset-invalideamil": "Ongeldig e-mailadres",
+       "passwordreset-invalidemail": "Ongeldig e-mailadres",
        "passwordreset-nodata": "Er is geen gebruikersnaam of e-mailadres opgegeven",
        "changeemail": "E-mailadres wijzigen of verwijderen",
        "changeemail-header": "Vul dit formulier in om uw e-mailadres te wijzigen. Als u het e-mailadres wilt ontkoppelen van uw account, laat het e-mailadres dan leeg als u het formulier opslaat.",
        "prefs-help-email": "E-mailadres is optioneel, maar maakt het mogelijk om u uw wachtwoord te e-mailen als u het bent vergeten.",
        "prefs-help-email-others": "U kunt ook anderen in staat stellen per e-mail contact met u op te nemen via een koppeling op uw gebruikers- en overlegpagina zonder dat u uw identiteit prijsgeeft.",
        "prefs-help-email-required": "Hiervoor is een e-mailadres nodig.",
-       "prefs-info": "Basisinformatie",
+       "prefs-info": "Basisgegevens",
        "prefs-i18n": "Taalinstellingen",
        "prefs-signature": "Ondertekening",
        "prefs-dateformat": "Datumopmaak",
        "right-siteadmin": "De database blokkeren en weer vrijgeven",
        "right-override-export-depth": "Pagina's exporteren inclusief pagina's waarnaar verwezen wordt tot een diepte van vijf",
        "right-sendemail": "E-mail versturen aan andere gebruikers",
-       "right-passwordreset": "E-mails voor wachtwoord opnieuw instellen bekijken",
        "right-managechangetags": "[[Special:Tags|Labels]] aanmaken en (de)activeren",
        "right-applychangetags": "[[Special:Tags|Labels]] aan bewerkingen toewijzen",
        "right-changetags": "Willekeurige [[Special:Tags|labels]] toevoegen aan en verwijderen van versies en logboekregels",
        "apisandbox-continue": "Doorgaan",
        "apisandbox-continue-clear": "Wissen",
        "apisandbox-continue-help": "{{int:apisandbox-continue}} zal [https://www.mediawiki.org/wiki/API:Query#Continuing_queries doorgaan] met het laatste verzoek; {{int:apisandbox-continue-clear}} zal de voortgangsparameters wissen.",
+       "apisandbox-param-limit": "Gebruik <kbd>max</kbd> voor de maximale limiet.",
        "booksources": "Boekinformatie",
        "booksources-search-legend": "Bronnen en gegevens over een boek zoeken",
        "booksources-search": "Zoeken",
        "booksources-text": "Hieronder staat een lijst met koppelingen naar andere websites die nieuwe of gebruikte boeken verkopen, en die wellicht meer informatie over het boek dat u zoekt hebben:",
        "booksources-invalid-isbn": "Het opgegeven ISBN lijkt niet geldig te zijn.\nControleer of u wellicht een fout hebt gemaakt bij de invoer.",
-       "magiclink-tracking-isbn": "Pagina's die ISBN magische links gebruiken",
+       "magiclink-tracking-rfc": "Pagina's die RFC magische koppelingen gebruiken",
+       "magiclink-tracking-rfc-desc": "Deze pagina gebruikt RFC magische koppelingen. Zie [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org] over hoe te migreren.",
+       "magiclink-tracking-pmid": "Pagina's die PMID magische koppelingen gebruiken",
+       "magiclink-tracking-pmid-desc": "Deze pagina gebruikt PMID magische koppelingen. Zie [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org] over hoe te migreren.",
+       "magiclink-tracking-isbn": "Pagina's die ISBN magische koppelingen gebruiken",
+       "magiclink-tracking-isbn-desc": "Deze pagina gebruikt ISBN magische koppelingen. Zie [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org] over hoe te migreren.",
        "specialloguserlabel": "Uitvoerende gebruiker:",
        "speciallogtitlelabel": "Doel (paginanaam of {{ns:user}}:gebruikersnaam voor gebruiker):",
        "log": "Logboeken",
        "activeusers-intro": "Dit is een lijst met gebruikers die enige activiteit hebben laten zien in de afgelopen {{PLURAL:$1|dag|$1 dagen}}.",
        "activeusers-count": "$1 recente {{PLURAL:$1|handeling|handelingen}} in de {{PLURAL:$3|afgelopen dag|laatste $3 dagen}}",
        "activeusers-from": "Gebruikers worden weergegeven vanaf:",
+       "activeusers-groups": "Gebruikers weergeven die horen bij de groepen:",
        "activeusers-noresult": "Geen actieve gebruikers gevonden.",
        "activeusers-submit": "Weergeven",
        "listgrouprights": "Rechten van gebruikersgroepen",
        "rollbacklinkcount-morethan": "Meer dan {{PLURAL:$1|één bewerking|$1 bewerkingen}} terugdraaien",
        "rollbackfailed": "Ongedaan maken van wijzigingen mislukt.",
        "rollback-missingparam": "Er ontbreken benodigde parameters in het verzoek.",
+       "rollback-missingrevision": "Laden van versiegegevens mislukt.",
        "cantrollback": "Ongedaan maken van wijzigingen onmogelijk: deze pagina heeft slechts 1 auteur.",
        "alreadyrolled": "Het is niet mogelijk om de bewerking van de pagina [[:$1]] door [[User:$2|$2]] ([[User talk:$2|overleg]]{{int:pipe-separator}}[[Special:Contributions/$2|bijdragen]]) ongedaan te maken.\nIemand anders heeft deze pagina al bewerkt of hersteld naar een eerdere versie.\n\nDe meest recente bewerking is gemaakt door [[User:$3|$3]] ([[User talk:$3|overleg]]{{int:pipe-separator}}[[Special:Contributions/$3|bijdragen]]).",
        "editcomment": "De bewerkingssamenvatting was: <em>$1</em>.",
        "revertpage": "Wijzigingen door [[Special:Contributions/$2|$2]] ([[User talk:$2|Overleg]]) hersteld tot de laatste versie door [[User:$1|$1]]",
        "revertpage-nouser": "Wijzigingen door een verborgen gebruiker teruggedraaid naar de laatste versie door {{GENDER:$1|[[User:$1|$1]]}}",
        "rollback-success": "De wijzigingen door $1 zijn teruggedraaid.\nDe laatste versie van $2 is hersteld.",
+       "rollback-success-notify": "De wijzigingen door $1 zijn teruggedraaid;\nde laatste versie van $2 is hersteld. [$3 Wijzigingen weergeven]",
        "sessionfailure-title": "Sessiefout",
        "sessionfailure": "Er lijkt een probleem te zijn met uw aanmeldsessie.\nUw handeling is gestopt uit voorzorg tegen een beveiligingsrisico (dat bestaat uit mogelijke \"hijacking\" van deze sessie).\nGa een pagina terug, laad die pagina opnieuw en probeer het nog eens.",
        "changecontentmodel": "Inhoudsmodel van pagina bewerken",
        "changecontentmodel-success-text": "Het inhoudstype van [[:$1]] is gewijzigd.",
        "changecontentmodel-cannot-convert": "De inhoud van [[:$1]] kan niet worden omgezet in een type van $2.",
        "changecontentmodel-nodirectediting": "Het inhoudsmodel $1 ondersteunt direct bewerken niet",
+       "changecontentmodel-emptymodels-title": "Geen inhoudsmodellen beschikbaar",
+       "changecontentmodel-emptymodels-text": "De inhoud van [[:$1]] kan niet worden omgezet in een ander type.",
        "log-name-contentmodel": "Wijzigingenlogboek van inhoudsmodel",
        "log-description-contentmodel": "Gebeurtenissen rond het inhoudsmodel van een pagina",
+       "logentry-contentmodel-new": "$1 {{GENDER:$2|maakte}} de pagina $3 aan met behulp van een niet-standaard inhoudsmodel \"$5\"",
        "logentry-contentmodel-change": "$1 {{GENDER:$2|heeft}} het inhoudsmodel gewijzigd van pagina $3 van \"$4\" in \"$5\"",
        "logentry-contentmodel-change-revertlink": "terugdraaien",
        "logentry-contentmodel-change-revert": "terugdraaien",
        "modifiedarticleprotection": "heeft het beveiligingsniveau gewijzigd voor \"[[$1]]\"",
        "unprotectedarticle": "heeft de beveiliging van \"[[$1]]\" opgeheven",
        "movedarticleprotection": "heeft beveiligingsinstellingen verplaatst van \"[[$2]]\" naar \"[[$1]]\"",
+       "protectedarticle-comment": "{{GENDER:$2|Beveiligde}} \"[[$1]]\"",
+       "modifiedarticleprotection-comment": "{{GENDER:$2|Heeft het beveiligingsniveau voor \"[[$1]]\" gewijzigd}}",
+       "unprotectedarticle-comment": "{{GENDER:$2|Heeft de beveiliging van \"[[$1]]\" opgeheven}}",
        "protect-title": "Beveiligingsniveau instellen voor \"$1\"",
        "protect-title-notallowed": "Beveiligingsniveau voor \"$1\" bekijken",
        "prot_1movedto2": "[[$1]] is hernoemd naar [[$2]]",
        "undeletehistorynoadmin": "Deze pagina is verwijderd.\nDe reden hiervoor staat hieronder, samen met de details van de gebruikers die deze pagina hebben bewerkt vóór de verwijdering.\nDe verwijderde inhoud van de pagina is alleen zichtbaar voor beheerders.",
        "undelete-revision": "Dit is de verwijderde versie van $1 van $4 om $5 gemaakt door $3:",
        "undeleterevision-missing": "Ongeldige of missende versie.\nMogelijk hebt u een verkeerde koppeling of is de versie hersteld of verwijderd uit het archief.",
+       "undeleterevision-duplicate-revid": "{{PLURAL:$1|Eén versie kon|$1 versies konden}} niet worden hersteld, omdat {{PLURAL:$1|haar|hun}} <code>rev_id</code> al in gebruik was.",
        "undelete-nodiff": "Geen eerdere versie gevonden.",
        "undeletebtn": "Terugplaatsen",
        "undeletelink": "bekijken/terugplaatsen",
        "sp-contributions-newbies-sub": "Voor nieuwelingen",
        "sp-contributions-newbies-title": "Bijdragen van nieuwe gebruikers",
        "sp-contributions-blocklog": "blokkeerlogboek",
-       "sp-contributions-suppresslog": "onderdrukte gebruikersbijdragen",
+       "sp-contributions-suppresslog": "onderdrukte {{GENDER:$1|gebruikersbijdragen}}",
        "sp-contributions-deleted": "verwijderde {{GENDER:$1|gebruiker}}sbijdragen",
        "sp-contributions-uploads": "uploads",
        "sp-contributions-logs": "logboeken",
        "whatlinkshere-hideredirs": "doorverwijzingen $1",
        "whatlinkshere-hidetrans": "Transclusies $1",
        "whatlinkshere-hidelinks": "koppelingen $1",
-       "whatlinkshere-hideimages": "Bestandskoppelingen $1",
+       "whatlinkshere-hideimages": "$1 bestandskoppelingen",
        "whatlinkshere-filters": "Filters",
        "whatlinkshere-submit": "OK",
        "autoblockid": "Automatische blokkade #$1",
        "lockdbsuccesstext": "De database is afgesloten.<br />\nVergeet niet de [[Special:UnlockDB|database vrij te geven]] zodra u klaar bent met uw onderhoud.",
        "unlockdbsuccesstext": "De database is vrijgegeven.",
        "lockfilenotwritable": "Geen schrijfrechten op het databaselockbestand.\nOm de database te kunnen blokkeren of vrij te geven, dient de webserver schrijfrechten op dit bestand te hebben.",
-       "databasenotlocked": "De database is niet geblokkeerd.",
+       "databaselocked": "De database is al vergrendeld.",
+       "databasenotlocked": "De database is niet vergrendeld.",
        "lockedbyandtime": "(door $1 om $3 op $2)",
        "move-page": "\"$1\" hernoemen",
        "move-page-legend": "Pagina hernoemen",
        "patrol-log-header": "Dit logboek bevat versies die gemarkeerd zijn als gecontroleerd.",
        "log-show-hide-patrol": "markeerlogboek $1",
        "log-show-hide-tag": "labellogboek $1",
+       "confirm-markpatrolled-button": "OK",
        "deletedrevision": "De oude versie $1 is verwijderd",
        "filedeleteerror-short": "Fout bij het verwijderen van bestand: $1",
        "filedeleteerror-long": "Er zijn fouten opgetreden bij het verwijderen van het bestand:\n\n$1",
        "tags-actions-header": "Acties",
        "tags-active-yes": "Ja",
        "tags-active-no": "Nee",
-       "tags-source-extension": "Door een uitbreiding toegevoegd",
+       "tags-source-extension": "Gedefinieerd door de software",
        "tags-source-manual": "Handmatig toegevoegd door gebruikers en bots",
        "tags-source-none": "Niet meer in gebruik",
        "tags-edit": "bewerken",
        "tags-deactivate": "deactiveren",
        "tags-hitcount": "$1 {{PLURAL:$1|wijziging|wijzigingen}}",
        "tags-manage-no-permission": "U hebt geen rechten om labels te beheren.",
-       "tags-manage-blocked": "U kunt geen labels beheren wanneer u geblokkeerd bent.",
+       "tags-manage-blocked": "U kunt geen labels beheren wanneer {{GENDER:$1|u}} geblokkeerd bent.",
        "tags-create-heading": "Een nieuw label aanmaken",
        "tags-create-explanation": "Standaard worden nieuw aangemaakte labels beschikbaar gesteld voor gebruik door gebruikers en bots.",
        "tags-create-tag-name": "Labelnaam:",
        "tags-deactivate-not-allowed": "Het is niet mogelijk het label \"$1\" te deactiveren.",
        "tags-deactivate-submit": "Deactiveren",
        "tags-apply-no-permission": "U hebt geen rechten om wijzigingslabels toe te voegen aan uw wijzigingen.",
-       "tags-apply-blocked": "U kunt geen wijzigen aanbrengen aan labels wanneer u geblokkeerd bent.",
+       "tags-apply-blocked": "U kunt geen labels toevoegen aan uw wijzigingen wanneer {{GENDER:$1|u}} geblokkeerd bent.",
        "tags-apply-not-allowed-one": "Het label \"$1\" mag niet handmatig toegevoegd worden.",
        "tags-apply-not-allowed-multi": "{{PLURAL:$2|Het volgende label mag|De volgende labels mogen}} niet handmatig toegevoegd worden: $1",
        "tags-update-no-permission": "U hebt geen rechten om wijzigingslabels toe te voegen aan of te verwijderen van versies of logboekregels.",
-       "tags-update-blocked": "U kunt geen labels toevoegen of verwijderen wanneer u geblokkeerd bent.",
+       "tags-update-blocked": "U kunt geen labels toevoegen of verwijderen wanneer {{GENDER:$1|u}} geblokkeerd bent.",
        "tags-update-add-not-allowed-one": "Het label \"$1\" mag niet handmatig toegevoegd worden.",
        "tags-update-add-not-allowed-multi": " {{PLURAL:$2|Het label kan|De labels kunnen}} niet handmatig toegevoegd worden: $1",
        "tags-update-remove-not-allowed-one": "Het label \"$1\" mag niet verwijderd worden.",
        "log-action-filter-patrol": "Soort markering:",
        "log-action-filter-protect": "Soort beveiliging:",
        "log-action-filter-rights": "Soort verandering van rechten:",
+       "log-action-filter-suppress": "Soort verberging:",
        "log-action-filter-upload": "Soort upload:",
        "log-action-filter-all": "Alles",
        "log-action-filter-block-block": "Blokkade",
        "log-action-filter-suppress-event": "Verbergen van logboekregel",
        "log-action-filter-suppress-revision": "Verbergen van versie",
        "log-action-filter-suppress-delete": "Verbergen van pagina",
+       "log-action-filter-suppress-block": "Verbergen van gebruiker tijdens blokkade",
+       "log-action-filter-suppress-reblock": "Verbergen van gebruiker tijdens wijzigen blokkade",
        "log-action-filter-upload-upload": "Nieuwe upload",
        "log-action-filter-upload-overwrite": "Herupload",
        "authmanager-authn-autocreate-failed": "Het automatisch aanmaken van een lokaal account is mislukt: $1",
index 8c42878..bdc8b77 100644 (file)
        "yourpasswordagain": "Пароль ногæй бафысс:",
        "createacct-yourpasswordagain": "Сбæлвырд кæн пароль",
        "createacct-yourpasswordagain-ph": "Пароль ногæй бафысс",
-       "remembermypassword": "Бахъуыды мæ кæнæд ацы браузеры (максимум $1 {{PLURAL:$1|бонмæ}})",
        "userlogin-remembermypassword": "Системæйы мæ дар",
        "userlogin-signwithsecure": "Æдас бастдзинадæй",
        "yourdomainname": "Дæ домен:",
        "passwordreset-emailtext-user": "{{grammar:genitive|{{SITENAME}}}} архайæг $1 æрдомдта дæ {{grammar:genitive|{{SITENAME}}}} ($4) аккаунты пароль ногæй сæвæрын. Ацы архайæджы {{PLURAL:$3|аккаунт баст у|аккаунттæ баст сты}} ацы электрон посты адрисимæ:\n\n$2\n\n{{PLURAL:$3|Ацы рæстæгмæ пароль|Ацы рæстæгмæ паролтæ}} кусдзысты {{PLURAL:$5|иу бон|$5 боны}}.\nНыр ды хъуамæ бахизай системæмæ æмæ равзарай ног пароль. Кæд ай æндæр чидæр æрдомдта, кæнæ кæд дæ пароль æрхъуыды кодтай æмæ дæ нал фæды фæивай йæ, уæд дæ бон у мацæмæ дарай ацы фыстæг æмæ дарддæр архайай дæ зæронд паролæй.",
        "passwordreset-emailelement": "Фæсномыг: \n$1\n\nРæстæгмæ пароль: \n$2",
        "passwordreset-emailsentemail": "Ног пароль сæвæрыны фыстæг æрвыст æрцыд.",
-       "passwordreset-emailsent-capture": "Ног пароль сæвæрыны фыстæг æрвыст æрцыд æмæ бындæр æвдыст у.",
-       "passwordreset-emailerror-capture": "Ног пароль сæвæрыны фыстæг арæзт æрцыд æмæ бындæр æвдыст у. Фæлæ йæ {{grammar:allative|{{GENDER:$2|user}}}} арвитын нæ бантыстис: $1",
        "changeemail": "E-mail адрис фæивын",
        "changeemail-header": "Аккаунты e-mail адрис фæивын",
        "changeemail-no-info": "Ды хъуамæ системæмæ хызт уай, цæмæй ацы фарсмæ комкоммæ бавналай.",
        "post-expand-template-argument-warning": "'''Сындæг:''' Ацы фарсы ис уæддæр иу хуызæджы аргумент, кæй райтынг у æгæр стыр.\nУыцы аргументтæ уагъд æрцыдысты.",
        "post-expand-template-argument-category": "Фæрстæ, кæдоны ис хуызæджы уагъд аргумент",
        "parser-template-loop-warning": "Хуызæгты цасм ссардæуыд: [[$1]]",
-       "cantcreateaccounttitle": "Аккаунт саразæн нæй",
        "viewpagelogs": "Ацы фарсæн йæ логтæ равдисын",
        "nohistory": "Ацы фарсæн ивдтыты истори нæй.",
        "currentrev": "Фæстаг фæлтæр",
        "listusers-noresult": "Иу архайæг дæр не ссардæуыд.",
        "listusers-blocked": "(хъодыгонд)",
        "activeusers": "Активон архайджыты номхыгъд",
-       "activeusers-hidebots": "Боттæ бамбæхс",
-       "activeusers-hidesysops": "Радгæсты бамбæхс",
        "activeusers-noresult": "Иу архайæг дæр не ссардæуыд.",
        "listgrouprights": "Къордты архайджыты бартæ",
        "listgrouprights-group": "Къорд",
        "feedback-back": "Фæстæмæ",
        "feedback-cancel": "Ныууадзын",
        "feedback-close": "Æххæст",
-       "feedback-error-title": "Рæдыд",
        "feedback-error1": "Рæдыд: Æнæзонгæ фæстиуæг API-йæ",
        "feedback-error2": "Рæдыд: Ивд нæ фæрæстмæ",
        "feedback-error3": "Рæдыд: API дзуапп нæ дæтты",
index 829bb0e..0156bdb 100644 (file)
        "yourpasswordagain": "ਪਾਸਵਰਡ ਮੁੜ ਲਿਖੋ:",
        "createacct-yourpasswordagain": "ਪਾਸਵਰਡ ਪੁਸ਼ਟੀ",
        "createacct-yourpasswordagain-ph": "ਪਾਸਵਰਡ ਫੇਰ ਦਿਉ",
-       "remembermypassword": "ਇਸ ਕੰਪਿਊਟਰ ’ਤੇ ਮੇਰਾ ਦਾਖ਼ਲਾ ਯਾਦ ਰੱਖੋ (ਵੱਧ ਤੋਂ ਵੱਧ $1 {{PLURAL:$1|ਦਿਨ|ਦਿਨਾਂ}} ਲਈ)",
        "userlogin-remembermypassword": "ਮੈਨੂੰ ਲਾਗਇਨ ਰੱਖੋ",
        "userlogin-signwithsecure": "ਸੁਰੱਖਿਅਤ ਕੁਨੈਕਸ਼ਨ ਰੱਖੋ",
        "yourdomainname": "ਤੁਹਾਡਾ ਡੋਮੇਨ:",
        "passwordreset-emailtext-user": "{{SITENAME}} 'ਤੇ User $1 ਨੇ ਤੁਹਾਡੇ {{SITENAME}} ($4) ਉਤਲੇ ਪਛਾਣ-ਸ਼ਬਦ ਨੂੰ ਮੁੜ-ਬਣਾਉਣ ਦੀ ਬੇਨਤੀ ਕੀਤੀ ਹੈ। ਇਸ ਈਮੇਲ ਪਤੇ ਨਾਲ਼ ਹੇਠ ਲਿਖੇ {{PLURAL:$3|ਖਾਤੇ|ਖਾਤਿਆਂ}} ਦਾ ਵਾਸਤਾ ਹੈ:\n\n$2\n\n{{PLURAL:$3|ਇਸ ਆਰਜ਼ੀ ਪਛਾਣ-ਸ਼ਬਦ|ਇਹਨਾਂ ਆਰਜ਼ੀ ਪਛਾਣ-ਸ਼ਬਦਾਂ}} ਦੀ ਮਿਆਦ {{PLURAL:$5|ਇੱਕ ਦਿਨ|$5 ਦਿਨਾਂ}} 'ਚ ਮੁੱਕ ਜਾਵੇਗੀ।\nਤੁਹਾਨੂੰ ਹੁਣੇ ਦਾਖ਼ਲ ਹੋ ਕੇ ਕੋਈ ਨਵਾਂ ਪਛਾਣ-ਸ਼ਬਦ ਬਣਾ ਲੈਣਾ ਚਾਹੀਦਾ ਹੈ। ਜੇਕਰ ਕਿਸੇ ਹੋਰ ਨੇ ਇਹ ਬੇਨਤੀ ਕੀਤੀ ਹੈ ਜਾਂ ਤੁਹਾਨੂੰ ਆਪਣਾ ਪਹਿਲਾ ਪਛਾਣ-ਸ਼ਬਦ ਯਾਦ ਆ ਗਿਆ ਹੈ ਅਤੇ ਹੁਣ ਤੁਸੀਂ ਉਹਨੂੰ ਬਦਲ਼ਨਾ ਨਹੀਂ ਲੋਚਦੇ ਤਾਂ ਤੁਸੀਂ ਇਸ ਸੁਨੇਹੇ ਨੂੰ ਅਣਡਿੱਠਾ ਕਰ ਕੇ ਆਪਣਾ ਪੁਰਾਣਾ ਪਛਾਣ-ਸ਼ਬਦ ਵਰਤਦੇ ਰਹਿ ਸਕਦੇ ਹੋ।",
        "passwordreset-emailelement": "ਯੂਜ਼ਰ-ਨਾਂ: \n$1\n\nਆਰਜ਼ੀ ਪਾਸਵਰਡ: \n$2",
        "passwordreset-emailsentemail": "ਇੱਕ ਪਾਸਵਰਡ ਮੁੜ-ਸੈੱਟ ਈ-ਮੇਲ ਭੇਜੀ ਜਾ ਚੁੱਕੀ ਹੈ।",
-       "passwordreset-invalideamil": "ਗ਼ਲਤ ਈਮੇਲ ਪਤਾ",
+       "passwordreset-invalidemail": "ਗ਼ਲਤ ਈਮੇਲ ਪਤਾ",
        "changeemail": "ਈ-ਮੇਲ ਸਿਰਨਾਵਾਂ ਬਦਲੋ ਜਾੰ ਹਟਾਓ",
        "changeemail-header": "ਖਾਤੇ ਵਾਲਾ ਈ-ਮੇਲ ਸਿਰਨਾਵਾਂ ਬਦਲੋ",
        "changeemail-no-info": "ਇਸ ਸਫ਼ੇ ਨੂੰ ਸਿੱਧੇ ਹੀ ਵੇਖਣ ਲਈ ਤੁਹਾਨੂੰ ਲਾਗਇਨ ਕਰਨਾ ਪਵੇਗਾ।",
        "activeusers-intro": "ਇਹ ਓਹਨਾਂ ਮੈਂਬਰਾਂ ਦੀ ਲਿਸਟ ਹੈ ਜਿੰਨ੍ਹਾਂ ਨੇ ਆਖ਼ਰੀ $1 {{PLURAL:$1|ਦਿਨ|ਦਿਨਾਂ}} ਵਿਚ ਕਿਸੇ ਤਰ੍ਹਾਂ ਦਾ ਕੋਈ ਕੰਮ ਕੀਤਾ ਹੈ।",
        "activeusers-count": "ਆਖ਼ਰੀ {{PLURAL:$3|ਦਿਨ|$3 ਦਿਨਾਂ}} ਵਿਚ $1 {{PLURAL:$1|ਸੋਧ|ਸੋਧਾਂ}}",
        "activeusers-from": "ਇਸਤੋਂ ਸ਼ੁਰੂ ਹੋਣ ਵਾਲ਼ੇ ਮੈਂਬਰ ਵਖਾਓ:",
-       "activeusers-hidebots": "ਬੌਟਾਂ ਨੂੰ ਲੁਕਾਓ",
-       "activeusers-hidesysops": "ਪ੍ਰਸ਼ਾਸਕ ਲੁਕਾਓ",
        "activeusers-noresult": "ਕੋਈ ਵਰਤੋਂਕਾਰ ਨਹੀਂ ਲੱਭਾ।",
        "activeusers-submit": "ਚਾਲੂ ਵਰਤੋਂਕਾਰ ਦਿਖਾਓ",
        "listgrouprights": "ਵਰਤੋਂਕਾਰ ਸਮੂਹਾਂ ਦੇ ਹੱਕ",
        "feedback-bugnew": "ਮੈਂ ਚੈੱਕ ਕੀਤਾ। ਇੱਕ ਨਵੇਂ ਦੋਸ਼ ਦੀ ਰਿਪੋਰਟ ਕਰੋ",
        "feedback-cancel": "ਰੱਦ ਕਰੋ",
        "feedback-close": "ਹੋ ਗਿਆ",
-       "feedback-error-title": "ਗ਼ਲਤੀ",
        "feedback-error2": "ਦੋਸ਼:ਸੋਧ ਫੇਲ੍ਹ ਹੋਈ",
        "feedback-error3": "ਦੋਸ਼:API ਵੱਲੋਂ ਕੋਈ ਜੁਆਬ ਨਹੀਂ",
        "feedback-message": "ਸੁਨੇਹਾ:",
index a2de392..95af027 100644 (file)
        "yourname": "Lagyung talagamit (Username):",
        "yourpassword": "Kekang password:",
        "yourpasswordagain": "Pakisulat meng pasibayu ing password:",
-       "remembermypassword": "Tandanan me ing login ku king computer a ini (for a maximum of $1 {{PLURAL:$1|day|days}})",
        "yourdomainname": "Ing kekang karinan (domain):",
        "externaldberror": "Mapalyaring mika pamagkamali king external authentication (pamagpatutung panlual) ning database, o ala kang paintulut a i-update ya ing kekang account a panlual (external account).",
        "login": "Mag log in",
        "undo-failure": "E maliaring iurung ing edit a ini uling e la mipapareu deng minunang me-edit.",
        "undo-norev": "E maliaring iurung ing edit a ini uling ala yu o mebura ya.",
        "undo-summary": "Iurung ya ing miyalilan $1 nang [[Special:Contributions/$2|$2]] ([[User talk:$2|Talk]])",
-       "cantcreateaccounttitle": "E makalalang account",
        "cantcreateaccount-text": "Sebat neng [[User:$3|$3]] ing pamaglalang account manibat kaniting IP address ('''$1''').\n\nIni ing sangkan a binie nang $3: ''$2''",
        "viewpagelogs": "Lon la reng log para king bulung a ini",
        "nohistory": "Alang amlat ning pamag-edit (edit history) para king bulung a ini.",
        "rightsnone": "(ala)",
        "revdelete-summary": "sampulung da reng mibayu (edit summary)",
        "feedback-back": "Mibalik",
-       "feedback-error-title": "Mali",
        "feedback-submit": "I-sumiti",
        "feedback-thanks-title": "Salamat pu!",
        "headline-anchor-title": "Ing suglung king seksyun a ini",
index 4a376c8..d96cf90 100644 (file)
        "yourname": "nom d'uzeu:",
        "yourpassword": "Mot d'passe:",
        "yourpasswordagain": "Intrer à nouvieu ch'mot d'passe:",
-       "remembermypassword": "Intrer oùtonmatiquemint l'prochaine fouos (pour un maximum éd $1 {{PLURAL:$1|jour|jours}})",
        "yourdomainname": "Vote donmène:",
        "login": "Intrer",
        "nav-login-createaccount": "Intrer / créer vote conpte",
index 608b0d1..74d9bb6 100644 (file)
        "linksearch-ok": "Uffgucke",
        "listusers-submit": "Zeig",
        "listusers-noresult": "Ken Yuuser gfunne.",
-       "activeusers-hidebots": "Waddefresser verschwinne losse",
-       "activeusers-hidesysops": "Verwalter verschwinne losse",
        "listgrouprights": "Rechte vun Yuuser-Druppe",
        "listgrouprights-group": "Druppe",
        "listgrouprights-rights": "Rechte",
index 5c0ab95..8722398 100644 (file)
        "yourpasswordagain": "Kennword nomol oigewe:",
        "createacct-yourpasswordagain": "Password bschdedische",
        "createacct-yourpasswordagain-ph": "Bschdedisch doi Password",
-       "remembermypassword": "Moi Kennword uffm Brausa merge (hegschdns fa $1 {{PLURAL:$1|Daach|Daach}})",
        "userlogin-remembermypassword": "Oagmeld blaiwe",
        "login": "Oamelde",
        "nav-login-createaccount": "Oamelde / Kondo oaleesche",
        "post-expand-template-argument-warning": "'''Baßma uff:''' Die Said hodd wenigschdns ä Vorlach midä Kenngreeß, wu groß werre dud. Die Kenngreeß wead do nedd õgeguggd.",
        "post-expand-template-argument-category": "Saide, wu wegfallene Vorlachewead hawen.",
        "undo-nochange": "Die Ännarung isch schunmol rigg'gängisch g'machd worre.",
-       "cantcreateaccounttitle": "Konn kä Kondo mache",
        "viewpagelogs": "Lochbischa fa die Said oagugge",
        "nohistory": "Vunde Said hodds kä Gschischd.",
        "currentrev": "Ledschdi Änarung",
index caaa2c4..f461d4a 100644 (file)
        "passwordreset-emaildisabled": "Wysyłanie emaili zostało wyłączone na tej wiki",
        "passwordreset-username": "Nazwa użytkownika:",
        "passwordreset-domain": "Domena:",
-       "passwordreset-capture": "Czy pokazywać treść wiadomości e‐mail?",
-       "passwordreset-capture-help": "Jeśli zaznaczysz to pole, zobaczysz treść wiadomości e‐mail z tymczasowym hasłem, w tej samej formie w jakiej jest wysyłana do użytkownika.",
        "passwordreset-email": "Adres e‐mail:",
        "passwordreset-emailtitle": "Dane konta w {{GRAMMAR:MS.lp|{{SITENAME}}}}",
        "passwordreset-emailtext-ip": "Ktoś (prawdopodobnie Ty, spod adresu IP $1) poprosił o zresetowanie twojego hasła w {{GRAMMAR:MS.lp{{SITENAME}}}} ($4). Z tym adresem e‐mailowym powiązane {{PLURAL:$3|jest konto użytkownika|są następujące konta użytkowników:}}\n\n$2\n\n{{PLURAL:$3|Tymczasowego hasła|Tymczasowych haseł}} można użyć w ciągu {{PLURAL:$5|jednego dnia|$5 dni}}.\nPowinieneś zalogować się i zmienić hasło na nowe. Jeśli to ktoś inny poprosił o wysłanie przypomnienia lub jeśli pamiętasz aktualne hasło i nie chcesz go zmieniać wystarczy, że zignorujesz tę wiadomość i będziesz nadal korzystać ze swojego starego hasła.",
        "passwordreset-emailelement": "Nazwa użytkownika: \n$1\n\nTymczasowe hasło: \n$2",
        "passwordreset-emailsentemail": "Jeśli ten adres e‐mail jest przypisany do Twojego konta, zostanie na niego wysłany e-mail do odzyskiwania hasła.",
        "passwordreset-emailsentusername": "Jeśli z tym kontem powiązany jest adres e‐mail, zostanie na niego wysłany e-mail do odzyskiwania hasła.",
-       "passwordreset-emailsent-capture2": "{{PLURAL:$1|Został wysłany e-mail|Zostały wysłane e-maile}} z informacjami o resetowaniu hasła. {{PLURAL:$1|Użytkownik i hasło jest pokazany|Lista użytkowników i haseł jest pokazana}} tutaj.",
-       "passwordreset-emailerror-capture2": "Wysyłanie e-maila do {{GENDER:$2|użytkownika|użytkowniczki}} nie powiodło się: $1 {{PLURAL:$3|Użytkownik i hasło jest pokazany|Lista użytkowników i haseł jest pokazana}} tutaj.",
        "passwordreset-nocaller": "Musi być podany wywołujący",
        "passwordreset-nosuchcaller": "Wywołujący nie istnieje: $1",
-       "passwordreset-invalideamil": "Nieprawidłowy adres e-mail",
+       "passwordreset-invalidemail": "Nieprawidłowy adres e-mail",
        "passwordreset-nodata": "Nie podano ani nazwy użytkownika, ani adresu e-mail",
        "changeemail": "Zmiana lub usunięcie adresu e‐mail",
        "changeemail-header": "Wypełnij ten formularz, aby zmienić swój adres e-mail. Jeśli chcesz usunąć swój adres e-mail, to przy wypełnianiu formularza pozostaw puste pole nowego adresu e-mail.",
        "right-siteadmin": "Blokowanie i odblokowywanie bazy danych",
        "right-override-export-depth": "Eksport stron wraz z linkowanymi do głębokości 5 linków",
        "right-sendemail": "Wysyłanie e‐maili do innych użytkowników",
-       "right-passwordreset": "Sprawdzanie treści e‐maila o resetowaniu hasła",
        "right-managechangetags": "Tworzenie i (dez)aktywowanie [[Special:Tags|znaczników]]",
        "right-applychangetags": "Wprowadzanie [[Special:Tags|znaczników]] wraz z własnymi zmianami",
        "right-changetags": "Dodawanie i usuwanie dowolnych [[Special:Tags|znaczników]] z poszczególnych wersji i wpisów w rejestrze",
        "apisandbox-alert-field": "Wartość tego pola jest nieprawidłowa.",
        "apisandbox-continue": "Kontynuuj",
        "apisandbox-continue-clear": "Wyczyść",
+       "apisandbox-param-limit": "Wpisz <kbd>max</kbd>, aby wykorzystać maksymalny limit.",
        "booksources": "Książki",
        "booksources-search-legend": "Szukaj informacji o książkach",
        "booksources-search": "Szukaj",
        "tags-deactivate": "dezaktywuj",
        "tags-hitcount": "$1 {{PLURAL:$1|zmiana|zmiany|zmian}}",
        "tags-manage-no-permission": "Nie masz uprawnień do zarządzania znacznikami.",
-       "tags-manage-blocked": "Nie możesz zarządzać znacznikami zmian, kiedy jesteś zablokowany.",
+       "tags-manage-blocked": "Nie możesz zarządzać znacznikami zmian, gdy jesteś {{GENDER:$1|zablokowany|zablokowana}}.",
        "tags-create-heading": "Utwórz nowy znacznik",
        "tags-create-explanation": "Nowe znaczniki będą dostępne domyślnie dla użytkowników i botów.",
        "tags-create-tag-name": "Nazwa znacznika:",
        "tags-deactivate-not-allowed": "Nie można dezaktywować znacznika „$1”.",
        "tags-deactivate-submit": "Dezaktywuj",
        "tags-apply-no-permission": "Nie masz uprawnień do wprowadzania znaczników wraz z własnymi zmianami.",
-       "tags-apply-blocked": "Nie możesz stosować znaczników do swoich zmian, gdy jesteś zablokowany.",
+       "tags-apply-blocked": "Nie możesz stosować znaczników do swoich zmian, gdy jesteś {{GENDER:$1|zablokowany|zablokowana}}.",
        "tags-apply-not-allowed-one": "Znacznik „$1” nie może zostać wprowadzony ręcznie.",
        "tags-apply-not-allowed-multi": "{{PLURAL:$2|Następujący znacznik nie może zostać wprowadzony ręcznie|Następujące znaczniki nie mogą zostać wprowadzone ręcznie}}: $1",
        "tags-update-no-permission": "Nie masz uprawnień do dodawania lub usuwania znaczników z poszczególnych wersji lub wpisów w rejestrze.",
-       "tags-update-blocked": "Nie możesz dodawać i usuwać znaczników zmian, kiedy jesteś zablokowany.",
+       "tags-update-blocked": "Nie możesz dodawać i usuwać znaczników zmian, gdy jesteś {{GENDER:$1|zablokowany|zablokowana}}.",
        "tags-update-add-not-allowed-one": "Znacznik „$1” nie może zostać dodany ręcznie.",
        "tags-update-add-not-allowed-multi": "{{PLURAL:$2|Następujący znacznik nie może zostać dodany ręcznie|Następujące znaczniki nie mogą zostać dodane ręcznie}}: $1",
        "tags-update-remove-not-allowed-one": "Znacznika „$1” nie można usunąć.",
index e0b4667..fe7db17 100644 (file)
        "yourpasswordagain": "Che a bata torna soa ciav:",
        "createacct-yourpasswordagain": "Ch'a confirma la ciav",
        "createacct-yourpasswordagain-ph": "Ch'a buta torna la ciav",
-       "remembermypassword": "Visesse ëd mia ciav ansima a 's navigador (për al pi $1 {{PLURAL:$1|di}})",
        "userlogin-remembermypassword": "Ten-me andrinta al sistema",
        "userlogin-signwithsecure": "Dovré na conession sigura",
        "yourdomainname": "Sò domini:",
        "activeusers-intro": "Costa a l'é na lista d'utent ch'a l'han avù n'atività qualsëssìa ant j'ùltim $1 {{PLURAL:$1|di|di}}.",
        "activeusers-count": "$1 {{PLURAL:$1|assion}} ant {{PLURAL:$3|l'ùltim di|j'ùltim $3 di}}",
        "activeusers-from": "Smon-me j'utent a parte da:",
-       "activeusers-hidebots": "Stërmé ij trigomiro",
-       "activeusers-hidesysops": "Stërmé j'aministrator",
        "activeusers-noresult": "Pa gnun utent trovà.",
        "listgrouprights": "Drit dël grup d'utent",
        "listgrouprights-summary": "Ambelessì a-i é na lista dle partìe d'utent definìe ansima a costa wiki, con ij sò drit d'acess associà.\nA peulo ess-ie d'[[{{MediaWiki:Listgrouprights-helppage}}|anformassion adissionaj]] ansima a dij drit individuaj.",
        "htmlform-cloner-create": "Gionté 'd pi",
        "htmlform-cloner-delete": "Gavé",
        "htmlform-cloner-required": "A-i é damanca d'almanch un valor.",
-       "sqlite-has-fts": "$1 con arserca an test pien mantnùa",
-       "sqlite-no-fts": "$1 sensa arserca an test pien mantnùa",
        "logentry-delete-delete": "$1 a l'ha {{GENDER:$2|scancelà}} la pàgina $3",
        "logentry-delete-restore": "$1 {{GENDER:$2|a l'ha ripristinà}} la pàgina $3",
        "logentry-delete-event": "$1 {{GENDER:$2|a l'ha modificà}} la visibilità ëd {{PLURAL:$5|n'event dël registr|$5 event dël registr}} dzora $3: $4",
        "feedback-external-bug-report-button": "Presenta un travaj tècnich",
        "feedback-dialog-title": "Spedì ij coment",
        "feedback-dialog-intro": "A peul dovré ël formolari sempi sì-sota për spedì ij sò coment. Ij sò coment a saran giontà a la pàgina «$1», ansema a sò stranòm.",
-       "feedback-error-title": "Eror",
        "feedback-error1": "Eror: Arzultà ëd l'API nen arconossù",
        "feedback-error2": "Eror: Modìfica falìa",
        "feedback-error3": "Eror: gnun-e rispòste da l'API",
index 15b5bee..33d0afe 100644 (file)
        "activeusers-intro": "اے اوناں ورتن والیاں دی لسٹ اے جنان پچھلے $1 {{PLURAL:$1|دن|دناں}} چ کم کیتا اے۔",
        "activeusers-count": "$1 {{PLURAL:$1|تبدیلی|تبدیلیاں}} پچھلے{{PLURAL:$3|دن|$3 دن}} چ",
        "activeusers-from": "ورتن والے ایس توں شروع ہون والے دسو:",
-       "activeusers-hidebots": "بوٹ چھپاؤ",
-       "activeusers-hidesysops": "مکھۓ لکاؤ",
        "activeusers-noresult": "کوئی ورتن والا نئیں لبیا۔",
        "listgrouprights": "ورتن ٹرلی حق",
        "listgrouprights-summary": "تھلے اک لسٹ اے ورتن ٹولیاں دی ای وکی تے، اپنے رلدے حقاں نال۔ \n\nہربندے دے ح‍ق‍اں [[{{MediaWiki:Listgrouprights-helppage}}|ہور جانکاری]]",
index 16f214a..fbb364b 100644 (file)
        "yourname": "Όνεμαν χρήστε:",
        "yourpassword": "Σημάδι:",
        "yourpasswordagain": "Ξαν' γράψτεν το σημάδι:",
-       "remembermypassword": "Αποθήκεμαν τη σημαδίμ σ' αβούτον τον υπολογιστήν (για μέγιστον $1 {{PLURAL:$1|ημέραν|ημέρας}})",
        "yourdomainname": "Το domain εσούν:",
        "login": "Εμπάτε",
        "nav-login-createaccount": "Εμπάτεν / ποισέστεν λογαρίαν",
        "permissionserrorstext-withaction": "'Κ έχετε την άδειαν για $2, για {{PLURAL:$1|τ'αφκά το λόγον|τ'αφκά τοι λόγους}}:",
        "recreate-moveddeleted-warn": "'''Ωρία: Εφτάτε αξάν μίαν σελίδαν ντ' ενεσβύεν οψεκές.'''\n\nΊσως εν καλλίον να μην εφτάτε τη σελίδαν.\nΤερέστεν για βοήθειαν σ' αρχείον σβησεματίων και ετεροχλαεματίων για την αιτίαν για το σβήσιμον:",
        "moveddeleted-notice": "Αούτο η σελίδαν εβζινέθεν.\nΑφκά ευρίεται έναν γράψιμον ασο αρχείον σβησεματίων και ετεροχλαεματίων τη σελίδας.",
-       "cantcreateaccounttitle": "Το ποίσιμον τη λογαρίας 'κ έντον",
        "viewpagelogs": "Τέρεν αρχεία γι' αβούτεν τη σελίδαν",
        "nohistory": "Αούτο η σελίδαν αλλαγάς 'κ εςς.",
        "currentrev": "Ατωριζνόν μορφήν",
index f4424e0..010c8f6 100644 (file)
        "yourname": "Twajā tērpautajas pabilisnā:",
        "yourpassword": "Twājs kliptaswīrds:",
        "yourpasswordagain": "Āntrinais kliptaswīrdan",
-       "remembermypassword": "Pamēnais majjans enēisnas infōrmaciōnins en šismu kōmputerin (per maksimum of $1 {{PLURAL:$1|deinā|dēinans}})",
        "yourdomainname": "Twajā dōmeni:",
        "externaldberror": "Tikka izwinaīnas autentikāntin dātanbazin blānda, anga ni assei enwarīntan kāi etnaunīnlai twajjan izwinaīnan rekkenan.",
        "login": "Enjaīs",
        "undo-failure": "Ni mazīngi etwārtai wartīntun redigīsenin, kōnfliktas sen persirzdausnas wersiōnins paggan.",
        "undo-norev": "Redigīsenis ni mazzi būtwei etwārtai wartīntan, beggi ni ekzistijja anga pastāi āupausintan.",
        "undo-summary": "Etwārtai wartīnsna stēisan wersiōnin $1 teīktan pra [[Special:Contributions/$2|$2]] ([[User talk:$2|diskusiōni]])",
-       "cantcreateaccounttitle": "Ni mazīngi teīktun rekkenan",
        "cantcreateaccount-text": "Rekkenas teīksenis iz šan IP adressin (\"$1\") pastāi drēuditan pra [[User:$3|$3]].\n\nBrewīnsli dātan pra $3 ast \"$2\"",
        "viewpagelogs": "Wīdais šisse pāusas regīsterins",
        "nohistory": "Ni ast redigīsnas istōrija per šin pāusan.",
        "activeusers": "Aktīwan tērpautajan listi",
        "activeusers-count": "$1 {{PLURAL:$1|redigīsenis|redigīsenei}} en {{PLURAL:$3|panzdauman dēinan|$3 panzdaumans dēinans}}",
        "activeusers-from": "Waidinnais tērpautajans pagaūnintins sen:",
-       "activeusers-hidebots": "Kliptinais bōtans",
-       "activeusers-hidesysops": "Kliptinais perwaldītajans",
        "activeusers-noresult": "Ni aupalā di tērpautajans",
        "listgrouprights": "Tērpautajan gruppin enwarīnsenei",
        "listgrouprights-summary": "Zemmais ast listi stēisan tērpautajan gruppin definītan en šissei wiki sen enwarīnsenins preipeisātan tenēimans.\nIzbandais pāausan sen [[{{MediaWiki:Listgrouprights-helppage}}|papilniminans infōrmaciōnins]] ezze enwarīnsenins.",
index c7c6ac6..c23e1c5 100644 (file)
        "passwordreset-emailtitle": "د {{SITENAME}} د گڼون څرگندنې",
        "passwordreset-emailelement": "کارن-نوم: \n$1\n\nلنډمهاله پټنوم: \n$2",
        "passwordreset-emailsentemail": "د پټنوم بيا پرځای کېدنې لپاره برېښليک درولېږل شو.",
-       "passwordreset-invalideamil": "ناسمه برېښليک پته",
+       "passwordreset-invalidemail": "ناسمه برېښليک پته",
        "changeemail": "برېښليک پته بدلول يا ليرې کول",
        "changeemail-header": "د گڼون برېښليک پته بدلول",
        "changeemail-no-info": "دې مخ ته د لاسرسي لپاره بايد غونډال کې ورننوځۍ.",
        "activeusers-intro": "دا د هغو کارنانو لړليک دی چې په {{PLURAL:$1|تېرې|تېرو}} $1 {{PLURAL:$1|ورځ|ورځو}} کې يې ونډې ترسره کړي.",
        "activeusers-count": "په {{PLURAL:$3|تېرې ورځ|تېرو $3 ورځو}} کې $1 {{PLURAL:$1|سمون|سمونونه}}",
        "activeusers-from": "هغه کارنان کتل چې نومونه يې پېلېږي په:",
-       "activeusers-hidebots": "روباټونه پټول",
-       "activeusers-hidesysops": "پازوالان پټول",
        "activeusers-noresult": "کارن و نه موندل شو.",
        "activeusers-submit": "فعاله کارنان ښکاره کول",
        "listgrouprights": "د کارن ډلو رښتې",
        "feedback-cancel": "ناگارل",
        "feedback-close": "ترسره شو",
        "feedback-external-bug-report-button": "د يوې تخنيکي دندې دوتنه جوړونه",
-       "feedback-error-title": "تېروتنه",
        "feedback-message": "پيغام:",
        "feedback-subject": "سکالو:",
        "feedback-submit": "سپارل",
index 92033df..4d4f52a 100644 (file)
        "passwordreset-emaildisabled": "Os recursos de e-mail foram desativados nesta wiki.",
        "passwordreset-username": "Nome de usuário:",
        "passwordreset-domain": "Domínio:",
-       "passwordreset-capture": "Ver o e-mail resultante?",
-       "passwordreset-capture-help": "Se marcar esta caixa, o e-mail (com a senha temporária) será-lhe mostrado, além de ser enviado para o usuário.",
        "passwordreset-email": "Endereço de e-mail:",
        "passwordreset-emailtitle": "Detalhes da conta em {{SITENAME}}",
        "passwordreset-emailtext-ip": "Alguém (provavelmente você, a partir do endereço IP $1)\nsolicitou um lembrete dos seus detalhes de conta para {{SITENAME}} ($4).\n{{PLURAL:$3|A seguinte conta está associada|As seguintes contas estão associadas}} a este e-mail:\n\n$2\n\n{{PLURAL:$3|Esta senha temporária vai|Essas senhas temporárias vão}} expirar em {{PLURAL:$5|um dia|$5 dias}}.\nVocê deve efetuar login e escolher uma nova senha agora.\nSe você conseguir lembrar da senha, ignore este e-mail e continue\nusando sua senha anterior. Caso contrário, prossiga com as instruções\ndisponíveis no link.",
        "passwordreset-emailelement": "Usuário: \n$1\n\nSenha temporária: \n$2",
        "passwordreset-emailsentemail": "Se este é um endereço de e-mail registrado para a sua conta, em seguida, um e-mail de redefinição de senha será enviada.",
        "passwordreset-emailsentusername": "Se houver um endereço de email associado a esta conta, ser-lhe-á enviada uma mensagem para redefinir a sua senha.",
-       "passwordreset-emailsent-capture2": "A redefinição da senha {{PLURAL:$1|do e-mail|dos e-mails}} foi enviada. {{PLURAL:$1|O nome de usuário e senha|A lista de nomes de usuário e senhas}} encontram-se a seguir.",
-       "passwordreset-emailerror-capture2": "O envio do e-mail {{GENDER:$2|usuário}} falhou: $1 Os {{PLURAL:$3|nome de usuário e senha|lista de nomes de usuários e senhas}} são mostrados abaixo.",
        "passwordreset-nocaller": "Um interlocutor deve ser fornecido",
        "passwordreset-nosuchcaller": "O interlocutor não existe: $1",
        "passwordreset-ignored": "A redefinição da senha não foi realizada. Talvez o provedor não tenha sido configurado?",
-       "passwordreset-invalideamil": "Endereço de e-mail inválido",
+       "passwordreset-invalidemail": "Endereço de e-mail inválido",
        "passwordreset-nodata": "Não foram fornecidos nome de usuário nem endereço de e-mail",
        "changeemail": "Alterar ou remover endereço de email",
        "changeemail-header": "Preencha este formulário para alterar seu endereço de e-mail. Se você gostaria de remover a associação de qualquer endereço de e-mail da sua conta, deixe o novo endereço de email em branco quando enviar o formulário.",
        "right-siteadmin": "Bloquear e desbloquear o banco de dados",
        "right-override-export-depth": "Exportar páginas incluindo páginas ligadas até uma profundidade de 5",
        "right-sendemail": "Enviar email a outros usuários",
-       "right-passwordreset": "Ver todos os e-mails de reposição de senhas",
        "right-managechangetags": "Criar e (des)ativar [[Special:Tags|tags]]",
        "right-applychangetags": "Aplicar [[Special:Tags|etiquetas]] juntamente com as alterações de alguém",
        "right-changetags": "Adicionar e remover [[Special:Tags|etiquetas]] arbitrárias em revisões e ''logs'' individuais",
index 391611b..fcefcaf 100644 (file)
        "changepassword-throttled": "Realizou demasiadas tentativas de início de sessão com esta conta.\nAguarde $1 antes de tentar novamente, por favor.",
        "botpasswords": "Palavras-passe de robô",
        "botpasswords-summary": "As <em>palavras-passe de robô</em> permitem o acesso a uma conta de utilizador através da API, sem utilizar as credenciais principais de autenticação dessa conta. Os direitos de um utilizador, ao iniciar uma sessão com a palavra-passe de robô, podem estar limitados.\n\nSe não sabe para que necessita desta palavra-passe provavelmente não deveria criá-la. Nunca lhe deve ser solicitado que gere e entregue uma destas palavras-passe.",
-       "botpasswords-disabled": "As palavras-passe de robô estão desactivadas.",
+       "botpasswords-disabled": "As palavras-passe de robô estão desativadas.",
        "botpasswords-no-central-id": "Para utilizar palavras-passe de robô, deve iniciar sessão com uma conta centralizada.",
        "botpasswords-existing": "Palavras-passe de robô existentes",
        "botpasswords-createnew": "Criar uma nova palavra-passe para robô",
        "passwordreset-emaildisabled": "A funcionalidade de correio eletrónico foi desativada nesta wiki.",
        "passwordreset-username": "Nome de utilizador(a):",
        "passwordreset-domain": "Domínio:",
-       "passwordreset-capture": "Ver a mensagem resultante?",
-       "passwordreset-capture-help": "Se marcar esta caixa, a mensagem (com a palavra-passe temporária) ser-lhe-á mostrada e enviada ao utilizador.",
        "passwordreset-email": "Correio eletrónico:",
        "passwordreset-emailtitle": "Detalhes da conta na wiki {{SITENAME}}",
        "passwordreset-emailtext-ip": "Alguém (provavelmente você, a partir do endereço IP $1) pediu a recuperação da palavra-passe na wiki {{SITENAME}} ($4). {{PLURAL:$3|A seguinte conta de utilizador está associada|As seguintes contas de utilizador estão associadas}} a este correio eletrónico:\n\n$2\n\n{{PLURAL:$3|Esta palavra-passe temporária irá|Estas palavras-passes temporárias irão}} expirar dentro de {{PLURAL:$5|um dia|$5 dias}}.\nDeve autenticar-se e escolher uma palavra-passe nova agora. Se outra pessoa fez este pedido, ou se entretanto se recordou da sua palavra-passe original e já não deseja alterá-la, pode ignorar esta mensagem e continuar a usar a palavra-passe antiga.",
        "passwordreset-emailelement": "{{GENDER:$1|Utilizador|Utilizadora}}: \n$1\n\nPalavra-passe temporária: \n$2",
        "passwordreset-emailsentemail": "Se este é o endereço de correio eletrónico associado a esta conta, ser-lhe-á enviada uma palavra-passe de reposição.",
        "passwordreset-emailsentusername": "Se houver um endereço de correio eletrónico associado a esta conta, ser-lhe-á enviada uma mensagem para redefinir a sua palavra-passe.",
-       "passwordreset-emailsent-capture2": "{{PLURAL:$1|A mensagem|As mensagens}} de redefinição da palavra-passe {{PLURAL:$1|foi enviada|foram enviadas}} para o seu correio eletrónico. {{PLURAL:$1|O nome de utilizador e palavra-passe encontram-se|A lista de nomes de utilizador e palavras-passe encontra-se}} a seguir.",
-       "passwordreset-emailerror-capture2": "O envio do correio {{GENDER:$2|ao utilizador|à utilizadora|a(o) utilizador(a)}} falhou: $1 {{PLURAL:$3|O nome de utilizador e palavra-passe são mostrados aqui|A lista de nomes de utilizador e palavras-passe é mostrada aqui}}.",
        "passwordreset-nocaller": "Um interlocutor deve ser fornecido",
        "passwordreset-nosuchcaller": "A pessoa que chama não existe: $1",
        "passwordreset-ignored": "A reposição de palavra-passe não foi realizada. Talvez o fornecedor não tenha sido configurado?",
-       "passwordreset-invalideamil": "Correio eletrónico inválido",
+       "passwordreset-invalidemail": "Correio eletrónico inválido",
        "passwordreset-nodata": "Não foram fornecidos nome de utilizador(a) nem endereço de correio eletrónico",
        "changeemail": "Alterar ou remover o endereço de correio eletrónico",
        "changeemail-header": "Complete este formulário para alterar o seu endereço de correio eletrónico. Se quer eliminar a associação de qualquer endereço de correio eletrónico com a sua conta, deixe em branco o novo endereço de correio eletrónico ao submeter o formulário.",
        "permissionserrorstext": "Não possui permissão para fazer isso, {{PLURAL:$1|pelo seguinte motivo|pelos seguintes motivos}}:",
        "permissionserrorstext-withaction": "Não possui permissão para $2, {{PLURAL:$1|pelo seguinte motivo|pelos seguintes motivos}}:",
        "contentmodelediterror": "Não pode editar esta revisão pois seu modelo de conteúdo é <code>$1</code>, que é diferente do modelo atual da página <code>$2</code>.",
-       "recreate-moveddeleted-warn": "'''Aviso: Está a recriar uma página anteriormente eliminada.'''\n\nVerifique se é apropriado continuar a editar esta página.\nPara sua conveniência, é apresentado de seguida o registo de eliminação e de movimento da página:",
-       "moveddeleted-notice": "Esta página foi eliminada.\nPara referência, é apresentado de seguida o registo de eliminações e de movimento da página.",
+       "recreate-moveddeleted-warn": "<strong>Aviso: Está a recriar uma página anteriormente eliminada.</strong>\n\nVerifique se é apropriado continuar a editar esta página.\nPara sua conveniência, é apresentado abaixo o registo de eliminação e movimentação da página:",
+       "moveddeleted-notice": "Esta página foi eliminada.\nPara sua referência, é apresentado abaixo o registo de eliminação e movimentação da página.",
        "moveddeleted-notice-recent": "Desculpe, esta página foi eliminada recentemente (nas últimas 24 horas).\nA exclusão e registo de movimentação para a página são fornecidos abaixo para referência.",
        "log-fulllog": "Ver registo detalhado",
        "edit-hook-aborted": "A edição foi abortada por um hook.\nNão foi dada nenhuma explicação.",
        "right-reupload-shared": "Sobrescrever localmente ficheiros no repositório partilhado de imagens",
        "right-upload_by_url": "Carregar um ficheiro de um endereço URL",
        "right-purge": "Limpar a ''cache'' de uma página no servidor sem confirmação",
-       "right-autoconfirmed": "Não ser afetado pelos limites de frequência baseados no número de IP",
+       "right-autoconfirmed": "Não ser afetado pelos limites de frequência de edição baseados em endereços IP",
        "right-bot": "Ser tratado como um processo automatizado",
        "right-nominornewtalk": "Não desencadear o aviso de mensagens novas ao fazer edições menores a páginas de discussão",
        "right-apihighlimits": "Usar limites superiores nas consultas ''(queries)'' via API",
        "right-blockemail": "Impedir um utilizador de enviar correio eletrónico",
        "right-hideuser": "Bloquear um nome de utilizador, escondendo-o do público",
        "right-ipblock-exempt": "Contornar bloqueios de IP, bloqueios automáticos e bloqueios de gamas de IP",
-       "right-unblockself": "Desbloquearem-se a si próprios",
+       "right-unblockself": "Desbloquear-se a si próprio",
        "right-protect": "Mudar níveis de proteção e editar páginas protegidas em cascata",
        "right-editprotected": "Editar páginas protegidas com \"{{int:protect-level-sysop}}\"",
        "right-editsemiprotected": "Editar páginas protegidas com \"{{int:protect-level-autoconfirmed}}\"",
        "right-editmyoptions": "Editar as suas próprias preferências",
        "right-rollback": "Reverter rapidamente as edições do último utilizador que editou uma página em particular",
        "right-markbotedits": "Marcar edições revertidas como edições de robô",
-       "right-noratelimit": "Não ser afetado pelos limites de velocidade de operação",
+       "right-noratelimit": "Não ser afetado pelos limites de frequência de edição",
        "right-import": "Importar páginas de outras wikis",
        "right-importupload": "Importar páginas de um ficheiro xml",
        "right-patrol": "Marcar edições de outros utilizadores como patrulhadas",
        "right-siteadmin": "Bloquear e desbloquear a base de dados",
        "right-override-export-depth": "Exportar páginas incluindo páginas ligadas até uma profundidade de 5",
        "right-sendemail": "Enviar correio eletrónico a outros utilizadores",
-       "right-passwordreset": "Ver mensagens de redefinição da palavra-passe",
        "right-managechangetags": "Criar e (des)ativar [[Special:Tags|etiquetas]]",
        "right-applychangetags": "Aplicar [[Special:Tags|etiquetas]] juntamente com as alterações",
        "right-changetags": "Adicionar ou remover [[Special:Tags|etiquetas]] arbitrárias em revisões e entradas de registo individuais",
        "upload_directory_missing": "O diretório de carregamento de ficheiros ($1) não existe e o servidor de Internet não conseguiu criá-lo.",
        "upload_directory_read_only": "O servidor de Internet não possui permissão de escrita no diretório de carregamento de ficheiros ($1).",
        "uploaderror": "Erro ao carregar",
-       "upload-recreate-warning": "'''Aviso: Um ficheiro com esse nome foi eliminado ou movido.'''\n\nPara sua conveniência, é apresentado de seguida o registo de eliminação e de movimento da página:",
+       "upload-recreate-warning": "<strong>Aviso: Um ficheiro com esse nome foi eliminado ou movido.</strong>\n\nPara sua conveniência, é apresentado abaixo o registo de eliminação e movimentação da página:",
        "uploadtext": "Utilize o formulário abaixo para fazer o carregamento de novos ficheiros.\nPara ver ou pesquisar ficheiros anteriormente enviados, consulte a [[Special:FileList|lista de ficheiros]].\nOs reenvios de um ficheiro são também registados no [[Special:Log/upload|registo de carregamentos]] e as eliminações no [[Special:Log/delete|registo de eliminações]].\n\nPara utilizar um ficheiro numa página, depois de ter feito o carregamento, insira uma ligação com um dos seguintes formatos:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:ficheiro.jpg]]</nowiki></code>''' para mostrar uma imagem nas suas dimensões originais;\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:ficheiro.png|200px|thumb|left|texto]]</nowiki></code>''' para mostrar uma imagem com a dimensão horizontal de 200 píxeis, dentro de uma caixa, na margem esquerda, contendo 'texto' como descrição (pode usar subconjuntos destas características);\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:ficheiro.ogg]]</nowiki></code>''' para apresentar uma ligação direta para o ficheiro em vez de mostrá-lo, quer este tenha por conteúdo uma imagem ou outros dados.",
        "upload-permitted": "{{PLURAL:$2|Tipo|Tipos}} de ficheiro {{PLURAL:$2|permitido|permitidos}}: $1.",
        "upload-preferred": "{{PLURAL:$2|Tipo|Tipos}} de ficheiro {{PLURAL:$2|preferido|preferidos}}: $1.",
        "apisandbox-continue": "Continuar",
        "apisandbox-continue-clear": "Limpar",
        "apisandbox-continue-help": "{{int:apisandbox-continue}} [https://www.mediawiki.org/wiki/API:Query#Continuing_queries continuará] o último pedido; {{int:apisandbox-continue-clear}} limpará os parâmetros relativos à continuação.",
+       "apisandbox-param-limit": "Introduza <kbd>max</kbd> para usar o limite máximo.",
        "booksources": "Fontes bibliográficas",
        "booksources-search-legend": "Pesquisar referências bibliográficas",
        "booksources-search": "Pesquisar",
        "activeusers-count": "$1 {{PLURAL:$1|ação|ações}} {{PLURAL:$3|no último dia|nos últimos $3 dias}}",
        "activeusers-from": "Mostrar utilizadores começados por:",
        "activeusers-groups": "Apresentar os utilizadores que pertencem aos grupos:",
+       "activeusers-excludegroups": "Excluir os utilizadores que pertencem aos grupos:",
        "activeusers-noresult": "Nenhum utilizador encontrado.",
        "activeusers-submit": "Mostrar utilizadores ativos",
        "listgrouprights": "Privilégios dos grupos de utilizadores",
        "wlshowhideliu": "utilizadores registados",
        "wlshowhideanons": "utilizadores anónimos",
        "wlshowhidepatr": "edições patrulhadas",
-       "wlshowhidemine": "minhas edições",
+       "wlshowhidemine": "edições minhas",
        "wlshowhidecategorization": "categorização de páginas",
        "watchlist-options": "Opções da lista de páginas vigiadas",
        "watching": "A vigiar...",
        "logentry-contentmodel-change": "$1 {{GENDER:$2|alterou}} o modelo de conteúdo da página $3 de \"$4\" para \"$5\"",
        "logentry-contentmodel-change-revertlink": "reverter",
        "logentry-contentmodel-change-revert": "reverter",
-       "protectlogpage": "Registo de proteção",
+       "protectlogpage": "Registo de proteções",
        "protectlogtext": "Encontra abaixo o registo de proteção e desproteção de páginas.\nConsulte a [[Special:ProtectedPages|lista de páginas protegidas]] para ver as páginas que se encontram protegidas neste momento.",
        "protectedarticle": "protegeu \"[[$1]]\"",
        "modifiedarticleprotection": "alterou o nível de proteção para \"[[$1]]\"",
        "sp-contributions-blocked-notice": "Este utilizador está bloqueado neste momento.\nPara referência é apresentado abaixo o último registo de bloqueio:",
        "sp-contributions-blocked-notice-anon": "Este endereço IP está bloqueado neste momento.\nPara referência é apresentado abaixo o último registo de bloqueio:",
        "sp-contributions-search": "Pesquisar contribuições",
-       "sp-contributions-username": "Endereço de IP ou utilizador(a):",
+       "sp-contributions-username": "Endereço IP ou nome de utilizador:",
        "sp-contributions-toponly": "Mostrar apenas as edições mais recentes",
        "sp-contributions-newonly": "Mostrar só edições que são criações de páginas",
        "sp-contributions-hideminor": "Ocultar edições menores",
        "whatlinkshere-hideimages": "$1 ligações para ficheiros",
        "whatlinkshere-filters": "Filtros",
        "whatlinkshere-submit": "Continuar",
-       "autoblockid": "Bloqueio automático nº$1",
+       "autoblockid": "Bloqueio automático nº $1",
        "block": "Bloquear utilizador(a)",
        "unblock": "Desbloquear utilizador",
        "blockip": "Bloquear {{GENDER:$1|utilizador|utilizadora|utilizador(a)}}",
        "blockip-legend": "Bloquear utilizador(a)",
        "blockiptext": "Utilize o formulário abaixo para bloquear o acesso de escrita a um endereço IP específico ou a um nome de utilizador(a).\nIsto só deve ser feito para prevenir vandalismo e de acordo com a [[{{MediaWiki:Policy-url}}|política]]. Indique a seguir um motivo de bloqueio específico (por exemplo, indicando as páginas que foram alvo de vandalismo).\nPode bloquear intervalos de endereços IP com a sintaxe [https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing CIDR]; o maior intervalo permitido é /$1 para IPv4 e /$2 para IPv6.",
-       "ipaddressorusername": "Endereço de IP ou utilizador(a):",
+       "ipaddressorusername": "Endereço IP ou nome de utilizador:",
        "ipbexpiry": "Expiração:",
        "ipbreason": "Motivo:",
        "ipbreason-dropdown": "*Razões comuns para um bloqueio\n** Inserção de informações falsas\n** Remoção de conteúdos de páginas\n** Inserção de \"spam\" para sítios externos\n** Inserção de conteúdo sem sentido/incompreensível nas páginas\n** Comportamento intimidador/inoportuno\n** Uso abusivo de contas múltiplas\n** Nome de utilizador inaceitável",
        "blocklist-userblocks": "Ocultar bloqueios de contas",
        "blocklist-tempblocks": "Ocultar bloqueios temporários",
        "blocklist-addressblocks": "Ocultar bloqueios de IP único",
-       "blocklist-rangeblocks": "Ocultar bloqueios de faixas",
+       "blocklist-rangeblocks": "Ocultar bloqueios de gamas",
        "blocklist-timestamp": "Data e hora",
        "blocklist-target": "Destinatário",
        "blocklist-expiry": "Expira",
        "contribslink": "contribs",
        "emaillink": "enviar correio eletrónico",
        "autoblocker": "Foi automaticamente bloqueado, porque o seu endereço IP foi recentemente usado por \"[[User:$1|$1]]\". \nO motivo apresentado para o bloqueio de $1 é: \"$2\".",
-       "blocklogpage": "Registo de bloqueio",
+       "blocklogpage": "Registo de bloqueios",
        "blocklog-showlog": "Este utilizador foi já bloqueado anteriormente.\nO registo de bloqueios é fornecido abaixo para referência:",
        "blocklog-showsuppresslog": "Este utilizador foi bloqueado e ocultado anteriomente.\nO registo de supressão é fornecido abaixo para referência:",
        "blocklogentry": "bloqueou \"[[$1]]\" por $2. $3",
        "unblock-hideuser": "Não pode desbloquear o utilizador, porque o nome deste utilizador foi oculto.",
        "ipb_cant_unblock": "Erro: O bloqueio com ID $1 não foi encontrado. Pode já ter sido desbloqueado.",
        "ipb_blocked_as_range": "Erro: O IP $1 não se encontra bloqueado de forma direta e não pode ser desbloqueado deste modo. No entanto, está bloqueado como parte da gama $2, a qual pode ser desbloqueada.",
-       "ip_range_invalid": "Gama de IP inválida.",
+       "ip_range_invalid": "Gama de endereços IP inválida.",
        "ip_range_toolarge": "Não são permitidas gamas de IP maiores do que /$1.",
        "proxyblocker": "Bloqueador de proxies",
        "proxyblockreason": "O seu endereço IP foi bloqueado por ser um ''proxy'' público.\nContacte o seu fornecedor de internet ou o serviço de apoio técnico e informe-os deste grave problema de segurança, por favor.",
        "import-error-interwiki": "A página \"$1\" não pode ser importada pois o seu nome está reservado para um ligação externa (interlíngua).",
        "import-error-special": "A página \"$1\" não pode ser importada porque pertence a um domínio especial que não permite páginas.",
        "import-error-invalid": "A página \"$1\" não pode ser importada porque o seu nome é inválido nesta wiki.",
-       "import-error-unserialize": "Revisão $2 da página \"$1\" não pode ser desserializada. Foi relatado que a revisão usava o modelo de conteúdo $3 serializado como $4.",
+       "import-error-unserialize": "Não foi possível anular a seriação da revisão $2 da página \"$1\". Foi reportado que a revisão usava o modelo de conteúdo $3, seriado como $4.",
        "import-error-bad-location": "A revisão $2, que usa o modelo de conteúdo $3, não pode ser gravada em \"$1\" nesta wiki, porque o modelo não é suportado nessa página.",
        "import-options-wrong": "{{PLURAL:$2|Opção errada|Opções erradas}}: <nowiki>$1</nowiki>",
        "import-rootpage-invalid": "A raiz da página dada é um título inválido.",
        "tooltip-pt-preferences": "As {{GENDER:|suas}} preferências",
        "tooltip-pt-watchlist": "Lista de mudanças nas páginas que está a vigiar",
        "tooltip-pt-mycontris": "Lista das {{GENDER:|suas}} contribuições",
-       "tooltip-pt-anoncontribs": "Uma lista de edições feitas a partir deste endereço de IP",
+       "tooltip-pt-anoncontribs": "Uma lista de edições feitas a partir deste endereço IP",
        "tooltip-pt-login": "É encorajado que inicie sessão, apesar de não ser obrigatório.",
        "tooltip-pt-logout": "Sair da conta",
        "tooltip-pt-createaccount": "É encorajado a criar uma conta e iniciar sessão; no entanto, não é obrigatório",
        "pageinfo-robot-noindex": "Não permitida",
        "pageinfo-watchers": "Número de vigilantes da página",
        "pageinfo-visiting-watchers": "Número de vigilantes que consultaram as edições recentes da página",
-       "pageinfo-few-watchers": "Menos do que $1 {{PLURAL:$1|vigilante|vigilantes}}",
+       "pageinfo-few-watchers": "Menos de $1 {{PLURAL:$1|vigilante|vigilantes}}",
        "pageinfo-few-visiting-watchers": "Pode ou não pode haver editores a vigiar as edições recentes",
        "pageinfo-redirects-name": "Número de redirecionamentos para esta página",
        "pageinfo-subpages-name": "Subpáginas desta página",
        "specialpages-group-pages": "Listas de páginas",
        "specialpages-group-pagetools": "Ferramentas de página",
        "specialpages-group-wiki": "Dados e ferramentas",
-       "specialpages-group-redirects": "Redirecionar páginas especiais",
+       "specialpages-group-redirects": "Páginas especiais de redirecionamento",
        "specialpages-group-spam": "Ferramentas anti-spam",
        "specialpages-group-developer": "Ferramentas de desenvolvimento",
        "blankpage": "Página em branco",
        "tags-deactivate": "desativar",
        "tags-hitcount": "$1 {{PLURAL:$1|modificação|modificações}}",
        "tags-manage-no-permission": "Não possui permissão para gerir alterações de etiquetas.",
-       "tags-manage-blocked": "Não pode gerir etiquetas de modificação enquanto estiver bloqueado.",
+       "tags-manage-blocked": "Não pode gerir etiquetas de modificação enquanto estiver {{GENDER:$1|bloqueado|bloqueada}}.",
        "tags-create-heading": "Criar nova etiqueta",
        "tags-create-explanation": "Por definição, etiquetas recém-criadas estarão disponíveis para utilização por utilizadores e robôs.",
        "tags-create-tag-name": "Nome da etiqueta:",
        "tags-deactivate-not-allowed": "Não é possível desativar a etiqueta \"$1\".",
        "tags-deactivate-submit": "Desativar",
        "tags-apply-no-permission": "Não possui privilégios para aplicar alterações a etiquetas em conjunto com as suas modificações.",
-       "tags-apply-blocked": "Não pode aplicar etiquetas de modificação nas suas alterações enquanto estiver bloqueado.",
+       "tags-apply-blocked": "Não pode aplicar etiquetas de modificação nas suas alterações enquanto estiver {{GENDER:$1|bloqueado|bloqueada}}.",
        "tags-apply-not-allowed-one": "A etiqueta \"$1\" não pode ser aplicada manualmente.",
        "tags-apply-not-allowed-multi": "{{PLURAL:$2|A seguinte etiqueta não pode ser aplicada|As seguintes etiquetas não podem ser aplicadas}} manualmente: $1",
        "tags-update-no-permission": "Não possui privilégios para adicionar ou remover etiquetas de revisões individuais ou entradas de registo.",
-       "tags-update-blocked": "Não pode adicionar ou remover etiquetas de modificação enquanto estiver bloqueado.",
+       "tags-update-blocked": "Não pode adicionar ou remover etiquetas de modificação enquanto estiver {{GENDER:$1|bloqueado|bloqueada}}.",
        "tags-update-add-not-allowed-one": "A etiqueta \"$1\" não pode ser adicionada manualmente.",
        "tags-update-add-not-allowed-multi": "{{PLURAL:$2|A seguinte etiqueta não pode ser adicionada|As seguintes etiquetas não podem ser adicionadas}} manualmente: $1",
        "tags-update-remove-not-allowed-one": "A remoção da etiqueta \"$1\" não é permitida.",
        "feedback-useragent": "Agente de utilizador:",
        "searchsuggest-search": "Pesquisar na wiki {{SITENAME}}",
        "searchsuggest-containing": "contendo...",
-       "api-error-autoblocked": "O seu endereço de IP foi bloqueado automaticamente, pois foi utilizado por um utilizador bloqueado.",
+       "api-error-autoblocked": "O seu endereço IP foi bloqueado automaticamente, pois foi utilizado por um utilizador bloqueado.",
        "api-error-badaccess-groups": "Não tem permissão para enviar ficheiros para esta wiki.",
        "api-error-badtoken": "Erro interno: Chave incorrecta.",
        "api-error-blocked": "Foi bloqueado de editar.",
        "duration-centuries": "$1 {{PLURAL:$1|século|séculos}}",
        "duration-millennia": "$1 {{PLURAL:$1|milénio|milénios}}",
        "rotate-comment": "Imagem rodada em $1 {{PLURAL:$1|grau|graus}} no sentido dos ponteiros do relógio",
-       "limitreport-title": "Dados de perfis do analisador:",
+       "limitreport-title": "Dados de caracterização do analisador sintático:",
        "limitreport-cputime": "Tempo de utilização da CPU",
        "limitreport-cputime-value": "$1 {{PLURAL:$1|segundo|segundos}}",
        "limitreport-walltime": "Tempo real de utilização",
        "limitreport-templateargumentsize": "Tamanho dos argumentos da predefinição",
        "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|byte|bytes}}",
        "limitreport-expansiondepth": "Profundidade máxima de expansão",
-       "limitreport-expensivefunctioncount": "Número de funções do analisador custosas",
+       "limitreport-expensivefunctioncount": "Número de funções exigentes do analisador sintático",
        "expandtemplates": "Expandir predefinições",
        "expand_templates_intro": "Esta página especial recebe um texto e expande recursivamente todas as predefinições nele existentes.\nTambém expande funções do analisador sintático ''(parser)'', tais como\n<nowiki>{{</nowiki>#language:...}}, e variáveis, como\n<nowiki>{{</nowiki>CURRENTDAY}}.\nNa verdade, expande tudo o que estiver entre chavetas duplas.",
        "expand_templates_title": "Título de contexto para {{FULLPAGENAME}} etc.:",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (ativado)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>desativado</strong>)",
        "mediastatistics": "Estatísticas multimédia",
-       "mediastatistics-summary": "Estatísticas sobre os tipos de ficheiros carregados. Inclui apenas a versão mais recente do ficheiro. Versões antigas ou eliminadas são excluídas.",
+       "mediastatistics-summary": "Estatísticas sobre os tipos de ficheiro carregados. Inclui apenas a versão mais recente de cada ficheiro. Versões antigas ou eliminadas não estão incluídas.",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 byte|$1 bytes}} ($2; $3%)",
        "mediastatistics-bytespertype": "Tamanho total dos ficheiros desta secção: {{PLURAL:$1|$1 byte|$1 bytes}} ($2; $3%).",
        "mediastatistics-allbytes": "Tamanho total de todos os ficheiros: {{PLURAL:$1|$1 byte|$1 bytes}} ($2).",
        "mediastatistics-header-total": "Todos os ficheiros",
        "json-warn-trailing-comma": "$1 {{PLURAL:$1|vírgula desnecessária foi removida|vírgulas desnecessárias foram removidas}} do código JSON",
        "json-error-unknown": "Houve um problema com o JSON. Erro: $1",
-       "json-error-depth": "A profundidade máxima da pilha foi excedida",
+       "json-error-depth": "A profundidade máxima do ''stack'' foi excedida",
        "json-error-state-mismatch": "Código JSON inválido ou mal formatado",
        "json-error-ctrl-char": "Erro de carácter de controlo, possivelmente codificado incorretamente",
        "json-error-syntax": "Erro de sintaxe",
index e5df378..a838ad0 100644 (file)
        "passwordreset-emaildisabled": "Used as error message in changing password when site's email feature is disabled.",
        "passwordreset-username": "{{Identical|Username}}",
        "passwordreset-domain": "A domain like used in Domain Name System (DNS) or more specifically like a domain component in the Lightweight Directory Access Protocol (LDAP).\n{{Identical|Domain}}",
-       "passwordreset-capture": "Label for checkbox asking the user whether they want to see the contents of the password reset email (only shown if they have the <code>passwordreset</code> permission).",
-       "passwordreset-capture-help": "Longer explanatory message for the capture checkbox label.",
        "passwordreset-email": "{{Identical|E-mail address}}",
        "passwordreset-emailtitle": "Used as subject (title) of email.",
        "passwordreset-emailtext-ip": "Be consistent with {{msg-mw|Passwordreset-emailtext-user}}.\n\nParameters:\n* $1 - an IP address\n* $2 - message {{msg-mw|Passwordreset-emailelement}} repeated $3 times\n* $3 - the number of repetitions in $2\n* $4 - base URL of the wiki\n* $5 - number of days",
        "passwordreset-emailelement": "This is a body of a password reset email to allow them into the system with a new password. Parameters:\n* $1 - the user's login name. This parameter can be used for GENDER.\n* $2 - the temporary password given by the system",
        "passwordreset-emailsentemail": "Used in [[Special:PasswordReset]].\n\nSee also:\n* {{msg-mw|Passwordreset-emailsent-capture}}\n* {{msg-mw|Passwordreset-emailerror-capture}}",
        "passwordreset-emailsentusername": "Used in [[Special:PasswordReset]].\n\nSee also:\n* {{msg-mw|Passwordreset-emailsent-capture}}\n* {{msg-mw|Passwordreset-emailerror-capture}}",
-       "passwordreset-emailsent-capture2": "Used in [[Special:PasswordReset]].\n\nParameters:\n* $1 - number of accounts notified\n\nSee also:\n* {{msg-mw|Passwordreset-emailsentemail}}\n* {{msg-mw|Passwordreset-emailsentusername}}\n* {{msg-mw|Passwordreset-emailerror-capture}}",
-       "passwordreset-emailerror-capture2": "Error message displayed in [[Special:PasswordReset]] when sending an email fails. Parameters:\n* $1 - error message\n* $2 - username, used for GENDER\n* $3 - number of accounts notified\n\nSee also:\n* {{msg-mw|Passwordreset-emailsentemail}}\n* {{msg-mw|Passwordreset-emailsentusername}}\n* {{msg-mw|Passwordreset-emailsent-capture}}\n* {{msg-mw|Passwordreset-emailerror-capture}}",
        "passwordreset-nocaller": "Shown when a password reset was requested but the process failed due to an internal error related to missing details about the origin (caller) of the password reset request.",
        "passwordreset-nosuchcaller": "Shown when a password reset was requested but the username of the caller could not be resolved to a user. This is an internal error.\n\nParameters:\n* $1 - username of the caller",
        "passwordreset-ignored": "Shown when password reset was unsuccessful due to configuration problems.",
-       "passwordreset-invalideamil": "Returned when the email address is syntatically invalid.",
+       "passwordreset-invalidemail": "Returned when the email address is syntatically invalid.",
        "passwordreset-nodata": "Returned when no data was provided.",
        "changeemail": "Title of [[Special:ChangeEmail|special page]]. This page also allows removing the user's email address.",
        "changeemail-summary": "{{ignored}}",
        "right-siteadmin": "{{doc-right|siteadmin}}",
        "right-override-export-depth": "{{doc-right|override-export-depth}}",
        "right-sendemail": "{{doc-right|sendemail}}",
-       "right-passwordreset": "{{doc-right|passwordreset}}",
        "right-managechangetags": "{{doc-right|managechangetags}}",
        "right-applychangetags": "{{doc-right|applychangetags}}",
        "right-changetags": "{{doc-right|changetags}}",
        "apisandbox-continue": "Button text for sending another request using query continuation.\n{{Identical|Continue}}",
        "apisandbox-continue-clear": "Button text for clearing query continuation parameters.\n{{Identical|Clear}}",
        "apisandbox-continue-help": "Help text for the continue and clear buttons.",
+       "apisandbox-param-limit": "Additional documentation text for 'limit'-type parameters.",
+       "apisandbox-multivalue-all-namespaces": "Used as an entry in a multiple-namespace widget to select all available namespaces. Parameters:\n* $1 - API input value meaning \"all namespaces\".",
+       "apisandbox-multivalue-all-values": "Used as an entry in a multiple-value widget to select all available values. Parameters:\n* $1 - API input value meaning \"all values\".",
        "booksources": "{{doc-special|BookSources}}\n\n'''This message shouldn't be changed unless it has serious mistakes.'''\n\nIt's used as the page name of the configuration page of [[Special:BookSources]]. Changing it breaks existing sites using the default version of this message.\n\nSee also:\n* {{msg-mw|Booksources|title}}\n* {{msg-mw|Booksources-text|text}}",
        "booksources-summary": "{{doc-specialpagesummary|booksources}}",
        "booksources-search-legend": "Box heading on [[Special:BookSources|book sources]] special page. The box is for searching for places where a particular book can be bought or viewed.",
        "activeusers-count": "Used in [[Special:ActiveUsers]] to show the active user's recent action count in brackets ([]).\n* $1 is the number of recent actions\n* $2 is the user's name for use with GENDER (optional)\n* $3 is the maximum number of days of the RecentChangesList",
        "activeusers-from": "Used as label for checkbox in the form on [[Special:ActiveUsers]].\n\nidentical with {{msg-mw|listusersfrom}}\n\nSee also:\n* {{msg-mw|activeusers|legend for the form}}",
        "activeusers-groups": "Used as label on [[Special:ActiveUsers]].",
+       "activeusers-excludegroups": "Used as an option on [[Special:ActiveUsers]].",
        "activeusers-noresult": "identical with {{msg-mw|listusers-noresult}}",
        "activeusers-submit": "Used as label for button in the form on [[Special:ActiveUsers]]",
        "listgrouprights": "The name of the special page [[Special:ListGroupRights]].",
        "tags-deactivate": "Used on [[Special:Tags]]. Verb. Used as display text on a link to deactivate a tag.\n{{Identical|Delete}}",
        "tags-hitcount": "Shown in the \"{{msg-mw|Tags-hitcount-header}}\" column in [[Special:Tags]]. For more information on tags see [[mw:Manual:Tags|MediaWiki]].\n\nParameters:\n* $1 - the number of changes marked with the tag",
        "tags-manage-no-permission": "Error message on [[Special:Tags]]",
-       "tags-manage-blocked": "Error message on [[Special:Tags]]",
+       "tags-manage-blocked": "Error message on [[Special:Tags]]\n\nParameters:\n* $1 - user name for gender",
        "tags-create-heading": "The title of a fieldset, beneath which lies a form used to create a tag. For more information on tags see [[mw:Manual:Tags|MediaWiki]].",
        "tags-create-explanation": "The first paragraph of an explanation to tell users what they are about to do.",
        "tags-create-tag-name": "Form field label for the name of the tag to be created.",
        "tags-deactivate-not-allowed": "Error message on [[Special:Tags]]",
        "tags-deactivate-submit": "The label of the form \"submit\" button when the user is about to deactivate a tag.\n{{Identical|Deactivate}}",
        "tags-apply-no-permission": "Error message seen via the API when a user lacks the permission to apply change tags.",
-       "tags-apply-blocked": "Error message seen via the API when a user is blocked and attempted to apply change tags.",
+       "tags-apply-blocked": "Error message seen via the API when a user is blocked and attempted to apply change tags.\n\nParameters:\n* $1 - user name for gender",
        "tags-apply-not-allowed-one": "Error message seen via the API when a user tries to apply a single tag that is not properly defined. This message is only ever used in the case of 1 tag.\n\nParameters:\n* $1 - tag name",
        "tags-apply-not-allowed-multi": "Error message seen via the API when a user tries to apply more than one tag that is not properly defined.\n\nParameters:\n* $1 - comma-separated list of tag names\n* $2 - number of tags",
        "tags-update-no-permission": "Error message seen via the API when a user lacks the permission to add or remove change tags after the fact.",
-       "tags-update-blocked": "Error message seen via the API when a user is blocked and attempted to add or remove change tags after the fact.",
+       "tags-update-blocked": "Error message seen via the API when a user is blocked and attempted to add or remove change tags after the fact.\n\nParameters:\n* $1 - user name for gender",
        "tags-update-add-not-allowed-one": "Error message seen via the API when a user tries to add a single tag that is not properly defined. This message is only ever used in the case of 1 tag.\n\nParameters:\n* $1 - tag name",
        "tags-update-add-not-allowed-multi": "Error message seen via the API when a user tries to add more than one tag that is not properly defined.\n\nParameters:\n* $1 - comma-separated list of tag names\n* $2 - number of tags",
        "tags-update-remove-not-allowed-one": "Error message seen via the API when a user tries to remove a single tag that is not properly defined. This message is only ever used in the case of 1 tag.\n\nParameters:\n* $1 - tag name",
        "mediastatistics-header-audio": "Header on [[Special:MediaStatistics]] for file types that are in the audio category\n{{Identical|Audio}}",
        "mediastatistics-header-video": "Header on [[Special:MediaStatistics]] for file types that are in the video category\n{{Identical|Video}}",
        "mediastatistics-header-multimedia": "Header on [[Special:MediaStatistics]] for file types that are in the multimedia category. This does not include plain audio or video files, but more complex multimedia such as flash or vrml. This especially includes scripted multimedia. Ogg files in which MediaWiki cannot determine if it is an audio or video file (or something else) are included here.",
-       "mediastatistics-header-office": "Header on [[Special:MediaStatistics]] for file types that are in the Office category. This includes PDFs, OpenDocument files, Microsoft Word files, etc.",
+       "mediastatistics-header-office": "Header on [[Special:MediaStatistics]] for file types that are in the Office category. This includes PDFs, OpenDocument files, Microsoft Word files, etc.\n{{Identical|Office}}",
        "mediastatistics-header-text": "Header on [[Special:MediaStatistics]] for file types that are in the text category. This includes simple text formats, including plain text formats, json, csv, and xml. Source code of compiled programming languages may be included here in the future, but isn't currently.",
        "mediastatistics-header-executable": "Header on [[Special:MediaStatistics]] for file types that are in the executable category. This includes things like source files for interpreted programming language (Shell scripts, javascript, etc).",
        "mediastatistics-header-archive": "Header on [[Special:MediaStatistics]] for file types that are in the archive category. Includes things like tar, zip, gzip etc.",
        "mw-widgets-dateinput-placeholder-month": "Placeholder displayed in a date input field when it's empty, representing a date format with 4 digits for year and 2 digits for month, separated with hyphens (without a day). This should be uppercase, if possible, and must not include any additional explanations. If there is no good way to translate it, make this message blank.",
        "mw-widgets-titleinput-description-new-page": "Description label for a new page in the title input widget.",
        "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.",
        "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}}.",
        "sessionprovider-generic": "Used to create a generic session type description when one isn't provided via the proper message. Should be phrased to make sense when added to a message such as {{msg-mw|cannotloginnow-text}}.\n\nParameters:\n* $1 - PHP classname.",
        "sessionprovider-mediawiki-session-cookiesessionprovider": "Description of the sessions provided by the CookieSessionProvider class, which use HTTP cookies. Should be phrased to make sense when added to a message such as {{msg-mw|cannotloginnow-text}}.",
index 6de7ea2..e1c2830 100644 (file)
        "yourname": "Rurak shuti:",
        "yourpassword": "Yaykunkapak rimay:",
        "yourpasswordagain": "Yaykunapak rimayta kutin killkapay:",
-       "remembermypassword": "Kay Internet-wampunapi {{PLURAL:$1|shuk punchata|$1 punchakunata}} ñuka rurak shutiwan yaykushkami katichiwapay.",
        "login": "Yaykuna",
        "nav-login-createaccount": "Yaykuna",
        "userlogin": "Yaykuna",
index 52111d3..6e54be3 100644 (file)
        "activeusers-intro": "Quai è ina glista dals utilisaders che han gì activitads {{PLURAL:$1|l'ultim di|en ils ultims $1 dis}}.",
        "activeusers-count": "$1 {{PLURAL:$1|acziun|acziuns}} {{PLURAL:$3|l'ultim di|ils ultims $3 dis}}",
        "activeusers-from": "Mussar utilisaders davent da:",
-       "activeusers-hidebots": "Zuppentar bots",
-       "activeusers-hidesysops": "Zuppentar administraturs",
        "activeusers-noresult": "Chattà nagins utilisaders.",
        "listgrouprights": "Dretgs da las gruppas d'utilisaders",
        "listgrouprights-summary": "Sutvart vegn mussada ina glista da las gruppas d'utilisaders sin questa wiki cun ils dretgs d'access associads.\nInfurmaziuns supplementaras davart ils singuls dretgs chattas [[{{MediaWiki:Listgrouprights-helppage}}|sin questa pagina]].",
index d113101..0d4a8b2 100644 (file)
        "passwordreset-emailelement": "Nume de utilizator: \n$1\n\nParolă temporară: \n$2",
        "passwordreset-emailsentemail": "Dacă această adresă de e-mail este asociată contului dumneavoastră, atunci se va trimite un e-mail de resetare a parolei.",
        "passwordreset-emailsentusername": "Dacă există o adresă de e-mail asociată acestui nume de utilizator, atunci se va trimite un e-mail de resetare a parolei.",
-       "passwordreset-invalideamil": "Adresă de e-mail nevalidă",
+       "passwordreset-invalidemail": "Adresă de e-mail nevalidă",
        "passwordreset-nodata": "Nu au fost furnizate un nume de utilizator sau o adresă de e-mail",
        "changeemail": "Modificare sau înlăturare adresă de e-mail",
        "changeemail-header": "Completați acest formular pentru a vă schimba adresa de e-mail. Dacă doriți să înlăturați orice asociere a unei adrese de e-mail cu contul dumneavoastră, lăsați necompletat câmpul pentru introducerea unei noi adrese de e-mail atunci când trimiteți formularul.",
        "activeusers-intro": "Aceasta este o listă cu utilizatorii care au avut orice fel de activitate în {{PLURAL:$1|ultima zi|ultimele $1 zile}}.",
        "activeusers-count": "{{PLURAL:$1|o acțiune|$1 acțiuni|$1 de acțiuni}} în {{PLURAL:$3|ultima zi|ultimele $3 zile|ultimele $3 de zile}}",
        "activeusers-from": "Afișează utilizatori începând cu:",
-       "activeusers-hidebots": "Ascunde roboții",
-       "activeusers-hidesysops": "Ascunde administratorii",
        "activeusers-noresult": "Niciun utilizator găsit.",
        "activeusers-submit": "Afișează utilizatorii activi",
        "listgrouprights": "Permisiuni grupuri de utilizatori",
index fadc3b7..deeece5 100644 (file)
@@ -44,6 +44,7 @@
        "tog-watchlisthidebots": "Scunne le cangiaminde de le bot da l'elenghe de le pàggene condrollate",
        "tog-watchlisthideminor": "Scunne le cangiaminde stuèdeche da l'elenghe de le pàggene condrollate",
        "tog-watchlisthideliu": "Scunne le cangiaminde de l'utinde canusciute da l'elenghe de le pàggene condrollate",
+       "tog-watchlistreloadautomatically": "Recareche automaticamende l'eleghe de le pàggene condrollate quanne cange 'nu filtre (richieste Javascript)",
        "tog-watchlisthideanons": "Scunne le cangiaminde de l'utinde scanusciute da l'elenghe de le pàggene condrollate",
        "tog-watchlisthidepatrolled": "Scunne le cangiaminde condrollate jndr'à l'elenghe de le pàggene condrollate",
        "tog-ccmeonemails": "Manneme 'na copie de le mail ca je manne a l'ôtre utinde",
index ceaffa7..fdb4712 100644 (file)
        "passwordreset-emaildisabled": "Функции электронной почты отключены в этой вики.",
        "passwordreset-username": "Имя участника:",
        "passwordreset-domain": "Домен:",
-       "passwordreset-capture": "Просмотреть получившееся письмо?",
-       "passwordreset-capture-help": "Если вы установите данную отметку, то вам будет показано письмо с временным паролем, отправляемое участнику.",
        "passwordreset-email": "Адрес электронной почты:",
        "passwordreset-emailtitle": "Сведения об учётной записи {{SITENAME}}",
        "passwordreset-emailtext-ip": "Кто-то (возможно, вы, с IP-адреса $1) запросил сброс пароля к вашей учётной записи в проекте {{SITENAME}} ($4).\nС этим адресом электронной почты {{PLURAL:$3|1=связана следующая учётная запись|связаны следующие учётные записи}}:\n\n$2\n\n{{PLURAL:$3|1=Этот временный пароль будет|Эти временные пароли будут}} действовать {{PLURAL:$5|$5 день|$5 дня|$5 дней|1=один день}}.\nВы должны представиться системе и выбрать новый пароль. \nЕсли вы не делали этого запроса, или вспомнили свой исходный пароль и не желаете его менять, \nто можете проигнорировать это сообщение и продолжить использовать свой старый пароль.",
        "passwordreset-emailelement": "Имя участника: \n$1\n\nВременный пароль: \n$2",
        "passwordreset-emailsentemail": "Если это адрес электронной почты связан с вашей учётной записью, вам будет отправлено письмо для сброса пароля.",
        "passwordreset-emailsentusername": "Если есть адрес электронной почты, связанный с этим именем участника, то будет отправлено письмо для восстановления пароля.",
-       "passwordreset-emailsent-capture2": "{{PLURAL:$1|Письмо|Письма}} для сброса пароля {{PLURAL:$1|было отправлено|были отправлены}}. {{PLURAL:$1|Логин и пароль показаны|Список логинов и паролей показан}} здесь.",
-       "passwordreset-emailerror-capture2": "Отправка {{GENDER:$2|участнику|участнице}} письма по электронной почте не удалась: $1\n{{PLURAL:$3|Логин и пароль показаны|Список логинов и паролей показан}} здесь.",
        "passwordreset-nocaller": "Должен быть предоставлен источник вызова",
        "passwordreset-nosuchcaller": "Источник вызова не существует: $1",
        "passwordreset-ignored": "Сброс пароля не был обработан. Может быть, не был настроен ни один провайдер?",
-       "passwordreset-invalideamil": "Недопустимый адрес электронной почты",
+       "passwordreset-invalidemail": "Недопустимый адрес электронной почты",
        "passwordreset-nodata": "Ни имя участника, ни адрес электронной почты не были предоставлены",
        "changeemail": "Изменить или удалить адрес электронной почты",
        "changeemail-header": "Заполните эту форму, чтобы изменить свой адрес электронной почты. Если вы хотите отвязать свой адрес электронной почты от учётной записи, то при заполнении формы оставьте пустым поле нового адреса электронной почты.",
        "right-siteadmin": "блокировка и разблокировка базы данных",
        "right-override-export-depth": "экспортирование страниц, включая связанные страницы с глубиной до 5",
        "right-sendemail": "отправка электронной почты другим участникам",
-       "right-passwordreset": "просмотр электронных писем с изменением пароля",
        "right-managechangetags": "создание и (де)активация [[Special:Tags|меток]]",
        "right-applychangetags": "применение [[Special:Tags|меток]] вместе со своими правками",
        "right-changetags": "добавление и удаление произвольных [[Special:Tags|меток]] на отдельных правках и записях в журнале",
        "apisandbox-continue": "Продолжить",
        "apisandbox-continue-clear": "Очистить",
        "apisandbox-continue-help": "{{int:apisandbox-continue}} [https://www.mediawiki.org/wiki/API:Query#Continuing_queries продолжит] последний запрос; {{int:apisandbox-continue-clear}} очистит связанные с продолжением параметры.",
+       "apisandbox-param-limit": "Введите <kbd>максимальное</kbd> использование максимального предела.",
        "booksources": "Источники книг",
        "booksources-search-legend": "Поиск информации о книге",
        "booksources-isbn": "ISBN:",
        "activeusers-intro": "Это список участников, совершавших какие-либо действия за {{PLURAL:$1|последний $1 день|последние $1 дня|последние $1 дней|1=последний день}}.",
        "activeusers-count": "$1 {{PLURAL:$1|правка|правки|правок}} за {{PLURAL:$3|$3 последний день|последние $3 дня|последние $3 дней|1=последний день}}",
        "activeusers-from": "Показать участников, начиная с:",
-       "activeusers-groups": "Отображать пользователей, принадлежащих к группам:",
+       "activeusers-groups": "Отображать участников, принадлежащих к группам:",
+       "activeusers-excludegroups": "Исключать участников, принадлежащих к группам:",
        "activeusers-noresult": "Не найдено участников.",
        "activeusers-submit": "Показать активных участников",
        "listgrouprights": "Права групп участников",
        "tags-deactivate": "отключить",
        "tags-hitcount": "$1 {{PLURAL:$1|изменение|изменения|изменений}}",
        "tags-manage-no-permission": "У вас нет прав на управление изменениями меток.",
-       "tags-manage-blocked": "Вы не можете управлять метками правок, пока вы заблокированы.",
+       "tags-manage-blocked": "Вы не можете управлять метками правок, пока {{GENDER:$1|вы}} заблокированы.",
        "tags-create-heading": "Создать новую метку",
        "tags-create-explanation": "Вновь созданные метки по умолчанию будут созданы доступными для использования участниками и ботами.",
        "tags-create-tag-name": "Название метки:",
        "tags-deactivate-not-allowed": "Невозможно отключить метку «$1».",
        "tags-deactivate-submit": "Отключить",
        "tags-apply-no-permission": "У вас нет права применять метки изменения к своими изменениям.",
-       "tags-apply-blocked": "Вы не можете применять метки правок к своим правкам, пока вы заблокированы.",
+       "tags-apply-blocked": "Вы не можете применять метки правок к своим правкам, пока {{GENDER:$1|вы}} заблокированы.",
        "tags-apply-not-allowed-one": "Метка «$1» не может быть применена вручную.",
        "tags-apply-not-allowed-multi": "{{PLURAL:$2|Следующая метка не может быть применена|Следующие метки не могут быть применены}} вручную: $1",
        "tags-update-no-permission": "У вас нет права на добавление или изменение меток изменения из отдельных версий или записей журналов.",
-       "tags-update-blocked": "Вы не можете добавлять или удалять метки правок, пока вы заблокированы.",
+       "tags-update-blocked": "Вы не можете добавлять или удалять метки правок, пока {{GENDER:$1|вы}} заблокированы.",
        "tags-update-add-not-allowed-one": "Тег \"$1\" не может быть добавлен вручную.",
        "tags-update-add-not-allowed-multi": "{{PLURAL:$2|Следующий тег|Следующие теги}} нельзя добавлять вручную: $1",
        "tags-update-remove-not-allowed-one": "Метка «$1» не может быть удалена.",
index 1259b35..dbc7b57 100644 (file)
        "yourpasswordagain": "Повторяйте гесло:",
        "createacct-yourpasswordagain": "Потвердьте гесло",
        "createacct-yourpasswordagain-ph": "Уведьте гесло знову",
-       "remembermypassword": "Запамнятати моє приголошіня на тім компютерї (максімално $1 {{PLURAL:$1|день|днів}})",
        "userlogin-remembermypassword": "Приголосити ня на довго",
        "userlogin-signwithsecure": "Хосновати забеспечене споїня",
        "yourdomainname": "Ваша домена:",
        "passwordreset-emailtext-user": "{{gender:$1|Хоснователь|Хоснователька|Хоснователь}} $1 {{grammar:2sg|{{SITENAME}}}} {{gender:$1|попросив|попросила|попросив}} о наставлїня нового гесла до вашого\nконта на {{grammar:6sg|{{SITENAME}}}} ($4). З тов адресов {{PLURAL:$3|є повязане наступне конто|суть повязаны наступны конта}}:\n\n$2\n\n{{PLURAL:$3|Тото дочасне гесло кінчить|Тоты дочасны гесла кінчать}} {{PLURAL:$5|о єден день|о $5 днї|о $5 днїв}}.\nТеперь бы сьте ся мали приголосити і зволити собі нове гесло. Кідь тоту пожадавку \nпослав дахто другый або сьте собі на своє старе гесло спомянули і не хочете го\nзмінити, можете тото повідомлїня іґноровати і надале хосновати старе гесло.",
        "passwordreset-emailelement": "Імя хоснователя: \n$1\n\nДочасне гесло: \n$2",
        "passwordreset-emailsentemail": "Імейл з геслом быв посланый.",
-       "passwordreset-emailsent-capture": "Быв выґенерованый імейл з геслом, што є вказаный ниже.",
-       "passwordreset-emailerror-capture": "Быв выґенерованый імейл з геслом, котрый є указаный ниже, але ся го не вдало загнати {{GENDER:$2|хоснователёви|хосновательцї}}: $1",
        "changeemail": "Зміна імейловой адресы",
        "changeemail-header": "Зміна імейловой адресу ку конту",
        "changeemail-no-info": "Ку тій сторінцї мають прямый приступ лем приголошены хоснователї.",
        "undo-norev": "Тото едітованя не можете вернути назад, бо не екзістує або было змазане.",
        "undo-summary": "Зрушена верзія $1 од хоснователя [[Special:Contributions/$2|$2]] ([[User talk:$2|діскузія]])",
        "undo-summary-username-hidden": "Зрушыти ревізію $1 скрытого хоснователя",
-       "cantcreateaccounttitle": "Не є можне вытворити конто",
        "cantcreateaccount-text": "Створёваня новых конт з той IP адресы ('''$1''') было заблоковане хоснователём [[User:$3|$3]].\n\n$3 зазначів тоту причіну: ''$2''",
        "viewpagelogs": "Вказати лоґы про тоту сторінку",
        "nohistory": "Про тоту статю не екзістує історія едітовань.",
        "activeusers-intro": "Тото є список хоснователїв, котры были даяк актівны за {{plural:$1|остатнїй день|остатных $1 днїв}}.",
        "activeusers-count": "$1 {{PLURAL:$1|дїя|дїї|дїй}} через {{PLURAL:$3|остатнёго дня|остатнїх  $3 днїв}}",
        "activeusers-from": "Вказати хоснователїв, што ся зачінають на:",
-       "activeusers-hidebots": "Сховати ботів",
-       "activeusers-hidesysops": "Сховати адміністраторів",
        "activeusers-noresult": "Ненайдженый жаден хоснователь.",
        "listgrouprights": "Права ґруп хоснователїв",
        "listgrouprights-summary": "Тото є список ґруп хоснователїв дефінованых на тій вікіi і&nbsp;їх приступовых прав.\n\n[[{{MediaWiki:Listgrouprights-helppage}}|Детайлны інформації о&nbsp;єднотливых правах]]",
        "htmlform-no": "Нє",
        "htmlform-yes": "Гей",
        "htmlform-chosen-placeholder": "Звольте параметер",
-       "sqlite-has-fts": "$1 з підпоров повнотекстового гляданя",
-       "sqlite-no-fts": "$1 без підпоры повнотекстового гляданя",
        "logentry-delete-delete": "$1 {{GENDER:$2|змазав|змазала}} сторінку $3",
        "logentry-delete-restore": "$1 {{GENDER:$2|обновив|обновила}} сторінку $3",
        "logentry-delete-event": "$1 {{GENDER:$2|змінив|змінила}}  відимость {{PLURAL:$5|протоколового запису|$5 протоколовых записів}} к сторінцї $3: $4",
        "special-characters-group-lao": "Лаоськы",
        "special-characters-group-khmer": "Кгмерськы",
        "mw-widgets-dateinput-placeholder-day": "РРРР-ММ-ДД",
-       "mw-widgets-dateinput-placeholder-month": "РРРР-ММ",
-       "api-error-blacklisted": "Звольте іншу, пописну назву."
+       "mw-widgets-dateinput-placeholder-month": "РРРР-ММ"
 }
index 9591937..d96819c 100644 (file)
        "activeusers-intro": "एषा तु गतेषु $1 {{PLURAL:$1|दिनेषु}} कृतकार्याणां योजकाना आवली ।",
        "activeusers-count": "$1 {{PLURAL:$1|कार्यं|कार्याणि}} गतेषु $3 {{PLURAL:$3|दिनेषु}} कृतानि  ।",
        "activeusers-from": "एतस्मात् आरभमाणान् योजकान् दर्शयतु ।",
-       "activeusers-hidebots": "स्वयं चालकान् गोपयतु ।",
-       "activeusers-hidesysops": "प्रशासकान् गोपयतु ।",
        "activeusers-noresult": "सदस्यः न प्राप्तः ।",
        "listgrouprights": "योजकसमूहाधिकाराः ।",
        "listgrouprights-summary": "अधोदत्ता विकिपरिभाषितस्य सङ्गताभिगम्यताधिकारैः सहिता योजकसमूहस्य आवली । [[{{MediaWiki:Listgrouprights-helppage}}|additional information]]",
        "feedback-external-bug-report-button": "यान्त्रककार्यम् अङ्क्यताम्",
        "feedback-dialog-title": "स्वप्रतिक्रियां लिखतु",
        "feedback-dialog-intro": "स्वप्रतिक्रियां लेखितुं निम्नं सरलपत्रम् उपयोक्तुं शक्नोति   ।\nभवतः/भवत्याः योजकनामोल्लेखन सह $1 इत्यस्मिन् पृष्ठे भवतः/भवत्याः प्रतिक्रियां योजयिष्यामः ।",
-       "feedback-error-title": "दोषः",
        "feedback-error1": "API इत्यस्मात् दोषः : अज्ञातः परिणामः ।",
        "feedback-error2": "दोषः : सम्पादनं निष्फलं जातम्",
        "feedback-error3": "दोषः : ए पि ऐ तः प्रतिस्पन्दः न प्राप्तः",
index 2f0fbc9..f296593 100644 (file)
        "userlogin-resetpassword-link": "Киирии тылгын санаттараҕын дуо?",
        "userlogin-helplink2": "Киирэргэ көмө",
        "userlogin-loggedin": "Маннык аатынан киирбиккин {{GENDER:$1|$1}}.\nАтын аатынан киирэргэ аллара көстөр форманы туһан.",
+       "userlogin-reauth": "Тиһиккэ хат киирэн {{GENDER:$1|$1}} буоларгын бигэргэтиэхтээххин.",
        "userlogin-createanother": "Атын аатынан бэлиэтэн",
        "createacct-emailrequired": "Email аадырыс",
        "createacct-emailoptional": "Email аадырыс (булгуччута суох)",
        "createacct-email-ph": "Эл аадырыскын суруй",
        "createacct-another-email-ph": "Эл. почтаҕын киллэр",
        "createaccountmail": "Быстах киирии тылы туһаныы уонна ону ыйыллыбыт аадырыска ыытыы",
+       "createaccountmail-help": "Атын киһиэхэ аһарыгын билбэккэ эрэ бэлиэ-ааты оҥорон биэрэргэ туттуллуон сөп.",
        "createacct-realname": "Дьиҥнээх аатыҥ (булгуччута суох)",
        "createaccountreason": "Төрүөтэ:",
        "createacct-reason": "Төрүөтэ",
        "passwordreset-emaildisabled": "Бу биикигэ эл. почтаны туттуу араарыллыбыт",
        "passwordreset-username": "Кыттааччы:",
        "passwordreset-domain": "Домен:",
-       "passwordreset-capture": "Суруллубут суругу көрөҕүн дуо?",
-       "passwordreset-capture-help": "Бу бэлиэни туруордаххына кыттааччыга ыытыллар сурук (быстах кэмҥэ туһаныллар киирии тыллаах) көстүө.",
        "passwordreset-email": "Электроннай почтата:",
        "passwordreset-emailtitle": "{{SITENAME}} бырайыакка аатын туһунан",
        "passwordreset-emailtext-ip": "Ким эрэ (баҕар эн буолуо, бу IP-ттан $1)  {{SITENAME}} ($4) бырайыакка киирии тылы уларытар туһунан ыйытык биэрбит.\nБу электрон аадырыһы кытта бу {{PLURAL:$3|аат ситимнээх|ааттар ситимнээхтэр}}:\n\n$2\n\nБу быстах кэмҥэ аналлаах {{PLURAL:$3|киирии тыл|кирии тыллар}} {{PLURAL:$5|биир күн үлэлиэҕэ|$5 күн үлэлиэхтэрэ}}.\nЭн тиһиликкэ ааккын этэн саҥа киирии тылы киллэриэхтээххин.\nӨскө бу ыйытыгы ыыппатах буоллаххына, эбэтэр урукку киирии тылгын өйдөөн кэлбит буоллаххына \nбу биллэриини ааххайыа суоххун сөп.\nОччоҕо урукку киирии тылыҥ оннунан хаалыа.",
        "right-siteadmin": "Билэ олоҕор (database) киирэри бобуу уонна көҥүллээһин",
        "right-override-export-depth": "сирэйдэри таһаарааһын (экспортааһын), ситимнээх сирэйдэри 5-с таһымҥа дылы холбоон туран",
        "right-sendemail": "Атын кыттааччыларга эл. почтаны ыытарга",
-       "right-passwordreset": "Киирии тылы почта нөҥүө уларытыыны көрүү",
        "right-managechangetags": "[[Special:Tags|Бэлиэлэри]] билии олоҕуттан ылыы уонна сотуу",
        "right-applychangetags": "Улартыыларгын кытта [[Special:Tags|тиэктэри]] тутун",
        "right-changetags": "Ханнык баҕарар [[Special:Tags|тиэктэри]] биирдиилээн уларытыыларга уонна сурунаал суруйууларыгар эбэри уонна сотору көҥүллээ",
index 7b57f55..f711abd 100644 (file)
        "yourpasswordagain": "Arhõ oku namber olme",
        "createacct-yourpasswordagain": "Uku nambar sãyãḱme",
        "createacct-yourpasswordagain-ph": "Uku nambar arhõ emme",
-       "remembermypassword": "Mitṭen khon bạṛti khata reaḱ cạbi disạ dohoḱma (Jạsti $1 {{PLURAL:$1 din reaḱ din reaḱ}} lạgit)",
        "userlogin-remembermypassword": "Bolo thirege dohokạńme",
        "yourdomainname": "Amaḱ ḍomen:",
        "externaldberror": "Hoe daṛeyaḱa jahan bahre reaḱ jacaeaḱ ḍaṭabes vul hoeakana se amaḱ bahre reaḱ ekaunṭ do nahaḱ halot aguire ạidạri bạnuḱa.",
        "passwordreset-emailtitle": "{{SITENAME}} sayeṭre beoharićaḱ purạo thutiko",
        "passwordreset-emailelement": "Beoharićaḱ ńutum: \n$1\n\nMit́ ghạṛi lạgit uku nambar: \n$2",
        "passwordreset-emailsentemail": "Mitṭen disạ ruaṛ e-mail do kulena.",
-       "passwordreset-emailsent-capture": "Mit́ṭen disạ ruaṛaḱ e-mail dokulena, oka do latarre ńeloḱ kana.",
-       "passwordreset-emailerror-capture": "Disạ ruạṛ oco lạgit́te mit́ṭen e-mail tear hoelena, oka do latarre udugoḱkana, menkhan $1 beoharić ṭhen  ṭhen baṅ kul hoe akana.",
        "changeemail": "E-mail ṭhikạna do bodolme",
        "changeemail-header": "Ekaunṭ e-mail ṭhikạna do bodolme",
        "changeemail-no-info": "Noa sakam sojhete laṛcaṛ lạgit́te am do bhitri boloḱ hoyoḱtama.",
        "post-expand-template-inclusion-category": "Sakamko oka borḍre noa tahẽna ona doe paromkeda",
        "post-expand-template-argument-warning": "'''Sontoroḱmẽ:''' Noa sakamre komse kom mitṭen forma joṛao menaḱa ạḍi lạṭute pasnao akana.\nOnate noa ạrgumenṭkodo bạgi giḍi hoena.",
        "post-expand-template-argument-category": "Bagi forma ạrgumenṭ sapdoho sakam",
-       "cantcreateaccounttitle": "Ekaunṭ do baṅ tearlena",
        "viewpagelogs": "Noa sakam reaḱ cạbi udukme",
        "nohistory": "Noa sakam re do jahan sompadon reaḱ jạṛ bạnuḱa.",
        "currentrev": "Mucạt nãwã aroe",
index 6dc082e..2bdc449 100644 (file)
        "yourpasswordagain": "Repite sa password:",
        "createacct-yourpasswordagain": "Cunfirma sa password",
        "createacct-yourpasswordagain-ph": "Inserta sa password torra",
-       "remembermypassword": "Ammenta sa password in custu navigadore (pro unu màssimu de $1 {{PLURAL:$1|die|dies}})",
        "userlogin-remembermypassword": "Mantènnemi cullegadu",
        "userlogin-signwithsecure": "Imprea una cunnessione segura",
        "yourdomainname": "Ispetzìfica su domìniu",
        "content-model-css": "CSS",
        "post-expand-template-inclusion-category": "Pàginas in is cale sa dimensione templates inclùdidos propassat su lìmite cunsentidu",
        "post-expand-template-argument-category": "Pàginas cuntenentes templates cun argumentos fartados",
-       "cantcreateaccounttitle": "Non si podet creare unu contu",
        "viewpagelogs": "Càstia is registros de custa pàgina",
        "nohistory": "Non b'est sa stòria de is acontzos pro custa pàgina.",
        "currentrev": "Revisione currente",
        "linksearch-line": "$1 est ligadu in sa pàgina $2",
        "listusers-submit": "Ammustra",
        "listusers-blocked": "(blocadu)",
-       "activeusers-hidebots": "Cua bots",
-       "activeusers-hidesysops": "Cua amministradores",
        "listgrouprights-group": "Grupu",
        "listgrouprights-rights": "Deretos",
        "listgrouprights-members": "(lista de is cumponentes)",
index 152a08a..a94b562 100644 (file)
        "yourpasswordagain": "Retype passwaird:",
        "createacct-yourpasswordagain": "Confirm passwaird.",
        "createacct-yourpasswordagain-ph": "Enter passwaird again.",
-       "remembermypassword": "Mynd ma login oan this brouser (fer $1 {{PLURAL:$1|day|days}} at the maist)",
        "userlogin-remembermypassword": "Keep me loggit in",
        "userlogin-signwithsecure": "Uise secure connection",
        "cannotloginnow-title": "Canna log in nou",
        "activeusers-intro": "This is ae leet o uisers that had some kynd o acteevitie wiin the last $1 {{PLURAL:$1|day|days}}.",
        "activeusers-count": "$1 {{PLURAL:$1|action|actions}} in the laist {{PLURAL:$3|day|$3 days}}",
        "activeusers-from": "Displey uisers stairtin at:",
-       "activeusers-hidebots": "Skauk bots",
-       "activeusers-hidesysops": "Skauk admeenistraters",
        "activeusers-noresult": "Naw uisers foond.",
        "listgrouprights": "Uiser groop richts",
        "listgrouprights-summary": "The follaein is ae leet o uiser groops defined oan this wiki, wi thair associatit access richts.\nThaur micht be [[{{MediaWiki:Listgrouprights-helppage}}|addeetional information]] aneat indiveedual richts.",
        "htmlform-cloner-create": "Eik mair",
        "htmlform-cloner-delete": "Remuiv",
        "htmlform-cloner-required": "At least the ae value is needit.",
-       "sqlite-has-fts": "$1 wi ful-tex rake support",
-       "sqlite-no-fts": "$1 wioot ful-tex rake support",
        "logentry-delete-delete": "$1 {{GENDER:$2|delytit}} page $3",
        "logentry-delete-restore": "$1 {{GENDER:$2|restored}} page $3",
        "logentry-delete-event": "$1 {{GENDER:$2|chynged}} veesibeelitie o {{PLURAL:$5|ae log event|$5 log events}} oan $3: $4",
index f3d70fb..9d34678 100644 (file)
        "createacct-benefit-heading": "{{SITENAME}} توهان جهڙن سڄڻن ٺاهيو آهي.",
        "createacct-benefit-body1": "{{PLURAL:$1|ترميم|ترميمون}}",
        "createacct-benefit-body2": "{{PLURAL:$1|صفحو|صفحا}}",
-       "createacct-benefit-body3": "حاليه {{PLURAL:$1|ڀاڱيدار}}",
+       "createacct-benefit-body3": "ھاڻوڪا {{PLURAL:$1|ڀاڱيدار}}",
        "badretype": "توهان جو ڄاڻايل ڳجھولفظ درست نہ آهي.",
        "usernameinprogress": "ان يُوزرنانءُ لاءِ کاتو اڳ ۾ ئي تياريءَ هيٺ آهي. مهرباني ڪري انتظار فرمايو.",
        "userexists": "ڄاڻايل يوزرنانءُ اڳ ۾ ئي استعمال هيٺ آهي. مهرباني ڪري ڪو ٻيو يُوزرنانءُ چونڊيو.",
        "passwordreset-emaildisabled": "هن وڪيءَ تي برق‌ٽپال واريون خصوصيتون غير فعال بڻايون ويون آهن.",
        "passwordreset-username": "يُوزرنانءُ:",
        "passwordreset-domain": "ميدان:",
-       "passwordreset-capture": "برق ٽپال ڏسڻ چاهيندا؟",
        "passwordreset-email": "برق ٽپال پتو:",
        "passwordreset-emailtitle": "{{SITENAME}} واري کاتي جا تفصيل",
        "passwordreset-emailelement": "يُوزر نانءُ: \n$1\n\nعارضي ڳجھو لفظ:\n$2",
-       "passwordreset-invalideamil": "ناقابل ڪار برق ٽپال پتو",
+       "passwordreset-invalidemail": "ناقابل ڪار برق ٽپال پتو",
        "changeemail": "برق ٽپال پتو مِٽايو يا بدلايو",
        "changeemail-oldemail": "هاڻوڪو برق ٽپال پتو:",
        "changeemail-newemail": "نئون برق ٽپال پتو:",
        "preview": "پيش نگاھ",
        "showpreview": "پيش نگاھ",
        "showdiff": "تبديليون ڏيکاريو",
-       "anoneditwarning": "<strong>خبردار:</strong> توهان داخل ٿيل نہ آهيو. جيڪڏهن توهان ڪي ترميمون ڪيون تہ هن صفحي جي سوانح ۾ توهان جو آءِ پي پتو درج ڪيو ويندو. جي توهان <strong>[$1 داخل]</strong> ٿيو ٿا < يا strong>[$2 کاتو کوليو] </strong> ٿا، تہ توهان جو ترميمون توهان جي يوزرنانءُ سن منسوب ڪيون وينديون، جنهن جا ٻيا بہ فائدا ٿي سگھن ٿا.",
+       "anoneditwarning": "<strong>خبردار:</strong> توهان داخل ٿيل نہ آهيو. جيڪڏهن توهان ڪي ترميمون ڪيون تہ هن صفحي جي سوانح ۾ توهان جو آءِ پي پتو درج ڪيو ويندو. جي توهان <strong>[$1 داخل]</strong> ٿيو ٿا < يا strong>[$2 کاتو کوليو] </strong> ٿا، تہ توهان جو ترميمون توهان جي يوزرنانءُ سان منسوب ڪيون وينديون، جنهن جا ٻيا بہ فائدا ٿي سگھن ٿا.",
        "anonpreviewwarning": "توهان داخل ٿيل نہ آهيو. جيڪڏهن توهان صفحي ۾ تبديليون سانڍيون تہ اهڙين تبديلين ساڻ توهان جو آءِپي پتو درج ڪيو ويندو.",
        "missingcommenttext": "براءِ مهرباني هيٺ پنهنجا تاثرات درج ڪندا.",
        "summary-preview": "تت تي پيش نگاھ:",
        "templatesusedpreview": "هن پيش نگاھ ۾ استعمال ٿيل {{PLURAL:$1|سانچو|سانچا}}:",
        "templatesusedsection": "هن سيڪشن ۾ استعمال ٿيل {{PLURAL:$1|سانچو|سانچا}}:",
        "template-protected": "(تحفظيل)",
-       "template-semiprotected": "(نيم تحفظيل)",
+       "template-semiprotected": "(نيم-تحفظيل)",
        "hiddencategories": "هيءُ صفحو  {{PLURAL:$1|1 لڪل زمري|$1 لڪل زمرن}}: جو رڪن آهي:",
        "nocreatetext": "{{SITENAME}} نوان صفحا سرجڻ جي روڪَ ڪئي آهي.\nتوهان اڳي ئي موجود صفحن کي سنواري سگھو ٿا، يا [[Special:UserLogin|لاگ اِن ٿي يا نئون کاتو کولي سگھو ٿا]].",
        "nocreate-loggedin": "توهان کي نوان صفحا سرجڻ جي اجازت حاصل ڪانهي.",
        "search-redirect": "($1 کان چوريو)",
        "search-section": "(سيڪشن $1)",
        "search-category": "(ذمرو $1)",
-       "search-suggest": "ڇا توهان جو مطلب $1 آهي؟",
+       "search-suggest": "ڇا توهان جو مطلب ھيو: $1",
        "search-interwiki-caption": "برادر رٿائون",
        "search-interwiki-default": "$1 مان نتيجا",
        "search-interwiki-more": "(وڌيڪ)",
        "right-upload": "فائيل چاڙهيو",
        "right-reupload": "موجوده فائيلن مٿان",
        "right-upload_by_url": "ڪنهن يُوآرايل تان فائيل چاڙهيو",
-       "right-writeapi": "اي پر آءِ لکڻ جو استعمال",
+       "right-writeapi": "ايپيآءِ لکڻ جو استعمال",
        "right-delete": "صفحا ڊاهيو",
        "right-bigdelete": "ڊگھيون سوانح رکندڙ صفحا ڊاهيو",
        "right-browsearchive": "ڊاٺل صفحا ڳوليو",
        "right-siteadmin": "اعدادخانو بنديو ۽ کوليو",
        "right-override-export-depth": "5ئين اونهائيءَ تائين ڳنڍيل صفحن سميت صفحا برآمديو",
        "right-sendemail": "ٻين يوزرس ڏانهن ايميل موڪليو",
-       "right-passwordreset": "ڳجھو لفظ مقرري برق ٽپالون ڏسو",
        "right-managechangetags": "[[Special:Tags|ٽيگس]] سرجيو ۽ ڊاهيو.",
        "grant-group-email": "برق ٽپال اماڻيو",
        "grant-blockusers": "يُوزرس کي بندشيو ۽ اڻبندشيو",
        "prevpage": "پويون صفحو ($1)",
        "allpagesfrom": "ھتان شروع ٿيندڙ صفحا نمايو",
        "allpagesto": "ان تي ختم ٿيندڙ صفحا نُمايو:",
-       "allarticles": "سمورا مضمون",
+       "allarticles": "سڀ صفحا",
        "allinnamespace": "سمورا صفحا ($1 نانءُپولار)",
        "allpagessubmit": "ھلو",
        "allpagesprefix": "صفحا نمايو بمع اڳياڙي:",
        "whatlinkshere": "هتان ڇا ڳنڍيل آهي",
        "whatlinkshere-title": "$1 سان ڳنڍيل صفحا",
        "whatlinkshere-page": "صفحو:",
-       "linkshere": "هيٺيان صفحا '''[[:$1]]''' سان ڳنڍيل آهن:",
+       "linkshere": "هيٺيان صفحا <strong>[[:$1]]</strong> سان ڳنڍيل آهن:",
        "nolinkshere": "'''[[:$1]]''' سان ڪو بہ صفحو ڳنڍيل ناهي.",
        "isredirect": "چورڻو صفحو",
        "istemplate": "شموليت",
        "tooltip-ca-talk": "موادي صفحي تي بحث",
        "tooltip-ca-edit": "هيءُ صفحو سنواريو",
        "tooltip-ca-addsection": "نئون سيڪشن شروع ڪريو",
-       "tooltip-ca-viewsource": "هيءُ صفحو تحفظيل آهي. توهان ان جو ذريعو ڏسي سگھو ٿا.",
+       "tooltip-ca-viewsource": "هيءُ صفحو تحفظيل آهي.\nتوهان ان جو ذريعو ڏسي سگھو ٿا",
        "tooltip-ca-history": "هن صفحي جا اڳوڻا ڀيرا",
        "tooltip-ca-protect": "هيءُ صفحو تحفظيو",
        "tooltip-ca-delete": "هيءُ صفحو ڊاهيو",
        "tooltip-n-portal": "ھن رٿا بابت، توھان ڇا ٿا ڪري سگھو، شيون ڪٿي ڳولھجن",
        "tooltip-n-currentevents": "تازن واقعن تي تفصيلي ڄاڻ لھو",
        "tooltip-n-recentchanges": "ھن وڪيءَ ۾ تازين تبديلين جي فھرست",
-       "tooltip-n-randompage": "ڪو بہ بلاترتيب صفحو اتاريو",
+       "tooltip-n-randompage": "ڪو بلاترتيب صفحو اتاريو",
        "tooltip-n-help": "ڳولي لھڻ جي جاءِ",
        "tooltip-t-whatlinkshere": "ھتان ڳنڍيل سمورن وڪي صفحن جي فھرست",
        "tooltip-t-recentchangeslinked": "ويجھڙائيءَ ۾ صفحن ۾ ٿيل تبديليون هن صفحي سان ڳنڍيل آهن",
index bfd5492..faafcb4 100644 (file)
        "yourname": "Innòmu utenti",
        "yourpassword": "Paràura d'órdhini",
        "yourpasswordagain": "Ripeti la paràura d'órdhini",
-       "remembermypassword": "Ammenta la me' paràura d'órdhini in chisthu nabiggadori (par un màssimu di $1 {{PLURAL:$1|dì|dì}})",
        "yourdomainname": "Ippizzificà lu dumìniu",
        "externaldberror": "S'è verifiggaddu un errori cu lu server di autentificazioni esthernu, oppuru nò si diponi di l'autorizazioni nezzessàri pa aggiornà la propria registhrazioni estherna.",
        "login": "Intra",
        "undo-success": "Chistha mudìfigga pò assé annulladda. Verifiggà lu sighenti cuntrasthu prisintaddu pa s'azzirthà chi lu cuntinuddu curripundi a cantu disizaddu e dunca saivvà li mudìfigghi pa cumprità la procedura di annullamentu.",
        "undo-failure": "Impussìbiri annullà la mudìfigga a càusa d'un cuntrasthu cun mudìfigghi intermédi.",
        "undo-summary": "Annulladda la mudìfigga $1 di [[Special:Contributions/$2|$2]] ([[User talk:$2|Dischussioni]])",
-       "cantcreateaccounttitle": "Impussìbiri registhrà un utenti",
        "cantcreateaccount-text": "Criazioni di registhrazioni da chistu indirizzu IP ('''$1''') è isthadda broccadda da [[User:$3|$3]].\n\nLa rasgioni frunidda da $3 è ''$2''",
        "viewpagelogs": "Visuarizza li rigisthri reratibi a chistha pàgina.",
        "nohistory": "Cronologia di li versioni di chistha pàgina nò riperìbiri.",
index 5d38477..86d1f66 100644 (file)
        "userlogin-yourpassword-ph": "تێپەڕوشەگەت بنۊس",
        "createacct-yourpassword-ph": "تێپەڕوشەێگ بنۊس",
        "yourpasswordagain": "دیسان تێپەڕوشەگە بنۊسەو:",
-       "remembermypassword": "تێپەروشەگەم لەسەر ئەی کامپیوترە پاشدەس بکە (ئەو پەڕی $1 {{PLURAL:$1|ڕووژ}}ە)",
        "login": "بچووە ناو",
        "nav-login-createaccount": "بچووە ناو / ھەژمار درس بکە",
        "userlogin": "بچووە ناو / ھەژمار درس بکە",
index 79eccff..0b2b10c 100644 (file)
        "yourname": "Geavaheaddjidovddaldat",
        "yourpassword": "Suollemassátni:",
        "yourpasswordagain": "Čále suollemassáni ođđasit:",
-       "remembermypassword": "Muite mu (for a maximum of $1 {{PLURAL:$1|day|days}})",
        "yourdomainname": "Fierbmenamma",
        "login": "Čálligoađe sisa",
        "nav-login-createaccount": "Daga ođđa geavaheaddjidovddaldaga dahje čálligoađe sisa",
        "template-protected": "(suodjáluvvon)",
        "template-semiprotected": "(suodjáluvvon anonyma ja ođđa geavaheddjiin)",
        "edittools": "<!-- Teaksta mii lea dás, čájehuvvo rievdadanskovi vuolábealde. -->",
-       "cantcreateaccounttitle": "Dovddaldaga ráhkadeapmi ii lihkosmuvvan",
        "viewpagelogs": "Čájet dán siiddu loggaid",
        "nohistory": "Dán siiddus ii leat rievdadanhistorjá.",
        "currentrev": "Dálá veršuvdna",
        "activeusers-intro": "Dát lea listu geavaheddjiin, mat leat bargan juoidá maŋimus $1 {{PLURAL:$1|beaivvi|beaivvi}} siste.",
        "activeusers-count": "$1 {{PLURAL:$1|rievdadus|rievdadusa}} maŋimus $3 beaivvi siste",
        "activeusers-from": "Čájet geavaheddjiid dán rájes:",
-       "activeusers-hidebots": "Čiega bohtaid",
-       "activeusers-hidesysops": "Čiega administráhtoriid",
        "listgrouprights-members": "(listu miellahtuin)",
        "mailnologin": "Sáddejeaddji čujuhus váilo",
        "mailnologintext": "Don fertet leat [[Special:UserLogin|čálligoahtán sisa]] ja du [[Special:Preferences|ásahusain]] ferte leat gelbbolaš ja <strong>sihkarastojuvvon</strong> e-poastačujuhus, ovdalgo sáhtat sáddet e-poasta eará geavaheddjiide.",
index f031e4e..62ecd78 100644 (file)
        "yourname": "Caitom ID:",
        "yourpassword": "Quimx canj:",
        "yourpasswordagain": "Vanquimx canj:",
-       "remembermypassword": "Qualtiinii he quimx canj jan ordinator iti (for a maximum of $1 {{PLURAL:$1|day|days}})",
        "yourdomainname": "Hedomino:",
        "externaldberror": "Pos-römjde authenticacionde database extername jöx me necoccebj permiccionde updatan mecaitom externom.",
        "login": "Caápo",
        "undo-success": "Ticpatlöx zo pos-coccebj iixponintöx. Controlar comparicion zo !-cmaade verifiatom jan coccebj yazuáxiim ö xuniim quiíx zo !-cmaade fini iixponintöx ticpatlöx zo.",
        "undo-failure": "Ticpatlöx zo necoccebj ticpatlöxde ticpatlöxám iti-am conflictom.",
        "undo-summary": "Iixponintöx revicion $1 'de [[Special:Contributions/$2|$2]] ([[User talk:$2|Czaxö]])",
-       "cantcreateaccounttitle": "Nexuatláminop",
        "cantcreateaccount-text": "Creacionde caitomde jan adressade IP ('''$1''') coccebj blockom [[User:$3|$3]] mii.\n\nRae' zo xuniim $3 mii coccebj ''$2''",
        "viewpagelogs": "Cohuatlöx logámde jan páhina",
        "nohistory": "Jan páhina necoccebj históriade ticpatlöx.",
index caddb8a..c3817d5 100644 (file)
        "yourpasswordagain": "Šennikufal hantum taaga:",
        "createacct-yourpasswordagain": "Šennikufal tabatandi",
        "createacct-yourpasswordagain-ph": "Šennikufal dam taaga",
-       "remembermypassword": "Hong'ay huruyan tammaasa ceecikaa woo ga (a ma ši bisa {PLURAL:$1|jirbi|jirbi}}) $1",
        "userlogin-remembermypassword": "Ay goywaatoo ma gaabandi ka feera",
        "userlogin-signwithsecure": "Ciya nda saajaw",
        "yourdomainname": "Ni zunbu dogoo:",
        "passwordreset-emailtext-user": "Goykaw $1 {{SITENAME}} wiri ka war sennikufaloo yeeti {{SITENAME}} se\n($4). Goykaa woo {{PLURAL:$3|kontoo ga|kontey ga}} marga nda nda bataga aderesoo woo:\n\n$2\n\n {{PLURAL:$3|Šiiyan šennikufaloo woo|Šiiyan šennikufaley wey}} ga buu {{PLURAL:$5|jirbi foo|jirbi $5}} ra.\nWar ga hima ka huru  nda šennikufal taaga suuba sohõ. Nda boro waani ka ceeci\n ka woo tee wala war ga honga wara šennikufal žeenaa nda war ši boona koyne\n k'a barma, war ga hin ka šaawaroo woo muray nda gaabandi ka goy nda war\n šennikufal žeenaa.",
        "passwordreset-emailelement": "Goykaw maa: \n$1\n\nŠiiyan šennikufal: \n$2",
        "passwordreset-emailsentemail": "Šennikufal yeetiyan bataga n' ka sanbandi war se.",
-       "passwordreset-emailsent-capture": "Šennikulal yeetiyan bataga n' ka sanbandi war se, kaŋ ga cebandi ne ganda.",
-       "passwordreset-emailerror-capture": "Šennikufal yeetiyan bataga n' ka teendi, kaŋ ga cebandi ne ganda, amm'a mana hin ka sanbandi {{GENDER:$2|goykaw}} do: $1",
        "changeemail": "Bataga aderesu barmay",
        "changeemail-header": "Takaddaa woo toonandi ka war bataga aderesoo barmay. War ka hima ka war šennikufaloo dam ka barmayyanoo tabatandi.",
        "changeemail-no-info": "War ga hima ka huru ka hin duu moɲoo woo.",
        "undo-nochange": "A ga hima kaŋ barmaa n' ka taafeeri ka ben.",
        "undo-summary": "[[Special:Contributions/$2|$2]] ([[User talk:$2|deede]]) na $1 fillaa taafeeri",
        "undo-summary-username-hidden": "Goykaw tugante na $1 fillaa taafeeri",
-       "cantcreateaccounttitle": "Ši hin ha kontu tee",
        "cantcreateaccount-text": "[User:$3|$3]] ganji kontu ma tee IP aderesu (<strong>$1</strong>) ga.\n\nDaliloo kaŋ $3 n'a noo ti <em>$2</em>",
        "cantcreateaccount-range-text": "[[User:$3|$3]] ganji kaŋ kontu ma tee IP aderesey kaŋyaŋ goo <strong>$1</strong> laamaa ra ga, sanda war IP aderesoo (<strong>$4</strong>).\n\nDaliloo kaŋ $3 n'a noo ti <em>$2</em>",
        "viewpagelogs": "Hantum taarikey guna moɲoo woo se",
        "activeusers-intro": "Wey ti goykey kaŋ cindi goymee tana ra {{PLURAL:$1|jirbi}} $1 kaŋ kokor ra.",
        "activeusers-count": "{{PLURAL:$1|teera}} $1 {{PLURAL:$3|jirbi|$3}} kaŋ kokor ra.",
        "activeusers-from": "Goykey cebe kaŋ ga šintin ne:",
-       "activeusers-hidebots": "Maršin berekey tugu",
-       "activeusers-hidesysops": "Juwalkey tugu",
        "activeusers-noresult": "Goykaw kul mana duwandi.",
        "listgrouprights": "Goykaw kuray alhakey",
        "listgrouprights-summary": "The following is a list of user groups defined on this wiki, with their associated access rights.\nA ga hin ka tee [[{{MediaWiki:Listgrouprights-helppage}}|alhabar tontoni]] ga bara boro alhakey ga.",
        "htmlform-cloner-create": "Tonton koyne",
        "htmlform-cloner-delete": "Kaa",
        "htmlform-cloner-required": "Nd'ajaase hinna foo ga waažibandi.",
-       "sqlite-has-fts": "$1 nda hantum-timmante ceeci gaakašinay",
-       "sqlite-no-fts": "$1 bila nda hantum-timmante  ceeci gaakašinay",
        "logentry-delete-delete": "$1  {{GENDER:$2|na}} moo $3 tuusu",
        "logentry-delete-restore": "$1 {{GENDER:$2|na}} moo yeeti $3",
        "logentry-delete-event": "$1 {{GENDER:$2|na}} diira sahã barmay {{PLURAL:$5|taariki teera $5}} se $3 ga: $4",
index 5bd2832..8b905f2 100644 (file)
@@ -23,6 +23,7 @@
        "tog-watchdefault": "Pridietė poslapius, katrūs keito, keravuojamu sārošap",
        "tog-watchmoves": "Pridietė poslapius, katrūs parvadėno, keravuojamu sārošap",
        "tog-watchdeletion": "Pridietė poslapius, katrūs ėštrėno, keravuojamu sārošap",
+       "tog-watchuploads": "I keravuojamu sāraša pridietė mona ožkrautus abruozdielius",
        "tog-watchrollback": "Pridietė poslapius, katrūs keitėmus grōžėno atgal, keravuojamu sārošap",
        "tog-minordefault": "Kāp prėgol pažīmietė pakeitėmus mažās",
        "tog-previewontop": "Ruodītė parvaiza vėrš taisīmu lauka",
@@ -40,6 +41,7 @@
        "tog-watchlisthidebots": "Kavuotė robotu pakeitėmos keravuojamu sārošė",
        "tog-watchlisthideminor": "Kavuotė mažus pakeitėmus keravuojamu sārošė",
        "tog-watchlisthideliu": "Kavuotė prėsėjongosiu nauduotuoju keitėmus keravuojamu sārošė",
+       "tog-watchlistreloadautomatically": "Parkrautė keravuojamu poslapiu sāraša kap tik kuoštovis būn pakeists (rēk JavaScript)",
        "tog-watchlisthideanons": "Kavuotė anonimėniu nauduotuoju keitėmus keravuojamu sārošė",
        "tog-watchlisthidepatrolled": "Kavuotė sodabuotus pakeitėmus keravuojamu sārošė",
        "tog-watchlisthidecategorization": "Kavuotė poslapiu kateguorėzacėjė",
        "actions": "Vēksmā",
        "namespaces": "Vardū srėtis",
        "variants": "Atmainā",
-       "navigation-heading": "Naršīma pasėrinkėmā",
+       "navigation-heading": "Naršīma pasirinkėmā",
        "errorpagetitle": "Klaida",
        "returnto": "Grīžtė i $1.",
        "tagline": "Straipsnis ėš {{SITENAME}}.",
        "edit-local": "Taisītė vėitėni aprašīma",
        "create": "Padėrbtė",
        "create-local": "Prėkergtė vėitėni aprašīma",
-       "editthispage": "Taisītė ton poslapė",
+       "editthispage": "Taisītė ton poslapi",
        "create-this-page": "Dėrbtė ton poslapi",
        "delete": "Trintė",
-       "deletethispage": "Trintė ton poslapė",
+       "deletethispage": "Trintė ton poslapi",
        "undeletethispage": "Ton poslapi padėrbtė apent",
        "undelete_short": "Dėrbtė apent $1 {{PLURAL:$1:pakeitėma|pakeitėmus|pakeitėmu}}",
        "viewdeleted_short": "Veizietė $1 {{PLURAL:$1|ėštrinta keitėma|ėštrintus keitėmus|ėštrintū keitėmu}}",
        "talk": "Aptarėms",
        "views": "Parveizė̄jėmā",
        "toolbox": "Rakondā",
+       "tool-link-userrights": "Mainītė {{GENDER:$1|nauduotuoja|nauduotuojės}} gropės",
+       "tool-link-emailuser": "Rašītė gromata {{GENDER:$1|tamou nauduotuojou}}",
        "userpage": "Ruodītė nauduotuojė poslapi",
        "projectpage": "Ruodītė pruojekta poslapi",
        "imagepage": "Veizietė abruozdielė poslapi",
        "jumptonavigation": "naršīms",
        "jumptosearch": "paėiška",
        "view-pool-error": "Atsėprašuom, bat serverē daba īr parkrautė.\nNuognē pardaug nauduotoju skait ton poslapi.\nPrašuom palaukat ė mieginkat i ton poslapi patekt apent.\n\n$1",
+       "generic-pool-error": "Atsėprašuom, ale serverē daba īr parkrautė.\nNuognē pardaug nauduotoju skaita ton poslapi.\nPrašuom palaukat ė mieginkat i ton poslapi patekt apent.\n\n$1",
        "pool-errorunknown": "Nežėnuoma klaida",
        "poolcounter-usage-error": "Naudojėma soklīdėms: $1",
        "aboutsite": "Aple {{SITENAME}}",
        "createacct-yourpasswordagain-ph": "Apent ožrašīkat slaptažuodi",
        "userlogin-remembermypassword": "Ka liktō prisėjongis",
        "userlogin-signwithsecure": "Apsauguots rīšīs",
+       "cannotlogin-title": "Nēn prisijongtė",
+       "cannotlogin-text": "Nie galam prisijongtė.",
        "cannotloginnow-title": "Nēn prėsijongtė",
        "yourdomainname": "Tamstas domens:",
        "password-change-forbidden": "Negalat tuo wiki keistė slaptažuodiu.",
        "nav-login-createaccount": "Prėsėjongtė / padėrbtė paskīra",
        "userlogin": "Prėsėjongtė / padėrbtė paskīra",
        "userloginnocreate": "Prėsėjongtė",
-       "logout": "Atsėjongtė",
-       "userlogout": "Atsėjongtė",
+       "logout": "Atsijongtė",
+       "userlogout": "Atsijongtė",
        "notloggedin": "Neprėsėjongis",
        "userlogin-noaccount": "Netorat paskīruos?",
        "userlogin-joinproject": "Jonkėtėis prī {{SITENAME}}",
        "userlogin-resetpassword-link": "Ožmiršat sava slaptažuodi?",
        "userlogin-helplink2": "Prėsėjongėma pagelba",
        "userlogin-loggedin": "Tamsta jau īr prėsijongė̄s kāp {{GENDER:$1|$1}}.\nJēb nuorat prisėjongtė kāp kėts žmuogos, nauduokat skvarma apatiuo.",
+       "userlogin-reauth": "Tamsta torat prisijongtė apent, ka būtom aiško, ka esat {{GENDER:$1|$1}}.",
        "userlogin-createanother": "Padėrbtė kėta paskīra",
        "createacct-emailrequired": "El. pašta adresos",
        "createacct-emailoptional": "El. paštos (nie būtėns)",
        "createacct-reason-ph": "Kūdie dėrbat kėta nauduotojė poslapi",
        "createacct-submit": "Padėrbkat savėi paskīra",
        "createacct-another-submit": "Padėrbtė paskīra",
+       "createacct-continue-submit": "Tuoliaus dėrbtė nauduotuoja paskīra",
+       "createacct-another-continue-submit": "Tuoliaus dėrbtė nauduotuoja paskīra",
        "createacct-benefit-heading": "{{SITENAME}} īr sokorta prietėliu, tuokiu, kāp Tamsta.",
        "createacct-benefit-body1": "{{PLURAL:$1|pataisīms|pataisīmā|pataisīmu}}",
        "createacct-benefit-body2": "{{PLURAL:$1|poslapis|poslapē|poslapiu}}",
        "createaccounterror": "Nė̄šiejė padėrbtė paskīruos: $1",
        "nocookiesnew": "Nauduotuojė paskīra bova sokurta, bat Tamsta nēsot prėsėjongis. {{SITENAME}} nauduo pakavukus (''cookies''), ka prėkergtom nauduotuojus. Tamsta esot ėšjongis anūs. Prašuom ijongtė pakavukus, tumet prisėjonkat so sava naujo nauduotuojė vardo ė slaptažuodio.",
        "nocookieslogin": "{{SITENAME}} nauduo pakavukus (''cookies''), ka prėkergtom nauduotuojus. Tamsta esat ėšjongis anūs. Prašuom ijongtė pakavukus ė pamiegītė apent.",
+       "noname": "Naožrašėt tinkama nauduotuoja varda!",
        "loginsuccesstitle": "Prisijongiet gerā",
        "loginsuccess": "'''Dabā Tamsta esat prėsėjongis prī {{SITENAME}} kāp „$1“.'''",
        "nosuchuser": "Nier anėjuokė nauduotuojė, katrou vards būtom „$1“ (dėdliuosės rādės svarbo ī).\nPatikrinkėt rašība aba [[Special:CreateAccount|padėrbkėt naujė paskīra]].",
        "eauthentsent": "Patvėrtėnėma gruomata bova nusiōsta i paskėrta el. pašta adresa.\nPrīš ėšsiontiant kėta gruomata i Tamstas diežote, Tamsta torėt vīkdītė nuruodīmus gruomatuo, kū patvėrtėntomiet, kū diežotė tėkrā īr Tamstas.",
        "throttled-mailpassword": "Slaptažuodžė priminims jau bova ėšsiōsts, par paskotėnės {{PLURAL:$1|adīna|$1 adīnas}}. Nuorint apsėsauguotė nū pėktnaudēvėma, slaptažuodė priminėms gal būt ėšsiōsts tėk kas {{PLURAL:$1|adīna|$1 adīnas}}.",
        "mailerror": "Bieda siontiont gromata: $1",
-       "acct_creation_throttle_hit": "Ton pruojekta lankītuojē, katrėi nauduo Tamstas IP adresa, padėrba {{PLURAL:$1|$1 paskīra|$1 paskīras|$1 paskīrū}} par paskotėnta dėina, a tas īr dėdliausis leidams skaitlios par ta čiesa.\nTudie šėton čieso lankītuojē, katrėi nauduo tou IP adresa, daugiau paskīrū dėrbtė nagal.",
+       "acct_creation_throttle_hit": "Ton pruojekta lankītuojē, katrėi nauduo Tamstas IP adresa, padėrba {{PLURAL:$1|$1 paskīra|$1 paskīras|$1 paskīrū}} par paskotėnta $2, a tas īr dėdliausis leidams skaitlios par ta čiesa.\nTudie šėton čieso lankītuojē, katrėi nauduo tou IP adresa, daugiau paskīrū dėrbtė nagal.",
        "emailauthenticated": "Tamstas el. pašta adresos bova ožtvirtėnts $2 d. $3.",
        "emailnotauthenticated": "Tamstas el. pašta adresos da nier patvėrtėnts. Anėjuokės gruomatas\nnebus siontamas ni vėinam žemiau ėšvardėntam puoslaugiō.",
        "noemailprefs": "Nuruodėkīt el. pašta adresa, kū vėiktu šėtos funkcėjės.",
        "pt-login-button": "Prėsėjongtė",
        "pt-login-continue-button": "Tuoliau prisijongėnietė",
        "pt-createaccount": "Pasėdėrbtė paskīra",
-       "pt-userlogout": "Atsėjongtė",
+       "pt-userlogout": "Atsijongtė",
        "changepassword": "Pakeistė slaptažuodė",
        "resetpass_announce": "Ka ožbengtomiet jongtėis, torėt sokortė naujė slaptažuodi.",
        "resetpass_header": "Keistė paskīruos slaptažuodi",
        "resetpass_submit": "Nostatītė slaptažuodi ė prėsėjongtė",
        "changepassword-success": "Tamstas slaptažuodis pamainīts gerā!",
        "changepassword-throttled": "Baisē daug čiesu mieginot prisėjongtė.\nDaba palaukėt $1 prīš mieginant vie.",
+       "resetpass-no-info": "Ka ētomiet tėisē ont tou poslapė, Tamstā rēk prisijongtė.",
        "resetpass-submit-loggedin": "Keistė slaptažuodi",
        "resetpass-submit-cancel": "Pabengtė",
+       "resetpass-wrong-oldpass": "Bluogs laikėns aba esams slaptažuodis.\nTamsta, rasietās, anou pamainėt aba ožprašiet naujė laikėna slaptažuodi.",
+       "resetpass-recycled": "Pamainīkat sava slaptažuodi i kėtuoki, nego daba ī.",
+       "resetpass-temp-emailed": "Tamsta prisijongėt so laikėno kuodo, ėš al. gruomatas.\nKa ožbengtomėt prisijongėma, Tamstā rēk ožrašītė nauja slaptažuodi.",
        "resetpass-temp-password": "Laikėns slaptažuodis:",
        "resetpass-expired": "Tamstas slaptažuodis bengė vēktė. Padirbkėt nauja slaptažuodi, ka prisijongtomiet.",
        "passwordreset": "Apent padėrbtė slaptažuodi",
        "passwordreset-username": "Nauduotuojė vards:",
        "passwordreset-domain": "Domens:",
        "passwordreset-email": "El. pašta adresos:",
+       "passwordreset-emailtitle": "{{SITENAME}} paskīruos aprašīms",
        "passwordreset-emailtext-ip": "Kažėkas (mosietās Tamsta, ėš IP adresa $1) ožprašė pamainītė slaptažuodi tinklapie {{SITENAME}} ($4). Tou nauduotuojė {{PLURAL:$3|poslapis|poslapio|poslapē|poslapiu}}\nsorištė so tou al. pašta adreso ī:\n\n$2\n\n{{PLURAL:$3|Tas čiesėškos slaptažuodis|čiesėški slaptažuodē}} bengs vēktė pu {{PLURAL:$5|dėinuos|$5 dėinū}}.\nTamsta prisijonkėt ė pamainīkėt sava slaptažuodi. Jēb kas tā kėts padirba tou prašīma, aba jēb atminiet sava sena slaptažuodi, ta galėt nakrēptė atėdies i tou gromata ė jongtėis so sava seno slaptažuodio.",
+       "passwordreset-emailtext-user": "Nauduotuos $1 ėš {{SITENAME}} ožprašė, ka būtom atgrōžints Tamstas {{SITENAME}} slaptažuodis ($4). Ton nauduotuoja {{PLURAL:$3|paskīra|paskīras}} prigol prī ton al. pašta adresa:\n\n$2\n\n{{PLURAL:$3|Tas laikėns slaptažuodis|Tėi laikėni slaptažuodē}} bengs vēktė ož {{PLURAL:$5|vėinuos dėinuos|$5 dėinū}}.\n\nTamsta galat prisijongtė ė pasirinktė nauja slaptažuodi. Jēb kon tās kėts ožprašė šėton, aba jēb atmėniet sava slaptažuodi ė nabnuorat anou mainītė, ta galat nakrēptė diemesė i šėton gruomata ė pu senuobie nauduotė sava slaptažuodi.",
        "passwordreset-emailelement": "Nauduotuos:\n$1\n\nČiesėšks slaptažuodis:\n$2",
+       "passwordreset-invalidemail": "Bluogs alektruonėnė pašta adresos",
        "changeemail": "Keistė aba trintė el. pašta adresa",
+       "changeemail-no-info": "Ka ētomiet tėisē ont tou poslapė, Tamstā rēk prisijongtė.",
        "changeemail-oldemail": "Vielībs el. pašta adresosː",
        "changeemail-newemail": "Naus el. pašta adresosː",
        "changeemail-none": "(nie)",
        "changeemail-password": "Tamstas {{SITENAME}} slaptažuodis:",
        "changeemail-submit": "Keistė el. pašta",
        "changeemail-throttled": "Tamsta nuognē daug sīkiu miegėnat prėsėjongtė.\nPalaukat $1 prīš miegėnont apent.",
+       "changeemail-nochange": "Irašīkat kėtuoki nauja al. pašta adresa.",
        "bold_sample": "Pastuorints raštos",
        "bold_tip": "Pastuorints raštos",
        "italic_sample": "Pasviris raštos",
        "summary": "Keitėma paāškėnėms:",
        "subject": "Tema/ontraštė:",
        "minoredit": "Mažos pakeitėms",
-       "watchthis": "Keravuotė ton poslapė",
+       "watchthis": "Keravuotė ton poslapi",
        "savearticle": "Ėšsauguotė poslapi",
+       "savechanges": "Ėšsauguotė pakeitėmus",
        "publishpage": "Padėrbtė ton poslapi",
        "publishchanges": "Ožrašītė poslapė pamainīmus",
        "preview": "Parveiza",
        "missingsummary": "'''Priminėms:''' Tamsta nenuruodiet pakeitėma kuomentara. Jēgo viel paspausėt ''Ėšsauguotė'', Tamstas pakeitėms bus ėšsauguots ba anuo.",
        "selfredirect": "<strong>Atėdės:</strong> Tamsta dėrbat poslapė nosokėma savėsp.\nParašīkat tėkslē, kor ons poslapis tor soktė.\nJēgo apent mīgsat \"{{int:savearticle}}\", ta ons poslapis vės vėin bos padėrbts.",
        "missingcommenttext": "Duokat pāiškėnėma apatiuo.",
+       "missingcommentheader": "'''Primėnėms:''' Tamsta nadaviet pakeitėma paaiškėnėma. Jēgo apent paspausat \"{{int:savearticle}}\", Tamstas pakeitėms būs ėšsauguots ba anuo.",
        "summary-preview": "Pāiškėnėma parvaiza:",
        "subject-preview": "Skėrsnelė/ontraštės parvaiza:",
+       "previewerrortext": "Miegėnant parveizietė pakeitėmus nūtėka klaida.",
        "blockedtitle": "Nauduotuos īr ožgints",
        "blockedtext": "'''Tamstas nauduotuojė vards aba IP adresos ožgints īr.'''\n\nOžgīnė nauduotuos $1.\nDingstės ''$2''.\n\n* Ožgīnėms prasėdė̄jė: $8\n* Ožgīnėms pasėbengs: $6\n* Kas tor būtė ožgints: $7\n\nTamsta galat parašītė $1 aba kėtėim\n[[{{MediaWiki:Grouppage-sysop}}|admėnėstratuorėm]], jēgo mīslėjat, ka Tamstā ožgīnė ba grieka.\nTamsta negalat „rašītė gromata ton nauduotuojō“, jēgo nasat davis tėkra sava el. pašta adresa sava [[Special:Preferences|paskīruos nustatīmūs]] ė nasat ožgints nu anuos nauduojėma.\nTamstas dabartėnis IP adresos īr $3, vuo ožgīnėma ID īr #$5. Prašuom nuruodītė ton, kumet prašīsėt atgėnoms.",
        "autoblockedtext": "Tamstas IP adresos bova liuosā ožgints, tudie, ka ana nauduojė kėts nauduotuos, katra ožgīnė $1.\nDouta dingstės īr tuokė:\n\n:''$2''\n\n* Ožgīnėms prasėdė̄jė: $8\n* Ožgīnėms pasėbengs: $6\n* Kas tor būtė ožgints: $7\n\nTamsta galėt sosėsėiktė so $1 aba kėtu [[{{MediaWiki:Grouppage-sysop}}|adminėstratuoriom]], kū aprokoutomėt biedas diel bluokavėma.\n\nTamsta galat parašītė $1 aba kėtėim\n[[{{MediaWiki:Grouppage-sysop}}|admėnėstratuorėm]], jēgo mīslėjat, ka Tamstā ožgīnė ba grieka.\nTamsta negalat „rašītė gromata ton nauduotuojō“, jēgo nasat davis tėkra sava el. pašta adresa sava [[Special:Preferences|paskīruos nustatīmūs]] ė nasat ožgints nu anuos nauduojėma.\nTamstas dabartėnis IP adresos īr $3, vuo ožgīnėma ID īr #$5. Prašuom nuruodītė ton, kumet prašīsėt atgėnoms.",
        "blockednoreason": "dingstėis nie douta",
        "whitelistedittext": "Tamstā rēk $1, ka dėrbtomiet poslapius.",
        "nosuchsectiontitle": "Nier tuokė skėrsnė",
+       "nosuchsectiontext": "Tamsta miegėnuot keistė skėrsni, katruo daba jau nabie.\nRasietās, kas tā par ton čiesa anou ėštrīnė aba parvadėna.",
        "loginreqtitle": "Rēk prėsėjongtė",
        "loginreqlink": "prėsėjongtė",
        "loginreqpagetext": "Rēk $1, paveiziejėmō kėtū poslapiu.",
        "postedit-confirmation-saved": "Tamstas padėrbts pakeitėms ėšsauguots īr.",
        "edit-already-exists": "Nie galam padėrbtė poslapė. Ons jau īr.",
        "defaultmessagetext": "Tekstos kāp prėklaus",
+       "content-model-wikitext": "viki tekstos",
+       "content-model-text": "paprasts tekstos",
+       "content-model-javascript": "JavaScript",
+       "content-json-empty-object": "Dīks dākts",
        "post-expand-template-inclusion-warning": "Perspiejėms: Šabluonu īterpėma dėdoms īr par dėdelis.\nKāp katrėi šabluonā nebus ītrauktė.",
        "post-expand-template-inclusion-category": "Poslapē, kur šabluonu īterpėma dėdoms viršėjams",
        "post-expand-template-argument-warning": "Perspiejėms: Tas poslapis tor nuors vėina šabluona argomenta, katros tor per dėdli ėšplietėma dėdoma.\nTė argomentā bova praleistė.",
        "history-feed-title": "Versėju istuorėjė",
        "history-feed-item-nocomment": "$1 $2",
        "history-feed-empty": "Prašuoms poslapis nēgzėstuo.\nAns galiejė būtė ėštrėnts ėš pruojekta, aba parvardėnts.\nPamiegīkėt [[Special:Search|ėiškoutė pruojektė]] sosėjosiu naujū poslapiu.",
+       "rev-deleted-comment": "(keitėma aprašīms ėštrints)",
+       "rev-deleted-user": "(nauduotuoja vards ėštrints)",
        "rev-delundel": "ruodītė/kavuotė",
        "rev-showdeleted": "ruodītė",
        "revisiondelete": "Trintė/atkortė versėjės",
+       "revdelete-show-file-confirm": "A ėš tėkrā nuorat parveizietė ėštrinta abruozdielė „<nowiki>$1</nowiki>“ $2 $3 atmaina?",
        "revdelete-show-file-submit": "Tēp",
+       "revdelete-selected-text": "[[:$2]] {{PLURAL:$1|pasirinkts atmains|pasirinkti atmainā}}:",
        "logdelete-selected": "{{PLURAL:$2|Pasėrinkts|Pasėrinktė|Pasėrinktė}} $1 istuorėjės {{PLURAL:$2|atėtėkims|atsėtėkimā|atsėtėkimā}}:",
+       "revdelete-legend": "Nūstatītė veizėmoma aprėbuojėmus",
+       "revdelete-hide-text": "Atmaina tekstos",
+       "revdelete-hide-image": "Kavuotė abruozdielė torėni",
+       "revdelete-hide-name": "Kavuotė tiksla ė doumenis",
        "revdelete-hide-comment": "Keitėma pāiškėnėms",
        "revdelete-hide-user": "Nauduotojė vardos/IP adresos",
+       "revdelete-radio-same": "(namainītė)",
+       "revdelete-radio-set": "Pakavuots",
+       "revdelete-radio-unset": "Veizėms",
        "revdelete-unsuppress": "Šalėntė apribuojėmos atkortuos versėjės",
+       "revdelete-log": "Dingstės:",
        "revdel-restore": "Keistė veizėmuma",
        "pagehist": "Poslapė istuorėjė",
        "deletedhist": "Ėštrinta istuorėjė",
        "mergehistory-from": "Kėlėma poslapisː",
        "mergehistory-into": "Tiksla poslapisː",
        "mergehistory-done": "$3 $1 versėju siekmėngā sojongta so [[:$2]].",
+       "mergehistory-autocomment": "[[:$1]] parnešts ont [[:$2]]",
+       "mergehistory-comment": "[[:$1]] parnešts ont [[:$2]]: $3",
+       "mergehistory-reason": "Dingstės:",
        "revertmerge": "Atskėrtė",
        "history-title": "Poslapė „$1“ istuorėjė",
        "difference-title": "$1 – skėrtoms terp pakeitėmu.",
        "searchprofile-advanced-tooltip": "Ėiškoutė skėrtingūs vardū sėtīs",
        "search-result-size": "$1 ({{PLURAL:$2|1 žuodis|$2 žuodē|$2 žuodiu}})",
        "search-result-category-size": "{{PLURAL:$1|1 narīs|$1 nariū}} ({{PLURAL:$2|1 subkateguorėjuo|$2 subkateguorėju}}, {{PLURAL:$3|1 fails|$3 failu}})",
-       "search-redirect": "(nosokėms $1)",
+       "search-redirect": "(nūsokėms ėš $1)",
        "search-section": "(skėrsnis $1)",
        "search-category": "(kateguorėjė $1)",
        "search-file-match": "(atėtėnk abruozdielė torėni)",
        "prefs-rc": "Vielībė̅jė pakeitėmā",
        "prefs-watchlist": "Keravuojamu sārašos",
        "prefs-editwatchlist": "Keistė keravuojamu sāroša",
+       "prefs-editwatchlist-label": "Mainītė keravuojamu poslapiu īrašėmus:",
        "prefs-editwatchlist-clear": "Ėštrintė keravuojamu sāroša",
        "prefs-watchlist-days": "Kėik dėinū ruodītė keravuojamu sārošė:",
        "prefs-watchlist-days-max": "(daugiausē $1 {{PLURAL:$1|dėina|dėinas|dėinū}})",
        "prefs-watchlist-edits-max": "Dėdliausis skaitlios: 1000",
        "prefs-misc": "Ivairė nustatīmā",
        "prefs-resetpass": "Keistė slaptažuodi",
-       "prefs-changeemail": "Keistė el. pašta adresa",
+       "prefs-changeemail": "Mainītė aba ėšimtė al. pašta adresa",
        "prefs-setemail": "El. pašta adresa parkeitėms",
        "prefs-email": "El. pašta nustatīmā",
        "prefs-rendering": "Ėšruoda",
        "columns": "Štolpalē:",
        "searchresultshead": "Paėiškuos nustatīmā",
        "stub-threshold": "Minimums <a href=\"#\" class=\"stub\">nabėngta poslapė</a> fuormatavėmō:",
+       "stub-threshold-sample-link": "pavīzdīs",
        "stub-threshold-disabled": "Ėšjongta īr",
        "recentchangesdays": "Ruodomas dėinas vielībūju pakeitėmu sārošė:",
        "recentchangesdays-max": "(daugiausē $1 {{PLURAL:$1|dėina|dėinū|dėinas}})",
        "prefs-files": "Abruozdielē",
        "prefs-custom-css": "Asabėšks CSS",
        "prefs-custom-js": "Asabėšks JavaScript",
+       "prefs-common-css-js": "Bendros CSS/JavaScript vėsuom aplinkuom:",
+       "prefs-reset-intro": "Čiuonās galat grōžintė vėsus sava nūstatīmus ont pradėniu (kap būn tiktās prisijongus).\nTas dalīks nab'atšaukiams.",
        "prefs-emailconfirm-label": "Tėkrā tuokis el. paštos?",
        "youremail": "El. paštos:",
        "username": "{{GENDER:$1|Nauduotuojė vards}}:",
        "yourlanguage": "Aplėnkuos kalba:",
        "yourvariant": "Torėnė kalba:",
        "yournick": "Pasėrinkts slapīvardis:",
+       "prefs-help-signature": "Kap rašuot kon tās i aptarėmu poslapius, pasirašīkat tap: \"<nowiki>~~~~</nowiki>\". Tas dākts atvirs i Tamstas paraša ė parašīma čiesa znuoka.",
        "badsig": "Neteisings parašas; patėkrinkėt HTML žīmės.",
        "badsiglength": "Tamstas parašos īr par ėlgs.\nAna gal sodarītė ne daugiau kāp $1 {{PLURAL:$1|sėmbuolis|sėmbuolē|sėmbuoliu}}.",
        "yourgender": "Lītės:",
-       "gender-unknown": "Nier nuruodīta",
+       "gender-unknown": "Nier nūruodīta",
        "gender-male": "Vīrs",
        "gender-female": "Muoterėška",
+       "prefs-help-gender": "Gėmėnies pasirinkėms nie būtėns.\nJēb ana nūruodīsat, svetainės aplinka kreipsis i Tamsta palē Tamstas gėmėnė. \nTas būs vėsiem žėnuoma.",
        "email": "El. paštos:",
-       "prefs-help-realname": "Tėkrs vards nier privaluoms, vuo jēgo Tamsta ana ivesėt, ons bus nauduojams Tamstas darba pažīmiejėmō.",
+       "prefs-help-realname": "Tėkros vards nier privaluoms, ale jēgo Tamsta ana ivesėt, ons bus nauduojams Tamstas darba pažīmiejėmou.",
        "prefs-help-email": "El. pašta adresos nier būtėns, bat ons leid Tamstā gautė naujė slaptažuodi, jēgo pamėršuot kuoks ons bova, ė tēpuogi Tamsta galėt leistė kėtėims pasėiktė Tamsta par Tamstas nauduotuojė aba nauduotuojė aptarėma poslapi tāp, ka anėi nežėnuotom Tamstas el. pašta adresa.",
        "prefs-help-email-required": "Rēk el. pašta adresa",
        "prefs-info": "Pagrindėnės žėnės",
        "prefs-displayrc": "Ruodītė nustatīmus",
        "prefs-displaywatchlist": "Ruodītė nustatīmus",
        "prefs-diffs": "Skėrtomā",
+       "prefswarning-warning": "Tamsta pamainėt sava nūstatīmus, ale anūm da naėšsauguojėt.\nJēb paliksat poslapi napaspaudus ont $1, Tamstas nūstatīmā napasikeis.",
        "userrights": "Nauduotuoju teisiu valdīms",
        "userrights-lookup-user": "Tvarkītė nauduotuojė gropės",
        "userrights-user-editname": "Iveskėt nauduotuojė varda:",
-       "editusergroup": "Redagoutė nauduotuojė gropes",
+       "editusergroup": "Mainītė nauduotuoja gropės",
        "editinguser": "Teisiu keitėms {{GENDER:$1|Nauduotuojō}} <strong>[[User:$1|$1]]</strong> $2",
        "userrights-editusergroup": "Keistė nauduotuoju gropes",
-       "saveusergroups": "Sauguotė nauduotuoju gropes",
+       "saveusergroups": "Sauguotė nauduotuoja gropės",
        "userrights-groupsmember": "Narīs:",
        "userrights-reason": "Dingstės:",
        "group": "Gropė:",
        "grouppage-bureaucrat": "{{ns:project}}:Biorokratā",
        "right-read": "Skaitītė poslapius",
        "right-edit": "Keistė poslapius",
+       "right-minoredit": "Žīmietė ketėmus kap mažus",
+       "right-move": "Parvadintė poslapius",
+       "right-move-subpages": "Parvadinė poslapius ėr anūm pūposlapius",
+       "right-move-categorypages": "Parvadintė kateguorėjės",
+       "right-movefile": "Parvadintė abruozdielius",
        "right-upload": "Ikeltė failus",
        "right-writeapi": "Nauduotė API rašīmō",
        "right-delete": "Trintė poslapius",
        "right-browsearchive": "Ėiškuotė ėštrintū poslapiu",
        "right-undelete": "Tou poslapi padėrbtė apent",
+       "grant-createeditmovepage": "Dėrbtė, keistė ė parvadintė poslapius",
        "newuserlogpage": "Nauduotuojė kūrėma sārašos",
        "rightslog": "Nauduotuoju teisiu istuorėjė",
        "rightslogtext": "Pateikiams nauduotuoju teisiu pakeitėmu sārašos.",
        "action-move-categorypages": "parvadintė kateguorėjes",
        "action-movefile": "parvadintė šėta faila",
        "action-upload": "ikeltė šėta faila",
-       "action-delete": "trintė ton poslapė",
+       "action-delete": "trintė ton poslapi",
        "action-undelete": "atkortė ta poslapi",
        "action-patrol": "pažīmietė kėtū keitėmus kāp patikrėntus",
        "action-userrights": "keistė vėsū nauduotuoju teises",
+       "action-purge": "atšvėižintė poslapi",
        "nchanges": "$1 {{PLURAL:$1|pakeitėms|pakeitėmā|pakeitėmu}}",
+       "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|nug paskotėnė apsilonkėma}}",
        "enhancedrc-history": "istuorėjė",
        "recentchanges": "Vielībė̄jė pakeitėmā",
-       "recentchanges-legend": "Vielībūju pakeitėmu pasėrinkėmā",
+       "recentchanges-legend": "Vielībūju pakeitėmu pasirinkėmā",
        "recentchanges-summary": "Keravuokat patius vielībuosius wiki pakeitėmus tamė poslapie.",
+       "recentchanges-noresult": "Par nūruodīta čiesa napradėrbts anēvėins Tamstas nuorams pakeitėms.",
        "recentchanges-feed-description": "Keravuokėt patius vielībiausius pakeitėmus pruojektō tamė šaltėnī.",
        "recentchanges-label-newpage": "Šėtuo keitėmuo padėrbts naus poslapis",
        "recentchanges-label-minor": "Tas īr mažos pataisīms",
        "recentchanges-label-plusminus": "Anuo baitu skaitliom pakeists straipsnė apmiers",
        "recentchanges-legend-heading": "<strong>Pāiškėnėmā:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (dā veiziekat [[Special:NewPages|vielībūju straipsniu sāroša]])",
+       "recentchanges-submit": "Ruodītė",
        "rcnotefrom": "Apatiuo {{PLURAL:$5|ruodoms pakeitėms|ruodomė pakeitėmā}} nug <strong>$3, $4</strong> (ne daugiau kāp <strong>$1</strong> ruodoma īr).",
        "rclistfrom": "Ruodītė vielībus pakeitėmus pradedont nug $3 $2",
        "rcshowhideminor": "$1 mažus pakeitėmus",
        "rcshowhidebots": "$1 robuotus",
        "rcshowhidebots-show": "Ruodītė",
        "rcshowhidebots-hide": "Kavuotė",
-       "rcshowhideliu": "$1 prėsėjongusiūm nauduotuojūm pakeitėmus",
+       "rcshowhideliu": "$1 prisijongusiu nauduotuoju pakeitėmus",
        "rcshowhideliu-show": "Ruodītė",
        "rcshowhideliu-hide": "Kavuotė",
        "rcshowhideanons": "$1 nažėnomus nauduotuojus",
        "rcshowhidemine-show": "Ruodītė",
        "rcshowhidemine-hide": "Kavuotė",
        "rcshowhidecategorization": "$1, kap poslapiam doud kateguorėjės",
+       "rcshowhidecategorization-show": "Ruodītė",
+       "rcshowhidecategorization-hide": "Kavuotė",
        "rclinks": "Ruodītė vielībus $1 pakeitėmu par paskuojės $2 dėinas<br />$3",
        "diff": "skėrt",
        "hist": "ist",
        "recentchangeslinked-summary": "Tamė specēliam poslapi sogol vielībė̄jė pakeitėmā poslapiūs, i katrūs īr nuruodoma. Poslapē ėš Tamstas [[Special:Watchlist|keravuojamu sāroša]] ėšruod '''stuorā'''.",
        "recentchangeslinked-page": "Poslapė pavadėnėms:",
        "recentchangeslinked-to": "Ruodītė anūs poslapiu pakeitėmus, katrėi prėgol prī douta poslapė",
+       "recentchanges-page-added-to-category": "[[:$1]] pridieta i kateguorėjė",
        "upload": "Ožkrautė abruozdieli",
        "uploadbtn": "Ikeltė faila",
        "reuploaddesc": "Sogrīžtė i ikielima fuorma.",
        "upload-file-error-text": "Ivīka vėdėnė klaida bandont sokortė laikinaji faila serverī. Prašuom sosėsėiktė so sistemuos admėnėstratuoriom.",
        "upload-misc-error": "Nažėnuoma ikielėma klaida",
        "upload-misc-error-text": "Ivīka nežėnuoma klaida vīkstont ikielėmō. Prašuom patėkrėnt, kū URL teisėngs teipuogi pasėikiams ėr pamiegīkit viel. Jē bieda ėšlėik, sosėsėikėt so sistemuos admėnėstratuoriom.",
+       "upload-http-error": "Nūtėka HTTP klaida: $1",
        "upload-dialog-title": "Ožkrautė abruozdieli",
        "upload-dialog-button-cancel": "Pabengtė",
+       "upload-dialog-button-back": "Atgaliuos",
        "upload-dialog-button-done": "Padėrbt",
        "upload-dialog-button-save": "Ėšsauguotė",
        "upload-dialog-button-upload": "Ožkrautė",
        "upload-form-label-infoform-description": "Aprašīms",
        "upload-form-label-usage-title": "Nauduojėms",
        "upload-form-label-usage-filename": "Abruozdielė pavadėnėms",
+       "upload-form-label-own-work": "Tas muona darbs ī",
+       "upload-form-label-infoform-categories": "Kateguorėjės",
+       "upload-form-label-infoform-date": "Čiesos",
+       "upload-form-label-own-work-message-generic-local": "Sotinko, ka ikeldams ton abruozdieli darou ton palē {{SITENAME}} taisīklės.",
        "backend-fail-notexists": "Abruozdielė „$1“ nie.",
        "backend-fail-alreadyexists": "Abruozdielis „$1“ jau īr.",
+       "uploadstash-thumbnail": "veizietė somažinta",
        "img-auth-accessdenied": "Ožgint prė̄tė",
        "upload-curl-error6": "Napavīkst pasėiktė URL",
        "upload-curl-error6-text": "Pataikts URL nagal būt pasėikts. Prašuom patėkrėntė, kū URL īr teisings ėr svetainė veik.",
        "upload_source_file": " (fails Tamstas kompioterī)",
        "listfiles-delete": "trintė",
        "listfiles-summary": "Tas specēlus poslapis ruod vėsus ikeltus failus.\nPalē numatīma paskiausē ikeltė failā īr ruoduomė sāroša vėršou.\nPaspaude ont štolpelė ontraštės pakeisėt ėšruokavėma.",
+       "listfiles-userdoesnotexist": "Nie tuokė nauduotuoja varda kap „$1“",
        "imgfile": "abruozdielis",
        "listfiles": "Failu sārašos",
        "listfiles_thumb": "Somažints",
        "linkstoimage": "{{PLURAL:$1|Ons poslapis|Anėi poslapē}} ruod ton abruozdielin:",
        "nolinkstoimage": "Abruozdielėp neruod anėjuoks poslapis.",
        "morelinkstoimage": "Veizietė [[Special:WhatLinksHere/$1|daugiau nūruodu]] ton abruozdielėn.",
+       "linkstoimage-redirect": "$1 (abruozdielė nūsokėms) $2",
        "sharedupload": "Tas fails īr ėš $1 ė gal būtė nauduojams kėtūs pruojektūs.",
        "sharedupload-desc-here": "Tas abruozdielis īr nug $1 ė gal būtė nauduojams kėtūs poslapiūs.\nŽinės nug [$2 abruozdielė aprašīma poslapė] prėgol apatiuo.",
        "sharedupload-desc-create": "Šėts abruozdielis īr ėš $1 ė gal būtė nauduonams kėtūs pruojektūs. \nMaž nuorat pamainītė anuo aprašīma [$2 anuo poslapie]?",
        "download": "parsėsiūstė",
        "unwatchedpages": "Nekeravuojėmė poslapē",
        "listredirects": "Paradresavėmu sārašos",
+       "listduplicatedfiles": "Abruozdieliu so doblėkatās sārašos",
        "unusedtemplates": "Nenauduojamė šabluonā",
        "unusedtemplatestext": "Tas poslapis ruod sāraša poslapiu, esontiu vardū srėtie „{{ns:template}}“, katrėi nie iterptė i juoki kėta poslapi. Nepamėrškat patikrėntė kėtū nūruodu prīš anas ėštrėnont.",
        "unusedtemplateswlh": "kėtas nūruodas",
        "randompage": "Bikuoks poslapis",
        "randompage-nopages": "Šėtuo vardū srėti nier anėjuokiu poslapiu.",
        "randomincategory": "Bikuoks poslapis kateguorėjuo",
+       "randomincategory-invalidcategory": "\"$1\" nie gers kateguorėjės pavadėnėms.",
+       "randomincategory-nopages": "[[:Category:$1|$1]] kateguoriejuo poslapiu nie.",
        "randomincategory-category": "Kateguorėjė:",
        "randomincategory-legend": "Bikuoks poslapis kateguorėjuo",
        "randomincategory-submit": "Ēk",
        "randomredirect": "Bikuoks nusokims",
-       "randomredirect-nopages": "Šėtuo vardū srėtie nie anėjuokiu nusokėmu.",
+       "randomredirect-nopages": "Šėtuo vardū srėtie $1 nie anėjuokiu nūsokėmu.",
        "statistics": "Skaitlē",
        "statistics-header-pages": "Poslapiu sklaitlē",
        "statistics-header-edits": "Keitėmu skaitlē",
        "specialloguserlabel": "Nauduotuos:",
        "speciallogtitlelabel": "Pavadėnims:",
        "log": "Specēliūju vīksmū istuorėjė",
-       "all-logs-page": "Vėsos istuorėjės",
+       "all-logs-page": "Vėsas istuorėjės",
        "alllogstext": "Bėndra idietu failu, ėštrīnėmu, ožrakėnėmu, bluokavėmu ė prėvėlėju soteikėmu istuorėjė.\nĪr galėmībė somažintė rezoltatu skaitliu patėkslėnont vēksma tėpa, nauduotuojė a sosėjosė poslapė.",
        "logempty": "Istuorėjuo nier anėjuokiū atitinkontiu atsėtėkimu.",
        "log-title-wildcard": "Ėiškuotė pavadinėmu, katrė prasėded šėtuo teksto",
        "showhideselectedlogentries": "Ruodītė/kavuotė sāraša ponktus, katrūs pasėrėnkot",
        "checkbox-select": "Rinktėis: $1",
        "checkbox-all": "Viskos",
+       "checkbox-none": "Nieka",
+       "checkbox-invert": "Apverstė",
        "allpages": "Vėsė straipsnē",
        "nextpage": "Kėts poslapis ($1)",
        "prevpage": "Onkstesnis poslapis ($1)",
        "categoriesfrom": "Ruodītė kateguorėjės pradedont nu:",
        "deletedcontributions": "Ėštrints nauduotuojė duovis",
        "deletedcontributions-title": "Ėštrints nauduotuojė duovis",
-       "linksearch": "Ėšuorėnės nūruodas",
+       "sp-deletedcontributions-contribs": "duovē",
+       "linksearch": "Ėšuorėniu nūruodu ėiškuojėms",
        "linksearch-ns": "Vardū srėtės:",
        "linksearch-ok": "Ėiškuotė",
        "linksearch-line": "$1 īr sosėits ėš $2",
        "listusers-noresult": "Nerast anėjuokiū nauduotuoju.",
        "listusers-blocked": "(ožgints)",
        "activeusers": "Vēkōs nauduotuojē",
+       "activeusers-count": "$1 {{PLURAL:$1|darbs|darbū}} par {{PLURAL:$3|paskotėnė dėina|$3 paskotėnės dėinas|$3 paskotėniu dėinū}}",
+       "activeusers-from": "Ruodītė nauduotuojus pradedont nug:",
        "activeusers-noresult": "Nerast anėjuokiu nauduotuoju.",
+       "activeusers-submit": "Ruodītė darbštius nauduotuojus",
        "listgrouprights": "Nauduotuoju gropiu teisės",
        "listgrouprights-group": "Gropė",
        "listgrouprights-rights": "Teisės",
        "listgrouprights-members": "(nariū sārašos)",
+       "listgrouprights-namespaceprotection-namespace": "Vardū srėtės",
+       "listgrants-grant": "Leidėms",
+       "listgrants-rights": "Teisės",
        "trackingcategories": "Pruogramėnės keravuojėma kateguorėjės",
        "mailnologin": "Nier adresa",
        "mailnologintext": "Tamstā reik būtė [[Special:UserLogin|prisėjongosiam]]\nė tor būtė ivests teisings el. pašta adresos Tamstas [[Special:Preferences|nustatīmuos]],\nkū siōstomiet el. gruomatas kėtėm nauduotuojam.",
        "wlheader-enotif": "El. pašta primėnėmā ijongtė īr.",
        "wlheader-showupdated": "Poslapē, katrėi pakeistė nu Tamstas paskotėnė apsėlonkėma čiesa anūs, īr pažīmietė '''pastuorintā'''",
        "wlnote": "Ruoduoma '''$1''' paskotėniu pakeitėmu, atlėktū par '''$2''' paskotėniu adīnu.",
-       "wlshowlast": "Ruodītė paskotėniu $1 adīnu, $2 dėinū a  pakeitėmus",
-       "watchlist-options": "Keravuojamu sāroša pasėrinkėmā",
+       "wlshowlast": "Ruodītė paskotėniu $1 adīnu, $2 dėinū pakeitėmus",
+       "watchlist-hide": "Kavuotė",
+       "watchlist-submit": "Ruodītė",
+       "wlshowhideminor": "maži pakeitėmā",
+       "wlshowhidebots": "buotā",
+       "wlshowhideliu": "prisijongė̄ nauduotuojē",
+       "wlshowhideanons": "naprisijongė̄ nauduotuojē",
+       "wlshowhidemine": "mona keitėmā",
+       "watchlist-options": "Keravuojamu sāraša pasirinkėmā",
        "watching": "Kergiama keravuojamu sārošon...",
        "unwatching": "Šalėnama ėš keravuojamu sāraša...",
        "enotif_reset": "Pažīmietė vėsus poslapius kāp aplonkītus",
        "enotif_impersonal_salutation": "{{SITENAME}} nauduotuos",
+       "enotif_subject_deleted": "{{SITENAME}} poslapis $1 bova ėštrints $2",
+       "enotif_subject_created": "{{SITENAME}} poslapis $1 bova padėrbts $2",
+       "enotif_subject_moved": "{{SITENAME}} poslapis $1 bova parvadints $2",
+       "enotif_subject_restored": "{{SITENAME}} poslapis $1 bova grōžints $2",
+       "enotif_subject_changed": "{{SITENAME}} poslapis $1 bova paminīts $2",
+       "enotif_body_intro_deleted": "{{SITENAME}} poslapi $1 $PAGEEDITDATE ėštrīnė $2, veiziekėt $3.",
+       "enotif_body_intro_created": "{{SITENAME}} poslapi $1 $PAGEEDITDATE padėrba $2, veiziekėt vielībiausia atmaina $3.",
+       "enotif_body_intro_moved": "{{SITENAME}} poslapi $1 $PAGEEDITDATE parvadėna $2, veiziekėt vielībiausia atmaina $3.",
+       "enotif_body_intro_restored": "{{SITENAME}} poslapi $1 $PAGEEDITDATE grōžėna $2, veiziekėt vielībiausia atmaina $3.",
+       "enotif_body_intro_changed": "{{SITENAME}} poslapi $1 $PAGEEDITDATE pamainė $2, veiziekėt vielībiausia atmaina $3.",
+       "enotif_lastvisited": "Veiziekėt $1, ka žėnuotomėt vėsus pakeitėmus nug Tamstas paskotėnė apsilonkīma.",
+       "enotif_lastdiff": "Veiziekėt $1, ka paveizietomėt ton pakeitėma.",
        "enotif_anon_editor": "anuonėminis nauduotuos $1",
        "created": "sokūrė",
        "changed": "pakeitė",
        "deletepage": "Trintė poslapi",
        "confirm": "Tėkrā tāp",
        "excontent": "bovis torėnīs: „$1“",
-       "excontentauthor": "bovis torėnīs: „$1“ (dėrba tėktās „[[Special:Contributions/$2|$2]]“)",
+       "excontentauthor": "bovė̄s torėnīs: „$1“ (dėrba tėktās „[[Special:Contributions/$2|$2]] [[User talk:$2|aptarėms]]“)",
        "exbeforeblank": "prīš ėštrinont torėnīs bova: „$1“",
        "delete-confirm": "Trintė „$1“",
        "delete-legend": "Trīnėms",
        "historywarning": "<strong>Atėdės:</strong> Poslapis, katron nuorat ėštrintė, bova pakeists $1 {{PLURAL:$1|sīki|sīkius|sīkiu}}:",
+       "historyaction-submit": "Ruodītė",
        "confirmdeletetext": "Tamsta pasėrėnkuot ėštrėntė poslapi a abruozdieli draugum so vėsa anuo istuorėjė.\nPrašuom patvėrtėntė, kū Tamsta tėkrā nuorėt šėtu padarītė, žėnuot aple galėmus padarėnius, ė kū Tamsta šėtā daruot atsėžvelgdamė i [[{{MediaWiki:Policy-url}}|puolitėka]].",
        "actioncomplete": "Vēksmos padėrbts īr",
        "actionfailed": "Vēksmos atšaukts īr",
        "deletereasonotherlist": "Kėta dingstės",
        "deletereason-dropdown": "* Tonkiausės ėštrėnėma dingstisː\n** Šiokšlėnėms\n** Zaunū/bikuo rašīms\n** Pažeistas dėrbieju teisės\n** Patėis nauduotuojė prašīms\n** Bluogs poslapė nusokėms",
        "delete-edit-reasonlist": "Mainītė trīnėma dingstis",
+       "deleteprotected": "Tamsta nagalėt ėštrintė ton poslapė, ba ons apsergiets ī.",
+       "deleting-backlinks-warning": "<strong>Atėduos:</strong> [[Special:WhatLinksHere/{{FULLPAGENAME}}|Kėti poslapē]] tora nūruodas aba apjėm ton poslapi, katra nuorėt trintė.",
        "rollback": "Atmestė pakeitėmus",
        "rollbacklink": "atmestė",
        "rollbacklinkcount": "sogrōžintė $1 {{PLURAL:$1|pakeitėma|pakeitėmo|pakeitėmus|pakeitėmu}}",
        "editcomment": "Padėrbėma paāškėnėms bova: <em>$1</em>.",
        "revertpage": "Atmests [[Special:Contributions/$2|$2]] ([[User talk:$2|aptarėms]]) pakeitėms; sogrōžints atmains, katron padėrba nauduotuos [[User:$1|$1]]",
        "rollback-success": "Atmestė $1 padėrbtė keitėmā; grōžints $2 padėrbts atmains.",
+       "rollback-success-notify": "Atmestė $1 padėrbtė keitėmā; grōžints $2 padėrbts atmains. [$3 ruodītė keitėmus]",
+       "sessionfailure-title": "Sesėjės klaida",
        "sessionfailure": "Atruod ka īr biedū so Tamstas prėsėjongėmo; tas vēksmos bova grōžints kāp atsargoma prėimonė nu sesėjės vuogėma.\nPrašoum mīgtė „atgal“ ėr parkrautė poslapi ėš katruo atiejėt, ė pamieginkėt apent.",
        "changecontentmodel-title-label": "Poslapė pavadėnėms",
        "changecontentmodel-reason-label": "Dingstės:",
        "modifiedarticleprotection": "pamainīts „[[$1]]“ apserguos miers",
        "unprotectedarticle": "nujėmė apserga nug „[[$1]]“",
        "movedarticleprotection": "apsergiejėma nustatīma parkeltė nug \"[[$2]]\" i \"[[$1]]\"",
+       "protectedarticle-comment": "{{GENDER:$2|Apsergiejė}} \"[[$1]]\"",
+       "modifiedarticleprotection-comment": "{{GENDER:$2|Pamainė}} \"[[$1]]\" apserga",
+       "unprotectedarticle-comment": "{{GENDER:$2|Bengė}} \"[[$1]]\" apserga",
        "protect-title": "Nustatuoms apsauguojėma līgis poslapiō „$1“",
+       "protect-title-notallowed": "Veizietė \"$1\" apserga",
        "prot_1movedto2": "Straipsnis [[$1]] parvadints i [[$2]]",
        "protect-legend": "Tėkrā tuokis apsergiejėms?",
        "protectcomment": "Dingstės:",
        "sp-contributions-username": "IP adresos a nauduotuojė vards:",
        "sp-contributions-toponly": "Ruodītė tėktās paskiausius keitėmus",
        "sp-contributions-newonly": "Ruodītė tėktās tūs keitėmus, katrās padėrbtė straipsnē",
+       "sp-contributions-hideminor": "Kavuotė mažus pakeitėmus",
        "sp-contributions-submit": "Ėiškuotė",
        "whatlinkshere": "Sosėjė̄ straipsnē",
        "whatlinkshere-title": "Poslapē, katrėi ruod i \"$1\"",
        "whatlinkshere-hidelinks": "$1 nūruodas",
        "whatlinkshere-hideimages": "$1 abruozdieliu nūruodas",
        "whatlinkshere-filters": "Kuošeklē",
+       "whatlinkshere-submit": "Ēk",
        "block": "Ožgintė nauduotuoji",
        "unblock": "Nauduotuojė ožgīnėma bengtė",
        "blockip": "Ožgintė {{GENDER:$1|nauduotoji}}",
        "blockip-legend": "Ožgintė nauduotuoji",
-       "blockiptext": "Nauduokėt šėta fuorma noriedamė oždraustė redagavėma teises nuruodīto IP adreso a nauduotuojo. Tas torietu būt atlėikama tam, kū sostabdītomiet vandalėzma, ė vagol [[{{ns:project}}:Puolitėka|puolitėka]].\nŽemiau nuruodīkėt tėkslē prižastė.",
+       "blockiptext": "Nauduokėt šėta skvarma kap nuorėt ožgintė redagavėma teisės nūruodītou IP adresou a nauduotuojou. Tas torietom būtė dėrbama, ka apsergietomėt poslapius nug gadėnėma, ė palē [[{{MediaWiki:Policy-url}}|sotarėma]].\n\nKap ožgėnat, nūruodīkėt tikslē, ož kon.",
        "ipaddressorusername": "IP adresos a nauduotuojė vards",
        "ipbexpiry": "Vēkėma čiesos",
        "ipbreason": "Dingstės:",
        "ipbreason-dropdown": "*Tonkiausės ožgīnėma dingstisː\n** Neteisībės rašīms\n** Torėnė trīnims ėš poslapiu\n** Šiokšlėnėms\n** Zaunu/bikuo rašīms i poslapius\n** Gondėnėmā/Pėktžuodiavėmā\n** Nauduojėms daugiaus kāp vėinuos paskīruos\n** Natinkams nauduotuojė vards",
+       "ipb-hardblock": "Nalaistė prisijongosėm nauduotuojėm dėrbtė pakeitėmu ėš ton IP adresa",
        "ipbcreateaccount": "Nelaistė dėrbtė paskīrū",
        "ipbemailban": "Nelaistė nauduotuojō siōstė el. gromatas",
        "ipbenableautoblock": "Autuomatėškā blokoutė tuo nauduotuojė paskiausē nauduota IP adresa, ė bikuokius paskesnius IP adresus, ėš katrū ons miegin redagoutė",
        "ipbsubmit": "Ožgintė ton nauduotuoji",
        "ipbother": "Kėtuoks čiesos",
        "ipboptions": "2 adīnė:2 hours,1 dėina:1 day,3 dėinas:3 days,1 nedielė:1 week,2 nedielė:2 weeks,1 mienou:1 month,3 mienesē:3 months,6 mienesē:6 months,1 metā:1 year,omžėms:infinite",
+       "ipbhidename": "Kavuotė nauduotuoja varda pakeitėmūs ė sārašūs",
        "ipbwatchuser": "Keravuotė tuo nauduotuojė poslapi ėr anuo aptarėma poslapi",
+       "ipb-disableusertalk": "Nalaistė nauduotuojou rašītė i sava aptarėmu poslapi kap ons ožgints ī",
        "ipb-change-block": "Parblokoutė ta nauduotuoja so šėtās nustatīmās",
        "ipb-confirm": "Tėkrā ožgintė?",
        "badipaddress": "Nelaistėns IP adresos",
        "blockipsuccesssub": "Nauduotuos bova ožgints",
        "blockipsuccesstext": "[[Special:Contributions/$1|$1]] bova ožgints.\n<br />Aplonkīkat [[Special:BlockList|IP ožginėmu istuorėjė]], jēgo nuorat anou parveizietė.",
+       "ipb-blockingself": "Tamsta tūjaus ožginsėt savėi pati! A tėkrā tap nuorėt?",
        "ipb-edit-dropdown": "Mainītė ožgīnėma dingstis",
        "ipb-unblock-addr": "Nug $1 nujėmtė ožgīnėma",
        "ipb-unblock": "Nug nauduotuojė varda a IP adresa nujėmtė ožgīnėma",
        "ipb-blocklist": "Ruodītė vielībousius ožgīnėmus",
        "ipb-blocklist-contribs": "$1 duovis",
+       "ipb-blocklist-duration-left": "palėka $1",
        "unblockip": "Nauduotuojė ožgīnėma bengtė",
        "unblockiptext": "Nauduokėt šėta fuorma, kū atkortomiet rašīma teises\nonkstiau ožbluokoutam IP adresō a nauduotuojō.",
        "ipusubmit": "Ton ožgīnėma nojėmtė",
        "block-log-flags-angry-autoblock": "vēk prapliests ožgīnėms",
        "block-log-flags-hiddenname": "nauduotuojė vards pakavuots īr",
        "ipb_expiry_invalid": "Galiuojėma čiesos nelaistėns.",
+       "ipb_expiry_old": "Galiuojėma čiesos īr praeitie.",
        "ipb_already_blocked": "„$1“ jau ožgints",
        "ipb-needreblock": "$1 jau īr ožblokouts. A nuorėt pakeistė nustatīmus?",
        "ipb-otherblocks-header": "{{PLURAL:$1|Kėts ožgīnėms|Kėtė ožgīnėmā}}",
        "move-page": "Parvadintė $1",
        "move-page-legend": "Poslapė parvadėnėms",
        "movepagetext": "Nauduojont ta skvarma, katra apatiuo īr, parvadinsat poslapi ėr ėšlaikīsat anuo istuorėjė.\nOnkstesnis pavadėnėms palėks nosokėmo - ons ruodīs poslapin naujė varda.\nTamsta esat atsakėngs, ka nūruodas ruodītom tenā, kor ė rēk.\n\nAtminkat, ka poslapis '''nabus''' parvadints, jēgo jau īr poslapis naujo pavadinėmo, tėktās jēgo ons īr dīks aba netor keitėmu istuorėjės.\nTumet, Tamsta galat parvadintė poslapi seniou nauduoto vardo, jēgo priš šėta ons bova par klaida parvadints, ar esontiu poslapiu sogadintė negalat.\n\n'''ATĖDĖS!'''\nJēgo parvadinat tonkē nauduojama poslapi, ta galat prėdėrbtė ėškadas. Tudie kervauokat, ka dėrbat.",
+       "movepagetext-noredirectfixer": "So ton skvarma apatiuo Tamsta parvadinsat poslapi ė parkelsat vėsa anou istuorėjė.\nSens poslapis paliks nūsokėmo i nauja straipsnė varda.\nSotikrinkėt, ka napalėikat [[Special:DoubleRedirects|dvėgobu]] aba [[Special:BrokenRedirects|navēkontiu nūsokėmu]].\nTamsta pasilėikat atsakings, ka nūruodas ė tuoliaus ruodītom tenās, kor ė rēk.\n\nToriekat uomenie, ka poslapis '''nabūs''' parvadins, jēb jau poslapis so tuokio vardo ī (nabentās, ons būtom tėktās nūsokėms ba istuorėjės).\nTas rēšk, ka Tamsta galiesat sogrōžintė poslapi ont sena anou varda, jēb padarīsat klaida.\n\n'''ATĖDĖS:'''\nJēb parvadinat gausē nauduojama poslapi, ta galat prīdėrbtė ėškadas;\nTudie kervauokat, ka dėrbat!",
        "movepagetalktext": "Sosėits aptarėma poslapis bus autuomatėškā parkelts draugom so ano, '''ėšskīrus:''':\n*Poslapis nauju pavadinėmo tor netoštė aptarėma poslapi, a\n*Paliksėt žemiau asontė varnale nepažīmieta.\nŠėtās atviejās Tamsta sava nužiūra torėt parkeltė a apjongtė aptarėma poslapi.",
        "moveuserpage-warning": "<strong>Atėdės:</strong> Tamsta parvadėnsat nauduotuojė poslapi. Žėnuokat, ka tėktās poslapis bat <em>ne patsā nauduotuos</em> bos parvadints.",
        "movecategorypage-warning": "<strong>Atėdės:</strong> Tamsta parvadinsat kateguorėjės poslapi. Žėnuokat, ka tėktas poslapis bos parvadints, bat <em>poslapē, katrėi anon prėgol,</em> tor būtė sokergtė apent.",
        "tooltip-pt-watchlist": "Poslapiu, katrūs Tamsta pasirinkuot keravuotė, sārašos.",
        "tooltip-pt-mycontris": "Tamstas dėrbtū keitėmu sārašos",
        "tooltip-pt-login": "Kvėitam prėsėjongtė, nuors tas ė nie būtėna.",
-       "tooltip-pt-logout": "Atsėjongtė",
+       "tooltip-pt-logout": "Atsijongtė",
        "tooltip-pt-createaccount": "Tamstā kvėitam padėrbtė paskīra ė prėsėjongtė; bat tas nie būtėina",
        "tooltip-ca-talk": "Poslapė torėnė aptarėms",
-       "tooltip-ca-edit": "Taisītė ton poslapė",
+       "tooltip-ca-edit": "Taisītė ton poslapi",
        "tooltip-ca-addsection": "Pradietė naujė skėrsneli",
        "tooltip-ca-viewsource": "Ons poslapis apsergiets īr. Galat tėktās parveiziet kas anamė ožrašīta.",
        "tooltip-ca-history": "Onkstesnė ton poslapė atmainā.",
index 09392ad..6e3d91c 100644 (file)
        "yourpasswordagain": "Ponovo upišite šifru / Поново упишите шифру",
        "createacct-yourpasswordagain": "Potvrdite lozinku/zaporku",
        "createacct-yourpasswordagain-ph": "Unesite lozinku/zaporku ponovno",
-       "remembermypassword": "Upamti moju lozinku na ovom kompjuteru (za maksimum od $1 {{PLURAL:$1|dan|dana}})",
        "userlogin-remembermypassword": "Zapamti prijavu",
        "userlogin-signwithsecure": "Koristite sigurnu vezu",
        "yourdomainname": "Vaš domen:",
        "activeusers-intro": "Ovo je spisak korisnika koji su napravili neku aktivnost u {{PLURAL:$1|zadnji $1 dan|zadnja $1 dana|zadnjih $1 dana}}.",
        "activeusers-count": "{{PLURAL:$1|$1 izmjena|$1 izmjene|$1 izmjena}} u {{PLURAL:$3|posljednji $3 dan|posljednja $3 dana|posljednjih $3 dana}}",
        "activeusers-from": "Prikaži korisnike koji počinju sa:",
-       "activeusers-hidebots": "Sakrij botove",
-       "activeusers-hidesysops": "Sakrij administratore",
        "activeusers-noresult": "Nije pronađen korisnik.",
        "listgrouprights": "Prava korisničkih grupa",
        "listgrouprights-summary": "Slijedi spisak korisničkih grupa na ovoj wiki, s njihovim pravima pristupa.\nO svakoj od njih postoje i [[{{MediaWiki:Listgrouprights-helppage}}|dodatne informacije]].",
        "htmlform-no": "Ne",
        "htmlform-yes": "Da",
        "htmlform-chosen-placeholder": "Odaberi opciju",
-       "sqlite-has-fts": "$1 sa podrškom pretrage cijelog teksta",
-       "sqlite-no-fts": "$1 bez podrške pretrage cijelog teksta",
        "logentry-delete-delete": "$1 je {{GENDER:$2|obrisao|obrisala}} stranicu $3",
        "logentry-delete-restore": "$1 je {{GENDER:$2|vratio|vratila}} stranicu $3",
        "logentry-delete-event": "$1 je {{GENDER:$2|promijenio|promijenila}} vidljivost {{PLURAL:$5|događaja|$5 događaja}} u evidenciji na $3: $4",
index 71a8157..f84e6e2 100644 (file)
        "yourname": "smiyt o-msxdam:",
        "yourpassword": "awal iḥdan:",
        "yourpasswordagain": "Зawd ara awal iḥdan:",
-       "remembermypassword": "Askti nu ukcum ɣ Urdinaturad (Iɣ kullu tggut $1 {{PLURAL:$1|Ass|Ass}})",
        "yourdomainname": "Taɣult nek",
        "externaldberror": "Imma tlla ɣin kra lafut ɣu ukcumnk ulla urak ittuyskar at tsbddelt lkontnk nbrra.",
        "login": "Kcm ɣid",
index 5105d79..eafaea6 100644 (file)
        "passwordreset-emailelement": "ၸိုဝ်ႈၽူႈၸႂ်ႉတိုဝ်း:\n$1\n\nၶေႃႈလပ်ႉ ၸူဝ်ႈၵႅပ်ႉ:\n$2",
        "passwordreset-emailsentemail": "ႁဵင်းလိၵ်ႈ ဢီးမေးလ်ဢၼ်ၼႆႉၼႆႉ မၼ်းၵပ်းၵၢႆႇၵၼ်တင်း ဢၶွင်ႉၸဝ်ႈၵဝ်ႇ၊ ဢၼ်ပဵၼ် ဢီးမေးလ် တႃႇတင်ႈၶိုၼ်းမၢႆလပ်ႉၼၼ်ႉ တေထုၵ်ႇသူင်ႇၸူးယူႇ.",
        "passwordreset-emailsentusername": "ႁဵင်းလိၵ်ႈ ဢီးမေးလ်ဢၼ်ၼႆႉၼႆႉ မၼ်းၵပ်းၵၢႆႇၵၼ်တင်း ၸိုဝ်ႈၽူႈၸႂ်ႉတိုဝ်း ဢၼ်ၼႆႉ၊ ဢၼ်ပဵၼ် ဢီးမေးလ် တႃႇတင်ႈၶိုၼ်းမၢႆလပ်ႉၼၼ်ႉ တေထုၵ်ႇသူင်ႇၸူးယူႇ.",
-       "passwordreset-invalideamil": "ႁဵင်းလိၵ်ႈ ဢီႈမေးလ် ၽိတ်းဝႆႉ။",
+       "passwordreset-invalidemail": "ႁဵင်းလိၵ်ႈ ဢီႈမေးလ် ၽိတ်းဝႆႉ။",
        "passwordreset-nodata": "ၸိုဝ်ႈၽူႈၸႂ်ႉတိုဝ်းလႄႈ ႁဵင်းလိၵ်ႈဢီးမေးလ် ဢမ်ႇလႆႈၵမ်ႉထႅမ်ဝႆႉ သေဢၼ်။",
        "changeemail": "လႅၵ်ႈလၢႆႈ ဢမ်ႇၼၼ် ထွၼ်ပႅတ်ႈ ႁဵင်းလိၵ်ႈ ဢီးမေးလ်",
        "changeemail-no-info": "တႃႇၸဝ်ႈၵဝ်ႇ တေၸၢင်ႈၸႂ်ႉလႆႈ ၼႃႈလိၵ်ႈၼႆႉ ၵမ်းသိုဝ်ၼၼ်ႉၼႆ ၸဝ်ႈၵဝ်ႇ တေလႆႈ ၶဝ်ႈလွၵ်ႉဢိၼ်ႇဝႆႉဢေႃႈ။",
index cb5735d..59a3ba6 100644 (file)
        "yourpasswordagain": "මුරපදය යළි ඇතුළු කරන්න:",
        "createacct-yourpasswordagain": "මුරපදය සනාථ කරන්න",
        "createacct-yourpasswordagain-ph": "මුරපදය යළි ඇතුළු කරන්න",
-       "remembermypassword": "මාගේ පිවිසීම මෙම ගවේෂක මතකයෙහි (උපරිම ලෙස {{PLURAL:$1|දින|දින}}) $1 ක් මතක තබාගන්න",
        "userlogin-remembermypassword": "මා ප්‍රවිසීම් තත්වයේම තබන්න",
        "userlogin-signwithsecure": "ආරක්‍ෂිත සබඳතාව භාවිතා කරන්න",
        "cannotloginnow-title": "දැන් පිවිසීමට නොහැකිය",
        "passwordreset-emailtext-user": "{{SITENAME}} හි පරිශීලක $1,{{SITENAME}}($4)සඳහා මුරපදය යලි පිහිටුවීමට ඉල්ලා ඇත.\n\n$2\n\n{{PLURAL:$3|මෙම මුරපදය|මෙම මුරපද}}{{PLURAL:$5|එක් දිනකින්|දවස්$5කින්}}කල් ඉකුත් වනු ඇත.\nඔබ දැන් ඇතුළු වී නව මුරපදයක් තේරිය යුතුය.මෙම ඉල්ලීම වෙන කෙනෙකු විසින් හෝ ඔබට ඔබගේ මුල් මුරපදය මතක නම් හෝ ඔබ තව දුරටත් එය වෙනස් කිරීමට අදහස් නොකරයි නම් හෝ ඔබ මෙම පනිවිඩය නොසලකාහැර ඔබගේ පැරණි මුරපදය භාවිතා කරන්න.",
        "passwordreset-emailelement": "පරිශීලක නාමය: \n$1\n\nතාවකාලික මුරපදය: \n$2",
        "passwordreset-emailsentemail": "මුර-පදය නැවත සකස් කිරීම පිළිබඳව විද්‍යුත් තැපෑලක් යවන ලදී.",
-       "passwordreset-invalideamil": "වලංගු නැති ඊමේල් ලිපිනය",
+       "passwordreset-invalidemail": "වලංගු නැති ඊමේල් ලිපිනය",
        "changeemail": "විද්‍යුත් තැපෑල වෙනස් කරන්න හෝ ඉවත් කරන්න",
        "changeemail-header": "ගිණුම් විද්‍යුත් තැපැල් ලිපිනය වෙනස් කරන්න",
        "changeemail-no-info": "මෙම පිටුව සෘජු ලෙස සම්ප්‍රවේශය කෙරුමට පළමුව ඔබ ප්‍රවිෂ්ටව සිටිය යුතුය.",
        "activeusers-intro": "මෙය පසුගිය $1 {{PLURAL:$1|දිනය|දින}}තුළ යම් ක්‍රියාකාරකමක් කළ පරිශීලකයන්ගේ ලැයිස්තුවකි.",
        "activeusers-count": "{{PLURAL:$1|එක් පියවරක්|පියවර $1 ක්}} අවසන් {{PLURAL:$3|දිනය|දින $3}} තුළ",
        "activeusers-from": "මෙයින් ඇරඹෙන පරිශීලකයන් පෙන්වන්න:",
-       "activeusers-hidebots": " bots සඟවන්න",
-       "activeusers-hidesysops": "පරිපාලකයින් සඟවන්න",
        "activeusers-noresult": "කිසිදු පරිශීලකයෙකු හමුනොවිණි.",
        "activeusers-submit": "ක්‍රියාකාරී පරිශීලකයන් පෙන්වන්න",
        "listgrouprights": "පරිශීලක කාණ්ඩ හිමිකම්",
        "htmlform-cloner-create": "තව එක් කරන්න",
        "htmlform-cloner-delete": "ඉවත් කරන්න",
        "htmlform-cloner-required": "අවම වශයෙන් එක් වටිනාකම අවශ්ය වේ.",
-       "sqlite-has-fts": "$1 සම්පූර්ණ-පෙළ සෙවුම් සහය සමග",
-       "sqlite-no-fts": "$1 සම්පූර්ණ-පෙළ සෙවුම් සහය රහිතව",
        "logentry-delete-delete": "$1 විසින් $3 පිටුව {{GENDER:$2|මකා දමන ලදී}}",
        "logentry-delete-restore": "$1 {{GENDER:$2|නැවත පිහිටුවන ලදී}} පිටු $3",
        "logentry-delete-event-legacy": "$1 විසින් $3 හී ලඝු සිදුවීම් වල දෘශ්‍යතාවය වෙනස් කරන ලදී",
index 86ecc66..992089a 100644 (file)
        "passwordreset-emaildisabled": "E-mailové funkcie boli na tejto wiki vypnuté.",
        "passwordreset-username": "Používateľské meno:",
        "passwordreset-domain": "Doména:",
-       "passwordreset-capture": "Zobraziť výsledný e-mail?",
-       "passwordreset-capture-help": "Ak označíte toto políčko, bude e-mail (s dočasným heslom) okrem zaslania používateľovi zobrazený aj vám.",
        "passwordreset-email": "Emailová adresa:",
        "passwordreset-emailtitle": "Podrobnosti o účte na {{GRAMMAR:lokál|{{SITENAME}}}}",
        "passwordreset-emailtext-ip": "Niekto (pravdepodobne vy z IP adresy $1) požiadal o obnovenie vášho hesla na {{GRAMMAR:genitív|{{SITENAME}}}} ($4). {{PLURAL:$3|Nasledujúci používateľský účet je spojený|Nasledujúce používateľské účty sú spojené}}\ns touto emailovou adresou:\n\n$2\n\n{{PLURAL:$3|Platnosť tohto dočasného hesla vyprší|Platnosť týchto dočasných hesiel vyprší}} o {{PLURAL:$5|jeden deň|$5 dni|$5 dní}}.\nMali by ste sa prihlásiť teraz a zvoliť nové heslo. Ak túto žiadosť podal niekto iný alebo\nak ste si spomenuli svoje pôvodné heslo a už ho chcete zmeniť, môžete túto správu\nignorovať a ďalej používať vaše staré heslo.",
        "passwordreset-emailelement": "Používateľské meno: \n$1\n\nDočasné heslo:\n$2",
        "passwordreset-emailsentemail": "Pokiaľ je toto e-mailová adresa zaregistrovaná k vášmu účtu, bude na ňu zaslaný e-mail pre získanie nového hesla.",
        "passwordreset-emailsentusername": "Pokiaľ je príslušná mailová adresa zaregistrovaná, bude na ňu zaslaný e-mail s novým heslom.",
-       "passwordreset-emailsent-capture2": "{{PLURAL:$1|Email|Emaily}} na obnovenie hesla {{PLURAL:$1|bol odoslaný|boli odoslané}}. {{PLURAL:$1|Používateľské meno a heslo|Zoznam používateľských mien a hesiel}} je uvedený nižšie.",
        "changeemail": "Zmeniť alebo odstrániť e-mailovú adresu",
        "changeemail-header": "Vyplňte tento formulár, ak chcete zmeniť svoju emailovú adresu. Ak chcete odstrániť priradenie akejkoľvek emailovej adresy k vášmu účtu, nechajte pri odosielaní formulára emailovú adresu nevyplnenú",
        "changeemail-no-info": "Na prístup k tejto stránke musíte byť prihlásený.",
        "right-siteadmin": "Zamykať a odomykať databázu",
        "right-override-export-depth": "Exportovať stránky vrátane okdazovaných stránok do hĺbky 5 odkazov",
        "right-sendemail": "Posielať e-mail ostatným používateľom",
-       "right-passwordreset": "Prezeranie e-mailov pre znovunastavovanie hesla",
        "right-managechangetags": "Vytvárenie a (de)aktivácia [[Special:Tags|značiek]]",
        "right-applychangetags": "Pridávanie [[Special:Tags|značiek]] k vlastným úpravám",
        "right-changetags": "Pridávanie ľubovoľných [[Special:Tags|značiek]] na jednotlivé revízie a záznamy a ich odoberanie",
        "booksources-search": "Hľadať",
        "booksources-text": "Nižšie je zoznam odkazov na iné stránky, ktoré predávajú nové a použité knihy a tiež môžu obsahovať ďalšie informácie o knihách, ktoré hľadáte:",
        "booksources-invalid-isbn": "Zdá sa, že dané ISBN nie je platné. Skontrolujte, či ste neurobili chybu pri kopírovaní z pôvodného zdroja.",
-       "magiclink-tracking-rfc": "Stránky s RFC odkazmi",
-       "magiclink-tracking-pmid": "Stránky s PMID odkazmi",
-       "magiclink-tracking-isbn": "Stránky s ISBN odkazmi",
+       "magiclink-tracking-rfc": "Stránky s magickými odkazmi RFC",
+       "magiclink-tracking-pmid": "Stránky s magickými odkazmi PMID",
+       "magiclink-tracking-isbn": "Stránky s magickými odkazmi ISBN",
        "specialloguserlabel": "Pôvodca:",
        "speciallogtitlelabel": "Cieľ (názov alebo {{ns:user}}:Používateľské meno):",
        "log": "Záznamy",
index 63ad3c7..bf8fec2 100644 (file)
        "passwordreset-emaildisabled": "Na tem wikiju so možnosti e-pošte onemogočene.",
        "passwordreset-username": "Uporabniško ime:",
        "passwordreset-domain": "Domena:",
-       "passwordreset-capture": "Ogled nastale e-pošte?",
-       "passwordreset-capture-help": "Če potrdite to polje, vam bodo e-pošte (z začasnim geslom) pokazane in poslane uporabniku.",
        "passwordreset-email": "E-poštni naslov:",
        "passwordreset-emailtitle": "Podrobnosti računa na {{SITENAME}}",
        "passwordreset-emailtext-ip": "Nekdo (verjetno vi, z IP-naslova $1) je zahteval ponastavitev vašega\ngesla na {{SITENAME}} ($4). S tem e-poštnim naslovom\n{{PLURAL:$3|je povezan naslednji uporabniški račun|sta povezana naslednja uporabniška računa|so povezani naslednji uporabniški računi}}:\n\n$2\n\n{{PLURAL:$3|Začasno geslo bo poteklo|Začasni gesli bosta potekli|Začasna gesla bodo potekla}} v {{PLURAL:$5|enem dnevu|$5 dneh}}.\nPrijavite se in izberite novo geslo. Če je zahtevo podal\nnekdo drug ali pa ste se spomnili svojega prvotnega gesla in ga več\nne želite spremeniti, lahko to sporočilo prezrete in nadaljujete z uporabo\nsvojega starega gesla.",
        "passwordreset-emailelement": "Uporabniško ime: \n$1\n\nZačasno geslo: \n$2",
        "passwordreset-emailsentemail": "Če je e-poštni naslov povezan z vašim računom, vam bomo poslali e-pošto za postavitev gesla.",
        "passwordreset-emailsentusername": "Če obstaja e-poštni naslov, povezan s tem uporabniškim imenom, vam bomo poslali e-pošto za postavitev gesla.",
-       "passwordreset-emailsent-capture2": "Poslali smo {{PLURAL:$1|e-pošto|e-pošti|e-pošte}} za ponastavitev gesla. {{PLURAL:$1|Uporabniško ime in geslo sta navedena tukaj.|Seznam uporabniških imen in gesel je naveden tukaj.}}",
-       "passwordreset-emailerror-capture2": "Pošiljanje e-pošte {{GENDER:$2|uporabniku|uporabnici}} je spodletelo: $1 {{PLURAL:$3|Uporabniško ime in geslo sta navedena tukaj.|Seznam uporabniških imen in gesel je naveden tukaj.}}",
        "passwordreset-nocaller": "Podati morate klicatelja",
        "passwordreset-nosuchcaller": "Klicatelj ne obstaja: $1",
        "passwordreset-ignored": "Ponastavitve gesla nismo izvedli. Morda ni nastavljen noben ponudnik?",
-       "passwordreset-invalideamil": "Neveljavni e-poštni naslov",
+       "passwordreset-invalidemail": "Neveljavni e-poštni naslov",
        "passwordreset-nodata": "Navedli niste ne uporabniškega imena ne e-poštnega naslova",
        "changeemail": "Sprememba ali odstranitev e-poštnega naslova",
        "changeemail-header": "Izpolnite obrazec za spremembo vašega e-poštnega naslova. Če želite s svojega računa odstraniti povezavo s katerim koli e-poštnim naslovom, pustite polje za nov e-poštni naslov med potrjevanje obrazca prazno.",
        "right-siteadmin": "Zaklepanje in odklepanje baze podatkov",
        "right-override-export-depth": "Izvoz strani, vključno s povezaimi straneh do globine 5",
        "right-sendemail": "Pošiljanje e-pošte drugim uporabnikom",
-       "right-passwordreset": "Ogled e-pošt ponastavitve gesel",
        "right-managechangetags": "Ustvarjanje in (dez)aktivacijo [[Special:Tags|oznak]]",
        "right-applychangetags": "Uveljavitev [[Special:Tags|oznak]] skupaj s spremembami",
        "right-changetags": "Dodajanje in odstranjevanje poljubnih [[Special:Tags|oznak]] na posameznih redakcijah in dnevniških vnosih",
        "apisandbox-continue": "Nadaljuj",
        "apisandbox-continue-clear": "Počisti",
        "apisandbox-continue-help": "{{int:apisandbox-continue}} bo [https://www.mediawiki.org/wiki/API:Query#Continuing_queries nadaljevalo] zadnjo zahtevo; {{int:apisandbox-continue-clear}} bo počistilo parametre, povezane z nadaljevanjem.",
+       "apisandbox-param-limit": "Vnesite <kbd>max</kbd>, da uporabite največjo omejitev.",
        "booksources": "Viri knjig",
        "booksources-search-legend": "Išči knjižne vire",
        "booksources-search": "Išči",
        "activeusers-count": "$1 {{PLURAL:$1|dejanje|dejanji|dejanja|dejanj}} v {{PLURAL:$3|preteklem dnevu|preteklih $3 dneh}}",
        "activeusers-from": "Prikaži uporabnike začenši z:",
        "activeusers-groups": "Prikaži uporabnike, ki pripadajo skupinam:",
+       "activeusers-excludegroups": "Izključi uporabnike, ki pripadajo skupinam:",
        "activeusers-noresult": "Noben uporabnik ni bil najden.",
        "activeusers-submit": "Prikaži dejavne uporabnike",
        "listgrouprights": "Pravice uporabniških skupin",
        "javascripttest": "Preizkušanje JavaScripta",
        "javascripttest-pagetext-unknownaction": "Neznano dejanje »$1«.",
        "javascripttest-qunit-intro": "Oglejte si [$1 dokumentacijo o preizkušanju] na mediawiki.org.",
-       "tooltip-pt-userpage": "{{GENDER:|Vaša}} uporabniška stran",
+       "tooltip-pt-userpage": "{{GENDER:|Tvoja}} uporabniška stran",
        "tooltip-pt-anonuserpage": "Uporabniška stran IP-naslova, ki ga uporabljate",
-       "tooltip-pt-mytalk": "{{GENDER:|Vaša}} pogovorna stran",
+       "tooltip-pt-mytalk": "{{GENDER:|Tvoja}} pogovorna stran",
        "tooltip-pt-anontalk": "Pogovor o urejanjih s tega IP-naslova",
-       "tooltip-pt-preferences": "{{GENDER:|Vaše}} nastavitve",
+       "tooltip-pt-preferences": "{{GENDER:|Tvoje}} nastavitve",
        "tooltip-pt-watchlist": "Seznam strani, katerih spremembe spremljate",
-       "tooltip-pt-mycontris": "Seznam {{GENDER:|vaših}} prispevkov",
+       "tooltip-pt-mycontris": "Seznam {{GENDER:|tvojih}} prispevkov",
        "tooltip-pt-anoncontribs": "Seznam urejanj s tega IP-naslova",
        "tooltip-pt-login": "Prijava ni obvezna, vendar je zaželena",
-       "tooltip-pt-logout": "Odjavite se",
+       "tooltip-pt-logout": "Odjavi se",
        "tooltip-pt-createaccount": "Predlagamo vam, da ustvarite račun in se prijavite, vendar pa to ni obvezno.",
        "tooltip-ca-talk": "Pogovor o strani",
        "tooltip-ca-edit": "Uredi stran",
        "tags-deactivate": "dezaktiviraj",
        "tags-hitcount": "$1 {{PLURAL:$1|sprememba|spremembi|spremembe|sprememb|sprememb}}",
        "tags-manage-no-permission": "Nimate dovoljenja za upravljanje z oznakami sprememb.",
-       "tags-manage-blocked": "Med blokado ne morete upravljati oznak sprememb.",
+       "tags-manage-blocked": "Med blokado {{GENDER:$1|ne morete}} upravljati oznak sprememb.",
        "tags-create-heading": "Ustvari novo oznako",
        "tags-create-explanation": "Privzeto bodo novo ustvarjene oznake na voljo uporabnikom in botom.",
        "tags-create-tag-name": "Ime oznake:",
        "tags-deactivate-not-allowed": "Oznake »$1« ni možno dezaktivirati.",
        "tags-deactivate-submit": "Dezaktiviraj",
        "tags-apply-no-permission": "Nimate dovoljenja za uveljavljanje sprememb oznak skupaj z vašimi spremembami.",
-       "tags-apply-blocked": "Med blokado ne morete uveljaviti oznak sprememb skupaj s svojimi spremembami.",
+       "tags-apply-blocked": "Med blokado {{GENDER:$1|ne morete}} uveljaviti oznak sprememb skupaj s svojimi spremembami.",
        "tags-apply-not-allowed-one": "Oznake »$1« ni mogoče uveljaviti ročno.",
        "tags-apply-not-allowed-multi": "{{PLURAL:$2|Naslednje oznake|Naslednji oznaki|Naslednjih oznak}} ni mogoče ročno uveljaviti: $1",
        "tags-update-no-permission": "Nimate dovoljenja za dodajanje ali odstranjevanje oznak na posameznih redakcijah ali dnevniških vnosih.",
-       "tags-update-blocked": "Med blokado ne morete dodati ali odstraniti oznak sprememb.",
+       "tags-update-blocked": "Med blokado {{GENDER:$1|ne morete}} dodati ali odstraniti oznak sprememb.",
        "tags-update-add-not-allowed-one": "Oznake »$1« ni mogoče dodati ročno.",
        "tags-update-add-not-allowed-multi": "{{PLURAL:$2|Naslednje oznake|Naslednji oznaki|Naslednjih oznak}} ni mogoče dodati ročno: $1",
        "tags-update-remove-not-allowed-one": "Oznake »$1« ni mogoče odstraniti.",
index cd2f351..5e04c16 100644 (file)
        "yourname": "Benutzernoame:",
        "yourpassword": "Passwort:",
        "yourpasswordagain": "Passwort wiederhola:",
-       "remembermypassword": "Mit diesem Browser dauerhaft angemeldet bleiben (maximal $1 {{PLURAL:$1|Tag|Tage}})",
        "yourdomainname": "Denne Domain:",
        "externaldberror": "Entweder is leit a Fahler bei der externa Authentifizierung vur, oder du darfst dei externes Benutzerkonto ne aktualisiera.",
        "login": "Oanmelda",
        "undo-failure": "De Änderung konnte ne rickgängig gemacht waan, do dar betroffene Obschnitt zwischazeitlich verändert wurde.",
        "undo-norev": "De Beoarbeetung konnte ne rickgängig gemacht waan, do se ne vorhanden ies oder geläscht wurde.",
        "undo-summary": "Änderung $1 vu [[Special:Contributions/$2|$2]] ([[User talk:$2|Dischkur]]) wurde rickgängig gemacht.",
-       "cantcreateaccounttitle": "Nutzerkonto koan ne erstallt waan",
        "cantcreateaccount-text": "De Erstellung annes Nutzerkontos vu dar IP-Atresse '''($1)''' aus wurde durch [[User:$3|$3]] gesperrt.\n\nGrund dar Sperre: ''$2''",
        "viewpagelogs": "Logbicher fier diese Seite oazeega",
        "nohistory": "'S gitt kenne Versionsgeschichte fier diese Seite.",
index 2697621..f3f52f1 100644 (file)
        "activeusers-intro": "Kjo është një listë e përdoruesve që kanë qenë aktivë për $1 {{PLURAL:$1|ditë|ditë}}.",
        "activeusers-count": "$1 {{PLURAL:$1|redaktim|redaktime}} në {{PLURAL:$3|ditën|$3 ditët}} e fundit",
        "activeusers-from": "Trego përdoruesit duke filluar prej te:",
-       "activeusers-hidebots": "Fshih robotët",
-       "activeusers-hidesysops": "Fshih administratorët",
        "activeusers-noresult": "Asnjë përdorues nuk u gjet.",
        "listgrouprights": "Grupime përdoruesish me privilegje",
        "listgrouprights-summary": "Më poshtë jepet grupimi i përdoruesve sipas privilegjeve që ju janë dhënë në këtë wiki. Më shumë informacion rreth privilegjeve në veçanti mund të gjendet [[{{MediaWiki:Listgrouprights-helppage}}|këtu]].",
index 499ddeb..6b3bcec 100644 (file)
        "yourname": "Kebroikiman nen:",
        "yourpassword": "Psa wortu:",
        "yourpasswordagain": "Psa wortu ete wan leysi:",
-       "remembermypassword": "Tan memre mi kebroikiman nen nanga psa wortu (for a maximum of $1 {{PLURAL:$1|day|days}})",
        "yourdomainname": "Yu domein:",
        "login": "Psa kon",
        "nav-login-createaccount": "Psa kon / meki wan account",
        "template-semiprotected": "(sroto wan pisi)",
        "nocreatetext": "{{SITENAME}} puru den primisi fu meki nyun papira.\nYu kan go baka fu kenki papira di de kba, noso yu kan [[Special:UserLogin|psa kon noso meki wan account]].",
        "recreate-moveddeleted-warn": "'''Warskow: yu e meki wan papira, di ben puru fu dyaso kaba, baka.'''\n\nDenki fosi efu na wan bun sani fu meki a papira disi baka. A log buku fu puru sori dyaso gi yepi:",
-       "cantcreateaccounttitle": "Kan masyin ni skopu.",
        "viewpagelogs": "Luku a log buku fu a papira disi",
        "currentrev": "A versi disi",
        "revisionasof": "Versi tapu $1",
index 3853940..68b29f0 100644 (file)
        "yourname": "Benutsernoome:",
        "yourpassword": "Paaswoud:",
        "yourpasswordagain": "Paaswoud wierhoalje:",
-       "remembermypassword": "Ap dissen Computer duurhaft ounmälded blieuwe (Maximoal foar $1 {{PLURAL:$1|Dai|Deege}})",
        "yourdomainname": "Dien Domain:",
        "externaldberror": "Äntweeder deer lait n Failer bie ju externe Authentifizierenge foar, of du duurst din extern Benutzerkonto nit aktualisierje.",
        "login": "Anmäldje",
        "undo-failure": "Ju Annerenge kuud nit tourääch annerd wäide, deer ju betroffene Oudeelenge intwisken ferannerd wuude.",
        "undo-norev": "Ju Beoarbaidenge kuud nit räägels troald wäide, deer ju nit foarhounden is of läsked wuude.",
        "undo-summary": "Annerenge $1 fon [[Special:Contributions/$2|$2]] ([[User talk:$2|Diskussion]]) wuude tourääch annerd.",
-       "cantcreateaccounttitle": "Benutserkonto kon nit moaked wäide",
        "cantcreateaccount-text": "Dät Moakjen fon n Benutserkonto fon ju IP-Adresse '''$1''' uut wuude fon [[User:$3|$3]] speerd.\n\nGruund fon ju Speere: ''$2''",
        "viewpagelogs": "Logbouke foar disse Siede anwiese",
        "nohistory": "Dät rakt neen fröiere Versione fon dissen Artikkel.",
        "activeusers-intro": "Dit is ne Lieste fon Benutsere, do binne {{PLURAL:$1|dän lääste Dai|do lääste $1 Deege}} Aktivitäte apwiese.",
        "activeusers-count": "$1 {{PLURAL:$1|Beoarbaidenge|Beoarbaidengen}} in do {{PLURAL:$3|lääste 24 Uuren|fergeene $3 Deege}}",
        "activeusers-from": "Wies Benutsere ounfangend mäd:",
-       "activeusers-hidebots": "Bots fersteete",
-       "activeusers-hidesysops": "Administratore fersteete",
        "activeusers-noresult": "Neen Benutsere fuunen.",
        "listgrouprights": "Benutsergruppen-Gjuchte",
        "listgrouprights-summary": "Dit is ne Lieste fon do in dissen Wiki definierde Benutsergruppen un do deermäd ferbuundene Gjuchte.\nInformatione uurhäär uur eenpelde Gjuchte konnen [[{{MediaWiki:Listgrouprights-helppage}}|hier]] fuunen wäide.",
        "htmlform-submit": "Uurdreege",
        "htmlform-reset": "Annerengen touräächtraale",
        "htmlform-selectorother-other": "Uur",
-       "sqlite-has-fts": "Version $1 mäd Unnerstutsenge foar ju Fultäkstsäike",
-       "sqlite-no-fts": "Version $1 sunner Unnerstutsenge foaar ju Fultäkstsäike",
        "revdelete-restricted": "Einskränkengen jäilde uk foar Administratore",
        "revdelete-unrestricted": "Ienskränkengen foar Administratore wächhoald",
        "rightsnone": "(-)",
index ed76949..f191865 100644 (file)
        "yourpasswordagain": "Ketik deui sandi anjeun",
        "createacct-yourpasswordagain": "Konfirmasi kecap sandi",
        "createacct-yourpasswordagain-ph": "Asupkeun deui kecap sandi",
-       "remembermypassword": "Apalkeun login kuring dina ieu komputer (pikeun paling lila $1 {{PLURAL:$1|poé|poé}})",
        "userlogin-remembermypassword": "Jaga ngarah angger asup log",
        "userlogin-signwithsecure": "Paké sambungan aman",
        "yourdomainname": "Domain anjeun",
        "passwordreset-emailtext-user": "Pamaké $1 di {{SITENAME}} ménta nyetél ulang sandi anjeun di {{SITENAME}} ($4). {{PLURAL:$3|Akun}} di handap tumali jeung alamat surélék ieu:\n\n$2\n\n{{PLURAL:$3|Ieu sandi saheulaanan}} bakal kadaluwarsa dina témpo {{PLURAL:$5|sapoé|$5 poé}}.\nAnjeun kudu asup sarta milih sandi anyar ayeuna. Lamun henteu rumasa nyieun ieu pamundut atawa lamun geus inget sandi asli sarta moal ngarobah deui, ieu talatah teu kudu dipaliré.",
        "passwordreset-emailelement": "Sandiasma: \n$1\n\nSandi saheulaanan: \n$2",
        "passwordreset-emailsentemail": "Surélék pikeun nyetél ulang kecap sandi geus dikirim.",
-       "passwordreset-emailsent-capture": "Surélék pikeun nyetél ulang kecap sandi geus dikirim, sakumaha ditémbongkeun di handap.",
-       "passwordreset-emailerror-capture": "Surélék pikeun nyetél ulang kecap sandi geus dijieun, sakumaha ditémbongkeun di handap, tapi gagal ngirim ka {{GENDER:$2|pamaké}}: $1",
        "changeemail": "Ganti alamat surélék",
        "changeemail-header": "Ganti alamat surélék akun",
        "changeemail-no-info": "Anjeun kudu asup log pikeun bisa muka ieu kaca sacara langsung.",
        "undo-norev": "Éditan ieu henteu bisa bolaykeun alatan kaca henteu kapanggih atawa geus dihapus.",
        "undo-summary": "←Ngabolaykeun révisi $1 ku [[Special:Contributions/$2|$2]] ([[User talk:$2|Obrolan]])",
        "undo-summary-username-hidden": "Bolaykeun révisi $1 ku pamaké nyumput",
-       "cantcreateaccounttitle": "Rekening teu bisa dijieun",
        "cantcreateaccount-text": "Nyieun rekening ti ieu alamat IP ('''$1''') dipeungpeuk ku [[User:$3|$3]].\n\nAlesanana $3 cenah ''$2''.",
        "cantcreateaccount-range-text": "Nyieun akun ti alamat IP dina rentang <strong>$1</strong>, kaasup alamat IP anjeun (<strong>$4</strong>), dipeungpeuk ku [[User:$3|$3]].\n\nAlesan $3 nyaéta <em>$2</em>",
        "viewpagelogs": "Tempo log kaca ieu",
        "activeusers-intro": "Ieu béréndélan kontributor anu geus ngoprék $1 {{PLURAL:$1|poé|poé}} panungtung.",
        "activeusers-count": "$1 {{PLURAL:$1|édit|édit}}an salila {{PLURAL:$3|poé|$3 poé}} panungtung",
        "activeusers-from": "Témbongkeun kontributor dimimitian ku:",
-       "activeusers-hidebots": "Sumputkeun bot",
-       "activeusers-hidesysops": "Sumputkeun kuncén",
        "activeusers-noresult": "Teu kapendak.",
        "listgrouprights": "Hak-hak grup pamaké",
        "listgrouprights-summary": "Ieu mangrupa daptar jumplukan pamaké anu aya di wiki ieu, kalawan daptar hak aksés maranéhanana.\nÉmbaran leuwih luyu ngeunaan hak pamaké bisa ditingali di [[{{MediaWiki:Listgrouprights-helppage}}|dieu]].",
index 333ab9f..6bef664 100644 (file)
        "botpasswords-label-delete": "Radera",
        "botpasswords-label-resetpassword": "Återställ lösenordet",
        "botpasswords-label-grants": "Tillgängliga beviljanden:",
-       "botpasswords-help-grants": "Varje beviljande ger åtkomst till listade användarrättigheter som ett användarkonto redan har. Se [[Special:ListGrants|tabellen över beviljanden]] för mer information.",
+       "botpasswords-help-grants": "Beviljande ger åtkomst till användarrättigheter som ditt användarkonto redan har. När ett beviljande aktiveras här ger det inte åtkomst till de användarrättigheter som ditt användarkonto inte annars skulle ha. Se [[Special:ListGrants|tabellen över beviljanden]] för mer information.",
        "botpasswords-label-grants-column": "Beviljas",
        "botpasswords-bad-appid": "Botnamnet \"$1\" är inte giltigt.",
        "botpasswords-insert-failed": "Kunde inte lägga till botnamnet \"$1\". Har det redan lagts till?",
        "passwordreset-emaildisabled": "E-postfunktioner har inaktiverats på denna wiki.",
        "passwordreset-username": "Användarnamn:",
        "passwordreset-domain": "Domän:",
-       "passwordreset-capture": "Visa resulterande e-post?",
-       "passwordreset-capture-help": "Om du markerar den här rutan kommer e-postmeddelandet (med det tillfälliga lösenordet) visas för dig och skickas till användaren.",
        "passwordreset-email": "E-postadress:",
        "passwordreset-emailtitle": "Kontouppgifter på {{SITENAME}}",
        "passwordreset-emailtext-ip": "Någon (förmodligen du, från IP-adressen $1) begärde en återställning av ditt lösenord för {{SITENAME}} ($4). Följande användar{{PLURAL:$3|konto är förknippad|konton är förknippade}} med denna e-postadress:\n\n$2\n\n{{PLURAL:$3|Detta|Dessa}} tillfälliga lösenord kommer att gå ut om {{PLURAL:$5|en dag|$5 dagar}}.\nDu bör logga in och välja ett nytt lösenord nu. Om någon annan gjorde denna begäran, eller om du kommer ihåg ditt ursprungliga lösenord, och inte längre önskar ändra det, kan du ignorera detta meddelande och fortsätta använda ditt gamla lösenord.",
        "passwordreset-emailelement": "Användarnamn: \n$1\n\nTillfälligt lösenord: \n$2",
        "passwordreset-emailsentemail": "Om denna e-postadress är associerad med ditt konto kommer en lösenordsåterställning skickas via e-post.",
        "passwordreset-emailsentusername": "Om det finns en e-postadress som associeras med detta användarnamn kommer en lösenordsåterställning skickas via e-post.",
-       "passwordreset-emailsent-capture2": "{{PLURAL:$1|E-postmeddelande|E-postmeddelanden}} för återställning av lösenord har skickats. {{PLURAL:$1|Användarnamnet och lösenordet|Listan över användarnamn och lösenord}} visas här.",
-       "passwordreset-emailerror-capture2": "Kunde inte skicka e-post till {{GENDER:$2|användaren}}: $1 {{PLURAL:$3|Användarnamnet och lösenordet|Listan över användarnamn och lösenord}} listas här.",
        "passwordreset-nocaller": "En användare måste anges",
        "passwordreset-nosuchcaller": "Användare finns inte: $1",
        "passwordreset-ignored": "Lösenordsåterställningen hanterades inte. Kanske ingen leverantör har konfigurerats?",
-       "passwordreset-invalideamil": "Ogiltig e-postadress",
+       "passwordreset-invalidemail": "Ogiltig e-postadress",
        "passwordreset-nodata": "Varken ett användarnamn eller en e-postadress angavs",
        "changeemail": "Ändra eller ta bort e-postadress",
        "changeemail-header": "Fyll i detta formulär för att ändra din e-postadress. Om du vill ta bort en associerad e-postadress från ditt konto lämnar du fältet för ny e-postadress tomt när formuläret skickas in.",
        "right-siteadmin": "Lås och öppna databasen",
        "right-override-export-depth": "Exportera sidor inklusive länkade sidor till ett djup på 5",
        "right-sendemail": "Skicka e-post till andra användare",
-       "right-passwordreset": "Visa e-postmeddelanden med lösenordsåterställning",
        "right-managechangetags": "Skapa och (in)aktivera [[Special:Tags|märken]]",
        "right-applychangetags": "Tillämpa [[Special:Tags|märken]] tillsammans med ens ändringar",
        "right-changetags": "Lägg till och ta bort godtyckliga [[Special:Tags|märken]] på individuella sidversioner och loggposter.",
        "apisandbox-continue": "Fortsätt",
        "apisandbox-continue-clear": "Rensa",
        "apisandbox-continue-help": "{{int:apisandbox-continue}} kommer att [https://www.mediawiki.org/wiki/API:Query#Continuing_queries fortsätta] den sista begäran; {{int:apisandbox-continue-clear}} kommer att rensa fortsättningsrelaterade parametrar.",
+       "apisandbox-param-limit": "Ange <kbd>max</kbd> för att använda den maximala gränsen.",
        "booksources": "Bokkällor",
        "booksources-search-legend": "Sök efter bokkällor",
        "booksources-search": "Sök",
        "patrol-log-header": "Detta är en logg över patrullerade sidversioner.",
        "log-show-hide-patrol": "$1 patrulleringslogg",
        "log-show-hide-tag": "$1 märkeslogg",
+       "confirm-markpatrolled-button": "OK",
+       "confirm-markpatrolled-top": "Markera sidversionen $3 av $2 som patrullerad?",
        "deletedrevision": "Raderade gammal sidversion $1",
        "filedeleteerror-short": "Fel vid radering av fil: $1",
        "filedeleteerror-long": "Fel inträffade vid raderingen av filen:\n\n$1",
        "tags-deactivate": "inaktivera",
        "tags-hitcount": "$1 {{PLURAL:$1|ändring|ändringar}}",
        "tags-manage-no-permission": "Du har inte behörighet att hantera förändringsmärken.",
-       "tags-manage-blocked": "Du kan inte hantera förändringsmärken när du är blockerad.",
+       "tags-manage-blocked": "Du kan inte hantera förändringsmärken när {{GENDER:$1|du}} är blockerad.",
        "tags-create-heading": "Skapa ett nytt märke",
        "tags-create-explanation": "Som standard, kommer nyskapade märken att bli tillgängliga för användning av användare och botar.",
        "tags-create-tag-name": "Märkesnamn:",
        "tags-deactivate-not-allowed": "Det är inte möjligt att inaktivera märket \"$1\".",
        "tags-deactivate-submit": "Inaktivera",
        "tags-apply-no-permission": "Du har inte behörighet att tillämpa ändringsmärken på dina ändringar.",
-       "tags-apply-blocked": "Du kan inte ange ändringsmärken med dina ändringar medans du är blockerad.",
+       "tags-apply-blocked": "Du kan inte ange ändringsmärken med dina ändringar när {{GENDER:$1|du}} är blockerad.",
        "tags-apply-not-allowed-one": "Märket \"$1\" kan inte läggas till manuellt.",
        "tags-apply-not-allowed-multi": "Följande {{PLURAL:$2|märke|märken}} kan inte läggas till manuellt: $1",
        "tags-update-no-permission": "Du har inte behörighet att lägga till eller ta bort märken från individuella sidversioner eller loggposter.",
-       "tags-update-blocked": "Du kan inte lägga till eller ta bort ändringsmärken när du är blockerad.",
+       "tags-update-blocked": "Du kan inte lägga till eller ta bort ändringsmärken när {{GENDER:$1|du}} är blockerad.",
        "tags-update-add-not-allowed-one": "Märket \"$1\" kan inte läggas till manuellt.",
        "tags-update-add-not-allowed-multi": "Följande {{PLURAL:$2|märke|märken}} kan inte läggas till manuellt: $1",
        "tags-update-remove-not-allowed-one": "Märket \"$1\" får inte tas bort.",
        "authmanager-authn-autocreate-failed": "Kunde inte skapa ett lokalt konto automatiskt: $1",
        "authmanager-change-not-supported": "De angivna inloggningsuppgifterna kan inte ändras, då ingenting kan använda dem.",
        "authmanager-create-disabled": "Kontoregistrering är inaktiverat.",
-       "authmanager-create-from-login": "Fyll i fälten nedan för att skapa ditt konto.",
+       "authmanager-create-from-login": "Fyll i fälten för att skapa ditt konto.",
        "authmanager-create-not-in-progress": "Skapande av konto pågår inte eller så har sessionsdata förlorats. Var god börja om från början igen.",
        "authmanager-create-no-primary": "De angivna inloggningsuppgifterna kunde inte användas för att skapa ett konto.",
        "authmanager-link-no-primary": "De angivna inloggningsuppgifterna kunde inte användas för att länka ett konto.",
index 6ab227a..44b15e8 100644 (file)
@@ -17,7 +17,8 @@
                        "Rich Farmbrough",
                        "Kipala",
                        "Kwisha",
-                       "Macofe"
+                       "Macofe",
+                       "Muddyb"
                ]
        },
        "tog-underline": "Wekea mstari viungo:",
        "yourpasswordagain": "Andika tena neno la siri",
        "createacct-yourpasswordagain": "Thibitisha neno la siri",
        "createacct-yourpasswordagain-ph": "Weka neno la siri tena",
-       "remembermypassword": "Kumbuka kuingia kwangu katika kivinjari hiki (kwa muda usiozidi {{PLURAL:$1|siku}} $1)",
        "userlogin-remembermypassword": "Niweke kama nimeingia",
        "userlogin-signwithsecure": "Tumia muunganisho salama",
        "yourdomainname": "Tovuti yako:",
        "passwordreset-emailtext-user": "Mtumiaji $1 kwenye {{SITENAME}} ameomba neno la siri la akaunti yako liwekwe upya katika {{SITENAME}} ($4). {{PLURAL:$3|Akaunti inayofuata imeunganishwa|Akaunti zinazofuata zimeunganishwa}} na anwani ya barua pepe hii:\n\n$2\n\n{{PLURAL:$3|Neno la siri hili litakwisha|Maneno ya siri haya yatakwisha}} baada ya siku {{PLURAL:$5|one day|$5 siku}}.\nTafadhali ingia sasa na uchague neno jipya la siri. Kama mtu mwingine ameomba hili, au ikiwa umekumbuka neno lako la siri na hutaki kulibadilisha tena, basi usijali ujumbe huu, na uendelee kutumia neno la siri lako la zamani.",
        "passwordreset-emailelement": "Jina la mtumiaji: \n$1\n\nNeno la siri la muda: \n$2",
        "passwordreset-emailsentemail": "Barua pepe ya ukumbusho wa neno la siri imetumwa.",
-       "passwordreset-emailsent-capture": "Barua pepe ya ukukumbusho wa neno la siri imetumwa, ambayo inaonekana hapo chini.",
-       "passwordreset-emailerror-capture": "Barua pepe ya ukukumbusho wa neno la siri imetengenezwa, ambayo inaonekana hapo chini, lakini kuituma kwa mtumiaji {{GENDER:$2|user}} kumeshindikana: $1",
        "changeemail": "Badilisha anwani ya barua pepe",
        "changeemail-header": "Badilisha anwani ya barua pepe ya akaunti yako",
        "changeemail-no-info": "Lazima uwe umeingia ili kuweza kutumia kurasa hii moja kwa moja.",
        "undo-nochange": "Hariri inaonekana kuwa tayari imerudishwa tena.",
        "undo-summary": "Tengua pitio $1 lililoandikwa na [[Special:Contributions/$2|$2]] ([[User talk:$2|Majadiliano]])",
        "undo-summary-username-hidden": "Tednua toleo $1 na mtumiaji aliyejificha",
-       "cantcreateaccounttitle": "Kushindwa kusajili akaunti",
        "cantcreateaccount-text": "Kusajili akaunti kwa kutumia anwani ya IP hii ('''$1''') imezuiwa na [[User:$3|$3]].\n\nSababu iliyotolewa na $3 ni ''$2''",
        "viewpagelogs": "Tazama kumbukumbu kwa ukurasa huu",
        "nohistory": "Hakuna historia ya kuhariri kwa ajili ya ukurasa huu.",
        "activeusers-intro": "Hii ni orodha ya watumiaji walioshughulika jambo fulani ndani ya siku $1 {{PLURAL:$1|iliyopita|zilizopita}}.",
        "activeusers-count": "{{PLURAL:$1|haririo|maharirio}} $1 katika siku $3 {{PLURAL:$3|iliyopita|zilizopita}}",
        "activeusers-from": "Onyesha watumiaji kuanzia:",
-       "activeusers-hidebots": "Ficha boti",
-       "activeusers-hidesysops": "Ficha wakabidhi",
        "activeusers-noresult": "Watumiaji hawakupatikana.",
        "listgrouprights": "Wezo za kundi za watumiaji",
        "listgrouprights-summary": "Inafuata orodha ya kundi za watumiaji wa wiki hii, pamoja na maelezo ya wezo zao za kushughulika mambo.\nLabda patakuwa na [[{{MediaWiki:Listgrouprights-helppage}}|maelezo mengine]] kuhusu wezo zingine.",
        "feedback-back": "Rudi",
        "feedback-cancel": "Batilisha",
        "feedback-close": "Tayari",
-       "feedback-error-title": "Kosa",
        "feedback-error1": "Hitilafu: Hatokeo ya API hayafahamiki",
        "feedback-error2": "Hitilafu: Hariri haikufaulu",
        "feedback-error3": "Hitilafu: API ya wiki haitoi majibu",
index c065fce..7fd903d 100644 (file)
        "botpasswords-label-resetpassword": "கடவுச்சொலை மீளமை",
        "botpasswords-label-grants": "பொருந்தும் மானியங்கள்:",
        "botpasswords-help-grants": "ஒவ்வொரு மானியம் ஏற்கனவே உள்ள பயனர் கணக்குக்கு வரையறுக்கப்பட்ட பயனர் உரிமைகள் அணுக கொடுக்கிறது. மேலதிக விபரங்ளுக்கு [[சிறப்பு:ListGrants|மானியங்களின் அட்டவணையை]] பார்க்க.",
-       "botpasswords-label-restrictions": "பயன்பாட்டு வரையறைகள்:",
        "botpasswords-label-grants-column": "வழங்கப்பட்டது",
        "botpasswords-bad-appid": "\"$1\" என்ற தானியங்கி பெயர் பயன்படாதது.",
        "botpasswords-insert-failed": "\"$1\" என்ற தானியங்கி பெயரை இணைக்க முடியவில்லை. ஏற்கனவே இருக்குமோ?",
        "activeusers-intro": "கடைசி $1 {{PLURAL:$1|நாள்|நாட்கள்}} ஏதேனும் செயலை செய்த பயனர்களின் பட்டியல் இது.",
        "activeusers-count": "$1 {{PLURAL:$1|திருத்தம்|திருத்தங்கள்}} கடைசி {{PLURAL:$3|நாள்|$3 நாட்கள்}}",
        "activeusers-from": "பின்வரும் எழுத்துடன் தொடங்கும் பயனர்களைக் காட்டு:",
-       "activeusers-hidebots": "தானியங்கிகளை மறை",
-       "activeusers-hidesysops": "நிர்வாகிகளை மறை",
        "activeusers-noresult": "எந்தவொரு பயனர்களும் காணப்படவில்லை.",
        "activeusers-submit": "தொடர் பங்களிப்பாளர்களை காட்டு",
        "listgrouprights": "பயனர் குழு உரிமைகள்",
        "feedback-close": "முடிந்தது",
        "feedback-external-bug-report-button": "ஒரு தொழில்நுட்ப பணியைச் சமர்ப்பி",
        "feedback-dialog-title": "பின்னூட்டத்தை சமர்ப்பி",
-       "feedback-error-title": "பிழை",
        "feedback-error1": "பிழை: API லிருந்து அங்கீகரிக்கப்படாத முடிவு.",
        "feedback-error2": "பிழை: திருத்தல்  தோல்வியடைந்தது",
        "feedback-error3": "பிழை: API லிருந்து பதிற்குறிப்பு எதுவும் இல்லை.",
index 315a732..9277032 100644 (file)
        "passwordreset-username": "ಸದಸ್ಯೆರ್ನ ಪುದರ್:",
        "passwordreset-domain": "ಕ್ಷೇತ್ರೊ:",
        "passwordreset-email": "ಇ-ಅಂಚೆ ವಿಳಾಸೊ",
-       "passwordreset-invalideamil": "ಇಮೇಲ್ ಸರಿ ಇಜ್ಜಿ",
+       "passwordreset-invalidemail": "ಇಮೇಲ್ ಸರಿ ಇಜ್ಜಿ",
        "changeemail-oldemail": "ಇತ್ತೆತಾ ಈಮೇಲ್ ವಿಳಾಸೊ:",
        "changeemail-newemail": "ಪೊಸ ಇ-ಅಂಚೆ ವಿಳಾಸೊ:",
        "changeemail-none": "ಒವ್ವುಲಾ ಇಜ್ಜಿ",
        "searchprofile-everything-tooltip": "ಮಾತ ಮಾಹಿತಿಲೆನ್ ನಾಡ್‍ಲೆ (ಪಾತೆರದ ಪುಟೊಲ ಸೇರ್ದ್)",
        "searchprofile-advanced-tooltip": "ಬಳಕೆದ ನಾಮೊವರ್ಗೊಡು ನಾಡ್‍ಲೆ",
        "search-result-size": "$1 ({{PLURAL:$2|೧ ಪದೊ|$2 ಪದೊಕುಲು}})",
-       "search-redirect": "(ಪಿರ ನಿರ್ದೇಶನೊ $1)",
+       "search-redirect": "($1 ಡ್ದ್ ಪಿರ ನಿರ್ದೇಸನೊದ)",
        "search-section": "(ವಿಬಾಗೊ $1)",
        "search-suggest": "ಇಂದೆನ್ ನಾಡೊಂದುಲ್ಲರೆ: $1",
        "search-interwiki-caption": "ಬಳಗದ ಇತರ ಯೋಜನೆಲು",
        "logentry-move-move": "$1 {{GENDER:$2|ಜಾರಲೆ}} ಪುಟೊ $3 ಡ್ದ್ $4",
        "logentry-newusers-create": "ಬಳಕೆದಾರೆರೆ ಕಾತೆ $1 ನ್ನು {{GENDER:$2|ಸ್ರಿಸ್ಟಿ ಮಲ್ತಾಂಡ್}}",
        "logentry-upload-upload": "$1 {{GENDER:$2|ಅಪ್ಲೋಡ್ ಮಲ್ತ್‌ದೆರ್}} $3",
-       "searchsuggest-search": "ನಾಡ್‍ಲೆ"
+       "searchsuggest-search": "{{SITENAME}}ನ್ ನಾಡ್‍ಲೆ"
 }
index 3ec4110..d33657c 100644 (file)
        "passwordreset-emailsentusername": "ఈ వాడుకరిపేరుకు ఏదైనా ఈమెయిలు చిరునామా అనుసంధించి ఉంటే, సంకేతపదం మార్పు ఈమెయిలు పంపించబడుతుంది.",
        "passwordreset-emailsent-capture2": "సంకేతపదం మార్పు {{PLURAL:$1|ఈమెయిలును|ఈమెయిళ్ళను}} పంపించాం. {{PLURAL:$1|వాడుకరిపేరు, సంకేతపదాన్ని|వాడుకరిపేర్లు, సంకేతపదాల జాబితాను}} ఇక్కడ చూపించాం.",
        "passwordreset-emailerror-capture2": "{{GENDER:$2|వాడుకరికి}} ఈమెయిలు పంపడం విఫలమైంది: $1 {{PLURAL:$3|వాడుకరిపేరు, సంకేతపదాన్ని|వాడుకరిపేర్లు, సంకేతపదాల జాబితాను}} ఇక్కడ చూపించాం.",
-       "passwordreset-invalideamil": "తప్పు ఈ-మెయిలు చిరునామా",
+       "passwordreset-invalidemail": "తప్పు ఈ-మెయిలు చిరునామా",
        "passwordreset-nodata": "వాడుకరిపేరుగానీ, ఈ-మెయిలు చిరునామా గానీ ఇవ్వలేదు",
        "changeemail": "ఈ-మెయిలు చిరునామా మార్పు లేదా తొలగింపు",
        "changeemail-header": "మీ ఈ-మెయిల్ చిరునామాను మార్చుకునేందుకు ఈ ఫారమును నింపండి. అసలు మీ ఖాతాకు ఈ-మెయిలు చిరునామా దేన్నీ జోడించ వద్దనుకుంటే, కొత్త ఈ-మెయిలు చిరునామాను ఖాళీగా ఉంచి, ఫారాన్ని సమర్పించండి.",
index a224d42..15341c8 100644 (file)
        "nocreate-loggedin": "Ó la bele kria pájina foun.",
        "permissionserrorstext": "Ó la bele halo ne'e; {{PLURAL:$1|motivu|motivu sira}}:",
        "permissionserrorstext-withaction": "Ita la bele $2. {{PLURAL:$1|Razaun|Razaun sira}}:",
-       "cantcreateaccounttitle": "La bele registrar uza-na'in",
        "currentrev": "Versaun atuál",
        "revisionasof": "Versaun $1 nian",
        "revision-info": "Revisaun loron $4, tempu $5, husi $2",
        "linksearch-ns": "Espasu pájina nian:",
        "linksearch-ok": "Buka",
        "listusers-submit": "Hatudu",
-       "activeusers-hidebots": "Subar bot sira",
-       "activeusers-hidesysops": "Subar administradór sira",
        "listgrouprights-group": "Grupu",
        "listgrouprights-rights": "Priviléjiu",
        "listgrouprights-members": "(lista membru nian)",
index f7826ab..77ac744 100644 (file)
        "yourpasswordagain": "Калимаи убурро боз нависед",
        "createacct-yourpasswordagain": "Тасдиқи гузарвожа",
        "createacct-yourpasswordagain-ph": "Гузарвожаро бори дигар ворид кунед",
-       "remembermypassword": "Вуруди манро дар ин мурургар дар хотир нигоҳ дор (то ҳадди аксар $1 {{PLURAL:$1|рӯз|рӯз}})",
        "userlogin-remembermypassword": "Вурудшуда манро нигоҳ дор",
        "userlogin-signwithsecure": "Истифодаи пайвастшавии амн",
        "yourdomainname": "Домейни Шумо",
        "undo-success": "Ин вироиш метавонад ботил шавад. Лутфан муқоисаи зеринро барои таъйид кардани амалӣ худ, баррасӣ кунед, ва баъдан барои анҷом додани ботилкунии вироиш тағйироти зеринро захира кунед.",
        "undo-failure": "Ба иллати бархӯрдани вироишҳои дар миён омада, ин вироишро ботил наметавон кард.",
        "undo-summary": "Ботили нусхаи $1 аз тарафи [[Special:Contributions/$2|$2]] ([[User talk:$2|Баҳс]])",
-       "cantcreateaccounttitle": "Ҳисобе сохта наметавонам",
        "cantcreateaccount-text": "Имкони сохтани ҳисоби корбарӣ аз ин нишонаи IP ('''$1''') аз тарафи [[User:$3|$3]] баста шудааст.\n\nДалели $3 чунин аст ''$2''",
        "viewpagelogs": "Намоиши гузоришҳои марбута ба ин саҳифа",
        "nohistory": "Таърихи вироиш барои ин саҳифа вуҷуд надорад.",
index 6340644..a577ebe 100644 (file)
        "yourname": "Nomi korbar",
        "yourpassword": "Kalimai ubur\\parolь",
        "yourpasswordagain": "Kalimai uburro boz navised",
-       "remembermypassword": "Vurudi manro dar in mururgar dar xotir nigoh dor (to haddi aksar $1 {{PLURAL:$1|rūz|rūz}})",
        "yourdomainname": "Domejni Şumo",
        "externaldberror": "Xatoe dar irtibot bo pojgohi doda rux doda ast jo in ki şumo içozat ba rūzrasoniji hisobi beruniji xudro nadored.",
        "login": "Vurud",
        "undo-success": "In viroiş metavonad botil şavad. Lutfan muqoisai zerinro baroi ta'jid kardani amalī xud, barrasī kuned, va ba'dan baroi ançom dodani botilkuniji viroiş taƣjiroti zerinro zaxira kuned.",
        "undo-failure": "Ba illati barxūrdani viroişhoi dar mijon omada, in viroişro botil nametavon kard.",
        "undo-summary": "Botili nusxai $1 az tarafi [[Special:Contributions/$2|$2]] ([[User talk:$2|Bahs]])",
-       "cantcreateaccounttitle": "Hisobe soxta nametavonam",
        "cantcreateaccount-text": "Imkoni soxtani hisobi korbarī az in nişonai IP ('''$1''') az tarafi [[User:$3|$3]] basta şudaast.\n\nDaleli $3 cunin ast ''$2''",
        "viewpagelogs": "Namoişi guzorişhoi marbuta ba in sahifa",
        "nohistory": "Ta'rixi viroiş baroi in sahifa vuçud nadorad.",
index 656ea39..0f8246d 100644 (file)
@@ -26,7 +26,8 @@
                        "Pilarbini",
                        "Matma Rex",
                        "B20180",
-                       "Pon44695"
+                       "Pon44695",
+                       "Aefgh39622"
                ]
        },
        "tog-underline": "การขีดเส้นใต้ลิงก์:",
        "yourpasswordagain": "พิมพ์รหัสผ่านอีกครั้ง:",
        "createacct-yourpasswordagain": "ยืนยันรหัสผ่าน",
        "createacct-yourpasswordagain-ph": "กรอกรหัสผ่านอีกครั้ง",
-       "remembermypassword": "จำการล็อกอินของฉันบนเบราเซอร์นี้ (นานสุด $1 วัน)",
        "userlogin-remembermypassword": "ให้ฉันอยู่ในระบบต่อ",
        "userlogin-signwithsecure": "ใช้การเชื่อมต่อที่ปลอดภัย",
        "cannotloginnow-title": "ไม่สามารถล็อกเอาต์ได้ขณะนี้",
        "passwordreset-emaildisabled": "วิกินี้ปิดใช้งานคุณลักษณะอีเมล",
        "passwordreset-username": "ชื่อผู้ใช้:",
        "passwordreset-domain": "โดเมน:",
-       "passwordreset-capture": "ดูอีเมลที่ได้หรือไม่",
-       "passwordreset-capture-help": "หากคุณเลือกกล่องนี้ จะแสดงอีเมลดังกล่าว (พร้อมรหัสผ่านชั่วคราว) แก่คุณ เช่นเดียวกับส่งไปยังผู้ใช้",
        "passwordreset-email": "ที่อยู่อีเมล:",
        "passwordreset-emailtitle": "รายละเอียดบัญชีบน {{SITENAME}}",
        "passwordreset-emailtext-ip": "บางคน (ซึ่งอาจเป็นคุณ จากเลขที่อยู่ไอพี $1) ขอตั้งรหัสผ่านของคุณใหม่บน{{SITENAME}} ($4) บัญชีผู้ใช้ดังกล่าวเกี่ยวข้องกับที่อยู่อีเมลนี้:\n\n$2\n\n{{PLURAL:$3|รหัสผ่านชั่วคราวนี้|รหัสผ่านชั่วคราวเหล่านี้}}จะหมดอายุใน $5 วัน\nตอนนี้คุณควรล็อกอินและเลือกรหัสผ่านใหม่ หากบุคคลอื่นขอตั้งรหัสผ่านใหม่นี้ หรือคุณจำรหัสผ่านเดิมของคุณได้แล้ว และคุณไม่ต้องการเปลี่ยนรหัสผ่านอีก คุณอาจละเลยข้อความนี้และใช้รหัสผ่านเดิมของคุณต่อไป",
        "searchprofile-advanced-tooltip": "ค้นหาในเนมสเปซที่เลือกเอง",
        "search-result-size": "$1 ($2 คำ)",
        "search-result-category-size": "$1 สมาชิก ($2 หมวดหมู่ย่อย, $3 ไฟล์)",
-       "search-redirect": "(เปลี่ยนทาง $1)",
+       "search-redirect": "(เปลี่ยนทางจาก $1)",
        "search-section": "(ส่วน $1)",
        "search-category": "(หมวดหมู่ $1)",
        "search-file-match": "(เนื้อหาไฟล์ตรง)",
        "right-siteadmin": "ล็อกและปลดล็อกฐานข้อมูล",
        "right-override-export-depth": "ส่งออกหน้า รวมหน้าที่เชื่อมโยงกับหน้านี้สูงสุด 5 ลำดับชั้น",
        "right-sendemail": "ส่งอีเมลหาผู้ใช้อื่น",
-       "right-passwordreset": "ดูอีเมลตั้งรหัสผ่านใหม่",
        "grant-group-email": "ส่งอีเมล",
        "grant-createaccount": "สร้างบัญชี",
        "grant-createeditmovepage": "สร้าง แก้ไข และย้ายหน้า",
        "activeusers-intro": "นี่คือรายการผู้ใช้ที่มีกิจกรรมใด ๆ ในช่วง $1 วันหลังสุด",
        "activeusers-count": "$1 ปฏิบัติการ{{PLURAL:$1|}} ในช่วง $3 วันหลังสุด",
        "activeusers-from": "แสดงผู้ใช้เริ่มจาก:",
-       "activeusers-hidebots": "ซ่อนบอต",
-       "activeusers-hidesysops": "ซ่อนผู้ดูแลระบบ",
        "activeusers-noresult": "ไม่พบผู้ใช้",
        "activeusers-submit": "แสดงผู้ใช้ที่ยังมีกิจกรรม",
        "listgrouprights": "สิทธิกลุ่มผู้ใช้",
        "htmlform-title-not-exists": "ไม่มี $1",
        "htmlform-user-not-exists": "ไม่มี <strong>$1</strong>",
        "htmlform-user-not-valid": "<strong>$1</strong> มิใช่ชื่อผู้ใช้ที่สมเหตุสมผล",
-       "sqlite-has-fts": "รุ่น $1 พร้อมการสนับสนุนการค้นหาข้อความแบบเต็ม",
-       "sqlite-no-fts": "รุ่น $1 โดยไม่มีการสนับสนุนการค้นหาข้อความแบบเต็ม",
        "logentry-delete-delete": "$1 ลบหน้า $3",
        "logentry-delete-restore": "$1 กู้คืนหน้า $3",
        "logentry-delete-event": "$1 เปลี่ยนทัศนวิสัยของ $5 รายการปูมใน $3: $4",
        "feedback-subject": "เรื่อง:",
        "feedback-submit": "ตกลง",
        "feedback-thanks": "ขอบคุณ! ผลป้อนกลับของคุณถูกโพสต์ไปยังหน้า \"[$2 $1]\" แล้ว",
-       "searchsuggest-search": "ค้นหา",
+       "searchsuggest-search": "ค้นหา {{SITENAME}}",
        "searchsuggest-containing": "มี...",
        "api-error-badaccess-groups": "คุณไม่ได้รับอนุญาตให้อัปโหลดไฟล์มายังวิกินี้",
        "api-error-empty-file": "ไฟล์ที่คุณส่งมานั้นว่าง",
index 7ec316c..5d6b0b2 100644 (file)
        "yourname": "Ulanyjy adyňyz:",
        "yourpassword": "Parolyňyz:",
        "yourpasswordagain": "Paroly gaýtadan ýaz:",
-       "remembermypassword": "Sessiýamy şu kompýuterde ýatda sakla  (iň köp $1 {{PLURAL:$1|günläp|günläp}})",
        "yourdomainname": "Siziň domeniňiz:",
        "externaldberror": "Ýa tassyklama maglumat bazasynyň säwligi bar ýa-da öz ulanyjy hasabyňyzy täzelemegiňize rugsat berilmeýär.",
        "login": "Hasaba gir",
        "undo-failure": "Gapma-garşylykly aralyk özgerdişler zerarly bu özgerdişi yzyna alyp bolmaýar.",
        "undo-norev": "Özgerdişi yzyna alyp bolmaýar, sebäbi ol ýok ýa-da öçürilipdir.",
        "undo-summary": "$1 wersiýasy [[Special:Contributions/$2|$2]] ([[User talk:$2|Çekişme]]) tarapyndan yzyna alyndy.",
-       "cantcreateaccounttitle": "Hasap döredip bolmaýar",
        "cantcreateaccount-text": "Bu IP adresinden ('''$1''') ulanyjy hasaby döretmeklik [[User:$3|$3]] tarapyndan blokirlenipdir.\n\n$3 tarapyndan görkezilen sebäp: ''$2''",
        "viewpagelogs": "Bu sahypanyň gündeliklerini görkez",
        "nohistory": "Bu sahypanyň özgerdişler geçmişi ýok.",
        "activeusers-intro": "Bu sanawda soňky $1 {{PLURAL:$1|günüň|günüň}} dowamynda nähilidir bir iş geçiren ulanyjylar görkezilýär.",
        "activeusers-count": "Soňky {{PLURAL:$3|günde|$3 günde}} $1 sany {{PLURAL:$1|özgerdiş|özgerdiş}}",
        "activeusers-from": "Şunuň bilen başlaýan ulanyjylary görkez:",
-       "activeusers-hidebots": "Botlary gizle",
-       "activeusers-hidesysops": "Administratorlary gizle",
        "activeusers-noresult": "Ulanyjy tapylmady.",
        "listgrouprights": "Ulanyjy topary hukuklary",
        "listgrouprights-summary": "Aşakda şu wikide kesgitlenen ulanyjy toparlarynyň hem-de olaryň degişli ulanmak hukuklarynyň sanawy berilýär.\nŞahsy hukuklar barada [[{{MediaWiki:Listgrouprights-helppage}}|goşmaça maglumat]] bar bolup biler.",
        "htmlform-submit": "Tabşyr",
        "htmlform-reset": "Üýtgeşmeleri yzyna al",
        "htmlform-selectorother-other": "Başga",
-       "sqlite-has-fts": "$1 (doly tekstli gözleg goldawly)",
-       "sqlite-no-fts": "$1 (doly tekstli gözleg goldawsyz)",
        "revdelete-restricted": "administratorlara goýlan çäklendirmeler",
        "revdelete-unrestricted": "administratorlardan aýyrylan çäklendirmeler",
        "rightsnone": "(hiç biri)",
index 6a78e81..b9f1bc2 100644 (file)
        "yourname": "Иштирокәкә ном:",
        "yourpassword": "Парол:",
        "yourpasswordagain": "Пароли сәнибәтон гырдә карде:",
-       "remembermypassword": "Мыни ым компутерәдә јодәдә огәт (максимум $1 {{PLURAL:$1|руж|руж}})",
        "login": "Ыштәни едаштеј",
        "nav-login-createaccount": "Ыштәни едаштеј / ыштәни ғејд кардовнијеј",
        "userlogin": "Ыштәни едаштеј / ыштәни ғејд кардовнијеј",
index dd64e03..812e34d 100644 (file)
        "yourname": "Hingoa ʻetita",
        "yourpassword": "Leatapu",
        "yourpasswordagain": "Toe ʻai leatapu",
-       "remembermypassword": "Manatuʻi au (for a maximum of $1 {{PLURAL:$1|day|days}})",
        "yourdomainname": "ho ngāueʻanga",
        "login": "Kau ki ai",
        "nav-login-createaccount": "Kau ki ai",
        "templatesusedpreview": "Ngaahi sīpinga ʻoku ngāueʻaki he vakaí ni:",
        "templatesusedsection": "Ngaahi sīpinga ʻoku ngāueʻaki he kongá ni:",
        "nocreatetext": "Naʻe fakangatangata ʻe he tuʻuʻangá ni ʻa e lava ke fakatupu ha peesi foʻou. ʻOku ke lava ke foki pea fatu ha peesi tuʻu, pe [[Special:UserLogin|kau-ki-ai, pe fakatupu ha tohi-kau-ki-ai]].",
-       "cantcreateaccounttitle": "ʻOku ʻikai lava fakatupu e tohi kau-ki-ai",
        "viewpagelogs": "Vakai ki he ngaahi tohinoa ʻo e pēsí ni",
        "nohistory": "ʻOku ʻikai ʻi ai ha hisitōlia fatu maʻa e kupú ni.",
        "currentrev": "Paaki taka",
index 0e572ce..abde066 100644 (file)
        "viewsource": "Lukim as tok",
        "yourname": "Yusanem:",
        "yourpassword": "Paswot:",
-       "remembermypassword": "Holim yusanem bilong mi long dispela komputa (holim pas longpela taim $1 {{PLURAL:$1|de|de}})",
        "login": "Log in",
        "userloginnocreate": "Log in",
        "logout": "Logaut",
index 735038a..cbf3596 100644 (file)
        "passwordreset-emailelement": "Kullanıcı adı: \n$1\n\nGeçici şifre: \n$2",
        "passwordreset-emailsentemail": "Eğer bu e-posta adresi hesabınızın bağlı olduğu adres ise, bir parola sıfırlama e-postası gönderilecektir.",
        "passwordreset-emailsentusername": "Eğer bu e-posta adresi hesabınızın bağlı olduğu adres ise, bir parola sıfırlama e-postası gönderilecektir.",
-       "passwordreset-invalideamil": "Geçersiz e-posta adresi",
+       "passwordreset-invalidemail": "Geçersiz e-posta adresi",
        "passwordreset-nodata": "Ne bir kullanıcı adı ne de bir e-posta adresi verildi.",
        "changeemail": "E-posta adresini değiştir veya çıkar",
        "changeemail-header": "E-posta adresinizi değiştirmek için bu formu doldurun. Eğer e-posta adresini hesabınızdan kaldırmak istiyorsanız formu gönderirken e-posta adresi bölümünü boş bırakın.",
index 702c294..a32a979 100644 (file)
        "yourname": "Işme duHadomo:",
        "yourpassword": "Qliḍo:",
        "yourpasswordagain": "Naqla ḥreto kṭaw uQliḍo:",
-       "remembermypassword": "Dxar uQliḍayḍi buBrowser (buSowudo $1 {{PLURAL:$1|Yawmo|Yawme}})",
        "login": "3bar",
        "nav-login-createaccount": "3bar / Hway Hadomo",
        "userlogin": "3bar / Hway Hadomo",
index d41c469..6d971d5 100644 (file)
        "yourname": "Vito ra vutirhisi",
        "yourpassword": "Vito-mpfungulo:",
        "yourpasswordagain": "Thlela u hoxa ritompfungulo ra wena:",
-       "remembermypassword": "Tsundzuka ku nghena eka Khompuyuta leyi (kufikela eka $1 {{PLURAL:$1|siku|masiku}})",
        "login": "Pfula u nghena",
        "nav-login-createaccount": "Pfula unghena / Tumbuluxa akhawunti",
        "userlogin": "Pfula unghena / Tumbuluxa akhawunti",
index 3b5ff02..8e77204 100644 (file)
        "yourpasswordagain": "Sersüzne qabat kertü:",
        "createacct-yourpasswordagain": "Sersüzegezne raslağız",
        "createacct-yourpasswordagain-ph": "Sersüzne yañadan kertegez",
-       "remembermypassword": "Xisap yazmamnı bu brauzerda saqlansın (iñ küp $1 {{PLURAL:$1|kön|kön|kön}}gä qädär)",
        "yourdomainname": "Sezneñ domenığız:",
        "externaldberror": "Tışqı mäğlümat bazası yärdämendä awtentifikatsiä ütkändä xata çıqtı, yäisä tışqı xisap yazmağızğa üzgäreşlär kertü xoquqığız yuq.",
        "login": "Kerü",
        "undo-failure": "Aralıqtağı üzgärtülär turı kilmäw säbäple, üzgärtüdän baş tartıp bulmıy.",
        "undo-norev": "Üzgärtü yuq yäisä ul beterelgän, şuña annan baş tartıp bulmıy.",
        "undo-summary": "[[Special:Contributions/$2|$2]] qullanuçısınıñ ([[User talk:$2|bäxäs]]) $1 üzgärtüennän baş tartu",
-       "cantcreateaccounttitle": "Xisap yazmasın tözep bulmıy",
        "cantcreateaccount-text": "Bu IP adresınnan (<b>$1</b>) xisap yazmaları tözü tıyıla. Tıyuçı: [[User:$3|$3]].\n\n$3 kürsätkän säbäp: ''$2''",
        "viewpagelogs": "Bu bitneñ köndäleklären qaraw",
        "nohistory": "Bu bitneñ üzgärtülär tarixı yuq.",
        "listusers-noresult": "Qullanuçılarnı tabılmadı.",
        "listusers-blocked": "(tıyılğan)",
        "activeusers": "Aktiv qullanuçılar isemlege",
-       "activeusers-hidebots": "Botlarnı yäşer",
-       "activeusers-hidesysops": "İdaräçelärne yäşer",
        "activeusers-noresult": "Qullanuçılar tabılmadı.",
        "listgrouprights": "Qullanuçı törkemnäreneñ xoquqları",
        "listgrouprights-group": "Törkem",
        "feedback-back": "Kire qaytu",
        "feedback-cancel": "Baş tartu",
        "feedback-close": "Yasaldı",
-       "feedback-error-title": "Xata",
        "feedback-message": "Xäbär:",
        "feedback-subject": "Tema:",
        "feedback-submit": "Cibärü",
index 5fff7f1..bac27db 100644 (file)
        "linksearch-ok": "Дилээри",
        "linksearch-line": "$2-де бижиттинген $1 деп тускай айтыг",
        "listusers-submit": "Көргүзери",
-       "activeusers-hidebots": "Роботтарны чажырары",
-       "activeusers-hidesysops": "Эргелекчыларны чажырары",
        "listgrouprights-group": "Бөлүк",
        "listgrouprights-members": "(кежигүннүң даңзызы)",
        "emailuser": "Бо ажыглакчыга э-чагааны чорудаары",
index 5ced470..2269267 100644 (file)
@@ -10,7 +10,8 @@
                        "AlnashPiyash2",
                        "Irus",
                        "Shklyaev",
-                       "Wadorgurt"
+                       "Wadorgurt",
+                       "Zpizza"
                ]
        },
        "tog-underline": "Чӧлсконъёсыз ултӥз гожен сызоно",
        "noindex-category": "Индексировать каронтэм бамъёс",
        "about": "Та сярысь",
        "article": "Статья",
+       "newwindow": "(усьтӥськоз выль укноын)",
        "cancel": "Берытсконо",
        "mypage": "Бам",
        "mytalk": "Викиавтор сярысь вераськон",
        "view-foreign": "$1 сайтын учконы",
        "edit": "тупатыны",
        "create": "Кылдытоно",
+       "create-local": "Интыысь описаниез ватсаны",
        "editthispage": "Та бамез тупатыны",
        "create-this-page": "Та бамез кылдытыны",
        "delete": "Быдтыны",
        "viewtalkpage": "Вераськонэз учкыны",
        "otherlanguages": "Мукет кылъёсын",
        "redirectedfrom": "(Перенаправлять $1)",
-       "redirectpagesub": "Ð\92Ñ\8bжÑ\8bÑ\82он бам",
+       "redirectpagesub": "ЫÑ\81Ñ\82Ó¥Ñ\81Ñ\8c бам",
        "redirectto": "Выжытон:",
        "lastmodifiedat": "Та бамлэн берпуметӥ воштонэз: $2, $1.",
        "protectedpage": "Утем бам",
        "currentevents-url": "Project:Выль иворъёс",
        "disclaimers": "Кыл кутыны пумит луон",
        "disclaimerpage": "Project:Кыл кутыны пумит луон",
+       "edithelp": "Тупатонъя юрттэт",
        "helppage-top-gethelp": "Юрттэт",
        "mainpage": "Кутскон бам",
        "mainpage-description": "Кутскон бам",
        "databaseerror-query": "Курон: $1",
        "databaseerror-function": "Функция: $1",
        "databaseerror-error": "Янгыш: $1",
+       "badtitletext": "Курем бам ним луэ мыдлань, буш либо кылъёс куспын яке викиос куспын нимыз умойтэм герӟамын.\nНимын, вылды, ярантэм символъёс вань.",
        "viewsource": "Кодзэ учкыны",
        "viewsource-title": "Кодзэ учкыны бам $1",
        "actionthrottled": "Кекатыны ужъёс",
        "welcomecreation-msg": "Тӥляд гожъямъёсты учётной кылдытэмын вал.\nТӥ быгатӥськоды воштэ {{SITENAME}} [[Special:Preferences|параметръёсты]] ке потэ тӥледлы.",
        "yourname": "Пырон ним:",
        "userlogin-yourname": "Пырон ним:",
+       "userlogin-yourname-ph": "Гожтэ учётной записьтылэсь нимзэ",
        "createacct-another-username-ph": "Учётной книга нимъёс пыртэмын",
        "yourpassword": "Лушкемкыл:",
        "userlogin-yourpassword": "Лушкемкыл",
        "oldpassword": "Вуж лушкемкыл:",
        "newpassword": "Выль лушкемкыл:",
        "passwordreset-username": "Пырон ним:",
+       "italic_sample": "Бекырес текст",
+       "italic_tip": "Бекырес текст",
+       "link_sample": "Чӧлсконлэн йыръянэз",
+       "link_tip": "Пуш чӧлскон",
+       "extlink_sample": "http://www.example.com чӧлсконлэн йыръянэз",
+       "extlink_tip": "Педпала чӧлскон (http:// префиксэз эн вунэтэ)",
+       "headline_sample": "Йыръян текст",
+       "headline_tip": "2-тӥ уровеньем йыръян",
+       "nowiki_sample": "Вики-пусъёсыз санэ басьтытэк кельтоно текстэз пуктэ татчы",
+       "nowiki_tip": "Вики-пусъёсыз лыдэ басьтоно ӧвӧл",
+       "image_tip": "Пыӵатэм файл",
+       "media_tip": "Файл чӧлскон",
+       "sig_tip": "Тӥляд гожтӥськонды но дыр пусъён",
+       "hr_tip": "Горизонтальной гож (эн пыртэ ӵем)",
        "summary": "Мар но малы тупатэмын? (вакчияк):",
        "minoredit": "Ичи воштон",
        "watchthis": "Та бамез чаклан списоке пыртыны",
        "preview": "Бамез эскерон",
        "showpreview": "Бамез эскерон",
        "showdiff": "Пыртэм воштонъёс",
+       "anoneditwarning": "<strong>Сак луэ!</strong> Тӥ сайтэ ӧд пырелэ. Тӥ котькыӵе тупатонъёсыз лэсьтоды бере, тӥляд IP-адресты ваньмызлы адӟытӥськоз. Тӥ <strong>[$1 пыроды]</strong> яке <strong>[$2 учётной записез кылдытоды]</strong> бере, тӥляд тупатонъёсты герӟаськозы нимдылы, мукет пайдаосын ӵош.",
        "blockedtitle": "Заблокировать пыриськисьёс",
        "blockedtext": "<strong>Книгае яке учётной IP-адрес заблокирован.</strong>\n\nБлокировка администратор потӥз $1.\nВозьмалэ вуоно мугез: \"\"$2\"\".\n\n* Кутскон блокировка: $8\n* Блокировка ортчиз: $6\n* Блокировка меретъёсыз: $7\n\nБыгатӥськод-а тон герӟаськемын $1 яке мукет котькудӥныз [[{{MediaWiki:Grouppage-sysop}}|администраторъёс]], блокировка мед эскерозы.\nУчком, мар кутыны уг быгато функцизэс \"гожтэт\", ас ке [[Special:Preferences|настройка персональной]] зуркатӥсь яке электронной почтаезлэн адресэз эн чуртна уг корректный, яке гожтӥськод ке, гожтэт ыстон укшась блокировка алон.\nТон IP-адрес — $3, блокировка идентификаторлэн — $5.\nПожалуйста, аслэсьтым тодон-та вазиськонэз котьку возьмано.",
        "autoblockedtext": "Тон IP-адрес, герӟет автоматически заблокирован а со, мар солэн кутыны луоно азьвыл кин ке но пырисьёс пӧлысь, заблокирован {{GENDER:$4|участник|куакеч}} $1. \nБлокировка возьмано луоз вуоно мугез:\n\n: \"$2\" - лы.\n\n* Кутскон блокировка: $8\n* Блокировка ортчиз: $6\n* Блокировка меретъёсыз: $7\n\nБыгатӥськод-а тон герӟаськемын $1 яке мукет котькудӥныз [[{{MediaWiki:Grouppage-sysop}}|администраторъёс]], блокировка мед эскерозы.\n\nУчком, мар кутыны уг быгато функцизэс \"гожтэт\", ас ке [[Special:Preferences|настройка персональной]] зуркатӥсь яке электронной почтаезлэн адресэз эн чуртна уг корректный, яке гожтӥськод ке, гожтэт ыстон укшась блокировка алон.\n\nТон IP-адрес — $3, блокировка идентификаторлэн — #$5.\nПожалуйста, аслэсьтым тодон-та вазиськонэз котьку возьмано.",
        "editing": "Тупатон: $1",
        "editingsection": "Тупатон: $1 (люкет)",
        "template-protected": "(утемын)",
-       "template-semiprotected": "(полузащищенный)",
+       "template-semiprotected": "(полуутемын)",
        "nocreatetext": "Та сайтлэн бамаз выль сюбегатэм луонлыкъёсын кылдытон.\nТон улыса, берлань вуэ быгатэ бам отредактировать, [[Special:UserLogin|тусбуяськыны книгае яке выль система кылдыто учётной]].",
        "nocreate-loggedin": "Тон доразы юаськыны кылдӥз выль бам ӧвӧл.",
        "permissionserrors": "Янгышъёс юаське",
        "cur": "али",
        "last": "азьв.",
        "history-show-deleted": "Ӵушылэмъёссэ гинэ",
+       "rev-delundel": "возьматыны/ватыны",
        "rev-showdeleted": "возьматоно",
        "revdelete-show-file-submit": "да",
        "revdelete-radio-set": "Ватэм",
        "nextn": "{{PLURAL:$1|$1-лы}} азьлань",
        "shown-title": "Адӟытылоно $1 {{PLURAL:$1|шедьтэмез}} бамлы быдэ",
        "viewprevnext": "Учкыны ($1 {{int:pipe-separator}} $2) ($3)",
+       "searchmenu-new": "<strong>Кылдытыны «[[:$1]]» бамез та вики-проектын!</strong> {{PLURAL:$2|0=|Со сяна утчанэныды шедьтэм бамез учке.|Со сяна шедьтэм бамъёсты учке.}}",
        "searchprofile-articles": "Валтӥсь бамъёс",
        "searchprofile-images": "Мультимедиа",
        "searchprofile-everything": "Котькытын",
        "searchprofile-everything-tooltip": "Вань бамъёсэтӥ утчан (вераськон бамъёсты пыртыса)",
        "search-result-size": "$1 ({{PLURAL:$2|$2 кыл}})",
        "search-redirect": "($1 бамысь ыстон)",
+       "search-section": "(«$1» люкет)",
        "search-interwiki-more": "(эшшо)",
        "searchall": "Ваньзэ",
+       "search-showingresults": "{{PLURAL:$4|<strong>$3</strong> пӧлысь <strong>$1-тӥ</strong> шедьтэм|<strong>$3</strong> пӧлысь <strong>$1—$2</strong> шедьтэмъёс}}",
        "search-nonefound": "Запрослы кельшись шедьтэмъёс ӧвӧл.",
        "powersearch-toggleall": "Ваньзэ",
        "powersearch-togglenone": "Номыре",
        "enhancedrc-history": "история",
        "recentchanges": "Выль тупатонъёс",
        "recentchanges-legend": "Выль тупатонъёслы настройкаос",
+       "recentchanges-summary": "Та бамын викилэн дыръя радъям выль воштонъёсыз возьматэмын.",
        "recentchanges-label-newpage": "Та тупатонэн выль бам кылдӥз",
        "recentchanges-label-minor": "Пичи воштон",
        "recentchanges-label-bot": "Та тупатонэз кариз бот",
        "recentchangeslinked": "Герӟаськем тупатонъёс",
        "recentchangeslinked-feed": "Герӟаськем тупатонъёс",
        "recentchangeslinked-toolbox": "Герӟаськем тупатонъёс",
+       "recentchangeslinked-title": "«$1» ласянь герӟаськем тупатонъёс",
        "recentchangeslinked-summary": "Татын алигес воштэм бамъёс адӟытэмын, кудъёссэ пусъем бам чӧлске (яке кудъёсыз пусъем категорие пыро).\n[[Special:Watchlist|Чаклан списокысьтыды]] бамъёс <strong>адӟиськытэмын</strong>.",
+       "recentchangeslinked-page": "Бамлэн нимыз:",
+       "recentchangeslinked-to": "Мыддоринтыны: та бамез чӧлскись бамъёсыз воштонъёсыз возьматыны",
        "upload": "Файл поныны",
        "uploadnologin": "Тон эн тусбуяськыны сӧзнэтэз",
        "uploadnologintext": "Тон кулэ $1, медаз загрузка файл сервер.",
+       "filedesc": "Вакчияк описаниез",
        "uploaddisabled": "Загрузка алӥзы",
        "copyuploaddisabled": "Загрузка URL disconnect.",
        "uploaddisabledtext": "Загрузка файл disconnect.",
        "upload-dialog-button-cancel": "Берытсконо",
+       "license-header": "Лицензия",
        "nolicense": "Ӧвӧл",
        "file-anchor-link": "Файл",
        "filehist": "Файллэн историез",
        "filehist-comment": "Валэктон",
        "imagelinks": "Файлэз уже кутон",
        "linkstoimage": "{{PLURAL:$1|$1 бам}} та файлэз чӧлске:",
+       "nolinkstoimage": "Та файл вылэ чӧлскись бамъёс ӧвӧл.",
        "sharedupload": "Та файл — $1-ысь, сое мукет проектъёсын но уже кутыны луэ.",
        "sharedupload-desc-here": "Та файл — $1-ысь, сое мукет проектъёсын но уже кутыны луэ.\n[$2 Файл гожъясь бамысьтыз] информация адӟытэмын улын.",
+       "upload-disallowed-here": "Тӥ та файлэз выльысь гожтыны уд быгатӥське.",
        "randompage": "Олокыӵе статья",
        "withoutinterwiki-submit": "Возьматыны",
        "nbytes": "{{PLURAL:$1|$1 байт}}",
        "newpages": "Выль бамъёс",
        "newpages-submit": "Возьматыны",
        "move": "Нимзэ воштыны",
+       "booksources": "Книгаосын источникъёс",
        "log": "Журналъёс",
        "logeventslist-submit": "Возьматыны",
        "showhideselectedlogentries": "Возьматыны/ватыны быръем журналъёсысь гожъямъёсыз",
        "listusers-submit": "Возьматыны",
        "listusers-blocked": "(заблокировать{{GENDER:$1||а}})",
        "listgrouprights": "Право группае пыриськисьёс",
-       "listgrouprights-summary": "Та группае пырисьёс возьматыны кулэ вики список улӥзы, право соответствующийгес солы возьматоно кариськиз. Оло, ас кожазы ватсаса ивортодэт улыны эрикрадэз сярысь.",
+       "listgrouprights-summary": "Та группае пырисьёс возьматыны кулэ вики список улӥзы, право соответствующийгес солы возьматоно кариськиз. Оло, ас [[{{MediaWiki:Listgrouprights-helppage}}|кожазы ватсаса ивортодэт]] улыны эрикрадэз сярысь.",
        "listgrouprights-members": "(список пыриськисьёс)",
        "emailuser": "Викиавторлы гожтэт",
        "emailmessage": "Ивортон:",
        "contributions": "{{GENDER:$1|Викиавтор}} гожтэмъёсы",
        "contributions-title": "$1 викиавтор гожтэмъёсы",
        "mycontris": "Гожтэмъёс",
+       "anoncontribs": "Гожтэмъёс",
        "nocontribs": "Критерии нокыӵе воштӥськонъёс та соответствующий шедьтыны уг луы.",
        "sp-contributions-blocklog": "блокировка",
        "sp-contributions-deleted": "шонертон палэнтыны {{GENDER:$1|участник|куакеч}}",
        "sp-contributions-blocked-notice": "Пользователь заблокирован сётӥз та учырлы. Справка понна радъяськылӥсь журнал блокировка лапег берпуметӥ гожтэт:",
        "sp-contributions-blocked-notice-anon": "Со ip-адрес вие заблокировать сётӥзы. Блокировка журналъёсты вайытэк улӥзы берпуметӥ книгаысь:",
        "whatlinkshere": "Татчы чӧлсконъёс",
+       "whatlinkshere-title": "«$1» вылэ чӧлскись бамъёс",
+       "whatlinkshere-page": "Бам:",
+       "linkshere": "Та бамъёс <strong>[[:$1]]</strong> вылэ чӧлско:",
+       "isredirect": "ыстӥсь бам",
+       "istemplate": "пыртон",
+       "whatlinkshere-prev": "{{PLURAL:$1|берлань|$1-лы берлань}}",
+       "whatlinkshere-next": "{{PLURAL:$1|азьлань|$1-лы азьлань}}",
+       "whatlinkshere-links": "← чӧлсконъёс",
+       "whatlinkshere-hidetrans": "$1 пыртонъёсты",
+       "whatlinkshere-hidelinks": "$1 чӧлсконъёсты",
+       "whatlinkshere-filters": "Фильтръёс",
        "block": "Блокировка пыриськисьёс",
-       "blockip": "Заблокировать пыриськисьёс",
+       "blockip": "Заблокировать {{GENDER:$1|пыриськисьёс}}",
        "ipbreason-dropdown": "* Блокировка мугез кабес\n** Полы информациез оскизы\n** Вордскем палэнэ бам\n** Спам-сайтъя педпал чӧлскон\n** Текстлэсь визьем ватсан/жуг-жаг\n** Кышкытлыклэсь, пыриськыны уйиськон\n** Злоупотребление кӧня ке книга учётной\n** Пыриськисьёслэн нимъёссы пыриськисьёс",
        "ipboptions": "2 час:2 hours,1 нуналлы:1 day,3 нуналлы:3 days,1 арняезлы:1 week,2 арняяз:2 weeks,1 толэзь:1 month,3 толэзь:3 months,6 толэзь:6 months,1 арлэн:1 year,бессрочно:infinite",
-       "unblocked": "$1 разблокировать",
+       "unblocked": "[[User:$1|$1]] разблокировать",
        "unblocked-id": "Блокировка $1 басьтоно луиз",
        "blocklist-target": "Ужпумъёс",
        "blocklist-reason": "Мугез",
        "block-log-flags-nousertalk": "тупатъяны ачиз уггес быгаты бамлэн обсуждениосаз",
        "range_block_disabled": "Администратор диапазонэз блокировать али.",
        "move-watch": "Чаклан списоке пыртоно инъет но валтӥсь бамъёсыз",
+       "export": "Бамъёсты поттон",
        "allmessagesname": "Ивортон",
        "allmessages-filter-all": "Ваньзэ",
        "thumbnail-more": "Будэтоно",
+       "tooltip-pt-userpage": "{{GENDER:|Тӥляд}} асьтэлэн бамды",
+       "tooltip-pt-mytalk": "{{GENDER:|Тӥляд}} вераськон бамды",
+       "tooltip-pt-preferences": "{{GENDER:|Тӥляд}} настройкаосты",
+       "tooltip-pt-watchlist": "Бамъёслы список, кудъёссэ воштонъёсты тӥ эскерылӥськоды",
+       "tooltip-pt-mycontris": "{{GENDER:|Тӥляд}} тупатонъёстылы список",
        "tooltip-pt-login": "Татын системае пырыны луоно, нош одно ик ӧвӧл",
+       "tooltip-pt-logout": "Йылпумъяны али ортчись ужанэз",
        "tooltip-pt-createaccount": "Татын учётной записез лэсьтыны но системае пырыны луоно, нош одно ик ӧвӧл",
        "tooltip-ca-talk": "Бамлэн контентэз сярысь вераськон",
        "tooltip-ca-edit": "Та бамез тупатъяно",
        "tooltip-ca-nstab-user": "Викиавторлэн бамез",
        "tooltip-ca-nstab-special": "Та бам нимысьтыз, сое тупатон луонтэм",
        "tooltip-ca-nstab-image": "Файллэн бамез",
+       "tooltip-ca-nstab-template": "Шаблонлэн бамез",
        "tooltip-ca-nstab-category": "Категорилэн бамез",
+       "tooltip-save": "Возьыны воштонъёстэс",
+       "tooltip-preview": "Воштонъёстэс эскерон. Тауна, бамез гожтонлэсь азьло учкелэ соосыз.",
+       "tooltip-diff": "Возьматыны воштонъёсыз, кудъёссэ тӥ текстэ пыртӥды.",
        "tooltip-rollback": "Берло викиавторен лэсьтэм воштонъёсыз одӥг зӥбонэн палэнтыны",
+       "tooltip-undo": "Палэнтыны та тупатонэз но возьматыны воштон эскерымон бамез, кытын палэнтонлэсь мугзэ гожтыны луоз.",
+       "tooltip-summary": "Воштонъёсты сярысь вакчияк гожтэлэ",
+       "simpleantispam-label": "Анти-спам эскерон.\n<strong>Эн</strong> гожтэ татчы!",
        "pageinfo-header-edits": "Воштонъёслэн историзы",
        "pageinfo-toolboxlink": "Бам сярысь тодэтъёс",
        "file-info-size": "$1 × $2 пиксель, файллэн быдӟалаез: $3, MIME-тип: $4",
+       "file-nohires": "Бадӟымгес быдӟалаен суред ӧвӧл.",
+       "svg-long-desc": "SVG файл, номинально $1 × $2 пиксель, файллэн быдӟалаез: $3",
        "show-big-image": "Инъет файл",
        "show-big-image-preview": "Быдӟалаез та бамын: $1.",
        "show-big-image-other": "Мукет {{PLURAL:$2|быдӟалаез|быдӟалаосыз}}: $1.",
        "metadata": "Метаданнойёс",
        "metadata-help": "Файл пушкын информация вань на, кудзэ лыдпусо камераос яке сканеръёс файлэз кылдытыку огшоры ватсалляло.\nКылдытон бере файл воштӥськиз ке, куд-огез параметръёс воштэм суредлы ярантэм луыны быгато.",
        "metadata-fields": "Суредысь метаданнойёслэн та списоке пыртэм полеоссы адӟытӥськозы суред бам вылын, метаданнойёслэн таблицазы бинемын дыръя.\nМукет полеоссы ватскозы.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
+       "exif-xresolution": "Горизонтальной разрешение",
+       "exif-yresolution": "Вертикальной разрешение",
+       "exif-datetime": "Файлэз воштонлэн датаез но дырыз",
+       "exif-model": "Камералэн моделез",
+       "exif-software": "Компьютер программаос",
+       "exif-exifversion": "Exif версия",
+       "exif-colorspace": "Буёлъёслэн пространствозы",
        "exif-disclaimer": "Кыл кутыны пумит луон",
        "namespacesall": "ваньзэ",
        "monthsall": "ваньзэ",
        "confirmrecreate-noreason": "{{GENDER:$1|Участник|Куакеч|}}&nbsp;[[User:$1|$1]] ([[User talk:$1|обс]]) {{GENDER:$1|палэнтыны|палэнтыны}} таиз бере бам, кызьы тон сое редактировать карыны кутскиз. Пожалуйста, подтвердите, мар тон малпаськод та бамез зэм но выльысь кылдозы.",
        "confirm-watch-top": "Та бамез чаклан списокады пыртоно?",
        "autosumm-new": "Выль бам: «$1»",
+       "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|вераськон]])",
        "version": "Версия",
        "specialpages": "Ваньмыз панельёс",
        "specialpages-group-login": "Тусбуяськыны / Гожтӥськоно",
index f6381c2..edd0508 100644 (file)
        "yourpasswordagain": "پارولنى قايتا كىرگۈزۈڭ:",
        "createacct-yourpasswordagain": "پارولنى مۇقىملاشتۇرۇڭ",
        "createacct-yourpasswordagain-ph": "پارولنى قايتا كىرگۈزۈڭ",
-       "remembermypassword": "بۇ كومپيۇتېردا كىرگىنىمنى ئەستە ساقلا(ئەڭ ئۇزۇن بولغاندا $1 {{PLURAL:$1|كۈن|كۈن}})",
        "userlogin-remembermypassword": "مېنى ئەستە ساقلا",
        "userlogin-signwithsecure": "بىخەتەر ئۇلىنىشنى ئىشلەت",
        "yourdomainname": "دائىرە نامىڭىز:",
        "passwordreset-emailtext-user": "{{SITENAME}} دىكى ئىشلەتكۈچى $1 بېكەت {{SITENAME}} ($4) دىكى پارولىڭىزنى قايتا بېكىتىشنى ئىلتىماس قىلدى .\nتۆۋەندىكى ئىشلەتكۈچىنىڭ {{PLURAL:$3|ھېسابات|ھېسابات}}($4)ى مۇشۇ ئېلخەتكە باغلانغان:\n\n$2\n\n{{PLURAL:$3|بۇ ۋاقىتلىق پارول|بۇ ۋاقىتلىق پارول}} {{PLURAL:$5|بىر كۈن|$5 كۈن}}دە ۋاقتى ئۆتىدۇ. ئەگەر بۇ مەشغۇلاتنى سىز ئىلتىماس قىلغان بولسىڭىز، دەرھال تىزىمغا كىرىپ يېڭى پارولدىن بىرنى تاللاڭ.\nسىز بەلگىلىگەن يېڭى پارول {{PLURAL:$5|كۈن|$5 كۈن}}دە ۋاقتى توشىدۇ. ئەگەر باشقىلار ئىلتىماس قىلغان بولسا ياكى ئۆزىڭىز بەلگىلىگەن پارول ئېسىڭىزگە كېلىپ ئۇنى ئۆزگەرتمىسىڭىز، \nبۇ ئۇچۇرغا پەرۋا قىلماي ئۆزىڭىزنىڭ كونا پارولىنى ئىشلىتىۋېرىڭ.",
        "passwordreset-emailelement": "ئىشلەتكۈچى نامى: \n$1\n\nۋاقىتلىق پارول: \n$2",
        "passwordreset-emailsentemail": "پارولنى قايتا بېكىتىش ئېلخېتى يوللاندى.",
-       "passwordreset-emailsent-capture": "پارولنى قايتا بېكىتىش ئېلخېتى يوللاندى، تۆۋەندە كۆرسىتىلىدۇ.",
-       "passwordreset-emailerror-capture": "ھاسىل قىلىنغان پارولنى قايتا بېكىتىش ئېلخېتى تۆۋەندە كۆرسىتىلگەندەك ئەمما ئۇنى {{GENDER:$2|ئىشلەتكۈچى}}گە يوللىيالمىدى: $1",
        "changeemail": "ئېلخەت ئادرېس ئۆزگەرت",
        "changeemail-header": "ھېساباتنىڭ ئېلخەت ئادرېسىنى ئۆزگەرت",
        "changeemail-no-info": "سىز تىزىمغا كىرگەندىن كېيىن بىۋاسىتە بۇ بەتكە كىرىشىڭىز لازىم.",
        "undo-nochange": "بۇ قېتىملىق تەھرىرلەش ۋاز كېچىلدى.",
        "undo-summary": "[[Special:Contributions/$2|$2]] ([[User talk:$2|مۇنازىرە]]) ئېلىپ بارغان تۈزىتىش $1",
        "undo-summary-username-hidden": "بىر يوشۇرۇن ئىشلەتكۈچى تەرىپىدىن يېنىۋېلىندى $1.",
-       "cantcreateaccounttitle": "ھېسابات قۇرالمىدى",
        "cantcreateaccount-text": "بۇ IP ئادرېستىن قۇرۇلغان ('''$1''')  ھېسابات [[User:$3|$3]] تەرىپىدىن چەكلەنگەن.\n\n$3 تەمىنلىگەن چەكلەش سەۋەبى ''$2''",
        "viewpagelogs": "بۇ بەتنىڭ خاتىرىسىنى كۆرسەت",
        "nohistory": "بۇ بەتنىڭ تەھرىرلەش خاتىرىسى يوق.",
        "activeusers-intro": "بۇ يېقىنقى $1 {{PLURAL:$1| كۈن|كۈن}}دىكى مەشغۇلات قىلغان ئىشلەتكۈچىلەر تىزىملىكى.",
        "activeusers-count": "يېقىنقى {{PLURAL:$3|كۈن|$3 كۈن}}دىكى {{PLURAL:$1|مەشغۇلات}} قېتىم سانى $1",
        "activeusers-from": "باشلانغان ئىشلەتكۈچىنى كۆرسەت:",
-       "activeusers-hidebots": "ماشىنا ئادەمنى يوشۇر",
-       "activeusers-hidesysops": "باشقۇرغۇچىنى يوشۇر",
        "activeusers-noresult": "ئىشلەتكۈچى تېپىلمىدى.",
        "listgrouprights": "ئىشلەتكۈچى گۇرۇپپا ھوقۇقى",
        "listgrouprights-summary": "تۆۋەندىكىسى بۇ wiki دا ئېنىقلىما بېرىلگەن ئىشلەتكۈچى ھوقۇق چېكى تىزىملىكى ۋە ئۇلارنىڭ زىيارەت ھوقۇق چېكى.\nتېخىمۇ كۆپ قىسمەن ھوقۇقنىڭ تەپسىلاتىنى [[{{MediaWiki:Listgrouprights-helppage}}|بۇ جاي]] دىن تاپالايسىز.",
        "htmlform-no": "ياق",
        "htmlform-yes": "ھەئە",
        "htmlform-chosen-placeholder": "بىرنى تاللاڭ",
-       "sqlite-has-fts": "$1 پۈتۈن تېكست ئىزدەشنى قوللايدۇ",
-       "sqlite-no-fts": "$1 پۈتۈن تېكست ئىزدەشنى قوللىمايدۇ",
        "logentry-delete-delete": "$1 $3 بەتنى {{GENDER:$2|ئۆچۈرىۋەتتى}}",
        "logentry-delete-restore": "$1 $3 بەتنى {{GENDER:$2|ئەسلىگە قايتۇردى}}",
        "logentry-delete-event": "$1 ئىشلەتكۈچى $3 دىكى {{PLURAL:$5|خاتىرە ھادىسە}}سىنىڭ كۆۈنۈشچانلىقىنى ئۆزگەرتتى: $4",
index 8402d98..b1c6766 100644 (file)
        "passwordreset-emaildisabled": "В цій вікі вимкнуто Функції електронної пошти.",
        "passwordreset-username": "Ім'я користувача:",
        "passwordreset-domain": "Домен:",
-       "passwordreset-capture": "Продивитись результуючий електронний лист?",
-       "passwordreset-capture-help": "Якщо ви зробите помітку у віконці, вам буде показаний електронний лист (із тимчасовим паролем), який також буде надісланий користувачеві.",
        "passwordreset-email": "Адреса електронної пошти:",
        "passwordreset-emailtitle": "Деталі облікового запису на {{SITENAME}}",
        "passwordreset-emailtext-ip": "Хтось (імовірно ви, з IP-адреси $1) попросив нагадати деталі вашого облікового запису для {{SITENAME}} ($4). З вашою електронною скринькою пов'язан{{PLURAL:$3|1=ий такий запис|і такі записи}}:\n\n$2\n\n{{PLURAL:$3|1=Цей тимчасовий пароль стане недійсним|Ці тимчасові паролі стануть недійсними}} через $5 {{PLURAL:$5|день|дні|днів}}.\nВи маєте ввійти в систему і вибрати новий пароль. Якщо ж цей запит зробив хтось інший або ви згадали свій старий пароль і не бажаєте його змінювати, можете ігнорувати це повідомлення та продовжувати використовувати старий пароль.",
        "passwordreset-emailelement": "Ім'я користувача: \n$1\n\nТимчасовий пароль: \n$2",
        "passwordreset-emailsentemail": "Якщо ця електронна адреса асоційована з вашим обліковим записом, то лист для відновлення пароля буде відправлено на неї.",
        "passwordreset-emailsentusername": "Якщо існує електронна адреса, яка асоційована з цим обліковим записом, на неї буде надіслано лист для відновлення пароля.",
-       "passwordreset-emailsent-capture2": "{{PLURAL:$1|Електронний лист|Електронні листи}} скидання паролю було надіслано. {{PLURAL:$1|Ім'я користувача і пароль|Список імен користувачів і паролів}} показано тут.",
-       "passwordreset-emailerror-capture2": "Не вдалося надіслати листа {{GENDER:$2|користувачу|користувачці}}: $1 {{PLURAL:$3|Ім'я користувача і пароль|список імен користувачів і паролів}} показано тут.",
        "passwordreset-nocaller": "Має бути надане джерело виклику",
        "passwordreset-nosuchcaller": "Джерело виклику не існує: $1",
        "passwordreset-ignored": "Скидання пароля не відбулося. Можливо, не було налашатовано надавача?",
-       "passwordreset-invalideamil": "Недійсна адреса електронної пошти",
+       "passwordreset-invalidemail": "Недійсна адреса електронної пошти",
        "passwordreset-nodata": "Не надано ні імені користувача, ні електронної адреси",
        "changeemail": "Змінити або вилучити адресу електронної пошти",
        "changeemail-header": "Заповніть цю форму, щоб змінити адресу електронної пошти. Якщо Ви хочете взагалі прибрати зв'язок свого облікового запису з адресою електронної пошти, при надсиланні форми залиште поле нової електронної адреси порожнім.",
        "right-siteadmin": "Блокування і розблокування бази даних",
        "right-override-export-depth": "експорт сторінок, включаючи пов'язані сторінки з глибиною до 5",
        "right-sendemail": "надсилання електронної пошти іншим користувачам",
-       "right-passwordreset": "Перегляд повідомлень електронної пошти для зміни паролю",
        "right-managechangetags": "створення та (де)активування [[Special:Tags|міток]]",
        "right-applychangetags": "додавання [[Special:Tags|міток]] разом зі змінами",
        "right-changetags": "додавання або вилучення будь-яких [[Special:Tags|міток]] для певних версій сторінок або записів журналів",
        "apisandbox-continue": "Продовжити",
        "apisandbox-continue-clear": "Очистити",
        "apisandbox-continue-help": "{{int:apisandbox-continue}} [https://www.mediawiki.org/wiki/API:Query#Continuing_queries продовжить] останній запит; {{int:apisandbox-continue-clear}} очистить параметри, пов'язані з продовженням.",
+       "apisandbox-param-limit": "Введіть <kbd>max</kbd>, щоб використати максимальний ліміт.",
        "booksources": "Джерела книг",
        "booksources-search-legend": "Пошук інформації про книгу",
        "booksources-isbn": "ISBN:",
        "tags-deactivate": "вимкнути",
        "tags-hitcount": "$1 {{PLURAL:$1|зміна|зміни|змін}}",
        "tags-manage-no-permission": "У Вас нема дозволу керувати мітками змін.",
-       "tags-manage-blocked": "Не можна змінювати теги, поки Вас заблоковано.",
+       "tags-manage-blocked": "Не можна змінювати теги, поки {{GENDER:$1|Вас}} заблоковано.",
        "tags-create-heading": "Створити нову мітку",
        "tags-create-explanation": "За замовчуванням, новостворені мітки будуть доступні для використання користувачами і ботами.",
        "tags-create-tag-name": "Назва мітки:",
        "tags-deactivate-not-allowed": "Неможливо вимкнути мітку «$1».",
        "tags-deactivate-submit": "Вимкнути",
        "tags-apply-no-permission": "Ви не маєте права міняти мітки вашого редагування.",
-       "tags-apply-blocked": "Ви не можете змінювати теги редагувань, поки Вас заблоковано.",
+       "tags-apply-blocked": "Ви не можете змінювати теги редагувань, поки {{GENDER:$1|Вас}}  заблоковано.",
        "tags-apply-not-allowed-one": "Мітку «$1» не можна додавати вручну.",
        "tags-apply-not-allowed-multi": "{{PLURAL:$2|Таку мітку|Такі мітки}} не можна додавати вручну: $1",
        "tags-update-no-permission": "Ви не маєте права додавати або вилучати мітки окремих версій чи журнальних записів.",
-       "tags-update-blocked": "Ви не можете додати чи видалити теги редагувань, поки Вас заблоковано.",
+       "tags-update-blocked": "Ви не можете додавати чи вилучати теги редагувань, поки {{GENDER:$1|Вас}} заблоковано.",
        "tags-update-add-not-allowed-one": "Мітку \"$1\" не можна додавати вручну.",
        "tags-update-add-not-allowed-multi": "{{PLURAL:$2|Таку мітку|Такі мітки}} не можна додавати вручну: $1",
        "tags-update-remove-not-allowed-one": "Мітку «$1» не дозволено вилучати.",
index 1fcff99..de2ee22 100644 (file)
        "passwordreset-nocaller": "کالر کا فراہم کیا جانا لازمی ہے",
        "passwordreset-nosuchcaller": "کالر موجود نہیں: $1",
        "passwordreset-ignored": "پاس ورڈ کی ترتیب نو مکمل نہیں ہو سکی۔ شاید کوئی پرووائڈر فراہم نہیں کیا گیا؟",
-       "passwordreset-invalideamil": "نادرست برقی ڈاک پتا",
+       "passwordreset-invalidemail": "نادرست برقی ڈاک پتا",
        "passwordreset-nodata": "کوئی صارف نام اور نہ کوئی برقی ڈاک پتا فراہم کیا گیا",
        "changeemail": "برقی ڈاک پتے میں تبدیلی یا حذف شدگی",
        "changeemail-header": "اپنے برقی ڈاک پتے کو تبدیل کرنے کے لیے اس فارم کو پُر کریں۔ اگر آپ اپنے کھاتے سے منسلک کسی برقی ڈاک پتے کو ختم کرنا چاہتے ہیں تو فارم پُر کرنے کے دوران میں نئے برقی ڈاک پتے کا خانہ خالی چھوڑ دیں۔",
index 25b3d3d..99ab540 100644 (file)
        "listusers-blocked": "(chetlashtirilgan)",
        "activeusers": "Faol foydalanuvchilar roʻyxati",
        "activeusers-from": "Quyidagidan boshlanuvchi foydalanuvchilarni koʻrsatish:",
-       "activeusers-hidebots": "Botlarni yashirish",
-       "activeusers-hidesysops": "Maʼmurlarni yashirish",
        "activeusers-noresult": "Foydalanuvchilar topilmadi.",
        "listgrouprights": "Foydalanuvchilar guruhlari roʻyxati",
        "listgrouprights-summary": "Har bir viki-loyihada boʻlgani kabi, Oʻzbekcha Vikipediyada ham foydalanuvchilar bir nechta guruhlarga boʻlingan boʻlib, quyida ularning roʻyxati va tegishli huquqlari keltirilgan. Alohida huquqlar haqida [[{{MediaWiki:Listgrouprights-helppage}}|qoʻshimcha maʼlumotlar]] boʻlishi mumkin.",
index 0fdce19..f22471c 100644 (file)
        "yourpasswordagain": "Kirjutagat peitsana udes:",
        "createacct-yourpasswordagain": "Peitsanan vahvištoituz",
        "createacct-yourpasswordagain-ph": "Kirjutagat peitsana toškerdan",
-       "remembermypassword": "Panda muštho minun tulendandmused neciš kompjuteras (enintään $1 {{PLURAL:$1|päivä|päivää}})",
        "userlogin-remembermypassword": "Jäda sistemha",
        "yourdomainname": "Teiden domen:",
        "password-change-forbidden": "Teile ei sa vajehtada peitsanad neciš vikiš.",
        "undo-failure": "Ei voi tühjištada redakcijad, sikš miše läbiredakcijad konfliktuidas.",
        "undo-norev": "Ei voi endištada lehtpol't, sikš miše mugošt lehtpol't ei ole vai se om jo čutud.",
        "undo-summary": "Tühjitadud toižetuz $1, kudamban tegi $2 (arutelu)",
-       "cantcreateaccounttitle": "Ei voi säta registracijad",
        "viewpagelogs": "Ozutada aigkirjad necen lehtpolen täht",
        "nohistory": "Necen lehtpolen täht ei ole toižetusiden aigkirjad.",
        "currentrev": "Nügüdläine versii",
        "listusers-blocked": "(blokiruidud)",
        "activeusers": "Aktivižiden kävutajiden nimikirjutez",
        "activeusers-from": "Oyutada kävutajid, augotaden necišpäi:",
-       "activeusers-hidebots": "Peitta botid",
-       "activeusers-hidesysops": "Peitta administratorid",
        "activeusers-noresult": "Kävutajad ei olgoi löutud.",
        "listgrouprights": "Kävutajiden gruppiden oiktused",
        "listgrouprights-group": "Grupp",
        "htmlform-reset": "Tühjitada toižetused",
        "htmlform-selectorother-other": "Toine",
        "htmlform-yes": "Ka",
-       "sqlite-has-fts": " $1 täuz'tekstaižen ecindan tügedamiženke",
-       "sqlite-no-fts": " $1 täuz'tekstaižen ecindan tügedamižeta",
        "revdelete-restricted": "kaidendused administratoriden täht",
        "revdelete-unrestricted": "kaidendused heittud administratoriden täht",
        "logentry-newusers-create": "{{GENDER:$2|tegihe}} $1-kävutajaks",
index ccc7825..a4c546d 100644 (file)
        "botpasswords-label-delete": "Xoá",
        "botpasswords-label-resetpassword": "Đặt lại mật khẩu",
        "botpasswords-label-grants": "Các quyền có liên quan:",
-       "botpasswords-help-grants": "Các lượt cấp phép cho phép truy cập các quyền người dùng mà một tài khoản đã có sẵn. Xem thêm thông tin trong [[Special:ListGrants|bảng cấp phép]].",
+       "botpasswords-help-grants": "Các lượt cấp phép cho phép truy cập các quyền lợi mà tài khoản của bạn đã có. Việc cấp phép tại đây không có cho phép truy cập quyền nào mà tài khoản của bạn thường không có. Xem thêm thông tin trong [[Special:ListGrants|bảng cấp phép]].",
        "botpasswords-label-grants-column": "Cấp quyền",
        "botpasswords-bad-appid": "Bot có tên \"$1\" không hợp lệ.",
        "botpasswords-insert-failed": "Không thể thêm tên bot \"$1\". Nó đã được thêm vào chưa?",
        "passwordreset-emaildisabled": "Tính năng gửi thư điện tử không được kích hoạt trên wiki này.",
        "passwordreset-username": "Tên người dùng:",
        "passwordreset-domain": "Tên miền:",
-       "passwordreset-capture": "Xem thư điện tử có mật khẩu tạm",
-       "passwordreset-capture-help": "Nếu bạn kiểm hộp này, bạn sẽ xem thư điện tử có mật khẩu tạm lúc khi nó được gửi cho người dùng.",
        "passwordreset-email": "Địa chỉ thư điện tử:",
        "passwordreset-emailtitle": "Thông tin tài khoản tại {{SITENAME}}",
        "passwordreset-emailtext-ip": "Ai đó (có thể là bạn, từ địa chỉ IP $1) đã yêu cầu tái tạo mật khẩu của bạn \ntại {{SITENAME}} ($4). {{PLURAL:$3|Tài khoản|Các tài khoản}} dưới đây gắn liền \nvới địa chỉ thư điện tử này:\n\n$2\n\n{{PLURAL:$3|Mật khẩu|Các mật khẩu}} tạm này sẽ hết hạn trong vòng {{PLURAL:$5|một ngày|$5 ngày}}. Bạn nên đăng nhập\nngay bây giờ để chọn mật khẩu mới. Nếu bạn không phải là người yêu cầu\nhoặc đã nhớ lại mật khẩu hiện hành, và bạn không còn\nmuốn thay đổi nó, xin vui lòng bỏ qua thông điệp này và tiếp tục sử dụng\nmật khẩu cũ.",
        "passwordreset-emailelement": "Tên người dùng: \n$1\n\nMật khẩu tạm: \n$2",
        "passwordreset-emailsentemail": "Nếu đây là đúng địa chỉ thư điện tử của tài khoản của bạn, một thư điện tử dùng để tái tạo mật khẩu sẽ được gửi cho bạn.",
        "passwordreset-emailsentusername": "Nếu một địa chỉ thư điện tử đã gắn với tên người dùng này thì một thư điện tử để đặt lại mật khẩu sẽ được gửi đến.",
-       "passwordreset-emailsent-capture2": "Đã gửi {{PLURAL:$1|thư điện tử|các thư điện tử}} để đặt lại mật khẩu. {{PLURAL:$1|Tên người dùng và mật khẩu|Các tên người dùng và mật khẩu}} được liệt kê dưới đây.",
-       "passwordreset-emailerror-capture2": "Không gửi được thư điện tử đến {{GENDER:$2}}người dùng: $1 {{PLURAL:$3|Tên người dùng và mật khẩu|Các tên người dùng và mật khẩu}} được liệt kê dưới đây.",
        "passwordreset-nocaller": "Yêu cầu hàm gọi",
        "passwordreset-nosuchcaller": "Hàm gọi không tồn tại: $1",
        "passwordreset-ignored": "Tác vụ đặt lại mật khẩu không được xử lý. Có lẽ trình cung cấp chưa được cấu hình?",
-       "passwordreset-invalideamil": "Địa chỉ thư điện tử không hợp lệ",
+       "passwordreset-invalidemail": "Địa chỉ thư điện tử không hợp lệ",
        "passwordreset-nodata": "Cả tên người dùng và địa chỉ thư điện tử bị thiếu",
        "changeemail": "Đổi hoặc gỡ địa chỉ thư điện tử",
        "changeemail-header": "Điền biểu mẫu này để đổi địa chỉ thư điện tử của bạn. Nếu bạn muốn gỡ địa chỉ thư điện tử nào khỏi tài khoản của bạn, để trống hộp địa chỉ thư điện tử mới và lưu biểu mẫu.",
        "right-siteadmin": "Khóa và mở khóa cơ sở dữ liệu",
        "right-override-export-depth": "Xuất trang kèm theo các trang được liên kết đến với độ sâu tối đa là 5",
        "right-sendemail": "Gửi thư điện tử cho thành viên khác",
-       "right-passwordreset": "Xem các thư điện tử đặt lại mật khẩu",
        "right-managechangetags": "Tạo và bật/tắt [[Special:Tags|thẻ]]",
        "right-applychangetags": "Áp dụng [[Special:Tags|thẻ]], cùng với những thay đổi của một người",
        "right-changetags": "Thêm và loại bỏ tùy ý các [[Special:Tags|thẻ]] vào các phiên bản riêng và các mục nhật trình",
        "grant-basic": "Quyền cơ bản",
        "grant-viewdeleted": "Xem các trang và tập tin đã xóa",
        "grant-viewmywatchlist": "Xem danh sách theo dõi của bạn",
+       "grant-viewrestrictedlogs": "Xem mục nhật trình hạn chế",
        "newuserlogpage": "Nhật trình mở tài khoản",
        "newuserlogpagetext": "Đây là danh sách những tài khoản thành viên mở lên gần đây.",
        "rightslog": "Nhật trình cấp quyền thành viên",
        "apisandbox-continue": "Tiếp tục",
        "apisandbox-continue-clear": "Đặt lại",
        "apisandbox-continue-help": "{{int:apisandbox-continue}} sẽ [https://www.mediawiki.org/wiki/API:Query#Continuing_queries tiếp tục] lời yêu cầu cuối cùng; {{int:apisandbox-continue-clear}} sẽ đặt lại các tham số có liên quan đến chức năng tiếp tục yêu cầu.",
+       "apisandbox-param-limit": "Nhập <kbd>max</kbd> để sử dụng hạn chế tối đa.",
        "booksources": "Nguồn sách",
        "booksources-search-legend": "Tìm kiếm nguồn sách",
        "booksources-search": "Tìm kiếm",
        "booksources-text": "Dưới đây là danh sách những trang bán sách mới và cũ, đồng thời có thể có thêm thông tin về những cuốn sách bạn đang tìm:",
        "booksources-invalid-isbn": "ISBN mà bạn cung cấp dường như không đúng; xin hãy kiểm tra lại xem có lỗi gì khi sao chép từ nội dung gốc hay không.",
+       "magiclink-tracking-rfc": "Trang sử dụng liên kết tự động RFC",
+       "magiclink-tracking-rfc-desc": "Trang sử dụng liên kết tự động RFC. Xem thông tin về cách chuyển đổi tại [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org].",
+       "magiclink-tracking-pmid": "Trang sử dụng liên kết tự động PMID",
+       "magiclink-tracking-pmid-desc": "Trang sử dụng liên kết tự động PMID. Xem thông tin về cách chuyển đổi tại [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org].",
+       "magiclink-tracking-isbn": "Trang sử dụng liên kết tự động ISBN",
+       "magiclink-tracking-isbn-desc": "Trang sử dụng liên kết tự động ISBN. Xem thông tin về cách chuyển đổi tại [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org].",
        "specialloguserlabel": "Người thực hiện:",
        "speciallogtitlelabel": "Mục tiêu (tiêu đề hoặc {{ns:user}}:Tên-người-dùng đối với người dùng):",
        "log": "Nhật trình",
        "activeusers-intro": "Dánh sách này liệt kê các thành viên đã hoạt động cách nào đó trong $1 ngày qua.",
        "activeusers-count": "$1 tác vụ trong {{PLURAL:$3|ngày|$3 ngày}} qua",
        "activeusers-from": "Hiển thị thành viên bắt đầu từ:",
-       "activeusers-hidebots": "Ẩn robot",
-       "activeusers-hidesysops": "Ẩn bảo quản viên",
+       "activeusers-groups": "Xem những người dùng theo nhóm:",
        "activeusers-noresult": "Không thấy thành viên.",
        "activeusers-submit": "Xem người dùng tích cực",
        "listgrouprights": "Nhóm thành viên",
        "modifiedarticleprotection": "đã đổi mức khóa cho “[[$1]]”",
        "unprotectedarticle": "đã mở khóa cho “[[$1]]”",
        "movedarticleprotection": "đã di chuyển thiết lập khóa trang từ “[[$2]]” đến “[[$1]]”",
+       "protectedarticle-comment": "{{GENDER:$2}}Đã khóa “[[$1]]”",
+       "modifiedarticleprotection-comment": "Đã {{GENDER:$2|thay đổi mức khóa}} của “[[$1]]”",
+       "unprotectedarticle-comment": "{{GENDER:$2}}Đã mở khóa “[[$1]]”",
        "protect-title": "Thiết lập mức khóa cho “$1”",
        "protect-title-notallowed": "Xem mức khóa cho “$1”",
        "prot_1movedto2": "[[$1]] đổi thành [[$2]]",
        "movelogpagetext": "Dưới đây là danh sách các trang đã được di chuyển.",
        "movesubpage": "{{PLURAL:$1|Trang con|Các trang con}}",
        "movesubpagetext": "Trang này có $1 trang con như hiển thị dưới đây.",
+       "movesubpagetalktext": "Trang thảo luận tương ứng có $1 trang con như hiển thị dưới đây.",
        "movenosubpage": "Trang này không có trang con.",
        "movereason": "Lý do:",
        "revertmove": "lùi lại",
        "pageinfo-category-pages": "Số trang",
        "pageinfo-category-subcats": "Số thể loại con",
        "pageinfo-category-files": "Số tập tin",
+       "pageinfo-user-id": "ID người dùng",
        "markaspatrolleddiff": "Đánh dấu tuần tra",
        "markaspatrolledtext": "Đánh dấu tuần tra trang này",
        "markaspatrolledtext-file": "Đánh dấu đã tuần tra phiên bản file này",
        "patrol-log-header": "Đây là nhật trình tuần tra phiên bản.",
        "log-show-hide-patrol": "$1 nhật trình tuần tra",
        "log-show-hide-tag": "Nhật trình đánh dấu $1",
+       "confirm-markpatrolled-button": "OK",
+       "confirm-markpatrolled-top": "Đánh dấu tuần tra phiên bản $3 của $2?",
        "deletedrevision": "Đã xóa phiên bản cũ $1",
        "filedeleteerror-short": "Lỗi xóa tập tin: $1",
        "filedeleteerror-long": "Có lỗi khi xóa tập tin:\n\n$1",
        "newimages-showbots": "Xem các tập tin do bot tải lên",
        "newimages-hidepatrolled": "Ẩn tập tin tải lên đã tuần tra",
        "noimages": "Chưa có hình.",
+       "gallery-slideshow-toggle": "Bật/tắt hình nhỏ",
        "ilsubmit": "Tìm kiếm",
        "bydate": "theo ngày",
        "sp-newimages-showfrom": "Trưng bày các tập tin từ $2 $1 trở về sau",
        "tags-deactivate": "vô hiệu",
        "tags-hitcount": "$1 thay đổi",
        "tags-manage-no-permission": "Bạn không có quyền hạn để quản lý các thẻ thay đổi.",
-       "tags-manage-blocked": "Bạn không thể quản lý thẻ đánh dấu trong lúc bị cấm.",
+       "tags-manage-blocked": "{{GENDER:$1}}Bạn không thể quản lý thẻ đánh dấu trong lúc bị cấm.",
        "tags-create-heading": "Tạo một thẻ mới",
        "tags-create-explanation": "Theo mặc định, các thẻ mới được tạo ra sẽ được hợp lệ hóa để người dùng và các bot sử dụng.",
        "tags-create-tag-name": "Tên thẻ:",
        "tags-deactivate-not-allowed": "Không thể vô hiệu hóa thẻ “$1”.",
        "tags-deactivate-submit": "Vô hiệu",
        "tags-apply-no-permission": "Bạn không có quyền áp dụng các thẻ thay đổi cùng các thay đổi của bạn.",
-       "tags-apply-blocked": "Bạn không thể thay đổi các thẻ đánh dấu cùng với các thay đổi của bạn trong lúc bị cấm.",
+       "tags-apply-blocked": "{{GENDER:$1}}Bạn không thể thay đổi các thẻ đánh dấu cùng với các thay đổi của bạn trong lúc bị cấm.",
        "tags-apply-not-allowed-one": "Thẻ “$1” không được phép được áp dụng thủ công.",
        "tags-apply-not-allowed-multi": "{{PLURAL:$2|Thẻ|Các thẻ}} sau không được phép áp dụng thủ công: $1",
        "tags-update-no-permission": "Bạn không có quyền thêm hoặc loại bỏ các thẻ thay đổi từ phiên bản riêng hoặc mục nhật trình.",
-       "tags-update-blocked": "Bạn không thể gắn hoặc gỡ thẻ đánh dấu trong lúc bị cấm.",
+       "tags-update-blocked": "{{GENDER:$1}}Bạn không thể gắn hoặc gỡ thẻ đánh dấu trong lúc bị cấm.",
        "tags-update-add-not-allowed-one": "Thẻ “$1” không được phép thêm vào thủ công.",
        "tags-update-add-not-allowed-multi": "{{PLURAL:$2|Thẻ|Các thẻ}} sau không được phép thêm thủ công: $1",
        "tags-update-remove-not-allowed-one": "Thẻ đánh dấu “$1” không được phép loại bỏ.",
        "feedback-thanks": "Cảm ơn! Phản hồi của bạn đã được đăng lên trang “[$2 $1]”.",
        "feedback-thanks-title": "Cảm ơn!",
        "feedback-useragent": "Tác nhân người dùng:",
-       "searchsuggest-search": "Tìm kiếm",
+       "searchsuggest-search": "Tìm kiếm {{SITENAME}}",
        "searchsuggest-containing": "có chứa…",
        "api-error-autoblocked": "Địa chỉ IP của bạn bị cấm tự động vì nó đã được sử dụng bởi một người dùng bị cấm.",
        "api-error-badaccess-groups": "Bạn không được phép tải tập tin lên wiki này.",
        "authmanager-authn-autocreate-failed": "Thất bại khi tự động tạo tài khoản địa phương: $1",
        "authmanager-change-not-supported": "Không thể thay đổi định danh được cung cấp, vì sẽ không có gì sử dụng nó.",
        "authmanager-create-disabled": "Chứng năng tạo tài khoản được tắt.",
-       "authmanager-create-from-login": "Để tạo tài khoản của mình, xin hãy điền vào các thông tin bên dưới.",
+       "authmanager-create-from-login": "Để tạo tài khoản của mình, xin hãy điền vào các thông tin.",
        "authmanager-create-not-in-progress": "Không phải đang tạo tài khoản, hoặc dữ liệu phiên làm việc bị mất. Xin hãy thử lại từ đầu.",
        "authmanager-create-no-primary": "Không thể sử dụng định danh được cung cấp để tạo tài khoản.",
        "authmanager-link-no-primary": "Không thể sử dụng định danh được cung cấp để liên kết tài khoản.",
        "usercssispublic": "Xin lưu ý: Các trang con CSS không nên chứa dữ liệu bí mật, vì những người dùng khác có thể xem các trang này.",
        "restrictionsfield-badip": "Địa chỉ hoặc dải IP không hợp lệ: $1.",
        "restrictionsfield-label": "Các dải IP được cho phép:",
-       "restrictionsfield-help": "Mỗi dòng một địa chỉ IP hoặc dải CIDR. Để kích hoạt tất cả mọi địa chỉ IP, sử dụng<br><code>0.0.0.0/0</code><br><code>::/0</code>"
+       "restrictionsfield-help": "Mỗi dòng một địa chỉ IP hoặc dải CIDR. Để kích hoạt tất cả mọi địa chỉ IP, sử dụng<br><code>0.0.0.0/0</code><br><code>::/0</code>",
+       "edit-error-short": "Lỗi: $1",
+       "edit-error-long": "Lỗi:\n\n$1"
 }
index 0f2b80e..c4d76c3 100644 (file)
        "yourname": "Benudsârnôômâ",
        "yourpassword": "Bhaswôrd:",
        "yourpasswordagain": "Bassworrd widderhulln:",
-       "remembermypassword": "Miid den Brauser dauerhafd ogmeld bleim (maximal $1 {{PLURAL:$1|Dooch|Dooch}})",
        "login": "Ôômeldn",
        "nav-login-createaccount": "Oomeldn / Ghondoo ooleeng",
        "userlogin": "Ôômeldn / Als Bajdräächâr ajschrajm",
index 71f37b9..52d2d5b 100644 (file)
        "listusers-noresult": "Geban nonik petuvon.",
        "listusers-blocked": "(pebloköl)",
        "activeusers-count": "{{PLURAL:$1|dunot|dunots}} $1 ün {{PLURAL:$3|del lätik|dels lätik $3}}",
-       "activeusers-hidebots": "Klänedolöd elis bot",
-       "activeusers-hidesysops": "Klänedolöd guvanis",
        "activeusers-noresult": "Geban nonik petuvon.",
        "listgrouprights": "Gitäts gebanagrupa",
        "listgrouprights-summary": "Is palisedons gebanagrups in vük at dabinöls, sa gitäts tefik onsik.\nBa dabinons [[{{MediaWiki:Listgrouprights-helppage}}|nüns pluik]] tefü gebanagitäts patik.",
        "logentry-newusers-create": "Gebanakal: $1 pejafon",
        "rightsnone": "(nonik)",
        "revdelete-summary": "plän redakama",
-       "feedback-error-title": "Pöl",
        "feedback-subject": "Yegäd:",
        "searchsuggest-search": "Suk",
        "searchsuggest-containing": "ninädöl...",
index ef9200d..d1460b8 100644 (file)
        "yourname": "Cäüttijänimi:",
        "yourpassword": "Salasõna",
        "yourpasswordagain": "Tõissaga salain-sõna:",
-       "remembermypassword": "Mäleht minuu (enintään $1 {{PLURAL:$1|päivä|päivää}})",
        "login": "Cirjut süäme",
        "nav-login-createaccount": "Cirjut süäme vai registriiroit cäüttijässi",
        "userlogin": "Cirjut süäme",
index 9f36244..9a4f66e 100644 (file)
        "yourpasswordagain": "Utroha pagbutang an tigaman-han-pagsakob:",
        "createacct-yourpasswordagain": "Igkompirma an tigaman-pagsakob",
        "createacct-yourpasswordagain-ph": "Igbutang an tigaman-pagsakob utro",
-       "remembermypassword": "Hinumdumi an akon pan-sakob dinhi nga panngaykay ''(browser)'' (para ha pinakamaiha $1 {{PLURAL:$1|ka adlaw|ka mga adlaw}})",
        "userlogin-remembermypassword": "I-log-in la ako",
        "userlogin-signwithsecure": "Gamit hin koneksyon nga nakakasegurado",
        "cannotloginnow-title": "Diri nakakalog-in yana",
        "botpasswords-label-delete": "Paraa",
        "botpasswords-label-resetpassword": "Igreset an password",
        "botpasswords-label-grants": "Mga applicable grant",
-       "botpasswords-label-restrictions": "Mga gindidiri ha paggamit:",
        "botpasswords-label-grants-column": "Ginhatag",
        "botpasswords-bad-appid": "An ngaran han bot nga \"$1\" in diri puydi gamiton.",
        "botpasswords-insert-failed": "Pakyas han pagdugang han ngaran han bot nga \"$1\". Naidugang na ini?",
        "passwordreset-emailtext-ip": "Mayda gumaramit (bangin hi ikaw, tikang han IP adres nga $1) nga naghangyo hin reset han imo tigaman-pansulod han {{SITENAME}} ($4). An nasunod nga gumaramit {{PLURAL:$3|nga akawnt|nga mga akawnt}} nahanungod hini nga email nga adres: \n\n$2\n\n{{PLURAL:$3|Iní nga temporaryo nga tigaman-pansulod|Iní nga mga temporaryo nga tigaman-pansulod}} ma-waray bali hin {{PLURAL:$5|usa ka adlaw|$5 nga mga adlaw}}.\nAngay ka sumakob ngan pumílì hin bag-o nga tigaman-pansulod ha yanâ.  Kun mayda lain nga naghatag hini nga hangyo, o kun nahinumdoman mo an imo orihinal nga tigaman-pansulod, ngan nadírì ka na pagbalyo hiní, puyde mo pasagdan ini nga sumat ngan magpadayon hin paggamit han imo daan nga tigaman-pansulod.",
        "passwordreset-emailelement": "Agnay han gumaramit: \n$1\n\nTemporaryo nga tigaman han pagsakob: \n$2",
        "passwordreset-emailsentemail": "Kun inin nga email address in may pagkahisumpay ha imo account, papadangaton ka hin usa nga password reset email.",
-       "passwordreset-emailsent-capture": "Ginpadangat an password reset email, nga ginpakita ha ubos.",
-       "passwordreset-emailerror-capture": "Ginhimo an password reset email, kun diin nakikita ha ubos, pero pakyas an pagpadara ha  {{GENDER:$2|gumaramit}}: $1",
        "changeemail": "Igliwat o igtanggal an e-mail address",
        "changeemail-header": "Kompletoha ini nga form para masalyuan an imo email address. Kun karuyag nimo tanggalun an may pagkahisumpay han bisan ano nga email address tikang ha imo account, blankoha la an bag-o nga email address kun magsusumiti ka han form.",
-       "changeemail-passwordrequired": "Kinahanglan nim igbutang an imo password para igkompirma inin nga pagbag-o.",
        "changeemail-no-info": "Kinahanglanon mo mag-log-in para ka direkta makasakob hini nga pakli.",
        "changeemail-oldemail": "Yana nga e-mail address:",
        "changeemail-newemail": "Bag-o nga e-mail address:",
        "undo-norev": "An pagliwat in diri mapapawaray-buhat tungod waray ito dida o napara na.",
        "undo-summary": "Ginpawara-buhat an rebisyon nga $1 ni [[Special:Contributions/$2|$2]] ([[User talk:$2|himangrawi]])",
        "undo-summary-username-hidden": "Igpawara-an-ginbuhat nga rebisyon $1 han uska tago nga gumaramit",
-       "cantcreateaccounttitle": "Diri makakahimo hin akawnt",
        "cantcreateaccount-text": "An paghimo hin akawnt hini nga IP address  ('''$1''') in ginpugngan ni [[User:$3|$3]]. An rason nga ginhatag ni $3 in ''$2''",
        "viewpagelogs": "Kitaa an mga log para hini nga pakli",
        "nohistory": "Waray kaagi hin pagliwat hin nga pakli.",
        "listusers-blocked": "(ginpugngan)",
        "activeusers": "Taramdan hin mga gumaramit nga nanggigios",
        "activeusers-from": "Igpakita an mga gumaramit tikang ha:",
-       "activeusers-hidebots": "Igtago an mga bot",
-       "activeusers-hidesysops": "Igtago an mga magdudumara",
        "activeusers-noresult": "Waray gumaramit nga nahiagian.",
        "activeusers-submit": "Igpakita an mga gumaramit nga nangigios",
        "listgrouprights": "Mga katungod han grupo hin gumaramit",
        "feedback-back": "Balik",
        "feedback-cancel": "Pasagdi",
        "feedback-close": "Human na.",
-       "feedback-error-title": "Sayop",
        "feedback-error2": "Sayop: Pakyas an pagliwat",
        "feedback-message": "Mensahe:",
        "feedback-subject": "Himangrawon:",
index e9877a5..5197c00 100644 (file)
        "yourpasswordagain": "密码再打一遍:",
        "createacct-yourpasswordagain": "确认密码",
        "createacct-yourpasswordagain-ph": "再打一遍密码",
-       "remembermypassword": "来箇只浏览器上记牢我个登录状态(顶长$1天)",
        "userlogin-remembermypassword": "记牢我个登录状态",
        "userlogin-signwithsecure": "用保险链接",
        "yourdomainname": "侬个域名:",
index 7dae096..c27fc60 100644 (file)
        "yourname": "Демнәчнә нерн:",
        "yourpassword": "Нууц үг:",
        "yourpasswordagain": "Нууц үг давтн:",
-       "remembermypassword": "Намаг эн тоолдврд тодлх ($1 {{PLURAL:$1|1=өдрт|өдрмүдт}} икәр биш)",
        "yourdomainname": "Тана домен:",
        "login": "Орлһн",
        "nav-login-createaccount": "Орх/бүрткгдх",
index d67a289..51150e4 100644 (file)
        "yourpasswordagain": "კჷნე გეკორობით პაროლი:",
        "createacct-yourpasswordagain": "დადასურით პაროლი",
        "createacct-yourpasswordagain-ph": "ხოლო ართშა გენშიონით პაროლი",
-       "remembermypassword": "ქჷგიშინი ჩქიმი მიშულა თე ბრაუზერს (მაქსიმუმ $1 დღას)",
        "userlogin-remembermypassword": "ქუდომტე მიშულირო",
        "userlogin-signwithsecure": "უსაფრთხო კავშირის გამოყენება",
        "yourdomainname": "თქვან დომენ",
        "passwordreset-emailtext-user": "მომხმარებელმა $1 პროექტიდან {{SITENAME}} მოითხოვა თქვენი \nპაროლის თავიდან დაყენება საიტისათვის {{SITENAME}} ($4).\n{{PLURAL:$3|შემდეგი ანგარიში მიბმულია|შემდეგი ანგარიშები მიბმულია}} ამ ელ.ფოსტის მისამართზე:\n\n$2\n\n{{PLURAL:$3|ეს დროებითი პაროლი|ეს დროებითი პაროლები}} იმოქმედებს {{PLURAL:$5|ერთი დღე|$5 დღე}}.\nთქვენ უნდა შეხვიდეთ სისტემაში და აირჩიოთ ახალი პაროლი.\nთუ თქვენ არ გაგიკეთებიათ აღნიშნული მოთხოვნა, ან გაიხსენეთ თქვენი პაროლი\nდა აღარ გსურთ მისი შეცვლა, მაშინ შეგიძლიათ იგნორირება გაუკეთოთ ამ შეტყობინებას\nდა გააგრძელოთ თქვენი ძველი პაროლის გამოყენება.",
        "passwordreset-emailelement": "მომხმარებლის სახელი: \n$1\n\nდროებითი პაროლი: \n$2",
        "passwordreset-emailsentemail": "პაროლის თავიდან დასაყენებელი ელ.ფოსტა გაიგზავნა.",
-       "passwordreset-emailsent-capture": "ქვემოთ ნაჩვენები პაროლის თავიდან დასაყენებელი წერილი გაიგზავნა.",
-       "passwordreset-emailerror-capture": "ქვემოთ მოცემულია შექმნილი პაროლის დასაყენებელი წერილი, რომლის გაგზავნაც {{GENDER:$2|მომხმარებელთან}} ვერ მოხერხდა: $1 გამო",
        "changeemail": "გენშიონით თქვანი ელ. ფოსტაშ ოწურაფუ",
        "changeemail-header": "შეავსეთ ეს ფორმა თქვენი ელ-ფოსტის მისამართის შესაცვლელად. თქვენი პაროლის შეყვანა დაგჭირდებათ ამ ცვლილების დასადასტურებლად.",
        "changeemail-no-info": "კონკრეტულად ამ გვერდთან სამუშაოდ თქვენ უნდა წარადგინოთ თავი სისტემისადმი.",
        "undo-norev": "რედაქტირება ვერ გაუქმდება რადგანაც არ არსებობს ან წაშლილი იქნა.",
        "undo-nochange": "როგორც ჩანს, რედაქტირება უკვე გაუქმდა.",
        "undo-summary": "[[Special:Contributions/$2|$2-ის]]([[User talk:$2|განხილვა]]) ცვლილებების გაუქმება (№$1)",
-       "cantcreateaccounttitle": "ანგარიშის შექმნა ვერ ხერხდება",
        "cantcreateaccount-text": "ამ IP-მისამართიდან აიკრძალა (<strong>$1</strong>) მომხმარებელ [[User:$3|$3]]-ის მიერ.\n\n$3-მა მიუთითა შემდეგი მიზეზი: <em>$2</em>",
        "viewpagelogs": "თე ხასჷლაშო ორეგისტრაციე ჟურნალეფიშ ძირაფა",
        "nohistory": "ამ გვერდს განხილვის გვერდი ცარიელი აქვს.",
        "feedback-external-bug-report-button": "ტექნიკური დავალების გაგზავნა",
        "feedback-dialog-title": "გამოხმაურების გაგზავნა",
        "feedback-dialog-intro": "თქვენ შეგიძლიათ ისარგებლოთ ქვემოთ არსებული მარტივი ფორმით, რათა დატოვოთ თქვენი გამოძახილი. კომენტარები თქვენ მომხმარებლის სახელთან ერთად დამატებული იქნება \"$1\" გვერდზე",
-       "feedback-error-title": "ჩილათა",
        "feedback-error1": "შეცდომა. API-ს მოულოდნელი რეზულტატი",
        "feedback-error2": "შეცდომა: რედაქტირება ვერ განხორციელდა",
        "feedback-error3": "შეცდომა. არ არის API-ს პასუხი",
index d2f0247..8a9f6f1 100644 (file)
        "passwordreset-emailsentusername": "טאמער איז פאראן אן ע־פאסט אדרעס פארקניפט מיט דעם באניצער־נאמען, וועט מען שיקן א פאסווארט צוריקשטעלן ע-פּאָסט.",
        "passwordreset-nocaller": "מען דארף פֿארזארגן א רופֿער",
        "passwordreset-nosuchcaller": "רופֿער איז נישט פֿאראן: $1",
-       "passwordreset-invalideamil": "אומגילטיקער ע־פאסט אדרעס",
+       "passwordreset-invalidemail": "אומגילטיקער ע־פאסט אדרעס",
        "changeemail": "ענדערן אדער אראפנעמען ע-פּאָסט אַדרעס",
        "changeemail-header": "דערגאַנצט די פֿאָרעם צו ענדערן אייער ע-פּאָסט אַדרעס .\nטאמער ווילט איר אראפנעמען די צוארדנונג פון איינעם פון אייערע ע־פאסט אדרעסן פו אייער קאנטע, לאזט ליידיג דעם נייעם ע־פאסט אדרעס ווען איר גיט איין די פֿארעם.",
        "changeemail-no-info": "איר דאַרפֿט זיין אַרײַנלאגירט צוצוקומען גלײַך צו דעם דאָזיגן בלאַט.",
        "activeusers-intro": "דאָס איז א ליסטע פֿון באַניצער וואָס זענען געווען אַקטיוו אינערהאָלב  $1 {{PLURAL:$1|דעם לעצטן טאָג|די לעצטע $1 טעג}}.",
        "activeusers-count": "$1 {{PLURAL:$1|פעולה|פעולות}} אין  {{PLURAL:$3|דעם לעצטן טאָג|די לעצטע $3 טעג}}",
        "activeusers-from": "ווײַזן באַניצער אָנהייבנדיג פון:",
-       "activeusers-hidebots": "באַהאַלטן באטן",
-       "activeusers-hidesysops": "באַהאַלטן סיסאפן",
        "activeusers-noresult": "קיין באניצער נישט געטראפֿן.",
        "activeusers-submit": "ווייזן טעטיגע באניצער",
        "listgrouprights": "באַניצער גרופע רעכטן",
index 1c41e4a..ec49fc8 100644 (file)
        "activeusers-intro": "Èyí ni àtòjọ àwọn oníṣe tí wọ́n ní irú àgbéṣe kan láàrin {{PLURAL:$1|ọjọ́|ọjọ́}} $1 sẹ́yìn.",
        "activeusers-count": "{{PLURAL:$1|Àtúnṣe|Àwọn àtúnṣe}} $1 ní {{PLURAL:$3|ọjọ́|ọjọ́}} $3 sẹ́yìn",
        "activeusers-from": "Ìfihàn àwọn oníṣe nípa bíbẹ̀rẹ̀ láti:",
-       "activeusers-hidebots": "Ìbòmọ́lẹ̀ àwọn bọt",
-       "activeusers-hidesysops": "Ìbòmọ́lẹ̀ àwọn olùmójútó",
        "activeusers-noresult": "Kò rí oníṣe kankan.",
        "listgrouprights": "Àwọn ẹ̀tọ́ ẹgbẹ́ oníṣe",
        "listgrouprights-summary": "Nísàlẹ̀ ni àtòjọ àwọn ẹgbẹ́ oníṣe tó nítumọ̀ lórí wiki yìí, pẹ̀lú àwọn ẹ̀tọ́ lílò wọn.\nÓ ṣe é ṣe kí [[{{MediaWiki:Listgrouprights-helppage}}|ẹ̀kúnrẹ́rẹ́]] ó wà nípa ẹ̀tọ́ kọ̀ọ̀kan.",
index b3838a7..9a3a44f 100644 (file)
        "yourpassword": "Wachtwoôrd",
        "userlogin-yourpassword": "Wachtwoôrd",
        "yourpasswordagain": "Heef je wachtwoôrd opnieuw in:",
-       "remembermypassword": "Anmeldhehevens ontouwen (maximaal $1 {{PLURAL:$1|dag|daege}})",
        "yourdomainname": "Je domein:",
        "externaldberror": "Der is een fout opetreeën bie 't anmelden bie de database of je ei hin toestemmieng jen externe gebruker bie te werken.",
        "login": "Anmelden",
        "undo-success": "Ieronder sti de tekst wirin a de wiezigieng onedaene is emikt. Controleer voe 't opslaene of a 't resultaot ewenst is.",
        "undo-failure": "De wiezigieng kan nie onhedaen emikt worn vanwehe aore striedihe wiezigiengen.",
        "undo-summary": "Versie $1 van [[Special:Contributions/$2|$2]] ([[User talk:$2|overleg]]) onedaen emikt.",
-       "cantcreateaccounttitle": "Anmaeken gebruker mislukt.",
        "cantcreateaccount-text": "'t Anmaeken van gebrukers van dit IP-adres (<b>$1</b>) is eblokkeerd deur [[User:$3|$3]].\n\nDe deur $3 opeheven reeën is ''$2''",
        "viewpagelogs": "Bekiek de logboeken vò deêze bladzie",
        "nohistory": "Deêze pagina is nie bewerkt.",
index f6d5a6d..dca725b 100644 (file)
        "passwordreset-emaildisabled": "此Wiki上无法使用邮件功能。",
        "passwordreset-username": "用户名:",
        "passwordreset-domain": "域:",
-       "passwordreset-capture": "查看生成的电子邮件吗?",
-       "passwordreset-capture-help": "如果您选中此框,电子邮件(包括临时密码)将显示,并发送给用户。",
        "passwordreset-email": "电子邮件地址:",
        "passwordreset-emailtitle": "在 {{SITENAME}} 的帐户详细信息",
        "passwordreset-emailtext-ip": "有人(可能是您,来自IP地址$1)请求重设{{SITENAME}}($4)上相关账户的密码。以下$3个账户与该电子邮件地址关联:\n\n$2\n\n这个临时密码将会在{{PLURAL:$5|一天|$5天}}后过期。请立即登录并设置新的密码。如果请求是其他人发出的,或者您已回忆起您的旧密码并不再需要更改,您可以忽略本条消息并继续使用原密码。",
        "passwordreset-emailelement": "用户名:\n$1\n\n临时密码:\n$2",
        "passwordreset-emailsentemail": "如果此邮件地址与您的账户相关联的话,将发送一封密码重置邮件。",
        "passwordreset-emailsentusername": "如果有邮件地址与此用户名相关联的话,将发送一封密码重置邮件。",
-       "passwordreset-emailsent-capture2": "密码重置{{PLURAL:$1|邮件}}已发送。{{PLURAL:$1|用户名和密码|用户名和密码列表}}在此显示。",
-       "passwordreset-emailerror-capture2": "向{{GENDER:$2|用户}}发送电子邮件失败:$1 {{PLURAL:$3|用户名和密码|用户名和密码列表}}在此显示。",
        "passwordreset-nocaller": "必须提供一个调用方",
        "passwordreset-nosuchcaller": "调用方不存在:$1",
        "passwordreset-ignored": "密码重置没有处理。也许没有配置提供者?",
-       "passwordreset-invalideamil": "无效的电子邮件地址",
+       "passwordreset-invalidemail": "无效的电子邮件地址",
        "passwordreset-nodata": "用户名和电子邮件地址均未提供",
        "changeemail": "更改或移除电子邮件地址",
        "changeemail-header": "完成此表格以更改您的电子邮件地址。如果您希望从您的账户中移除任何关联的电子邮件地址,请在提交表格时将新电子邮件地址留空。",
        "right-siteadmin": "锁定和解锁数据库",
        "right-override-export-depth": "导出页面,包括最多5层链接",
        "right-sendemail": "发送电子邮件给其他用户",
-       "right-passwordreset": "查看密码重置电子邮件",
        "right-managechangetags": "创建和(取消)激活[[Special:Tags|标签]]",
        "right-applychangetags": "连同某人的更改一起应用[[Special:Tags|标签]]",
        "right-changetags": "在个别修订和日志记录中添加和移除任意[[Special:Tags|标签]]",
        "nrevisions": "$1个版本",
        "nimagelinks": "用于$1个页面中",
        "ntransclusions": "用于$1个页面中",
-       "specialpage-empty": "æ­¤æ\8a¥å\91\8aæ\97 结果。",
+       "specialpage-empty": "没æ\9c\89ç\94¨äº\8eæ­¤æ\8a¥å\91\8aç\9a\84结果。",
        "lonelypages": "孤立页面",
        "lonelypagestext": "以下页面没有被{{SITENAME}}的其它页面链接或包含。",
        "uncategorizedpages": "未归类页面",
        "mostimages": "最多链接文件",
        "mostinterwikis": "有最多跨wiki的页面",
        "mostrevisions": "有最多版本的页面",
-       "prefixindex": "所有前缀的页面",
-       "prefixindex-namespace": "所有前缀的页面($1名字空间)",
+       "prefixindex": "所有前缀的页面",
+       "prefixindex-namespace": "所有前缀的页面($1名字空间)",
        "prefixindex-submit": "显示",
        "prefixindex-strip": "在列表中除去前缀",
        "shortpages": "短页面",
        "apisandbox-continue": "继续",
        "apisandbox-continue-clear": "清除",
        "apisandbox-continue-help": "{{int:apisandbox-continue}}将[https://www.mediawiki.org/wiki/API:Query#Continuing_queries 继续]上次请求;{{int:apisandbox-continue-clear}}将清除继续相关的参数。",
+       "apisandbox-param-limit": "输入<kbd>max</kbd>以使用最大限制。",
        "booksources": "网络书源",
        "booksources-search-legend": "搜索图书来源",
        "booksources-isbn": "ISBN:",
        "allarticles": "所有页面",
        "allinnamespace": "所有页面($1名字空间)",
        "allpagessubmit": "提交",
-       "allpagesprefix": "显示有该前缀的页面:",
+       "allpagesprefix": "显示前缀的页面:",
        "allpagesbadtitle": "给定的页面标题是非法的,或者具有一个内部语言或内部 wiki 的前缀。它可能包含一个或更多的不能用于标题的字符。",
        "allpages-bad-ns": "在{{SITENAME}}中没有一个叫做\"$1\"的名字空间。",
        "allpages-hide-redirects": "隐藏重定向",
        "activeusers-count": "过去$3天有$1次操作",
        "activeusers-from": "显示用户开始于:",
        "activeusers-groups": "显示属于用户组的用户:",
+       "activeusers-excludegroups": "排除属于用户组的用户:",
        "activeusers-noresult": "找不到用户。",
        "activeusers-submit": "显示活跃用户",
        "listgrouprights": "用户组权限",
        "tags-deactivate": "取消激活",
        "tags-hitcount": "$1个更改",
        "tags-manage-no-permission": "您没有权限管理更改标签。",
-       "tags-manage-blocked": "不能在被封禁的情况下管理更改标签。",
+       "tags-manage-blocked": "{{GENDER:$1|您}}不能在被封禁的情况下管理更改标签。",
        "tags-create-heading": "创建一个新标签",
        "tags-create-explanation": "默认情况下,新创建的标签将可供用户和机器人使用。",
        "tags-create-tag-name": "标签名称:",
        "tags-deactivate-not-allowed": "无法取消激活标签“$1”。",
        "tags-deactivate-submit": "取消激活",
        "tags-apply-no-permission": "您并无权限连带您的更改一起应用更改标签。",
-       "tags-apply-blocked": "不能在被封禁的情况下应用更改标签到您的更改中。",
+       "tags-apply-blocked": "{{GENDER:$1|您}}不能在被封禁的情况下应用更改标签到您的更改中。",
        "tags-apply-not-allowed-one": "标签“$1”不允许手动应用。",
        "tags-apply-not-allowed-multi": "以下{{PLURAL:$2|标签}}不允许手动应用:$1",
        "tags-update-no-permission": "您并无权限从个别修订或日志记录中添加或移除更改标签。",
-       "tags-update-blocked": "不能在被封禁的情况下添加或移除更改标签。",
+       "tags-update-blocked": "{{GENDER:$1|您}}不能在被封禁的情况下添加或移除更改标签。",
        "tags-update-add-not-allowed-one": "标签“$1”不被允许手动添加。",
        "tags-update-add-not-allowed-multi": "以下{{PLURAL:$2|标签}}不被允许手动添加:$1",
        "tags-update-remove-not-allowed-one": "标签“$1”不被允许移除。",
        "mediastatistics-header-audio": "音频",
        "mediastatistics-header-video": "视频",
        "mediastatistics-header-multimedia": "富媒体",
-       "mediastatistics-header-office": "办公文件",
+       "mediastatistics-header-office": "文档",
        "mediastatistics-header-text": "文本",
        "mediastatistics-header-executable": "可执行文件",
        "mediastatistics-header-archive": "压缩格式",
index fc41120..cd9060b 100644 (file)
        "currentevents-url": "Project:Current events",
        "disclaimers": "免責聲明",
        "disclaimerpage": "Project:一般免責聲明",
-       "edithelp": "編輯説明",
-       "helppage-top-gethelp": "説明",
+       "edithelp": "編輯說明",
+       "helppage-top-gethelp": "說明",
        "mainpage": "首頁",
        "mainpage-description": "首頁",
        "policy-url": "Project:Policy",
        "botpasswords-label-delete": "刪除",
        "botpasswords-label-resetpassword": "重設密碼",
        "botpasswords-label-grants": "適用的權限:",
-       "botpasswords-help-grants": "æ¯\8få\80\8bæ\8e\88æ¬\8aæ\9c\83給äº\88æ\93\81æ\9c\89該æ\8e\88æ¬\8aç\9a\84使ç\94¨è\80\85帳è\99\9få\88\97æ\96¼è©²æ\8e\88æ¬\8aæ¸\85å\96®ç\9a\84使ç\94¨è\80\85æ¬\8aé\99\90ã\80\82 請參考 [[Special:ListGrants|授權表]] 取得更多資訊。",
+       "botpasswords-help-grants": "æ\8e\88æ¬\8aå\8f¯ä»¥å\85\81許æ\82¨å­\98å\8f\96æ\82¨ç\9a\84使ç\94¨è\80\85帳è\99\9få·²ç¶\93æ\93\81æ\9c\89ç\9a\84æ¬\8aé\99\90ï¼\8cä½\86å\9c¨æ­¤é\96\8bå\95\9fæ\8e\88æ¬\8a並ä¸\8dæ\9c\83è®\93æ\82¨ç\9a\84使ç\94¨è\80\85帳è\99\9få\8f¯ä»¥å­\98å\8f\96é\82£äº\9bæ\82¨ä¸¦æ\9cªæ\93\81æ\9c\89ç\9a\84æ¬\8aé\99\90ã\80\82請參考 [[Special:ListGrants|授權表]] 取得更多資訊。",
        "botpasswords-label-grants-column": "已授權",
        "botpasswords-bad-appid": "機器人名稱 \"$1\" 無效。",
        "botpasswords-insert-failed": "新增機器人名稱 \"$1\" 失敗,是否已新增過?",
        "botpasswords-update-failed": "更新機器人名稱 \"$1\" 失敗,是否已刪除過?",
        "botpasswords-created-title": "已建立機器人密碼",
-       "botpasswords-created-body": "使用者''$2\"所擁有的機器人\"$1\"之密碼已建立。",
+       "botpasswords-created-body": "給使用者 \"$2\" 的機器人 \"$1\" 的機器人密碼已建立。",
        "botpasswords-updated-title": "已更新機器人密碼",
-       "botpasswords-updated-body": "使用者''$2\"所擁有的機器人\"$1\"之密碼已更新。",
+       "botpasswords-updated-body": "給使用者 \"$2\" 的機器人 \"$1\" 的機器人密碼已更新。",
        "botpasswords-deleted-title": "已刪除機器人密碼",
-       "botpasswords-deleted-body": "使用者''$2\"所擁有的機器人\"$1\"之密碼已刪除。",
+       "botpasswords-deleted-body": "給使用者 \"$2\" 的機器人 \"$1\" 的機器人密碼已刪除。",
        "botpasswords-newpassword": "用來登入 <strong>$1</strong> 的新密碼為 <strong>$2</strong>。 <em>請記錄此密碼以供未來參考使用。</em> <br> (較舊的機器人的登入名稱需與最終使用者名稱相同,您也可使用 <strong>$3</strong> 做為使用者名稱 <strong>$4</strong> 做為密碼。)",
        "botpasswords-no-provider": "BotPasswordsSessionProvider 無法使用。",
        "botpasswords-restriction-failed": "機器人密碼限制已拒絕此次登入。",
        "passwordreset-emaildisabled": "此 Wiki 已停用電子郵件功能。",
        "passwordreset-username": "使用者名稱:",
        "passwordreset-domain": "網域名稱:",
-       "passwordreset-capture": "檢視電子郵件內容?",
-       "passwordreset-capture-help": "若您勾選此核選方塊,電子郵件 (包含臨時密碼) 將直接顯示,並寄給使用者。",
        "passwordreset-email": "電子郵件地址:",
        "passwordreset-emailtitle": "在 {{SITENAME}} 的帳號詳細資料",
        "passwordreset-emailtext-ip": "不明人士 (可能是您自己,來自 IP 位址 $1) 要求重設在 {{SITENAME}} ($4) 的密碼,下列是與此電子郵件地址有關的使用者{{PLURAL:$3|帳號}}:\n\n$2\n\n{{PLURAL:$3|這個臨時密碼|這些臨時密碼}}將會在{{PLURAL:$5|一天|$5 天}}內到期,\n您應立即登入並更改新的密碼。如果不是您要求重設密碼,或您已想起密碼,並不準備修改,\n您可以忽略本訊息並且繼續使用您原本的密碼。",
        "passwordreset-emailelement": "使用者名稱:\n$1\n\n臨時密碼:\n$2",
        "passwordreset-emailsentemail": "若此確實為您帳號所登記的電子郵件地址,將會寄出重設密碼的信件給您。",
        "passwordreset-emailsentusername": "若此確實為您使用者名稱所登記的電子郵件地址,將會寄出重設密碼的信件給您。",
-       "passwordreset-emailsent-capture2": "密碼重設{{PLURAL:$1|郵件|郵件}}已寄出,{{PLURAL:$1|使用者名稱與密碼|使用者名稱與密碼清單}}如下顯示。",
-       "passwordreset-emailerror-capture2": "寄發電子郵件給{{GENDER:$2|使用者}}失敗:$1,{{PLURAL:$3|使用者名稱與密碼|使用者名稱與密碼清單}}如下顯示。",
        "passwordreset-nocaller": "必須提供 caller",
        "passwordreset-nosuchcaller": "Caller 不存在:$1",
        "passwordreset-ignored": "未處理密碼重設動作,可能尚未設定提供者?",
-       "passwordreset-invalideamil": "無效的電子郵件地址",
+       "passwordreset-invalidemail": "無效的電子郵件地址",
        "passwordreset-nodata": "未提供使用者名稱或是電子郵件地址",
        "changeemail": "變更或移除電子郵件地址",
        "changeemail-header": "請填寫此表單來變更您的電子郵件地址,若您想要移除您帳號所連結的所有電子郵件地址,請於新電子郵件地址欄位留空。",
        "accmailtitle": "密碼已寄出",
        "accmailtext": "[[User talk:$1|$1]] 的隨機密碼已經寄送至 $2,可登入後至 <em>[[Special:ChangePassword|變更密碼]] 頁面更改</em>。",
        "newarticle": "(新)",
-       "newarticletext": "您正連結至一頁不存在頁面。\n要建立該頁面,請在下方的編輯方塊中輸入內容 (詳情請參考 [$1 明頁面]) 。\n如果您是不小心來到此頁面,請點選瀏覽器的 <strong>返回</strong> 按鈕。",
+       "newarticletext": "您正連結至一頁不存在頁面。\n要建立該頁面,請在下方的編輯方塊中輸入內容 (詳情請參考 [$1 使用說明頁面]) 。\n如果您是不小心來到此頁面,請點選瀏覽器的 <strong>返回</strong> 按鈕。",
        "anontalkpagetext": "----\n<em>此討論頁面是給尚未建立帳號的匿名使用者使用</em>\n因此我們必須使用 IP 位址來辨識身份,但相同的 IP 位址可能由許多不同的使用者所共用。\n如果您是匿名使用者並且覺得評論的內容與您無關,請 [[Special:CreateAccount|建立新帳號]] 或 [[Special:UserLogin|登入]] 避免與其他匿名使用者混淆。",
        "noarticletext": "此頁面目前沒有內容,您可以在其它頁面中[[Special:Search/{{PAGENAME}}|搜尋此頁面標題]]、<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 搜尋相關日誌]或[{{fullurl:{{FULLPAGENAME}}|action=edit}} 建立此頁]</span>。",
        "noarticletext-nopermission": "此頁面目前沒有內容,\n您可以在其它頁面中 [[Special:Search/{{PAGENAME}}|搜尋此頁面標題]],或 <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 搜尋相關日誌]</span>,但您沒有權限建立此頁面。",
        "revdelete-unsuppress": "移除已還原修訂上的顯示限制",
        "revdelete-log": "原因:",
        "revdelete-submit": "套用至已選取的{{PLURAL:$1|一筆|多筆}}修訂",
-       "revdelete-success": "å·²æ\88\90å\8a\9fæ\9b´æ\96°æª¢ç¤ºä¿®è¨\82å\85§å®¹ç\9a\84æ¬\8aé\99\90設å®\9a。",
+       "revdelete-success": "å·²æ\9b´æ\96°ä¿®è¨\82ç\9a\84å\8f¯è¦\8bæ\80§。",
        "revdelete-failure": "無法更新修訂的顯示設定:\n$1",
-       "logdelete-success": "已成功更新檢視日誌的權限設定。",
+       "logdelete-success": "已設定日誌的可見性。",
        "logdelete-failure": "無法更新日誌的顯示設定:\n$1",
-       "revdel-restore": "變更能見度",
+       "revdel-restore": "變更可見性",
        "pagehist": "頁面歷史",
        "deletedhist": "已刪除歷史",
        "revdelete-hide-current": "隱藏於 $1 $2 的項目錯誤:此為目前的修訂,不可隱藏。",
        "saveprefs": "儲存",
        "restoreprefs": "還原所有預設設定 (所有項目)",
        "prefs-editing": "編輯",
-       "rows": "橫行數:",
-       "columns": "直行數:",
+       "rows": "數:",
+       "columns": "數:",
        "searchresultshead": "搜尋",
        "stub-threshold": "短頁面連結格式門檻值 ($1):",
        "stub-threshold-sample-link": "樣本",
        "right-siteadmin": "鎖定和解除鎖定資料庫",
        "right-override-export-depth": "匯出頁面包含連結內容,深度上限為 5 層",
        "right-sendemail": "傳送電子郵件聯絡其他使用者",
-       "right-passwordreset": "檢視重設密碼電子郵件",
        "right-managechangetags": "建立並自資料庫 (取消) 啟用 [[Special:Tags|標籤]]",
        "right-applychangetags": "連同某個人的變更一起套用[[Special:Tags|標籤]]",
        "right-changetags": "加入與移除任何於各別修訂與日誌項目的[[Special:Tags|標籤]]",
        "action-applychangetags": "連同您的變更一起套用標籤",
        "action-changetags": "加入與移除任何於各別修訂與日誌項目的標籤",
        "action-deletechangetags": "從資料庫刪除標籤",
-       "action-purge": "刷新此頁面",
+       "action-purge": "清除此頁面",
        "nchanges": "$1 次變更",
        "enhancedrc-since-last-visit": "{{PLURAL:$1|自上次拜訪}}已有 $1",
        "enhancedrc-history": "歷史",
        "mostimages": "被連結最多的檔案",
        "mostinterwikis": "最多跨 Wiki 連結的頁面",
        "mostrevisions": "最多修訂的頁面",
-       "prefixindex": "æ\89\80æ\9c\89é \81é\9d¢è\88\87å­\97é¦\96",
-       "prefixindex-namespace": "æ\89\80æ\9c\89å\90«å­\97é¦\96ç\9a\84頁面 ($1 命名空間)",
+       "prefixindex": "æ\8c\89è©\9eé ­æ\9f¥è©¢é \81é\9d¢",
+       "prefixindex-namespace": "æ\8c\89è©\9eé ­æ\9f¥è©¢頁面 ($1 命名空間)",
        "prefixindex-submit": "顯示",
-       "prefixindex-strip": "於清單中省略首",
+       "prefixindex-strip": "於清單中省略首",
        "shortpages": "過短的頁面",
        "longpages": "過長的頁面",
        "deadendpages": "無連結頁面",
        "apisandbox-continue": "繼續",
        "apisandbox-continue-clear": "清除",
        "apisandbox-continue-help": "{{int:apisandbox-continue}} 會 [https://www.mediawiki.org/wiki/API:Query#Continuing_queries 繼續] 最後的請求,{{int:apisandbox-continue-clear}} 則會清除繼續相關的參數。",
+       "apisandbox-param-limit": "輸入 <kbd>max</kbd> 以使用最大限制。",
        "booksources": "圖書資源",
        "booksources-search-legend": "尋找圖書資源",
        "booksources-isbn": "國際標準書號:",
        "booksources-search": "搜尋",
        "booksources-text": "下列清單包含其他銷售新書籍或二手書籍的網站連結,可會有你想尋找書籍的進一部資訊:",
        "booksources-invalid-isbn": "您提供的 ISBN 不正確,請檢查複製的來源是否有誤。",
+       "magiclink-tracking-rfc": "使用 RFC 魔法連結的頁面",
+       "magiclink-tracking-rfc-desc": "此頁面使用 RFC 魔法連結的頁面,請參考 [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org] 的如何遷移。",
+       "magiclink-tracking-pmid": "使用 PMID 魔法連結的頁面",
+       "magiclink-tracking-pmid-desc": "此頁面使用 PMID 魔法連結的頁面,請參考 [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org] 的如何遷移。",
+       "magiclink-tracking-isbn": "使用 ISBN 魔法連結的頁面",
+       "magiclink-tracking-isbn-desc": "此頁面使用 ISBN 魔法連結的頁面,請參考 [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org] 的如何遷移。",
        "specialloguserlabel": "執行者:",
        "speciallogtitlelabel": "目標 (標題或以 {{ns:user}}:使用者 表示使用者):",
        "log": "日誌",
        "allarticles": "所有頁面",
        "allinnamespace": "所有頁面 ($1 命名空間)",
        "allpagessubmit": "執行",
-       "allpagesprefix": "顯示以此為字首頁面:",
+       "allpagesprefix": "根據詞首查詢頁面",
        "allpagesbadtitle": "指定的頁面標題無效、包含內部語言或內部 Wiki 的字首。\n它可能包含一個或多個的不能用於標題的字元。",
        "allpages-bad-ns": "{{SITENAME}} 沒有 \"$1\" 命名空間。",
        "allpages-hide-redirects": "隱藏重新導向頁面",
        "activeusers-count": "最近 $3 天內有 $1 次動作",
        "activeusers-from": "顯示使用者開始自:",
        "activeusers-groups": "顯示屬於以下群組的使用者:",
+       "activeusers-excludegroups": "排除屬於以下群組的使用者:",
        "activeusers-noresult": "查無使用者。",
        "activeusers-submit": "顯示活動中的使用者",
        "listgrouprights": "使用者群組權限",
        "modifiedarticleprotection": "已變更 \"[[$1]]\" 的保護層級",
        "unprotectedarticle": "已解除 \"[[$1]]\" 的保護",
        "movedarticleprotection": "已移動 \"[[$2]]\" 的保護設定至 \"[[$1]]\"",
+       "protectedarticle-comment": "{{GENDER:$2|受保護}} \"[[$1]]\"",
+       "modifiedarticleprotection-comment": "{{GENDER:$2|已更改}} \"[[$1]]\" 的保護層級",
+       "unprotectedarticle-comment": "{{GENDER:$2|已移除}} \"[[$1]]\" 的保護",
        "protect-title": "變更 \"$1\" 的保護層級",
        "protect-title-notallowed": "檢視 \"$1\" 的保護層級",
        "prot_1movedto2": "已移動 [[$1]] 至 [[$2]]",
        "import-mapping-namespace": "匯入至命名空間:",
        "import-mapping-subpage": "匯入做為以下頁面的子頁面:",
        "import-upload-filename": "檔案名稱:",
-       "import-comment": "註解:",
+       "import-comment": "è©\95è«\96:",
        "importtext": "請使用 [[Special:Export|匯出工具]] 從來源 Wiki 匯出檔案,\n儲存至您的電腦後再上傳到這裡。",
        "importstart": "正在匯入頁面...",
        "import-revision-count": "$1 個修訂",
        "log-show-hide-patrol": "$1 巡查日誌",
        "log-show-hide-tag": "$1 標籤日誌",
        "confirm-markpatrolled-button": "確定",
+       "confirm-markpatrolled-top": "標記 $2 的修訂 $3 為已巡查?",
        "deletedrevision": "已刪除舊修訂 $1",
        "filedeleteerror-short": "刪除檔案發生錯誤:$1",
        "filedeleteerror-long": "刪除檔案時發生錯誤:\n\n$1",
        "exif-colorspace": "色彩空間",
        "exif-componentsconfiguration": "每像素內含",
        "exif-compressedbitsperpixel": "影像壓縮模式",
-       "exif-pixelxdimension": "å\9c\96ç\89\87寬度",
-       "exif-pixelydimension": "å\9c\96ç\89\87高度",
+       "exif-pixelxdimension": "å½±å\83\8f寬度",
+       "exif-pixelydimension": "å½±å\83\8f高度",
        "exif-usercomment": "使用者評論",
        "exif-relatedsoundfile": "相關的音效檔案",
        "exif-datetimeoriginal": "資料產生的日期時間",
        "exif-source": "來源",
        "exif-editstatus": "圖片社評狀態",
        "exif-urgency": "緊急性",
-       "exif-fixtureidentifier": "夾具名稱",
+       "exif-fixtureidentifier": "Fixture 名稱",
        "exif-locationdest": "描繪地點",
        "exif-locationdestcode": "位置代碼描述",
        "exif-objectcycle": "媒體發生時間",
        "tags-deactivate": "停用",
        "tags-hitcount": "$1 次變更",
        "tags-manage-no-permission": "您沒有權限管理變更標籤。",
-       "tags-manage-blocked": "您無法在被封鎖的情況下管理變更標籤。",
+       "tags-manage-blocked": "您無法在{{GENDER:$1|您}}被封鎖的情況下管理變更標籤。",
        "tags-create-heading": "建立新標籤",
        "tags-create-explanation": "在預設情況下,新建立的標籤可被使用者及機器人使用。",
        "tags-create-tag-name": "標籤名稱:",
        "tags-deactivate-not-allowed": "無法停用標籤 \"$1\"。",
        "tags-deactivate-submit": "停用",
        "tags-apply-no-permission": "您沒有權限連同您的變更一起套用標籤。",
-       "tags-apply-blocked": "您無法在被封鎖的情況下套用變更標籤為您的變更。",
+       "tags-apply-blocked": "您無法在{{GENDER:$1|您}}被封鎖的情況下套用變更標籤為您的變更。",
        "tags-apply-not-allowed-one": "不允許手動套用標籤 \"$1\"。",
        "tags-apply-not-allowed-multi": "不允許手動套用以下{{PLURAL:$2|標籤|標籤}}:$1",
        "tags-update-no-permission": "您沒有權限加入與移除任何於各別修訂與日誌項目的標籤",
-       "tags-update-blocked": "您無法在被封鎖的情況下移除變更標籤。",
+       "tags-update-blocked": "您無法在{{GENDER:$1|您}}被封鎖的情況下移除變更標籤。",
        "tags-update-add-not-allowed-one": "不允許手動加入標籤 \"$1\"。",
        "tags-update-add-not-allowed-multi": "不允許手動加入以下{{PLURAL:$2|標籤|標籤}}:$1",
        "tags-update-remove-not-allowed-one": "不允許手動移除標籤 \"$1\"。",
        "authmanager-authn-autocreate-failed": "自動建立本地帳號失敗:$1",
        "authmanager-change-not-supported": "提供的憑證無法變更,因為尚無法使用。",
        "authmanager-create-disabled": "已關閉帳號自動建立。",
-       "authmanager-create-from-login": "要建立您的帳號,請先填寫以下欄位。",
+       "authmanager-create-from-login": "要建立您的帳號,請先填寫欄位。",
        "authmanager-create-not-in-progress": "帳號建立尚未進行或連線階段資料已遺失,請重頭再開始。",
        "authmanager-create-no-primary": "提供的憑證無使用在帳號建立。",
        "authmanager-link-no-primary": "提供的憑證無使用在帳號連結。",
index 5bc3590..59b4f65 100644 (file)
@@ -49,3 +49,125 @@ $digitTransformTable = [
 
 $digitGroupingPattern = "##,##,###";
 
+$specialPageAliases = [
+       'Activeusers'               => [ 'সক্রিয়_ব্যবহারকারী' ],
+       'Allmessages'               => [ 'সব_বার্তা' ],
+       'AllMyUploads'              => [ 'আমার_সব_আপলোড', 'আমার_সব_ফাইল' ],
+       'Allpages'                  => [ 'সব_পাতা', 'সব_পৃষ্ঠা', 'সব_পাতাসমূহ' ],
+       'ApiHelp'                   => [ 'এপিআই_সাহায্য' ],
+       'ApiSandbox'                => [ 'এপিআই_খেলাঘর' ],
+       'Ancientpages'              => [ 'পুরানো_পাতা', 'পুরানো_পৃষ্ঠা' ],
+       'Badtitle'                  => [ 'ত্রুটিযুক্ত_শিরোনাম' ],
+       'Blankpage'                 => [ 'খালি_পাতা', 'খালি_পৃষ্ঠা' ],
+       'Block'                     => [ 'বাধাদান', 'আইপি_বাধাদান', 'ব্যবহারকারী_বাধাদান' ],
+       'Booksources'               => [ 'বইয়ের_উৎস' ],
+       'BotPasswords'              => [ 'বট_পাসওয়ার্ড' ],
+       'BrokenRedirects'           => [ 'ভাঙ্গা_পুনর্নির্দেশ' ],
+       'Categories'                => [ 'বিষয়শ্রেণী' ],
+       'ChangeContentModel'        => [ 'বিষয়বস্তুর_মডেল_পরিবর্তন' ],
+       'ChangeCredentials'         => [ 'পরিচয়পত্র_পরিবর্তন' ],
+       'ChangeEmail'               => [ 'ইমেইল_পরিবর্তন' ],
+       'ChangePassword'            => [ 'পাসওয়ার্ড_পরিবর্তন', 'পাসপরিবর্তন', 'পাসওয়ার্ডপরিবর্তন' ],
+       'ComparePages'              => [ 'পাতার_তুলনা', 'পৃষ্ঠার_তুলনা' ],
+       'Confirmemail'              => [ 'ইমেইল_নিশ্চিতকরণ' ],
+       'Contributions'             => [ 'অবদান', 'অবদানসমূহ' ],
+       'CreateAccount'             => [ 'অ্যাকাউন্ট_তৈরি' ],
+       'Deadendpages'              => [ 'সংযোগহীন_পাতা', 'সংযোগহীন_পৃষ্ঠা' ],
+       'DeletedContributions'      => [ 'অপসারিত_অবদান' ],
+       'Diff'                      => [ 'পার্থক্য' ],
+       'DoubleRedirects'           => [ 'দ্বৈত_পুনর্নির্দেশ', 'দুইবার_করা_পুনর্নির্দেশ' ],
+       'EditTags'                  => [ 'ট্যাগ_সম্পাদনা' ],
+       'EditWatchlist'             => [ 'নজরতালিকা_সম্পাদনা' ],
+       'Emailuser'                 => [ 'ইমেইল_প্রেরণ', 'ইমেইল' ],
+       'ExpandTemplates'           => [ 'টেমপ্লেট_সম্প্রসারণ' ],
+       'Export'                    => [ 'রপ্তানি' ],
+       'Fewestrevisions'           => [ 'কমসংখ্যক_সংশোধন' ],
+       'FileDuplicateSearch'       => [ 'সদৃশ_ফাইল_অনুসন্ধান' ],
+       'Filepath'                  => [ 'ফাইলের_পথ' ],
+       'Import'                    => [ 'আমদানি' ],
+       'Invalidateemail'           => [ 'অবৈধ_ইমেইল' ],
+       'JavaScriptTest'            => [ 'জাভাস্ক্রিপ্ট_পরীক্ষা' ],
+       'BlockList'                 => [ 'বাধার_তালিকা', 'বাধার_তালিকাসমূহ', 'আইপি_বাধার_তালিকা' ],
+       'LinkSearch'                => [ 'সংযোগ_অনুসন্ধান' ],
+       'LinkAccounts'              => [ 'অ্যাকাউন্টের_তালিকা' ],
+       'Listadmins'                => [ 'প্রশাসকের_তালিকা' ],
+       'Listbots'                  => [ 'বটের_তালিকা' ],
+       'Listfiles'                 => [ 'ফাইলের_তালিকা', 'চিত্রের_তালিকা', 'ছবির_তালিকা' ],
+       'Listgrouprights'           => [ 'দলগত_অধিকারের_তালিকা', 'ব্যবহারকারীর_দলগত_অধিকার' ],
+       'Listgrants'                => [ 'অনুদানের_তালিকা', 'গ্র্যান্টের_তালিকা' ],
+       'Listredirects'             => [ 'পুনর্নির্দেশের_তালিকা', 'পুনঃনির্দেশের_তালিকা' ],
+       'ListDuplicatedFiles'       => [ 'সদৃশ_ফাইলের_তালিকা', 'অনুরূপ_ফাইলের_তালিকা' ],
+       'Listusers'                 => [ 'ব্যবহারকারীর_তালিকা', 'ব্যবহারকারী_তালিকা' ],
+       'Lockdb'                    => [ 'ডাটাবেস_অবরোধ', 'লকডিবি' ],
+       'Log'                       => [ 'লগ', 'লগসমূহ' ],
+       'Lonelypages'               => [ 'পিতৃহীন_পাতা', 'পিতৃহীন_পাতাসমূহ' ],
+       'Longpages'                 => [ 'দীর্ঘ_পাতাসমূহ' ],
+       'MediaStatistics'           => [ 'মিডিয়া_পরিসংখ্যান' ],
+       'MergeHistory'              => [ 'ইতিহাস_একত্রীকরণ' ],
+       'MIMEsearch'                => [ 'এমআইএমই_অনুসন্ধান' ],
+       'Mostcategories'            => [ 'সর্বাধিক_বিষয়শ্রেণীসমৃদ্ধ' ],
+       'Mostimages'                => [ 'সর্বাধিক_ফাইল', 'বেশী_ছবি' ],
+       'Mostinterwikis'            => [ 'সর্বাধিক_আন্তঃউইকি' ],
+       'Mostlinked'                => [ 'সর্বাধিক_সংযুক্ত_পাতা' ],
+       'Mostlinkedcategories'      => [ 'সর্বাধিক_সংযুক্ত_বিষয়শ্রেণী', 'সর্বাধিক_ব্যবহৃত_বিষয়শ্রেণী', 'সর্বাধিক_সংযুক্ত_বিষয়শ্রেণীসমূহ' ],
+       'Mostlinkedtemplates'       => [ 'সর্বাধিক_সংযুক্ত_টেমপ্লট', 'সর্বাধিক_সংযুক্ত_টেমপ্লটসমূহ', 'সর্বাধিক_ব্যবহৃত_টেমপ্লেট' ],
+       'Mostrevisions'             => [ 'সর্বাধিক_সংশোধন' ],
+       'Movepage'                  => [ 'পাতা_স্থানান্তর' ],
+       'Mycontributions'           => [ 'আমার_অবদান' ],
+       'MyLanguage'                => [ 'আমার_ভাষা' ],
+       'Mypage'                    => [ 'আমার_পাতা' ],
+       'Mytalk'                    => [ 'আমার_আলাপ' ],
+       'Myuploads'                 => [ 'আমার_আপলোড', 'আমার_ফাইল' ],
+       'Newimages'                 => [ 'নতুন_চিত্রসমূহ', 'নতুন_ছবিসমূহ' ],
+       'Newpages'                  => [ 'নতুন_পাতাসমূহ' ],
+       'PagesWithProp'             => [ 'বৈশিষ্ট্যযুক্ত_পাতা', 'বৈশিষ্ট্যযুক্ত_পৃষ্ঠা' ],
+       'PageLanguage'              => [ 'পাতার_ভাষা' ],
+       'PasswordReset'             => [ 'পাসওয়ার্ড_পুনঃস্থাপন' ],
+       'PermanentLink'             => [ 'স্থায়ী_সংযোগ', 'স্থায়ী_লিঙ্ক' ],
+       'Preferences'               => [ 'পছন্দসমূহ', 'আমার_পছন্দ' ],
+       'Prefixindex'               => [ 'উপসর্গ' ],
+       'Protectedpages'            => [ 'সুরক্ষিত_পাতা' ],
+       'Protectedtitles'           => [ 'সুরক্ষিত_শিরোনাম' ],
+       'Randompage'                => [ 'অজানা_পাতা', 'অজানা_যেকোন_পাতা' ],
+       'RandomInCategory'          => [ 'অজানা_বিষয়শ্রেণী' ],
+       'Randomredirect'            => [ 'অজানা_পুনর্নির্দেশ' ],
+       'Randomrootpage'            => [ 'অজানা_মূল_পাতা' ],
+       'Recentchanges'             => [ 'সাম্প্রতিক_পরিবর্তনসমূহ', 'সাম্প্রতিক_পরিবর্তন' ],
+       'Recentchangeslinked'       => [ 'সংযুক্ত_সাম্প্রতিক_পরিবর্তন', 'সংযুক্ত_সাম্প্রতিক_পরিবর্তনসমূহ', 'সম্পর্কিত_পরিবর্তন' ],
+       'Redirect'                  => [ 'পুনর্নির্দেশ' ],
+       'RemoveCredentials'         => [ 'পরিচয়পত্র_অপসারণ' ],
+       'ResetTokens'               => [ 'টোকেন_পরিবর্তন' ],
+       'Revisiondelete'            => [ 'অপসারিত_ইতিহাস' ],
+       'RunJobs'                   => [ 'রানজব' ],
+       'Search'                    => [ 'অনুসন্ধান' ],
+       'Shortpages'                => [ 'সংক্ষিপ্ত_পাতাসমূহ' ],
+       'Specialpages'              => [ 'বিশেষ_পাতাসমূহ' ],
+       'Statistics'                => [ 'পরিসংখ্যান' ],
+       'Tags'                      => [ 'ট্যাগ' ],
+       'TrackingCategories'        => [ 'বিষয়শ্রেণীসমূহ_অনুসরণ' ],
+       'Unblock'                   => [ 'বাধা_তোলা', 'বাধা_অপসারণ' ],
+       'Uncategorizedcategories'   => [ 'বিষয়শ্রেণীবিহীন_বিষয়শ্রেণী' ],
+       'Uncategorizedimages'       => [ 'বিষয়শ্রেণীবিহীন_চিত্র', 'বিষয়শ্রেণীবিহীন_ছবি' ],
+       'Uncategorizedpages'        => [ 'বিষয়শ্রেণীবিহীন_পাতা' ],
+       'Uncategorizedtemplates'    => [ 'বিষয়শ্রেণীবিহীন_টেমপ্লেট' ],
+       'Undelete'                  => [ 'পুনরুদ্ধার' ],
+       'UnlinkAccounts'            => [ 'অসংযুক্ত_অ্যাকাউন্ট' ],
+       'Unlockdb'                  => [ 'ডাটাবেস_মুক্তি', 'আনলকডিবি' ],
+       'Unusedcategories'          => [ 'অব্যবহৃত_বিষয়শ্রেণী' ],
+       'Unusedimages'              => [ 'অব্যবহৃত_চিত্র', 'অব্যবহৃত_ছবি' ],
+       'Unusedtemplates'           => [ 'অব্যবহৃত_টেমপ্লেট' ],
+       'Unwatchedpages'            => [ 'নজরহীন_পাতা', 'নজরে_না_রাখা_পাতা' ],
+       'Upload'                    => [ 'আপলোড' ],
+       'UploadStash'               => [ 'স্টাশ_আপলোড' ],
+       'Userlogin'                 => [ 'ব্যবহারকারী_প্রবেশ', 'প্রবেশ' ],
+       'Userlogout'                => [ 'ব্যবহারকারী_প্রস্থান', 'প্রস্থান' ],
+       'Userrights'                => [ 'ব্যবহারকারী_অধিকার', 'ব্যবহারকারীর_অধিকার' ],
+       'Version'                   => [ 'সংস্করণ' ],
+       'Wantedcategories'          => [ 'আবশ্যিক_বিষয়শ্রেণীসমূহ' ],
+       'Wantedfiles'               => [ 'আবশ্যিক_ফাইলসমূহ' ],
+       'Wantedpages'               => [ 'আবশ্যিক_পাতাসমূহ', 'ভাঙ্গা_লিংকসমূহ' ],
+       'Wantedtemplates'           => [ 'আবশ্যিক_টেমপ্লেটসমূহ' ],
+       'Watchlist'                 => [ 'নজরতালিকা' ],
+       'Whatlinkshere'             => [ 'সংযোগকারী_পৃষ্ঠাসমূহ' ],
+       'Withoutinterwiki'          => [ 'আন্তঃউইকিহীন' ],
+];
index cd7a842..95bbe3d 100644 (file)
@@ -47,7 +47,7 @@ class UploadStashCleanup extends Maintenance {
                $repo = RepoGroup::singleton()->getLocalRepo();
                $tempRepo = $repo->getTempRepo();
 
-               $dbr = $repo->getSlaveDB();
+               $dbr = $repo->getReplicaDB();
 
                // how far back should this look for files to delete?
                $cutoff = time() - $wgUploadStashMaxAge;
index c06a72e..7979e7d 100644 (file)
@@ -36,7 +36,7 @@ class FindMissingFiles extends Maintenance {
                $lastName = $this->getOption( 'start', '' );
 
                $repo = RepoGroup::singleton()->getLocalRepo();
-               $dbr = $repo->getSlaveDB();
+               $dbr = $repo->getReplicaDB();
                $be = $repo->getBackend();
 
                $mtime1 = $dbr->timestampOrNull( $this->getOption( 'mtimeafter', null ) );
index abd170b..5980631 100644 (file)
@@ -75,7 +75,7 @@ class FindOrphanedFiles extends Maintenance {
                        return;
                }
 
-               $dbr = $repo->getSlaveDB();
+               $dbr = $repo->getReplicaDB();
 
                $curNames = [];
                $oldNames = [];
index 615d1fe..3c0fc7e 100644 (file)
@@ -210,7 +210,7 @@ class PurgeChangedFiles extends Maintenance {
        }
 
        protected function purgeFromArchiveTable( LocalRepo $repo, LocalFile $file ) {
-               $dbr = $repo->getSlaveDB();
+               $dbr = $repo->getReplicaDB();
                $res = $dbr->select(
                        'filearchive',
                        [ 'fa_archive_name' ],
index 5d085a8..e00a55d 100644 (file)
@@ -32,6 +32,8 @@ require __DIR__ . '/Maintenance.php';
 class PurgeParserCache extends Maintenance {
        public $lastProgress;
 
+       private $usleep = 0;
+
        function __construct() {
                parent::__construct();
                $this->addDescription( "Remove old objects from the parser cache. " .
@@ -39,36 +41,44 @@ class PurgeParserCache extends Maintenance {
                $this->addOption( 'expiredate', 'Delete objects expiring before this date.', false, true );
                $this->addOption(
                        'age',
-                       'Delete objects created more than this many seconds ago, assuming $wgParserCacheExpireTime ' .
-                               'has been consistent.',
-                       false, true );
+                       'Delete objects created more than this many seconds ago, assuming ' .
+                               '$wgParserCacheExpireTime has remained consistent.',
+                       false,
+                       true );
+               $this->addOption( 'msleep', 'Milliseconds to sleep between purge chunks', false, true );
        }
 
        function execute() {
+               global $wgParserCacheExpireTime;
+
                $inputDate = $this->getOption( 'expiredate' );
                $inputAge = $this->getOption( 'age' );
                if ( $inputDate !== null ) {
                        $date = wfTimestamp( TS_MW, strtotime( $inputDate ) );
                } elseif ( $inputAge !== null ) {
-                       global $wgParserCacheExpireTime;
                        $date = wfTimestamp( TS_MW, time() + $wgParserCacheExpireTime - intval( $inputAge ) );
                } else {
                        $this->error( "Must specify either --expiredate or --age", 1 );
+                       return;
                }
+               $this->usleep = 1e3 * $this->getOption( 'msleep', 0 );
 
                $english = Language::factory( 'en' );
-               $this->output( "Deleting objects expiring before " . $english->timeanddate( $date ) . "\n" );
+               $this->output( "Deleting objects expiring before " .
+                       $english->timeanddate( $date ) . "\n" );
 
                $pc = wfGetParserCacheStorage();
-               $success = $pc->deleteObjectsExpiringBefore( $date, [ $this, 'showProgress' ] );
+               $success = $pc->deleteObjectsExpiringBefore( $date, [ $this, 'showProgressAndWait' ] );
                if ( !$success ) {
                        $this->error( "\nCannot purge this kind of parser cache.", 1 );
                }
-               $this->showProgress( 100 );
+               $this->showProgressAndWait( 100 );
                $this->output( "\nDone\n" );
        }
 
-       function showProgress( $percent ) {
+       public function showProgressAndWait( $percent ) {
+               usleep( $this->usleep ); // avoid lag; T150124
+
                $percentString = sprintf( "%.2f", $percent );
                if ( $percentString === $this->lastProgress ) {
                        return;
index a5e7a2f..f8eedb3 100644 (file)
@@ -34,26 +34,74 @@ class BatchedQueryRunner extends Maintenance {
        public function __construct() {
                parent::__construct();
                $this->addDescription(
-                       "Run a query repeatedly until it affects 0 rows, and wait for replica DBs in between.\n" .
-                               "NOTE: You need to set a LIMIT clause yourself." );
+                       "Run an update query on all rows of a table. " .
+                       "Waits for replicas at appropriate intervals." );
+               $this->addOption( 'table', 'The table name', true, true );
+               $this->addOption( 'set', 'The SET clause', true, true );
+               $this->addOption( 'where', 'The WHERE clause', false, true );
+               $this->addOption( 'key', 'A column name, the values of which are unique', true, true );
+               $this->addOption( 'batch-size', 'The batch size (default 1000)', false, true );
+               $this->addOption( 'db', 'The database name, or omit to use the current wiki.', false, true );
        }
 
        public function execute() {
-               if ( !$this->hasArg() ) {
-                       $this->error( "No query specified. Specify the query as a command line parameter.", true );
+               $table = $this->getOption( 'table' );
+               $key = $this->getOption( 'key' );
+               $set = $this->getOption( 'set' );
+               $where = $this->getOption( 'where', null );
+               $where = $where === null ? [] : [ $where ];
+               $batchSize = $this->getOption( 'batch-size', 1000 );
+
+               $dbName = $this->getOption( 'db', null );
+               if ( $dbName === null ) {
+                       $dbw = $this->getDB( DB_MASTER );
+               } else {
+                       $lbf = MediaWiki\MediaWikiServices::getInstance()->getDBLoadBalancerFactory();
+                       $lb = $lbf->getMainLB( $dbName );
+                       $dbw = $lb->getConnection( DB_MASTER, [], $dbName );
                }
 
-               $query = $this->getArg();
+               $selectConds = $where;
+               $prevEnd = false;
+
                $n = 1;
-               $dbw = $this->getDB( DB_MASTER );
                do {
                        $this->output( "Batch $n: " );
                        $n++;
+
+                       // Note that the update conditions do not rely on atomicity of the
+                       // SELECT query in order to guarantee that all rows are updated. The
+                       // results of the SELECT are merely a partitioning hint. Simultaneous
+                       // updates merely result in the wrong number of rows being updated
+                       // in a batch.
+
+                       $res = $dbw->select( $table, $key, $selectConds, __METHOD__,
+                               [ 'ORDER BY' => $key, 'LIMIT' => $batchSize ] );
+                       if ( $res->numRows() ) {
+                               $res->seek( $res->numRows() - 1 );
+                               $row = $res->fetchObject();
+                               $end = $dbw->addQuotes( $row->$key );
+                               $selectConds = array_merge( $where, [ "$key > $end" ] );
+                               $updateConds = array_merge( $where, [ "$key <= $end" ] );
+                       } else {
+                               $updateConds = $where;
+                       }
+                       if ( $prevEnd !== false ) {
+                               $updateConds = array_merge( [ "$key > $prevEnd" ], $updateConds );
+                       }
+
+                       $query = "UPDATE " . $dbw->tableName( $table ) .
+                               " SET " . $set .
+                               " WHERE " . $dbw->makeList( $updateConds, IDatabase::LIST_AND );
+
                        $dbw->query( $query, __METHOD__ );
+
+                       $prevEnd = $end;
+
                        $affected = $dbw->affectedRows();
-                       $this->output( "$affected rows\n" );
+                       $this->output( "$affected rows affected\n" );
                        wfWaitForSlaves();
-               } while ( $affected > 0 );
+               } while ( $res->numRows() );
        }
 
        public function getDbType() {
index a43e0ba..eb717e8 100644 (file)
@@ -26,8 +26,6 @@ if ( PHP_SAPI != 'cli' ) {
        die( "This script can only be run from the command line.\n" );
 }
 
-chdir( dirname( __DIR__ ) );
-
 $CREDITS = 'CREDITS';
 $START_CONTRIBUTORS = '<!-- BEGIN CONTRIBUTOR LIST -->';
 $END_CONTRIBUTORS = '<!-- END CONTRIBUTOR LIST -->';
@@ -38,6 +36,10 @@ $header = [];
 $contributors = [];
 $footer = [];
 
+if ( !file_exists( $CREDITS ) ) {
+       exit( 'No CREDITS file found. Are you running this script in the right directory?' );
+}
+
 $lines = explode( "\n", file_get_contents( $CREDITS ) );
 foreach ( $lines as $line ) {
        if ( $inHeader ) {
index 2ce19e5..0a859c0 100644 (file)
@@ -113,6 +113,7 @@ class WrapOldPasswords extends Maintenance {
                        }
 
                        $this->commitTransaction( $dbw, __METHOD__ );
+                       LBFactory::waitForReplication();
 
                        // Clear memcached so old passwords are wiped out
                        foreach ( $updateUsers as $user ) {
index 3b75c3a..99e752c 100644 (file)
@@ -6,13 +6,13 @@
     "postdoc": "grunt copy:jsduck"
   },
   "devDependencies": {
+    "eslint-config-wikimedia": "0.3.0",
     "grunt": "1.0.1",
     "grunt-banana-checker": "0.5.0",
     "grunt-contrib-copy": "1.0.0",
-    "grunt-contrib-jshint": "1.0.0",
     "grunt-contrib-watch": "1.0.0",
-    "grunt-jscs": "2.8.0",
-    "grunt-jsonlint": "1.0.7",
+    "grunt-eslint": "19.0.0",
+    "grunt-jsonlint": "1.1.0",
     "grunt-karma": "2.0.0",
     "grunt-stylelint": "0.6.0",
     "karma": "1.1.0",
index edce2ea..4693b42 100644 (file)
--- a/phpcs.xml
+++ b/phpcs.xml
@@ -31,4 +31,7 @@
        <exclude-pattern type="relative">^extensions/</exclude-pattern>
        <exclude-pattern type="relative">^skins/</exclude-pattern>
        <exclude-pattern>.git</exclude-pattern>
+       <exclude-pattern>AdminSettings.php</exclude-pattern>
+       <exclude-pattern>LocalSettings.php</exclude-pattern>
+       <exclude-pattern>StartProfiler.php</exclude-pattern>
 </ruleset>
index 5c2f12a..587a84d 100644 (file)
@@ -40,7 +40,6 @@ return [
                'group' => 'noscript',
        ],
        'filepage' => [
-               'position' => 'top',
                'class' => 'ResourceLoaderWikiModule',
                'styles' => [ 'MediaWiki:Filepage.css' ],
        ],
@@ -97,13 +96,11 @@ return [
         * including more than one of them into your skin as this will result in duplicate CSS.
         */
        'mediawiki.skinning.elements' => [
-               'position' => 'top',
                'styles' => [
                        'resources/src/mediawiki.skinning/elements.css' => [ 'media' => 'screen' ],
                ],
        ],
        'mediawiki.skinning.content' => [
-               'position' => 'top',
                'styles' => [
                        'resources/src/mediawiki.skinning/elements.css' => [ 'media' => 'screen' ],
                        'resources/src/mediawiki.skinning/content.css' => [ 'media' => 'screen' ],
@@ -111,7 +108,6 @@ return [
        ],
        // Used in the web installer. Test it after modifying this definition!
        'mediawiki.skinning.interface' => [
-               'position' => 'top',
                'class' => 'ResourceLoaderSkinModule',
                'styles' => [
                        'resources/src/mediawiki.skinning/elements.css' => [ 'media' => 'screen' ],
@@ -121,7 +117,6 @@ return [
        ],
 
        'mediawiki.skinning.content.parsoid' => [
-               'position' => 'top',
                // Style Parsoid HTML+RDFa output consistent with wikitext from PHP parser
                // with the interface.css styles; skinStyles should be used if your
                // skin over-rides common content styling.
@@ -132,7 +127,6 @@ return [
        ],
 
        'mediawiki.skinning.content.externallinks' => [
-               'position' => 'bottom',
                'styles' => [
                        'resources/src/mediawiki.skinning/content.externallinks.css' => [ 'media' => 'screen' ],
                ],
@@ -323,7 +317,6 @@ return [
        'jquery.qunit' => [
                'scripts' => 'resources/lib/qunitjs/qunit.js',
                'styles' => 'resources/lib/qunitjs/qunit.css',
-               'position' => 'top',
                'targets' => [ 'desktop', 'mobile' ],
        ],
        'jquery.qunit.completenessTest' => [
@@ -341,7 +334,6 @@ return [
                        'message' => 'Please use "mediawiki.storage" instead.',
                ],
                'scripts' => 'resources/lib/jquery/jquery.jStorage.js',
-               'dependencies' => 'json',
        ],
        'jquery.suggestions' => [
                'scripts' => 'resources/src/jquery/jquery.suggestions.js',
@@ -395,7 +387,6 @@ return [
                'group' => 'jquery.ui',
        ],
        'jquery.ui.core.styles' => [
-               'position' => 'top',
                'skinStyles' => [
                        'default' => [
                                'resources/lib/jquery.ui/themes/smoothness/jquery.ui.core.css',
@@ -746,10 +737,10 @@ return [
 
        /* json2 */
 
+       // Deprecated since MediaWiki 1.29.0
        'json' => [
-               'scripts' => 'resources/lib/json2/json2.js',
+               'deprecated' => 'Use of the "json" MediaWiki module is deprecated since MediaWiki 1.29.0',
                'targets' => [ 'desktop', 'mobile' ],
-               'skipFunction' => 'resources/src/json-skip.js',
        ],
 
        /* Moment.js */
@@ -869,7 +860,6 @@ return [
        'mediawiki.apihelp' => [
                'styles' => 'resources/src/mediawiki/mediawiki.apihelp.css',
                'targets' => [ 'desktop' ],
-               'position' => 'top',
        ],
        'mediawiki.template' => [
                'scripts' => 'resources/src/mediawiki/mediawiki.template.js',
@@ -891,7 +881,6 @@ return [
        'mediawiki.apipretty' => [
                'styles' => 'resources/src/mediawiki/mediawiki.apipretty.css',
                'targets' => [ 'desktop', 'mobile' ],
-               'position' => 'top',
        ],
        'mediawiki.api' => [
                'scripts' => 'resources/src/mediawiki/api.js',
@@ -936,7 +925,6 @@ return [
                        'dom-level2-shim',
                        'mediawiki.api',
                        'mediawiki.api.edit',
-                       'json',
                ],
                'targets' => [ 'desktop', 'mobile' ],
        ],
@@ -967,7 +955,6 @@ return [
                ],
        ],
        'mediawiki.content.json' => [
-               'position' => 'top',
                'styles' => 'resources/src/mediawiki/mediawiki.content.json.less',
        ],
        'mediawiki.confirmCloseWindow' => [
@@ -986,12 +973,8 @@ return [
                'dependencies' => [
                        'jquery.footHovzer',
                ],
-               // Uses a custom mw.config variable that is set in debughtml,
-               // must be loaded on the bottom
-               'position' => 'bottom',
        ],
        'mediawiki.diff.styles' => [
-               'position' => 'top',
                'styles' => [
                        'resources/src/mediawiki/mediawiki.diff.styles.css',
                        'resources/src/mediawiki/mediawiki.diff.styles.print.css' => [
@@ -1036,7 +1019,6 @@ return [
                'targets' => [ 'desktop', 'mobile' ],
        ],
        'mediawiki.feedlink' => [
-               'position' => 'top',
                'styles' => 'resources/src/mediawiki/mediawiki.feedlink.css',
        ],
        'mediawiki.filewarning' => [
@@ -1061,7 +1043,6 @@ return [
                'targets' => [ 'desktop', 'mobile' ],
        ],
        'mediawiki.helplink' => [
-               'position' => 'top',
                'styles' => [
                        'resources/src/mediawiki/mediawiki.helplink.less',
                ],
@@ -1111,12 +1092,10 @@ return [
        ],
        'mediawiki.htmlform.styles' => [
                'styles' => 'resources/src/mediawiki/htmlform/styles.css',
-               'position' => 'top',
                'targets' => [ 'desktop', 'mobile' ],
        ],
        'mediawiki.htmlform.ooui.styles' => [
                'styles' => 'resources/src/mediawiki/htmlform/ooui.styles.css',
-               'position' => 'top',
                'targets' => [ 'desktop', 'mobile' ],
        ],
        'mediawiki.icon' => [
@@ -1128,7 +1107,6 @@ return [
                'dependencies' => [
                        'jquery.byteLength',
                        'mediawiki.RegExp',
-                       'json',
                ],
                'targets' => [ 'desktop', 'mobile' ],
        ],
@@ -1179,7 +1157,6 @@ return [
                'targets' => [ 'desktop', 'mobile' ],
        ],
        'mediawiki.notification.convertmessagebox.styles' => [
-               'position' => 'top',
                'styles' => [
                        'resources/src/mediawiki/mediawiki.notification.convertmessagebox.styles.less',
                ],
@@ -1191,7 +1168,6 @@ return [
        ],
        'mediawiki.pager.tablePager' => [
                'styles' => 'resources/src/mediawiki/mediawiki.pager.tablePager.less',
-               'position' => 'top',
        ],
        'mediawiki.searchSuggest' => [
                'scripts' => 'resources/src/mediawiki/mediawiki.searchSuggest.js',
@@ -1209,7 +1185,6 @@ return [
                ],
        ],
        'mediawiki.sectionAnchor' => [
-               'position' => 'top',
                // Back-compat to hide it on cached pages (T18691; Ie9e334e973; 2015-03-17)
                'styles' => 'resources/src/mediawiki/mediawiki.sectionAnchor.css',
                'targets' => [ 'desktop', 'mobile' ],
@@ -1219,7 +1194,10 @@ return [
                'targets' => [ 'desktop', 'mobile' ],
        ],
        'mediawiki.Title' => [
-               'scripts' => 'resources/src/mediawiki/mediawiki.Title.js',
+               'scripts' => [
+                       'resources/src/mediawiki/mediawiki.Title.js',
+                       'resources/src/mediawiki/mediawiki.Title.phpCharToUpper.js',
+               ],
                'dependencies' => [
                        'jquery.byteLength',
                        'mediawiki.util',
@@ -1406,6 +1384,11 @@ return [
                'dependencies' => 'mediawiki.util',
                'targets' => [ 'desktop', 'mobile' ],
        ],
+       'mediawiki.user.blockcookie' => [
+               'scripts' => 'resources/src/mediawiki/mediawiki.user.blockcookie.js',
+               'dependencies' => [ 'mediawiki.cookie', 'mediawiki.storage' ],
+               'targets' => [ 'desktop', 'mobile' ],
+       ],
        'mediawiki.user' => [
                'scripts' => 'resources/src/mediawiki/mediawiki.user.js',
                'dependencies' => [
@@ -1435,7 +1418,6 @@ return [
        ],
        'mediawiki.viewport' => [
                'scripts' => 'resources/src/mediawiki/mediawiki.viewport.js',
-               'position' => 'top',
                'targets' => [ 'desktop', 'mobile' ],
        ],
        'mediawiki.checkboxtoggle' => [
@@ -1454,7 +1436,6 @@ return [
                'scripts' => 'resources/src/mediawiki.toolbar/toolbar.js',
                'styles' => 'resources/src/mediawiki.toolbar/toolbar.less',
                'dependencies' => 'jquery.textSelection',
-               'position' => 'top',
        ],
        'mediawiki.experiments' => [
                'scripts' => 'resources/src/mediawiki/mediawiki.experiments.js',
@@ -1475,10 +1456,8 @@ return [
                        'jquery.byteLimit',
                        'mediawiki.api',
                ],
-               'position' => 'top',
        ],
        'mediawiki.action.edit.styles' => [
-               'position' => 'top',
                'styles' => 'resources/src/mediawiki.action/mediawiki.action.edit.styles.css',
        ],
        'mediawiki.action.edit.collapsibleFooter' => [
@@ -1521,12 +1500,10 @@ return [
                'styles' => 'resources/src/mediawiki.action/mediawiki.action.history.css',
        ],
        'mediawiki.action.history.styles' => [
-               'position' => 'top',
                'styles' => 'resources/src/mediawiki.action/mediawiki.action.history.styles.css',
        ],
        // using this module is deprecated, for diff styles use mediawiki.diff.styles instead
        'mediawiki.action.history.diff' => [
-               'position' => 'top',
                'styles' => [
                        'resources/src/mediawiki/mediawiki.diff.styles.css',
                        'resources/src/mediawiki/mediawiki.diff.styles.print.css' => [
@@ -1552,7 +1529,6 @@ return [
                ],
        ],
        'mediawiki.action.view.categoryPage.styles' => [
-               'position' => 'top',
                'styles' => 'resources/src/mediawiki.action/mediawiki.action.view.categoryPage.less',
                'targets' => [ 'desktop', 'mobile' ]
        ],
@@ -1575,11 +1551,9 @@ return [
        'mediawiki.action.view.redirect' => [
                'scripts' => 'resources/src/mediawiki.action/mediawiki.action.view.redirect.js',
                'dependencies' => 'jquery.client',
-               'position' => 'top',
                'targets' => [ 'desktop', 'mobile' ],
        ],
        'mediawiki.action.view.redirectPage' => [
-               'position' => 'top',
                'targets' => [ 'desktop', 'mobile' ],
                'styles' => 'resources/src/mediawiki.action/mediawiki.action.view.redirectPage.css',
        ],
@@ -1606,7 +1580,6 @@ return [
                                [ 'media' => 'print' ],
                        'resources/src/mediawiki.action/mediawiki.action.view.filepage.css',
                ],
-               'position' => 'top',
        ],
 
        /* MediaWiki Language */
@@ -1712,12 +1685,10 @@ return [
                        'resources/src/mediawiki/page/gallery.print.css' => [ 'media' => 'print' ],
                        'resources/src/mediawiki/page/gallery.css',
                ],
-               'position' => 'top',
                'targets' => [ 'desktop', 'mobile' ],
        ],
        'mediawiki.page.gallery.slideshow' => [
                'scripts' => 'resources/src/mediawiki/page/gallery-slideshow.js',
-               'position' => 'top',
                'dependencies' => [
                        'mediawiki.api',
                        'mediawiki.Title',
@@ -1744,7 +1715,6 @@ return [
        'mediawiki.page.startup' => [
                'scripts' => 'resources/src/mediawiki/page/startup.js',
                'dependencies' => 'mediawiki.util',
-               'position' => 'top',
                'targets' => [ 'desktop', 'mobile' ],
        ],
        'mediawiki.page.patrol.ajax' => [
@@ -1807,7 +1777,6 @@ return [
        /* MediaWiki Special pages */
 
        'mediawiki.special' => [
-               'position' => 'top',
                'styles' => 'resources/src/mediawiki.special/mediawiki.special.css',
                'targets' => [ 'desktop', 'mobile' ],
        ],
@@ -1867,6 +1836,9 @@ return [
                        'apisandbox-continue',
                        'apisandbox-continue-clear',
                        'apisandbox-continue-help',
+                       'apisandbox-param-limit',
+                       'apisandbox-multivalue-all-namespaces',
+                       'apisandbox-multivalue-all-values',
                        'api-format-prettyprint-status',
                        'blanknamespace',
                ],
@@ -1877,11 +1849,9 @@ return [
                'dependencies' => 'mediawiki.util',
        ],
        'mediawiki.special.changeslist' => [
-               'position' => 'top',
                'styles' => 'resources/src/mediawiki.special/mediawiki.special.changeslist.css',
        ],
        'mediawiki.special.changeslist.legend' => [
-               'position' => 'top',
                'styles' => 'resources/src/mediawiki.special/mediawiki.special.changeslist.legend.css',
        ],
        'mediawiki.special.changeslist.legend.js' => [
@@ -1892,15 +1862,12 @@ return [
                ],
        ],
        'mediawiki.special.changeslist.enhanced' => [
-               'position' => 'top',
                'styles' => 'resources/src/mediawiki.special/mediawiki.special.changeslist.enhanced.css',
        ],
        'mediawiki.special.changeslist.visitedstatus' => [
-               'position' => 'top',
                'scripts' => 'resources/src/mediawiki.special/mediawiki.special.changeslist.visitedstatus.js',
        ],
        'mediawiki.special.comparepages.styles' => [
-               'position' => 'top',
                'styles' => 'resources/src/mediawiki.special/mediawiki.special.comparepages.styles.less',
        ],
        'mediawiki.special.edittags' => [
@@ -1915,7 +1882,6 @@ return [
        ],
        'mediawiki.special.edittags.styles' => [
                'styles' => 'resources/src/mediawiki.special/mediawiki.special.edittags.css',
-               'position' => 'top',
        ],
        'mediawiki.special.import' => [
                'scripts' => 'resources/src/mediawiki.special/mediawiki.special.import.js',
@@ -1929,7 +1895,6 @@ return [
        ],
        'mediawiki.special.movePage.styles' => [
                'styles' => 'resources/src/mediawiki.special/mediawiki.special.movePage.css',
-               'position' => 'top',
        ],
        'mediawiki.special.pageLanguage' => [
                'scripts' => 'resources/src/mediawiki.special/mediawiki.special.pageLanguage.js',
@@ -1938,12 +1903,10 @@ return [
                ],
        ],
        'mediawiki.special.pagesWithProp' => [
-               'position' => 'top',
                'styles' => 'resources/src/mediawiki.special/mediawiki.special.pagesWithProp.css',
        ],
        'mediawiki.special.preferences' => [
                'scripts' => 'resources/src/mediawiki.special/mediawiki.special.preferences.js',
-               'position' => 'top',
                'messages' => [
                        'prefs-tabs-navigation-hint',
                        'prefswarning-warning',
@@ -1964,14 +1927,11 @@ return [
        ],
        'mediawiki.special.preferences.styles' => [
                'styles' => 'resources/src/mediawiki.special/mediawiki.special.preferences.styles.css',
-               'position' => 'top',
        ],
        'mediawiki.special.recentchanges' => [
                'scripts' => 'resources/src/mediawiki.special/mediawiki.special.recentchanges.js',
-               'position' => 'top',
        ],
        'mediawiki.special.search' => [
-               'position' => 'top',
                'scripts' => 'resources/src/mediawiki.special/mediawiki.special.search.js',
                'styles' => 'resources/src/mediawiki.special/mediawiki.special.search.css',
                'dependencies' => 'mediawiki.widgets.SearchInputWidget',
@@ -2023,16 +1983,13 @@ return [
                'styles' => [
                        'resources/src/mediawiki.special/mediawiki.special.userlogin.common.css',
                ],
-               'position' => 'top',
        ],
        'mediawiki.special.userlogin.signup.styles' => [
-               'position' => 'top',
                'styles' => [
                        'resources/src/mediawiki.special/mediawiki.special.userlogin.signup.css',
                ],
        ],
        'mediawiki.special.userlogin.login.styles' => [
-               'position' => 'top',
                'styles' => [
                        'resources/src/mediawiki.special/mediawiki.special.userlogin.login.css',
                ],
@@ -2090,7 +2047,6 @@ return [
        /* MediaWiki Legacy */
 
        'mediawiki.legacy.commonPrint' => [
-               'position' => 'top',
                'styles' => [
                        'resources/src/mediawiki.legacy/commonPrint.css' => [ 'media' => 'print' ]
                ],
@@ -2102,13 +2058,11 @@ return [
        ],
        // Used in the web installer. Test it after modifying this definition!
        'mediawiki.legacy.shared' => [
-               'position' => 'top',
                'styles' => [
                        'resources/src/mediawiki.legacy/shared.css' => [ 'media' => 'screen' ]
                ],
        ],
        'mediawiki.legacy.oldshared' => [
-               'position' => 'top',
                'styles' => [
                        'resources/src/mediawiki.legacy/oldshared.css' => [ 'media' => 'screen' ]
                ],
@@ -2116,14 +2070,12 @@ return [
        'mediawiki.legacy.wikibits' => [
                'scripts' => 'resources/src/mediawiki.legacy/wikibits.js',
                'dependencies' => 'mediawiki.util',
-               'position' => 'top',
                'targets' => [ 'desktop', 'mobile' ],
        ],
 
        /* MediaWiki UI */
 
        'mediawiki.ui' => [
-               'position' => 'top',
                'skinStyles' => [
                        'default' => [
                                'resources/src/mediawiki.ui/default.less',
@@ -2132,7 +2084,6 @@ return [
                'targets' => [ 'desktop', 'mobile' ],
        ],
        'mediawiki.ui.checkbox' => [
-               'position' => 'top',
                'skinStyles' => [
                        'default' => [
                                'resources/src/mediawiki.ui/components/checkbox.less',
@@ -2141,7 +2092,6 @@ return [
                'targets' => [ 'desktop', 'mobile' ],
        ],
        'mediawiki.ui.radio' => [
-               'position' => 'top',
                'skinStyles' => [
                        'default' => [
                                'resources/src/mediawiki.ui/components/radio.less',
@@ -2151,7 +2101,6 @@ return [
        ],
        // Lightweight module for anchor styles
        'mediawiki.ui.anchor' => [
-               'position' => 'top',
                'skinStyles' => [
                        'default' => [
                                'resources/src/mediawiki.ui/components/anchors.less',
@@ -2161,7 +2110,6 @@ return [
        ],
        // Lightweight module for button styles
        'mediawiki.ui.button' => [
-               'position' => 'top',
                'skinStyles' => [
                        'default' => [
                                'resources/src/mediawiki.ui/components/buttons.less',
@@ -2170,7 +2118,6 @@ return [
                'targets' => [ 'desktop', 'mobile' ],
        ],
        'mediawiki.ui.input' => [
-               'position' => 'top',
                'skinStyles' => [
                        'default' => [
                                'resources/src/mediawiki.ui/components/inputs.less',
@@ -2179,7 +2126,6 @@ return [
                'targets' => [ 'desktop', 'mobile' ],
        ],
        'mediawiki.ui.icon' => [
-               'position' => 'top',
                'skinStyles' => [
                        'default' => [
                                'resources/src/mediawiki.ui/components/icons.less',
@@ -2189,7 +2135,6 @@ return [
        ],
        // Lightweight module for text styles
        'mediawiki.ui.text' => [
-               'position' => 'top',
                'skinStyles' => [
                        'default' => [
                                'resources/src/mediawiki.ui/components/text.less',
@@ -2240,7 +2185,6 @@ return [
                                'resources/src/mediawiki.widgets/mw.widgets.ComplexTitleInputWidget.base.css',
                        ],
                ],
-               'position' => 'top',
                'targets' => [ 'desktop', 'mobile' ],
        ],
        'mediawiki.widgets.DateInputWidget' => [
@@ -2341,6 +2285,7 @@ return [
                ],
                'messages' => [
                        'red-link-title',
+                       'mw-widgets-categoryselector-add-category-placeholder'
                ],
                'targets' => [ 'desktop', 'mobile' ],
        ],
@@ -2369,7 +2314,6 @@ return [
                                'resources/src/mediawiki.widgets/mw.widgets.SearchInputWidget.css',
                        ],
                ],
-               'position' => 'top',
                'targets' => [ 'desktop', 'mobile' ],
        ],
        'mediawiki.widgets.StashedFileWidget' => [
@@ -2412,7 +2356,6 @@ return [
                'targets' => [ 'desktop', 'mobile' ],
                'dependencies' => [
                        'es5-shim',
-                       'json',
                ],
        ],
 
diff --git a/resources/lib/json2/json2.js b/resources/lib/json2/json2.js
deleted file mode 100644 (file)
index 5838457..0000000
+++ /dev/null
@@ -1,519 +0,0 @@
-/*
-    json2.js
-    2015-05-03
-
-    Public Domain.
-
-    NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.
-
-    See http://www.JSON.org/js.html
-
-
-    This code should be minified before deployment.
-    See http://javascript.crockford.com/jsmin.html
-
-    USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO
-    NOT CONTROL.
-
-
-    This file creates a global JSON object containing two methods: stringify
-    and parse. This file is provides the ES5 JSON capability to ES3 systems.
-    If a project might run on IE8 or earlier, then this file should be included.
-    This file does nothing on ES5 systems.
-
-        JSON.stringify(value, replacer, space)
-            value       any JavaScript value, usually an object or array.
-
-            replacer    an optional parameter that determines how object
-                        values are stringified for objects. It can be a
-                        function or an array of strings.
-
-            space       an optional parameter that specifies the indentation
-                        of nested structures. If it is omitted, the text will
-                        be packed without extra whitespace. If it is a number,
-                        it will specify the number of spaces to indent at each
-                        level. If it is a string (such as '\t' or '&nbsp;'),
-                        it contains the characters used to indent at each level.
-
-            This method produces a JSON text from a JavaScript value.
-
-            When an object value is found, if the object contains a toJSON
-            method, its toJSON method will be called and the result will be
-            stringified. A toJSON method does not serialize: it returns the
-            value represented by the name/value pair that should be serialized,
-            or undefined if nothing should be serialized. The toJSON method
-            will be passed the key associated with the value, and this will be
-            bound to the value
-
-            For example, this would serialize Dates as ISO strings.
-
-                Date.prototype.toJSON = function (key) {
-                    function f(n) {
-                        // Format integers to have at least two digits.
-                        return n < 10 
-                            ? '0' + n 
-                            : n;
-                    }
-
-                    return this.getUTCFullYear()   + '-' +
-                         f(this.getUTCMonth() + 1) + '-' +
-                         f(this.getUTCDate())      + 'T' +
-                         f(this.getUTCHours())     + ':' +
-                         f(this.getUTCMinutes())   + ':' +
-                         f(this.getUTCSeconds())   + 'Z';
-                };
-
-            You can provide an optional replacer method. It will be passed the
-            key and value of each member, with this bound to the containing
-            object. The value that is returned from your method will be
-            serialized. If your method returns undefined, then the member will
-            be excluded from the serialization.
-
-            If the replacer parameter is an array of strings, then it will be
-            used to select the members to be serialized. It filters the results
-            such that only members with keys listed in the replacer array are
-            stringified.
-
-            Values that do not have JSON representations, such as undefined or
-            functions, will not be serialized. Such values in objects will be
-            dropped; in arrays they will be replaced with null. You can use
-            a replacer function to replace those with JSON values.
-            JSON.stringify(undefined) returns undefined.
-
-            The optional space parameter produces a stringification of the
-            value that is filled with line breaks and indentation to make it
-            easier to read.
-
-            If the space parameter is a non-empty string, then that string will
-            be used for indentation. If the space parameter is a number, then
-            the indentation will be that many spaces.
-
-            Example:
-
-            text = JSON.stringify(['e', {pluribus: 'unum'}]);
-            // text is '["e",{"pluribus":"unum"}]'
-
-
-            text = JSON.stringify(['e', {pluribus: 'unum'}], null, '\t');
-            // text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]'
-
-            text = JSON.stringify([new Date()], function (key, value) {
-                return this[key] instanceof Date 
-                    ? 'Date(' + this[key] + ')' 
-                    : value;
-            });
-            // text is '["Date(---current time---)"]'
-
-
-        JSON.parse(text, reviver)
-            This method parses a JSON text to produce an object or array.
-            It can throw a SyntaxError exception.
-
-            The optional reviver parameter is a function that can filter and
-            transform the results. It receives each of the keys and values,
-            and its return value is used instead of the original value.
-            If it returns what it received, then the structure is not modified.
-            If it returns undefined then the member is deleted.
-
-            Example:
-
-            // Parse the text. Values that look like ISO date strings will
-            // be converted to Date objects.
-
-            myData = JSON.parse(text, function (key, value) {
-                var a;
-                if (typeof value === 'string') {
-                    a =
-/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value);
-                    if (a) {
-                        return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],
-                            +a[5], +a[6]));
-                    }
-                }
-                return value;
-            });
-
-            myData = JSON.parse('["Date(09/09/2001)"]', function (key, value) {
-                var d;
-                if (typeof value === 'string' &&
-                        value.slice(0, 5) === 'Date(' &&
-                        value.slice(-1) === ')') {
-                    d = new Date(value.slice(5, -1));
-                    if (d) {
-                        return d;
-                    }
-                }
-                return value;
-            });
-
-
-    This is a reference implementation. You are free to copy, modify, or
-    redistribute.
-*/
-
-/*jslint 
-    eval, for, this 
-*/
-
-/*property
-    JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,
-    getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,
-    lastIndex, length, parse, prototype, push, replace, slice, stringify,
-    test, toJSON, toString, valueOf
-*/
-
-
-// Create a JSON object only if one does not already exist. We create the
-// methods in a closure to avoid creating global variables.
-
-if (typeof JSON !== 'object') {
-    JSON = {};
-}
-
-(function () {
-    'use strict';
-    
-    var rx_one = /^[\],:{}\s]*$/,
-        rx_two = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,
-        rx_three = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
-        rx_four = /(?:^|:|,)(?:\s*\[)+/g,
-        rx_escapable = /[\\\"\u0000-\u001f\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
-        rx_dangerous = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;
-
-    function f(n) {
-        // Format integers to have at least two digits.
-        return n < 10 
-            ? '0' + n 
-            : n;
-    }
-    
-    function this_value() {
-        return this.valueOf();
-    }
-
-    if (typeof Date.prototype.toJSON !== 'function') {
-
-        Date.prototype.toJSON = function () {
-
-            return isFinite(this.valueOf())
-                ? this.getUTCFullYear() + '-' +
-                        f(this.getUTCMonth() + 1) + '-' +
-                        f(this.getUTCDate()) + 'T' +
-                        f(this.getUTCHours()) + ':' +
-                        f(this.getUTCMinutes()) + ':' +
-                        f(this.getUTCSeconds()) + 'Z'
-                : null;
-        };
-
-        Boolean.prototype.toJSON = this_value;
-        Number.prototype.toJSON = this_value;
-        String.prototype.toJSON = this_value;
-    }
-
-    var gap,
-        indent,
-        meta,
-        rep;
-
-
-    function quote(string) {
-
-// If the string contains no control characters, no quote characters, and no
-// backslash characters, then we can safely slap some quotes around it.
-// Otherwise we must also replace the offending characters with safe escape
-// sequences.
-
-        rx_escapable.lastIndex = 0;
-        return rx_escapable.test(string) 
-            ? '"' + string.replace(rx_escapable, function (a) {
-                var c = meta[a];
-                return typeof c === 'string'
-                    ? c
-                    : '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
-            }) + '"' 
-            : '"' + string + '"';
-    }
-
-
-    function str(key, holder) {
-
-// Produce a string from holder[key].
-
-        var i,          // The loop counter.
-            k,          // The member key.
-            v,          // The member value.
-            length,
-            mind = gap,
-            partial,
-            value = holder[key];
-
-// If the value has a toJSON method, call it to obtain a replacement value.
-
-        if (value && typeof value === 'object' &&
-                typeof value.toJSON === 'function') {
-            value = value.toJSON(key);
-        }
-
-// If we were called with a replacer function, then call the replacer to
-// obtain a replacement value.
-
-        if (typeof rep === 'function') {
-            value = rep.call(holder, key, value);
-        }
-
-// What happens next depends on the value's type.
-
-        switch (typeof value) {
-        case 'string':
-            return quote(value);
-
-        case 'number':
-
-// JSON numbers must be finite. Encode non-finite numbers as null.
-
-            return isFinite(value) 
-                ? String(value) 
-                : 'null';
-
-        case 'boolean':
-        case 'null':
-
-// If the value is a boolean or null, convert it to a string. Note:
-// typeof null does not produce 'null'. The case is included here in
-// the remote chance that this gets fixed someday.
-
-            return String(value);
-
-// If the type is 'object', we might be dealing with an object or an array or
-// null.
-
-        case 'object':
-
-// Due to a specification blunder in ECMAScript, typeof null is 'object',
-// so watch out for that case.
-
-            if (!value) {
-                return 'null';
-            }
-
-// Make an array to hold the partial results of stringifying this object value.
-
-            gap += indent;
-            partial = [];
-
-// Is the value an array?
-
-            if (Object.prototype.toString.apply(value) === '[object Array]') {
-
-// The value is an array. Stringify every element. Use null as a placeholder
-// for non-JSON values.
-
-                length = value.length;
-                for (i = 0; i < length; i += 1) {
-                    partial[i] = str(i, value) || 'null';
-                }
-
-// Join all of the elements together, separated with commas, and wrap them in
-// brackets.
-
-                v = partial.length === 0
-                    ? '[]'
-                    : gap
-                        ? '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']'
-                        : '[' + partial.join(',') + ']';
-                gap = mind;
-                return v;
-            }
-
-// If the replacer is an array, use it to select the members to be stringified.
-
-            if (rep && typeof rep === 'object') {
-                length = rep.length;
-                for (i = 0; i < length; i += 1) {
-                    if (typeof rep[i] === 'string') {
-                        k = rep[i];
-                        v = str(k, value);
-                        if (v) {
-                            partial.push(quote(k) + (
-                                gap 
-                                    ? ': ' 
-                                    : ':'
-                            ) + v);
-                        }
-                    }
-                }
-            } else {
-
-// Otherwise, iterate through all of the keys in the object.
-
-                for (k in value) {
-                    if (Object.prototype.hasOwnProperty.call(value, k)) {
-                        v = str(k, value);
-                        if (v) {
-                            partial.push(quote(k) + (
-                                gap 
-                                    ? ': ' 
-                                    : ':'
-                            ) + v);
-                        }
-                    }
-                }
-            }
-
-// Join all of the member texts together, separated with commas,
-// and wrap them in braces.
-
-            v = partial.length === 0
-                ? '{}'
-                : gap
-                    ? '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}'
-                    : '{' + partial.join(',') + '}';
-            gap = mind;
-            return v;
-        }
-    }
-
-// If the JSON object does not yet have a stringify method, give it one.
-
-    if (typeof JSON.stringify !== 'function') {
-        meta = {    // table of character substitutions
-            '\b': '\\b',
-            '\t': '\\t',
-            '\n': '\\n',
-            '\f': '\\f',
-            '\r': '\\r',
-            '"': '\\"',
-            '\\': '\\\\'
-        };
-        JSON.stringify = function (value, replacer, space) {
-
-// The stringify method takes a value and an optional replacer, and an optional
-// space parameter, and returns a JSON text. The replacer can be a function
-// that can replace values, or an array of strings that will select the keys.
-// A default replacer method can be provided. Use of the space parameter can
-// produce text that is more easily readable.
-
-            var i;
-            gap = '';
-            indent = '';
-
-// If the space parameter is a number, make an indent string containing that
-// many spaces.
-
-            if (typeof space === 'number') {
-                for (i = 0; i < space; i += 1) {
-                    indent += ' ';
-                }
-
-// If the space parameter is a string, it will be used as the indent string.
-
-            } else if (typeof space === 'string') {
-                indent = space;
-            }
-
-// If there is a replacer, it must be a function or an array.
-// Otherwise, throw an error.
-
-            rep = replacer;
-            if (replacer && typeof replacer !== 'function' &&
-                    (typeof replacer !== 'object' ||
-                    typeof replacer.length !== 'number')) {
-                throw new Error('JSON.stringify');
-            }
-
-// Make a fake root object containing our value under the key of ''.
-// Return the result of stringifying the value.
-
-            return str('', {'': value});
-        };
-    }
-
-
-// If the JSON object does not yet have a parse method, give it one.
-
-    if (typeof JSON.parse !== 'function') {
-        JSON.parse = function (text, reviver) {
-
-// The parse method takes a text and an optional reviver function, and returns
-// a JavaScript value if the text is a valid JSON text.
-
-            var j;
-
-            function walk(holder, key) {
-
-// The walk method is used to recursively walk the resulting structure so
-// that modifications can be made.
-
-                var k, v, value = holder[key];
-                if (value && typeof value === 'object') {
-                    for (k in value) {
-                        if (Object.prototype.hasOwnProperty.call(value, k)) {
-                            v = walk(value, k);
-                            if (v !== undefined) {
-                                value[k] = v;
-                            } else {
-                                delete value[k];
-                            }
-                        }
-                    }
-                }
-                return reviver.call(holder, key, value);
-            }
-
-
-// Parsing happens in four stages. In the first stage, we replace certain
-// Unicode characters with escape sequences. JavaScript handles many characters
-// incorrectly, either silently deleting them, or treating them as line endings.
-
-            text = String(text);
-            rx_dangerous.lastIndex = 0;
-            if (rx_dangerous.test(text)) {
-                text = text.replace(rx_dangerous, function (a) {
-                    return '\\u' +
-                            ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
-                });
-            }
-
-// In the second stage, we run the text against regular expressions that look
-// for non-JSON patterns. We are especially concerned with '()' and 'new'
-// because they can cause invocation, and '=' because it can cause mutation.
-// But just to be safe, we want to reject all unexpected forms.
-
-// We split the second stage into 4 regexp operations in order to work around
-// crippling inefficiencies in IE's and Safari's regexp engines. First we
-// replace the JSON backslash pairs with '@' (a non-JSON character). Second, we
-// replace all simple value tokens with ']' characters. Third, we delete all
-// open brackets that follow a colon or comma or that begin the text. Finally,
-// we look to see that the remaining characters are only whitespace or ']' or
-// ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval.
-
-            if (
-                rx_one.test(
-                    text
-                        .replace(rx_two, '@')
-                        .replace(rx_three, ']')
-                        .replace(rx_four, '')
-                )
-            ) {
-
-// In the third stage we use the eval function to compile the text into a
-// JavaScript structure. The '{' operator is subject to a syntactic ambiguity
-// in JavaScript: it can begin a block or an object literal. We wrap the text
-// in parens to eliminate the ambiguity.
-
-                j = eval('(' + text + ')');
-
-// In the optional fourth stage, we recursively walk the new structure, passing
-// each name/value pair to a reviver function for possible transformation.
-
-                return typeof reviver === 'function'
-                    ? walk({'': j}, '')
-                    : j;
-            }
-
-// If the text is not JSON parseable, then a SyntaxError is thrown.
-
-            throw new SyntaxError('JSON.parse');
-        };
-    }
-}());
index a6106e4..f25944c 100644 (file)
  */
 ( function ( $, mw ) {
 
-// Cached access key modifiers for used browser
-var cachedAccessKeyModifiers,
-
-       // Whether to use 'test-' instead of correct prefix (used for testing)
-       useTestPrefix = false,
-
-       // tag names which can have a label tag
-       // https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Content_categories#Form-associated_content
-       labelable = 'button, input, textarea, keygen, meter, output, progress, select';
-
-/**
- * Find the modifier keys that need to be pressed together with the accesskey to trigger the input.
- *
- * The result is dependant on the ua paramater or the current platform.
- * For browsers that support accessKeyLabel, #getAccessKeyLabel never calls here.
- * Valid key values that are returned can be: ctrl, alt, option, shift, esc
- *
- * @private
- * @param {Object} [ua] An object with a 'userAgent' and 'platform' property.
- * @return {Array} Array with 0 or more of the string values: ctrl, option, alt, shift, esc
- */
-function getAccessKeyModifiers( ua ) {
-       // use cached prefix if possible
-       if ( !ua && cachedAccessKeyModifiers ) {
-               return cachedAccessKeyModifiers;
-       }
+       // Cached access key modifiers for used browser
+       var cachedAccessKeyModifiers,
+
+               // Whether to use 'test-' instead of correct prefix (used for testing)
+               useTestPrefix = false,
+
+               // tag names which can have a label tag
+               // https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Content_categories#Form-associated_content
+               labelable = 'button, input, textarea, keygen, meter, output, progress, select';
+
+       /**
+        * Find the modifier keys that need to be pressed together with the accesskey to trigger the input.
+        *
+        * The result is dependant on the ua paramater or the current platform.
+        * For browsers that support accessKeyLabel, #getAccessKeyLabel never calls here.
+        * Valid key values that are returned can be: ctrl, alt, option, shift, esc
+        *
+        * @private
+        * @param {Object} [ua] An object with a 'userAgent' and 'platform' property.
+        * @return {Array} Array with 0 or more of the string values: ctrl, option, alt, shift, esc
+        */
+       function getAccessKeyModifiers( ua ) {
+               var profile, accessKeyModifiers;
+
+               // use cached prefix if possible
+               if ( !ua && cachedAccessKeyModifiers ) {
+                       return cachedAccessKeyModifiers;
+               }
 
-       var profile = $.client.profile( ua ),
+               profile = $.client.profile( ua );
                accessKeyModifiers = [ 'alt' ];
 
-       // Classic Opera on any platform
-       if ( profile.name === 'opera' && profile.versionNumber < 15 ) {
-               accessKeyModifiers = [ 'shift', 'esc' ];
-
-       // Chrome and modern Opera on any platform
-       } else if ( profile.name === 'chrome' || profile.name === 'opera' ) {
-               accessKeyModifiers = (
-                       profile.platform === 'mac'
-                               // Chrome on Mac
-                               ? [ 'ctrl', 'option' ]
-                               // Chrome on Windows or Linux
-                               // (both alt- and alt-shift work, but alt with E, D, F etc does not
-                               // work since they are browser shortcuts)
-                               : [ 'alt', 'shift' ]
-               );
-
-       // Non-Windows Safari with webkit_version > 526
-       } else if ( profile.platform !== 'win'
-               && profile.name === 'safari'
-               && profile.layoutVersion > 526
-       ) {
-               accessKeyModifiers = [ 'ctrl', 'alt' ];
-
-       // Safari/Konqueror on any platform, or any browser on Mac
-       // (but not Safari on Windows)
-       } else if ( !( profile.platform === 'win' && profile.name === 'safari' )
-               && ( profile.name === 'safari'
-               || profile.platform === 'mac'
-               || profile.name === 'konqueror' )
-       ) {
-               accessKeyModifiers = [ 'ctrl' ];
-
-       // Firefox/Iceweasel 2.x and later
-       } else if ( ( profile.name === 'firefox' || profile.name === 'iceweasel' )
-               && profile.versionBase > '1'
-       ) {
-               accessKeyModifiers = [ 'alt', 'shift' ];
-       }
+               // Classic Opera on any platform
+               if ( profile.name === 'opera' && profile.versionNumber < 15 ) {
+                       accessKeyModifiers = [ 'shift', 'esc' ];
+
+               // Chrome and modern Opera on any platform
+               } else if ( profile.name === 'chrome' || profile.name === 'opera' ) {
+                       accessKeyModifiers = (
+                               profile.platform === 'mac' ?
+                                       // Chrome on Mac
+                                       [ 'ctrl', 'option' ] :
+                                       // Chrome on Windows or Linux
+                                       // (both alt- and alt-shift work, but alt with E, D, F etc does not
+                                       // work since they are browser shortcuts)
+                                       [ 'alt', 'shift' ]
+                       );
+
+               // Non-Windows Safari with webkit_version > 526
+               } else if ( profile.platform !== 'win' &&
+                       profile.name === 'safari' &&
+                       profile.layoutVersion > 526
+               ) {
+                       accessKeyModifiers = [ 'ctrl', 'alt' ];
+
+               // Safari/Konqueror on any platform, or any browser on Mac
+               // (but not Safari on Windows)
+               } else if (
+                       !( profile.platform === 'win' && profile.name === 'safari' ) &&
+                       (
+                               profile.name === 'safari' ||
+                               profile.platform === 'mac' ||
+                               profile.name === 'konqueror'
+                       )
+               ) {
+                       accessKeyModifiers = [ 'ctrl' ];
+
+               // Firefox/Iceweasel 2.x and later
+               } else if (
+                       ( profile.name === 'firefox' || profile.name === 'iceweasel' ) &&
+                       profile.versionBase > '1'
+               ) {
+                       accessKeyModifiers = [ 'alt', 'shift' ];
+               }
 
-       // cache modifiers
-       if ( !ua ) {
-               cachedAccessKeyModifiers = accessKeyModifiers;
+               // cache modifiers
+               if ( !ua ) {
+                       cachedAccessKeyModifiers = accessKeyModifiers;
+               }
+               return accessKeyModifiers;
        }
-       return accessKeyModifiers;
-}
 
-/**
- * Get the access key label for an element.
- *
- * Will use native accessKeyLabel if available (currently only in Firefox 8+),
- * falls back to #getAccessKeyModifiers.
- *
- * @private
- * @param {HTMLElement} element Element to get the label for
- * @return {string} Access key label
- */
-function getAccessKeyLabel( element ) {
-       // abort early if no access key
-       if ( !element.accessKey ) {
-               return '';
-       }
-       // use accessKeyLabel if possible
-       // https://html.spec.whatwg.org/multipage/interaction.html#dom-accesskeylabel
-       if ( !useTestPrefix && element.accessKeyLabel ) {
-               return element.accessKeyLabel;
+       /**
+        * Get the access key label for an element.
+        *
+        * Will use native accessKeyLabel if available (currently only in Firefox 8+),
+        * falls back to #getAccessKeyModifiers.
+        *
+        * @private
+        * @param {HTMLElement} element Element to get the label for
+        * @return {string} Access key label
+        */
+       function getAccessKeyLabel( element ) {
+               // abort early if no access key
+               if ( !element.accessKey ) {
+                       return '';
+               }
+               // use accessKeyLabel if possible
+               // https://html.spec.whatwg.org/multipage/interaction.html#dom-accesskeylabel
+               if ( !useTestPrefix && element.accessKeyLabel ) {
+                       return element.accessKeyLabel;
+               }
+               return ( useTestPrefix ? 'test' : getAccessKeyModifiers().join( '-' ) ) + '-' + element.accessKey;
        }
-       return ( useTestPrefix ? 'test' : getAccessKeyModifiers().join( '-' ) ) + '-' + element.accessKey;
-}
-
-/**
- * Update the title for an element (on the element with the access key or it's label) to show
- * the correct access key label.
- *
- * @private
- * @param {HTMLElement} element Element with the accesskey
- * @param {HTMLElement} titleElement Element with the title to update (may be the same as `element`)
- */
-function updateTooltipOnElement( element, titleElement ) {
-       var oldTitle, parts, regexp, newTitle, accessKeyLabel;
 
-       oldTitle = titleElement.title;
-       if ( !oldTitle ) {
-               // don't add a title if the element didn't have one before
-               return;
-       }
+       /**
+        * Update the title for an element (on the element with the access key or it's label) to show
+        * the correct access key label.
+        *
+        * @private
+        * @param {HTMLElement} element Element with the accesskey
+        * @param {HTMLElement} titleElement Element with the title to update (may be the same as `element`)
+        */
+       function updateTooltipOnElement( element, titleElement ) {
+               var oldTitle, parts, regexp, newTitle, accessKeyLabel;
+
+               oldTitle = titleElement.title;
+               if ( !oldTitle ) {
+                       // don't add a title if the element didn't have one before
+                       return;
+               }
 
-       parts = ( mw.msg( 'word-separator' ) + mw.msg( 'brackets' ) ).split( '$1' );
-       regexp = new RegExp( $.map( parts, mw.RegExp.escape ).join( '.*?' ) + '$' );
-       newTitle = oldTitle.replace( regexp, '' );
-       accessKeyLabel = getAccessKeyLabel( element );
+               parts = ( mw.msg( 'word-separator' ) + mw.msg( 'brackets' ) ).split( '$1' );
+               regexp = new RegExp( $.map( parts, mw.RegExp.escape ).join( '.*?' ) + '$' );
+               newTitle = oldTitle.replace( regexp, '' );
+               accessKeyLabel = getAccessKeyLabel( element );
 
-       if ( accessKeyLabel ) {
-               // Should be build the same as in Linker::titleAttrib
-               newTitle += mw.msg( 'word-separator' ) + mw.msg( 'brackets', accessKeyLabel );
-       }
-       if ( oldTitle !== newTitle ) {
-               titleElement.title = newTitle;
+               if ( accessKeyLabel ) {
+                       // Should be build the same as in Linker::titleAttrib
+                       newTitle += mw.msg( 'word-separator' ) + mw.msg( 'brackets', accessKeyLabel );
+               }
+               if ( oldTitle !== newTitle ) {
+                       titleElement.title = newTitle;
+               }
        }
-}
 
-/**
- * Update the title for an element to show the correct access key label.
- *
- * @private
- * @param {HTMLElement} element Element with the accesskey
- */
-function updateTooltip( element ) {
-       var id, $element, $label, $labelParent;
-       updateTooltipOnElement( element, element );
-
-       // update associated label if there is one
-       $element = $( element );
-       if ( $element.is( labelable ) ) {
-               // Search it using 'for' attribute
-               id = element.id.replace( /"/g, '\\"' );
-               if ( id ) {
-                       $label = $( 'label[for="' + id + '"]' );
-                       if ( $label.length === 1 ) {
-                               updateTooltipOnElement( element, $label[ 0 ] );
+       /**
+        * Update the title for an element to show the correct access key label.
+        *
+        * @private
+        * @param {HTMLElement} element Element with the accesskey
+        */
+       function updateTooltip( element ) {
+               var id, $element, $label, $labelParent;
+               updateTooltipOnElement( element, element );
+
+               // update associated label if there is one
+               $element = $( element );
+               if ( $element.is( labelable ) ) {
+                       // Search it using 'for' attribute
+                       id = element.id.replace( /"/g, '\\"' );
+                       if ( id ) {
+                               $label = $( 'label[for="' + id + '"]' );
+                               if ( $label.length === 1 ) {
+                                       updateTooltipOnElement( element, $label[ 0 ] );
+                               }
                        }
-               }
 
-               // Search it as parent, because the form control can also be inside the label element itself
-               $labelParent = $element.parents( 'label' );
-               if ( $labelParent.length === 1 ) {
-                       updateTooltipOnElement( element, $labelParent[ 0 ] );
+                       // Search it as parent, because the form control can also be inside the label element itself
+                       $labelParent = $element.parents( 'label' );
+                       if ( $labelParent.length === 1 ) {
+                               updateTooltipOnElement( element, $labelParent[ 0 ] );
+                       }
                }
        }
-}
-
-/**
- * Update the titles for all elements in a jQuery selection.
- *
- * @return {jQuery}
- * @chainable
- */
-$.fn.updateTooltipAccessKeys = function () {
-       return this.each( function () {
-               updateTooltip( this );
-       } );
-};
 
-/**
- * getAccessKeyModifiers
- *
- * @method updateTooltipAccessKeys_getAccessKeyModifiers
- * @inheritdoc #getAccessKeyModifiers
- */
-$.fn.updateTooltipAccessKeys.getAccessKeyModifiers = getAccessKeyModifiers;
-
-/**
- * getAccessKeyLabel
- *
- * @method updateTooltipAccessKeys_getAccessKeyLabel
- * @inheritdoc #getAccessKeyLabel
- */
-$.fn.updateTooltipAccessKeys.getAccessKeyLabel = getAccessKeyLabel;
-
-/**
- * getAccessKeyPrefix
- *
- * @method updateTooltipAccessKeys_getAccessKeyPrefix
- * @deprecated since 1.27 Use #getAccessKeyModifiers
- */
-$.fn.updateTooltipAccessKeys.getAccessKeyPrefix = function ( ua ) {
-       return getAccessKeyModifiers( ua ).join( '-' ) + '-';
-};
-
-/**
- * Switch test mode on and off.
- *
- * @method updateTooltipAccessKeys_setTestMode
- * @param {boolean} mode New mode
- */
-$.fn.updateTooltipAccessKeys.setTestMode = function ( mode ) {
-       useTestPrefix = mode;
-};
-
-/**
- * @class jQuery
- * @mixins jQuery.plugin.accessKeyLabel
- */
+       /**
+        * Update the titles for all elements in a jQuery selection.
+        *
+        * @return {jQuery}
+        * @chainable
+        */
+       $.fn.updateTooltipAccessKeys = function () {
+               return this.each( function () {
+                       updateTooltip( this );
+               } );
+       };
+
+       /**
+        * getAccessKeyModifiers
+        *
+        * @method updateTooltipAccessKeys_getAccessKeyModifiers
+        * @inheritdoc #getAccessKeyModifiers
+        */
+       $.fn.updateTooltipAccessKeys.getAccessKeyModifiers = getAccessKeyModifiers;
+
+       /**
+        * getAccessKeyLabel
+        *
+        * @method updateTooltipAccessKeys_getAccessKeyLabel
+        * @inheritdoc #getAccessKeyLabel
+        */
+       $.fn.updateTooltipAccessKeys.getAccessKeyLabel = getAccessKeyLabel;
+
+       /**
+        * getAccessKeyPrefix
+        *
+        * @method updateTooltipAccessKeys_getAccessKeyPrefix
+        * @deprecated since 1.27 Use #getAccessKeyModifiers
+        * @param {Object} [ua] An object with a 'userAgent' and 'platform' property.
+        * @return {string}
+        */
+       $.fn.updateTooltipAccessKeys.getAccessKeyPrefix = function ( ua ) {
+               return getAccessKeyModifiers( ua ).join( '-' ) + '-';
+       };
+
+       /**
+        * Switch test mode on and off.
+        *
+        * @method updateTooltipAccessKeys_setTestMode
+        * @param {boolean} mode New mode
+        */
+       $.fn.updateTooltipAccessKeys.setTestMode = function ( mode ) {
+               useTestPrefix = mode;
+       };
+
+       /**
+        * @class jQuery
+        * @mixins jQuery.plugin.accessKeyLabel
+        */
 
 }( jQuery, mediaWiki ) );
index fd7e8d1..8716b69 100644 (file)
  */
 ( function ( $ ) {
 
-var
-       // Cache ellipsed substrings for every string-width-position combination
-       cache = {},
+       var
+               // Cache ellipsed substrings for every string-width-position combination
+               cache = {},
 
-       // Use a separate cache when match highlighting is enabled
-       matchTextCache = {};
+               // Use a separate cache when match highlighting is enabled
+               matchTextCache = {};
 
-// Due to <https://github.com/jscs-dev/jscs-jsdoc/issues/136>
-// jscs:disable jsDoc
-/**
- * Automatically truncate the plain text contents of an element and add an ellipsis
- *
- * @param {Object} options
- * @param {'left'|'center'|'right'} [options.position='center'] Where to remove text.
- * @param {boolean} [options.tooltip=false] Whether to show a tooltip with the remainder
- * of the text.
- * @param {boolean} [options.restoreText=false] Whether to save the text for restoring
- * later.
- * @param {boolean} [options.hasSpan=false] Whether the element is already a container,
- * or if the library should create a new container for it.
- * @param {string|null} [options.matchText=null] Text to highlight, e.g. search terms.
- * @return {jQuery}
- * @chainable
- */
-$.fn.autoEllipsis = function ( options ) {
-       options = $.extend( {
-               position: 'center',
-               tooltip: false,
-               restoreText: false,
-               hasSpan: false,
-               matchText: null
-       }, options );
+       // Due to <https://github.com/jscs-dev/jscs-jsdoc/issues/136>
+       // jscs:disable jsDoc
+       /**
       * Automatically truncate the plain text contents of an element and add an ellipsis
       *
       * @param {Object} options
       * @param {'left'|'center'|'right'} [options.position='center'] Where to remove text.
       * @param {boolean} [options.tooltip=false] Whether to show a tooltip with the remainder
       * of the text.
       * @param {boolean} [options.restoreText=false] Whether to save the text for restoring
       * later.
       * @param {boolean} [options.hasSpan=false] Whether the element is already a container,
       * or if the library should create a new container for it.
       * @param {string|null} [options.matchText=null] Text to highlight, e.g. search terms.
       * @return {jQuery}
       * @chainable
       */
+       $.fn.autoEllipsis = function ( options ) {
+               options = $.extend( {
+                       position: 'center',
+                       tooltip: false,
+                       restoreText: false,
+                       hasSpan: false,
+                       matchText: null
+               }, options );
 
-       return this.each( function () {
-               var $trimmableText,
-                       text, trimmableText, w, pw,
-                       l, r, i, side, m,
-                       // container element - used for measuring against
-                       $container = $( this );
+               return this.each( function () {
+                       var $trimmableText,
+                               text, trimmableText, w, pw,
+                               l, r, i, side, m,
+                               // container element - used for measuring against
+                               $container = $( this );
 
-               if ( options.restoreText ) {
-                       if ( !$container.data( 'autoEllipsis.originalText' ) ) {
-                               $container.data( 'autoEllipsis.originalText', $container.text() );
-                       } else {
-                               $container.text( $container.data( 'autoEllipsis.originalText' ) );
+                       if ( options.restoreText ) {
+                               if ( !$container.data( 'autoEllipsis.originalText' ) ) {
+                                       $container.data( 'autoEllipsis.originalText', $container.text() );
+                               } else {
+                                       $container.text( $container.data( 'autoEllipsis.originalText' ) );
+                               }
                        }
-               }
 
-               // trimmable text element - only the text within this element will be trimmed
-               if ( options.hasSpan ) {
-                       $trimmableText = $container.children( options.selector );
-               } else {
-                       $trimmableText = $( '<span>' )
-                               .css( 'whiteSpace', 'nowrap' )
-                               .text( $container.text() );
-                       $container
-                               .empty()
-                               .append( $trimmableText );
-               }
+                       // trimmable text element - only the text within this element will be trimmed
+                       if ( options.hasSpan ) {
+                               $trimmableText = $container.children( options.selector );
+                       } else {
+                               $trimmableText = $( '<span>' )
+                                       .css( 'whiteSpace', 'nowrap' )
+                                       .text( $container.text() );
+                               $container
+                                       .empty()
+                                       .append( $trimmableText );
+                       }
 
-               text = $container.text();
-               trimmableText = $trimmableText.text();
-               w = $container.width();
-               pw = 0;
+                       text = $container.text();
+                       trimmableText = $trimmableText.text();
+                       w = $container.width();
+                       pw = 0;
 
-               // Try cache
-               if ( options.matchText ) {
-                       if ( !( text in matchTextCache ) ) {
-                               matchTextCache[ text ] = {};
-                       }
-                       if ( !( options.matchText in matchTextCache[ text ] ) ) {
-                               matchTextCache[ text ][ options.matchText ] = {};
-                       }
-                       if ( !( w in matchTextCache[ text ][ options.matchText ] ) ) {
-                               matchTextCache[ text ][ options.matchText ][ w ] = {};
-                       }
-                       if ( options.position in matchTextCache[ text ][ options.matchText ][ w ] ) {
-                               $container.html( matchTextCache[ text ][ options.matchText ][ w ][ options.position ] );
-                               if ( options.tooltip ) {
-                                       $container.attr( 'title', text );
+                       // Try cache
+                       if ( options.matchText ) {
+                               if ( !( text in matchTextCache ) ) {
+                                       matchTextCache[ text ] = {};
                                }
-                               return;
-                       }
-               } else {
-                       if ( !( text in cache ) ) {
-                               cache[ text ] = {};
-                       }
-                       if ( !( w in cache[ text ] ) ) {
-                               cache[ text ][ w ] = {};
-                       }
-                       if ( options.position in cache[ text ][ w ] ) {
-                               $container.html( cache[ text ][ w ][ options.position ] );
-                               if ( options.tooltip ) {
-                                       $container.attr( 'title', text );
+                               if ( !( options.matchText in matchTextCache[ text ] ) ) {
+                                       matchTextCache[ text ][ options.matchText ] = {};
+                               }
+                               if ( !( w in matchTextCache[ text ][ options.matchText ] ) ) {
+                                       matchTextCache[ text ][ options.matchText ][ w ] = {};
+                               }
+                               if ( options.position in matchTextCache[ text ][ options.matchText ][ w ] ) {
+                                       $container.html( matchTextCache[ text ][ options.matchText ][ w ][ options.position ] );
+                                       if ( options.tooltip ) {
+                                               $container.attr( 'title', text );
+                                       }
+                                       return;
+                               }
+                       } else {
+                               if ( !( text in cache ) ) {
+                                       cache[ text ] = {};
+                               }
+                               if ( !( w in cache[ text ] ) ) {
+                                       cache[ text ][ w ] = {};
+                               }
+                               if ( options.position in cache[ text ][ w ] ) {
+                                       $container.html( cache[ text ][ w ][ options.position ] );
+                                       if ( options.tooltip ) {
+                                               $container.attr( 'title', text );
+                                       }
+                                       return;
                                }
-                               return;
                        }
-               }
 
-               if ( $trimmableText.width() + pw > w ) {
-                       switch ( options.position ) {
-                               case 'right':
-                                       // Use binary search-like technique for efficiency
-                                       l = 0;
-                                       r = trimmableText.length;
-                                       do {
-                                               m = Math.ceil( ( l + r ) / 2 );
-                                               $trimmableText.text( trimmableText.slice( 0, m ) + '...' );
-                                               if ( $trimmableText.width() + pw > w ) {
-                                                       // Text is too long
-                                                       r = m - 1;
-                                               } else {
-                                                       l = m;
+                       if ( $trimmableText.width() + pw > w ) {
+                               switch ( options.position ) {
+                                       case 'right':
+                                               // Use binary search-like technique for efficiency
+                                               l = 0;
+                                               r = trimmableText.length;
+                                               do {
+                                                       m = Math.ceil( ( l + r ) / 2 );
+                                                       $trimmableText.text( trimmableText.slice( 0, m ) + '...' );
+                                                       if ( $trimmableText.width() + pw > w ) {
+                                                               // Text is too long
+                                                               r = m - 1;
+                                                       } else {
+                                                               l = m;
+                                                       }
+                                               } while ( l < r );
+                                               $trimmableText.text( trimmableText.slice( 0, l ) + '...' );
+                                               break;
+                                       case 'center':
+                                               // TODO: Use binary search like for 'right'
+                                               i = [ Math.round( trimmableText.length / 2 ), Math.round( trimmableText.length / 2 ) ];
+                                               // Begin with making the end shorter
+                                               side = 1;
+                                               while ( $trimmableText.outerWidth() + pw > w && i[ 0 ] > 0 ) {
+                                                       $trimmableText.text( trimmableText.slice( 0, i[ 0 ] ) + '...' + trimmableText.slice( i[ 1 ] ) );
+                                                       // Alternate between trimming the end and begining
+                                                       if ( side === 0 ) {
+                                                               // Make the begining shorter
+                                                               i[ 0 ]--;
+                                                               side = 1;
+                                                       } else {
+                                                               // Make the end shorter
+                                                               i[ 1 ]++;
+                                                               side = 0;
+                                                       }
                                                }
-                                       } while ( l < r );
-                                       $trimmableText.text( trimmableText.slice( 0, l ) + '...' );
-                                       break;
-                               case 'center':
-                                       // TODO: Use binary search like for 'right'
-                                       i = [ Math.round( trimmableText.length / 2 ), Math.round( trimmableText.length / 2 ) ];
-                                       // Begin with making the end shorter
-                                       side = 1;
-                                       while ( $trimmableText.outerWidth() + pw > w && i[ 0 ] > 0 ) {
-                                               $trimmableText.text( trimmableText.slice( 0, i[ 0 ] ) + '...' + trimmableText.slice( i[ 1 ] ) );
-                                               // Alternate between trimming the end and begining
-                                               if ( side === 0 ) {
-                                                       // Make the begining shorter
-                                                       i[ 0 ]--;
-                                                       side = 1;
-                                               } else {
-                                                       // Make the end shorter
-                                                       i[ 1 ]++;
-                                                       side = 0;
+                                               break;
+                                       case 'left':
+                                               // TODO: Use binary search like for 'right'
+                                               r = 0;
+                                               while ( $trimmableText.outerWidth() + pw > w && r < trimmableText.length ) {
+                                                       $trimmableText.text( '...' + trimmableText.slice( r ) );
+                                                       r++;
                                                }
-                                       }
-                                       break;
-                               case 'left':
-                                       // TODO: Use binary search like for 'right'
-                                       r = 0;
-                                       while ( $trimmableText.outerWidth() + pw > w && r < trimmableText.length ) {
-                                               $trimmableText.text( '...' + trimmableText.slice( r ) );
-                                               r++;
-                                       }
-                                       break;
+                                               break;
+                               }
+                       }
+                       if ( options.tooltip ) {
+                               $container.attr( 'title', text );
+                       }
+                       if ( options.matchText ) {
+                               $container.highlightText( options.matchText );
+                               matchTextCache[ text ][ options.matchText ][ w ][ options.position ] = $container.html();
+                       } else {
+                               cache[ text ][ w ][ options.position ] = $container.html();
                        }
-               }
-               if ( options.tooltip ) {
-                       $container.attr( 'title', text );
-               }
-               if ( options.matchText ) {
-                       $container.highlightText( options.matchText );
-                       matchTextCache[ text ][ options.matchText ][ w ][ options.position ] = $container.html();
-               } else {
-                       cache[ text ][ w ][ options.position ] = $container.html();
-               }
 
-       } );
-};
-// jscs:enable jsDoc
+               } );
+       };
+       // jscs:enable jsDoc
 
-/**
- * @class jQuery
- * @mixins jQuery.plugin.autoEllipsis
- */
+       /**
       * @class jQuery
       * @mixins jQuery.plugin.autoEllipsis
       */
 
 }( jQuery ) );
index b1692bb..567bec8 100644 (file)
@@ -3,6 +3,17 @@
  */
 ( function ( $ ) {
 
+       var eventKeys = [
+               'keyup.byteLimit',
+               'keydown.byteLimit',
+               'change.byteLimit',
+               'mouseup.byteLimit',
+               'cut.byteLimit',
+               'paste.byteLimit',
+               'focus.byteLimit',
+               'blur.byteLimit'
+       ].join( ' ' );
+
        /**
         * Utility function to trim down a string, based on byteLimit
         * and given a safe start position. It supports insertion anywhere
                };
        };
 
-       var eventKeys = [
-               'keyup.byteLimit',
-               'keydown.byteLimit',
-               'change.byteLimit',
-               'mouseup.byteLimit',
-               'cut.byteLimit',
-               'paste.byteLimit',
-               'focus.byteLimit',
-               'blur.byteLimit'
-       ].join( ' ' );
-
        /**
         * Enforces a byte limit on an input field, so that UTF-8 entries are counted as well,
         * when, for example, a database field has a byte limit rather than a character limit.
index a3cc8fc..70dc105 100644 (file)
@@ -10,7 +10,6 @@
 ( function ( $ ) {
 
        function getColor( elem, attr ) {
-               /*jshint boss:true */
                var color;
 
                do {
@@ -22,6 +21,7 @@
                        }
 
                        attr = 'backgroundColor';
+               // eslint-disable-next-line no-cond-assign
                } while ( elem = elem.parentNode );
 
                return $.colorUtil.getRGB( color );
index c14f2c8..c53ec3b 100644 (file)
@@ -23,7 +23,6 @@
                 * @return {Array}
                 */
                getRGB: function ( color ) {
-                       /*jshint boss:true */
                        var result;
 
                        // Check if we're already dealing with an array of colors
@@ -32,6 +31,7 @@
                        }
 
                        // Look for rgb(num,num,num)
+                       // eslint-disable-next-line no-cond-assign
                        if ( result = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec( color ) ) {
                                return [
                                        parseInt( result[ 1 ], 10 ),
@@ -41,6 +41,7 @@
                        }
 
                        // Look for rgb(num%,num%,num%)
+                       // eslint-disable-next-line no-cond-assign
                        if ( result = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec( color ) ) {
                                return [
                                        parseFloat( result[ 1 ] ) * 2.55,
@@ -50,6 +51,7 @@
                        }
 
                        // Look for #a0b1c2
+                       // eslint-disable-next-line no-cond-assign
                        if ( result = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec( color ) ) {
                                return [
                                        parseInt( result[ 1 ], 16 ),
@@ -59,6 +61,7 @@
                        }
 
                        // Look for #fff
+                       // eslint-disable-next-line no-cond-assign
                        if ( result = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec( color ) ) {
                                return [
                                        parseInt( result[ 1 ] + result[ 1 ], 16 ),
@@ -68,6 +71,7 @@
                        }
 
                        // Look for rgba(0, 0, 0, 0) == transparent in Safari 3
+                       // eslint-disable-next-line no-cond-assign
                        if ( result = /rgba\(0, 0, 0, 0\)/.exec( color ) ) {
                                return $.colorUtil.colors.transparent;
                        }
                 * @return {number[]} The HSL representation
                 */
                rgbToHsl: function ( r, g, b ) {
+                       var d, h, s, l, min, max;
+
                        r = r / 255;
                        g = g / 255;
                        b = b / 255;
 
-                       var d,
-                               max = Math.max( r, g, b ),
-                               min = Math.min( r, g, b ),
-                               h,
-                               s,
-                               l = ( max + min ) / 2;
+                       max = Math.max( r, g, b );
+                       min = Math.min( r, g, b );
+                       l = ( max + min ) / 2;
 
                        if ( max === min ) {
                                // achromatic
index 1ecce6c..7931c81 100644 (file)
@@ -12,6 +12,7 @@
                return data;
        };
 
+       // eslint-disable-next-line valid-jsdoc
        /**
         * Enable inline confirmation for given clickable element (like `<a />` or `<button />`).
         *
index f9db72f..0bfa8f3 100644 (file)
@@ -19,6 +19,9 @@
        $.expandableField = {
                /**
                 * Expand the field, make the callback
+                *
+                * @param {jQuery.Event} e Event
+                * @param {Object} context
                 */
                expandField: function ( e, context ) {
                        context.config.beforeExpand.call( context.data.$field, context );
@@ -29,6 +32,9 @@
                },
                /**
                 * Condense the field, make the callback
+                *
+                * @param {jQuery.Event} e Event
+                * @param {Object} context
                 */
                condenseField: function ( e, context ) {
                        context.config.beforeCondense.call( context.data.$field, context );
index 7d308f8..7a7109c 100644 (file)
  */
 ( function ( $ ) {
 
-/**
- * Get reported or approximate device pixel ratio.
- *
- * - 1.0 means 1 CSS pixel is 1 hardware pixel
- * - 2.0 means 1 CSS pixel is 2 hardware pixels
- * - etc.
- *
- * Uses `window.devicePixelRatio` if available, or CSS media queries on IE.
- *
- * @static
- * @inheritable
- * @return {number} Device pixel ratio
- */
-$.devicePixelRatio = function () {
-       if ( window.devicePixelRatio !== undefined ) {
-               // Most web browsers:
-               // * WebKit/Blink (Safari, Chrome, Android browser, etc)
-               // * Opera
-               // * Firefox 18+
-               // * Microsoft Edge (Windows 10)
-               return window.devicePixelRatio;
-       } else if ( window.msMatchMedia !== undefined ) {
-               // Windows 8 desktops / tablets, probably Windows Phone 8
-               //
-               // IE 10/11 doesn't report pixel ratio directly, but we can get the
-               // screen DPI and divide by 96. We'll bracket to [1, 1.5, 2.0] for
-               // simplicity, but you may get different values depending on zoom
-               // factor, size of screen and orientation in Metro IE.
-               if ( window.msMatchMedia( '(min-resolution: 192dpi)' ).matches ) {
+       /**
+        * Get reported or approximate device pixel ratio.
+        *
+        * - 1.0 means 1 CSS pixel is 1 hardware pixel
+        * - 2.0 means 1 CSS pixel is 2 hardware pixels
+        * - etc.
+        *
+        * Uses `window.devicePixelRatio` if available, or CSS media queries on IE.
+        *
+        * @static
+        * @inheritable
+        * @return {number} Device pixel ratio
+        */
+       $.devicePixelRatio = function () {
+               if ( window.devicePixelRatio !== undefined ) {
+                       // Most web browsers:
+                       // * WebKit/Blink (Safari, Chrome, Android browser, etc)
+                       // * Opera
+                       // * Firefox 18+
+                       // * Microsoft Edge (Windows 10)
+                       return window.devicePixelRatio;
+               } else if ( window.msMatchMedia !== undefined ) {
+                       // Windows 8 desktops / tablets, probably Windows Phone 8
+                       //
+                       // IE 10/11 doesn't report pixel ratio directly, but we can get the
+                       // screen DPI and divide by 96. We'll bracket to [1, 1.5, 2.0] for
+                       // simplicity, but you may get different values depending on zoom
+                       // factor, size of screen and orientation in Metro IE.
+                       if ( window.msMatchMedia( '(min-resolution: 192dpi)' ).matches ) {
+                               return 2;
+                       } else if ( window.msMatchMedia( '(min-resolution: 144dpi)' ).matches ) {
+                               return 1.5;
+                       } else {
+                               return 1;
+                       }
+               } else {
+                       // Legacy browsers...
+                       // Assume 1 if unknown.
+                       return 1;
+               }
+       };
+
+       /**
+        * Bracket a given device pixel ratio to one of [1, 1.5, 2].
+        *
+        * This is useful for grabbing images on the fly with sizes based on the display
+        * density, without causing slowdown and extra thumbnail renderings on devices
+        * that are slightly different from the most common sizes.
+        *
+        * The bracketed ratios match the default 'srcset' output on MediaWiki thumbnails,
+        * so will be consistent with default renderings.
+        *
+        * @static
+        * @inheritable
+        * @param {number} baseRatio Base ratio
+        * @return {number} Device pixel ratio
+        */
+       $.bracketDevicePixelRatio = function ( baseRatio ) {
+               if ( baseRatio > 1.5 ) {
                        return 2;
-               } else if ( window.msMatchMedia( '(min-resolution: 144dpi)' ).matches ) {
+               } else if ( baseRatio > 1 ) {
                        return 1.5;
                } else {
                        return 1;
                }
-       } else {
-               // Legacy browsers...
-               // Assume 1 if unknown.
-               return 1;
-       }
-};
-
-/**
- * Bracket a given device pixel ratio to one of [1, 1.5, 2].
- *
- * This is useful for grabbing images on the fly with sizes based on the display
- * density, without causing slowdown and extra thumbnail renderings on devices
- * that are slightly different from the most common sizes.
- *
- * The bracketed ratios match the default 'srcset' output on MediaWiki thumbnails,
- * so will be consistent with default renderings.
- *
- * @static
- * @inheritable
- * @return {number} Device pixel ratio
- */
-$.bracketDevicePixelRatio = function ( baseRatio ) {
-       if ( baseRatio > 1.5 ) {
-               return 2;
-       } else if ( baseRatio > 1 ) {
-               return 1.5;
-       } else {
-               return 1;
-       }
-};
+       };
 
-/**
- * Get reported or approximate device pixel ratio, bracketed to [1, 1.5, 2].
- *
- * This is useful for grabbing images on the fly with sizes based on the display
- * density, without causing slowdown and extra thumbnail renderings on devices
- * that are slightly different from the most common sizes.
- *
- * The bracketed ratios match the default 'srcset' output on MediaWiki thumbnails,
- * so will be consistent with default renderings.
- *
- * - 1.0 means 1 CSS pixel is 1 hardware pixel
- * - 1.5 means 1 CSS pixel is 1.5 hardware pixels
- * - 2.0 means 1 CSS pixel is 2 hardware pixels
- *
- * @static
- * @inheritable
- * @return {number} Device pixel ratio
- */
-$.bracketedDevicePixelRatio = function () {
-       return $.bracketDevicePixelRatio( $.devicePixelRatio() );
-};
+       /**
       * Get reported or approximate device pixel ratio, bracketed to [1, 1.5, 2].
       *
       * This is useful for grabbing images on the fly with sizes based on the display
       * density, without causing slowdown and extra thumbnail renderings on devices
       * that are slightly different from the most common sizes.
       *
       * The bracketed ratios match the default 'srcset' output on MediaWiki thumbnails,
       * so will be consistent with default renderings.
       *
       * - 1.0 means 1 CSS pixel is 1 hardware pixel
       * - 1.5 means 1 CSS pixel is 1.5 hardware pixels
       * - 2.0 means 1 CSS pixel is 2 hardware pixels
       *
       * @static
       * @inheritable
       * @return {number} Device pixel ratio
       */
+       $.bracketedDevicePixelRatio = function () {
+               return $.bracketDevicePixelRatio( $.devicePixelRatio() );
+       };
 
-/**
- * Implement responsive images based on srcset attributes, if browser has no
- * native srcset support.
- *
- * @return {jQuery} This selection
- * @chainable
- */
-$.fn.hidpi = function () {
-       var $target = this,
-               // TODO add support for dpi media query checks on Firefox, IE
-               devicePixelRatio = $.devicePixelRatio(),
-               testImage = new Image();
+       /**
       * Implement responsive images based on srcset attributes, if browser has no
       * native srcset support.
       *
       * @return {jQuery} This selection
       * @chainable
       */
+       $.fn.hidpi = function () {
+               var $target = this,
+                       // TODO add support for dpi media query checks on Firefox, IE
+                       devicePixelRatio = $.devicePixelRatio(),
+                       testImage = new Image();
 
-       if ( devicePixelRatio > 1 && testImage.srcset === undefined ) {
-               // No native srcset support.
-               $target.find( 'img' ).each( function () {
-                       var $img = $( this ),
-                               srcset = $img.attr( 'srcset' ),
-                               match;
-                       if ( typeof srcset === 'string' && srcset !== '' ) {
-                               match = $.matchSrcSet( devicePixelRatio, srcset );
-                               if ( match !== null ) {
-                                       $img.attr( 'src', match );
+               if ( devicePixelRatio > 1 && testImage.srcset === undefined ) {
+                       // No native srcset support.
+                       $target.find( 'img' ).each( function () {
+                               var $img = $( this ),
+                                       srcset = $img.attr( 'srcset' ),
+                                       match;
+                               if ( typeof srcset === 'string' && srcset !== '' ) {
+                                       match = $.matchSrcSet( devicePixelRatio, srcset );
+                                       if ( match !== null ) {
+                                               $img.attr( 'src', match );
+                                       }
                                }
-                       }
-               } );
-       }
+                       } );
+               }
 
-       return $target;
-};
+               return $target;
+       };
 
-/**
- * Match a srcset entry for the given device pixel ratio
- *
- * Exposed for testing.
- *
- * @private
- * @static
- * @param {number} devicePixelRatio
- * @param {string} srcset
- * @return {Mixed} null or the matching src string
- */
-$.matchSrcSet = function ( devicePixelRatio, srcset ) {
-       var candidates,
-               candidate,
-               bits,
-               src,
-               i,
-               ratioStr,
-               ratio,
-               selectedRatio = 1,
-               selectedSrc = null;
-       candidates = srcset.split( / *, */ );
-       for ( i = 0; i < candidates.length; i++ ) {
-               candidate = candidates[ i ];
-               bits = candidate.split( / +/ );
-               src = bits[ 0 ];
-               if ( bits.length > 1 && bits[ 1 ].charAt( bits[ 1 ].length - 1 ) === 'x' ) {
-                       ratioStr = bits[ 1 ].slice( 0, -1 );
-                       ratio = parseFloat( ratioStr );
-                       if ( ratio <= devicePixelRatio && ratio > selectedRatio ) {
-                               selectedRatio = ratio;
-                               selectedSrc = src;
+       /**
+        * Match a srcset entry for the given device pixel ratio
+        *
+        * Exposed for testing.
+        *
+        * @private
+        * @static
+        * @param {number} devicePixelRatio
+        * @param {string} srcset
+        * @return {Mixed} null or the matching src string
+        */
+       $.matchSrcSet = function ( devicePixelRatio, srcset ) {
+               var candidates,
+                       candidate,
+                       bits,
+                       src,
+                       i,
+                       ratioStr,
+                       ratio,
+                       selectedRatio = 1,
+                       selectedSrc = null;
+               candidates = srcset.split( / *, */ );
+               for ( i = 0; i < candidates.length; i++ ) {
+                       candidate = candidates[ i ];
+                       bits = candidate.split( / +/ );
+                       src = bits[ 0 ];
+                       if ( bits.length > 1 && bits[ 1 ].charAt( bits[ 1 ].length - 1 ) === 'x' ) {
+                               ratioStr = bits[ 1 ].slice( 0, -1 );
+                               ratio = parseFloat( ratioStr );
+                               if ( ratio <= devicePixelRatio && ratio > selectedRatio ) {
+                                       selectedRatio = ratio;
+                                       selectedSrc = src;
+                               }
                        }
                }
-       }
-       return selectedSrc;
-};
+               return selectedSrc;
+       };
 
-/**
- * @class jQuery
- * @mixins jQuery.plugin.hidpi
- */
+       /**
       * @class jQuery
       * @mixins jQuery.plugin.hidpi
       */
 
 }( jQuery ) );
index e37f19b..3feca81 100644 (file)
                                        // replace the matched node, with our span-wrapped clone of the matched node
                                        middlebit.parentNode.replaceChild( spannode, middlebit );
                                }
-                       } else if ( node.nodeType === Node.ELEMENT_NODE
+                       } else if (
+                               node.nodeType === Node.ELEMENT_NODE &&
                                // element with childnodes, and not a script, style or an element we created
-                               && node.childNodes
-                               && !/(script|style)/i.test( node.tagName )
-                               && !( node.tagName.toLowerCase() === 'span'
-                                       && node.className.match( /\bhighlight/ )
+                               node.childNodes &&
+                               !/(script|style)/i.test( node.tagName ) &&
+                               !(
+                                       node.tagName.toLowerCase() === 'span' &&
+                                       node.className.match( /\bhighlight/ )
                                )
                        ) {
                                for ( i = 0; i < node.childNodes.length; ++i ) {
index f5932b2..05b3891 100644 (file)
  */
 ( function ( $, mw ) {
 
-/**
- * Gets a localized message, using parameters from options if present.
- *
- * @ignore
- * @param {Object} options
- * @param {string} key
- * @return {string} Localized message
- */
-function msg( options, key ) {
-       var args = options.params[ key ] || [];
-       // Format: mw.msg( key [, p1, p2, ...] )
-       args.unshift( options.prefix + ( options.keys[ key ] || key ) );
-       return mw.msg.apply( mw, args );
-}
+       /**
       * Gets a localized message, using parameters from options if present.
       *
       * @ignore
       * @param {Object} options
       * @param {string} key
       * @return {string} Localized message
       */
+       function msg( options, key ) {
+               var args = options.params[ key ] || [];
+               // Format: mw.msg( key [, p1, p2, ...] )
+               args.unshift( options.prefix + ( options.keys[ key ] || key ) );
+               return mw.msg.apply( mw, args );
+       }
 
-/**
- * Localizes a DOM selection by replacing <html:msg /> elements with localized text and adding
- * localized title and alt attributes to elements with title-msg and alt-msg attributes
- * respectively.
- *
- * Call on a selection of HTML which contains `<html:msg key="message-key" />` elements or elements
- * with title-msg="message-key", alt-msg="message-key" or placeholder-msg="message-key" attributes.
- * `<html:msg />` elements will be replaced with localized text, *-msg attributes will be replaced
- * with attributes that do not have the "-msg" suffix and contain a localized message.
- *
- * Example:
- *     // Messages: { 'title': 'Awesome', 'desc': 'Cat doing backflip' 'search' contains 'Search' }
- *     var html = '\
- *         <p>\
- *             <html:msg key="title" />\
- *             <img src="something.jpg" title-msg="title" alt-msg="desc" />\
- *             <input type="text" placeholder-msg="search" />\
- *         </p>';
- *     $( 'body' ).append( $( html ).localize() );
- *
- * Appends something like this to the body...
- *     <p>
- *         Awesome
- *         <img src="something.jpg" title="Awesome" alt="Cat doing backflip" />
- *         <input type="text" placeholder="Search" />
- *     </p>
- *
- * Arguments can be passed into uses of a message using the params property of the options object
- * given to .localize(). Multiple messages can be given parameters, because the params property is
- * an object keyed by the message key to apply the parameters to, each containing an array of
- * parameters to use. The limitation is that you can not use different parameters to individual uses
- * of a message in the same selection being localized - they will all recieve the same parameters.
- *
- * Example:
- *     // Messages: { 'easy-as': 'Easy as $1 $2 $3.' }
- *     var html = '<p><html:msg key="easy-as" /></p>';
- *     $( 'body' ).append( $( html ).localize( { 'params': { 'easy-as': ['a', 'b', 'c'] } } ) );
- *
- * Appends something like this to the body...
- *     <p>Easy as a, b, c</p>
- *
- * Raw HTML content can be used, instead of it being escaped as text. To do this, just use the raw
- * attribute on a msg element.
- *
- * Example:
- *     // Messages: { 'hello': '<b><i>Hello</i> $1!</b>' }
- *     var html = '\
- *         <p>\
- *             <!-- escaped: --><html:msg key="hello" />\
- *             <!-- raw: --><html:msg key="hello" raw />\
- *         </p>';
- *     $( 'body' ).append( $( html ).localize( { 'params': { 'hello': ['world'] } } ) );
- *
- * Appends something like this to the body...
- *     <p>
- *         <!-- escaped: -->&lt;b&gt;&lt;i&gt;Hello&lt;/i&gt; world!&lt;/b&gt;
- *         <!-- raw: --><b><i>Hello</i> world!</b>
- *     </p>
- *
- * Message keys can also be remapped, allowing the same generic template to be used with a variety
- * of messages. This is important for improving re-usability of templates.
- *
- * Example:
- *     // Messages: { 'good-afternoon': 'Good afternoon' }
- *     var html = '<p><html:msg key="greeting" /></p>';
- *     $( 'body' ).append( $( html ).localize( { 'keys': { 'greeting': 'good-afternoon' } } ) );
- *
- * Appends something like this to the body...
- *     <p>Good afternoon</p>
- *
- * Message keys can also be prefixed globally, which is handy when writing extensions, where by
- * convention all messages are prefixed with the extension's name.
- *
- * Example:
- *     // Messages: { 'teleportation-warning': 'You may not get there all in one piece.' }
- *     var html = '<p><html:msg key="warning" /></p>';
- *     $( 'body' ).append( $( html ).localize( { 'prefix': 'teleportation-' } ) );
- *
- * Appends something like this to the body...
- *     <p>You may not get there all in one piece.</p>
- *
- * @param {Object} options Map of options to be used while localizing
- * @param {string} options.prefix String to prepend to all message keys
- * @param {Object} options.keys Message key aliases, used for remapping keys to a template
- * @param {Object} options.params Lists of parameters to use with certain message keys
- * @return {jQuery}
- * @chainable
- */
-$.fn.localize = function ( options ) {
-       var $target = this,
-               attributes = [ 'title', 'alt', 'placeholder' ];
+       /**
       * Localizes a DOM selection by replacing <html:msg /> elements with localized text and adding
       * localized title and alt attributes to elements with title-msg and alt-msg attributes
       * respectively.
       *
       * Call on a selection of HTML which contains `<html:msg key="message-key" />` elements or elements
       * with title-msg="message-key", alt-msg="message-key" or placeholder-msg="message-key" attributes.
       * `<html:msg />` elements will be replaced with localized text, *-msg attributes will be replaced
       * with attributes that do not have the "-msg" suffix and contain a localized message.
       *
       * Example:
       *     // Messages: { 'title': 'Awesome', 'desc': 'Cat doing backflip' 'search' contains 'Search' }
       *     var html = '\
       *         <p>\
       *             <html:msg key="title" />\
       *             <img src="something.jpg" title-msg="title" alt-msg="desc" />\
       *             <input type="text" placeholder-msg="search" />\
       *         </p>';
       *     $( 'body' ).append( $( html ).localize() );
       *
       * Appends something like this to the body...
       *     <p>
       *         Awesome
       *         <img src="something.jpg" title="Awesome" alt="Cat doing backflip" />
       *         <input type="text" placeholder="Search" />
       *     </p>
       *
       * Arguments can be passed into uses of a message using the params property of the options object
       * given to .localize(). Multiple messages can be given parameters, because the params property is
       * an object keyed by the message key to apply the parameters to, each containing an array of
       * parameters to use. The limitation is that you can not use different parameters to individual uses
       * of a message in the same selection being localized - they will all recieve the same parameters.
       *
       * Example:
       *     // Messages: { 'easy-as': 'Easy as $1 $2 $3.' }
       *     var html = '<p><html:msg key="easy-as" /></p>';
       *     $( 'body' ).append( $( html ).localize( { 'params': { 'easy-as': ['a', 'b', 'c'] } } ) );
       *
       * Appends something like this to the body...
       *     <p>Easy as a, b, c</p>
       *
       * Raw HTML content can be used, instead of it being escaped as text. To do this, just use the raw
       * attribute on a msg element.
       *
       * Example:
       *     // Messages: { 'hello': '<b><i>Hello</i> $1!</b>' }
       *     var html = '\
       *         <p>\
       *             <!-- escaped: --><html:msg key="hello" />\
       *             <!-- raw: --><html:msg key="hello" raw />\
       *         </p>';
       *     $( 'body' ).append( $( html ).localize( { 'params': { 'hello': ['world'] } } ) );
       *
       * Appends something like this to the body...
       *     <p>
       *         <!-- escaped: -->&lt;b&gt;&lt;i&gt;Hello&lt;/i&gt; world!&lt;/b&gt;
       *         <!-- raw: --><b><i>Hello</i> world!</b>
       *     </p>
       *
       * Message keys can also be remapped, allowing the same generic template to be used with a variety
       * of messages. This is important for improving re-usability of templates.
       *
       * Example:
       *     // Messages: { 'good-afternoon': 'Good afternoon' }
       *     var html = '<p><html:msg key="greeting" /></p>';
       *     $( 'body' ).append( $( html ).localize( { 'keys': { 'greeting': 'good-afternoon' } } ) );
       *
       * Appends something like this to the body...
       *     <p>Good afternoon</p>
       *
       * Message keys can also be prefixed globally, which is handy when writing extensions, where by
       * convention all messages are prefixed with the extension's name.
       *
       * Example:
       *     // Messages: { 'teleportation-warning': 'You may not get there all in one piece.' }
       *     var html = '<p><html:msg key="warning" /></p>';
       *     $( 'body' ).append( $( html ).localize( { 'prefix': 'teleportation-' } ) );
       *
       * Appends something like this to the body...
       *     <p>You may not get there all in one piece.</p>
       *
       * @param {Object} options Map of options to be used while localizing
       * @param {string} options.prefix String to prepend to all message keys
       * @param {Object} options.keys Message key aliases, used for remapping keys to a template
       * @param {Object} options.params Lists of parameters to use with certain message keys
       * @return {jQuery}
       * @chainable
       */
+       $.fn.localize = function ( options ) {
+               var $target = this,
+                       attributes = [ 'title', 'alt', 'placeholder' ];
 
-       // Extend options
-       options = $.extend( {
-               prefix: '',
-               keys: {},
-               params: {}
-       }, options );
+               // Extend options
+               options = $.extend( {
+                       prefix: '',
+                       keys: {},
+                       params: {}
+               }, options );
 
-       // Elements
-       // Ok, so here's the story on this selector. In IE 6/7, searching for 'msg' turns up the
-       // 'html:msg', but searching for 'html:msg' doesn't. In later IE and other browsers, searching
-       // for 'html:msg' turns up the 'html:msg', but searching for 'msg' doesn't. So searching for
-       // both 'msg' and 'html:msg' seems to get the job done. This feels pretty icky, though.
-       $target.find( 'msg,html\\:msg' ).each( function () {
-               var $el = $( this );
-               // Escape by default
-               if ( $el.attr( 'raw' ) ) {
-                       $el.html( msg( options, $el.attr( 'key' ) ) );
-               } else {
-                       $el.text( msg( options, $el.attr( 'key' ) ) );
-               }
-               // Remove wrapper
-               $el.replaceWith( $el.html() );
-       } );
-
-       // Attributes
-       // Note: there's no way to prevent escaping of values being injected into attributes, this is
-       // on purpose, not a design flaw.
-       $.each( attributes, function ( i, attr ) {
-               var msgAttr = attr + '-msg';
-               $target.find( '[' + msgAttr + ']' ).each( function () {
+               // Elements
+               // Ok, so here's the story on this selector. In IE 6/7, searching for 'msg' turns up the
+               // 'html:msg', but searching for 'html:msg' doesn't. In later IE and other browsers, searching
+               // for 'html:msg' turns up the 'html:msg', but searching for 'msg' doesn't. So searching for
+               // both 'msg' and 'html:msg' seems to get the job done. This feels pretty icky, though.
+               $target.find( 'msg,html\\:msg' ).each( function () {
                        var $el = $( this );
-                       $el.attr( attr, msg( options, $el.attr( msgAttr ) ) ).removeAttr( msgAttr );
+                       // Escape by default
+                       if ( $el.attr( 'raw' ) ) {
+                               $el.html( msg( options, $el.attr( 'key' ) ) );
+                       } else {
+                               $el.text( msg( options, $el.attr( 'key' ) ) );
+                       }
+                       // Remove wrapper
+                       $el.replaceWith( $el.html() );
                } );
-       } );
 
-       // HTML, Text for elements which cannot have children e.g. OPTION
-       $target.find( '[data-msg-text]' ).each( function () {
-               var $el = $( this );
-               $el.text( msg( options, $el.attr( 'data-msg-text' ) ) );
-       } );
+               // Attributes
+               // Note: there's no way to prevent escaping of values being injected into attributes, this is
+               // on purpose, not a design flaw.
+               $.each( attributes, function ( i, attr ) {
+                       var msgAttr = attr + '-msg';
+                       $target.find( '[' + msgAttr + ']' ).each( function () {
+                               var $el = $( this );
+                               $el.attr( attr, msg( options, $el.attr( msgAttr ) ) ).removeAttr( msgAttr );
+                       } );
+               } );
 
-       $target.find( '[data-msg-html]' ).each( function () {
-               var $el = $( this );
-               $el.html( msg( options, $el.attr( 'data-msg-html' ) ) );
-       } );
+               // HTML, Text for elements which cannot have children e.g. OPTION
+               $target.find( '[data-msg-text]' ).each( function () {
+                       var $el = $( this );
+                       $el.text( msg( options, $el.attr( 'data-msg-text' ) ) );
+               } );
+
+               $target.find( '[data-msg-html]' ).each( function () {
+                       var $el = $( this );
+                       $el.html( msg( options, $el.attr( 'data-msg-html' ) ) );
+               } );
 
-       return $target;
-};
+               return $target;
+       };
 
-// Let IE know about the msg tag before it's used...
-document.createElement( 'msg' );
+       // Let IE know about the msg tag before it's used...
+       document.createElement( 'msg' );
 
-/**
- * @class jQuery
- * @mixins jQuery.plugin.localize
- */
+       /**
       * @class jQuery
       * @mixins jQuery.plugin.localize
       */
 
 }( jQuery, mediaWiki ) );
index 27ceb2b..f9675fa 100644 (file)
                        return false;
                },
                compareArray: function ( arrThis, arrAgainst ) {
+                       var i;
                        if ( arrThis.length !== arrAgainst.length ) {
                                return false;
                        }
-                       for ( var i = 0; i < arrThis.length; i++ ) {
+                       for ( i = 0; i < arrThis.length; i++ ) {
                                if ( $.isArray( arrThis[ i ] ) ) {
                                        if ( !$.compareArray( arrThis[ i ], arrAgainst[ i ] ) ) {
                                                return false;
                return str.replace( /([\\{}()|.?*+\-\^$\[\]])/g, '\\$1' );
        }, 'Use mediawiki.RegExp instead.' );
 
-} )( jQuery, mediaWiki );
+}( jQuery, mediaWiki ) );
index c472ac7..12b0404 100644 (file)
@@ -35,7 +35,7 @@
        function args( elem ) {
                // Return an object of element attributes
                var newAttrs = {},
-                               rinlinejQuery = /^jQuery\d+$/;
+                       rinlinejQuery = /^jQuery\d+$/;
                $.each( elem.attributes, function ( i, attr ) {
                        if ( attr.specified && !rinlinejQuery.test( attr.name ) ) {
                                newAttrs[ attr.name ] = attr.value;
@@ -46,7 +46,7 @@
 
        function clearPlaceholder( event, value ) {
                var input = this,
-                               $input = $( input );
+                       $input = $( input );
                if ( input.value === $input.attr( 'placeholder' ) && $input.hasClass( 'placeholder' ) ) {
                        if ( $input.data( 'placeholder-password' ) ) {
                                $input = $input.hide().next().show().attr( 'id', $input.removeAttr( 'id' ).data( 'placeholder-id' ) );
@@ -68,9 +68,9 @@
 
        function setPlaceholder() {
                var $replacement,
-                               input = this,
-                               $input = $( input ),
-                               id = this.id;
+                       input = this,
+                       $input = $( input ),
+                       id = this.id;
                if ( !input.value ) {
                        if ( input.type === 'password' ) {
                                if ( !$input.data( 'placeholder-textinput' ) ) {
@@ -85,7 +85,7 @@
                                                                'placeholder-password': $input,
                                                                'placeholder-id': id
                                                        } )
-                                                       .bind( 'focus.placeholder drop.placeholder', clearPlaceholder );
+                                                       .on( 'focus.placeholder drop.placeholder', clearPlaceholder );
                                        $input
                                                        .data( {
                                                                'placeholder-textinput': $replacement,
 
        function changePlaceholder( text ) {
                var hasArgs = arguments.length,
-                               $input = this;
+                       $input = this;
                if ( hasArgs ) {
                        if ( $input.attr( 'placeholder' ) !== text ) {
                                $input.prop( 'placeholder', text );
                                .filter( function () {
                                        return !$( this ).data( 'placeholder-enabled' );
                                } )
-                               .bind( {
+                               .on( {
                                        'focus.placeholder drop.placeholder': clearPlaceholder,
                                        'blur.placeholder': setPlaceholder
                                } )
                } );
 
                // Clear placeholder values upon page reload
-               $( window ).bind( 'beforeunload.placeholder', function () {
+               $( window ).on( 'beforeunload.placeholder', function () {
                        $( '.placeholder' ).each( function () {
                                this.value = '';
                        } );
index 8d263fb..4353dd7 100644 (file)
@@ -17,9 +17,9 @@
 
        var util,
                hasOwn = Object.prototype.hasOwnProperty,
-               log = ( window.console && window.console.log )
-                       ? function () { return window.console.log.apply( window.console, arguments ); }
-                       function () {};
+               log = ( window.console && window.console.log ) ?
+                       function () { return window.console.log.apply( window.console, arguments ); } :
+                       function () {};
 
        // Simplified version of a few jQuery methods, except that they don't
        // call other jQuery methods. Required to be able to run the CompletenessTest
                } );
 
                QUnit.done( function () {
+                       var toolbar, testResults, cntTotal, cntCalled, cntMissing;
+
                        that.populateMissingTests();
                        log( 'CompletenessTest/populateMissingTests', that );
 
-                       var toolbar, testResults, cntTotal, cntCalled, cntMissing;
-
                        cntTotal = util.keys( that.injectionTracker ).length;
                        cntCalled = util.keys( that.methodCallTracker ).length;
                        cntMissing = util.keys( that.missingTests ).length;
 
                        // Hard ignores
                        if ( this.ignoreFn( currVal, this, currPathArray ) ) {
-                               return null;
+                               return;
                        }
 
                        // Handle the lazy limit
                        this.lazyCounter++;
                        if ( this.lazyCounter > this.lazyLimit ) {
                                log( 'CompletenessTest.fn.walkTheObject> Limit reached: ' + this.lazyCounter, currPathArray );
-                               return null;
+                               return;
                        }
 
                        // Functions
                        // Make the spy inherit from the original so that its static methods are also
                        // visible in the spy (e.g. when we inject a check into mw.log, mw.log.warn
                        // must remain accessible).
-                       // XXX: https://github.com/jshint/jshint/issues/2656
-                       /*jshint ignore:start */
-                       /*jshint proto:true */
                        spy.__proto__ = val;
-                       /*jshint ignore:end */
 
                        // Objects are by reference, members (unless objects) are not.
                        obj[ key ] = spy;
index af5a97d..9079cc0 100644 (file)
@@ -59,6 +59,8 @@
                 * @return {jQuery}
                 */
                createSpinner: function ( opts ) {
+                       var $spinner;
+
                        if ( opts !== undefined && $.type( opts ) !== 'object' ) {
                                opts = {
                                        id: opts
@@ -67,7 +69,7 @@
 
                        opts = $.extend( {}, defaults, opts );
 
-                       var $spinner = $( '<div>' ).addClass( 'mw-spinner' ).attr( 'title', '...' );
+                       $spinner = $( '<div>' ).addClass( 'mw-spinner' ).attr( 'title', '...' );
                        if ( opts.id !== undefined ) {
                                $spinner.attr( 'id', 'mw-spinner-' + opts.id );
                        }
index 884ecb6..f3e4e09 100644 (file)
                                                        $results.empty();
                                                        expWidth = -1;
                                                        for ( i = 0; i < context.config.suggestions.length; i++ ) {
-                                                               /*jshint loopfunc:true */
                                                                text = context.config.suggestions[ i ];
                                                                $result = $( '<div>' )
                                                                        .addClass( 'suggestions-result' )
                                                        46, // delete
                                                        8   // backspace
                                                ];
-                                               if ( context.data.keypressedCount === 0
-                                                       && e.which === context.data.keypressed
-                                                       && $.inArray( e.which, allowed ) !== -1
+                                               if ( context.data.keypressedCount === 0 &&
+                                                       e.which === context.data.keypressed &&
+                                                       $.inArray( e.which, allowed ) !== -1
                                                ) {
                                                        $.suggestions.keypress( e, context, context.data.keypressed );
                                                }
index 62be0d8..4da05e6 100644 (file)
         * in default (ascending) order when their header cell is clicked the next time.
         *
         * @param {jQuery} $headers
-        * @param {number[][]} sortList
-        * @param {number[][]} headerToColumns
+        * @param {Array} sortList 2D number array
+        * @param {Array} headerToColumns 2D number array
         */
        function setHeadersOrder( $headers, sortList, headerToColumns ) {
                // Loop through all headers to retrieve the indices of the columns the header spans across:
        }
 
        function setHeadersCss( table, $headers, list, css, msg, columnToHeader ) {
+               var i, len;
                // Remove all header information and reset titles to default message
                $headers.removeClass( css[ 0 ] ).removeClass( css[ 1 ] ).attr( 'title', msg[ 1 ] );
 
-               for ( var i = 0; i < list.length; i++ ) {
+               for ( i = 0, len = list.length; i < len; i++ ) {
                        $headers
                                .eq( columnToHeader[ list[ i ][ 0 ] ] )
                                .addClass( css[ list[ i ][ 1 ] ] )
        }
 
        function buildCollationTable() {
+               var key, keys = [];
                ts.collationTable = mw.config.get( 'tableSorterCollation' );
                ts.collationRegex = null;
                if ( ts.collationTable ) {
-                       var key,
-                               keys = [];
-
                        // Build array of key names
                        for ( key in ts.collationTable ) {
                                // Check hasOwn to be safe
        /* Public scope */
 
        $.tablesorter = {
-                       defaultOptions: {
-                               cssHeader: 'headerSort',
-                               cssAsc: 'headerSortUp',
-                               cssDesc: 'headerSortDown',
-                               cssChildRow: 'expand-child',
-                               sortMultiSortKey: 'shiftKey',
-                               unsortableClass: 'unsortable',
-                               parsers: [],
-                               cancelSelection: true,
-                               sortList: [],
-                               headerList: [],
-                               headerToColumns: [],
-                               columnToHeader: [],
-                               columns: 0
-                       },
-
-                       dateRegex: [],
-                       monthNames: {},
-
-                       /**
-                        * @param {jQuery} $tables
-                        * @param {Object} [settings]
-                        */
-                       construct: function ( $tables, settings ) {
-                               return $tables.each( function ( i, table ) {
-                                       // Declare and cache.
-                                       var $headers, cache, config, sortCSS, sortMsg,
-                                               $table = $( table ),
-                                               firstTime = true;
-
-                                       // Quit if no tbody
-                                       if ( !table.tBodies ) {
+               defaultOptions: {
+                       cssHeader: 'headerSort',
+                       cssAsc: 'headerSortUp',
+                       cssDesc: 'headerSortDown',
+                       cssChildRow: 'expand-child',
+                       sortMultiSortKey: 'shiftKey',
+                       unsortableClass: 'unsortable',
+                       parsers: [],
+                       cancelSelection: true,
+                       sortList: [],
+                       headerList: [],
+                       headerToColumns: [],
+                       columnToHeader: [],
+                       columns: 0
+               },
+
+               dateRegex: [],
+               monthNames: {},
+
+               /**
+                * @param {jQuery} $tables
+                * @param {Object} [settings]
+                * @return {jQuery}
+                */
+               construct: function ( $tables, settings ) {
+                       return $tables.each( function ( i, table ) {
+                               // Declare and cache.
+                               var $headers, cache, config, sortCSS, sortMsg,
+                                       $table = $( table ),
+                                       firstTime = true;
+
+                               // Quit if no tbody
+                               if ( !table.tBodies ) {
+                                       return;
+                               }
+                               if ( !table.tHead ) {
+                                       // No thead found. Look for rows with <th>s and
+                                       // move them into a <thead> tag or a <tfoot> tag
+                                       emulateTHeadAndFoot( $table );
+
+                                       // Still no thead? Then quit
+                                       if ( !table.tHead ) {
                                                return;
                                        }
-                                       if ( !table.tHead ) {
-                                               // No thead found. Look for rows with <th>s and
-                                               // move them into a <thead> tag or a <tfoot> tag
-                                               emulateTHeadAndFoot( $table );
+                               }
+                               $table.addClass( 'jquery-tablesorter' );
 
-                                               // Still no thead? Then quit
-                                               if ( !table.tHead ) {
-                                                       return;
-                                               }
-                                       }
-                                       $table.addClass( 'jquery-tablesorter' );
-
-                                       // Merge and extend
-                                       config = $.extend( {}, $.tablesorter.defaultOptions, settings );
-
-                                       // Save the settings where they read
-                                       $.data( table, 'tablesorter', { config: config } );
-
-                                       // Get the CSS class names, could be done elsewhere
-                                       sortCSS = [ config.cssAsc, config.cssDesc ];
-                                       // Messages tell the the user what the *next* state will be
-                                       // so are in reverse order to the CSS classes.
-                                       sortMsg = [ mw.msg( 'sort-descending' ), mw.msg( 'sort-ascending' ) ];
-
-                                       // Build headers
-                                       $headers = buildHeaders( table, sortMsg );
-
-                                       // Grab and process locale settings.
-                                       buildTransformTable();
-                                       buildDateTable();
-
-                                       // Precaching regexps can bring 10 fold
-                                       // performance improvements in some browsers.
-                                       cacheRegexs();
-
-                                       function setupForFirstSort() {
-                                               firstTime = false;
-
-                                               // Defer buildCollationTable to first sort. As user and site scripts
-                                               // may customize tableSorterCollation but load after $.ready(), other
-                                               // scripts may call .tablesorter() before they have done the
-                                               // tableSorterCollation customizations.
-                                               buildCollationTable();
-
-                                               // Legacy fix of .sortbottoms
-                                               // Wrap them inside a tfoot (because that's what they actually want to be)
-                                               // and put the <tfoot> at the end of the <table>
-                                               var $tfoot,
-                                                       $sortbottoms = $table.find( '> tbody > tr.sortbottom' );
-                                               if ( $sortbottoms.length ) {
-                                                       $tfoot = $table.children( 'tfoot' );
-                                                       if ( $tfoot.length ) {
-                                                               $tfoot.eq( 0 ).prepend( $sortbottoms );
-                                                       } else {
-                                                               $table.append( $( '<tfoot>' ).append( $sortbottoms ) );
-                                                       }
-                                               }
+                               // Merge and extend
+                               config = $.extend( {}, $.tablesorter.defaultOptions, settings );
 
-                                               explodeRowspans( $table );
-                                               manageColspans( $table );
+                               // Save the settings where they read
+                               $.data( table, 'tablesorter', { config: config } );
 
-                                               // Try to auto detect column type, and store in tables config
-                                               config.parsers = buildParserCache( table, $headers );
-                                       }
+                               // Get the CSS class names, could be done elsewhere
+                               sortCSS = [ config.cssAsc, config.cssDesc ];
+                               // Messages tell the the user what the *next* state will be
+                               // so are in reverse order to the CSS classes.
+                               sortMsg = [ mw.msg( 'sort-descending' ), mw.msg( 'sort-ascending' ) ];
 
-                                       // Apply event handling to headers
-                                       // this is too big, perhaps break it out?
-                                       $headers.on( 'keypress click', function ( e ) {
-                                               var cell, $cell, columns, newSortList, i,
-                                                       totalRows,
-                                                       j, s, o;
-
-                                               if ( e.type === 'click' && e.target.nodeName.toLowerCase() === 'a' ) {
-                                                       // The user clicked on a link inside a table header.
-                                                       // Do nothing and let the default link click action continue.
-                                                       return true;
-                                               }
+                               // Build headers
+                               $headers = buildHeaders( table, sortMsg );
 
-                                               if ( e.type === 'keypress' && e.which !== 13 ) {
-                                                       // Only handle keypresses on the "Enter" key.
-                                                       return true;
-                                               }
+                               // Grab and process locale settings.
+                               buildTransformTable();
+                               buildDateTable();
 
-                                               if ( firstTime ) {
-                                                       setupForFirstSort();
+                               // Precaching regexps can bring 10 fold
+                               // performance improvements in some browsers.
+                               cacheRegexs();
+
+                               function setupForFirstSort() {
+                                       var $tfoot, $sortbottoms;
+
+                                       firstTime = false;
+
+                                       // Defer buildCollationTable to first sort. As user and site scripts
+                                       // may customize tableSorterCollation but load after $.ready(), other
+                                       // scripts may call .tablesorter() before they have done the
+                                       // tableSorterCollation customizations.
+                                       buildCollationTable();
+
+                                       // Legacy fix of .sortbottoms
+                                       // Wrap them inside a tfoot (because that's what they actually want to be)
+                                       // and put the <tfoot> at the end of the <table>
+                                       $sortbottoms = $table.find( '> tbody > tr.sortbottom' );
+                                       if ( $sortbottoms.length ) {
+                                               $tfoot = $table.children( 'tfoot' );
+                                               if ( $tfoot.length ) {
+                                                       $tfoot.eq( 0 ).prepend( $sortbottoms );
+                                               } else {
+                                                       $table.append( $( '<tfoot>' ).append( $sortbottoms ) );
                                                }
+                                       }
 
-                                               // Build the cache for the tbody cells
-                                               // to share between calculations for this sort action.
-                                               // Re-calculated each time a sort action is performed due to possiblity
-                                               // that sort values change. Shouldn't be too expensive, but if it becomes
-                                               // too slow an event based system should be implemented somehow where
-                                               // cells get event .change() and bubbles up to the <table> here
-                                               cache = buildCache( table );
-
-                                               totalRows = ( $table[ 0 ].tBodies[ 0 ] && $table[ 0 ].tBodies[ 0 ].rows.length ) || 0;
-                                               if ( totalRows > 0 ) {
-                                                       cell = this;
-                                                       $cell = $( cell );
-
-                                                       // Get current column sort order
-                                                       $cell.data( {
-                                                               order: $cell.data( 'count' ) % 2,
-                                                               count: $cell.data( 'count' ) + 1
-                                                       } );
+                                       explodeRowspans( $table );
+                                       manageColspans( $table );
 
-                                                       cell = this;
-                                                       // Get current column index
-                                                       columns = config.headerToColumns[ $cell.data( 'headerIndex' ) ];
-                                                       newSortList = $.map( columns, function ( c ) {
-                                                               // jQuery "helpfully" flattens the arrays...
-                                                               return [ [ c, $cell.data( 'order' ) ] ];
-                                                       } );
-                                                       // Index of first column belonging to this header
-                                                       i = columns[ 0 ];
+                                       // Try to auto detect column type, and store in tables config
+                                       config.parsers = buildParserCache( table, $headers );
+                               }
 
-                                                       if ( !e[ config.sortMultiSortKey ] ) {
-                                                               // User only wants to sort on one column set
-                                                               // Flush the sort list and add new columns
-                                                               config.sortList = newSortList;
-                                                       } else {
-                                                               // Multi column sorting
-                                                               // It is not possible for one column to belong to multiple headers,
-                                                               // so this is okay - we don't need to check for every value in the columns array
-                                                               if ( isValueInArray( i, config.sortList ) ) {
-                                                                       // The user has clicked on an already sorted column.
-                                                                       // Reverse the sorting direction for all tables.
-                                                                       for ( j = 0; j < config.sortList.length; j++ ) {
-                                                                               s = config.sortList[ j ];
-                                                                               o = config.headerList[ config.columnToHeader[ s[ 0 ] ] ];
-                                                                               if ( isValueInArray( s[ 0 ], newSortList ) ) {
-                                                                                       $( o ).data( 'count', s[ 1 ] + 1 );
-                                                                                       s[ 1 ] = $( o ).data( 'count' ) % 2;
-                                                                               }
+                               // Apply event handling to headers
+                               // this is too big, perhaps break it out?
+                               $headers.on( 'keypress click', function ( e ) {
+                                       var cell, $cell, columns, newSortList, i,
+                                               totalRows,
+                                               j, s, o;
+
+                                       if ( e.type === 'click' && e.target.nodeName.toLowerCase() === 'a' ) {
+                                               // The user clicked on a link inside a table header.
+                                               // Do nothing and let the default link click action continue.
+                                               return true;
+                                       }
+
+                                       if ( e.type === 'keypress' && e.which !== 13 ) {
+                                               // Only handle keypresses on the "Enter" key.
+                                               return true;
+                                       }
+
+                                       if ( firstTime ) {
+                                               setupForFirstSort();
+                                       }
+
+                                       // Build the cache for the tbody cells
+                                       // to share between calculations for this sort action.
+                                       // Re-calculated each time a sort action is performed due to possiblity
+                                       // that sort values change. Shouldn't be too expensive, but if it becomes
+                                       // too slow an event based system should be implemented somehow where
+                                       // cells get event .change() and bubbles up to the <table> here
+                                       cache = buildCache( table );
+
+                                       totalRows = ( $table[ 0 ].tBodies[ 0 ] && $table[ 0 ].tBodies[ 0 ].rows.length ) || 0;
+                                       if ( totalRows > 0 ) {
+                                               cell = this;
+                                               $cell = $( cell );
+
+                                               // Get current column sort order
+                                               $cell.data( {
+                                                       order: $cell.data( 'count' ) % 2,
+                                                       count: $cell.data( 'count' ) + 1
+                                               } );
+
+                                               cell = this;
+                                               // Get current column index
+                                               columns = config.headerToColumns[ $cell.data( 'headerIndex' ) ];
+                                               newSortList = $.map( columns, function ( c ) {
+                                                       // jQuery "helpfully" flattens the arrays...
+                                                       return [ [ c, $cell.data( 'order' ) ] ];
+                                               } );
+                                               // Index of first column belonging to this header
+                                               i = columns[ 0 ];
+
+                                               if ( !e[ config.sortMultiSortKey ] ) {
+                                                       // User only wants to sort on one column set
+                                                       // Flush the sort list and add new columns
+                                                       config.sortList = newSortList;
+                                               } else {
+                                                       // Multi column sorting
+                                                       // It is not possible for one column to belong to multiple headers,
+                                                       // so this is okay - we don't need to check for every value in the columns array
+                                                       if ( isValueInArray( i, config.sortList ) ) {
+                                                               // The user has clicked on an already sorted column.
+                                                               // Reverse the sorting direction for all tables.
+                                                               for ( j = 0; j < config.sortList.length; j++ ) {
+                                                                       s = config.sortList[ j ];
+                                                                       o = config.headerList[ config.columnToHeader[ s[ 0 ] ] ];
+                                                                       if ( isValueInArray( s[ 0 ], newSortList ) ) {
+                                                                               $( o ).data( 'count', s[ 1 ] + 1 );
+                                                                               s[ 1 ] = $( o ).data( 'count' ) % 2;
                                                                        }
-                                                               } else {
-                                                                       // Add columns to sort list array
-                                                                       config.sortList = config.sortList.concat( newSortList );
                                                                }
+                                                       } else {
+                                                               // Add columns to sort list array
+                                                               config.sortList = config.sortList.concat( newSortList );
                                                        }
+                                               }
 
-                                                       // Reset order/counts of cells not affected by sorting
-                                                       setHeadersOrder( $headers, config.sortList, config.headerToColumns );
+                                               // Reset order/counts of cells not affected by sorting
+                                               setHeadersOrder( $headers, config.sortList, config.headerToColumns );
 
-                                                       // Set CSS for headers
-                                                       setHeadersCss( $table[ 0 ], $headers, config.sortList, sortCSS, sortMsg, config.columnToHeader );
-                                                       appendToTable(
-                                                               $table[ 0 ], multisort( $table[ 0 ], config.sortList, cache )
-                                                       );
+                                               // Set CSS for headers
+                                               setHeadersCss( $table[ 0 ], $headers, config.sortList, sortCSS, sortMsg, config.columnToHeader );
+                                               appendToTable(
+                                                       $table[ 0 ], multisort( $table[ 0 ], config.sortList, cache )
+                                               );
 
-                                                       // Stop normal event by returning false
-                                                       return false;
-                                               }
+                                               // Stop normal event by returning false
+                                               return false;
+                                       }
 
-                                       // Cancel selection
-                                       } ).mousedown( function () {
-                                               if ( config.cancelSelection ) {
-                                                       this.onselectstart = function () {
-                                                               return false;
-                                                       };
+                               // Cancel selection
+                               } ).mousedown( function () {
+                                       if ( config.cancelSelection ) {
+                                               this.onselectstart = function () {
                                                        return false;
-                                               }
-                                       } );
+                                               };
+                                               return false;
+                                       }
+                               } );
 
-                                       /**
-                                        * Sorts the table. If no sorting is specified by passing a list of sort
-                                        * objects, the table is sorted according to the initial sorting order.
-                                        * Passing an empty array will reset sorting (basically just reset the headers
-                                        * making the table appear unsorted).
-                                        *
-                                        * @param {Array} [sortList] List of sort objects.
-                                        */
-                                       $table.data( 'tablesorter' ).sort = function ( sortList ) {
-
-                                               if ( firstTime ) {
-                                                       setupForFirstSort();
-                                               }
+                               /**
+                                * Sorts the table. If no sorting is specified by passing a list of sort
+                                * objects, the table is sorted according to the initial sorting order.
+                                * Passing an empty array will reset sorting (basically just reset the headers
+                                * making the table appear unsorted).
+                                *
+                                * @param {Array} [sortList] List of sort objects.
+                                */
+                               $table.data( 'tablesorter' ).sort = function ( sortList ) {
+
+                                       if ( firstTime ) {
+                                               setupForFirstSort();
+                                       }
 
-                                               if ( sortList === undefined ) {
-                                                       sortList = config.sortList;
-                                               } else if ( sortList.length > 0 ) {
-                                                       sortList = convertSortList( sortList );
-                                               }
+                                       if ( sortList === undefined ) {
+                                               sortList = config.sortList;
+                                       } else if ( sortList.length > 0 ) {
+                                               sortList = convertSortList( sortList );
+                                       }
 
-                                               // Set each column's sort count to be able to determine the correct sort
-                                               // order when clicking on a header cell the next time
-                                               setHeadersOrder( $headers, sortList, config.headerToColumns );
+                                       // Set each column's sort count to be able to determine the correct sort
+                                       // order when clicking on a header cell the next time
+                                       setHeadersOrder( $headers, sortList, config.headerToColumns );
 
-                                               // re-build the cache for the tbody cells
-                                               cache = buildCache( table );
+                                       // re-build the cache for the tbody cells
+                                       cache = buildCache( table );
 
-                                               // set css for headers
-                                               setHeadersCss( table, $headers, sortList, sortCSS, sortMsg, config.columnToHeader );
+                                       // set css for headers
+                                       setHeadersCss( table, $headers, sortList, sortCSS, sortMsg, config.columnToHeader );
 
-                                               // sort the table and append it to the dom
-                                               appendToTable( table, multisort( table, sortList, cache ) );
-                                       };
+                                       // sort the table and append it to the dom
+                                       appendToTable( table, multisort( table, sortList, cache ) );
+                               };
 
-                                       // sort initially
-                                       if ( config.sortList.length > 0 ) {
-                                               config.sortList = convertSortList( config.sortList );
-                                               $table.data( 'tablesorter' ).sort();
-                                       }
+                               // sort initially
+                               if ( config.sortList.length > 0 ) {
+                                       config.sortList = convertSortList( config.sortList );
+                                       $table.data( 'tablesorter' ).sort();
+                               }
 
-                               } );
-                       },
+                       } );
+               },
 
-                       addParser: function ( parser ) {
-                               if ( !getParserById( parser.id ) ) {
-                                       parsers.push( parser );
-                               }
-                       },
-
-                       formatDigit: function ( s ) {
-                               var out, c, p, i;
-                               if ( ts.transformTable !== false ) {
-                                       out = '';
-                                       for ( p = 0; p < s.length; p++ ) {
-                                               c = s.charAt( p );
-                                               if ( c in ts.transformTable ) {
-                                                       out += ts.transformTable[ c ];
-                                               } else {
-                                                       out += c;
-                                               }
+               addParser: function ( parser ) {
+                       if ( !getParserById( parser.id ) ) {
+                               parsers.push( parser );
+                       }
+               },
+
+               formatDigit: function ( s ) {
+                       var out, c, p, i;
+                       if ( ts.transformTable !== false ) {
+                               out = '';
+                               for ( p = 0; p < s.length; p++ ) {
+                                       c = s.charAt( p );
+                                       if ( c in ts.transformTable ) {
+                                               out += ts.transformTable[ c ];
+                                       } else {
+                                               out += c;
                                        }
-                                       s = out;
                                }
-                               i = parseFloat( s.replace( /[, ]/g, '' ).replace( '\u2212', '-' ) );
-                               return isNaN( i ) ? 0 : i;
-                       },
+                               s = out;
+                       }
+                       i = parseFloat( s.replace( /[, ]/g, '' ).replace( '\u2212', '-' ) );
+                       return isNaN( i ) ? 0 : i;
+               },
 
-                       formatFloat: function ( s ) {
-                               var i = parseFloat( s );
-                               return isNaN( i ) ? 0 : i;
-                       },
+               formatFloat: function ( s ) {
+                       var i = parseFloat( s );
+                       return isNaN( i ) ? 0 : i;
+               },
 
-                       formatInt: function ( s ) {
-                               var i = parseInt( s, 10 );
-                               return isNaN( i ) ? 0 : i;
-                       },
+               formatInt: function ( s ) {
+                       var i = parseInt( s, 10 );
+                       return isNaN( i ) ? 0 : i;
+               },
 
-                       clearTableBody: function ( table ) {
-                               $( table.tBodies[ 0 ] ).empty();
-                       },
+               clearTableBody: function ( table ) {
+                       $( table.tBodies[ 0 ] ).empty();
+               },
 
-                       getParser: function ( id ) {
-                               buildTransformTable();
-                               buildDateTable();
-                               cacheRegexs();
-                               buildCollationTable();
+               getParser: function ( id ) {
+                       buildTransformTable();
+                       buildDateTable();
+                       cacheRegexs();
+                       buildCollationTable();
 
-                               return getParserById( id );
-                       },
+                       return getParserById( id );
+               },
 
-                       getParsers: function () {  // for table diagnosis
-                               return parsers;
-                       }
-               };
+               getParsers: function () {  // for table diagnosis
+                       return parsers;
+               }
+       };
 
        // Shortcut
        ts = $.tablesorter;
                        return true;
                },
                format: function ( s ) {
+                       var tsc;
                        s = $.trim( s.toLowerCase() );
                        if ( ts.collationRegex ) {
-                               var tsc = ts.collationTable;
+                               tsc = ts.collationTable;
                                s = s.replace( ts.collationRegex, function ( match ) {
                                        var r = tsc[ match ] ? tsc[ match ] : tsc[ match.toUpperCase() ];
                                        return r.toLowerCase();
                                if ( !matches ) {
                                        return $.tablesorter.formatFloat( 0 );
                                }
-                               isodate = new Date( matches[ 2 ]  + '/' + matches[ 3 ] + '/' + matches[ 1 ] );
+                               isodate = new Date( matches[ 2 ] + '/' + matches[ 3 ] + '/' + matches[ 1 ] );
                        } else {
                                matches = s.match( ts.rgx.isoDate[ 0 ] );
                                if ( !matches ) {
index 5e93ba6..c897302 100644 (file)
 
                /**
                 * Helper function to get an IE TextRange object for an element
+                *
+                * @param {HTMLElement} element
+                * @return {TextRange}
                 */
-               function rangeForElementIE( e ) {
-                       if ( e.nodeName.toLowerCase() === 'input' ) {
-                               return e.createTextRange();
+               function rangeForElementIE( element ) {
+                       var sel;
+                       if ( element.nodeName.toLowerCase() === 'input' ) {
+                               return element.createTextRange();
                        } else {
-                               var sel = document.body.createTextRange();
-                               sel.moveToElementText( e );
+                               sel = document.body.createTextRange();
+                               sel.moveToElementText( element );
                                return sel;
                        }
                }
@@ -47,6 +51,8 @@
                 * Helper function for IE for activating the textarea. Called only in the
                 * IE-specific code paths below; makes use of IE-specific non-standard
                 * function setActive() if possible to avoid screen flicker.
+                *
+                * @param {HTMLElement} element
                 */
                function activateElementOnIE( element ) {
                        if ( element.setActive ) {
                fn = {
                        /**
                         * Get the contents of the textarea
+                        *
+                        * @return {string}
                         */
                        getContents: function () {
                                return this.val();
                        },
                        /**
                         * Set the contents of the textarea, replacing anything that was there before
+                        *
+                        * @param {string} content
                         */
                        setContents: function ( content ) {
                                this.val( content );
@@ -72,6 +82,8 @@
                        /**
                         * Get the currently selected text in this textarea. Will focus the textarea
                         * in some browsers (IE/Opera)
+                        *
+                        * @return {string}
                         */
                        getSelection: function () {
                                var retval, range,
                         * Inserts text at the beginning and end of a text selection, optionally
                         * inserting text at the caret when selection is empty.
                         *
+                        * @param {Object} options Options
                         * FIXME document the options parameters
+                        * @return {jQuery}
                         */
                        encapsulateSelection: function ( options ) {
                                return this.each( function () {
                                         * Do the splitlines stuff.
                                         *
                                         * Wrap each line of the selected text with pre and post
+                                        *
+                                        * @param {string} selText Selected text
+                                        * @param {string} pre Text before
+                                        * @param {string} post Text after
+                                        * @return {string} Wrapped text
                                         */
                                        function doSplitLines( selText, pre, post ) {
                                                var i,
                         *
                         * Will focus the textarea in some browsers (IE/Opera)
                         *
+                        * @param {Object} options Options
                         * FIXME document the options parameters
+                        * @return {number} Position
                         */
                        getCaretPosition: function ( options ) {
                                function getCaret( e ) {
                                        var caretPos = 0,
                                                endPos = 0,
                                                preText, rawPreText, periText,
-                                               rawPeriText, postText, rawPostText,
+                                               rawPeriText, postText,
                                                // IE Support
                                                preFinished,
                                                periFinished,
                                                // Load the text values we need to compare
                                                preText = rawPreText = preRange.text;
                                                periText = rawPeriText = periRange.text;
-                                               postText = rawPostText = postRange.text;
+                                               postText = postRange.text;
 
                                                /*
                                                 * Check each range for trimmed newlines by shrinking the range by 1
                                                                        postFinished = true;
                                                                } else {
                                                                        postRange.moveEnd( 'character', -1 );
-                                                                       if ( postRange.text === postText ) {
-                                                                               rawPostText += '\r\n';
-                                                                       } else {
+                                                                       if ( postRange.text !== postText ) {
                                                                                postFinished = true;
                                                                        }
                                                                }
                                return getCaret( this.get( 0 ) );
                        },
                        /**
+                        * @param {Object} options options
                         * FIXME document the options parameters
+                        * @return {jQuery}
                         */
                        setSelection: function ( options ) {
                                return this.each( function () {
                         * Scroll a textarea to the current cursor position. You can set the cursor
                         * position with setSelection()
                         *
-                        * @param {boolean} options Whether to force a scroll even if the caret position
-                        *  is already visible. Defaults to false
-                        *
-                        * FIXME document the options parameters (function body suggests options.force is a boolean, not options itself)
+                        * @param {Object} options options
+                        * @cfg {boolean} [force=false] Whether to force a scroll even if the caret position
+                        *  is already visible.
+                        * FIXME document the options parameters
+                        * @return {jQuery}
                         */
                        scrollToCaretPosition: function ( options ) {
                                function getLineLength( e ) {
diff --git a/resources/src/json-skip.js b/resources/src/json-skip.js
deleted file mode 100644 (file)
index 0a1e1c2..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-/*!
- * Skip function for json2.js.
- */
-return !!( window.JSON && JSON.stringify && JSON.parse );
index 6c63957..c8d3fad 100644 (file)
@@ -1,6 +1,7 @@
 /*!
  * Scripts for pre-emptive edit preparing on action=edit
  */
+/* eslint-disable no-use-before-define */
 ( function ( mw, $ ) {
        if ( !mw.config.get( 'wgAjaxEditStash' ) ) {
                return;
                        if (
                                // Reverts may involve use (undo) links; stash as they review the diff.
                                // Since the form has a pre-filled summary, stash the edit immediately.
-                               mw.util.getParamValue( 'undo' ) !== null
+                               mw.util.getParamValue( 'undo' ) !== null ||
                                // Pressing "show changes" and "preview" also signify that the user will
                                // probably save the page soon
-                               || $.inArray( $form.find( '#mw-edit-mode' ).val(), [ 'preview', 'diff' ] ) > -1
+                               $.inArray( $form.find( '#mw-edit-mode' ).val(), [ 'preview', 'diff' ] ) > -1
                        ) {
                                checkStash();
                        }
index 077d5e3..b3b0af2 100644 (file)
@@ -10,6 +10,7 @@ jQuery( function ( $ ) {
         * @ignore
         * @context {Element} input
         * @param {jQuery.Event} e
+        * @return {boolean} False to cancel the default event
         */
        function updateDiffRadios() {
                var nextState = 'before',
index 2be29f0..7439754 100644 (file)
@@ -4,11 +4,12 @@
 ( function ( mw, $ ) {
        $( function () {
                mw.util.$content.dblclick( function ( e ) {
+                       var $a;
                        // Recheck preference so extensions can do a hack to disable this code.
                        if ( parseInt( mw.user.options.get( 'editondblclick' ), 10 ) ) {
                                e.preventDefault();
                                // Trigger native HTMLElement click instead of opening URL (bug 43052)
-                               var $a = $( '#ca-edit a' );
+                               $a = $( '#ca-edit a' );
                                // Not every page has an edit link (bug 57713)
                                if ( $a.length ) {
                                        $a.get( 0 ).click();
index 29a5a79..39a122d 100644 (file)
@@ -28,7 +28,7 @@
                }
 
                // Note that this will update the hash in a modern browser, retaining back behaviour
-               history.replaceState( /*data=*/ history.state, /*title=*/ document.title, /*url=*/ canonical );
+               history.replaceState( /* data= */ history.state, /* title= */ document.title, /* url= */ canonical );
                if ( shouldChangeFragment ) {
                        // Specification for history.replaceState() doesn't require browser to scroll,
                        // so scroll to be sure (see also T110501). Support for IE9 and IE10.
index a4c911a..e136211 100644 (file)
@@ -3,7 +3,6 @@
  */
 
 mediaWiki.language.convertGrammar = function ( word, form ) {
-       /*jshint onecase:true */
        var grammarForms = mediaWiki.language.getData( 'ga', 'grammarForms' );
        if ( grammarForms && grammarForms[ form ] ) {
                return grammarForms[ form ][ word ];
index 945f02f..5bf8c4d 100644 (file)
@@ -21,7 +21,7 @@ mediaWiki.language.convertGrammar = function ( word, form ) {
                        }
 
                        // Add a hyphen (maqaf) before numbers and non-Hebrew letters
-                       if ( word.slice( 0, 1 ) < 'א' ||  word.slice( 0, 1 ) > 'ת' ) {
+                       if ( word.slice( 0, 1 ) < 'א' || word.slice( 0, 1 ) > 'ת' ) {
                                word = '־' + word;
                        }
        }
index 935d466..bb6f61d 100644 (file)
@@ -3,7 +3,6 @@
  */
 
 mediaWiki.language.convertGrammar = function ( word, form ) {
-       /*jshint onecase:true */
        var grammarForms = mediaWiki.language.getData( 'hy', 'grammarForms' );
        if ( grammarForms && grammarForms[ form ] ) {
                return grammarForms[ form ][ word ];
index cf3ef79..fc2af3d 100644 (file)
  */
 ( function ( mw, $ ) {
 
-/**
- * @class mw.language
- */
-$.extend( mw.language, {
-
        /**
-        * Process the PLURAL template substitution
-        *
-        * @private
-        * @param {Object} template Template object
-        * @param {string} template.title
-        * @param {Array} template.parameters
-        * @return {string}
+        * @class mw.language
         */
-       procPLURAL: function ( template ) {
-               if ( template.title && template.parameters && mw.language.convertPlural ) {
-                       // Check if we have forms to replace
-                       if ( template.parameters.length === 0 ) {
-                               return '';
+       $.extend( mw.language, {
+
+               /**
+                * Process the PLURAL template substitution
+                *
+                * @private
+                * @param {Object} template Template object
+                * @param {string} template.title
+                * @param {Array} template.parameters
+                * @return {string}
+                */
+               procPLURAL: function ( template ) {
+                       var count;
+                       if ( template.title && template.parameters && mw.language.convertPlural ) {
+                               // Check if we have forms to replace
+                               if ( template.parameters.length === 0 ) {
+                                       return '';
+                               }
+                               // Restore the count into a Number ( if it got converted earlier )
+                               count = mw.language.convertNumber( template.title, true );
+                               // Do convertPlural call
+                               return mw.language.convertPlural( parseInt( count, 10 ), template.parameters );
                        }
-                       // Restore the count into a Number ( if it got converted earlier )
-                       var count = mw.language.convertNumber( template.title, true );
-                       // Do convertPlural call
-                       return mw.language.convertPlural( parseInt( count, 10 ), template.parameters );
-               }
-               // Could not process plural return first form or nothing
-               if ( template.parameters[ 0 ] ) {
-                       return template.parameters[ 0 ];
-               }
-               return '';
-       },
+                       // Could not process plural return first form or nothing
+                       if ( template.parameters[ 0 ] ) {
+                               return template.parameters[ 0 ];
+                       }
+                       return '';
+               },
 
-       /**
-        * Plural form transformations, needed for some languages.
-        *
-        * @param {number} count Non-localized quantifier
-        * @param {Array} forms List of plural forms
-        * @param {Object} [explicitPluralForms] List of explicit plural forms
-        * @return {string} Correct form for quantifier in this language
-        */
-       convertPlural: function ( count, forms, explicitPluralForms ) {
-               var pluralRules,
-                       pluralFormIndex = 0;
+               /**
+                * Plural form transformations, needed for some languages.
+                *
+                * @param {number} count Non-localized quantifier
+                * @param {Array} forms List of plural forms
+                * @param {Object} [explicitPluralForms] List of explicit plural forms
+                * @return {string} Correct form for quantifier in this language
+                */
+               convertPlural: function ( count, forms, explicitPluralForms ) {
+                       var pluralRules,
+                               pluralFormIndex = 0;
 
-               if ( explicitPluralForms && ( explicitPluralForms[ count ] !== undefined ) ) {
-                       return explicitPluralForms[ count ];
-               }
+                       if ( explicitPluralForms && ( explicitPluralForms[ count ] !== undefined ) ) {
+                               return explicitPluralForms[ count ];
+                       }
 
-               if ( !forms || forms.length === 0 ) {
-                       return '';
-               }
+                       if ( !forms || forms.length === 0 ) {
+                               return '';
+                       }
 
-               pluralRules = mw.language.getData( mw.config.get( 'wgUserLanguage' ), 'pluralRules' );
-               if ( !pluralRules ) {
-                       // default fallback.
-                       return ( count === 1 ) ? forms[ 0 ] : forms[ 1 ];
-               }
-               pluralFormIndex = mw.cldr.getPluralForm( count, pluralRules );
-               pluralFormIndex = Math.min( pluralFormIndex, forms.length - 1 );
-               return forms[ pluralFormIndex ];
-       },
+                       pluralRules = mw.language.getData( mw.config.get( 'wgUserLanguage' ), 'pluralRules' );
+                       if ( !pluralRules ) {
+                               // default fallback.
+                               return ( count === 1 ) ? forms[ 0 ] : forms[ 1 ];
+                       }
+                       pluralFormIndex = mw.cldr.getPluralForm( count, pluralRules );
+                       pluralFormIndex = Math.min( pluralFormIndex, forms.length - 1 );
+                       return forms[ pluralFormIndex ];
+               },
 
-       /**
-        * Pads an array to a specific length by copying the last one element.
-        *
-        * @private
-        * @param {Array} forms Number of forms given to convertPlural
-        * @param {number} count Number of forms required
-        * @return {Array} Padded array of forms
-        */
-       preConvertPlural: function ( forms, count ) {
-               while ( forms.length < count ) {
-                       forms.push( forms[ forms.length - 1 ] );
-               }
-               return forms;
-       },
+               /**
+                * Pads an array to a specific length by copying the last one element.
+                *
+                * @private
+                * @param {Array} forms Number of forms given to convertPlural
+                * @param {number} count Number of forms required
+                * @return {Array} Padded array of forms
+                */
+               preConvertPlural: function ( forms, count ) {
+                       while ( forms.length < count ) {
+                               forms.push( forms[ forms.length - 1 ] );
+                       }
+                       return forms;
+               },
 
-       /**
-        * Provides an alternative text depending on specified gender.
-        *
-        * Usage in message text: `{{gender:[gender|user object]|masculine|feminine|neutral}}`.
-        * If second or third parameter are not specified, masculine is used.
-        *
-        * These details may be overridden per language.
-        *
-        * @param {string} gender 'male', 'female', or anything else for neutral.
-        * @param {Array} forms List of gender forms
-        * @return {string}
-        */
-       gender: function ( gender, forms ) {
-               if ( !forms || forms.length === 0 ) {
-                       return '';
-               }
-               forms = mw.language.preConvertPlural( forms, 2 );
-               if ( gender === 'male' ) {
-                       return forms[ 0 ];
-               }
-               if ( gender === 'female' ) {
-                       return forms[ 1 ];
-               }
-               return ( forms.length === 3 ) ? forms[ 2 ] : forms[ 0 ];
-       },
+               /**
+                * Provides an alternative text depending on specified gender.
+                *
+                * Usage in message text: `{{gender:[gender|user object]|masculine|feminine|neutral}}`.
+                * If second or third parameter are not specified, masculine is used.
+                *
+                * These details may be overridden per language.
+                *
+                * @param {string} gender 'male', 'female', or anything else for neutral.
+                * @param {Array} forms List of gender forms
+                * @return {string}
+                */
+               gender: function ( gender, forms ) {
+                       if ( !forms || forms.length === 0 ) {
+                               return '';
+                       }
+                       forms = mw.language.preConvertPlural( forms, 2 );
+                       if ( gender === 'male' ) {
+                               return forms[ 0 ];
+                       }
+                       if ( gender === 'female' ) {
+                               return forms[ 1 ];
+                       }
+                       return ( forms.length === 3 ) ? forms[ 2 ] : forms[ 0 ];
+               },
 
-       /**
-        * Grammatical transformations, needed for inflected languages.
-        * Invoked by putting `{{grammar:form|word}}` in a message.
-        *
-        * The rules can be defined in $wgGrammarForms global or computed
-        * dynamically by overriding this method per language.
-        *
-        * @param {string} word
-        * @param {string} form
-        * @return {string}
-        */
-       convertGrammar: function ( word, form ) {
-               var grammarForms = mw.language.getData( mw.config.get( 'wgUserLanguage' ), 'grammarForms' );
-               if ( grammarForms && grammarForms[ form ] ) {
-                       return grammarForms[ form ][ word ] || word;
-               }
-               return word;
-       },
+               /**
+                * Grammatical transformations, needed for inflected languages.
+                * Invoked by putting `{{grammar:form|word}}` in a message.
+                *
+                * The rules can be defined in $wgGrammarForms global or computed
+                * dynamically by overriding this method per language.
+                *
+                * @param {string} word
+                * @param {string} form
+                * @return {string}
+                */
+               convertGrammar: function ( word, form ) {
+                       var grammarForms = mw.language.getData( mw.config.get( 'wgUserLanguage' ), 'grammarForms' );
+                       if ( grammarForms && grammarForms[ form ] ) {
+                               return grammarForms[ form ][ word ] || word;
+                       }
+                       return word;
+               },
 
-       /**
-        * Turn a list of string into a simple list using commas and 'and'.
-        *
-        * See Language::listToText in languages/Language.php
-        *
-        * @param {string[]} list
-        * @return {string}
-        */
-       listToText: function ( list ) {
-               var text = '',
-                       i = 0;
+               /**
+                * Turn a list of string into a simple list using commas and 'and'.
+                *
+                * See Language::listToText in languages/Language.php
+                *
+                * @param {string[]} list
+                * @return {string}
+                */
+               listToText: function ( list ) {
+                       var text = '',
+                               i = 0;
 
-               for ( ; i < list.length; i++ ) {
-                       text += list[ i ];
-                       if ( list.length - 2 === i ) {
-                               text += mw.msg( 'and' ) + mw.msg( 'word-separator' );
-                       } else if ( list.length - 1 !== i ) {
-                               text += mw.msg( 'comma-separator' );
+                       for ( ; i < list.length; i++ ) {
+                               text += list[ i ];
+                               if ( list.length - 2 === i ) {
+                                       text += mw.msg( 'and' ) + mw.msg( 'word-separator' );
+                               } else if ( list.length - 1 !== i ) {
+                                       text += mw.msg( 'comma-separator' );
+                               }
                        }
-               }
-               return text;
-       },
+                       return text;
+               },
 
-       setSpecialCharacters: function ( data ) {
-               this.specialCharacters = data;
-       }
-} );
+               setSpecialCharacters: function ( data ) {
+                       this.specialCharacters = data;
+               }
+       } );
 
 }( mediaWiki, jQuery ) );
index 268985f..1192650 100644 (file)
         * @return {string}
         */
        function replicate( str, num ) {
+               var buf = [];
+
                if ( num <= 0 || !str ) {
                        return '';
                }
 
-               var buf = [];
                while ( num-- ) {
                        buf.push( str );
                }
         * @return {string}
         */
        function pad( text, size, ch, end ) {
+               var out, padStr;
+
                if ( !ch ) {
                        ch = '0';
                }
 
-               var out = String( text ),
-                       padStr = replicate( ch, Math.ceil( ( size - out.length ) / ch.length ) );
+               out = String( text );
+               padStr = replicate( ch, Math.ceil( ( size - out.length ) / ch.length ) );
 
                return end ? out + padStr : padStr + out;
        }
         * @return {string}
         */
        function commafyNumber( value, pattern, options ) {
-               options = options || {
-                       group: ',',
-                       decimal: '.'
-               };
-
-               if ( isNaN( value ) ) {
-                       return value;
-               }
-
                var padLength,
                        patternDigits,
                        index,
                        groupSize2 = 0,
                        pieces = [];
 
+               options = options || {
+                       group: ',',
+                       decimal: '.'
+               };
+
+               if ( isNaN( value ) ) {
+                       return value;
+               }
+
                if ( patternParts[ 1 ] ) {
                        // Pad fractional with trailing zeros
                        padLength = ( patternParts[ 1 ] && patternParts[ 1 ].lastIndexOf( '0' ) + 1 );
index 6226c90..aa49ae1 100644 (file)
 ( function ( mw, $ ) {
 
-var ProtectionForm = window.ProtectionForm = {
-       /**
-        * Set up the protection chaining interface (i.e. "unlock move permissions" checkbox)
-        * on the protection form
-        */
-       init: function () {
-               var $cell = $( '<td>' ),
-                       $row = $( '<tr>' ).append( $cell );
-
-               if ( !$( '#mwProtectSet' ).length ) {
-                       return false;
-               }
-
-               if ( mw.config.get( 'wgCascadeableLevels' ) !== undefined ) {
-                       $( 'form#mw-Protect-Form' ).submit( this.toggleUnchainedInputs.bind( ProtectionForm, true ) );
-               }
-               this.getExpirySelectors().each( function () {
-                       $( this ).change( ProtectionForm.updateExpiryList.bind( ProtectionForm, this ) );
-               } );
-               this.getExpiryInputs().each( function () {
-                       $( this ).on( 'keyup change', ProtectionForm.updateExpiry.bind( ProtectionForm, this ) );
-               } );
-               this.getLevelSelectors().each( function () {
-                       $( this ).change( ProtectionForm.updateLevels.bind( ProtectionForm, this ) );
-               } );
-
-               $( '#mwProtectSet > tbody > tr:first' ).after( $row );
-
-               // If there is only one protection type, there is nothing to chain
-               if ( $( '[id ^= mw-protect-table-]' ).length > 1 ) {
-                       $cell.append(
-                               $( '<input>' )
-                                       .attr( { id: 'mwProtectUnchained', type: 'checkbox' } )
-                                       .click( this.onChainClick.bind( this ) )
-                                       .prop( 'checked', !this.areAllTypesMatching() ),
-                               document.createTextNode( ' ' ),
-                               $( '<label>' )
-                                       .attr( 'for', 'mwProtectUnchained' )
-                                       .text( mw.msg( 'protect-unchain-permissions' ) )
-                       );
-
-                       this.toggleUnchainedInputs( !this.areAllTypesMatching() );
-               }
-
-               $( '#mwProtect-reason' ).byteLimit( 180 );
-
-               this.updateCascadeCheckbox();
-       },
-
-       /**
-        * Sets the disabled attribute on the cascade checkbox depending on the current selected levels
-        */
-       updateCascadeCheckbox: function () {
-               this.getLevelSelectors().each( function () {
-                       if ( !ProtectionForm.isCascadeableLevel( $( this ).val() ) ) {
-                               $( '#mwProtect-cascade' ).prop( { checked: false, disabled: true } );
+       var ProtectionForm = window.ProtectionForm = {
+               /**
+                * Set up the protection chaining interface (i.e. "unlock move permissions" checkbox)
+                * on the protection form
+                *
+                * @return {boolean}
+                */
+               init: function () {
+                       var $cell = $( '<td>' ),
+                               $row = $( '<tr>' ).append( $cell );
+
+                       if ( !$( '#mwProtectSet' ).length ) {
                                return false;
-                       } else {
-                               $( '#mwProtect-cascade' ).prop( 'disabled', false );
                        }
-               } );
-       },
-
-       /**
-        * Checks if a certain protection level is cascadeable.
-        *
-        * @param {string} level
-        * @return {boolean}
-        */
-       isCascadeableLevel: function ( level ) {
-               return $.inArray( level, mw.config.get( 'wgCascadeableLevels' ) ) !== -1;
-       },
-
-       /**
-        * When protection levels are locked together, update the rest
-        * when one action's level changes
-        *
-        * @param {Element} source Level selector that changed
-        */
-       updateLevels: function ( source ) {
-               if ( !this.isUnchained() ) {
-                       this.setAllSelectors( source.selectedIndex );
-               }
-               this.updateCascadeCheckbox();
-       },
-
-       /**
-        * When protection levels are locked together, update the
-        * expiries when one changes
-        *
-        * @param {Element} source expiry input that changed
-        */
-
-       updateExpiry: function ( source ) {
-               if ( !this.isUnchained() ) {
+
+                       if ( mw.config.get( 'wgCascadeableLevels' ) !== undefined ) {
+                               $( 'form#mw-Protect-Form' ).submit( this.toggleUnchainedInputs.bind( ProtectionForm, true ) );
+                       }
+                       this.getExpirySelectors().each( function () {
+                               $( this ).change( ProtectionForm.updateExpiryList.bind( ProtectionForm, this ) );
+                       } );
                        this.getExpiryInputs().each( function () {
-                               this.value = source.value;
+                               $( this ).on( 'keyup change', ProtectionForm.updateExpiry.bind( ProtectionForm, this ) );
                        } );
-               }
-               if ( this.isUnchained() ) {
-                       $( '#' + source.id.replace( /^mwProtect-(\w+)-expires$/, 'mwProtectExpirySelection-$1' ) ).val( 'othertime' );
-               } else {
-                       this.getExpirySelectors().each( function () {
-                               this.value = 'othertime';
+                       this.getLevelSelectors().each( function () {
+                               $( this ).change( ProtectionForm.updateLevels.bind( ProtectionForm, this ) );
                        } );
-               }
-       },
-
-       /**
-        * When protection levels are locked together, update the
-        * expiry lists when one changes and clear the custom inputs
-        *
-        * @param {Element} source Expiry selector that changed
-        */
-       updateExpiryList: function ( source ) {
-               if ( !this.isUnchained() ) {
-                       this.getExpirySelectors().each( function () {
-                               this.value = source.value;
+
+                       $( '#mwProtectSet > tbody > tr:first' ).after( $row );
+
+                       // If there is only one protection type, there is nothing to chain
+                       if ( $( '[id ^= mw-protect-table-]' ).length > 1 ) {
+                               $cell.append(
+                                       $( '<input>' )
+                                               .attr( { id: 'mwProtectUnchained', type: 'checkbox' } )
+                                               .click( this.onChainClick.bind( this ) )
+                                               .prop( 'checked', !this.areAllTypesMatching() ),
+                                       document.createTextNode( ' ' ),
+                                       $( '<label>' )
+                                               .attr( 'for', 'mwProtectUnchained' )
+                                               .text( mw.msg( 'protect-unchain-permissions' ) )
+                               );
+
+                               this.toggleUnchainedInputs( !this.areAllTypesMatching() );
+                       }
+
+                       $( '#mwProtect-reason' ).byteLimit( 180 );
+
+                       this.updateCascadeCheckbox();
+                       return true;
+               },
+
+               /**
+                * Sets the disabled attribute on the cascade checkbox depending on the current selected levels
+                */
+               updateCascadeCheckbox: function () {
+                       this.getLevelSelectors().each( function () {
+                               if ( !ProtectionForm.isCascadeableLevel( $( this ).val() ) ) {
+                                       $( '#mwProtect-cascade' ).prop( { checked: false, disabled: true } );
+                                       return false;
+                               } else {
+                                       $( '#mwProtect-cascade' ).prop( 'disabled', false );
+                               }
                        } );
-                       this.getExpiryInputs().each( function () {
-                               this.value = '';
+               },
+
+               /**
+                * Checks if a certain protection level is cascadeable.
+                *
+                * @param {string} level
+                * @return {boolean}
+                */
+               isCascadeableLevel: function ( level ) {
+                       return $.inArray( level, mw.config.get( 'wgCascadeableLevels' ) ) !== -1;
+               },
+
+               /**
+                * When protection levels are locked together, update the rest
+                * when one action's level changes
+                *
+                * @param {Element} source Level selector that changed
+                */
+               updateLevels: function ( source ) {
+                       if ( !this.isUnchained() ) {
+                               this.setAllSelectors( source.selectedIndex );
+                       }
+                       this.updateCascadeCheckbox();
+               },
+
+               /**
+                * When protection levels are locked together, update the
+                * expiries when one changes
+                *
+                * @param {Element} source expiry input that changed
+                */
+
+               updateExpiry: function ( source ) {
+                       if ( !this.isUnchained() ) {
+                               this.getExpiryInputs().each( function () {
+                                       this.value = source.value;
+                               } );
+                       }
+                       if ( this.isUnchained() ) {
+                               $( '#' + source.id.replace( /^mwProtect-(\w+)-expires$/, 'mwProtectExpirySelection-$1' ) ).val( 'othertime' );
+                       } else {
+                               this.getExpirySelectors().each( function () {
+                                       this.value = 'othertime';
+                               } );
+                       }
+               },
+
+               /**
+                * When protection levels are locked together, update the
+                * expiry lists when one changes and clear the custom inputs
+                *
+                * @param {Element} source Expiry selector that changed
+                */
+               updateExpiryList: function ( source ) {
+                       if ( !this.isUnchained() ) {
+                               this.getExpirySelectors().each( function () {
+                                       this.value = source.value;
+                               } );
+                               this.getExpiryInputs().each( function () {
+                                       this.value = '';
+                               } );
+                       }
+               },
+
+               /**
+                * Update chain status and enable/disable various bits of the UI
+                * when the user changes the "unlock move permissions" checkbox
+                */
+               onChainClick: function () {
+                       this.toggleUnchainedInputs( this.isUnchained() );
+                       if ( !this.isUnchained() ) {
+                               this.setAllSelectors( this.getMaxLevel() );
+                       }
+                       this.updateCascadeCheckbox();
+               },
+
+               /**
+                * Returns true if the named attribute in all objects in the given array are matching
+                *
+                * @param {Object[]} objects
+                * @param {string} attrName
+                * @return {boolean}
+                */
+               matchAttribute: function ( objects, attrName ) {
+                       return $.map( objects, function ( object ) {
+                               return object[ attrName ];
+                       } ).filter( function ( item, index, a ) {
+                               return index === a.indexOf( item );
+                       } ).length === 1;
+               },
+
+               /**
+                * Are all actions protected at the same level, with the same expiry time?
+                *
+                * @return {boolean}
+                */
+               areAllTypesMatching: function () {
+                       return this.matchAttribute( this.getLevelSelectors(), 'selectedIndex' ) &&
+                               this.matchAttribute( this.getExpirySelectors(), 'selectedIndex' ) &&
+                               this.matchAttribute( this.getExpiryInputs(), 'value' );
+               },
+
+               /**
+                * Is protection chaining off?
+                *
+                * @return {boolean}
+                */
+               isUnchained: function () {
+                       var element = document.getElementById( 'mwProtectUnchained' );
+                       return element ?
+                               element.checked :
+                               true; // No control, so we need to let the user set both levels
+               },
+
+               /**
+                * Find the highest protection level in any selector
+                *
+                * @return {number}
+                */
+               getMaxLevel: function () {
+                       return Math.max.apply( Math, this.getLevelSelectors().map( function () {
+                               return this.selectedIndex;
+                       } ) );
+               },
+
+               /**
+                * Protect all actions at the specified level
+                *
+                * @param {number} index Protection level
+                */
+               setAllSelectors: function ( index ) {
+                       this.getLevelSelectors().each( function () {
+                               this.selectedIndex = index;
                        } );
+               },
+
+               /**
+                * Get a list of all protection selectors on the page
+                *
+                * @return {jQuery}
+                */
+               getLevelSelectors: function () {
+                       return $( 'select[id ^= mwProtect-level-]' );
+               },
+
+               /**
+                * Get a list of all expiry inputs on the page
+                *
+                * @return {jQuery}
+                */
+               getExpiryInputs: function () {
+                       return $( 'input[id ^= mwProtect-][id $= -expires]' );
+               },
+
+               /**
+                * Get a list of all expiry selector lists on the page
+                *
+                * @return {jQuery}
+                */
+               getExpirySelectors: function () {
+                       return $( 'select[id ^= mwProtectExpirySelection-]' );
+               },
+
+               /**
+                * Enable/disable protection selectors and expiry inputs
+                *
+                * @param {boolean} val Enable?
+                */
+               toggleUnchainedInputs: function ( val ) {
+                       var setDisabled = function () { this.disabled = !val; };
+                       this.getLevelSelectors().slice( 1 ).each( setDisabled );
+                       this.getExpiryInputs().slice( 1 ).each( setDisabled );
+                       this.getExpirySelectors().slice( 1 ).each( setDisabled );
                }
-       },
-
-       /**
-        * Update chain status and enable/disable various bits of the UI
-        * when the user changes the "unlock move permissions" checkbox
-        */
-       onChainClick: function () {
-               this.toggleUnchainedInputs( this.isUnchained() );
-               if ( !this.isUnchained() ) {
-                       this.setAllSelectors( this.getMaxLevel() );
-               }
-               this.updateCascadeCheckbox();
-       },
-
-       /**
-        * Returns true if the named attribute in all objects in the given array are matching
-        *
-        * @param {Object[]} objects
-        * @param {string} attrName
-        * @return {boolean}
-        */
-       matchAttribute: function ( objects, attrName ) {
-               return $.map( objects, function ( object ) {
-                       return object[ attrName ];
-               } ).filter( function ( item, index, a ) {
-                       return index === a.indexOf( item );
-               } ).length === 1;
-       },
-
-       /**
-        * Are all actions protected at the same level, with the same expiry time?
-        *
-        * @return {boolean}
-        */
-       areAllTypesMatching: function () {
-               return this.matchAttribute( this.getLevelSelectors(), 'selectedIndex' )
-                       && this.matchAttribute( this.getExpirySelectors(), 'selectedIndex' )
-                       && this.matchAttribute( this.getExpiryInputs(), 'value' );
-       },
-
-       /**
-        * Is protection chaining off?
-        *
-        * @return {boolean}
-        */
-       isUnchained: function () {
-               var element = document.getElementById( 'mwProtectUnchained' );
-               return element
-                       ? element.checked
-                       : true; // No control, so we need to let the user set both levels
-       },
-
-       /**
-        * Find the highest protection level in any selector
-        *
-        * @return {number}
-        */
-       getMaxLevel: function () {
-               return Math.max.apply( Math, this.getLevelSelectors().map( function () {
-                       return this.selectedIndex;
-               } ) );
-       },
-
-       /**
-        * Protect all actions at the specified level
-        *
-        * @param {number} index Protection level
-        */
-       setAllSelectors: function ( index ) {
-               this.getLevelSelectors().each( function () {
-                       this.selectedIndex = index;
-               } );
-       },
-
-       /**
-        * Get a list of all protection selectors on the page
-        *
-        * @return {jQuery}
-        */
-       getLevelSelectors: function () {
-               return $( 'select[id ^= mwProtect-level-]' );
-       },
-
-       /**
-        * Get a list of all expiry inputs on the page
-        *
-        * @return {jQuery}
-        */
-       getExpiryInputs: function () {
-               return $( 'input[id ^= mwProtect-][id $= -expires]' );
-       },
-
-       /**
-        * Get a list of all expiry selector lists on the page
-        *
-        * @return {jQuery}
-        */
-       getExpirySelectors: function () {
-               return $( 'select[id ^= mwProtectExpirySelection-]' );
-       },
-
-       /**
-        * Enable/disable protection selectors and expiry inputs
-        *
-        * @param {boolean} val Enable?
-        */
-       toggleUnchainedInputs: function ( val ) {
-               var setDisabled = function () { this.disabled = !val; };
-               this.getLevelSelectors().slice( 1 ).each( setDisabled );
-               this.getExpiryInputs().slice( 1 ).each( setDisabled );
-               this.getExpirySelectors().slice( 1 ).each( setDisabled );
-       }
-};
-
-$( ProtectionForm.init.bind( ProtectionForm ) );
+       };
+
+       $( ProtectionForm.init.bind( ProtectionForm ) );
 
 }( mediaWiki, jQuery ) );
index 38271a0..8062849 100644 (file)
 
        /**
         * @deprecated since 1.17 Use mw.loader instead. Warnings added in 1.25.
+        * @param {string} url
+        * @return {HTMLElement} Script tag
         */
        function importScriptURI( url ) {
+               var s;
                if ( loadedScripts[ url ] ) {
                        return null;
                }
                loadedScripts[ url ] = true;
-               var s = document.createElement( 'script' );
+               s = document.createElement( 'script' );
                s.setAttribute( 'src', url );
                document.getElementsByTagName( 'head' )[ 0 ].appendChild( s );
                return s;
 
        /**
         * @deprecated since 1.17 Use mw.loader instead. Warnings added in 1.25.
+        * @param {string} url
+        * @param {string} media
+        * @return {HTMLElement} Link tag
         */
        function importStylesheetURI( url, media ) {
                var l = document.createElement( 'link' );
index 68fb2aa..558fd4c 100644 (file)
@@ -1,4 +1,3 @@
-/*global OO */
 ( function ( mw, $ ) {
        /**
         * Factory for MessagePoster objects. This provides a pluggable to way to script the action
index 64cfcf5..d2015d8 100644 (file)
@@ -1,4 +1,4 @@
-/*global OO */
+/* eslint-disable no-use-before-define */
 ( function ( $, mw, OO ) {
        'use strict';
        var ApiSandbox, Util, WidgetMethods, Validators,
                                }
                        },
                        apiCheckValid: function () {
-                               var ok = this.getApiValue() !== undefined || suppressErrors;
+                               var ok = true,
+                                       pi = this.paramInfo;
+
+                               if ( !suppressErrors ) {
+                                       ok = this.getApiValue() !== undefined && !(
+                                               pi.allspecifier !== undefined &&
+                                               this.getItemsData().length > 1 &&
+                                               this.getItemsData().indexOf( pi.allspecifier ) !== -1
+                                       );
+                               }
+
                                this.setIcon( ok ? null : 'alert' );
                                this.setIconTitle( ok ? '' : mw.message( 'apisandbox-alert-field' ).plain() );
                                return $.Deferred().resolve( ok ).promise();
                                        break;
 
                                case 'limit':
-                                       widget = new OO.ui.NumberInputWidget( {
-                                               required: Util.apiBool( pi.required ),
-                                               isInteger: true
+                                       widget = new OO.ui.TextInputWidget( {
+                                               required: Util.apiBool( pi.required )
                                        } );
-                                       widget.setIcon = widget.input.setIcon.bind( widget.input );
-                                       widget.setIconTitle = widget.input.setIconTitle.bind( widget.input );
-                                       widget.getValidity = widget.input.getValidity.bind( widget.input );
-                                       widget.input.setValidation( function ( value ) {
-                                               return value === 'max' || widget.validateNumber( value );
+                                       widget.setValidation( function ( value ) {
+                                               var n, pi = this.paramInfo;
+
+                                               if ( value === 'max' ) {
+                                                       return true;
+                                               } else {
+                                                       n = +value;
+                                                       return !isNaN( n ) && isFinite( n ) &&
+                                                               // eslint-disable-next-line no-bitwise
+                                                               ( n | 0 ) === n &&
+                                                               n >= pi.min && n <= pi.apiSandboxMax;
+                                               }
                                        } );
+                                       pi.min = pi.min || 0;
+                                       pi.apiSandboxMax = mw.config.get( 'apihighlimits' ) ? pi.highmax : pi.max;
                                        widget.paramInfo = pi;
                                        $.extend( widget, WidgetMethods.textInputWidget );
-                                       widget.setRange( pi.min || 0, mw.config.get( 'apihighlimits' ) ? pi.highmax : pi.max );
                                        multiMode = 'enter';
                                        break;
 
                                                return a.data - b.data;
                                        } );
                                        if ( Util.apiBool( pi.multi ) ) {
+                                               if ( pi.allspecifier !== undefined ) {
+                                                       items.unshift( new OO.ui.MenuOptionWidget( {
+                                                               data: pi.allspecifier,
+                                                               label: mw.message( 'apisandbox-multivalue-all-namespaces', pi.allspecifier ).text()
+                                                       } ) );
+                                               }
+
                                                widget = new OO.ui.CapsuleMultiselectWidget( {
                                                        menu: { items: items }
                                                } );
                                                return new OO.ui.MenuOptionWidget( { data: String( v ), label: String( v ) } );
                                        } );
                                        if ( Util.apiBool( pi.multi ) ) {
+                                               if ( pi.allspecifier !== undefined ) {
+                                                       items.unshift( new OO.ui.MenuOptionWidget( {
+                                                               data: pi.allspecifier,
+                                                               label: mw.message( 'apisandbox-multivalue-all-values', pi.allspecifier ).text()
+                                                       } ) );
+                                               }
+
                                                widget = new OO.ui.CapsuleMultiselectWidget( {
                                                        menu: { items: items }
                                                } );
 
                /**
                 * Update the current query when the page hash changes
+                *
+                * @return {boolean} Successful
                 */
                loadFromHash: function () {
                        var params, m, re,
 
                                                $result.empty();
                                                if ( /^text\/mediawiki-api-prettyprint-wrapped(?:;|$)/.test( ct ) ) {
-                                                       data = $.parseJSON( data );
+                                                       data = JSON.parse( data );
                                                        if ( data.modules.length ) {
                                                                mw.loader.load( data.modules );
                                                        }
                                                                if ( pi.parameters[ i ].highmax !== undefined ) {
                                                                        dl.append( $( '<dd>', {
                                                                                addClass: 'info',
-                                                                               append: Util.parseHTML( mw.message(
-                                                                                       'api-help-param-limit2', pi.parameters[ i ].max, pi.parameters[ i ].highmax
-                                                                               ).parse() )
+                                                                               append: [
+                                                                                       Util.parseHTML( mw.message(
+                                                                                               'api-help-param-limit2', pi.parameters[ i ].max, pi.parameters[ i ].highmax
+                                                                                       ).parse() ),
+                                                                                       ' ',
+                                                                                       Util.parseHTML( mw.message( 'apisandbox-param-limit' ).parse() )
+                                                                               ]
                                                                        } ) );
                                                                } else {
                                                                        dl.append( $( '<dd>', {
                                                                                addClass: 'info',
-                                                                               append: Util.parseHTML( mw.message(
-                                                                                       'api-help-param-limit', pi.parameters[ i ].max
-                                                                               ).parse() )
+                                                                               append: [
+                                                                                       Util.parseHTML( mw.message(
+                                                                                               'api-help-param-limit', pi.parameters[ i ].max
+                                                                                       ).parse() ),
+                                                                                       ' ',
+                                                                                       Util.parseHTML( mw.message( 'apisandbox-param-limit' ).parse() )
+                                                                               ]
                                                                        } ) );
                                                                }
                                                                break;
index 69a2a67..3e6e684 100644 (file)
@@ -6,9 +6,10 @@
                var $tagList = $( '#mw-edittags-tag-list' );
                if ( $tagList.length ) {
                        $tagList.chosen( {
-                               /*jscs:disable requireCamelCaseOrUpperCaseIdentifiers */
+                               /* eslint-disable camelcase */
                                placeholder_text_multiple: mw.msg( 'tags-edit-chosen-placeholder' ),
                                no_results_text: mw.msg( 'tags-edit-chosen-no-results' )
+                               /* eslint-enable camelcase */
                        } );
                }
 
index dd48367..f818096 100644 (file)
@@ -5,8 +5,11 @@
  * @class mw.special.upload
  * @singleton
  */
+
+/* eslint-disable no-use-before-define */
+/* global Uint8Array */
+
 ( function ( mw, $ ) {
-       /*jshint latedef:false */
        var uploadWarning, uploadLicense,
                ajaxUploadDestCheck = mw.config.get( 'wgAjaxUploadDestCheck' ),
                $license = $( '#wpLicense' );
        $( function () {
                /**
                 * Is the FileAPI available with sufficient functionality?
+                *
+                * @return {boolean}
                 */
                function hasFileAPI() {
                        return window.FileReader !== undefined;
                        }, mw.config.get( 'wgFileCanRotate' ) ? function ( data ) {
                                try {
                                        meta = mw.libs.jpegmeta( data, file.fileName );
-                                       // jscs:disable requireCamelCaseOrUpperCaseIdentifiers, disallowDanglingUnderscores
+                                       // eslint-disable-next-line no-underscore-dangle, camelcase
                                        meta._binary_data = null;
-                                       // jscs:enable
                                } catch ( e ) {
                                        meta = null;
                                }
 
                /**
                 * Check if the file does not exceed the maximum size
+                *
+                * @param {File} file
+                * @return {boolean}
                 */
                function checkMaxUploadSize( file ) {
                        var maxSize, $error;
                if ( hasFileAPI() ) {
                        // Update thumbnail when the file selection control is updated.
                        $( '#wpUploadFile' ).change( function () {
+                               var file;
                                clearPreview();
                                if ( this.files && this.files.length ) {
                                        // Note: would need to be updated to handle multiple files.
-                                       var file = this.files[ 0 ];
+                                       file = this.files[ 0 ];
 
                                        if ( !checkMaxUploadSize( file ) ) {
                                                return;
index bb26c0f..e9fc024 100644 (file)
         *  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;
index 31b1cd5..54a5a85 100644 (file)
                return this.selected;
        };
 
+       // eslint-disable-next-line valid-jsdoc
        /**
         * Set the selected dates
         *
                return this.focusedDate;
        };
 
+       // eslint-disable-next-line valid-jsdoc
        /**
         * Set the currently-focused date
         *
         *
         * @protected
         * @param {jQuery.Event} e Key down event
+        * @return {boolean} False to cancel the default event
         */
        mw.widgets.datetime.CalendarWidget.prototype.onKeyDown = function ( e ) {
                var focusedDate = this.getFocusedDate();
index 1c54234..1793849 100644 (file)
         *  Defaults to the current date and time (with 0 milliseconds).
         */
        mw.widgets.datetime.DateTimeFormatter = function MwWidgetsDatetimeDateTimeFormatter( config ) {
-               var statick = this.constructor[ 'static' ];
-
-               statick.setupDefaults();
+               this.constructor.static.setupDefaults();
 
                config = $.extend( {
                        format: '@default',
                        local: false,
-                       fullZones: statick.fullZones,
-                       shortZones: statick.shortZones
+                       fullZones: this.constructor.static.fullZones,
+                       shortZones: this.constructor.static.shortZones
                }, config );
 
                // Mixin constructors
                OO.EventEmitter.call( this );
 
                // Properties
-               if ( statick.formats[ config.format ] ) {
-                       this.format = statick.formats[ config.format ];
+               if ( this.constructor.static.formats[ config.format ] ) {
+                       this.format = this.constructor.static.formats[ config.format ];
                } else {
                        this.format = config.format;
                }
@@ -70,7 +68,7 @@
         * @inheritable
         * @property {Object}
         */
-       mw.widgets.datetime.DateTimeFormatter[ 'static' ].formats = {};
+       mw.widgets.datetime.DateTimeFormatter.static.formats = {};
 
        /**
         * Default time zone indicators
@@ -79,7 +77,7 @@
         * @inheritable
         * @property {string[]}
         */
-       mw.widgets.datetime.DateTimeFormatter[ 'static' ].fullZones = null;
+       mw.widgets.datetime.DateTimeFormatter.static.fullZones = null;
 
        /**
         * Default abbreviated time zone indicators
@@ -88,9 +86,9 @@
         * @inheritable
         * @property {string[]}
         */
-       mw.widgets.datetime.DateTimeFormatter[ 'static' ].shortZones = null;
+       mw.widgets.datetime.DateTimeFormatter.static.shortZones = null;
 
-       mw.widgets.datetime.DateTimeFormatter[ 'static' ].setupDefaults = function () {
+       mw.widgets.datetime.DateTimeFormatter.static.setupDefaults = function () {
                if ( !this.fullZones ) {
                        this.fullZones = [
                                mw.msg( 'timezone-utc' ),
                return this.local;
        };
 
+       // eslint-disable-next-line valid-jsdoc
        /**
         * Toggle whether dates are in local time or UTC
         *
         *  - 'clip': "Jan 32" => "Jan 31", "Feb 32" => "Feb 28" (or 29), "Feb 0" => "Feb 1", etc.
         * @return {Date} Adjusted date
         */
-       mw.widgets.datetime.DateTimeFormatter.prototype.adjustComponent = function ( date /*, component, delta, mode */ ) {
+       mw.widgets.datetime.DateTimeFormatter.prototype.adjustComponent = function ( date /* , component, delta, mode */ ) {
                // Should be overridden by subclass
                return date;
        };
index a3088ec..e9bedf5 100644 (file)
 
        /* Static properties */
 
-       mw.widgets.datetime.DateTimeInputWidget[ 'static' ].supportsSimpleLabel = false;
+       mw.widgets.datetime.DateTimeInputWidget.static.supportsSimpleLabel = false;
 
        /* Events */
 
         * @private
         * @param {jQuery} $field
         * @param {jQuery.Event} e Key down event
+        * @return {boolean} False to cancel the default event
         */
        mw.widgets.datetime.DateTimeInputWidget.prototype.onFieldKeyDown = function ( $field, e ) {
                var spec = $field.data( 'mw-widgets-datetime-dateTimeInputWidget-fieldSpec' );
         * @private
         * @param {jQuery} $field
         * @param {jQuery.Event} e Change event
+        * @return {boolean} False to cancel the default event
         */
        mw.widgets.datetime.DateTimeInputWidget.prototype.onFieldWheel = function ( $field, e ) {
                var delta = 0,
index fbf3238..b280ead 100644 (file)
@@ -32,7 +32,7 @@
        /**
         * @inheritdoc
         */
-       mw.widgets.datetime.DiscordianDateTimeFormatter[ 'static' ].formats = {
+       mw.widgets.datetime.DiscordianDateTimeFormatter.static.formats = {
                '@time': '${hour|0}:${minute|0}:${second|0}',
                '@date': '$!{dow|full}${not-intercalary|1|, }${season|full}${not-intercalary|1| }${day|#}, ${year|#}',
                '@datetime': '$!{dow|full}${not-intercalary|1|, }${season|full}${not-intercalary|1| }${day|#}, ${year|#} ${hour|0}:${minute|0}:${second|0} $!{zone|short}',
index f60b34b..9e9b15f 100644 (file)
         * @cfg {number} [weekStartsOn=0] What day the week starts on: 0 is Sunday, 1 is Monday, 6 is Saturday.
         */
        mw.widgets.datetime.ProlepticGregorianDateTimeFormatter = function MwWidgetsDatetimeProlepticGregorianDateTimeFormatter( config ) {
-               var statick = this.constructor[ 'static' ];
-
-               statick.setupDefaults();
+               this.constructor.static.setupDefaults();
 
                config = $.extend( {
                        weekStartsOn: 0,
-                       hour12Periods: statick.hour12Periods
+                       hour12Periods: this.constructor.static.hour12Periods
                }, config );
 
                if ( config.fullMonthNames && !config.shortMonthNames ) {
                        }.bind( this ) );
                }
                config = $.extend( {
-                       fullMonthNames: statick.fullMonthNames,
-                       shortMonthNames: statick.shortMonthNames,
-                       fullDayNames: statick.fullDayNames,
-                       shortDayNames: statick.shortDayNames,
-                       dayLetters: statick.dayLetters
+                       fullMonthNames: this.constructor.static.fullMonthNames,
+                       shortMonthNames: this.constructor.static.shortMonthNames,
+                       fullDayNames: this.constructor.static.fullDayNames,
+                       shortDayNames: this.constructor.static.shortDayNames,
+                       dayLetters: this.constructor.static.dayLetters
                }, config );
 
                // Parent constructor
@@ -89,7 +87,7 @@
        /**
         * @inheritdoc
         */
-       mw.widgets.datetime.ProlepticGregorianDateTimeFormatter[ 'static' ].formats = {
+       mw.widgets.datetime.ProlepticGregorianDateTimeFormatter.static.formats = {
                '@time': '${hour|0}:${minute|0}:${second|0}',
                '@date': '$!{dow|short} ${day|#} ${month|short} ${year|#}',
                '@datetime': '$!{dow|short} ${day|#} ${month|short} ${year|#} ${hour|0}:${minute|0}:${second|0} $!{zone|short}',
         * @inheritable
         * @property {Object}
         */
-       mw.widgets.datetime.ProlepticGregorianDateTimeFormatter[ 'static' ].fullMonthNames = null;
+       mw.widgets.datetime.ProlepticGregorianDateTimeFormatter.static.fullMonthNames = null;
 
        /**
         * Default abbreviated month names.
         * @inheritable
         * @property {Object}
         */
-       mw.widgets.datetime.ProlepticGregorianDateTimeFormatter[ 'static' ].shortMonthNames = null;
+       mw.widgets.datetime.ProlepticGregorianDateTimeFormatter.static.shortMonthNames = null;
 
        /**
         * Default full day of week names.
         * @inheritable
         * @property {Object}
         */
-       mw.widgets.datetime.ProlepticGregorianDateTimeFormatter[ 'static' ].fullDayNames = null;
+       mw.widgets.datetime.ProlepticGregorianDateTimeFormatter.static.fullDayNames = null;
 
        /**
         * Default abbreviated day of week names.
         * @inheritable
         * @property {Object}
         */
-       mw.widgets.datetime.ProlepticGregorianDateTimeFormatter[ 'static' ].shortDayNames = null;
+       mw.widgets.datetime.ProlepticGregorianDateTimeFormatter.static.shortDayNames = null;
 
        /**
         * Default day letters.
         * @inheritable
         * @property {string[]}
         */
-       mw.widgets.datetime.ProlepticGregorianDateTimeFormatter[ 'static' ].dayLetters = null;
+       mw.widgets.datetime.ProlepticGregorianDateTimeFormatter.static.dayLetters = null;
 
        /**
         * Default AM/PM indicators
         * @inheritable
         * @property {string[]}
         */
-       mw.widgets.datetime.ProlepticGregorianDateTimeFormatter[ 'static' ].hour12Periods = null;
+       mw.widgets.datetime.ProlepticGregorianDateTimeFormatter.static.hour12Periods = null;
 
-       mw.widgets.datetime.ProlepticGregorianDateTimeFormatter[ 'static' ].setupDefaults = function () {
-               mw.widgets.datetime.DateTimeFormatter[ 'static' ].setupDefaults.call( this );
+       mw.widgets.datetime.ProlepticGregorianDateTimeFormatter.static.setupDefaults = function () {
+               mw.widgets.datetime.DateTimeFormatter.static.setupDefaults.call( this );
 
                if ( this.fullMonthNames && !this.shortMonthNames ) {
                        this.shortMonthNames = {};
index 3daa70a..57a3d9c 100644 (file)
@@ -4,7 +4,7 @@
  * @copyright 2011-2015 MediaWiki Widgets Team and others; see AUTHORS.txt
  * @license The MIT License (MIT); see LICENSE.txt
  */
-/*global moment */
+/* global moment */
 ( function ( $, mw ) {
 
        /**
                selected = moment( this.getDate(), this.getDateFormat() );
 
                switch ( this.displayLayer ) {
-               case 'month':
-                       this.labelButton.setLabel( this.moment.format( 'MMMM YYYY' ) );
-                       this.upButton.toggle( true );
-
-                       // First week displayed is the first week spanned by the month, unless it begins on Monday, in
-                       // which case first week displayed is the previous week. This makes the calendar "balanced"
-                       // and also neatly handles 28-day February sometimes spanning only 4 weeks.
-                       currentDay = moment( this.moment ).startOf( 'month' ).subtract( 1, 'day' ).startOf( 'week' );
-
-                       // Day-of-week labels. Localisation-independent: works with weeks starting on Saturday, Sunday
-                       // or Monday.
-                       for ( i = 0; i < 7; i++ ) {
-                               items.push(
-                                       $( '<div>' )
-                                               .addClass( 'mw-widget-calendarWidget-day-heading' )
-                                               .text( currentDay.format( 'dd' ) )
-                               );
-                               currentDay.add( 1, 'day' );
-                       }
-                       currentDay.subtract( 7, 'days' );
-
-                       // Actual calendar month. Always displays 6 weeks, for consistency (months can span 4 to 6
-                       // weeks).
-                       for ( i = 0; i < 42; i++ ) {
-                               items.push(
-                                       $( '<div>' )
-                                               .addClass( 'mw-widget-calendarWidget-item mw-widget-calendarWidget-day' )
-                                               .toggleClass( 'mw-widget-calendarWidget-day-additional', !currentDay.isSame( this.moment, 'month' ) )
-                                               .toggleClass( 'mw-widget-calendarWidget-day-today', currentDay.isSame( today, 'day' ) )
-                                               .toggleClass( 'mw-widget-calendarWidget-item-selected', currentDay.isSame( selected, 'day' ) )
-                                               .text( currentDay.format( 'D' ) )
-                                               .data( 'date', currentDay.date() )
-                                               .data( 'month', currentDay.month() )
-                                               .data( 'year', currentDay.year() )
-                               );
-                               currentDay.add( 1, 'day' );
-                       }
-                       break;
-
-               case 'year':
-                       this.labelButton.setLabel( this.moment.format( 'YYYY' ) );
-                       this.upButton.toggle( true );
-
-                       currentMonth = moment( this.moment ).startOf( 'year' );
-                       for ( i = 0; i < 12; i++ ) {
-                               items.push(
-                                       $( '<div>' )
-                                               .addClass( 'mw-widget-calendarWidget-item mw-widget-calendarWidget-month' )
-                                               .toggleClass( 'mw-widget-calendarWidget-item-selected', currentMonth.isSame( selected, 'month' ) )
-                                               .text( currentMonth.format( 'MMMM' ) )
-                                               .data( 'month', currentMonth.month() )
-                               );
-                               currentMonth.add( 1, 'month' );
-                       }
-                       // Shuffle the array to display months in columns rather than rows.
-                       items = [
-                               items[ 0 ], items[ 6 ],      //  | January  | July      |
-                               items[ 1 ], items[ 7 ],      //  | February | August    |
-                               items[ 2 ], items[ 8 ],      //  | March    | September |
-                               items[ 3 ], items[ 9 ],      //  | April    | October   |
-                               items[ 4 ], items[ 10 ],     //  | May      | November  |
-                               items[ 5 ], items[ 11 ]      //  | June     | December  |
-                       ];
-                       break;
-
-               case 'duodecade':
-                       this.labelButton.setLabel( null );
-                       this.upButton.toggle( false );
-
-                       currentYear = moment( { year: Math.floor( this.moment.year() / 20 ) * 20 } );
-                       for ( i = 0; i < 20; i++ ) {
-                               items.push(
-                                       $( '<div>' )
-                                               .addClass( 'mw-widget-calendarWidget-item mw-widget-calendarWidget-year' )
-                                               .toggleClass( 'mw-widget-calendarWidget-item-selected', currentYear.isSame( selected, 'year' ) )
-                                               .text( currentYear.format( 'YYYY' ) )
-                                               .data( 'year', currentYear.year() )
-                               );
-                               currentYear.add( 1, 'year' );
-                       }
-                       break;
+                       case 'month':
+                               this.labelButton.setLabel( this.moment.format( 'MMMM YYYY' ) );
+                               this.upButton.toggle( true );
+
+                               // First week displayed is the first week spanned by the month, unless it begins on Monday, in
+                               // which case first week displayed is the previous week. This makes the calendar "balanced"
+                               // and also neatly handles 28-day February sometimes spanning only 4 weeks.
+                               currentDay = moment( this.moment ).startOf( 'month' ).subtract( 1, 'day' ).startOf( 'week' );
+
+                               // Day-of-week labels. Localisation-independent: works with weeks starting on Saturday, Sunday
+                               // or Monday.
+                               for ( i = 0; i < 7; i++ ) {
+                                       items.push(
+                                               $( '<div>' )
+                                                       .addClass( 'mw-widget-calendarWidget-day-heading' )
+                                                       .text( currentDay.format( 'dd' ) )
+                                       );
+                                       currentDay.add( 1, 'day' );
+                               }
+                               currentDay.subtract( 7, 'days' );
+
+                               // Actual calendar month. Always displays 6 weeks, for consistency (months can span 4 to 6
+                               // weeks).
+                               for ( i = 0; i < 42; i++ ) {
+                                       items.push(
+                                               $( '<div>' )
+                                                       .addClass( 'mw-widget-calendarWidget-item mw-widget-calendarWidget-day' )
+                                                       .toggleClass( 'mw-widget-calendarWidget-day-additional', !currentDay.isSame( this.moment, 'month' ) )
+                                                       .toggleClass( 'mw-widget-calendarWidget-day-today', currentDay.isSame( today, 'day' ) )
+                                                       .toggleClass( 'mw-widget-calendarWidget-item-selected', currentDay.isSame( selected, 'day' ) )
+                                                       .text( currentDay.format( 'D' ) )
+                                                       .data( 'date', currentDay.date() )
+                                                       .data( 'month', currentDay.month() )
+                                                       .data( 'year', currentDay.year() )
+                                       );
+                                       currentDay.add( 1, 'day' );
+                               }
+                               break;
+
+                       case 'year':
+                               this.labelButton.setLabel( this.moment.format( 'YYYY' ) );
+                               this.upButton.toggle( true );
+
+                               currentMonth = moment( this.moment ).startOf( 'year' );
+                               for ( i = 0; i < 12; i++ ) {
+                                       items.push(
+                                               $( '<div>' )
+                                                       .addClass( 'mw-widget-calendarWidget-item mw-widget-calendarWidget-month' )
+                                                       .toggleClass( 'mw-widget-calendarWidget-item-selected', currentMonth.isSame( selected, 'month' ) )
+                                                       .text( currentMonth.format( 'MMMM' ) )
+                                                       .data( 'month', currentMonth.month() )
+                                       );
+                                       currentMonth.add( 1, 'month' );
+                               }
+                               // Shuffle the array to display months in columns rather than rows.
+                               items = [
+                                       items[ 0 ], items[ 6 ],      //  | January  | July      |
+                                       items[ 1 ], items[ 7 ],      //  | February | August    |
+                                       items[ 2 ], items[ 8 ],      //  | March    | September |
+                                       items[ 3 ], items[ 9 ],      //  | April    | October   |
+                                       items[ 4 ], items[ 10 ],     //  | May      | November  |
+                                       items[ 5 ], items[ 11 ]      //  | June     | December  |
+                               ];
+                               break;
+
+                       case 'duodecade':
+                               this.labelButton.setLabel( null );
+                               this.upButton.toggle( false );
+
+                               currentYear = moment( { year: Math.floor( this.moment.year() / 20 ) * 20 } );
+                               for ( i = 0; i < 20; i++ ) {
+                                       items.push(
+                                               $( '<div>' )
+                                                       .addClass( 'mw-widget-calendarWidget-item mw-widget-calendarWidget-year' )
+                                                       .toggleClass( 'mw-widget-calendarWidget-item-selected', currentYear.isSame( selected, 'year' ) )
+                                                       .text( currentYear.format( 'YYYY' ) )
+                                                       .data( 'year', currentYear.year() )
+                                       );
+                                       currentYear.add( 1, 'year' );
+                               }
+                               break;
                }
 
                this.$body.append.apply( this.$body, items );
         */
        mw.widgets.CalendarWidget.prototype.onPrevButtonClick = function () {
                switch ( this.displayLayer ) {
-               case 'month':
-                       this.moment.subtract( 1, 'month' );
-                       break;
-               case 'year':
-                       this.moment.subtract( 1, 'year' );
-                       break;
-               case 'duodecade':
-                       this.moment.subtract( 20, 'years' );
-                       break;
+                       case 'month':
+                               this.moment.subtract( 1, 'month' );
+                               break;
+                       case 'year':
+                               this.moment.subtract( 1, 'year' );
+                               break;
+                       case 'duodecade':
+                               this.moment.subtract( 20, 'years' );
+                               break;
                }
                this.updateUI( 'previous' );
        };
         */
        mw.widgets.CalendarWidget.prototype.onNextButtonClick = function () {
                switch ( this.displayLayer ) {
-               case 'month':
-                       this.moment.add( 1, 'month' );
-                       break;
-               case 'year':
-                       this.moment.add( 1, 'year' );
-                       break;
-               case 'duodecade':
-                       this.moment.add( 20, 'years' );
-                       break;
+                       case 'month':
+                               this.moment.add( 1, 'month' );
+                               break;
+                       case 'year':
+                               this.moment.add( 1, 'year' );
+                               break;
+                       case 'duodecade':
+                               this.moment.add( 20, 'years' );
+                               break;
                }
                this.updateUI( 'next' );
        };
         * what gets clicked.
         *
         * @private
+        * @param {jQuery.Event} e Click event
         */
        mw.widgets.CalendarWidget.prototype.onBodyClick = function ( e ) {
                var
         *
         * @private
         * @param {jQuery.Event} e Mouse click event
+        * @return {boolean} False to cancel the default event
         */
        mw.widgets.CalendarWidget.prototype.onClick = function ( e ) {
                if ( !this.isDisabled() && e.which === 1 ) {
         *
         * @private
         * @param {jQuery.Event} e Key down event
+        * @return {boolean} False to cancel the default event
         */
        mw.widgets.CalendarWidget.prototype.onKeyDown = function ( e ) {
                var
-                       /*jshint -W024*/
                        dir = OO.ui.Element.static.getDir( this.$element ),
-                       /*jshint +W024*/
                        nextDirectionKey = dir === 'ltr' ? OO.ui.Keys.RIGHT : OO.ui.Keys.LEFT,
                        prevDirectionKey = dir === 'ltr' ? OO.ui.Keys.LEFT : OO.ui.Keys.RIGHT,
                        changed = true;
 
                if ( !this.isDisabled() ) {
                        switch ( e.which ) {
-                       case prevDirectionKey:
-                               this.moment.subtract( 1, this.precision === 'month' ? 'month' : 'day' );
-                               break;
-                       case nextDirectionKey:
-                               this.moment.add( 1, this.precision === 'month' ? 'month' : 'day' );
-                               break;
-                       case OO.ui.Keys.UP:
-                               this.moment.subtract( 1, this.precision === 'month' ? 'month' : 'week' );
-                               break;
-                       case OO.ui.Keys.DOWN:
-                               this.moment.add( 1, this.precision === 'month' ? 'month' : 'week' );
-                               break;
-                       case OO.ui.Keys.PAGEUP:
-                               this.moment.subtract( 1, this.precision === 'month' ? 'year' : 'month' );
-                               break;
-                       case OO.ui.Keys.PAGEDOWN:
-                               this.moment.add( 1, this.precision === 'month' ? 'year' : 'month' );
-                               break;
-                       default:
-                               changed = false;
-                               break;
+                               case prevDirectionKey:
+                                       this.moment.subtract( 1, this.precision === 'month' ? 'month' : 'day' );
+                                       break;
+                               case nextDirectionKey:
+                                       this.moment.add( 1, this.precision === 'month' ? 'month' : 'day' );
+                                       break;
+                               case OO.ui.Keys.UP:
+                                       this.moment.subtract( 1, this.precision === 'month' ? 'month' : 'week' );
+                                       break;
+                               case OO.ui.Keys.DOWN:
+                                       this.moment.add( 1, this.precision === 'month' ? 'month' : 'week' );
+                                       break;
+                               case OO.ui.Keys.PAGEUP:
+                                       this.moment.subtract( 1, this.precision === 'month' ? 'year' : 'month' );
+                                       break;
+                               case OO.ui.Keys.PAGEDOWN:
+                                       this.moment.add( 1, this.precision === 'month' ? 'year' : 'month' );
+                                       break;
+                               default:
+                                       changed = false;
+                                       break;
                        }
 
                        if ( changed ) {
index 4d86cfd..488d9e0 100644 (file)
@@ -94,7 +94,8 @@
         * @extends mw.Title
         *
         * @constructor
-        * @inheritdoc
+        * @param {string} title
+        * @param {number} [namespace]
         */
        function ForeignTitle( title, namespace ) {
                // We only need to handle categories here... but we don't know the target language.
        };
 
        /**
-        * @class mw.widgets.CategoryCapsuleItemWidget
-        *
         * Category selector capsule item widget. Extends OO.ui.CapsuleItemWidget with the ability to link
         * to the given page, and to show its existence status (i.e., whether it is a redlink).
         *
+        * @class mw.widgets.CategoryCapsuleItemWidget
         * @uses mw.Api
         * @extends OO.ui.CapsuleItemWidget
         *
                this.$label.replaceWith( this.$link );
                this.setLabelElement( this.$link );
 
-               /*jshint -W024*/
                if ( !this.constructor.static.pageExistenceCaches[ this.apiUrl ] ) {
                        this.constructor.static.pageExistenceCaches[ this.apiUrl ] =
                                new PageExistenceCache( new mw.ForeignApi( this.apiUrl ) );
                        .done( function ( exists ) {
                                widget.setMissing( !exists );
                        } );
-               /*jshint +W024*/
        };
 
        /* Setup */
 
        /* Static Properties */
 
-       /*jshint -W024*/
        /**
         * Map of API URLs to PageExistenceCache objects.
         *
        mw.widgets.CategoryCapsuleItemWidget.static.pageExistenceCaches = {
                '': new PageExistenceCache()
        };
-       /*jshint +W024*/
 
        /* Methods */
 
index 267eebb..422c048 100644 (file)
@@ -52,6 +52,7 @@
                        menu: {
                                filterFromInput: false
                        },
+                       placeholder: mw.msg( 'mw-widgets-categoryselector-add-category-placeholder' ),
                        // This allows the user to both select non-existent categories, and prevents the selector from
                        // being wiped from #onMenuItemsChange when we change the available options in the dropdown
                        allowArbitrary: true
                                        prop: 'categories',
                                        cllimit: this.limit,
                                        titles: 'Category:' + input
-                               } ).done( function ( res )  {
+                               } ).done( function ( res ) {
                                        var categories = [];
 
                                        $.each( res.query.pages, function ( index, page ) {
index ddae9b1..8f48ec3 100644 (file)
@@ -51,7 +51,6 @@
        OO.inheritClass( mw.widgets.ComplexTitleInputWidget, OO.ui.Widget );
 
        /* Static Methods */
-       /*jshint -W024*/
 
        /**
         * @inheritdoc
@@ -85,8 +84,6 @@
                return state;
        };
 
-       /*jshint +W024*/
-
        /* Methods */
 
        /**
index ed251f2..7f5e608 100644 (file)
@@ -4,7 +4,7 @@
  * @copyright 2011-2015 MediaWiki Widgets Team and others; see AUTHORS.txt
  * @license The MIT License (MIT); see LICENSE.txt
  */
-/*global moment */
+/* global moment */
 ( function ( $, mw ) {
 
        /**
@@ -87,6 +87,8 @@
         *     calendar uses relative positioning.
         */
        mw.widgets.DateInputWidget = function MWWDateInputWidget( config ) {
+               var placeholderDateFormat, mustBeAfter, mustBeBefore;
+
                // Config initialization
                config = $.extend( {
                        precision: 'day',
                        }
                }
 
-               var placeholderDateFormat, mustBeAfter, mustBeBefore;
                if ( config.placeholderDateFormat ) {
                        placeholderDateFormat = config.placeholderDateFormat;
                } else if ( config.inputFormat ) {
         * @return {string} Format string
         */
        mw.widgets.DateInputWidget.prototype.getDisplayFormat = function () {
+               var localeData, llll, lll, ll, format;
+
                if ( this.displayFormat !== undefined ) {
                        return this.displayFormat;
                }
                        // We try to construct it as 'llll - (lll - ll)' and hope for the best.
                        // This seems to work well for many languages (maybe even all?).
 
-                       var localeData = moment.localeData( moment.locale() ),
-                               llll = localeData.longDateFormat( 'llll' ),
-                               lll = localeData.longDateFormat( 'lll' ),
-                               ll = localeData.longDateFormat( 'll' ),
-                               format = llll.replace( lll.replace( ll, '' ), '' );
+                       localeData = moment.localeData( moment.locale() );
+                       llll = localeData.longDateFormat( 'llll' );
+                       lll = localeData.longDateFormat( 'lll' );
+                       ll = localeData.longDateFormat( 'll' );
+                       format = llll.replace( lll.replace( ll, '' ), '' );
 
                        return format;
                }
         *
         * @private
         * @param {jQuery.Event} e Mouse click event
+        * @return {boolean} False to cancel the default event
         */
        mw.widgets.DateInputWidget.prototype.onClick = function ( e ) {
                if ( !this.isDisabled() && e.which === 1 ) {
         *
         * @private
         * @param {jQuery.Event} e Key press event
+        * @return {boolean} False to cancel the default event
         */
        mw.widgets.DateInputWidget.prototype.onKeyPress = function ( e ) {
                if ( !this.isDisabled() &&
         *
         * @private
         * @param {jQuery.Event} e Key press event
+        * @return {boolean} False to cancel the default event
         */
        mw.widgets.DateInputWidget.prototype.onCalendarKeyPress = function ( e ) {
                if ( !this.isDisabled() && e.which === OO.ui.Keys.ENTER ) {
         *
         * @private
         * @param {jQuery.Event} e Mouse click event
+        * @return {boolean} False to cancel the default event
         */
        mw.widgets.DateInputWidget.prototype.onCalendarClick = function ( e ) {
                if (
index c88395e..aa0c739 100644 (file)
@@ -36,6 +36,8 @@
 
        /**
         * @private
+        * @param {Object} [config] Configuration options
+        * @return {Object[]} Dropdown options
         */
        mw.widgets.NamespaceInputWidget.prototype.getNamespaceDropdownOptions = function ( config ) {
                var options,
index d816335..39bee7c 100755 (executable)
@@ -13,6 +13,7 @@
         * @extends mw.widgets.TitleInputWidget
         *
         * @constructor
+        * @param {Object} [config] Configuration options
         * @cfg {boolean} [pushPending=true] Visually mark the input field as "pending", while
         *  requesting suggestions.
         * @cfg {boolean} [performSearchOnClick=true] If true, the script will start a search when-
index 101a606..a78ad82 100644 (file)
@@ -15,6 +15,7 @@
         * @mixins OO.ui.mixin.LookupElement
         *
         * @constructor
+        * @param {Object} [config] Configuration options
         * @cfg {boolean} [suggestions=true] Display search suggestions
         * @cfg {RegExp|Function|string} [validate] Perform title validation
         */
index 96f9549..5ba9481 100644 (file)
@@ -15,6 +15,7 @@
         * @mixins mw.widgets.TitleWidget
         *
         * @constructor
+        * @param {Object} [config] Configuration options
         */
        mw.widgets.TitleSearchWidget = function MwWidgetsTitleSearchWidget( config ) {
                config = config || {};
index 7ca19df..e1e50ea 100644 (file)
@@ -7,14 +7,14 @@
 ( function ( $, mw ) {
 
        var interwikiPrefixesPromise = new mw.Api().get( {
-                       action: 'query',
-                       meta: 'siteinfo',
-                       siprop: 'interwikimap'
-               } ).then( function ( data ) {
-                       return $.map( data.query.interwikimap, function ( interwiki ) {
-                               return interwiki.prefix;
-                       } );
+               action: 'query',
+               meta: 'siteinfo',
+               siprop: 'interwikimap'
+       } ).then( function ( data ) {
+               return $.map( data.query.interwikimap, function ( interwiki ) {
+                       return interwiki.prefix;
                } );
+       } );
 
        /**
         * Mixin for title widgets
                        description = mw.msg( 'mw-widgets-titleinput-description-new-page' );
                }
                return {
-                       data: this.namespace !== null && this.relative
-                               ? mwTitle.getRelativeText( this.namespace )
-                               title,
+                       data: this.namespace !== null && this.relative ?
+                               mwTitle.getRelativeText( this.namespace ) :
+                               title,
                        url: mwTitle.getUrl(),
                        imageUrl: this.showImages ? data.imageUrl : null,
                        description: this.showDescriptions ? description : null,
index 164fd20..2b3a59f 100644 (file)
@@ -90,6 +90,7 @@
         *
         * @method
         * @param {Mixed} response Response from server
+        * @return {Object}
         */
        mw.widgets.UserInputWidget.prototype.getLookupCacheDataFromResponse = function ( response ) {
                return response.query.allusers || {};
index f51403f..1a3cdd5 100644 (file)
                this.apiUrl = String( url );
                this.anonymous = options && options.anonymous;
 
-               options = $.extend( /*deep=*/ true,
+               options = $.extend( /* deep=*/ true,
                        {
                                ajax: {
                                        url: this.apiUrl,
                                        xhrFields: {
-                                               withCredentials: this.anonymous ? false : true
+                                               withCredentials: !this.anonymous
                                        }
                                },
                                parameters: {
index b7579ff..b9e05c3 100644 (file)
                                } )
                                // AJAX success just means "200 OK" response, also check API error codes
                                .done( function ( result, textStatus, jqXHR ) {
+                                       var code;
                                        if ( result === undefined || result === null || result === '' ) {
                                                apiDeferred.reject( 'ok-but-empty',
                                                        'OK response but empty result (check HTTP headers?)',
                                                        jqXHR
                                                );
                                        } else if ( result.error ) {
-                                               var code = result.error.code === undefined ? 'unknown' : result.error.code;
+                                               code = result.error.code === undefined ? 'unknown' : result.error.code;
                                                apiDeferred.reject( code, result, result, jqXHR );
                                        } else {
                                                apiDeferred.resolve( result, jqXHR );
                 *
                 * @since 1.22
                 * @param {string} type Token type
+                * @param {string} [assert]
                 * @return {jQuery.Promise} Received token.
                 */
                getToken: function ( type, assert ) {
index bb3a913..21fad5e 100644 (file)
                        var basetimestamp, curtimestamp,
                                api = this;
                        return api.get( {
-                                       action: 'query',
-                                       prop: 'revisions',
-                                       rvprop: [ 'content', 'timestamp' ],
-                                       titles: String( title ),
-                                       formatversion: '2',
-                                       curtimestamp: true
-                               } )
+                               action: 'query',
+                               prop: 'revisions',
+                               rvprop: [ 'content', 'timestamp' ],
+                               titles: String( title ),
+                               formatversion: '2',
+                               curtimestamp: true
+                       } )
                                .then( function ( data ) {
                                        var page, revision;
                                        if ( !data.query || !data.query.pages ) {
index 418fd23..f38e88b 100644 (file)
                 * @return {string} return.done.data Parsed HTML of `wikitext`.
                 */
                parse: function ( content, additionalParams ) {
-                       var apiPromise, config = $.extend( {
-                               formatversion: 2,
-                               action: 'parse',
-                               contentmodel: 'wikitext'
-                       }, additionalParams );
+                       var apiPromise,
+                               config = $.extend( {
+                                       formatversion: 2,
+                                       action: 'parse',
+                                       contentmodel: 'wikitext'
+                               }, additionalParams );
 
                        if ( mw.Title && content instanceof mw.Title ) {
                                // Parse existing page
index 8169449..351ceb2 100644 (file)
@@ -34,7 +34,8 @@
         * @return {string}
         */
        function getFirstKey( obj ) {
-               for ( var key in obj ) {
+               var key;
+               for ( key in obj ) {
                        if ( obj.hasOwnProperty( key ) ) {
                                return key;
                        }
@@ -45,6 +46,7 @@
         * Get new iframe object for an upload.
         *
         * @private
+        * @param {string} id
         * @return {HTMLIframeElement}
         */
        function getNewIframe( id ) {
@@ -58,6 +60,8 @@
         * Shortcut for getting hidden inputs
         *
         * @private
+        * @param {string} name
+        * @param {string} val
         * @return {jQuery}
         */
        function getHiddenInput( name, val ) {
                 *
                 * @param {string} filekey
                 * @param {Object} data
+                * @return {jQuery.Promise}
                 */
                uploadFromStash: function ( filekey, data ) {
                        data.filekey = filekey;
index a2ff129..687b475 100644 (file)
@@ -12,6 +12,7 @@
         * @param {string|mw.Title|string[]|mw.Title[]} pages Full page name or instance of mw.Title, or an
         *  array thereof. If an array is passed, the return value passed to the promise will also be an
         *  array of appropriate objects.
+        * @param {Object} [addParams]
         * @return {jQuery.Promise}
         * @return {Function} return.done
         * @return {Object|Object[]} return.done.watch Object or list of objects (depends on the `pages`
index 0fbbcbe..5f60097 100644 (file)
@@ -4,8 +4,6 @@
  */
 ( function ( mw, $ ) {
 
-       /*jshint -W024*/
-
        /**
         * Helper function for hide-if to find the nearby form field.
         *
 
        mw.hook( 'htmlform.enhance' ).add( function ( $root ) {
                $root.find( '.mw-htmlform-hide-if' ).each( function () {
-                       var v, i, fields, test, func, spec, self, modules, data,extraModules,
+                       var v, i, fields, test, func, spec, self, modules, data, extraModules,
                                $el = $( this );
 
                        modules = [];
index 37474f6..4f672fc 100644 (file)
@@ -10,6 +10,7 @@
         * Currently only supports passing 'hide-if' data.
         *
         * @ignore
+        * @param {Object} [config] Configuration options
         */
        mw.htmlform.Element = function ( config ) {
                // Configuration initialization
index 9ab2532..37c0554 100644 (file)
@@ -18,8 +18,8 @@
                } );
                $oldContainer.find( 'input' ).each( function () {
                        var $oldInput = $( this ),
-                       checked = $oldInput.prop( 'checked' ),
-                       $option = $( '<option>' );
+                               checked = $oldInput.prop( 'checked' ),
+                               $option = $( '<option>' );
                        $option.prop( 'value', $oldInput.prop( 'value' ) );
                        if ( checked ) {
                                $option.prop( 'selected', true );
@@ -98,7 +98,6 @@
                                                modules.push.apply( modules, extraModules );
                                        }
                                        mw.loader.using( modules, function () {
-                                               /*jshint -W024*/
                                                convertCheckboxesWidgetToCapsules( OO.ui.FieldLayout.static.infuse( $el ) );
                                        } );
                                } else {
index 844d74c..a5cf1d8 100644 (file)
@@ -1,4 +1,4 @@
-/*global moment */
+/* global moment, Uint8Array */
 ( function ( $, mw ) {
 
        /**
@@ -18,6 +18,9 @@
         * @class mw.ForeignStructuredUpload.BookletLayout
         * @uses mw.ForeignStructuredUpload
         * @extends mw.Upload.BookletLayout
+        *
+        * @constructor
+        * @param {Object} config Configuration options
         * @cfg {string} [target] Used to choose the target repository.
         *     If nothing is passed, the {@link mw.ForeignUpload#property-target default} is used.
         */
                                }
 
                                try {
-                                       metadata = mw.libs.jpegmeta( this.result, file.name );
+                                       metadata = mw.libs.jpegmeta( fileStr, file.name );
                                } catch ( e ) {
                                        metadata = null;
                                }
index 3a0a94b..0c572d4 100644 (file)
@@ -1,8 +1,5 @@
 ( function ( mw, $, OO ) {
        /**
-        * @class mw.ForeignStructuredUpload
-        * @extends mw.ForeignUpload
-        *
         * Used to represent an upload in progress on the frontend.
         *
         * This subclass will upload to a wiki using a structured metadata
         * **TODO: This currently only supports uploads under CC-BY-SA 4.0,
         * and should really have support for more licenses.**
         *
-        * @inheritdoc
+        * @class mw.ForeignStructuredUpload
+        * @extends mw.ForeignUpload
+        *
+        * @constructor
+        * @param {string} [target]
+        * @param {Object} [apiconfig]
         */
        function ForeignStructuredUpload( target, apiconfig ) {
                this.date = undefined;
index 781c1df..08fc01d 100644 (file)
@@ -1,8 +1,5 @@
 ( function ( mw, OO, $ ) {
        /**
-        * @class mw.ForeignUpload
-        * @extends mw.Upload
-        *
         * Used to represent an upload in progress on the frontend.
         *
         * Subclassed to upload to a foreign API, with no other goodies. Use
@@ -12,6 +9,9 @@
         * an object, we assume you want the default, and treat it as apiconfig
         * instead.
         *
+        * @class mw.ForeignUpload
+        * @extends mw.Upload
+        *
         * @constructor
         * @param {string} [target] Used to set up the target
         *     wiki. If not remote, this class behaves identically to mw.Upload (unless further subclassed)
 
        /**
         * Override from mw.Upload to make sure the API info is found and allowed
+        *
+        * @inheritdoc
         */
        ForeignUpload.prototype.upload = function () {
                var upload = this;
 
        /**
         * Override from mw.Upload to make sure the API info is found and allowed
+        *
+        * @inheritdoc
         */
        ForeignUpload.prototype.uploadToStash = function () {
                var upload = this;
index e468768..0e2af50 100644 (file)
@@ -3,17 +3,15 @@
  * @author Timo Tijhof, 2011-2013
  * @since 1.18
  */
-( function ( mw, $ ) {
-       /*jshint latedef:false */
 
+/* eslint-disable no-use-before-define */
+
+( function ( mw, $ ) {
        /**
         * Parse titles into an object structure. Note that when using the constructor
         * directly, passing invalid titles will result in an exception. Use #newFromText to use the
         * logic directly and get null for invalid titles which is easier to work with.
         *
-        * @class mw.Title
-        */
-       /**
         * Note that in the constructor and #newFromText method, `namespace` is the **default** namespace
         * only, and can be overridden by a namespace prefix in `title`. If you do not want this behavior,
         * use #makeTitle. Compare:
@@ -30,7 +28,8 @@
         *     mw.Title.newFromText( 'Template:Foo', NS_TEMPLATE ).getPrefixedText(); // => 'Template:Foo'
         *     mw.Title.makeTitle( NS_TEMPLATE, 'Template:Foo' ).getPrefixedText();   // => 'Template:Template:Foo'
         *
-        * @method constructor
+        * @class mw.Title
+        * @constructor
         * @param {string} title Title of the page. If no second argument given,
         *  this will be searched for a namespace
         * @param {number} [namespace=NS_MAIN] If given, will used as default namespace for the given title
                this.title = parsed.title;
                this.ext = parsed.ext;
                this.fragment = parsed.fragment;
-
-               return this;
        }
 
        /* Private members */
 
+       // eslint-disable-next-line vars-on-top
        var
+               namespaceIds = mw.config.get( 'wgNamespaceIds' ),
 
-       namespaceIds = mw.config.get( 'wgNamespaceIds' ),
+               /**
+                * @private
+                * @static
+                * @property NS_MAIN
+                */
+               NS_MAIN = namespaceIds[ '' ],
 
-       /**
-        * @private
-        * @static
-        * @property NS_MAIN
-        */
-       NS_MAIN = namespaceIds[ '' ],
+               /**
+                * @private
+                * @static
+                * @property NS_TALK
+                */
+               NS_TALK = namespaceIds.talk,
 
-       /**
-        * @private
-        * @static
-        * @property NS_TALK
-        */
-       NS_TALK = namespaceIds.talk,
+               /**
+                * @private
+                * @static
+                * @property NS_SPECIAL
+                */
+               NS_SPECIAL = namespaceIds.special,
 
-       /**
-        * @private
-        * @static
-        * @property NS_SPECIAL
-        */
-       NS_SPECIAL = namespaceIds.special,
+               /**
+                * @private
+                * @static
+                * @property NS_MEDIA
+                */
+               NS_MEDIA = namespaceIds.media,
 
-       /**
-        * @private
-        * @static
-        * @property NS_MEDIA
-        */
-       NS_MEDIA = namespaceIds.media,
+               /**
+                * @private
+                * @static
+                * @property NS_FILE
+                */
+               NS_FILE = namespaceIds.file,
 
-       /**
-        * @private
-        * @static
-        * @property NS_FILE
-        */
-       NS_FILE = namespaceIds.file,
+               /**
+                * @private
+                * @static
+                * @property FILENAME_MAX_BYTES
+                */
+               FILENAME_MAX_BYTES = 240,
 
-       /**
-        * @private
-        * @static
-        * @property FILENAME_MAX_BYTES
-        */
-       FILENAME_MAX_BYTES = 240,
+               /**
+                * @private
+                * @static
+                * @property TITLE_MAX_BYTES
+                */
+               TITLE_MAX_BYTES = 255,
 
-       /**
-        * @private
-        * @static
-        * @property TITLE_MAX_BYTES
-        */
-       TITLE_MAX_BYTES = 255,
+               /**
+                * Get the namespace id from a namespace name (either from the localized, canonical or alias
+                * name).
+                *
+                * Example: On a German wiki this would return 6 for any of 'File', 'Datei', 'Image' or
+                * even 'Bild'.
+                *
+                * @private
+                * @static
+                * @method getNsIdByName
+                * @param {string} ns Namespace name (case insensitive, leading/trailing space ignored)
+                * @return {number|boolean} Namespace id or boolean false
+                */
+               getNsIdByName = function ( ns ) {
+                       var id;
+
+                       // Don't cast non-strings to strings, because null or undefined should not result in
+                       // returning the id of a potential namespace called "Null:" (e.g. on null.example.org/wiki)
+                       // Also, toLowerCase throws exception on null/undefined, because it is a String method.
+                       if ( typeof ns !== 'string' ) {
+                               return false;
+                       }
+                       // TODO: Should just use local var namespaceIds here but it
+                       // breaks test which modify the config
+                       id = mw.config.get( 'wgNamespaceIds' )[ ns.toLowerCase() ];
+                       if ( id === undefined ) {
+                               return false;
+                       }
+                       return id;
+               },
 
-       /**
-        * Get the namespace id from a namespace name (either from the localized, canonical or alias
-        * name).
-        *
-        * Example: On a German wiki this would return 6 for any of 'File', 'Datei', 'Image' or
-        * even 'Bild'.
-        *
-        * @private
-        * @static
-        * @method getNsIdByName
-        * @param {string} ns Namespace name (case insensitive, leading/trailing space ignored)
-        * @return {number|boolean} Namespace id or boolean false
-        */
-       getNsIdByName = function ( ns ) {
-               var id;
-
-               // Don't cast non-strings to strings, because null or undefined should not result in
-               // returning the id of a potential namespace called "Null:" (e.g. on null.example.org/wiki)
-               // Also, toLowerCase throws exception on null/undefined, because it is a String method.
-               if ( typeof ns !== 'string' ) {
-                       return false;
-               }
-               // TODO: Should just use local var namespaceIds here but it
-               // breaks test which modify the config
-               id = mw.config.get( 'wgNamespaceIds' )[ ns.toLowerCase() ];
-               if ( id === undefined ) {
-                       return false;
-               }
-               return id;
-       },
+               /**
+                * @private
+                * @method getNamespacePrefix_
+                * @param {number} namespace
+                * @return {string}
+                */
+               getNamespacePrefix = function ( namespace ) {
+                       return namespace === NS_MAIN ?
+                               '' :
+                               ( mw.config.get( 'wgFormattedNamespaces' )[ namespace ].replace( / /g, '_' ) + ':' );
+               },
 
-       /**
-        * @private
-        * @method getNamespacePrefix_
-        * @param {number} namespace
-        * @return {string}
-        */
-       getNamespacePrefix = function ( namespace ) {
-               return namespace === NS_MAIN ?
-                       '' :
-                       ( mw.config.get( 'wgFormattedNamespaces' )[ namespace ].replace( / /g, '_' ) + ':' );
-       },
-
-       rUnderscoreTrim = /^_+|_+$/g,
-
-       rSplit = /^(.+?)_*:_*(.*)$/,
-
-       // See MediaWikiTitleCodec.php#getTitleInvalidRegex
-       rInvalid = new RegExp(
-               '[^' + mw.config.get( 'wgLegalTitleChars' ) + ']' +
-               // URL percent encoding sequences interfere with the ability
-               // to round-trip titles -- you can't link to them consistently.
-               '|%[0-9A-Fa-f]{2}' +
-               // XML/HTML character references produce similar issues.
-               '|&[A-Za-z0-9\u0080-\uFFFF]+;' +
-               '|&#[0-9]+;' +
-               '|&#x[0-9A-Fa-f]+;'
-       ),
-
-       // From MediaWikiTitleCodec::splitTitleString() in PHP
-       // Note that this is not equivalent to /\s/, e.g. underscore is included, tab is not included.
-       rWhitespace = /[ _\u00A0\u1680\u180E\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]+/g,
-
-       // From MediaWikiTitleCodec::splitTitleString() in PHP
-       rUnicodeBidi = /[\u200E\u200F\u202A-\u202E]/g,
+               rUnderscoreTrim = /^_+|_+$/g,
 
-       /**
-        * Slightly modified from Flinfo. Credit goes to Lupo and Flominator.
-        * @private
-        * @static
-        * @property sanitationRules
-        */
-       sanitationRules = [
-               // "signature"
-               {
-                       pattern: /~{3}/g,
-                       replace: '',
-                       generalRule: true
-               },
-               // control characters
-               {
-                       pattern: /[\x00-\x1f\x7f]/g,
-                       replace: '',
-                       generalRule: true
-               },
-               // URL encoding (possibly)
-               {
-                       pattern: /%([0-9A-Fa-f]{2})/g,
-                       replace: '% $1',
-                       generalRule: true
-               },
-               // HTML-character-entities
-               {
-                       pattern: /&(([A-Za-z0-9\x80-\xff]+|#[0-9]+|#x[0-9A-Fa-f]+);)/g,
-                       replace: '& $1',
-                       generalRule: true
-               },
-               // slash, colon (not supported by file systems like NTFS/Windows, Mac OS 9 [:], ext4 [/])
-               {
-                       pattern: new RegExp( '[' + mw.config.get( 'wgIllegalFileChars', '' ) + ']', 'g' ),
-                       replace: '-',
-                       fileRule: true
-               },
-               // brackets, greater than
-               {
-                       pattern: /[\]\}>]/g,
-                       replace: ')',
-                       generalRule: true
-               },
-               // brackets, lower than
-               {
-                       pattern: /[\[\{<]/g,
-                       replace: '(',
-                       generalRule: true
-               },
-               // everything that wasn't covered yet
-               {
-                       pattern: new RegExp( rInvalid.source, 'g' ),
-                       replace: '-',
-                       generalRule: true
-               },
-               // directory structures
-               {
-                       pattern: /^(\.|\.\.|\.\/.*|\.\.\/.*|.*\/\.\/.*|.*\/\.\.\/.*|.*\/\.|.*\/\.\.)$/g,
-                       replace: '',
-                       generalRule: true
-               }
-       ],
+               rSplit = /^(.+?)_*:_*(.*)$/,
 
-       /**
-        * Internal helper for #constructor and #newFromText.
-        *
-        * Based on Title.php#secureAndSplit
-        *
-        * @private
-        * @static
-        * @method parse
-        * @param {string} title
-        * @param {number} [defaultNamespace=NS_MAIN]
-        * @return {Object|boolean}
-        */
-       parse = function ( title, defaultNamespace ) {
-               var namespace, m, id, i, fragment, ext;
+               // See MediaWikiTitleCodec.php#getTitleInvalidRegex
+               rInvalid = new RegExp(
+                       '[^' + mw.config.get( 'wgLegalTitleChars' ) + ']' +
+                       // URL percent encoding sequences interfere with the ability
+                       // to round-trip titles -- you can't link to them consistently.
+                       '|%[0-9A-Fa-f]{2}' +
+                       // XML/HTML character references produce similar issues.
+                       '|&[A-Za-z0-9\u0080-\uFFFF]+;' +
+                       '|&#[0-9]+;' +
+                       '|&#x[0-9A-Fa-f]+;'
+               ),
 
-               namespace = defaultNamespace === undefined ? NS_MAIN : defaultNamespace;
+               // From MediaWikiTitleCodec::splitTitleString() in PHP
+               // Note that this is not equivalent to /\s/, e.g. underscore is included, tab is not included.
+               rWhitespace = /[ _\u00A0\u1680\u180E\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]+/g,
 
-               title = title
-                       // Strip Unicode bidi override characters
-                       .replace( rUnicodeBidi, '' )
-                       // Normalise whitespace to underscores and remove duplicates
-                       .replace( rWhitespace, '_' )
-                       // Trim underscores
-                       .replace( rUnderscoreTrim, '' );
+               // From MediaWikiTitleCodec::splitTitleString() in PHP
+               rUnicodeBidi = /[\u200E\u200F\u202A-\u202E]/g,
+
+               /**
+                * Slightly modified from Flinfo. Credit goes to Lupo and Flominator.
+                * @private
+                * @static
+                * @property sanitationRules
+                */
+               sanitationRules = [
+                       // "signature"
+                       {
+                               pattern: /~{3}/g,
+                               replace: '',
+                               generalRule: true
+                       },
+                       // control characters
+                       {
+                               // eslint-disable-next-line no-control-regex
+                               pattern: /[\x00-\x1f\x7f]/g,
+                               replace: '',
+                               generalRule: true
+                       },
+                       // URL encoding (possibly)
+                       {
+                               pattern: /%([0-9A-Fa-f]{2})/g,
+                               replace: '% $1',
+                               generalRule: true
+                       },
+                       // HTML-character-entities
+                       {
+                               pattern: /&(([A-Za-z0-9\x80-\xff]+|#[0-9]+|#x[0-9A-Fa-f]+);)/g,
+                               replace: '& $1',
+                               generalRule: true
+                       },
+                       // slash, colon (not supported by file systems like NTFS/Windows, Mac OS 9 [:], ext4 [/])
+                       {
+                               pattern: new RegExp( '[' + mw.config.get( 'wgIllegalFileChars', '' ) + ']', 'g' ),
+                               replace: '-',
+                               fileRule: true
+                       },
+                       // brackets, greater than
+                       {
+                               pattern: /[\]\}>]/g,
+                               replace: ')',
+                               generalRule: true
+                       },
+                       // brackets, lower than
+                       {
+                               pattern: /[\[\{<]/g,
+                               replace: '(',
+                               generalRule: true
+                       },
+                       // everything that wasn't covered yet
+                       {
+                               pattern: new RegExp( rInvalid.source, 'g' ),
+                               replace: '-',
+                               generalRule: true
+                       },
+                       // directory structures
+                       {
+                               pattern: /^(\.|\.\.|\.\/.*|\.\.\/.*|.*\/\.\/.*|.*\/\.\.\/.*|.*\/\.|.*\/\.\.)$/g,
+                               replace: '',
+                               generalRule: true
+                       }
+               ],
+
+               /**
+                * Internal helper for #constructor and #newFromText.
+                *
+                * Based on Title.php#secureAndSplit
+                *
+                * @private
+                * @static
+                * @method parse
+                * @param {string} title
+                * @param {number} [defaultNamespace=NS_MAIN]
+                * @return {Object|boolean}
+                */
+               parse = function ( title, defaultNamespace ) {
+                       var namespace, m, id, i, fragment, ext;
+
+                       namespace = defaultNamespace === undefined ? NS_MAIN : defaultNamespace;
 
-               // Process initial colon
-               if ( title !== '' && title[ 0 ] === ':' ) {
-                       // Initial colon means main namespace instead of specified default
-                       namespace = NS_MAIN;
                        title = title
-                               // Strip colon
-                               .slice( 1 )
+                               // Strip Unicode bidi override characters
+                               .replace( rUnicodeBidi, '' )
+                               // Normalise whitespace to underscores and remove duplicates
+                               .replace( rWhitespace, '_' )
                                // Trim underscores
                                .replace( rUnderscoreTrim, '' );
-               }
 
-               if ( title === '' ) {
-                       return false;
-               }
+                       // Process initial colon
+                       if ( title !== '' && title[ 0 ] === ':' ) {
+                               // Initial colon means main namespace instead of specified default
+                               namespace = NS_MAIN;
+                               title = title
+                                       // Strip colon
+                                       .slice( 1 )
+                                       // Trim underscores
+                                       .replace( rUnderscoreTrim, '' );
+                       }
 
-               // Process namespace prefix (if any)
-               m = title.match( rSplit );
-               if ( m ) {
-                       id = getNsIdByName( m[ 1 ] );
-                       if ( id !== false ) {
-                               // Ordinary namespace
-                               namespace = id;
-                               title = m[ 2 ];
+                       if ( title === '' ) {
+                               return false;
+                       }
 
-                               // For Talk:X pages, make sure X has no "namespace" prefix
-                               if ( namespace === NS_TALK && ( m = title.match( rSplit ) ) ) {
-                                       // Disallow titles like Talk:File:x (subject should roundtrip: talk:file:x -> file:x -> file_talk:x)
-                                       if ( getNsIdByName( m[ 1 ] ) !== false ) {
-                                               return false;
+                       // Process namespace prefix (if any)
+                       m = title.match( rSplit );
+                       if ( m ) {
+                               id = getNsIdByName( m[ 1 ] );
+                               if ( id !== false ) {
+                                       // Ordinary namespace
+                                       namespace = id;
+                                       title = m[ 2 ];
+
+                                       // For Talk:X pages, make sure X has no "namespace" prefix
+                                       if ( namespace === NS_TALK && ( m = title.match( rSplit ) ) ) {
+                                               // Disallow titles like Talk:File:x (subject should roundtrip: talk:file:x -> file:x -> file_talk:x)
+                                               if ( getNsIdByName( m[ 1 ] ) !== false ) {
+                                                       return false;
+                                               }
                                        }
                                }
                        }
-               }
 
-               // Process fragment
-               i = title.indexOf( '#' );
-               if ( i === -1 ) {
-                       fragment = null;
-               } else {
-                       fragment = title
-                               // Get segment starting after the hash
-                               .slice( i + 1 )
-                               // Convert to text
-                               // NB: Must not be trimmed ("Example#_foo" is not the same as "Example#foo")
-                               .replace( /_/g, ' ' );
-
-                       title = title
-                               // Strip hash
-                               .slice( 0, i )
-                               // Trim underscores, again (strips "_" from "bar" in "Foo_bar_#quux")
-                               .replace( rUnderscoreTrim, '' );
-               }
+                       // Process fragment
+                       i = title.indexOf( '#' );
+                       if ( i === -1 ) {
+                               fragment = null;
+                       } else {
+                               fragment = title
+                                       // Get segment starting after the hash
+                                       .slice( i + 1 )
+                                       // Convert to text
+                                       // NB: Must not be trimmed ("Example#_foo" is not the same as "Example#foo")
+                                       .replace( /_/g, ' ' );
+
+                               title = title
+                                       // Strip hash
+                                       .slice( 0, i )
+                                       // Trim underscores, again (strips "_" from "bar" in "Foo_bar_#quux")
+                                       .replace( rUnderscoreTrim, '' );
+                       }
 
-               // Reject illegal characters
-               if ( title.match( rInvalid ) ) {
-                       return false;
-               }
+                       // Reject illegal characters
+                       if ( title.match( rInvalid ) ) {
+                               return false;
+                       }
 
-               // Disallow titles that browsers or servers might resolve as directory navigation
-               if (
-                       title.indexOf( '.' ) !== -1 && (
-                               title === '.' || title === '..' ||
-                               title.indexOf( './' ) === 0 ||
-                               title.indexOf( '../' ) === 0 ||
-                               title.indexOf( '/./' ) !== -1 ||
-                               title.indexOf( '/../' ) !== -1 ||
-                               title.slice( -2 ) === '/.' ||
-                               title.slice( -3 ) === '/..'
-                       )
-               ) {
-                       return false;
-               }
+                       // Disallow titles that browsers or servers might resolve as directory navigation
+                       if (
+                               title.indexOf( '.' ) !== -1 && (
+                                       title === '.' || title === '..' ||
+                                       title.indexOf( './' ) === 0 ||
+                                       title.indexOf( '../' ) === 0 ||
+                                       title.indexOf( '/./' ) !== -1 ||
+                                       title.indexOf( '/../' ) !== -1 ||
+                                       title.slice( -2 ) === '/.' ||
+                                       title.slice( -3 ) === '/..'
+                               )
+                       ) {
+                               return false;
+                       }
 
-               // Disallow magic tilde sequence
-               if ( title.indexOf( '~~~' ) !== -1 ) {
-                       return false;
-               }
+                       // Disallow magic tilde sequence
+                       if ( title.indexOf( '~~~' ) !== -1 ) {
+                               return false;
+                       }
 
-               // Disallow titles exceeding the TITLE_MAX_BYTES byte size limit (size of underlying database field)
-               // Except for special pages, e.g. [[Special:Block/Long name]]
-               // Note: The PHP implementation also asserts that even in NS_SPECIAL, the title should
-               // be less than 512 bytes.
-               if ( namespace !== NS_SPECIAL && $.byteLength( title ) > TITLE_MAX_BYTES ) {
-                       return false;
-               }
+                       // Disallow titles exceeding the TITLE_MAX_BYTES byte size limit (size of underlying database field)
+                       // Except for special pages, e.g. [[Special:Block/Long name]]
+                       // Note: The PHP implementation also asserts that even in NS_SPECIAL, the title should
+                       // be less than 512 bytes.
+                       if ( namespace !== NS_SPECIAL && $.byteLength( title ) > TITLE_MAX_BYTES ) {
+                               return false;
+                       }
 
-               // Can't make a link to a namespace alone.
-               if ( title === '' && namespace !== NS_MAIN ) {
-                       return false;
-               }
+                       // Can't make a link to a namespace alone.
+                       if ( title === '' && namespace !== NS_MAIN ) {
+                               return false;
+                       }
 
-               // Any remaining initial :s are illegal.
-               if ( title[ 0 ] === ':' ) {
-                       return false;
-               }
+                       // Any remaining initial :s are illegal.
+                       if ( title[ 0 ] === ':' ) {
+                               return false;
+                       }
 
-               // For backwards-compatibility with old mw.Title, we separate the extension from the
-               // rest of the title.
-               i = title.lastIndexOf( '.' );
-               if ( i === -1 || title.length <= i + 1 ) {
-                       // Extensions are the non-empty segment after the last dot
-                       ext = null;
-               } else {
-                       ext = title.slice( i + 1 );
-                       title = title.slice( 0, i );
-               }
+                       // For backwards-compatibility with old mw.Title, we separate the extension from the
+                       // rest of the title.
+                       i = title.lastIndexOf( '.' );
+                       if ( i === -1 || title.length <= i + 1 ) {
+                               // Extensions are the non-empty segment after the last dot
+                               ext = null;
+                       } else {
+                               ext = title.slice( i + 1 );
+                               title = title.slice( 0, i );
+                       }
 
-               return {
-                       namespace: namespace,
-                       title: title,
-                       ext: ext,
-                       fragment: fragment
-               };
-       },
+                       return {
+                               namespace: namespace,
+                               title: title,
+                               ext: ext,
+                               fragment: fragment
+                       };
+               },
 
-       /**
-        * Convert db-key to readable text.
-        *
-        * @private
-        * @static
-        * @method text
-        * @param {string} s
-        * @return {string}
-        */
-       text = function ( s ) {
-               if ( s !== null && s !== undefined ) {
-                       return s.replace( /_/g, ' ' );
-               } else {
-                       return '';
-               }
-       },
+               /**
+                * Convert db-key to readable text.
+                *
+                * @private
+                * @static
+                * @method text
+                * @param {string} s
+                * @return {string}
+                */
+               text = function ( s ) {
+                       if ( s !== null && s !== undefined ) {
+                               return s.replace( /_/g, ' ' );
+                       } else {
+                               return '';
+                       }
+               },
 
-       /**
-        * Sanitizes a string based on a rule set and a filter
-        *
-        * @private
-        * @static
-        * @method sanitize
-        * @param {string} s
-        * @param {Array} filter
-        * @return {string}
-        */
-       sanitize = function ( s, filter ) {
-               var i, ruleLength, rule, m, filterLength,
-                       rules = sanitationRules;
-
-               for ( i = 0, ruleLength = rules.length; i < ruleLength; ++i ) {
-                       rule = rules[ i ];
-                       for ( m = 0, filterLength = filter.length; m < filterLength; ++m ) {
-                               if ( rule[ filter[ m ] ] ) {
-                                       s = s.replace( rule.pattern, rule.replace );
+               /**
+                * Sanitizes a string based on a rule set and a filter
+                *
+                * @private
+                * @static
+                * @method sanitize
+                * @param {string} s
+                * @param {Array} filter
+                * @return {string}
+                */
+               sanitize = function ( s, filter ) {
+                       var i, ruleLength, rule, m, filterLength,
+                               rules = sanitationRules;
+
+                       for ( i = 0, ruleLength = rules.length; i < ruleLength; ++i ) {
+                               rule = rules[ i ];
+                               for ( m = 0, filterLength = filter.length; m < filterLength; ++m ) {
+                                       if ( rule[ filter[ m ] ] ) {
+                                               s = s.replace( rule.pattern, rule.replace );
+                                       }
                                }
                        }
-               }
-               return s;
-       },
-
-       /**
-        * Cuts a string to a specific byte length, assuming UTF-8
-        * or less, if the last character is a multi-byte one
-        *
-        * @private
-        * @static
-        * @method trimToByteLength
-        * @param {string} s
-        * @param {number} length
-        * @return {string}
-        */
-       trimToByteLength = function ( s, length ) {
-               var byteLength, chopOffChars, chopOffBytes;
-
-               // bytelength is always greater or equal to the length in characters
-               s = s.substr( 0, length );
-               while ( ( byteLength = $.byteLength( s ) ) > length ) {
-                       // Calculate how many characters can be safely removed
-                       // First, we need to know how many bytes the string exceeds the threshold
-                       chopOffBytes = byteLength - length;
-                       // A character in UTF-8 is at most 4 bytes
-                       // One character must be removed in any case because the
-                       // string is too long
-                       chopOffChars = Math.max( 1, Math.floor( chopOffBytes / 4 ) );
-                       s = s.substr( 0, s.length - chopOffChars );
-               }
-               return s;
-       },
+                       return s;
+               },
 
-       /**
-        * Cuts a file name to a specific byte length
-        *
-        * @private
-        * @static
-        * @method trimFileNameToByteLength
-        * @param {string} name without extension
-        * @param {string} extension file extension
-        * @return {string} The full name, including extension
-        */
-       trimFileNameToByteLength = function ( name, extension ) {
-               // There is a special byte limit for file names and ... remember the dot
-               return trimToByteLength( name, FILENAME_MAX_BYTES - extension.length - 1 ) + '.' + extension;
-       },
-
-       // Polyfill for ES5 Object.create
-       createObject = Object.create || ( function () {
-               return function ( o ) {
-                       function Title() {}
-                       if ( o !== Object( o ) ) {
-                               throw new Error( 'Cannot inherit from a non-object' );
+               /**
+                * Cuts a string to a specific byte length, assuming UTF-8
+                * or less, if the last character is a multi-byte one
+                *
+                * @private
+                * @static
+                * @method trimToByteLength
+                * @param {string} s
+                * @param {number} length
+                * @return {string}
+                */
+               trimToByteLength = function ( s, length ) {
+                       var byteLength, chopOffChars, chopOffBytes;
+
+                       // bytelength is always greater or equal to the length in characters
+                       s = s.substr( 0, length );
+                       while ( ( byteLength = $.byteLength( s ) ) > length ) {
+                               // Calculate how many characters can be safely removed
+                               // First, we need to know how many bytes the string exceeds the threshold
+                               chopOffBytes = byteLength - length;
+                               // A character in UTF-8 is at most 4 bytes
+                               // One character must be removed in any case because the
+                               // string is too long
+                               chopOffChars = Math.max( 1, Math.floor( chopOffBytes / 4 ) );
+                               s = s.substr( 0, s.length - chopOffChars );
                        }
-                       Title.prototype = o;
-                       return new Title();
-               };
-       }() );
+                       return s;
+               },
+
+               /**
+                * Cuts a file name to a specific byte length
+                *
+                * @private
+                * @static
+                * @method trimFileNameToByteLength
+                * @param {string} name without extension
+                * @param {string} extension file extension
+                * @return {string} The full name, including extension
+                */
+               trimFileNameToByteLength = function ( name, extension ) {
+                       // There is a special byte limit for file names and ... remember the dot
+                       return trimToByteLength( name, FILENAME_MAX_BYTES - extension.length - 1 ) + '.' + extension;
+               },
+
+               // Polyfill for ES5 Object.create
+               createObject = Object.create || ( function () {
+                       return function ( o ) {
+                               function Title() {}
+                               if ( o !== Object( o ) ) {
+                                       throw new Error( 'Cannot inherit from a non-object' );
+                               }
+                               Title.prototype = o;
+                               return new Title();
+                       };
+               }() );
 
        /* Static members */
 
                        }
                }
 
-               if ( namespace === NS_MEDIA
-                       || ( options.forUploading && ( namespace === NS_FILE ) )
+               if (
+                       namespace === NS_MEDIA ||
+                       ( options.forUploading && ( namespace === NS_FILE ) )
                ) {
 
                        title = sanitize( title, [ 'generalRule', 'fileRule' ] );
                pages: {},
 
                set: function ( titles, state ) {
+                       var i, len,
+                               pages = this.pages;
+
                        titles = $.isArray( titles ) ? titles : [ titles ];
                        state = state === undefined ? true : !!state;
-                       var i,
-                               pages = this.pages,
-                               len = titles.length;
 
-                       for ( i = 0; i < len; i++ ) {
+                       for ( i = 0, len = titles.length; i < len; i++ ) {
                                pages[ titles[ i ] ] = state;
                        }
                        return true;
                        ) {
                                return this.title;
                        }
-                       return this.title[ 0 ].toUpperCase() + this.title.slice( 1 );
+                       // PHP's strtoupper differs from String.toUpperCase in a number of cases
+                       // Bug: T147646
+                       return mw.Title.phpCharToUpper( this.title[ 0 ] ) + this.title.slice( 1 );
                },
 
                /**
diff --git a/resources/src/mediawiki/mediawiki.Title.phpCharToUpper.js b/resources/src/mediawiki/mediawiki.Title.phpCharToUpper.js
new file mode 100644 (file)
index 0000000..2b39c9a
--- /dev/null
@@ -0,0 +1,255 @@
+// This file can't be parsed by JSDuck due to <https://github.com/tenderlove/rkelly/issues/35>.
+// (It is excluded in jsduck.json.)
+// ESLint suggests unquoting some object keys, which would render the file unparseable by Opera 12.
+/* eslint-disable quote-props */
+( function ( mw ) {
+       var toUpperMapping = {
+               'ß': 'ß',
+               'ʼn': 'ʼn',
+               'Dž': 'Dž',
+               'dž': 'Dž',
+               'Lj': 'Lj',
+               'lj': 'Lj',
+               'Nj': 'Nj',
+               'nj': 'Nj',
+               'ǰ': 'ǰ',
+               'Dz': 'Dz',
+               'dz': 'Dz',
+               'ʝ': 'Ʝ',
+               'ͅ': 'ͅ',
+               'ΐ': 'ΐ',
+               'ΰ': 'ΰ',
+               'և': 'և',
+               'ᏸ': 'Ᏸ',
+               'ᏹ': 'Ᏹ',
+               'ᏺ': 'Ᏺ',
+               'ᏻ': 'Ᏻ',
+               'ᏼ': 'Ᏼ',
+               'ᏽ': 'Ᏽ',
+               'ẖ': 'ẖ',
+               'ẗ': 'ẗ',
+               'ẘ': 'ẘ',
+               'ẙ': 'ẙ',
+               'ẚ': 'ẚ',
+               'ὐ': 'ὐ',
+               'ὒ': 'ὒ',
+               'ὔ': 'ὔ',
+               'ὖ': 'ὖ',
+               'ᾀ': 'ᾈ',
+               'ᾁ': 'ᾉ',
+               'ᾂ': 'ᾊ',
+               'ᾃ': 'ᾋ',
+               'ᾄ': 'ᾌ',
+               'ᾅ': 'ᾍ',
+               'ᾆ': 'ᾎ',
+               'ᾇ': 'ᾏ',
+               'ᾈ': 'ᾈ',
+               'ᾉ': 'ᾉ',
+               'ᾊ': 'ᾊ',
+               'ᾋ': 'ᾋ',
+               'ᾌ': 'ᾌ',
+               'ᾍ': 'ᾍ',
+               'ᾎ': 'ᾎ',
+               'ᾏ': 'ᾏ',
+               'ᾐ': 'ᾘ',
+               'ᾑ': 'ᾙ',
+               'ᾒ': 'ᾚ',
+               'ᾓ': 'ᾛ',
+               'ᾔ': 'ᾜ',
+               'ᾕ': 'ᾝ',
+               'ᾖ': 'ᾞ',
+               'ᾗ': 'ᾟ',
+               'ᾘ': 'ᾘ',
+               'ᾙ': 'ᾙ',
+               'ᾚ': 'ᾚ',
+               'ᾛ': 'ᾛ',
+               'ᾜ': 'ᾜ',
+               'ᾝ': 'ᾝ',
+               'ᾞ': 'ᾞ',
+               'ᾟ': 'ᾟ',
+               'ᾠ': 'ᾨ',
+               'ᾡ': 'ᾩ',
+               'ᾢ': 'ᾪ',
+               'ᾣ': 'ᾫ',
+               'ᾤ': 'ᾬ',
+               'ᾥ': 'ᾭ',
+               'ᾦ': 'ᾮ',
+               'ᾧ': 'ᾯ',
+               'ᾨ': 'ᾨ',
+               'ᾩ': 'ᾩ',
+               'ᾪ': 'ᾪ',
+               'ᾫ': 'ᾫ',
+               'ᾬ': 'ᾬ',
+               'ᾭ': 'ᾭ',
+               'ᾮ': 'ᾮ',
+               'ᾯ': 'ᾯ',
+               'ᾲ': 'ᾲ',
+               'ᾳ': 'ᾼ',
+               'ᾴ': 'ᾴ',
+               'ᾶ': 'ᾶ',
+               'ᾷ': 'ᾷ',
+               'ᾼ': 'ᾼ',
+               'ῂ': 'ῂ',
+               'ῃ': 'ῌ',
+               'ῄ': 'ῄ',
+               'ῆ': 'ῆ',
+               'ῇ': 'ῇ',
+               'ῌ': 'ῌ',
+               'ῒ': 'ῒ',
+               'ΐ': 'ΐ',
+               'ῖ': 'ῖ',
+               'ῗ': 'ῗ',
+               'ῢ': 'ῢ',
+               'ΰ': 'ΰ',
+               'ῤ': 'ῤ',
+               'ῦ': 'ῦ',
+               'ῧ': 'ῧ',
+               'ῲ': 'ῲ',
+               'ῳ': 'ῼ',
+               'ῴ': 'ῴ',
+               'ῶ': 'ῶ',
+               'ῷ': 'ῷ',
+               'ῼ': 'ῼ',
+               'ⅰ': 'ⅰ',
+               'ⅱ': 'ⅱ',
+               'ⅲ': 'ⅲ',
+               'ⅳ': 'ⅳ',
+               'ⅴ': 'ⅴ',
+               'ⅵ': 'ⅵ',
+               'ⅶ': 'ⅶ',
+               'ⅷ': 'ⅷ',
+               'ⅸ': 'ⅸ',
+               'ⅹ': 'ⅹ',
+               'ⅺ': 'ⅺ',
+               'ⅻ': 'ⅻ',
+               'ⅼ': 'ⅼ',
+               'ⅽ': 'ⅽ',
+               'ⅾ': 'ⅾ',
+               'ⅿ': 'ⅿ',
+               'ⓐ': 'ⓐ',
+               'ⓑ': 'ⓑ',
+               'ⓒ': 'ⓒ',
+               'ⓓ': 'ⓓ',
+               'ⓔ': 'ⓔ',
+               'ⓕ': 'ⓕ',
+               'ⓖ': 'ⓖ',
+               'ⓗ': 'ⓗ',
+               'ⓘ': 'ⓘ',
+               'ⓙ': 'ⓙ',
+               'ⓚ': 'ⓚ',
+               'ⓛ': 'ⓛ',
+               'ⓜ': 'ⓜ',
+               'ⓝ': 'ⓝ',
+               'ⓞ': 'ⓞ',
+               'ⓟ': 'ⓟ',
+               'ⓠ': 'ⓠ',
+               'ⓡ': 'ⓡ',
+               'ⓢ': 'ⓢ',
+               'ⓣ': 'ⓣ',
+               'ⓤ': 'ⓤ',
+               'ⓥ': 'ⓥ',
+               'ⓦ': 'ⓦ',
+               'ⓧ': 'ⓧ',
+               'ⓨ': 'ⓨ',
+               'ⓩ': 'ⓩ',
+               'ꞵ': 'Ꞵ',
+               'ꞷ': 'Ꞷ',
+               'ꭓ': 'Ꭓ',
+               'ꭰ': 'Ꭰ',
+               'ꭱ': 'Ꭱ',
+               'ꭲ': 'Ꭲ',
+               'ꭳ': 'Ꭳ',
+               'ꭴ': 'Ꭴ',
+               'ꭵ': 'Ꭵ',
+               'ꭶ': 'Ꭶ',
+               'ꭷ': 'Ꭷ',
+               'ꭸ': 'Ꭸ',
+               'ꭹ': 'Ꭹ',
+               'ꭺ': 'Ꭺ',
+               'ꭻ': 'Ꭻ',
+               'ꭼ': 'Ꭼ',
+               'ꭽ': 'Ꭽ',
+               'ꭾ': 'Ꭾ',
+               'ꭿ': 'Ꭿ',
+               'ꮀ': 'Ꮀ',
+               'ꮁ': 'Ꮁ',
+               'ꮂ': 'Ꮂ',
+               'ꮃ': 'Ꮃ',
+               'ꮄ': 'Ꮄ',
+               'ꮅ': 'Ꮅ',
+               'ꮆ': 'Ꮆ',
+               'ꮇ': 'Ꮇ',
+               'ꮈ': 'Ꮈ',
+               'ꮉ': 'Ꮉ',
+               'ꮊ': 'Ꮊ',
+               'ꮋ': 'Ꮋ',
+               'ꮌ': 'Ꮌ',
+               'ꮍ': 'Ꮍ',
+               'ꮎ': 'Ꮎ',
+               'ꮏ': 'Ꮏ',
+               'ꮐ': 'Ꮐ',
+               'ꮑ': 'Ꮑ',
+               'ꮒ': 'Ꮒ',
+               'ꮓ': 'Ꮓ',
+               'ꮔ': 'Ꮔ',
+               'ꮕ': 'Ꮕ',
+               'ꮖ': 'Ꮖ',
+               'ꮗ': 'Ꮗ',
+               'ꮘ': 'Ꮘ',
+               'ꮙ': 'Ꮙ',
+               'ꮚ': 'Ꮚ',
+               'ꮛ': 'Ꮛ',
+               'ꮜ': 'Ꮜ',
+               'ꮝ': 'Ꮝ',
+               'ꮞ': 'Ꮞ',
+               'ꮟ': 'Ꮟ',
+               'ꮠ': 'Ꮠ',
+               'ꮡ': 'Ꮡ',
+               'ꮢ': 'Ꮢ',
+               'ꮣ': 'Ꮣ',
+               'ꮤ': 'Ꮤ',
+               'ꮥ': 'Ꮥ',
+               'ꮦ': 'Ꮦ',
+               'ꮧ': 'Ꮧ',
+               'ꮨ': 'Ꮨ',
+               'ꮩ': 'Ꮩ',
+               'ꮪ': 'Ꮪ',
+               'ꮫ': 'Ꮫ',
+               'ꮬ': 'Ꮬ',
+               'ꮭ': 'Ꮭ',
+               'ꮮ': 'Ꮮ',
+               'ꮯ': 'Ꮯ',
+               'ꮰ': 'Ꮰ',
+               'ꮱ': 'Ꮱ',
+               'ꮲ': 'Ꮲ',
+               'ꮳ': 'Ꮳ',
+               'ꮴ': 'Ꮴ',
+               'ꮵ': 'Ꮵ',
+               'ꮶ': 'Ꮶ',
+               'ꮷ': 'Ꮷ',
+               'ꮸ': 'Ꮸ',
+               'ꮹ': 'Ꮹ',
+               'ꮺ': 'Ꮺ',
+               'ꮻ': 'Ꮻ',
+               'ꮼ': 'Ꮼ',
+               'ꮽ': 'Ꮽ',
+               'ꮾ': 'Ꮾ',
+               'ꮿ': 'Ꮿ',
+               'ff': 'ff',
+               'fi': 'fi',
+               'fl': 'fl',
+               'ffi': 'ffi',
+               'ffl': 'ffl',
+               'ſt': 'ſt',
+               'st': 'st',
+               'ﬓ': 'ﬓ',
+               'ﬔ': 'ﬔ',
+               'ﬕ': 'ﬕ',
+               'ﬖ': 'ﬖ',
+               'ﬗ': 'ﬗ'
+       };
+       mw.Title.phpCharToUpper = function ( chr ) {
+               var mapped = toUpperMapping[ chr ];
+               return mapped || chr.toUpperCase();
+       };
+}( mediaWiki ) );
index 7c4855f..c7ebfd8 100644 (file)
@@ -1,4 +1,4 @@
-/*global moment*/
+/* global moment*/
 ( function ( $, mw, moment ) {
 
        /**
                                        // If the user can't upload anything, don't give them the option to.
                                        api.getUserInfo().then( function ( userInfo ) {
                                                if ( userInfo.rights.indexOf( 'upload' ) === -1 ) {
-                                                       // TODO Use a better error message when not all logged-in users can upload
-                                                       booklet.getPage( 'upload' ).$element.msg( 'api-error-mustbeloggedin' );
+                                                       if ( mw.user.isAnon() ) {
+                                                               booklet.getPage( 'upload' ).$element.msg( 'api-error-mustbeloggedin' );
+                                                       } else {
+                                                               booklet.getPage( 'upload' ).$element.msg( 'api-error-badaccess-groups' );
+                                                       }
                                                }
                                                return $.Deferred().resolve();
                                        } )
index a719ffe..9d9c0a6 100644 (file)
@@ -29,6 +29,9 @@
         * @uses mw.Upload
         * @uses mw.Upload.BookletLayout
         * @extends OO.ui.ProcessDialog
+        *
+        * @constructor
+        * @param {Object} [config] Configuration options
         * @cfg {Function} [bookletClass=mw.Upload.BookletLayout] Booklet class to be
         *     used for the steps
         * @cfg {Object} [booklet] Booklet constructor configuration
@@ -57,7 +60,6 @@
         * @inheritdoc
         * @property title
         */
-       /*jshint -W024*/
        mw.Upload.Dialog.static.title = mw.msg( 'upload-dialog-title' );
 
        /**
@@ -97,8 +99,6 @@
                }
        ];
 
-       /*jshint +W024*/
-
        /* Methods */
 
        /**
         * @return {mw.Upload.BookletLayout} An upload booklet
         */
        mw.Upload.Dialog.prototype.createUploadBooklet = function () {
+               // eslint-disable-next-line new-cap
                return new this.bookletClass( $.extend( {
                        $overlay: this.$overlay
                }, this.bookletConfig ) );
index 23b0900..02df2a8 100644 (file)
@@ -2,8 +2,6 @@
        var UP;
 
        /**
-        * @class mw.Upload
-        *
         * Used to represent an upload in progress on the frontend.
         * Most of the functionality is implemented in mw.Api.plugin.upload,
         * but this model class will tie it together as well as let you perform
@@ -43,6 +41,8 @@
         *       } );
         *     } );
         *
+        * @class mw.Upload
+        *
         * @constructor
         * @param {Object|mw.Api} [apiconfig] A mw.Api object (or subclass), or configuration
         *     to pass to the constructor of mw.Api.
index 835b423..0c47dbe 100644 (file)
  * @class mw.Uri
  */
 
+/* eslint-disable no-use-before-define */
+
 ( function ( mw, $ ) {
+       var parser, properties;
+
        /**
         * Function that's useful when constructing the URI string -- we frequently encounter the pattern
         * of having to add something to the URI as we go, but only if it's present, and to include a
         * @static
         * @property {Object} parser
         */
-       var parser = {
+       parser = {
                strict: mw.template.get( 'mediawiki.Uri', 'strict.regexp' ).render(),
                loose: mw.template.get( 'mediawiki.Uri', 'loose.regexp' ).render()
-       },
+       };
 
        /**
         * The order here matches the order of captured matches in the `parser` property regexes.
         * @param {string|Function} documentLocation A full url, or function returning one.
         *  If passed a function, the return value may change over time and this will be honoured. (T74334)
         * @member mw
+        * @return {Function} Uri class
         */
        mw.UriRelative = function ( documentLocation ) {
                var getDefaultUri = ( function () {
index 4d0c135..e3a8f7b 100644 (file)
@@ -1,9 +1,5 @@
-/* jshint devel: true */
 ( function ( mw, $ ) {
        /**
-        * @method confirmCloseWindow
-        * @member mw
-        *
         * Prevent the closing of a window with a confirm message (the onbeforeunload event seems to
         * work in most browsers.)
         *
@@ -25,6 +21,8 @@
         *         // do whatever you wanted to do
         *     }
         *
+        * @method confirmCloseWindow
+        * @member mw
         * @param {Object} [options]
         * @param {string} [options.namespace] Namespace for the event registration
         * @param {string} [options.message]
                        }
                };
        };
-} )( mediaWiki, jQuery );
+}( mediaWiki, jQuery ) );
index 26c74a1..3c1a668 100644 (file)
                        }
 
                        bitDiv( 'phpversion' )
-                               .append( $( this.data.phpEngine === 'HHVM'
-                                       ? '<a href="http://hhvm.com/">HHVM</a>'
-                                       '<a href="https://php.net/">PHP</a>'
+                               .append( $( this.data.phpEngine === 'HHVM' ?
+                                       '<a href="http://hhvm.com/">HHVM</a>' :
+                                       '<a href="https://php.net/">PHP</a>'
                                ) )
                                .append( ': ' + this.data.phpVersion );
 
 
                /**
                 * Build the console panel
+                *
+                * @return {jQuery} Console panel
                 */
                buildConsoleTable: function () {
                        var $table, entryTypeText, i, length, entry;
                        $table = $( '<table id="mw-debug-querylist"></table>' );
 
                        $( '<tr>' )
-                               .append( $( '<th>#</th>' ).css( 'width', '4em' )    )
+                               .append( $( '<th>#</th>' ).css( 'width', '4em' ) )
                                .append( $( '<th>SQL</th>' ) )
-                               .append( $( '<th>Time</th>' ).css( 'width', '8em'  ) )
+                               .append( $( '<th>Time</th>' ).css( 'width', '8em' ) )
                                .append( $( '<th>Call</th>' ).css( 'width', '18em' ) )
                        .appendTo( $table );
 
index 46b8479..e86aff6 100644 (file)
                        /**
                         * Dumb window.onerror handler which forwards the errors via mw.track.
                         *
+                        * @param {string} errorMessage
+                        * @param {string} url
+                        * @param {number} lineNumber
+                        * @param {number} [columnNumber]
+                        * @param {Error|Mixed} [errorObject]
+                        * @return {boolean} True to prevent the default action
                         * @fires global_error
                         */
                        window.onerror = function ( errorMessage, url, lineNumber, columnNumber, errorObject ) {
index 49ff411..0c9ea97 100644 (file)
@@ -1,4 +1,3 @@
-/* jshint bitwise:false */
 ( function ( mw, $ ) {
 
        var CONTROL_BUCKET = 'control',
@@ -17,6 +16,7 @@
         * @see https://jsbin.com/kejewi/4/watch?js,console
         */
        function hashString( string ) {
+               /* eslint-disable no-bitwise */
                var hash = 0,
                        i = string.length;
 
@@ -30,6 +30,7 @@
                hash += ( hash << 15 );
 
                return hash >>> 0;
+               /* eslint-enable no-bitwise */
        }
 
        /**
index 0b3ea04..6abdf83 100644 (file)
@@ -6,8 +6,6 @@
  * @author Moriel Schottlender, 2015
  * @since 1.19
  */
-/*jshint esversion:5 */
-/*global OO*/
 ( function ( mw, $ ) {
        /**
         * This is a way of getting simple feedback from users. It's useful
                                this.feedbackSubjectInput.getValue()
                        );
 
-               this.actions.setAbilities( { submit:  isValid } );
+               this.actions.setAbilities( { submit: isValid } );
        };
 
        /**
                                if ( secondaryCode === 'http' ) {
                                        fb.status = 'error3';
                                        // ajax request failed
-                                       mw.log.warn( 'Feedback report failed with HTTP error: ' +  details.textStatus );
+                                       mw.log.warn( 'Feedback report failed with HTTP error: ' + details.textStatus );
                                } else {
                                        fb.status = 'error2';
-                                       mw.log.warn( 'Feedback report failed with API error: ' +  secondaryCode );
+                                       mw.log.warn( 'Feedback report failed with API error: ' + secondaryCode );
                                }
                        } else {
                                fb.status = 'error1';
index 882affe..72bf3d7 100644 (file)
@@ -4,7 +4,6 @@
  * @author Mark Holmquist, 2015
  * @since 1.25
  */
-/*global OO*/
 ( function ( mw, $, oo ) {
        var warningConfig = mw.config.get( 'wgFileWarning' ),
                warningMessages = warningConfig.messages,
index a74aef3..fdaa989 100644 (file)
@@ -4,7 +4,9 @@
  * @author Ori Livneh
  * @since 1.22
  */
-/*jshint devel:true */
+
+/* eslint-disable no-console */
+
 ( function ( mw, $ ) {
 
        var inspect,
        }
 
        function humanSize( bytes ) {
-               if ( !$.isNumeric( bytes ) || bytes === 0 ) { return bytes; }
-               var i = 0,
+               var i,
                        units = [ '', ' KiB', ' MiB', ' GiB', ' TiB', ' PiB' ];
 
-               for ( ; bytes >= 1024; bytes /= 1024 ) { i++; }
+               if ( !$.isNumeric( bytes ) || bytes === 0 ) { return bytes; }
+
+               for ( i = 0; bytes >= 1024; bytes /= 1024 ) { i++; }
                // Maintain one decimal for kB and above, but don't
                // add ".0" for bytes.
                return bytes.toFixed( i > 0 ? 1 : 0 ) + units[ i ];
                        /**
                         * Generate a breakdown of all loaded modules and their size in
                         * kilobytes. Modules are ordered from largest to smallest.
+                        *
+                        * @return {Object[]} Size reports
                         */
                        size: function () {
                                // Map each module to a descriptor object.
                        /**
                         * For each module with styles, count the number of selectors, and
                         * count how many match against some element currently in the DOM.
+                        *
+                        * @return {Object[]} CSS reports
                         */
                        css: function () {
                                var modules = [];
                                                allSelectors: stats.total,
                                                matchedSelectors: stats.matched,
                                                percentMatched: stats.total !== 0 ?
-                                                       ( stats.matched / stats.total * 100 ).toFixed( 2 )  + '%' : null
+                                                       ( stats.matched / stats.total * 100 ).toFixed( 2 ) + '%' : null
                                        } );
                                } );
                                sortByProperty( modules, 'allSelectors', true );
                         * Report stats on mw.loader.store: the number of localStorage
                         * cache hits and misses, the number of items purged from the
                         * cache, and the total size of the module blob in localStorage.
+                        *
+                        * @return {Object[]} Store stats
                         */
                        store: function () {
                                var raw, stats = { enabled: mw.loader.store.enabled };
                                        $.extend( stats, mw.loader.store.stats );
                                        try {
                                                raw = localStorage.getItem( mw.loader.store.getStoreKey() );
-                                               stats.totalSizeInBytes =  $.byteLength( raw );
+                                               stats.totalSizeInBytes = $.byteLength( raw );
                                                stats.totalSize = humanSize( $.byteLength( raw ) );
                                        } catch ( e ) {}
                                }
 
                                // Grep module's CSS
                                if (
-                                       $.isPlainObject( module.style ) && $.isArray( module.style.css )
-                                       && pattern.test( module.style.css.join( '' ) )
+                                       $.isPlainObject( module.style ) && $.isArray( module.style.css ) &&
+                                       pattern.test( module.style.css.join( '' ) )
                                ) {
                                        // Module's CSS source matches
                                        return true;
index 2646cff..c82b9cb 100644 (file)
        function getFailableParserFn( options ) {
                return function ( args ) {
                        var fallback,
+                               // eslint-disable-next-line new-cap
                                parser = new mw.jqueryMsg.parser( options ),
                                key = args[ 0 ],
                                argsArray = $.isArray( args[ 1 ] ) ? args[ 1 ] : slice.call( args, 1 );
                }
 
                return function () {
+                       var failableResult;
                        if ( !failableParserFn ) {
                                failableParserFn = getFailableParserFn( options );
                        }
-                       var failableResult = failableParserFn( arguments );
+                       failableResult = failableParserFn( arguments );
                        if ( format === 'text' || format === 'escaped' ) {
                                return failableResult.text();
                        } else {
                var failableParserFn;
 
                return function () {
+                       var $target;
                        if ( !failableParserFn ) {
                                failableParserFn = getFailableParserFn( options );
                        }
-                       var $target = this.empty();
+                       $target = this.empty();
                        appendWithoutParsing( $target, failableParserFn( arguments ) );
                        return $target;
                };
                this.settings.onlyCurlyBraceTransform = ( this.settings.format === 'text' || this.settings.format === 'escaped' );
                this.astCache = {};
 
+               // eslint-disable-next-line new-cap
                this.emitter = new mw.jqueryMsg.htmlEmitter( this.settings.language, this.settings.magic );
        };
 
 
                /**
                 * Fetch the message string associated with a key, return parsed structure. Memoized.
-                * Note that we pass '[' + key + ']' back for a missing message here.
+                * Note that we pass '⧼' + key + '⧽' back for a missing message here.
                 *
                 * @param {string} key
-                * @return {string|Array} string of '[key]' if message missing, simple string if possible, array of arrays if needs parsing
+                * @return {string|Array} string of '⧼key⧽' if message missing, simple string if possible, array of arrays if needs parsing
                 */
                getAst: function ( key ) {
                        var wikiText;
                        if ( !this.astCache.hasOwnProperty( key ) ) {
                                wikiText = this.settings.messages.get( key );
                                if ( typeof wikiText !== 'string' ) {
-                                       wikiText = '\\[' + key + '\\]';
+                                       wikiText = '⧼' + key + '⧽';
                                }
                                this.astCache[ key ] = this.wikiTextToAst( wikiText );
                        }
                        /**
                         * Starts the parse
                         *
-                        * @param {Function} rootExpression root parse function
+                        * @param {Function} rootExpression Root parse function
+                        * @return {Array|null}
                         */
                        function start( rootExpression ) {
                                var result = nOrMore( 0, rootExpression )();
 
        /**
         * htmlEmitter - object which primarily exists to emit HTML from parser ASTs
+        *
+        * @param {Object} language
+        * @param {Object} magic
         */
        mw.jqueryMsg.htmlEmitter = function ( language, magic ) {
-               this.language = language;
                var jmsg = this;
+               this.language = language;
                $.each( magic, function ( key, val ) {
                        jmsg[ key.toLowerCase() ] = function () {
                                return val;
                 * It may, though, if the wikitext appears in extension-controlled content.
                 *
                 * @param {string[]} nodes
+                * @return {jQuery}
                 */
                wikilink: function ( nodes ) {
                        var page, anchor, url, $el;
                 * @return {number|string} Formatted number
                 */
                formatnum: function ( nodes ) {
-                       var isInteger = ( nodes[ 1 ] && nodes[ 1 ] === 'R' ) ? true : false,
+                       var isInteger = !!nodes[ 1 ] && nodes[ 1 ] === 'R',
                                number = nodes[ 0 ];
 
                        return this.language.convertNumber( number, isInteger );
                return function () {
                        return reusableParent.msg( this.key, this.parameters ).contents().detach();
                };
-       } )();
+       }() );
 
 }( mediaWiki, jQuery ) );
index 9c8fe70..fceeb64 100644 (file)
@@ -7,7 +7,9 @@
  * @alternateClassName mediaWiki
  * @singleton
  */
-/*jshint latedef:false */
+
+/* eslint-disable no-use-before-define */
+
 ( function ( $ ) {
        'use strict';
 
@@ -31,7 +33,7 @@
         * @return {string} hash as an seven-character base 36 string
         */
        function fnv132( str ) {
-               /*jshint bitwise:false */
+               /* eslint-disable no-bitwise */
                var hash = 0x811C9DC5,
                        i;
 
@@ -46,6 +48,7 @@
                }
 
                return hash;
+               /* eslint-enable no-bitwise */
        }
 
        StringSet = window.Set || ( function () {
                        return mw.format.apply( null, [ this.map.get( this.key ) ].concat( this.parameters ) );
                },
 
+               // eslint-disable-next-line valid-jsdoc
                /**
                 * Add (does not replace) parameters for `$N` placeholder values.
                 *
                        var text;
 
                        if ( !this.exists() ) {
-                               // Use <key> as text if key does not exist
-                               if ( this.format === 'escaped' || this.format === 'parse' ) {
-                                       // format 'escaped' and 'parse' need to have the brackets and key html escaped
-                                       return mw.html.escape( '<' + this.key + '>' );
-                               }
-                               return '<' + this.key + '>';
+                               // Use ⧼key⧽ as text if key does not exist
+                               // Err on the side of safety, ensure that the output
+                               // is always html safe in the event the message key is
+                               // missing, since in that case its highly likely the
+                               // message key is user-controlled.
+                               // '⧼' is used instead of '<' to side-step any
+                               // double-escaping issues.
+                               // (Keep synchronised with Message::toString() in PHP.)
+                               return '⧼' + mw.html.escape( this.key ) + '⧽';
                        }
 
                        if ( this.format === 'plain' || this.format === 'text' || this.format === 'parse' ) {
                }
        };
 
+       /* eslint-disable no-console */
        log = ( function () {
                // Also update the restoration of methods in mediawiki.log.js
                // when adding or removing methods here.
                log.deprecate = !Object.defineProperty ? function ( obj, key, val ) {
                        obj[ key ] = val;
                } : function ( obj, key, val, msg, logName ) {
+                       var logged = new StringSet();
                        logName = logName || key;
                        msg = 'Use of "' + logName + '" is deprecated.' + ( msg ? ( ' ' + msg ) : '' );
-                       var logged = new StringSet();
                        function uniqueTrace() {
                                var trace = new Error().stack;
                                if ( logged.has( trace ) ) {
 
                return log;
        }() );
+       /* eslint-enable no-console */
 
        /**
         * @class mw
                                }
 
                                if ( registry[ module ].skip !== null ) {
-                                       /*jshint evil:true */
+                                       // eslint-disable-next-line no-new-func
                                        skip = new Function( registry[ module ].skip );
                                        registry[ module ].skip = null;
                                        if ( skip() ) {
                                                        ) );
                                                }
 
-                                               unresolved.add(  module );
+                                               unresolved.add( module );
                                                sortDependencies( deps[ i ], resolved, unresolved );
                                        }
                                }
                         * @private
                         * @param {string[]} modules Array of string module names
                         * @return {Array} List of dependencies, including 'module'.
+                        * @throws {Error} If an unregistered module or a dependency loop is encountered
                         */
                        function resolve( modules ) {
-                               var resolved = [];
-                               $.each( modules, function ( idx, module ) {
-                                       sortDependencies( module, resolved );
-                               } );
+                               var i, resolved = [];
+                               for ( i = 0; i < modules.length; i++ ) {
+                                       sortDependencies( modules[ i ], resolved );
+                               }
                                return resolved;
                        }
 
                         * Utility function for execute()
                         *
                         * @ignore
+                        * @param {string} [media] Media attribute
+                        * @param {string} url URL
                         */
                        function addLink( media, url ) {
                                var el = document.createElement( 'link' );
                                                } );
                                        };
 
-                                       implicitDependencies = ( $.inArray( module, legacyModules ) !== -1 )
-                                               ? []
-                                               legacyModules;
+                                       implicitDependencies = ( $.inArray( module, legacyModules ) !== -1 ) ?
+                                               [] :
+                                               legacyModules;
 
                                        if ( module === 'user' ) {
                                                // Implicit dependency on the site module. Not real dependency because
                                                implicitDependencies.push( 'site' );
                                        }
 
-                                       legacyWait = implicitDependencies.length
-                                               ? mw.loader.using( implicitDependencies )
-                                               $.Deferred().resolve();
+                                       legacyWait = implicitDependencies.length ?
+                                               mw.loader.using( implicitDependencies ) :
+                                               $.Deferred().resolve();
 
                                        legacyWait.always( function () {
                                                try {
                         * to a query string of the form foo.bar,baz|bar.baz,quux
                         *
                         * @private
+                        * @param {Object} moduleMap Module map
+                        * @return {string} Module query string
                         */
                        function buildModulesString( moduleMap ) {
                                var p, prefix,
                                                        prefix = modules[ i ].substr( 0, lastDotIndex );
                                                        suffix = modules[ i ].slice( lastDotIndex + 1 );
 
-                                                       bytesAdded = hasOwn.call( moduleMap, prefix )
-                                                               ? suffix.length + 3 // '%2C'.length == 3
-                                                               modules[ i ].length + 3; // '%7C'.length == 3
+                                                       bytesAdded = hasOwn.call( moduleMap, prefix ) ?
+                                                               suffix.length + 3 : // '%2C'.length == 3
+                                                               modules[ i ].length + 3; // '%7C'.length == 3
 
                                                        // If the url would become too long, create a new one,
                                                        // but don't create empty requests
                                                        return true;
                                                } );
                                                asyncEval( implementations, function ( err ) {
+                                                       var failed;
                                                        // Not good, the cached mw.loader.implement calls failed! This should
                                                        // never happen, barring ResourceLoader bugs, browser bugs and PEBKACs.
                                                        // Depending on how corrupt the string is, it is likely that some
 
                                                        mw.track( 'resourceloader.exception', { exception: err, source: 'store-eval' } );
                                                        // Re-add the failed ones that are still pending back to the batch
-                                                       var failed = $.grep( sourceModules, function ( module ) {
+                                                       failed = $.grep( sourceModules, function ( module ) {
                                                                return registry[ module ].state === 'loading';
                                                        } );
                                                        batchRequest( failed );
                                                deferred.fail( error );
                                        }
 
-                                       // Resolve entire dependency map
-                                       dependencies = resolve( dependencies );
+                                       try {
+                                               // Resolve entire dependency map
+                                               dependencies = resolve( dependencies );
+                                       } catch ( e ) {
+                                               return deferred.reject( e ).promise();
+                                       }
                                        if ( allReady( dependencies ) ) {
                                                // Run ready immediately
                                                deferred.resolve( mw.loader.require );
                                 *
                                 * @protected
                                 * @since 1.27
+                                * @param {string} moduleName Module name
+                                * @return {Mixed} Exported value
                                 */
                                require: function ( moduleName ) {
                                        var state = mw.loader.getState( moduleName );
                                         *
                                         * @param {string} module Module name
                                         * @param {Object} descriptor The module's descriptor as set in the registry
+                                        * @return {boolean} Module was set
                                         */
                                        set: function ( module, descriptor ) {
                                                var args, key, src;
                                                        // Partial descriptor
                                                        // (e.g. skipped module, or style module with state=ready)
                                                        $.inArray( undefined, [ descriptor.script, descriptor.style,
-                                                                       descriptor.messages, descriptor.templates ] ) !== -1
+                                                               descriptor.messages, descriptor.templates ] ) !== -1
                                                ) {
                                                        // Decline to store
                                                        return false;
                                                        }
                                                } catch ( e ) {
                                                        mw.track( 'resourceloader.exception', { exception: e, source: 'store-localstorage-json' } );
-                                                       return;
+                                                       return false;
                                                }
 
                                                src = 'mw.loader.implement(' + args.join( ',' ) + ');';
                                                }
                                                mw.loader.store.items[ key ] = src;
                                                mw.loader.store.update();
+                                               return true;
                                        },
 
                                        /**
                                         * Iterate through the module store, removing any item that does not correspond
                                         * (in name and version) to an item in the module registry.
+                                        *
+                                        * @return {boolean} Store was pruned
                                         */
                                        prune: function () {
                                                var key, module;
                                                                delete mw.loader.store.items[ key ];
                                                        }
                                                }
+                                               return true;
                                        },
 
                                        /**
                                 * Wrapper object for raw HTML passed to mw.html.element().
                                 *
                                 * @class mw.html.Raw
+                                * @constructor
+                                * @param {string} value
                                 */
                                Raw: function ( value ) {
                                        this.value = value;
                                 * Wrapper object for CDATA element contents passed to mw.html.element()
                                 *
                                 * @class mw.html.Cdata
+                                * @constructor
+                                * @param {string} value
                                 */
                                Cdata: function ( value ) {
                                        this.value = value;
                                         */
                                        remove: list.remove,
 
+                                       // eslint-disable-next-line valid-jsdoc
                                        /**
                                         * Run a hook.
                                         *
         * @param {string} [data.module] Name of module which caused the error
         */
        function logError( topic, data ) {
+               /* eslint-disable no-console */
                var msg,
                        e = data.exception,
                        source = data.source,
                                console.error( String( e ), e );
                        }
                }
+               /* eslint-enable no-console */
        }
 
        // Subscribe to error streams
index c886817..4d23604 100644 (file)
 
                        if ( !$log.length ) {
                                $log = $( '<div id="mw-log-console"></div>' ).css( {
-                                               overflow: 'auto',
-                                               height: '150px',
-                                               backgroundColor: 'white',
-                                               borderTop: 'solid 2px #ADADAD'
-                                       } );
+                                       overflow: 'auto',
+                                       height: '150px',
+                                       backgroundColor: 'white',
+                                       borderTop: 'solid 2px #ADADAD'
+                               } );
                                hovzer = $.getFootHovzer();
                                hovzer.$.append( $log );
                                hovzer.update();
index 36b45f1..926f8c5 100644 (file)
         * @alternateClassName mw.Notification
         * @constructor
         * @private
+        * @param {mw.Message|jQuery|HTMLElement|string} message
+        * @param {Object} options
         */
        function Notification( message, options ) {
-               var $notification, $notificationTitle, $notificationContent;
+               var $notification, $notificationContent;
 
                $notification = $( '<div class="mw-notification"></div>' )
                        .data( 'mw.notification', this )
@@ -48,7 +50,7 @@
                }
 
                if ( options.title ) {
-                       $notificationTitle = $( '<div class="mw-notification-title"></div>' )
+                       $( '<div class="mw-notification-title"></div>' )
                                .text( options.title )
                                .appendTo( $notification );
                }
                                        $area.hide();
                                        notif.$notification.remove();
                                } else {
-                                       notif.$notification.slideUp( 'fast',  function () {
+                                       notif.$notification.slideUp( 'fast', function () {
                                                $( this ).remove();
                                        } );
                                }
index 7c7aca3..fa1a78c 100644 (file)
                }
 
                /**
-                * defines the location of autocomplete. Typically either
+                * Defines the location of autocomplete. Typically either
                 * header, which is in the top right of vector (for example)
                 * and content which identifies the main search bar on
-                * Special:Search.  Defaults to header for skins that don't set
+                * Special:Search. Defaults to header for skins that don't set
                 * explicitly.
                 *
                 * @ignore
+                * @param {Object} context
+                * @return {string}
                 */
                function getInputLocation( context ) {
                        return context.config.$region
                 * 'this' is the search input box (jQuery object)
                 *
                 * @ignore
+                * @param {Object} metadata
                 */
                function onAfterUpdate( metadata ) {
                        var context = this.data( 'suggestionsContext' );
                                cache: true,
                                highlightInput: true
                        } )
-                       .bind( 'paste cut drop', function () {
+                       .on( 'paste cut drop', function () {
                                // make sure paste and cut events from the mouse and drag&drop events
                                // trigger the keypress handler and cause the suggestions to update
                                $( this ).trigger( 'keypress' );
index 7f62256..9f5e5c4 100644 (file)
@@ -1,4 +1,4 @@
-/*global Mustache */
+/* global Mustache */
 ( function ( mw, $ ) {
        // Register mustache compiler
        mw.template.registerCompiler( 'mustache', {
@@ -16,6 +16,7 @@
                                 * @param {Object} data Data to render
                                 * @param {Object} partialTemplates Map partial names to Mustache template objects
                                 *  returned by mw.template.get()
+                                * @return {jQuery} Rendered HTML
                                 */
                                render: function ( data, partialTemplates ) {
                                        var partials = {};
diff --git a/resources/src/mediawiki/mediawiki.user.blockcookie.js b/resources/src/mediawiki/mediawiki.user.blockcookie.js
new file mode 100644 (file)
index 0000000..ffff039
--- /dev/null
@@ -0,0 +1,23 @@
+( function ( mw ) {
+
+       // If a user has been autoblocked, a cookie is set.
+       // Its value is replicated here in localStorage to guard against cookie-removal.
+       // This module will only be loaded when $wgCookieSetOnAutoblock is true.
+       // Ref: https://phabricator.wikimedia.org/T5233
+
+       if ( !mw.cookie.get( 'BlockID' ) && mw.storage.get( 'blockID' ) ) {
+               // The block ID exists in storage, but not in the cookie.
+               mw.cookie.set( 'BlockID', mw.storage.get( 'blockID' ) );
+
+       } else if ( parseInt( mw.cookie.get( 'BlockID' ), 10 ) > 0 && !mw.storage.get( 'blockID' ) ) {
+               // The block ID exists in the cookie, but not in storage.
+               // (When a block expires the cookie remains but its value is '', hence the integer check above.)
+               mw.storage.set( 'blockID', mw.cookie.get( 'BlockID' ) );
+
+       } else if ( mw.cookie.get( 'BlockID' ) === '' && mw.storage.get( 'blockID' ) ) {
+               // If only the empty string is in the cookie, remove the storage value. The block is no longer valid.
+               mw.storage.remove( 'blockID' );
+
+       }
+
+}( mediaWiki ) );
index 63e7de8..c4c91f9 100644 (file)
@@ -2,10 +2,9 @@
  * @class mw.user
  * @singleton
  */
+/* global Uint32Array */
 ( function ( mw, $ ) {
-       var i,
-               userInfoPromise,
-               byteToHex = [];
+       var userInfoPromise;
 
        /**
         * Get the current user's groups or rights
                return userInfoPromise;
        }
 
-       // Map from numbers 0-255 to a hex string (with padding)
-       for ( i = 0; i < 256; i++ ) {
-               // Padding: Add a full byte (0x100, 256) and strip the extra character
-               byteToHex[ i ] = ( i + 256 ).toString( 16 ).slice( 1 );
-       }
-
        // mw.user with the properties options and tokens gets defined in mediawiki.js.
        $.extend( mw.user, {
 
                 * @return {string} 64 bit integer in hex format, padded
                 */
                generateRandomSessionId: function () {
-                       /*jshint bitwise:false */
-                       var rnds, i, r,
-                               hexRnds = new Array( 8 ),
+                       var rnds, i,
+                               hexRnds = new Array( 2 ),
                                // Support: IE 11
                                crypto = window.crypto || window.msCrypto;
 
-                       // Based on https://github.com/broofa/node-uuid/blob/bfd9f96127/uuid.js
                        if ( crypto && crypto.getRandomValues ) {
-                               // Fill an array with 8 random values, each of which is 8 bits.
-                               // Note that Uint8Array is array-like but does not implement Array.
-                               rnds = new Uint8Array( 8 );
+                               // Fill an array with 2 random values, each of which is 32 bits.
+                               // Note that Uint32Array is array-like but does not implement Array.
+                               rnds = new Uint32Array( 2 );
                                crypto.getRandomValues( rnds );
                        } else {
-                               rnds = new Array( 8 );
-                               for ( i = 0; i < 8; i++ ) {
-                                       if ( ( i & 3 ) === 0 ) {
-                                               r = Math.random() * 0x100000000;
-                                       }
-                                       rnds[ i ] = r >>> ( ( i & 3 ) << 3 ) & 255;
-                               }
+                               rnds = [
+                                       Math.floor( Math.random() * 0x100000000 ),
+                                       Math.floor( Math.random() * 0x100000000 )
+                               ];
                        }
-                       // Convert from number to hex
-                       for ( i = 0; i < 8; i++ ) {
-                               hexRnds[ i ] = byteToHex[ rnds[ i ] ];
+                       // Convert number to a string with 16 hex characters
+                       for ( i = 0; i < 2; i++ ) {
+                               // Add 0x100000000 before converting to hex and strip the extra character
+                               // after converting to keep the leading zeros.
+                               hexRnds[ i ] = ( rnds[ i ] + 0x100000000 ).toString( 16 ).slice( 1 );
                        }
 
                        // Concatenation of two random integers with entropy n and m
                 *  unavailable, or Date for when the user registered.
                 */
                getRegistration: function () {
+                       var registration;
                        if ( mw.user.isAnon() ) {
                                return false;
                        }
-                       var registration = mw.config.get( 'wgUserRegistration' );
+                       registration = mw.config.get( 'wgUserRegistration' );
                        // Registration may be unavailable if the user signed up before MediaWiki
                        // began tracking this.
                        return !registration ? null : new Date( registration );
index 654f232..a8188db 100644 (file)
@@ -50,6 +50,7 @@
                 * Encode the string like PHP's rawurlencode
                 *
                 * @param {string} str String to be encoded.
+                * @return {string} Encoded string
                 */
                rawurlencode: function ( str ) {
                        str = String( str );
@@ -62,6 +63,7 @@
                 * Encode the string like Sanitizer::escapeId in PHP
                 *
                 * @param {string} str String to be encoded.
+                * @return {string} Encoded string
                 */
                escapeId: function ( str ) {
                        str = String( str );
@@ -80,6 +82,7 @@
                 * of `wfUrlencode` in PHP.
                 *
                 * @param {string} str String to be encoded.
+                * @return {string} Encoded string
                 */
                wikiUrlencode: function ( str ) {
                        return util.rawurlencode( str )
                                query = $.param( params );
                        }
                        if ( query ) {
-                               url = title
-                                       ? util.wikiScript() + '?title=' + util.wikiUrlencode( title ) + '&' + query
-                                       util.wikiScript() + '?' + query;
+                               url = title ?
+                                       util.wikiScript() + '?title=' + util.wikiUrlencode( title ) + '&' + query :
+                                       util.wikiScript() + '?' + query;
                        } else {
                                url = mw.config.get( 'wgArticlePath' )
                                        .replace( '$1', util.wikiUrlencode( title ).replace( /\$/g, '$$$$' ) );
                 * @return {Mixed} Parameter value or null.
                 */
                getParamValue: function ( param, url ) {
-                       if ( url === undefined ) {
-                               url = location.href;
-                       }
                        // Get last match, stop at hash
                        var     re = new RegExp( '^[^#]*[&?]' + mw.RegExp.escape( param ) + '=([^&#]*)' ),
-                               m = re.exec( url );
+                               m = re.exec( url !== undefined ? url : location.href );
+
                        if ( m ) {
                                // Beware that decodeURIComponent is not required to understand '+'
                                // by spec, as encodeURIComponent does not produce it.
 
                        html5EmailRegexp = new RegExp(
                                // start of string
-                               '^'
-                               +
+                               '^' +
                                // User part which is liberal :p
-                               '[' + rfc5322Atext + '\\.]+'
-                               +
+                               '[' + rfc5322Atext + '\\.]+' +
                                // 'at'
-                               '@'
-                               +
+                               '@' +
                                // Domain first part
-                               '[' + rfc1034LdhStr + ']+'
-                               +
+                               '[' + rfc1034LdhStr + ']+' +
                                // Optional second part and following are separated by a dot
-                               '(?:\\.[' + rfc1034LdhStr + ']+)*'
-                               +
+                               '(?:\\.[' + rfc1034LdhStr + ']+)*' +
                                // End of string
                                '$',
                                // RegExp is case insensitive
                 * @return {boolean}
                 */
                isIPv4Address: function ( address, allowBlock ) {
+                       var block, RE_IP_BYTE, RE_IP_ADD;
+
                        if ( typeof address !== 'string' ) {
                                return false;
                        }
 
-                       var     block = allowBlock ? '(?:\\/(?:3[0-2]|[12]?\\d))?' : '',
-                               RE_IP_BYTE = '(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|0?[0-9]?[0-9])',
-                               RE_IP_ADD = '(?:' + RE_IP_BYTE + '\\.){3}' + RE_IP_BYTE;
+                       block = allowBlock ? '(?:\\/(?:3[0-2]|[12]?\\d))?' : '';
+                       RE_IP_BYTE = '(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|0?[0-9]?[0-9])';
+                       RE_IP_ADD = '(?:' + RE_IP_BYTE + '\\.){3}' + RE_IP_BYTE;
 
                        return ( new RegExp( '^' + RE_IP_ADD + block + '$' ).test( address ) );
                },
                 * @return {boolean}
                 */
                isIPv6Address: function ( address, allowBlock ) {
+                       var block, RE_IPV6_ADD;
+
                        if ( typeof address !== 'string' ) {
                                return false;
                        }
 
-                       var     block = allowBlock ? '(?:\\/(?:12[0-8]|1[01][0-9]|[1-9]?\\d))?' : '',
-                               RE_IPV6_ADD =
-                       '(?:' + // starts with "::" (including "::")
-                       ':(?::|(?::' + '[0-9A-Fa-f]{1,4}' + '){1,7})' +
-                       '|' + // ends with "::" (except "::")
-                       '[0-9A-Fa-f]{1,4}' + '(?::' + '[0-9A-Fa-f]{1,4}' + '){0,6}::' +
-                       '|' + // contains no "::"
-                       '[0-9A-Fa-f]{1,4}' + '(?::' + '[0-9A-Fa-f]{1,4}' + '){7}' +
-                       ')';
+                       block = allowBlock ? '(?:\\/(?:12[0-8]|1[01][0-9]|[1-9]?\\d))?' : '';
+                       RE_IPV6_ADD =
+                               '(?:' + // starts with "::" (including "::")
+                               ':(?::|(?::' + '[0-9A-Fa-f]{1,4}' + '){1,7})' +
+                               '|' + // ends with "::" (except "::")
+                               '[0-9A-Fa-f]{1,4}' + '(?::' + '[0-9A-Fa-f]{1,4}' + '){0,6}::' +
+                               '|' + // contains no "::"
+                               '[0-9A-Fa-f]{1,4}' + '(?::' + '[0-9A-Fa-f]{1,4}' + '){7}' +
+                               ')';
 
                        if ( new RegExp( '^' + RE_IPV6_ADD + block + '$' ).test( address ) ) {
                                return true;
                        RE_IPV6_ADD = '[0-9A-Fa-f]{1,4}' + '(?:::?' + '[0-9A-Fa-f]{1,4}' + '){1,6}';
 
                        return (
-                               new RegExp( '^' + RE_IPV6_ADD + block + '$' ).test( address )
-                               && /::/.test( address )
-                               && !/::.*::/.test( address )
+                               new RegExp( '^' + RE_IPV6_ADD + block + '$' ).test( address ) &&
+                               /::/.test( address ) &&
+                               !/::.*::/.test( address )
                        );
                },
 
index 6396331..b453ac8 100644 (file)
@@ -18,6 +18,7 @@
                 *
                 * @ignore
                 * @private
+                * @return {Object} Viewport positions
                 */
                makeViewportFromWindow: function () {
                        var $window = $( window ),
@@ -85,7 +86,7 @@
                 */
                isElementCloseToViewport: function ( el, threshold, rectangle ) {
                        var viewport = rectangle ? $.extend( {}, rectangle ) : this.makeViewportFromWindow();
-                       threshold = threshold || 50 ;
+                       threshold = threshold || 50;
 
                        viewport.top -= threshold;
                        viewport.left -= threshold;
index cf448b0..094c4df 100644 (file)
        /**
         * Gets the height of the interface elements and the
         * gallery's caption.
+        *
+        * @return {number} Height
         */
        mw.GallerySlideshow.prototype.getChromeHeight = function () {
                return this.$interface.outerHeight() + this.$galleryCaption.outerHeight();
                if ( this.imageInfoCache[ imageSrc ] === undefined ) {
                        api = new mw.Api();
                        // TODO: This supports only gallery of images
-                       title = new mw.Title.newFromImg( $img );
+                       title = mw.Title.newFromImg( $img );
                        params = {
                                action: 'query',
                                formatversion: 2,
        };
 
        // Bootstrap all slideshow galleries
-       $( function () {
-               $( '.mw-gallery-slideshow' ).each( function () {
-                       /*jshint -W031 */
+       mw.hook( 'wikipage.content' ).add( function ( $content ) {
+               $content.find( '.mw-gallery-slideshow' ).each( function () {
+                       // eslint-disable-next-line no-new
                        new mw.GallerySlideshow( this );
-                       /*jshint +W031 */
                } );
        } );
 }( mediaWiki, jQuery, OO ) );
index 02bc1de..6038a57 100644 (file)
@@ -1,8 +1,10 @@
 /*!
  * Implement AJAX navigation for multi-page images so the user may browse without a full page reload.
  */
+
+/* eslint-disable no-use-before-define */
+
 ( function ( mw, $ ) {
-       /*jshint latedef:false */
        var jqXhr, $multipageimage, $spinner,
                cache = {},
                cacheOrder = [];
index 89bbbe7..6d6d46d 100644 (file)
                                rcid: rcid
                        } )
                        .done( function ( data ) {
+                               var title;
                                // Remove all patrollinks from the page (including any spinners inside).
                                $patrolLinks.closest( '.patrollink' ).remove();
                                if ( data.patrol !== undefined ) {
                                        // Success
-                                       var title = new mw.Title( data.patrol.title );
+                                       title = new mw.Title( data.patrol.title );
                                        mw.notify( mw.msg( 'markedaspatrollednotify', title.toText() ) );
                                } else {
                                        // This should never happen as errors should trigger fail
index 83d14b3..cb46b11 100644 (file)
@@ -43,9 +43,9 @@
                                        }
                                        $( e.delegateTarget ).remove();
                                }, function ( errorCode, data ) {
-                                       var message = data && data.error && data.error.messageHtml
-                                               ? $.parseHTML( data.error.messageHtml )
-                                               mw.msg( 'rollbackfailed' ),
+                                       var message = data && data.error && data.error.messageHtml ?
+                                               $.parseHTML( data.error.messageHtml ) :
+                                               mw.msg( 'rollbackfailed' ),
                                                type = errorCode === 'alreadyrolled' ? 'warn' : 'error';
 
                                        mw.notify( message, {
index 282799a..076357a 100644 (file)
@@ -3,6 +3,7 @@
        mw.page = {};
 
        $( function () {
+               var $diff;
                mw.util.init();
 
                /**
@@ -23,7 +24,7 @@
                 */
                mw.hook( 'wikipage.content' ).fire( $( '#mw-content-text' ) );
 
-               var $diff = $( 'table.diff[data-mw="interface"]' );
+               $diff = $( 'table.diff[data-mw="interface"]' );
                if ( $diff.length ) {
                        /**
                         * Fired when the diff is added to a page containing a diff
index c67b93e..0abb957 100644 (file)
@@ -1,7 +1,7 @@
 // Use DMY date format for Moment.js, in accordance with MediaWiki's date formatting routines.
 // This affects English only (and languages without localisations, that fall back to English).
 // http://momentjs.com/docs/#/customization/long-date-formats/
-/*global moment */
+/* global moment */
 moment.locale( 'en', {
        longDateFormat: {
                // Unchanged, but have to be repeated here:
index dd33b00..13f26f0 100644 (file)
@@ -1,4 +1,4 @@
-/*global moment, mw */
+/* global moment, mw */
 
 // HACK: Overwrite moment's i18n with MediaWiki's for the current language so that
 // wgTranslateNumerals is respected.
index 5f52d1e..c8acc86 100644 (file)
@@ -4,16 +4,16 @@
  */
 
 window.Node = window.Node || {
-       ELEMENT_NODE:                1,
-       ATTRIBUTE_NODE:              2,
-       TEXT_NODE:                   3,
-       CDATA_SECTION_NODE:          4,
-       ENTITY_REFERENCE_NODE:       5,
-       ENTITY_NODE:                 6,
+       ELEMENT_NODE: 1,
+       ATTRIBUTE_NODE: 2,
+       TEXT_NODE: 3,
+       CDATA_SECTION_NODE: 4,
+       ENTITY_REFERENCE_NODE: 5,
+       ENTITY_NODE: 6,
        PROCESSING_INSTRUCTION_NODE: 7,
-       COMMENT_NODE:                8,
-       DOCUMENT_NODE:               9,
-       DOCUMENT_TYPE_NODE:          10,
-       DOCUMENT_FRAGMENT_NODE:      11,
-       NOTATION_NODE:               12
+       COMMENT_NODE: 8,
+       DOCUMENT_NODE: 9,
+       DOCUMENT_TYPE_NODE: 10,
+       DOCUMENT_FRAGMENT_NODE: 11,
+       NOTATION_NODE: 12
 };
index 5e05590..82a00bc 100644 (file)
@@ -3,11 +3,11 @@
  *
  * This file is where we decide whether to initialise the modern run-time.
  */
-/*jshint unused: false */
-/*globals mw, RLQ: true, NORLQ: true, $VARS, $CODE, performance */
 
-var mediaWikiLoadStart = ( new Date() ).getTime(),
+/* global mw, $VARS, $CODE */
 
+// eslint-disable-next-line no-unused-vars
+var mediaWikiLoadStart = ( new Date() ).getTime(),
        mwPerformance = ( window.performance && performance.mark ) ? performance : {
                mark: function () {}
        };
@@ -21,17 +21,19 @@ mwPerformance.mark( 'mwLoadStart' );
  * - DOM Level 4 & Selectors API Level 1
  * - HTML5 & Web Storage
  * - DOM Level 2 Events
+ * - JSON
  *
  * Browsers we support in our modern run-time (Grade A):
- * - Chrome
+ * - Chrome 4+
  * - IE 9+
  * - Firefox 3.5+
- * - Safari 4+
+ * - Safari 5+
  * - Opera 10.5+
- * - Mobile Safari (iOS 1+)
+ * - Mobile Safari (iOS 4+)
  * - Android 2.0+
  *
  * Browsers we support in our no-javascript run-time (Grade C):
+ * - Chrome 1+
  * - IE 6+
  * - Firefox 3+
  * - Safari 3+
@@ -44,30 +46,37 @@ mwPerformance.mark( 'mwLoadStart' );
  * - Nokia's Ovi Browser
  * - MeeGo's browser
  * - Google Glass
+ * - UC Mini (speed mode on)
  *
  * Other browsers that pass the check are considered Grade X.
+ *
+ * @param {string} [str] User agent, defaults to navigator.userAgent
+ * @return {boolean} User agent is compatible with MediaWiki JS
  */
 function isCompatible( str ) {
        var ua = str || navigator.userAgent;
        return !!(
                // http://caniuse.com/#feat=queryselector
-               'querySelector' in document
+               'querySelector' in document &&
 
                // http://caniuse.com/#feat=namevalue-storage
                // https://developer.blackberry.com/html5/apis/v1_0/localstorage.html
                // https://blog.whatwg.org/this-week-in-html-5-episode-30
-               && 'localStorage' in window
+               'localStorage' in window &&
 
                // http://caniuse.com/#feat=addeventlistener
-               && 'addEventListener' in window
+               'addEventListener' in window &&
+
+               // http://caniuse.com/#feat=json
+               // https://phabricator.wikimedia.org/T141344#2784065
+               ( window.JSON && JSON.stringify && JSON.parse ) &&
 
                // Hardcoded exceptions for browsers that pass the requirement but we don't want to
                // support in the modern run-time.
-               && !(
-                       ua.match( /webOS\/1\.[0-4]|SymbianOS|Series60|NetFront|Opera Mini|S40OviBrowser|MeeGo|Android.+Glass/ ) ||
-                       ua.match( /PlayStation/i ) ||
-                       // UC Mini (speed mode on)
-                       ua.match( /^Mozilla\/5\.0 .+ Gecko\/$/ )
+               // Note: Please extend the regex instead of adding new ones
+               !(
+                       ua.match( /webOS\/1\.[0-4]|SymbianOS|Series60|NetFront|Opera Mini|S40OviBrowser|MeeGo|Android.+Glass|^Mozilla\/5\.0 .+ Gecko\/$/ ) ||
+                       ua.match( /PlayStation/i )
                )
        );
 }
@@ -112,6 +121,7 @@ function isCompatible( str ) {
 
                // Must be after mw.config.set because these callbacks may use mw.loader which
                // needs to have values 'skin', 'debug' etc. from mw.config.
+               // eslint-disable-next-line vars-on-top
                var RLQ = window.RLQ || [];
                while ( RLQ.length ) {
                        RLQ.shift()();
index 0bfa318..66df315 100644 (file)
@@ -35,6 +35,7 @@ $wgAutoloadClasses += [
        'DjVuSupport' => "$testDir/parser/DjVuSupport.php",
        'TestRecorder' => "$testDir/parser/TestRecorder.php",
        'MultiTestRecorder' => "$testDir/parser/MultiTestRecorder.php",
+       'ParserTestMockParser' => "$testDir/parser/ParserTestMockParser.php",
        'ParserTestRunner' => "$testDir/parser/ParserTestRunner.php",
        'ParserTestParserHook' => "$testDir/parser/ParserTestParserHook.php",
        'ParserTestPrinter' => "$testDir/parser/ParserTestPrinter.php",
diff --git a/tests/parser/ParserTestMockParser.php b/tests/parser/ParserTestMockParser.php
new file mode 100644 (file)
index 0000000..0757b34
--- /dev/null
@@ -0,0 +1,20 @@
+<?php
+
+/**
+ * A parser used during article insertion which does nothing, to avoid
+ * unnecessary log noise and other interference with debugging.
+ */
+class ParserTestMockParser {
+       public function preSaveTransform( $text, Title $title, User $user,
+               ParserOptions $options, $clearState = true
+       ) {
+               return $text;
+       }
+
+       public function parse(
+               $text, Title $title, ParserOptions $options,
+               $linestart = true, $clearState = true, $revid = null
+       ) {
+               return new ParserOutput;
+       }
+}
index e433c2e..04c142a 100644 (file)
@@ -426,7 +426,7 @@ class ParserTestRunner {
         * @param ScopedCallback|null A ScopedCallback to consume
         * @return ScopedCallback
         */
-       protected function createTeardownObject( $teardown, $nextTeardown ) {
+       protected function createTeardownObject( $teardown, $nextTeardown = null ) {
                return new ScopedCallback( function() use ( $teardown, $nextTeardown ) {
                        // Schedule teardown snippets in reverse order
                        $teardown = array_reverse( $teardown );
@@ -1503,7 +1503,14 @@ class ParserTestRunner {
                        throw new MWException( "duplicate article '$name' at $file:$line\n" );
                }
 
+               // Use mock parser, to make debugging of actual parser tests simpler.
+               // But initialise the MessageCache clone first, don't let MessageCache
+               // get a reference to the mock object.
+               MessageCache::singleton()->getParser();
+               $restore = $this->executeSetupSnippets( [ 'wgParser' => new ParserTestMockParser ] );
                $status = $page->doEditContent( ContentHandler::makeContent( $text, $title ), '', EDIT_NEW );
+               $restore();
+
                if ( !$status->isOK() ) {
                        throw new MWException( $status->getWikiText( false, false, 'en' ) );
                }
index 9fe3029..5b17eac 100644 (file)
@@ -7440,6 +7440,23 @@ Piped link with no link text
 <p>[[Thomas Bek (bishop of St David's)|]]</p>
 !! end
 
+!! test
+Piped link with empty link text
+!! wikitext
+[[Main Page|<nowiki />]] - empty nowiki
+[[Main Page| ]] - empty space
+[[Main Page|&nbsp;]] - empty non breaking space
+!! html/php
+<p><a href="/wiki/Main_Page" title="Main Page"></a> - empty nowiki
+<a href="/wiki/Main_Page" title="Main Page"> </a> - empty space
+<a href="/wiki/Main_Page" title="Main Page">&#160;</a> - empty non breaking space
+</p>
+!! html/parsoid
+<p><a rel="mw:WikiLink" href="./Main_Page" title="Main Page"><meta typeof="mw:Placeholder" data-parsoid='{"src":"&lt;nowiki />"}'/></a> - empty nowiki
+<a rel="mw:WikiLink" href="./Main_Page" title="Main Page"> </a> - empty space
+<a rel="mw:WikiLink" href="./Main_Page" title="Main Page"><span typeof="mw:Entity" data-parsoid='{"src":"&amp;nbsp;","srcContent":" "}'> </span></a> - empty non breaking space</p>
+!! end
+
 !! test
 Broken link
 !! wikitext
index e0f4416..db1df5c 100644 (file)
@@ -81,6 +81,13 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
         */
        private $mwGlobals = [];
 
+       /**
+        * Holds list of MediaWiki configuration settings to be unset in tearDown().
+        * See also setMwGlobals().
+        * @var array
+        */
+       private $mwGlobalsToUnset = [];
+
        /**
         * Holds original loggers which have been replaced by setLogger()
         * @var LoggerInterface[]
@@ -535,7 +542,11 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                foreach ( $this->mwGlobals as $key => $value ) {
                        $GLOBALS[$key] = $value;
                }
+               foreach ( $this->mwGlobalsToUnset as $value ) {
+                       unset( $GLOBALS[$value] );
+               }
                $this->mwGlobals = [];
+               $this->mwGlobalsToUnset = [];
                $this->restoreLoggers();
 
                if ( self::$serviceLocator && MediaWikiServices::getInstance() !== self::$serviceLocator ) {
@@ -684,8 +695,6 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
         *
         * @param array|string $globalKeys Key to the global variable, or an array of keys.
         *
-        * @throws Exception When trying to stash an unset global
-        *
         * @note To allow changes to global variables to take effect on global service instances,
         *       call overrideMwServices().
         *
@@ -700,9 +709,13 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                        // NOTE: make sure we only save the global once or a second call to
                        // setMwGlobals() on the same global would override the original
                        // value.
-                       if ( !array_key_exists( $globalKey, $this->mwGlobals ) ) {
+                       if (
+                               !array_key_exists( $globalKey, $this->mwGlobals ) &&
+                               !array_key_exists( $globalKey, $this->mwGlobalsToUnset )
+                       ) {
                                if ( !array_key_exists( $globalKey, $GLOBALS ) ) {
-                                       throw new Exception( "Global with key {$globalKey} doesn't exist and cant be stashed" );
+                                       $this->mwGlobalsToUnset[$globalKey] = $globalKey;
+                                       continue;
                                }
                                // NOTE: we serialize then unserialize the value in case it is an object
                                // this stops any objects being passed by reference. We could use clone
index d4ebe34..4b60622 100644 (file)
@@ -520,10 +520,6 @@ class TemporaryPasswordPrimaryAuthenticationProviderTest extends \MediaWikiTestC
                $provider = $this->getProvider( [ 'emailEnabled' => false ] );
                $status = $provider->providerAllowsAuthenticationDataChange( $req, true );
                $this->assertEquals( \StatusValue::newFatal( 'passwordreset-emaildisabled' ), $status );
-               $req->hasBackchannel = true;
-               $status = $provider->providerAllowsAuthenticationDataChange( $req, true );
-               $this->assertFalse( $status->hasMessage( 'passwordreset-emaildisabled' ) );
-               $req->hasBackchannel = false;
 
                $provider = $this->getProvider( [ 'passwordReminderResendTime' => 10 ] );
                $status = $provider->providerAllowsAuthenticationDataChange( $req, true );
@@ -686,18 +682,10 @@ class TemporaryPasswordPrimaryAuthenticationProviderTest extends \MediaWikiTestC
                $provider = $this->getProvider( [ 'emailEnabled' => false ] );
                $status = $provider->testForAccountCreation( $user, $creator, [ $req ] );
                $this->assertEquals( \StatusValue::newFatal( 'emaildisabled' ), $status );
-               $req->hasBackchannel = true;
-               $status = $provider->testForAccountCreation( $user, $creator, [ $req ] );
-               $this->assertFalse( $status->hasMessage( 'emaildisabled' ) );
-               $req->hasBackchannel = false;
 
                $provider = $this->getProvider( [ 'emailEnabled' => true ] );
                $status = $provider->testForAccountCreation( $user, $creator, [ $req ] );
                $this->assertEquals( \StatusValue::newFatal( 'noemailcreate' ), $status );
-               $req->hasBackchannel = true;
-               $status = $provider->testForAccountCreation( $user, $creator, [ $req ] );
-               $this->assertFalse( $status->hasMessage( 'noemailcreate' ) );
-               $req->hasBackchannel = false;
 
                $user->setEmail( 'test@localhost.localdomain' );
                $status = $provider->testForAccountCreation( $user, $creator, [ $req ] );
index 5806003..c945885 100644 (file)
@@ -196,7 +196,7 @@ class ThrottlerTest extends \MediaWikiTestCase {
                        ->setMethods( [ 'log' ] )
                        ->getMockForAbstractClass();
                $logger->expects( $this->once() )->method( 'log' )->with( $this->anything(), $this->anything(), [
-                       'type' => 'custom',
+                       'throttle' => 'custom',
                        'index' => 0,
                        'ip' => '1.2.3.4',
                        'username' => 'SomeUser',
index 9c723c0..e5bb237 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+use MediaWiki\MediaWikiServices;
 
 /**
  * @group Database
@@ -39,7 +40,7 @@ class GenderCacheTest extends MediaWikiLangTestCase {
         * @covers GenderCache::getGenderOf
         */
        public function testUserName( $userKey, $expectedGender ) {
-               $genderCache = GenderCache::singleton();
+               $genderCache = MediaWikiServices::getInstance()->getGenderCache();
                $username = isset( self::$nameMap[$userKey] ) ? self::$nameMap[$userKey] : $userKey;
                $gender = $genderCache->getGenderOf( $username );
                $this->assertEquals( $gender, $expectedGender, "GenderCache normal" );
@@ -53,7 +54,7 @@ class GenderCacheTest extends MediaWikiLangTestCase {
         */
        public function testUserObjects( $userKey, $expectedGender ) {
                $username = isset( self::$nameMap[$userKey] ) ? self::$nameMap[$userKey] : $userKey;
-               $genderCache = GenderCache::singleton();
+               $genderCache = MediaWikiServices::getInstance()->getGenderCache();
                $gender = $genderCache->getGenderOf( $username );
                $this->assertEquals( $gender, $expectedGender, "GenderCache normal" );
        }
@@ -79,7 +80,7 @@ class GenderCacheTest extends MediaWikiLangTestCase {
         */
        public function testStripSubpages( $userKey, $expectedGender ) {
                $username = isset( self::$nameMap[$userKey] ) ? self::$nameMap[$userKey] : $userKey;
-               $genderCache = GenderCache::singleton();
+               $genderCache = MediaWikiServices::getInstance()->getGenderCache();
                $gender = $genderCache->getGenderOf( "$username/subpage" );
                $this->assertEquals( $gender, $expectedGender, "GenderCache must strip of subpages" );
        }
index fbabf7f..33e3a25 100644 (file)
@@ -49,9 +49,9 @@ class HtmlAutoCompleteSelectFieldTest extends MediaWikiTestCase {
         */
        function testOptionalSelectElement() {
                $params = [
-                       'fieldname'    => 'Test',
-                       'autocomplete' => $this->options,
-                       'options'      => $this->options,
+                       'fieldname'         => 'Test',
+                       'autocomplete-data' => $this->options,
+                       'options'           => $this->options,
                ];
 
                $field = new HTMLAutoCompleteSelectField( $params );
index d2a0724..528c322 100644 (file)
@@ -114,22 +114,22 @@ class ResourceLoaderClientHtmlTest extends PHPUnit_Framework_TestCase {
                                'test.scripts.mixed.user.empty' => 'ready',
                        ],
                        'general' => [
-                               'top' => [ 'test.top' ],
-                               'bottom' => [ 'test' ],
+                               'test',
+                               'test.top',
                        ],
                        'styles' => [
                                'test.styles.mixed',
                                'test.styles.pure',
                        ],
                        'scripts' => [
-                               'top' => [ 'test.scripts.top' ],
-                               'bottom' => [ 'test.scripts' ],
+                               'test.scripts',
+                               'test.scripts.top',
                        ],
                        'embed' => [
                                'styles' => [ 'test.styles.private' ],
                                'general' => [
-                                       'top' => [ 'test.private.top' ],
-                                       'bottom' => [ 'test.private.bottom' ],
+                                       'test.private.bottom',
+                                       'test.private.top',
                                ],
                        ],
                ];
@@ -202,13 +202,7 @@ class ResourceLoaderClientHtmlTest extends PHPUnit_Framework_TestCase {
                        'test.scripts',
                ] );
 
-               // @codingStandardsIgnoreStart Generic.Files.LineLength
-               $expected = '<script>(window.RLQ=window.RLQ||[]).push(function(){'
-                       . 'mw.loader.implement("test.private.bottom@{blankVer}",function($,jQuery,require,module){},{"css":[]});'
-                       . 'mw.loader.load("/w/load.php?debug=false\u0026lang=nl\u0026modules=test.scripts\u0026only=scripts\u0026skin=fallback");'
-                       . 'mw.loader.load(["test"]);'
-                       . '});</script>';
-               // @codingStandardsIgnoreEnd
+               $expected = '';
                $expected = self::expandVariables( $expected );
 
                $this->assertEquals( $expected, $client->getBodyHtml() );
index c24a321..1ecdf21 100644 (file)
@@ -51,6 +51,16 @@ class ResourceLoaderTest extends ResourceLoaderTestCase {
                $this->assertEquals( $module, $resourceLoader->getModule( 'test' ) );
        }
 
+       /**
+        * @covers ResourceLoader::register
+        */
+       public function testRegisterEmptyString() {
+               $module = new ResourceLoaderTestModule();
+               $resourceLoader = new EmptyResourceLoader();
+               $resourceLoader->register( '', $module );
+               $this->assertEquals( $module, $resourceLoader->getModule( '' ) );
+       }
+
        /**
         * @covers ResourceLoader::register
         */
index 4db636b..7ff882a 100644 (file)
@@ -11,7 +11,7 @@ class PasswordResetTest extends PHPUnit_Framework_TestCase {
         */
        public function testIsAllowed( $passwordResetRoutes, $enableEmail,
                $allowsAuthenticationDataChange, $canEditPrivate, $canSeePassword,
-               $userIsBlocked, $isAllowed, $isAllowedToDisplayPassword
+               $userIsBlocked, $isAllowed
        ) {
                $config = new HashConfig( [
                        'PasswordResetRoutes' => $passwordResetRoutes,
@@ -40,8 +40,6 @@ class PasswordResetTest extends PHPUnit_Framework_TestCase {
                $passwordReset = new PasswordReset( $config, $authManager );
 
                $this->assertSame( $isAllowed, $passwordReset->isAllowed( $user )->isGood() );
-               $this->assertSame( $isAllowedToDisplayPassword,
-                       $passwordReset->isAllowed( $user, true )->isGood() );
        }
 
        public function provideIsAllowed() {
@@ -54,7 +52,6 @@ class PasswordResetTest extends PHPUnit_Framework_TestCase {
                                'canSeePassword' => true,
                                'userIsBlocked' => false,
                                'isAllowed' => false,
-                               'isAllowedToDisplayPassword' => false,
                        ],
                        [
                                'passwordResetRoutes' => [ 'username' => true ],
@@ -64,7 +61,6 @@ class PasswordResetTest extends PHPUnit_Framework_TestCase {
                                'canSeePassword' => true,
                                'userIsBlocked' => false,
                                'isAllowed' => false,
-                               'isAllowedToDisplayPassword' => false,
                        ],
                        [
                                'passwordResetRoutes' => [ 'username' => true ],
@@ -74,7 +70,6 @@ class PasswordResetTest extends PHPUnit_Framework_TestCase {
                                'canSeePassword' => true,
                                'userIsBlocked' => false,
                                'isAllowed' => false,
-                               'isAllowedToDisplayPassword' => false,
                        ],
                        [
                                'passwordResetRoutes' => [ 'username' => true ],
@@ -84,7 +79,6 @@ class PasswordResetTest extends PHPUnit_Framework_TestCase {
                                'canSeePassword' => true,
                                'userIsBlocked' => false,
                                'isAllowed' => false,
-                               'isAllowedToDisplayPassword' => false,
                        ],
                        [
                                'passwordResetRoutes' => [ 'username' => true ],
@@ -94,7 +88,6 @@ class PasswordResetTest extends PHPUnit_Framework_TestCase {
                                'canSeePassword' => true,
                                'userIsBlocked' => true,
                                'isAllowed' => false,
-                               'isAllowedToDisplayPassword' => false,
                        ],
                        [
                                'passwordResetRoutes' => [ 'username' => true ],
@@ -104,7 +97,6 @@ class PasswordResetTest extends PHPUnit_Framework_TestCase {
                                'canSeePassword' => false,
                                'userIsBlocked' => false,
                                'isAllowed' => true,
-                               'isAllowedToDisplayPassword' => false,
                        ],
                        [
                                'passwordResetRoutes' => [ 'username' => true ],
@@ -114,7 +106,6 @@ class PasswordResetTest extends PHPUnit_Framework_TestCase {
                                'canSeePassword' => true,
                                'userIsBlocked' => false,
                                'isAllowed' => true,
-                               'isAllowedToDisplayPassword' => true,
                        ],
                ];
        }
index 199fc8f..0819bf2 100644 (file)
@@ -3,6 +3,8 @@
 define( 'NS_UNITTEST', 5600 );
 define( 'NS_UNITTEST_TALK', 5601 );
 
+use MediaWiki\MediaWikiServices;
+
 /**
  * @group Database
  */
@@ -347,6 +349,12 @@ class UserTest extends MediaWikiTestCase {
                $user->saveSettings();
 
                $user = User::newFromName( $user->getName() );
+               $user->load( User::READ_LATEST );
+               $this->assertEquals( 'test', $user->getOption( 'userjs-someoption' ) );
+               $this->assertEquals( 200, $user->getOption( 'cols' ) );
+
+               $user = User::newFromName( $user->getName() );
+               MediaWikiServices::getInstance()->getMainWANObjectCache()->clearProcessCache();
                $this->assertEquals( 'test', $user->getOption( 'userjs-someoption' ) );
                $this->assertEquals( 200, $user->getOption( 'cols' ) );
        }
@@ -578,4 +586,162 @@ class UserTest extends MediaWikiTestCase {
                $users->rewind();
                $this->assertTrue( $user->equals( $users->current() ) );
        }
+
+       /**
+        * When a user is autoblocked a cookie is set with which to track them
+        * in case they log out and change IP addresses.
+        * @link https://phabricator.wikimedia.org/T5233
+        */
+       public function testAutoblockCookies() {
+               // Set up the bits of global configuration that we use.
+               $this->setMwGlobals( [
+                       'wgCookieSetOnAutoblock' => true,
+                       'wgCookiePrefix' => 'wmsitetitle',
+               ] );
+
+               // 1. Log in a test user, and block them.
+               $user1tmp = $this->getTestUser()->getUser();
+               $request1 = new FauxRequest();
+               $request1->getSession()->setUser( $user1tmp );
+               $expiryFiveDays = time() + ( 5 * 24 * 60 * 60 );
+               $block = new Block( [
+                       'enableAutoblock' => true,
+                       'expiry' => wfTimestamp( TS_MW, $expiryFiveDays ),
+               ] );
+               $block->setTarget( $user1tmp );
+               $block->insert();
+               $user1 = User::newFromSession( $request1 );
+               $user1->mBlock = $block;
+               $user1->load();
+
+               // Confirm that the block has been applied as required.
+               $this->assertTrue( $user1->isLoggedIn() );
+               $this->assertTrue( $user1->isBlocked() );
+               $this->assertEquals( Block::TYPE_USER, $block->getType() );
+               $this->assertTrue( $block->isAutoblocking() );
+               $this->assertGreaterThanOrEqual( 1, $block->getId() );
+
+               // Test for the desired cookie name, value, and expiry.
+               $cookies = $request1->response()->getCookies();
+               $this->assertArrayHasKey( 'wmsitetitleBlockID', $cookies );
+               $this->assertEquals( $block->getId(), $cookies['wmsitetitleBlockID']['value'] );
+               $this->assertEquals( $expiryFiveDays, $cookies['wmsitetitleBlockID']['expire'] );
+
+               // 2. Create a new request, set the cookies, and see if the (anon) user is blocked.
+               $request2 = new FauxRequest();
+               $request2->setCookie( 'BlockID', $block->getId() );
+               $user2 = User::newFromSession( $request2 );
+               $user2->load();
+               $this->assertNotEquals( $user1->getId(), $user2->getId() );
+               $this->assertNotEquals( $user1->getToken(), $user2->getToken() );
+               $this->assertTrue( $user2->isAnon() );
+               $this->assertFalse( $user2->isLoggedIn() );
+               $this->assertTrue( $user2->isBlocked() );
+               $this->assertEquals( true, $user2->getBlock()->isAutoblocking() ); // Non-strict type-check.
+               // Can't directly compare the objects becuase of member type differences.
+               // One day this will work: $this->assertEquals( $block, $user2->getBlock() );
+               $this->assertEquals( $block->getId(), $user2->getBlock()->getId() );
+               $this->assertEquals( $block->getExpiry(), $user2->getBlock()->getExpiry() );
+
+               // 3. Finally, set up a request as a new user, and the block should still be applied.
+               $user3tmp = $this->getTestUser()->getUser();
+               $request3 = new FauxRequest();
+               $request3->getSession()->setUser( $user3tmp );
+               $request3->setCookie( 'BlockID', $block->getId() );
+               $user3 = User::newFromSession( $request3 );
+               $user3->load();
+               $this->assertTrue( $user3->isLoggedIn() );
+               $this->assertTrue( $user3->isBlocked() );
+               $this->assertEquals( true, $user3->getBlock()->isAutoblocking() ); // Non-strict type-check.
+
+               // Clean up.
+               $block->delete();
+       }
+
+       /**
+        * Make sure that no cookie is set to track autoblocked users
+        * when $wgCookieSetOnAutoblock is false.
+        */
+       public function testAutoblockCookiesDisabled() {
+               // Set up the bits of global configuration that we use.
+               $this->setMwGlobals( [
+                       'wgCookieSetOnAutoblock' => false,
+                       'wgCookiePrefix' => 'wm_no_cookies',
+               ] );
+
+               // 1. Log in a test user, and block them.
+               $testUser = $this->getTestUser()->getUser();
+               $request1 = new FauxRequest();
+               $request1->getSession()->setUser( $testUser );
+               $block = new Block( [ 'enableAutoblock' => true ] );
+               $block->setTarget( $testUser );
+               $block->insert();
+               $user = User::newFromSession( $request1 );
+               $user->mBlock = $block;
+               $user->load();
+
+               // 2. Test that the cookie IS NOT present.
+               $this->assertTrue( $user->isLoggedIn() );
+               $this->assertTrue( $user->isBlocked() );
+               $this->assertEquals( Block::TYPE_USER, $block->getType() );
+               $this->assertTrue( $block->isAutoblocking() );
+               $this->assertGreaterThanOrEqual( 1, $user->getBlockId() );
+               $this->assertGreaterThanOrEqual( $block->getId(), $user->getBlockId() );
+               $cookies = $request1->response()->getCookies();
+               $this->assertArrayNotHasKey( 'wm_no_cookiesBlockID', $cookies );
+
+               // Clean up.
+               $block->delete();
+       }
+
+       /**
+        * When a user is autoblocked and a cookie is set to track them, the expiry time of the cookie
+        * should match the block's expiry. If the block is infinite, the cookie expiry time should
+        * match $wgCookieExpiration. If the expiry time is changed, the cookie's should change with it.
+        */
+       public function testAutoblockCookieInfiniteExpiry() {
+               $cookieExpiration = 20 * 24 * 60 * 60; // 20 days
+               $this->setMwGlobals( [
+                       'wgCookieSetOnAutoblock' => true,
+                       'wgCookieExpiration' => $cookieExpiration,
+                       'wgCookiePrefix' => 'wm_infinite_block',
+               ] );
+               // 1. Log in a test user, and block them indefinitely.
+               $user1Tmp = $this->getTestUser()->getUser();
+               $request1 = new FauxRequest();
+               $request1->getSession()->setUser( $user1Tmp );
+               $block = new Block( [ 'enableAutoblock' => true, 'expiry' => 'infinity' ] );
+               $block->setTarget( $user1Tmp );
+               $block->insert();
+               $user1 = User::newFromSession( $request1 );
+               $user1->mBlock = $block;
+               $user1->load();
+
+               // 2. Test the cookie's expiry timestamp.
+               $this->assertTrue( $user1->isLoggedIn() );
+               $this->assertTrue( $user1->isBlocked() );
+               $this->assertEquals( Block::TYPE_USER, $block->getType() );
+               $this->assertTrue( $block->isAutoblocking() );
+               $this->assertGreaterThanOrEqual( 1, $user1->getBlockId() );
+               $cookies = $request1->response()->getCookies();
+               // Calculate the expected cookie expiry date.
+               $this->assertArrayHasKey( 'wm_infinite_blockBlockID', $cookies );
+               $this->assertEquals( time() + $cookieExpiration, $cookies['wm_infinite_blockBlockID']['expire'] );
+
+               // 3. Change the block's expiry (to 2 days), and the cookie's should be changed also.
+               $newExpiry = time() + 2 * 24 * 60 * 60;
+               $block->mExpiry = wfTimestamp( TS_MW, $newExpiry );
+               $block->update();
+               $user2tmp = $this->getTestUser()->getUser();
+               $request2 = new FauxRequest();
+               $request2->getSession()->setUser( $user2tmp );
+               $user2 = User::newFromSession( $request2 );
+               $user2->mBlock = $block;
+               $user2->load();
+               $cookies = $request2->response()->getCookies();
+               $this->assertEquals( $newExpiry, $cookies['wm_infinite_blockBlockID']['expire'] );
+
+               // Clean up.
+               $block->delete();
+       }
 }
index 16299aa..11a25c4 100644 (file)
@@ -43,6 +43,9 @@
                <testsuite name="structure">
                        <directory>structure</directory>
                </testsuite>
+               <testsuite name="tests">
+                       <directory>tests</directory>
+               </testsuite>
                <testsuite name="uploadfromurl">
                        <file>suites/UploadFromUrlTestSuite.php</file>
                </testsuite>
index 5d2f37e..edc81ff 100644 (file)
@@ -9,8 +9,6 @@ use Psr\Log\LoggerInterface;
  */
 class MediaWikiTestCaseTest extends MediaWikiTestCase {
 
-       const GLOBAL_KEY_NONEXISTING = 'MediaWikiTestCaseTestGLOBAL-NONExisting';
-
        private static $startGlobals = [
                'MediaWikiTestCaseTestGLOBAL-ExistingString' => 'foo',
                'MediaWikiTestCaseTestGLOBAL-ExistingStringEmpty' => '',
@@ -90,14 +88,22 @@ class MediaWikiTestCaseTest extends MediaWikiTestCase {
 
        /**
         * @covers MediaWikiTestCase::stashMwGlobals
+        * @covers MediaWikiTestCase::tearDown
         */
-       public function testExceptionThrownWhenStashingNonExistentGlobals() {
-               $this->setExpectedException(
-                       'Exception',
-                       'Global with key ' . self::GLOBAL_KEY_NONEXISTING . ' doesn\'t exist and cant be stashed'
+       public function testSetNonExistentGlobalsAreUnsetOnTearDown() {
+               $globalKey = 'abcdefg1234567';
+               $this->setMwGlobals( $globalKey, true );
+               $this->assertTrue(
+                       $GLOBALS[$globalKey],
+                       'Global failed to correctly set'
                );
 
-               $this->stashMwGlobals( self::GLOBAL_KEY_NONEXISTING );
+               $this->tearDown();
+
+               $this->assertFalse(
+                       isset( $GLOBALS[$globalKey] ),
+                       'Global failed to be correctly unset'
+               );
        }
 
        public function testOverrideMwServices() {
@@ -132,10 +138,9 @@ class MediaWikiTestCaseTest extends MediaWikiTestCase {
 
        /**
         * @covers MediaWikiTestCase::setLogger
-        * @covers MediaWikiTestCase::restoreLogger
+        * @covers MediaWikiTestCase::restoreLoggers
         */
-       public function testLoggersAreRestoredOnTearDown() {
-               // replacing an existing logger
+       public function testLoggersAreRestoredOnTearDown_replacingExistingLogger() {
                $logger1 = LoggerFactory::getInstance( 'foo' );
                $this->setLogger( 'foo', $this->getMock( LoggerInterface::class ) );
                $logger2 = LoggerFactory::getInstance( 'foo' );
@@ -144,17 +149,27 @@ class MediaWikiTestCaseTest extends MediaWikiTestCase {
 
                $this->assertSame( $logger1, $logger3 );
                $this->assertNotSame( $logger1, $logger2 );
+       }
 
-               // replacing a non-existing logger
+       /**
+        * @covers MediaWikiTestCase::setLogger
+        * @covers MediaWikiTestCase::restoreLoggers
+        */
+       public function testLoggersAreRestoredOnTearDown_replacingNonExistingLogger() {
                $this->setLogger( 'foo', $this->getMock( LoggerInterface::class ) );
-               $logger1 = LoggerFactory::getInstance( 'bar' );
+               $logger1 = LoggerFactory::getInstance( 'foo' );
                $this->tearDown();
-               $logger2 = LoggerFactory::getInstance( 'bar' );
+               $logger2 = LoggerFactory::getInstance( 'foo' );
 
                $this->assertNotSame( $logger1, $logger2 );
                $this->assertInstanceOf( '\Psr\Log\LoggerInterface', $logger2 );
+       }
 
-               // replacing same logger twice
+       /**
+        * @covers MediaWikiTestCase::setLogger
+        * @covers MediaWikiTestCase::restoreLoggers
+        */
+       public function testLoggersAreRestoredOnTearDown_replacingSameLoggerTwice() {
                $logger1 = LoggerFactory::getInstance( 'baz' );
                $this->setLogger( 'foo', $this->getMock( LoggerInterface::class ) );
                $this->setLogger( 'foo', $this->getMock( LoggerInterface::class ) );
index b79c192..0b28684 100644 (file)
@@ -25,6 +25,9 @@
        // killing the test and assuming timeout failure.
        QUnit.config.testTimeout = 60 * 1000;
 
+       // Reduce default animation duration from 400ms to 0ms for unit tests
+       $.fx.speeds._default = 0;
+
        // Add a checkbox to QUnit header to toggle MediaWiki ResourceLoader debug mode.
        QUnit.config.urlConfig.push( {
                id: 'debug',
index 9afd793..ca6a512 100644 (file)
@@ -1,18 +1,15 @@
 ( function ( $ ) {
-       QUnit.module( 'jquery.color', QUnit.newMwEnvironment( {
-               setup: function () {
-                       this.clock = this.sandbox.useFakeTimers();
-               }
-       } ) );
+       QUnit.module( 'jquery.color', QUnit.newMwEnvironment() );
 
-       QUnit.test( 'animate', 1, function ( assert ) {
-               var $canvas = $( '<div>' ).css( 'background-color', '#fff' );
+       QUnit.test( 'animate', function ( assert ) {
+               var done = assert.async(),
+                       $canvas = $( '<div>' ).css( 'background-color', '#fff' ).appendTo( '#qunit-fixture' );
 
-               $canvas.animate( { backgroundColor: '#000' }, 10 ).promise().then( function () {
-                       var endColors = $.colorUtil.getRGB( $canvas.css( 'background-color' ) );
-                       assert.deepEqual( endColors, [ 0, 0, 0 ], 'end state' );
-               } );
-
-               this.clock.tick( 20 );
+               $canvas.animate( { 'background-color': '#000' }, 3 ).promise()
+                       .done( function () {
+                               var endColors = $.colorUtil.getRGB( $canvas.css( 'background-color' ) );
+                               assert.deepEqual( endColors, [ 0, 0, 0 ], 'end state' );
+                       } )
+                       .always( done );
        } );
 }( jQuery ) );
index c51e409..9c7660f 100644 (file)
@@ -1,11 +1,7 @@
 ( function ( mw, $ ) {
        var loremIpsum = 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit.';
 
-       QUnit.module( 'jquery.makeCollapsible', QUnit.newMwEnvironment( {
-               setup: function () {
-                       this.clock = this.sandbox.useFakeTimers();
-               }
-       } ) );
+       QUnit.module( 'jquery.makeCollapsible', QUnit.newMwEnvironment() );
 
        function prepareCollapsible( html, options ) {
                return $( $.parseHTML( html ) )
 
                        // ...expanding happens here
                        $toggle.trigger( 'click' );
-                       test.clock.tick( 500 );
                } );
 
                // ...collapsing happens here
                $toggle.trigger( 'click' );
-               test.clock.tick( 500 );
        } );
 
        QUnit.test( 'basic operation (<div>)', 5, function ( assert ) {
                        } );
 
                        $toggle.trigger( 'click' );
-                       test.clock.tick( 500 );
                } );
 
                $toggle.trigger( 'click' );
-               test.clock.tick( 500 );
        } );
 
        QUnit.test( 'basic operation (<table>)', 7, function ( assert ) {
                        } );
 
                        $toggle.trigger( 'click' );
-                       test.clock.tick( 500 );
                } );
 
                $toggle.trigger( 'click' );
-               test.clock.tick( 500 );
        } );
 
        function tableWithCaptionTest( $collapsible, test, assert ) {
                        } );
 
                        $toggle.trigger( 'click' );
-                       test.clock.tick( 500 );
                } );
 
                $toggle.trigger( 'click' );
-               test.clock.tick( 500 );
        }
 
        QUnit.test( 'basic operation (<table> with caption)', 10, function ( assert ) {
                        } );
 
                        $toggle.trigger( 'click' );
-                       test.clock.tick( 500 );
                } );
 
                $toggle.trigger( 'click' );
-               test.clock.tick( 500 );
        }
 
        QUnit.test( 'basic operation (<ul>)', 7, function ( assert ) {
                } );
 
                $collapsible.find( '.mw-collapsible-toggle' ).trigger( 'click' );
-               this.clock.tick( 500 );
        } );
 
        QUnit.test( 'initial collapse (options.collapsed)', 2, function ( assert ) {
                } );
 
                $collapsible.find( '.mw-collapsible-toggle' ).trigger( 'click' );
-               this.clock.tick( 500 );
        } );
 
        QUnit.test( 'clicks on links inside toggler pass through (options.linksPassthru)', 2, function ( assert ) {
                } );
 
                $collapsible.find( '.mw-collapsible-toggle' ).trigger( 'click' );
-               this.clock.tick( 500 );
        } );
 
        QUnit.test( 'collapse/expand text (options.collapseText, options.expandText)', 2, function ( assert ) {
                } );
 
                $collapsible.find( '.mw-collapsible-toggle' ).trigger( 'click' );
-               this.clock.tick( 500 );
        } );
 
        QUnit.test( 'cloned collapsibles can be made collapsible again', 2, function ( assert ) {
                } );
 
                $clone.find( '.mw-collapsible-toggle a' ).trigger( 'click' );
-               test.clock.tick( 500 );
        } );
 }( mediaWiki, jQuery ) );
index 886e2b6..124c49f 100644 (file)
@@ -1,4 +1,3 @@
-/*jshint -W024 */
 ( function ( mw, $ ) {
        var repeat = function ( input, multiplier ) {
                return new Array( multiplier + 1 ).join( input );
                }, 'Throw error on empty string' );
        } );
 
-       QUnit.test( 'Case-sensivity', 3, function ( assert ) {
+       QUnit.test( 'Case-sensivity', 5, function ( assert ) {
                var title;
 
                // Default config
                title = new mw.Title( 'article' );
                assert.equal( title.toString(), 'Article', 'Default config: No sensitive namespaces by default. First-letter becomes uppercase' );
 
+               title = new mw.Title( 'ß' );
+               assert.equal( title.toString(), 'ß', 'Uppercasing matches PHP behaviour (ß -> ß, not SS)' );
+
+               title = new mw.Title( 'dž (digraph)' );
+               assert.equal( title.toString(), 'Dž_(digraph)', 'Uppercasing matches PHP behaviour (dž -> Dž, not DŽ)' );
+
                // $wgCapitalLinks = false;
                mw.config.set( 'wgCaseSensitiveNamespaces', [ 0, -2, 1, 4, 5, 6, 7, 10, 11, 12, 13, 14, 15 ] );
 
index b12803d..97185fc 100644 (file)
@@ -1,4 +1,3 @@
-/*jshint -W024 */
 ( function ( mw, $ ) {
        QUnit.module( 'mediawiki.Uri', QUnit.newMwEnvironment( {
                setup: function () {
index caaef83..1218137 100644 (file)
 
                assert.equal(
                        formatParse( 'uses-missing-int' ),
-                       '[doesnt-exist]',
+                       '⧼doesnt-exist⧽',
                        'int: where nested message does not exist'
                );
        } );
index 7233a2e..92d1326 100644 (file)
                } );
        } );
 
+       QUnit.test( '.using() Error: Circular dependency', function ( assert ) {
+               mw.loader.register( [
+                       [ 'test.circle1', '0', [ 'test.circle2' ] ],
+                       [ 'test.circle2', '0', [ 'test.circle3' ] ],
+                       [ 'test.circle3', '0', [ 'test.circle1' ] ]
+               ] );
+               mw.loader.using( 'test.circle3' ).then(
+                       function done() {
+                               assert.ok( false, 'Unexpected resolution, expected error.' );
+                       },
+                       function fail( e ) {
+                               assert.ok( /Circular/.test( String( e ) ), 'Detect circular dependency' );
+                       }
+               );
+       } );
+
+       QUnit.test( '.load() - Error: Circular dependency', function ( assert ) {
+               mw.loader.register( [
+                       [ 'test.circleA', '0', [ 'test.circleB' ] ],
+                       [ 'test.circleB', '0', [ 'test.circleC' ] ],
+                       [ 'test.circleC', '0', [ 'test.circleA' ] ]
+               ] );
+               assert.throws( function () {
+                       mw.loader.load( 'test.circleC' );
+               }, /Circular/, 'Detect circular dependency' );
+       } );
+
+       QUnit.test( '.using() - Error: Unregistered', function ( assert ) {
+               mw.loader.using( 'test.using.unreg' ).then(
+                       function done() {
+                               assert.ok( false, 'Unexpected resolution, expected error.' );
+                       },
+                       function fail( e ) {
+                               assert.ok( /Unknown/.test( String( e ) ), 'Detect unknown dependency' );
+                       }
+               );
+       } );
+
+       QUnit.test( '.load() - Error: Unregistered (ignored)', 0, function ( assert ) {
+               mw.loader.load( 'test.using.unreg2' );
+       } );
+
        QUnit.test( '.implement( styles={ "css": [text, ..] } )', 2, function ( assert ) {
                var $element = $( '<div class="mw-test-implement-a"></div>' ).appendTo( '#qunit-fixture' );
 
                assert.strictEqual( mw.track.callCount, 1 );
        } );
 
-       QUnit.test( 'Circular dependency', 1, function ( assert ) {
-               mw.loader.register( [
-                       [ 'test.circle1', '0', [ 'test.circle2' ] ],
-                       [ 'test.circle2', '0', [ 'test.circle3' ] ],
-                       [ 'test.circle3', '0', [ 'test.circle1' ] ]
-               ] );
-               assert.throws( function () {
-                       mw.loader.using( 'test.circle3' );
-               }, /Circular/, 'Detect circular dependency' );
-       } );
-
        QUnit.test( 'Out-of-order implementation', 9, function ( assert ) {
                mw.loader.register( [
                        [ 'test.module4', '0' ],
                mw.loader.load( target );
        } );
 
+       QUnit.test( 'Empty string module name - T28804', function ( assert ) {
+               var done = false;
+
+               assert.strictEqual( mw.loader.getState( '' ), null, 'State (unregistered)' );
+
+               mw.loader.register( '', 'v1' );
+               assert.strictEqual( mw.loader.getState( '' ), 'registered', 'State (registered)' );
+               assert.strictEqual( mw.loader.getVersion( '' ), 'v1', 'Version' );
+
+               mw.loader.implement( '', function () {
+                       done = true;
+               } );
+
+               return mw.loader.using( '', function () {
+                       assert.strictEqual( done, true, 'script ran' );
+                       assert.strictEqual( mw.loader.getState( '' ), 'ready', 'State (ready)' );
+               } );
+       } );
+
        QUnit.test( 'Executing race - T112232', 2, function ( assert ) {
                var done = false;
 
index 1518a80..bac8274 100644 (file)
@@ -1,4 +1,3 @@
-/*jshint -W024 */
 ( function ( mw ) {
        var specialCharactersPageName,
                // Can't mock SITENAME since jqueryMsg caches it at load
                goodbye = mw.message( 'goodbye' );
                assert.strictEqual( goodbye.exists(), false, 'Message.exists returns false for nonexistent messages' );
 
-               assertMultipleFormats( [ 'goodbye' ], [ 'plain', 'text' ], '<goodbye>', 'Message.toString returns <key> if key does not exist' );
-               // bug 30684
-               assertMultipleFormats( [ 'goodbye' ], [ 'parse', 'escaped' ], '&lt;goodbye&gt;', 'Message.toString returns properly escaped &lt;key&gt; if key does not exist' );
+               assertMultipleFormats( [ 'good<>bye' ], [ 'plain', 'text', 'parse', 'escaped' ], '⧼good&lt;&gt;bye⧽', 'Message.toString returns ⧼key⧽ if key does not exist' );
 
                assert.ok( mw.messages.set( 'plural-test-msg', 'There {{PLURAL:$1|is|are}} $1 {{PLURAL:$1|result|results}}' ), 'mw.messages.set: Register' );
                assertMultipleFormats( [ 'plural-test-msg', 6 ], [ 'text', 'parse', 'escaped' ], 'There are 6 results', 'plural get resolved' );
        QUnit.test( 'mw.msg', 14, function ( assert ) {
                assert.ok( mw.messages.set( 'hello', 'Hello <b>awesome</b> world' ), 'mw.messages.set: Register' );
                assert.equal( mw.msg( 'hello' ), 'Hello <b>awesome</b> world', 'Gets message with default options (existing message)' );
-               assert.equal( mw.msg( 'goodbye' ), '<goodbye>', 'Gets message with default options (nonexistent message)' );
+               assert.equal( mw.msg( 'goodbye' ), '⧼goodbye⧽', 'Gets message with default options (nonexistent message)' );
 
                assert.ok( mw.messages.set( 'plural-item', 'Found $1 {{PLURAL:$1|item|items}}' ), 'mw.messages.set: Register' );
                assert.equal( mw.msg( 'plural-item', 5 ), 'Found 5 items', 'Apply plural for count 5' );